def __getitem__(self , index): """ Implements [] operator; index can be integer or key. Will look up EclKW instances from the current EclFile instance. The @index argument can either be an integer, in which case the method will return EclKW number @index, or alternatively a keyword string, in which case the method will return a list of EclKW instances with that keyword: restart_file = ecl_file.EclFile("ECLIPSE.UNRST") kw9 = restart_file[9] swat_list = restart_file["SWAT"] The keyword based lookup can be combined with an extra [] to get EclKW instance nr: swat9 = restart_file["SWAT"][9] Will return the 10'th SWAT keyword from the restart file. The following example will iterate over all the SWAT keywords in a restart file: restart_file = ecl_file.EclFile("ECLIPSE.UNRST") for swat in restart_file["SWAT"]: .... """ if isinstance( index , types.IntType): if index < 0 or index >= cfunc.get_size( self ): raise IndexError else: kw_c_ptr = cfunc.iget_kw( self , index ) return EclKW.wrap( kw_c_ptr , parent = self , data_owner = False) if isinstance( index , slice ): indices = index.indices( len(self) ) kw_list = [] for i in range(*indices): kw_list.append( self[i] ) return kw_list else: if isinstance( index , types.StringType): if self.has_kw( index ): kw_index = index kw_list = [] for index in range( self.num_named_kw( kw_index )): kw_list.append( self.iget_named_kw( kw_index , index)) return kw_list else: raise KeyError("Unrecognized keyword:\'%s\'" % index) else: raise TypeError("Index must be integer or string (keyword)")
def __getitem__(self, index): """ Implements [] operator; index can be integer or key. Will look up EclKW instances from the current EclFile instance. The @index argument can either be an integer, in which case the method will return EclKW number @index, or alternatively a keyword string, in which case the method will return a list of EclKW instances with that keyword: restart_file = ecl_file.EclFile("ECLIPSE.UNRST") kw9 = restart_file[9] swat_list = restart_file["SWAT"] The keyword based lookup can be combined with an extra [] to get EclKW instance nr: swat9 = restart_file["SWAT"][9] Will return the 10'th SWAT keyword from the restart file. The following example will iterate over all the SWAT keywords in a restart file: restart_file = ecl_file.EclFile("ECLIPSE.UNRST") for swat in restart_file["SWAT"]: .... """ if isinstance(index, types.IntType): if index < 0 or index >= cfunc.get_size(self): raise IndexError else: kw_c_ptr = cfunc.iget_kw(self, index) return EclKW.wrap(kw_c_ptr, parent=self, data_owner=False) if isinstance(index, slice): indices = index.indices(len(self)) kw_list = [] for i in range(*indices): kw_list.append(self[i]) return kw_list else: if isinstance(index, types.StringType): if self.has_kw(index): kw_index = index kw_list = [] for index in range(self.num_named_kw(kw_index)): kw_list.append(self.iget_named_kw(kw_index, index)) return kw_list else: raise KeyError("Unrecognized keyword:\'%s\'" % index) else: raise TypeError("Index must be integer or string (keyword)")
def iget_named_kw( self , kw_name , index , copy = False): """ Will return EclKW nr @index reference with header @kw_name. The keywords in a an ECLIPSE file are organized in a long linear array; keywords with the same name can occur many times. For instance a summary data[1] file might look like this: SEQHDR MINISTEP PARAMS MINISTEP PARAMS MINISTEP PARAMS .... To get the third 'PARAMS' keyword you can use the method call: params_kw = file.iget_named_kw( "PARAMS" , 2 ) The functionality of the iget_named_kw() method is also available through the __getitem__() method as: params_kw = file["PARAMS"][2] Observe that the returned EclKW instance is only a reference to the data owned by the EclFile instance. Observe that syntactically this is equivalent to file[kw_name][index], however the latter form will imply that all the keywords of this type are loaded from the file. If you know that only a few will actually be used it will be faster to use this method. [1]: For working with summary data you are probably better off using the EclSum class. """ kw_c_ptr = cfunc.iget_named_kw( self , kw_name , index ) ecl_kw = EclKW.wrap( kw_c_ptr , parent = self , data_owner = False) if copy: return EclKW.copy( ecl_kw ) else: return ecl_kw
def iget_named_kw(self, kw_name, index, copy=False): """ Will return EclKW nr @index reference with header @kw_name. The keywords in a an ECLIPSE file are organized in a long linear array; keywords with the same name can occur many times. For instance a summary data[1] file might look like this: SEQHDR MINISTEP PARAMS MINISTEP PARAMS MINISTEP PARAMS .... To get the third 'PARAMS' keyword you can use the method call: params_kw = file.iget_named_kw( "PARAMS" , 2 ) The functionality of the iget_named_kw() method is also available through the __getitem__() method as: params_kw = file["PARAMS"][2] Observe that the returned EclKW instance is only a reference to the data owned by the EclFile instance. Observe that syntactically this is equivalent to file[kw_name][index], however the latter form will imply that all the keywords of this type are loaded from the file. If you know that only a few will actually be used it will be faster to use this method. [1]: For working with summary data you are probably better off using the EclSum class. """ kw_c_ptr = cfunc.iget_named_kw(self, kw_name, index) ecl_kw = EclKW.wrap(kw_c_ptr, parent=self, data_owner=False) if copy: return EclKW.copy(ecl_kw) else: return ecl_kw