def _scan_ecl_keywords(pfile, maxkeys=100000, dataframe=False): ultramax = int(1000000 / 9) # cf *swig_bnd_char_1m in cxtgeo.i if maxkeys > ultramax: raise ValueError( "maxkeys value is too large, must be < {}".format(ultramax)) rectypes = _cxtgeo.new_intarray(maxkeys) reclens = _cxtgeo.new_longarray(maxkeys) recstarts = _cxtgeo.new_longarray(maxkeys) cfhandle = pfile.get_cfhandle() nkeys, keywords = _cxtgeo.grd3d_scan_eclbinary(cfhandle, rectypes, reclens, recstarts, maxkeys) pfile.cfclose() keywords = keywords.replace(" ", "") keywords = keywords.split("|") # record types translation (cf: grd3d_scan_eclbinary.c in cxtgeo) rct = { "1": "INTE", "2": "REAL", "3": "DOUB", "4": "CHAR", "5": "LOGI", "6": "MESS", "-1": "????", } rc = [] rl = [] rs = [] for i in range(nkeys): rc.append(rct[str(_cxtgeo.intarray_getitem(rectypes, i))]) rl.append(_cxtgeo.longarray_getitem(reclens, i)) rs.append(_cxtgeo.longarray_getitem(recstarts, i)) _cxtgeo.delete_intarray(rectypes) _cxtgeo.delete_longarray(reclens) _cxtgeo.delete_longarray(recstarts) result = list(zip(keywords, rc, rl, rs)) if dataframe: cols = ["KEYWORD", "TYPE", "NITEMS", "BYTESTART"] df = pd.DataFrame.from_records(result, columns=cols) return df return result
def _scan_roff_keywords(fhandle, maxkeys=100000, dataframe=False): # In case fhandle is not a file name but a swig pointer to a file handle, # the file must not be closed ultramax = int(1000000 / 9) # cf *swig_bnd_char_1m in cxtgeo.i if maxkeys > ultramax: raise ValueError( "maxkeys value is too large, must be < {}".format(ultramax)) rectypes = _cxtgeo.new_intarray(maxkeys) reclens = _cxtgeo.new_longarray(maxkeys) recstarts = _cxtgeo.new_longarray(maxkeys) nkeys, _tmp1, keywords = _cxtgeo.grd3d_scan_roffbinary( fhandle, rectypes, reclens, recstarts, maxkeys) keywords = keywords.replace(" ", "") keywords = keywords.split("|") # record types translation (cf: grd3d_scan_eclbinary.c in cxtgeo) rct = { "1": "int", "2": "float", "3": "double", "4": "char", "5": "bool", "6": "byte", } rc = [] rl = [] rs = [] for i in range(nkeys): rc.append(rct[str(_cxtgeo.intarray_getitem(rectypes, i))]) rl.append(_cxtgeo.longarray_getitem(reclens, i)) rs.append(_cxtgeo.longarray_getitem(recstarts, i)) _cxtgeo.delete_intarray(rectypes) _cxtgeo.delete_longarray(reclens) _cxtgeo.delete_longarray(recstarts) result = list(zip(keywords, rc, rl, rs)) if dataframe: cols = ["KEYWORD", "TYPE", "NITEMS", "BYTESTARTDATA"] df = pd.DataFrame.from_records(result, columns=cols) return df return result
def test_grd3d_imp_ecl_egrid(): with pytest.raises( xtgeo.XTGeoCLibError, match="Errors in array lengths checks in", ): _cxtgeo.grd3d_imp_ecl_egrid( xtgeo._XTGeoFile(io.BytesIO(b"")).get_cfhandle(), 1, 1, 1, 0, 0, 0, 0, np.array([0.0], dtype=np.float64), np.array([1.0], dtype=np.float64), np.array([1], dtype=np.int32), _cxtgeo.new_longarray(1), 1, )