Package: pygef
PYGEFSimple parser for *.gef files. These are ASCII based files used for soil properties measurements.
Compatible with Python 3.9.Recently added the parsing of xml boreholes file, the xml parsing is still in a preliminary phase,
not all the files are supported. If you find a file that doesn't work with pygef, please make an issue about it or PR :)InstallationLatest stable version:$ pip install pygefCutting-edge version (might break):$ pip install git+https://github.com/cemsbv/pygef.gitCPT files>>>frompygefimportread_cpt>>># read gef and xml files>>>cpt_data=read_cpt("./my-cpt.xml")>>>cpt_dataCPTData:{'bro_id':'CPT000000099543','cone_diameter':44,'cone_surface_area':1500,'cone_surface_quotient':0.67,'cone_to_friction_sleeve_distance':100,'cone_to_friction_sleeve_surface_area':22530,'cone_to_friction_sleeve_surface_quotient':1.0,...'zlm_pore_pressure_u3_after':None,'zlm_pore_pressure_u3_before':None}>>># access the underlying polars DataFrame under the `data` attribute>>>cpt_data.data.head()shape:(5,9)┌────────────┬───────┬───────────┬────────────┬─────┬────────────┬────────────┬────────────┬────────────┐│penetratio┆depth┆elapsedTi┆coneResist┆...┆inclinatio┆inclinatio┆localFrict┆frictionRa││nLength┆---┆me┆ance┆┆nNS┆nResultant┆ion┆tio││---┆f64┆---┆---┆┆---┆---┆---┆---││f64┆┆f64┆f64┆┆i64┆i64┆f64┆f64│╞════════════╪═══════╪═══════════╪════════════╪═════╪════════════╪════════════╪════════════╪════════════╡│0.0┆0.0┆-9.99999e┆-9.99999e5┆...┆-999999┆-999999┆-9.99999e5┆-9.99999e5││┆┆5┆┆┆┆┆┆│├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤│0.02┆0.02┆11.0┆2.708┆...┆0┆0┆0.03┆0.6│├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤│0.04┆0.039┆13.0┆4.29┆...┆0┆0┆0.039┆0.8│├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤│0.06┆0.059┆15.0┆5.124┆...┆0┆0┆0.045┆0.9│├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤│0.08┆0.079┆17.0┆5.45┆...┆0┆0┆0.049┆1.0│└────────────┴───────┴───────────┴────────────┴─────┴────────────┴────────────┴────────────┴────────────┘Bore files>>>frompygefimportread_bore>>># read gef and xml files>>>bore_data=read_bore("./my-bore.xml")>>>bore_dataBoreData:{'bore_hole_completed':True,'bore_rock_reached':False,'data':(13,8),'delivered_location':Location(srs_name='urn:ogc:def:crs:EPSG::28992',x=158322.139,y=444864.706),'delivered_vertical_position_datum':'nap','delivered_vertical_position_offset':10.773,'delivered_vertical_position_reference_point':'maaiveld','description_procedure':'ISO14688d1v2019c2020','final_bore_depth':12.0,'final_sample_depth':12.0,'research_report_date':datetime.date(2021,10,19)}>>># access the underlying polars DataFrame under the `data` attribute>>>bore_data.data.head()shape:(5,8)┌────────────┬────────────┬────────────┬──────────┬────────────┬────────────┬────────────┬─────────┐│upper_boun┆lower_boun┆geotechnic┆color┆dispersed_┆organic_ma┆sand_media┆soil_di││dary┆dary┆al_soil_na┆---┆inhomogeni┆tter_conte┆n_class┆st││---┆---┆me┆str┆ty┆nt_class┆---┆---││f64┆f64┆---┆┆---┆---┆str┆list[f6││┆┆str┆┆bool┆str┆┆4]│╞════════════╪════════════╪════════════╪══════════╪════════════╪════════════╪════════════╪═════════╡│0.0┆1.0┆zwakGrindi┆donkergr┆false┆nietOrgani┆middelgrof┆[0.2,││┆┆gZand┆ijs┆┆sch┆420tot630u┆0.0,││┆┆┆┆┆┆m┆...││┆┆┆┆┆┆┆0.0]│├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤│1.0┆1.1┆zwakGrindi┆donkergr┆false┆nietOrgani┆middelgrof┆[0.2,││┆┆gZand┆ijs┆┆sch┆420tot630u┆0.0,││┆┆┆┆┆┆m┆...││┆┆┆┆┆┆┆0.0]│├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤│1.1┆2.0┆zwakZandig┆standaar┆false┆nietOrgani┆null┆[0.0,││┆┆eKleiMetGr┆dBruin┆┆sch┆┆0.1,││┆┆ind┆┆┆┆┆...││┆┆┆┆┆┆┆0.0]│├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤│2.0┆3.0┆zwakZandig┆standaar┆false┆nietOrgani┆null┆[0.0,││┆┆eKlei┆dGrijs┆┆sch┆┆0.0,││┆┆┆┆┆┆┆...││┆┆┆┆┆┆┆0.0]│├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤│3.0┆4.0┆zwakZandig┆donkergr┆false┆nietOrgani┆null┆[0.0,││┆┆eKlei┆ijs┆┆sch┆┆0.0,││┆┆┆┆┆┆┆...││┆┆┆┆┆┆┆0.0]│└────────────┴────────────┴────────────┴──────────┴────────────┴────────────┴────────────┴─────────┘Plottingfrompygefimportread_cpt,read_borefrompygef.plottingimportplot_cpt,plot_bore# plot cpt fileplot_cpt(read_cpt("myfile.xml"))# plot a bore fileplot_bore(read_bore("myfile.xml"))DocumentationBuild the docs:python-mpipinstall--upgradepipsetuptools
pipinstall-rrequirements.txt
pipinstall.

sphinx-build-bhtmldocspublicFormatWe format our code with black and isort.black--config"pyproject.toml".
isort--settings-path"pyproject.toml".LintTo maintain code quality we use the GitHub super-linter.To run the linters locally, run the following bash script from the root directory:dockerrun\--envVALIDATE_ALL_CODEBASE=false\--envRUN_LOCAL=true\--envVALIDATE_JSCPD=false\--envVALIDATE_CSS=false\--envVALIDATE_BASH=false\--envVALIDATE_YAML=false\--envVALIDATE_PYTHON_PYLINT=false\--envVALIDATE_NATURAL_LANGUAGE=false\--envVALIDATE_MARKDOWN=false\--envLINTER_RULES_PATH=/\--envPYTHON_BLACK_CONFIG_FILE=pyproject.toml\--envPYTHON_ISORT_CONFIG_FILE=pyproject.toml\--envPYTHON_MYPY_CONFIG_FILE=pyproject.toml\--envPYTHON_FLAKE8_CONFIG_FILE=.flake8\-v$(pwd):/tmp/lintgithub/super-linter:v4UnitTestTest the software with the use of coverage:python-mpipinstall--upgradepipsetuptools
pipinstall-rrequirements.txt
pipinstall.

coveragerun-mpytestRequirementsRequirements are autogenerated bypip-compilewith python 3.9pip-compile--extra=test--extra=docs--extra=lint--extra=map--output-file=requirements.txtpyproject.tomlTo update the requirements within the defined ranges, run:pip-compile--upgrade--extra=test--extra=docs--extra=lint--extra=map--output-file=requirements.txtpyproject.tomlAutomatically upgrade your Polars code so it's compatible with future versions.pipinstall-Upolars-upgrade
polars-upgradesrc/pygeftests--target-version=0.19.19