Best Python code snippet using elementium_python
ecl_region.py
Source:ecl_region.py  
1#  Copyright (C) 2011  Equinor ASA, Norway.2#3#  The file 'ecl_region.py' is part of ERT - Ensemble based Reservoir Tool.4#5#  ERT is free software: you can redistribute it and/or modify6#  it under the terms of the GNU General Public License as published by7#  the Free Software Foundation, either version 3 of the License, or8#  (at your option) any later version.9#10#  ERT is distributed in the hope that it will be useful, but WITHOUT ANY11#  WARRANTY; without even the implied warranty of MERCHANTABILITY or12#  FITNESS FOR A PARTICULAR PURPOSE.13#14#  See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>15#  for more details.16"""17Module used to select cells based on many different criteria.18This module implements the class EclRegion which can be used to select19cells in a grid matching a criteria. A wide range of different20criteria are supported. Many of the special functions for implementing21mathematical operations are implemented, so that regions can be22combined e.g. with logical &.23When the selection process is complete the region instance can be24queried for the corresponding list of indices.25"""26import ctypes27from cwrap import BaseCClass28import ecl29from ecl.util.util import monkey_the_camel30from ecl.util.util import IntVector31from ecl import EclPrototype32from ecl.grid.faults import Layer33from ecl import EclDataType34from ecl.eclfile import EclKW35from ecl.util.geometry import CPolyline36def select_method(select):37    """38    The select_method method decorator is applied to all the39    select_xxx() methods. The purpose of this decorator is to40    allow the select_xxx() methods to have an optional argument41    @intersect. If the @intersect argument is True the results of42    the current select method will be and'ed with the current43    selection, instead of or'ed which is the default.44    Consider this example:45       region = EclRegion( grid , False )46       region.select_islice(0 , 5)     # Selects all cells with i:[0:5]47       region.select_jslice(0 , 5)     # Selects all cells with j:[0:5]48    When these two calls have completed selection will contain all49    the cells which are either in i-interval [0:5] or in50    j-interval [0:5]. If we supply the @intersect argument in the51    second call the j selection will only be applied to the cells52    in i:[0:5] interval:53       region = EclRegion( grid , False )54       region.select_islice(0 , 5)     # Selects all cells with i:[0:5]55       region.select_jslice(0 , 5)     # Selects all cells with j:[0:5] AND i:[0:5]56    """57    def select_wrapper(self , *args ,  **kwargs):58        intersect = 'intersect' in kwargs and kwargs['intersect']59        if intersect:60            new_region = EclRegion( self.grid , False )61            select(new_region , *args )62            self &= new_region63        else:64            select(self , *args )65    return select_wrapper66class EclRegion(BaseCClass):67    TYPE_NAME = "ecl_region"68    _alloc                      = EclPrototype("void* ecl_region_alloc( ecl_grid , bool )", bind = False)69    _alloc_copy                 = EclPrototype("ecl_region_obj ecl_region_alloc_copy( ecl_region )")70    _set_kw_int                 = EclPrototype("void ecl_region_set_kw_int( ecl_region , ecl_kw , int, bool) ")71    _set_kw_float               = EclPrototype("void ecl_region_set_kw_float( ecl_region , ecl_kw , float, bool ) ")72    _set_kw_double              = EclPrototype("void ecl_region_set_kw_double( ecl_region , ecl_kw , double , bool) ")73    _shift_kw_int               = EclPrototype("void ecl_region_shift_kw_int( ecl_region , ecl_kw , int, bool) ")74    _shift_kw_float             = EclPrototype("void ecl_region_shift_kw_float( ecl_region , ecl_kw , float, bool ) ")75    _shift_kw_double            = EclPrototype("void ecl_region_shift_kw_double( ecl_region , ecl_kw , double , bool) ")76    _scale_kw_int               = EclPrototype("void ecl_region_scale_kw_int( ecl_region , ecl_kw , int, bool) ")77    _scale_kw_float             = EclPrototype("void ecl_region_scale_kw_float( ecl_region , ecl_kw , float, bool ) ")78    _scale_kw_double            = EclPrototype("void ecl_region_scale_kw_double( ecl_region , ecl_kw , double , bool) ")79    _sum_kw_int                 = EclPrototype("int ecl_region_sum_kw_int( ecl_region , ecl_kw , bool) ")80    _sum_kw_float               = EclPrototype("float ecl_region_sum_kw_float( ecl_region , ecl_kw , bool ) ")81    _sum_kw_double              = EclPrototype("double ecl_region_sum_kw_double( ecl_region , ecl_kw , bool) ")82    _sum_kw_bool                = EclPrototype("int ecl_region_sum_kw_int( ecl_region , ecl_kw , bool) ")83    _free                       = EclPrototype("void ecl_region_free( ecl_region )")84    _reset                      = EclPrototype("void ecl_region_reset( ecl_region )")85    _select_all                 = EclPrototype("void ecl_region_select_all( ecl_region )")86    _deselect_all               = EclPrototype("void ecl_region_deselect_all( ecl_region )")87    _select_equal               = EclPrototype("void ecl_region_select_equal( ecl_region , ecl_kw , int )")88    _deselect_equal             = EclPrototype("void ecl_region_deselect_equal( ecl_region , ecl_kw , int)")89    _select_less                = EclPrototype("void ecl_region_select_smaller( ecl_region , ecl_kw , float )")90    _deselect_less              = EclPrototype("void ecl_region_deselect_smaller( ecl_region , ecl_kw , float )")91    _select_more                = EclPrototype("void ecl_region_select_larger( ecl_region , ecl_kw , float )")92    _deselect_more              = EclPrototype("void ecl_region_deselect_larger( ecl_region , ecl_kw , float )")93    _select_in_interval         = EclPrototype("void ecl_region_select_in_interval( ecl_region, ecl_kw , float , float )")94    _deselect_in_interval       = EclPrototype("void ecl_region_deselect_in_interval( ecl_region, ecl_kw, float , float )")95    _invert_selection           = EclPrototype("void ecl_region_invert_selection( ecl_region )")96    _select_box                 = EclPrototype("void ecl_region_select_from_ijkbox(ecl_region , int , int , int , int , int , int)")97    _deselect_box               = EclPrototype("void ecl_region_deselect_from_ijkbox(ecl_region , int , int , int , int , int , int)")98    _imul_kw                    = EclPrototype("void  ecl_region_kw_imul( ecl_region , ecl_kw , ecl_kw , bool)")99    _idiv_kw                    = EclPrototype("void  ecl_region_kw_idiv( ecl_region , ecl_kw , ecl_kw , bool)")100    _iadd_kw                    = EclPrototype("void  ecl_region_kw_iadd( ecl_region , ecl_kw , ecl_kw , bool)")101    _isub_kw                    = EclPrototype("void  ecl_region_kw_isub( ecl_region , ecl_kw , ecl_kw , bool)")102    _copy_kw                    = EclPrototype("void  ecl_region_kw_copy( ecl_region , ecl_kw , ecl_kw , bool)")103    _intersect                  = EclPrototype("void ecl_region_intersection( ecl_region , ecl_region )")104    _combine                    = EclPrototype("void ecl_region_union( ecl_region , ecl_region )")105    _subtract                   = EclPrototype("void ecl_region_subtract( ecl_region , ecl_region )")106    _xor                        = EclPrototype("void ecl_region_xor( ecl_region , ecl_region )")107    _get_kw_index_list          = EclPrototype("int_vector_ref ecl_region_get_kw_index_list( ecl_region , ecl_kw , bool )")108    _get_active_list            = EclPrototype("int_vector_ref ecl_region_get_active_list( ecl_region )")109    _get_global_list            = EclPrototype("int_vector_ref ecl_region_get_global_list( ecl_region )")110    _get_active_global          = EclPrototype("int_vector_ref ecl_region_get_global_active_list( ecl_region )")111    _select_cmp_less            = EclPrototype("void ecl_region_cmp_select_less( ecl_region , ecl_kw , ecl_kw)")112    _select_cmp_more            = EclPrototype("void ecl_region_cmp_select_more( ecl_region , ecl_kw , ecl_kw)")113    _deselect_cmp_less          = EclPrototype("void ecl_region_cmp_deselect_less( ecl_region , ecl_kw , ecl_kw)")114    _deselect_cmp_more          = EclPrototype("void ecl_region_cmp_deselect_more( ecl_region , ecl_kw , ecl_kw)")115    _select_islice              = EclPrototype("void ecl_region_select_i1i2( ecl_region , int , int )")116    _deselect_islice            = EclPrototype("void ecl_region_deselect_i1i2( ecl_region , int , int )")117    _select_jslice              = EclPrototype("void ecl_region_select_j1j2( ecl_region , int , int )")118    _deselect_jslice            = EclPrototype("void ecl_region_deselect_j1j2( ecl_region , int , int )")119    _select_kslice              = EclPrototype("void ecl_region_select_k1k2( ecl_region , int , int )")120    _deselect_kslice            = EclPrototype("void ecl_region_deselect_k1k2( ecl_region , int , int )")121    _select_deep_cells          = EclPrototype("void ecl_region_select_deep_cells( ecl_region , double )")122    _deselect_deep_cells        = EclPrototype("void ecl_region_select_deep_cells( ecl_region , double )")123    _select_shallow_cells       = EclPrototype("void ecl_region_select_shallow_cells( ecl_region , double )")124    _deselect_shallow_cells     = EclPrototype("void ecl_region_select_shallow_cells( ecl_region , double )")125    _select_small               = EclPrototype("void ecl_region_select_small_cells( ecl_region , double )")126    _deselect_small             = EclPrototype("void ecl_region_deselect_small_cells( ecl_region , double )")127    _select_large               = EclPrototype("void ecl_region_select_large_cells( ecl_region , double )")128    _deselect_large             = EclPrototype("void ecl_region_deselect_large_cells( ecl_region , double )")129    _select_thin                = EclPrototype("void ecl_region_select_thin_cells( ecl_region , double )")130    _deselect_thin              = EclPrototype("void ecl_region_deselect_thin_cells( ecl_region , double )")131    _select_thick               = EclPrototype("void ecl_region_select_thick_cells( ecl_region , double )")132    _deselect_thick             = EclPrototype("void ecl_region_deselect_thick_cells( ecl_region , double )")133    _select_active              = EclPrototype("void ecl_region_select_active_cells( ecl_region )")134    _select_inactive            = EclPrototype("void ecl_region_select_inactive_cells( ecl_region )")135    _deselect_active            = EclPrototype("void ecl_region_deselect_active_cells( ecl_region )")136    _deselect_inactive          = EclPrototype("void ecl_region_deselect_inactive_cells( ecl_region )")137    _select_above_plane         = EclPrototype("void ecl_region_select_above_plane( ecl_region  , double* , double* )")138    _select_below_plane         = EclPrototype("void ecl_region_select_below_plane( ecl_region  , double* , double* )")139    _deselect_above_plane       = EclPrototype("void ecl_region_deselect_above_plane( ecl_region, double* , double* )")140    _deselect_below_plane       = EclPrototype("void ecl_region_deselect_below_plane( ecl_region, double* , double* )")141    _select_inside_polygon      = EclPrototype("void ecl_region_select_inside_polygon( ecl_region , geo_polygon)")142    _select_outside_polygon     = EclPrototype("void ecl_region_select_outside_polygon( ecl_region , geo_polygon)")143    _deselect_inside_polygon    = EclPrototype("void ecl_region_deselect_inside_polygon( ecl_region , geo_polygon)")144    _deselect_outside_polygon   = EclPrototype("void ecl_region_deselect_outside_polygon( ecl_region , geo_polygon)")145    _set_name                   = EclPrototype("void ecl_region_set_name( ecl_region , char*)")146    _get_name                   = EclPrototype("char* ecl_region_get_name( ecl_region )")147    _contains_ijk               = EclPrototype("void ecl_region_contains_ijk( ecl_region , int , int , int)")148    _contains_global            = EclPrototype("void ecl_region_contains_global( ecl_region, int )")149    _contains_active            = EclPrototype("void ecl_region_contains_active( ecl_region , int )")150    _equal                      = EclPrototype("bool ecl_region_equal( ecl_region , ecl_region )")151    _select_true                = EclPrototype("void ecl_region_select_true( ecl_region , ecl_kw)")152    _select_false               = EclPrototype("void ecl_region_select_false( ecl_region , ecl_kw)")153    _deselect_true              = EclPrototype("void ecl_region_deselect_true( ecl_region , ecl_kw)")154    _deselect_false             = EclPrototype("void ecl_region_deselect_false( ecl_region , ecl_kw)")155    _select_from_layer          = EclPrototype("void ecl_region_select_from_layer( ecl_region , layer , int , int)")156    _deselect_from_layer        = EclPrototype("void ecl_region_deselect_from_layer( ecl_region , layer , int , int)")157    def __init__(self , grid , preselect):158        """159        Create a new region selector for cells in @grid.160        Will create a new region selector to select and deselect the161        cells in the grid given by @grid. The input argument @grid162        should be a EclGrid instance. You can start with either all163        cells, or no cells, selected, depending on the value of164        @preselect.165        """166        self.grid = grid167        self.active_index = False168        c_ptr = self._alloc( grid , preselect )169        super(EclRegion , self).__init__( c_ptr )170    def free(self):171        self._free( )172    def __eq__(self , other):173        return self._equal(other)174    def __hash__(self):175        return hash(hash(self.grid) + hash(self.active_index))176    def __deep_copy__(self , memo):177        """178        Creates a deep copy of the current region.179        """180        return self._alloc_copy( )181    def __nonzero__(self):182        global_list = self.get_global_list()183        return len(global_list) > 0184    def __bool__(self):185        return self.__nonzero__()186    def __iand__(self , other):187        """188        Will perform set intersection operation inplace.189        Will update the current region selection so that the elements190        selected in self are also selected in @other. Bound to the191        inplace & operator, i.e.192           reg1 &= reg2193        will eventually call this method.194        """195        if isinstance(other , EclRegion):196            self._intersect(  other)197        else:198            raise TypeError("Ecl region can only intersect with other EclRegion instances")199        return self200    def __isub__(self , other):201        """202        Inplace "subtract" one selection from another.203        Bound to reg -= reg2204        """205        if isinstance( other , EclRegion ):206            self._subtract(   other)207        else:208            raise TypeError("Ecl region can only subtract with other EclRegion instances")209        return self210    def __ior__(self , other):211        """212        Will perform set operation union in place.213        The current region selection will be updated to contain all214        the elements which are selected either in the current region,215        or in @other; bound to to inplace | operator, so you can write e.g.216            reg1 |= reg2217        to update reg1 with the selections from reg2.218        """219        if isinstance( other , EclRegion):220            self._combine(  other)221        else:222            raise TypeError("Ecl region can only be combined with other EclRegion instances")223        return self224    def __iadd__(self , other):225        """226        Combines to regions - see __ior__().227        """228        return self.__ior__( other )229    def __or__(self , other):230        """231        Creates a new region which is the union of @self and other.232        The method will create a new region which selection status is233        given by the logical or of regions @self and @other; the two234        initial regions will not be modified. Bound to the unary |235        operator:236            new_reg = reg1 | reg2237        """238        new_region = self.copy()239        new_region.__ior__( other )240        return new_region241    def __and__(self , other):242        """243        Creates a new region which is the intersection of @self and other.244        The method will create a new region which selection status is245        given by the logical and of regions @self and @other; the two246        initial regions will not be modified. Bound to the unary &247        operator:248            new_reg = reg1 & reg2249        """250        new_region = self.copy()251        new_region.__iand__( other )252        return new_region253    def __add__(self , other):254        """255        Unary add operator for two regions - implemented by __or__().256        """257        return self.__or__( other )258    def __sub__( self, other):259        """260        Unary del operator for two regions.261        """262        new_region = self.copy()263        new_region.__isub__( other )264        return new_region265    def union_with( self, other):266        """267        Will update self with the union of @self and @other.268        See doscumentation of __ior__().269        """270        return self.__ior__( other )271    def intersect_with( self, other):272        """273        Will update self with the intersection of @self and @other.274        See doscumentation of __iand__().275        """276        return self.__iand__( other )277    def copy( self ):278        return self.__deep_copy__( {} )279    def reset(self):280        """281        Clear selections according to constructor argument @preselect.282        Will clear all selections, depending on the value of the283        constructor argument @preselect. If @preselect is true284        everything will be selected after calling reset(), otherwise285        no cells will be selected after calling reset().286        """287        self._reset(  )288    ##################################################################289    @select_method290    def select_more( self , ecl_kw , limit , intersect = False):291        """292        Select all cells where keyword @ecl_kw is above @limit.293        This method is used to select all the cells where an arbitrary294        field, contained in @ecl_kw, is above a limiting value295        @limit. The EclKW instance must have either nactive or296        nx*ny*nz elements; if this is not satisfied method will fail297        hard. The datatype of @ecl_kw must be numeric,298        i.e. ECL_INT_TYPE, ECL_DOUBLE_TYPE or ECL_FLOAT_TYPE. In the299        example below we select all the cells with water saturation300        above 0.85:301           restart_file = ecl.EclFile( "ECLIPSE.X0067" )302           swat_kw = restart_file["SWAT"][0]303           grid = ecl.EclGrid( "ECLIPSE.EGRID" )304           region = ecl.EclRegion( grid , False )305           region.select_more( swat_kw , 0.85 )306        """307        self._select_more( ecl_kw , limit )308    def deselect_more( self , ecl_kw , limit):309        """310        Deselects cells with value above limit.311        See select_more() for further documentation.312        """313        self._deselect_more( ecl_kw , limit )314    @select_method315    def select_less( self , ecl_kw , limit , intersect = False):316        """317        Select all cells where keyword @ecl_kw is below @limit.318        See select_more() for further documentation.319        """320        self._select_less( ecl_kw , limit )321    def deselect_less( self , ecl_kw , limit):322        """323        Deselect all cells where keyword @ecl_kw is below @limit.324        See select_more() for further documentation.325        """326        self._deselect_less( ecl_kw , limit )327    @select_method328    def select_equal( self , ecl_kw , value , intersect = False):329        """330        Select all cells where @ecl_kw is equal to @value.331        The EclKW instance @ecl_kw must be of size nactive or332        nx*ny*nz, and it must be of integer type; testing for equality333        is not supported for floating point numbers. In the example334        below we select all the cells in PVT regions 2 and 4:335           init_file = ecl.EclFile( "ECLIPSE.INIT" )336           pvtnum_kw = init_file.iget_named_kw( "PVTNUM" , 0 )337           grid = ecl.EclGrid( "ECLIPSE.GRID" )338           region = ecl.EclRegion( grid , False )339           region.select_equal( pvtnum_kw , 2 )340           region.select_equal( pvtnum_kw , 4 )341        """342        if not ecl_kw.data_type.is_int():343            raise ValueError("The select_equal method must have an integer valued keyword - got:%s" % ecl_kw.typeName( ))344        self._select_equal( ecl_kw , value )345    def deselect_equal( self , ecl_kw , value ):346        """347        Select all cells where @ecl_kw is equal to @value.348        See select_equal() for further documentation.349        """350        if not ecl_kw.data_type.is_int():351            raise ValueError("The select_equal method must have an integer valued keyword - got:%s" % ecl_kw.typeName( ))352        self._deselect_equal( ecl_kw , value )353    @select_method354    def select_in_range( self , ecl_kw , lower_limit , upper_limit , select = False):355        """356        Select all cells where @ecl_kw is in the half-open interval [ , ).357        Will select all the cells where EclKW instance @ecl_kw has358        value in the half-open interval [@lower_limit ,359        @upper_limit). The input argument @ecl_kw must have size360        nactive or nx*ny*nz, and it must be of type ECL_FLOAT_TYPE.361        The following example will select all cells with porosity in362        the range [0.15,0.20):363           init_file = ecl.EclFile( "ECLIPSE.INIT" )364           poro_kw = init_file.iget_named_kw( "PORO" , 0 )365           grid = ecl.EclGrid( "ECLIPSE.GRID" )366           region = ecl.EclRegion( grid , False )367           region.select_in_range( poro_kw , 0.15, 0.20 )368        """369        self._select_in_interval( ecl_kw , lower_limit , upper_limit)370    def deselect_in_range( self , ecl_kw , lower_limit , upper_limit):371        """372        Deselect all cells where @ecl_kw is in the half-open interval [ , ).373        See select_in_range() for further documentation.374        """375        self._deselect_in_interval( ecl_kw , lower_limit , upper_limit)376    @select_method377    def select_cmp_less( self , kw1 , kw2 , intersect = False):378        """379        Will select all cells where kw2 < kw1.380        Will compare the ECLIPSE keywords @kw1 and @kw2, and select381        all the cells where the numerical value of @kw1 is less than382        the numerical value of @kw2. The ECLIPSE keywords @kw1 and383        @kw2 must both be of the same size, nactive or nx*ny*nz. In384        addition they must both be of type type ECL_FLOAT_TYPE. In the385        example below we select all the cells where the pressure has386        dropped:387           restart_file = ecl.EclFile("ECLIPSE.UNRST")388           pressure1 = restart_file.iget_named_kw( "PRESSURE" , 0)389           pressure2 = restart_file.iget_named_kw( "PRESSURE" , 100)390           region.select_cmp_less( pressure2 , pressure1)391        """392        self._select_cmp_less( kw1 , kw2 )393    def deselect_cmp_less( self , kw1 , kw2):394        """395        Will deselect all cells where kw2 < kw1.396        See select_cmp_less() for further documentation.397        """398        self._deselect_cmp_less( kw1 , kw2 )399    @select_method400    def select_cmp_more( self , kw1 , kw2 , intersect = False):401        """402        Will select all cells where kw2 > kw1.403        See select_cmp_less() for further documentation.404        """405        self._select_cmp_more( kw1 , kw2 )406    def deselect_cmp_more( self , kw1 , kw2):407        """408        Will deselect all cells where kw2 > kw1.409        See select_cmp_less() for further documentation.410        """411        self._deselect_cmp_more( kw1 , kw2 )412    @select_method413    def select_active( self , intersect = False):414        """415        Will select all the active grid cells.416        """417        self._select_active(  )418    def deselect_active( self ):419        """420        Will deselect all the active grid cells.421        """422        self._deselect_active(  )423    @select_method424    def select_inactive( self , intersect = False):425        """426        Will select all the inactive grid cells.427        """428        self._select_inactive(  )429    def deselect_inactive( self ):430        """431        Will deselect all the inactive grid cells.432        """433        self._deselect_inactive( )434    def select_all( self ):435        """436        Will select all the cells.437        """438        self._select_all( )439    def deselect_all( self ):440        """441        Will deselect all the cells.442        """443        self._deselect_all( )444    def clear( self ):445        """446        Will deselect all cells.447        """448        self.deselect_all()449    @select_method450    def select_deep( self , depth , intersect = False):451        """452        Will select all cells below @depth.453        """454        self._select_deep_cells(depth)455    def deselect_deep( self, depth):456        """457        Will deselect all cells below @depth.458        """459        self._deselect_deep_cells(depth)460    @select_method461    def select_shallow( self, depth , intersect = False):462        """463        Will select all cells above @depth.464        """465        self._select_shallow_cells(depth)466    def deselect_shallow( self, depth):467        """468        Will deselect all cells above @depth.469        """470        self._deselect_shallow_cells(depth)471    @select_method472    def select_small( self , size_limit , intersect = False):473        """474        Will select all cells smaller than @size_limit.475        """476        self._select_small( size_limit )477    def deselect_small( self , size_limit ):478        """479        Will deselect all cells smaller than @size_limit.480        """481        self._deselect_small( size_limit )482    @select_method483    def select_large( self , size_limit , intersect = False):484        """485        Will select all cells larger than @size_limit.486        """487        self._select_large( size_limit )488    def deselect_large( self , size_limit ):489        """490        Will deselect all cells larger than @size_limit.491        """492        self._deselect_large( size_limit )493    @select_method494    def select_thin( self , size_limit , intersect = False):495        """496        Will select all cells thinner than @size_limit.497        """498        self._select_thin( size_limit )499    def deselect_thin( self , size_limit ):500        """501        Will deselect all cells thinner than @size_limit.502        """503        self._deselect_thin( size_limit )504    @select_method505    def select_thick( self , size_limit , intersect = False):506        """507        Will select all cells thicker than @size_limit.508        """509        self._select_thick( size_limit )510    def deselect_thick( self , size_limit ):511        """512        Will deselect all cells thicker than @size_limit.513        """514        self._deselect_thick( size_limit )515    @select_method516    def select_box( self , ijk1 , ijk2 , intersect = False):517        """518        Will select all cells in box.519        Will select all the the cells in the box given by @ijk1 and520        @ijk2. The two arguments @ijk1 and @ijk2 are tuples (1,j,k)521        representing two arbitrary - diagonally opposed corners - of a522        box. All the elements in @ijk1 and @ijk2 are inclusive, i.e.523           select_box( (10,12,8) , (8 , 16,4) )524        will select the box defined by [8,10] x [12,16] x [4,8].525        """526        self._select_box( ijk1[0] , ijk2[0] , ijk1[1] , ijk2[1] , ijk1[2] , ijk2[2])527    def deselect_box( self , ijk1 , ijk2 ):528        """529        Will deselect all elements in box.530        See select_box() for further documentation.531        """532        self._deselect_box( ijk1[0] , ijk2[0] , ijk1[1] , ijk2[1] , ijk1[2] , ijk2[2])533    @select_method534    def select_islice( self , i1 , i2, intersect = False):535        """536        Will select all cells with i in [@i1, @i2]. @i1 and @i2 are zero offset.537        """538        self._select_islice( i1,i2)539    def deselect_islice( self , i1 , i2):540        """541        Will deselect all cells with i in [@i1, @i2]. @i1 and @i2 are zero offset.542        """543        self._deselect_islice( i1,i2)544    @select_method545    def select_jslice( self , j1 , j2 , intersect = False):546        """547        Will select all cells with j in [@j1, @j2]. @i1 and @i2 are zero offset.548        """549        self._select_jslice( j1,j2)550    def deselect_jslice( self , j1 , j2):551        """552        Will deselect all cells with j in [@j1, @j2]. @i1 and @i2 are zero offset.553        """554        self._deselect_jslice( j1,j2)555    @select_method556    def select_kslice( self , k1 , k2 , intersect = False):557        """558        Will select all cells with k in [@k1, @k2]. @i1 and @i2 are zero offset.559        """560        self._select_kslice( k1,k2)561    def deselect_kslice( self , k1 , k2):562        """563        Will deselect all cells with k in [@k1, @k2]. @i1 and @i2 are zero offset.564        """565        self._deselect_kslice( k1,k2)566    def invert( self ):567        """568        Will invert the current selection.569        """570        self._invert_selection(  )571    def __init_plane_select( self , n , p ):572        n_vec = ctypes.cast( (ctypes.c_double * 3)() , ctypes.POINTER( ctypes.c_double ))573        p_vec = ctypes.cast( (ctypes.c_double * 3)() , ctypes.POINTER( ctypes.c_double ))574        for i in range(3):575            n_vec[i] = n[i]576            p_vec[i] = p[i]577        return ( n_vec , p_vec )578    @select_method579    def select_above_plane( self , n , p , intersect = False):580        """581        Will select all the cells 'above' the plane defined by n & p.582        @n is the surface normal vector of the plane in question and583        @p is a point on the plane surface. The point @p should be584        given in (utm_x , utm_y , tvd) coordinates. The term 'above'585        means that the cell center has a positive distance to the586        plain; correspondingly 'below' means that the cell center has587        a negative disatnce to the plane.588        """589        (n_vec , p_vec) = self.__init_plane_select( n , p )590        self._select_above_plane( n_vec , p_vec )591    @select_method592    def select_below_plane( self , n , p , interscet = False):593        """594        Will select all the cells 'below' the plane defined by n & p.595        See method 'select_above_plane' for further documentation.596        """597        (n_vec , p_vec) = self.__init_plane_select( n , p )598        self._select_below_plane( n_vec , p_vec )599    def deselect_above_plane( self , n , p):600        """601        Will deselect all the cells 'above' the plane defined by n & p.602        See method 'select_above_plane' for further documentation.603        """604        (n_vec , p_vec) = self.__init_plane_select( n , p )605        self._deselect_above_plane( n_vec , p_vec )606    def deselect_below_plane( self , n , p):607        """608        Will deselect all the cells 'below' the plane defined by n & p.609        See method 'select_above_plane' for further documentation.610        """611        (n_vec , p_vec) = self.__init_plane_select( n , p )612        self._deselect_below_plane( n_vec , p_vec )613    @select_method614    def select_inside_polygon( self , points , intersect = False):615        """616        Will select all points inside polygon.617        Will select all points inside polygon specified by input618        variable @points. Points should be a list of two-element619        tuples (x,y). So to select all the points within the rectangle620        bounded by the lower left rectangle (0,0) and upper right621        (100,100) the @points list should be:622           points = [(0,0) , (0,100) , (100,100) ,  (100,0)]623        The elements in the points list should be (utm_x, utm_y)624        values. These values will be compared with the centerpoints of625        the cells in the grid. The selection is based the top k=0626        layer, and then extending this selection to all k values; this627        implies that the selection polygon will effectively be628        translated if the pillars are not vertical.629        """630        self._select_inside_polygon( CPolyline( init_points = points ))631    @select_method632    def select_outside_polygon( self , points , intersect = False):633        """634        Will select all points outside polygon.635        See select_inside_polygon for more docuemntation.636        """637        self._select_outside_polygon( CPolyline( init_points = points ))638    def deselect_inside_polygon( self , points ):639        """640        Will select all points outside polygon.641        See select_inside_polygon for more docuemntation.642        """643        self._deselect_inside_polygon( CPolyline( init_points = points ))644    def deselect_outside_polygon( self , points ):645        """646        Will select all points outside polygon.647        See select_inside_polygon for more docuemntation.648        """649        self._deselect_outside_polygon( CPolyline( init_points = points ))650    @select_method651    def select_true( self , ecl_kw , intersect = False):652        """653        Assume that input ecl_kw is a boolean mask.654        """655        self._select_true( ecl_kw )656    @select_method657    def select_false( self , ecl_kw , intersect = False):658        """659        Assume that input ecl_kw is a boolean mask.660        """661        self._select_false( ecl_kw )662    @select_method663    def select_from_layer(self , layer , k , value, intersect = False):664        """Will select all the cells in in @layer with value @value - at665        vertical coordinate @k.666        The input @layer should be of type Layer - from the667        ecl.ecl.faults.layer module. The k value must in the range668        [0,grid.nz) and the dimensions of the layer must correspond669        exactly to nx,ny of the grid.670        """671        grid = self.grid672        if k < 0 or k >= grid.getNZ():673            raise ValueError("Invalid k value:%d - must be in range [0,%d)" % (k , grid.getNZ()))674        if grid.getNX() != layer.getNX():675            raise ValueError("NX dimension mismatch. Grid:%d  layer:%d" % (grid.getNX() , layer.getNX()))676        if grid.getNY() != layer.getNY():677            raise ValueError("NY dimension mismatch. Grid:%d  layer:%d" % (grid.getNY() , layer.getNY()))678        self._select_from_layer( layer , k , value )679    #################################################################680    def scalar_apply_kw( self , target_kw , scalar , func_dict , force_active = False):681        """682        Helper function to apply a function with one scalar arg on target_kw.683        """684        data_type = target_kw.data_type685        if data_type in func_dict:686            func = func_dict[ data_type ]687            func( target_kw, scalar , force_active )688        else:689            raise Exception("scalar_apply_kw() only supported for INT/FLOAT/DOUBLE")690    def iadd_kw( self , target_kw , delta_kw , force_active = False):691        """692        The functions iadd_kw(), copy_kw(), set_kw(), scale_kw() and693        shift_kw() are not meant to be used as methods of the694        EclRegion class (altough that is of course perfectly OK) -695        rather a EclRegion instance is passed as an argument to an696        EclKW method, and then that method "flips things around" and697        calls one of these methods with the EclKW instance as698        argument. This applies to all the EclKW methods which take an699        optional "mask" argument.700        """701        if isinstance(delta_kw , EclKW):702            if target_kw.assert_binary( delta_kw ):703                self._iadd_kw( target_kw , delta_kw , force_active )704            else:705                raise TypeError("Type mismatch")706        else:707            self.shift_kw( target_kw , delta_kw , force_active = force_active)708    def shift_kw( self , ecl_kw , shift , force_active = False):709        """710        See usage documentation on iadd_kw().711        """712        self.scalar_apply_kw( ecl_kw , shift , {EclDataType.ECL_INT    : self._shift_kw_int,713                                                EclDataType.ECL_FLOAT  : self._shift_kw_float ,714                                                EclDataType.ECL_DOUBLE : self._shift_kw_double} , force_active)715    def isub_kw( self , target_kw , delta_kw , force_active = False):716        if isinstance(delta_kw , EclKW):717            if target_kw.assert_binary( delta_kw ):718                self._isub_kw( target_kw , delta_kw , force_active )719            else:720                raise TypeError("Type mismatch")721        else:722            self.shift_kw( target_kw , -delta_kw , force_active = force_active)723    def scale_kw( self , ecl_kw , scale , force_active = False):724        """725        See usage documentation on iadd_kw().726        """727        self.scalar_apply_kw( ecl_kw , scale , {EclDataType.ECL_INT    : self._scale_kw_int,728                                                EclDataType.ECL_FLOAT  : self._scale_kw_float ,729                                                EclDataType.ECL_DOUBLE : self._scale_kw_double} , force_active)730    def imul_kw(self, target_kw , other , force_active = False):731        if isinstance(other , EclKW):732            if target_kw.assert_binary( other):733                self._imul_kw( target_kw , other )734            else:735                raise TypeError("Type mismatch")736        else:737            self.scale_kw( target_kw , other , force_active )738    def idiv_kw( self , target_kw , other , force_active = False):739        if isinstance(other , EclKW):740            if target_kw.assert_binary( other):741                self._idiv_kw( target_kw , other )742            else:743                raise TypeError("Type mismatch")744        else:745            if target_kw.data_type.is_int():746                scale = 1 // other747            else:748                scale = 1.0 / other749            self.scale_kw( target_kw , scale , force_active )750    def copy_kw( self , target_kw , src_kw , force_active = False):751        """752        See usage documentation on iadd_kw().753        """754        if target_kw.assert_binary( src_kw ):755            self._copy_kw( target_kw , src_kw , force_active )756        else:757            raise TypeError("Type mismatch")758    def set_kw( self , ecl_kw , value , force_active = False):759        """760        See usage documentation on iadd_kw().761        """762        self.scalar_apply_kw( ecl_kw , value , {EclDataType.ECL_INT    : self._set_kw_int,763                                                EclDataType.ECL_FLOAT  : self._set_kw_float ,764                                                EclDataType.ECL_DOUBLE : self._set_kw_double} , force_active)765    def sum_kw(self, kw, force_active = False):766        data_type = kw.data_type767        if data_type == EclDataType.ECL_FLOAT:768            return self._sum_kw_float( kw, force_active )769        if data_type == EclDataType.ECL_INT:770            return self._sum_kw_int( kw, force_active )771        if data_type == EclDataType.ECL_DOUBLE:772            return self._sum_kw_double( kw, force_active )773        if data_type == EclDataType.ECL_BOOL:774            return self._sum_kw_bool( kw, force_active )775        raise ValueError("sum_kw only supported for; INT/FLOAT/DOUBLE/BOOL")776    #################################################################777    def ecl_region_instance(self):778        """779        Helper function (attribute) to support run-time typechecking.780        """781        return True782    def active_size(self):783        return len(self._get_active_list())784    def global_size(self):785        return len(self._get_global_list())786    def get_active_list(self):787        """788        IntVector instance with active indices in the region.789        """790        active_list = self._get_active_list()791        active_list.setParent(self)792        return active_list793    def get_global_list(self):794        """795        IntVector instance with global indices in the region.796        """797        global_list = self._get_global_list()798        global_list.setParent(self)799        return global_list800    def get_ijk_list(self):801        """802        WIll return a Python list of (ij,k) tuples for the region.803        """804        global_list = self.getGlobalList()805        ijk_list = []806        for g in global_list:807            ijk_list.append( self.grid.get_ijk( global_index = g ) )808        return ijk_list809    def contains_ijk( self , i,j,k):810        """811        Will check if the cell given by i,j,k is part of the region.812        """813        return self._contains_ijk( i , j , k )814    def contains_global( self , global_index):815        """816        Will check if the cell given by @global_index is part of the region.817        """818        return self._contains_global( global_index )819    def contains_active( self , active_index):820        """821        Will check if the cell given by @active_index is part of the region.822        """823        return self._contains_active( active_index )824    def kw_index_list(self , ecl_kw , force_active):825        c_ptr = self._get_kw_index_list( ecl_kw , force_active)826        index_list = IntVector.createCReference( c_ptr, self )827        return index_list828    @property829    def name(self):830        return self._get_name()831    def get_name(self):832        return self._get_name( )833    def set_name(self , name):834        self._set_name( name )835monkey_the_camel(EclRegion, 'selectTrue', EclRegion.select_true)836monkey_the_camel(EclRegion, 'selectFalse', EclRegion.select_false)837monkey_the_camel(EclRegion, 'selectFromLayer', EclRegion.select_from_layer)838monkey_the_camel(EclRegion, 'getActiveList', EclRegion.get_active_list)839monkey_the_camel(EclRegion, 'getGlobalList', EclRegion.get_global_list)840monkey_the_camel(EclRegion, 'getIJKList', EclRegion.get_ijk_list)841monkey_the_camel(EclRegion, 'getName', EclRegion.get_name)...TogglingClassTest.ts
Source:TogglingClassTest.ts  
1import { ApproxStructure, Assertions, Logger, Step } from '@ephox/agar';2import { UnitTest } from '@ephox/bedrock';3import * as Behaviour from 'ephox/alloy/api/behaviour/Behaviour';4import { Toggling } from 'ephox/alloy/api/behaviour/Toggling';5import * as GuiFactory from 'ephox/alloy/api/component/GuiFactory';6import * as AlloyTriggers from 'ephox/alloy/api/events/AlloyTriggers';7import { Container } from 'ephox/alloy/api/ui/Container';8import * as GuiSetup from 'ephox/alloy/api/testhelpers/GuiSetup';9UnitTest.asynctest('TogglingClassTest', (success, failure) => {10  GuiSetup.setup((store, doc, body) => {11    return GuiFactory.build(12      Container.sketch({13        dom: {14          tag: 'div',15          classes: [ 'custom-component-test'],16          styles: {17            background: 'blue',18            width: '200px',19            height: '200px'20          }21        },22        containerBehaviours: Behaviour.derive([23          Toggling.config({24            selected: true,25            toggleClass: 'test-selected',26            aria: {27              mode: 'pressed'28            }29          })30        ])31      })32    );33  }, (doc, body, gui, component, store) => {34    const testIsSelected = (label) => {35      return Step.sync(() => {36        Assertions.assertStructure(37          'Asserting structure shows selected\n' + label,38          ApproxStructure.build((s, str, arr) => {39            return s.element('div', {40              classes: [41                arr.has('test-selected'),42                arr.not('selected')43              ],44              attrs: {45                'aria-pressed': str.is('true'),46                'aria-expanded': str.none()47              }48            });49          }),50          component.element()51        );52      });53    };54    const testNotSelected = (label) => {55      return Step.sync(() => {56        Assertions.assertStructure(57          'Asserting structure shows not selected\n' + label,58          ApproxStructure.build((s, str, arr) => {59            return s.element('div', {60              classes: [61                arr.not('test-selected'),62                arr.not('selected')63              ],64              attrs: {65                'aria-pressed': str.is('false'),66                'aria-expanded': str.none()67              }68            });69          }),70          component.element()71        );72      });73    };74    const assertIsSelected = (label, expected) => {75      return Logger.t(76        'Asserting isSelected()\n' + label,77        Step.sync(() => {78          const actual = Toggling.isOn(component);79          Assertions.assertEq(label, expected, actual);80        })81      );82    };83    const sSelect = Step.sync(() => {84      Toggling.on(component);85    });86    const sDeselect = Step.sync(() => {87      Toggling.off(component);88    });89    const sToggleSet = (state: boolean) => Step.sync(() => {90      Toggling.set(component, state);91    });92    const sToggle = Step.sync(() => {93      Toggling.toggle(component);94    });95    return [96      testIsSelected('Initial'),97      sToggle,98      testNotSelected('selected > toggle'),99      assertIsSelected('selected > toggle', false),100      sToggle,101      testIsSelected('selected > toggle, toggle'),102      assertIsSelected('selected > toggle, toggle', true),103      sDeselect,104      testNotSelected('selected > toggle, toggle, deselect'),105      assertIsSelected('selected > toggle, toggle, deselect', false),106      sDeselect,107      testNotSelected('selected > toggle, toggle, deselect, deselect'),108      assertIsSelected('selected > toggle, toggle, deselect, deselect', false),109      sSelect,110      testIsSelected('selected > toggle, toggle, deselect, deselect, select'),111      assertIsSelected('selected > toggle, toggle, deselect, deselect, select', true),112      sSelect,113      testIsSelected('selected > toggle, toggle, deselect, deselect, select, select'),114      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, select', true),115      sToggleSet(false),116      testNotSelected('selected > toggle, toggle, deselect, deselect, select, deselect'),117      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect', false),118      sToggleSet(false),119      testNotSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect'),120      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect', false),121      sToggleSet(true),122      testIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select'),123      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select', true),124      sToggleSet(true),125      testIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select, select'),126      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select, select', true),127      Step.sync(() => {128        AlloyTriggers.emitExecute(component);129      }),130      testNotSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select, select, event.exec'),131      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select, select, event.exec', false)132    ];133  }, success, failure);...TogglingAriaTest.ts
Source:TogglingAriaTest.ts  
1import { ApproxStructure, Assertions, Logger, Step } from '@ephox/agar';2import { UnitTest } from '@ephox/bedrock';3import * as Behaviour from 'ephox/alloy/api/behaviour/Behaviour';4import { Toggling } from 'ephox/alloy/api/behaviour/Toggling';5import * as GuiFactory from 'ephox/alloy/api/component/GuiFactory';6import * as AlloyTriggers from 'ephox/alloy/api/events/AlloyTriggers';7import { Container } from 'ephox/alloy/api/ui/Container';8import * as GuiSetup from 'ephox/alloy/api/testhelpers/GuiSetup';9UnitTest.asynctest('TogglingAriaTest', (success, failure) => {10  GuiSetup.setup((store, doc, body) => {11    return GuiFactory.build(12      Container.sketch({13        dom: {14          tag: 'div',15          classes: [ 'custom-component-test'],16          styles: {17            background: 'blue',18            width: '200px',19            height: '200px'20          }21        },22        containerBehaviours: Behaviour.derive([23          Toggling.config({24            selected: true,25            aria: {26              mode: 'pressed'27            }28          })29        ])30      })31    );32  }, (doc, body, gui, component, store) => {33    const testIsSelected = (label) => {34      return Step.sync(() => {35        Assertions.assertStructure(36          'Asserting structure shows selected\n' + label,37          ApproxStructure.build((s, str, arr) => {38            return s.element('div', {39              attrs: {40                'aria-pressed': str.is('true'),41                'aria-expanded': str.none()42              }43            });44          }),45          component.element()46        );47      });48    };49    const testNotSelected = (label) => {50      return Step.sync(() => {51        Assertions.assertStructure(52          'Asserting structure shows not selected\n' + label,53          ApproxStructure.build((s, str, arr) => {54            return s.element('div', {55              attrs: {56                'aria-pressed': str.is('false'),57                'aria-expanded': str.none()58              }59            });60          }),61          component.element()62        );63      });64    };65    const assertIsSelected = (label, expected) => {66      return Logger.t(67        'Asserting isSelected()\n' + label,68        Step.sync(() => {69          const actual = Toggling.isOn(component);70          Assertions.assertEq(label, expected, actual);71        })72      );73    };74    const sSelect = Step.sync(() => {75      Toggling.on(component);76    });77    const sDeselect = Step.sync(() => {78      Toggling.off(component);79    });80    const sToggleSet = (state: boolean) => Step.sync(() => {81      Toggling.set(component, state);82    });83    const sToggle = Step.sync(() => {84      Toggling.toggle(component);85    });86    return [87      testIsSelected('Initial'),88      sToggle,89      testNotSelected('selected > toggle'),90      assertIsSelected('selected > toggle', false),91      sToggle,92      testIsSelected('selected > toggle, toggle'),93      assertIsSelected('selected > toggle, toggle', true),94      sDeselect,95      testNotSelected('selected > toggle, toggle, deselect'),96      assertIsSelected('selected > toggle, toggle, deselect', false),97      sDeselect,98      testNotSelected('selected > toggle, toggle, deselect, deselect'),99      assertIsSelected('selected > toggle, toggle, deselect, deselect', false),100      sSelect,101      testIsSelected('selected > toggle, toggle, deselect, deselect, select'),102      assertIsSelected('selected > toggle, toggle, deselect, deselect, select', true),103      sSelect,104      testIsSelected('selected > toggle, toggle, deselect, deselect, select, select'),105      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, select', true),106      sToggleSet(false),107      testNotSelected('selected > toggle, toggle, deselect, deselect, select, deselect'),108      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect', false),109      sToggleSet(false),110      testNotSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect'),111      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect', false),112      sToggleSet(true),113      testIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select'),114      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select', true),115      sToggleSet(true),116      testIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select, select'),117      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select, select', true),118      Step.sync(() => {119        AlloyTriggers.emitExecute(component);120      }),121      testNotSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select, select, event.exec'),122      assertIsSelected('selected > toggle, toggle, deselect, deselect, select, deselect, deselect, select, select, event.exec', false)123    ];124  }, success, failure);...test_pydecorator_gui.py
Source:test_pydecorator_gui.py  
...88gui.get_selected_item_ids()89gui.get_selected_items()90# ~~~~~~~~deselect method91print("------ deselect ------")92gui.deselect(g)93gui.deselect(net = n)94gui.deselect(m)95gui.deselect([1,2,3],[5],[1])96gui.deselect([1,2,3], module_ids = [1], net_ids = [5,6,4])97gui.deselect(g_l, modules = [m], nets = n_l)...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
