gea-program 0.89.0__tar.gz → 0.91.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gea_program-0.89.0 → gea_program-0.91.0}/PKG-INFO +101 -4
- {gea_program-0.89.0 → gea_program-0.91.0}/README.md +100 -3
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/__init__.py +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/__main__.py +122 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/acceptance_tests.py +482 -7
- gea_program-0.91.0/gea/benchmark.py +272 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/dysfunction.py +27 -9
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/edr.py +73 -6
- gea_program-0.91.0/gea/frac_treatment.py +1224 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/IT_SECURITY.md +5 -1
- gea_program-0.91.0/gea/help/benchmark.md +13 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/driller.md +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/dysfunction.md +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/edr.md +3 -1
- gea_program-0.91.0/gea/help/frac-treatment.md +13 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/install.md +2 -2
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/mcp.md +1 -1
- gea_program-0.91.0/gea/help/public-data.md +17 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/reader.md +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/recorder.md +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/roadmap.md +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/01-install.md +2 -2
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/13-drilling-pages.md +10 -8
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/14-production-pages.md +12 -11
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/19-dossier-reader.md +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/22-updates.md +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/23-vpn.md +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/25-install-recorder.md +2 -2
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/29-driller-rig.md +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial.md +2 -2
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/helplib.py +4 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/mcp_server.py +21 -0
- gea_program-0.91.0/gea/public_pad.py +761 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/rig_state.py +5 -2
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/roadmap.py +26 -7
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/service.py +45 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/web/app.html +184 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/PKG-INFO +101 -4
- {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/SOURCES.txt +6 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/pyproject.toml +1 -1
- {gea_program-0.89.0 → gea_program-0.91.0}/LICENSE +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/accuracy_statement.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/alarm_engine.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/alerts.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/backup.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/bench.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/bit_seismic.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/blind_harness.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/calibration.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/casing_design.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/med_160_sapropels.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog_map.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog_register.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/certificates.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/cli.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/client_reports.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/collision.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/config_versioning.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/conformance.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/control_room.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/correlation.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/dashboard.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/declarations.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/decline.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/deviation.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/dlis.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/dnp3.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/doctor.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/dossier.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/dossier_verify.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/downhole_engine.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/drift_monitor.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/drill_string.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/driller_link.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/earth_model.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/economics.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/ed25519.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/elevation.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/etp.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/etp12_schemas.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/example_register_map.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/fat_sat.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/field_pull.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/files.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/README.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/ne_110m_coastline.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/fluid.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/follower.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/forward_model.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/frac_hits.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/friction_priors.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/front.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/gamma.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/gauge_aging.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/gauge_specs.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/geodesy.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/geomag.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/gravity_reference.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/hartip.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/TESTER_GUIDE.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/alarms.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/alerts.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/audit-update.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/backup.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/bit-image.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/calibration.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/casing.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/catalog.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/charts.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/collision.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/company-sign-in.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/conformance.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/control-room.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/data-in.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/declare.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/decline.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/dlis.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/doctor.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/dossier.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/drift.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/drillstring.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/economics.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/etp.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/field-ports.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/files.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/fluid.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/frac-hits.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/front.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/historian.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/https.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/hydraulics.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/instruments.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/interval.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/invoice-check.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/map.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/month-end.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/notifications.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/opseis.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/osdu.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/pad-summary.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/patches.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/penetrator.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/plan.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/plume.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/pore-pressure.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/ppdm.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/quakeml.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/quality.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/records.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/report-history.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/rig-time.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/rocks.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/seedlink.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/seismic.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/setup.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/simulation.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/site.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/sites.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/slip.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/soak.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/sra.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/start.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/structure.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tools.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/torque-drag.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/transients.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/02-sign-in.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/03-site.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/04-add-well.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/05-records.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/06-well-page.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/07-declare.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/08-patches.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/09-alarms.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/10-control-room.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/11-summary-month.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/12-where-the-well-is.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/15-seismic.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/16-seismicity.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/17-recorder-office.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/18-reports.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/20-admin.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/21-upkeep.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/24-the-box.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/26-monitor.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/27-mirror-vpn.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/28-driller-office.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/upkeep.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/vibration.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/vpn.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/well-report.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/well-tests.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/well3d.md +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/housekeeping.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/hydraulics.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/icon.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/interval.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/inverse_engine.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/invoice_check.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/jobs.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/launcher.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/live_ports.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/loadtest.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/matplotlib_demo.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/modbus.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/modbus_rtu.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/model_card.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/month_end.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/mqtt_port.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/notify.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/oidc.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/oidc_mock.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/op_seismicity.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/opcua_port.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/operator_app.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/osdu.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/pad_summary.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/patches.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/pdf_report.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/penetrator.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/permits.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/piwebapi.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/plume.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/pore_pressure.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/ports.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/ppdm.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/profile_catalog.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/project.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/qt6_downhole_app.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/quakeml.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reader.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reader_app.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reconciler.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/recorder_link.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/WMM2025.COF +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/eia_prices.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/iscwsa_rev4_example.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/iscwsa_rev5_example.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/l0701_sonic_gr.las.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/l0701_sonic_gr.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/libmseed_steim.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/mahoning_example.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/mud_motor_specs.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/owsg_tool_models.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/penetrator_ratings.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/seismicity_protocols.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/tool_sources.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/us_outline.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/us_outline.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_3d.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_surfaces.json.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_well_picks.csv.gz +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/report_history.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/rock_inventory.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/sample_record.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/sample_well_profile.csv +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/sbom.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seedlink.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/segy.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_array.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_assoc.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_detect.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_film.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_harmonic.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_qc.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_response.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_signature.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_track.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_uncertainty.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_unlisted.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_watch.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/sensor_swap.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/series_cache.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/service_life.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/setup_checklist.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/shapefile.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/shell.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/shut_in.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/simulation.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/site_map.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/sla_report.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/slip.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/soak.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/sra.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/store_forward.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/strata_join.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/structure.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/supervisor.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/survey_cmd.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/survey_view.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/telemetry.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/timestamp.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/tls.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/tool_catalog.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/tool_library.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/tool_taxonomy.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/torque_drag.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/transient.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/tray.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/tutorial.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/updates.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/vibration.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/vpn.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/web/reader.html +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/well3d.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/well_assembler.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/well_records.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/well_report.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/well_test_validation.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/wellplan.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/wellpos.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/winident.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/wits0.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/witsml.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/workspace.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/workspaces.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/x25519.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea/xlsx_read.py +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/dependency_links.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/entry_points.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/requires.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/top_level.txt +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/setup.cfg +0 -0
- {gea_program-0.89.0 → gea_program-0.91.0}/tests/test_acceptance.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gea-program
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.91.0
|
|
4
4
|
Summary: GEA-Program: downhole gauge monitoring - canonical measurement records, quality rules, drift evaluation with a re-fit change log, well-test validation, alarm management, model cards, store-and-forward, monthly SLA measurement, FAT/SAT protocols and a dashboard, generated from live objects in the client's reporting outline.
|
|
5
5
|
Author: Daniel T. Murphy
|
|
6
6
|
License: MPL-2.0
|
|
@@ -847,7 +847,7 @@ unsigned, the key hand-overs - and shows the reports as they were signed. A
|
|
|
847
847
|
reader made from the workspace knows the site's key fingerprints, so it
|
|
848
848
|
says whether a dossier is the site's; it allows no network request, and it
|
|
849
849
|
leaves the trusted time-stamp to `verify_dossier.py`. For a client who wants
|
|
850
|
-
it installed, every release also carries `GEA-Reader-Setup-0.
|
|
850
|
+
it installed, every release also carries `GEA-Reader-Setup-0.91.0.exe`: GEA
|
|
851
851
|
Reader as a Windows program of its own - its own icon and taskbar button,
|
|
852
852
|
Check with GEA Reader on a dossier's right-click menu, fingerprints the client
|
|
853
853
|
saves kept on that computer, nothing of GEA-Program. `gea help reader`.
|
|
@@ -934,6 +934,26 @@ the window. The Dutch offshore well L07-01 (NLOG open data) is the worked
|
|
|
934
934
|
example. The **Pore pressure** tab, `gea pore-pressure`,
|
|
935
935
|
`gea help pore-pressure`.
|
|
936
936
|
|
|
937
|
+
### Frac treatment
|
|
938
|
+
|
|
939
|
+
Each fracturing stage from its own pumping record - the treating pressure,
|
|
940
|
+
the slurry rate and the proppant concentration, second by second, as the
|
|
941
|
+
frac service company gave them (a spreadsheet with its stacked header, a
|
|
942
|
+
frac van's data-acquisition export, or a plain CSV). With nothing fitted to
|
|
943
|
+
a model of the fracture, the page reads what was pumped beside the record's
|
|
944
|
+
own totalisers; the ISIP - a straight line fitted to the pressure after the
|
|
945
|
+
ringing has died down and read back to the moment the rate reached zero,
|
|
946
|
+
over three windows, with the spread between them as its range; the friction
|
|
947
|
+
at the last rate held, and where the rate was stepped down its two parts,
|
|
948
|
+
one with the square of the rate (the pipe and the perforations) and one
|
|
949
|
+
with its root (the path just outside the wellbore); the pressure at 5, 10
|
|
950
|
+
and 15 minutes and against Nolte's G, with a closure candidate offered only
|
|
951
|
+
where the record supports one; and a step-rate test where there was one.
|
|
952
|
+
With the depth of the perforations declared, the bottomhole ISIP and its
|
|
953
|
+
gradient. It hands the Frac hits tab each stage's times. The **Frac
|
|
954
|
+
treatment** tab, `gea frac-treatment`, `gea help frac-treatment`; an
|
|
955
|
+
assistant reads it as the `frac_treatment` tool.
|
|
956
|
+
|
|
937
957
|
### Frac hits
|
|
938
958
|
|
|
939
959
|
What each fracturing stage did to the pressure in the wells around it. A
|
|
@@ -1073,6 +1093,83 @@ eras of the protocol are spoken: the stateless revision 2026-07-28 and the
|
|
|
1073
1093
|
`initialize` handshake of 2025-11-25 and earlier. The **Assistant access**
|
|
1074
1094
|
tab (one button adds it to Claude Desktop), `gea mcp`, `gea help mcp`.
|
|
1075
1095
|
|
|
1096
|
+
### Benchmark
|
|
1097
|
+
|
|
1098
|
+
The wells of a pad against one another, and each against the best the pad
|
|
1099
|
+
has done. Every well with a drilling record is measured the same way from
|
|
1100
|
+
its own record - the footage, the days from its first stand to its last,
|
|
1101
|
+
feet per day, the rate on bottom, rotary and sliding, the median connection
|
|
1102
|
+
weight to weight, the trip speeds - and ranked on each count. Then each
|
|
1103
|
+
well is set against the pad's best: the well it would have been had every
|
|
1104
|
+
stretch of hole been drilled at the rate of whichever well was fastest
|
|
1105
|
+
through that stretch (300 ft or more of it), and every connection made in
|
|
1106
|
+
the pad's best quarter. The gap is hours the pad has already shown can be
|
|
1107
|
+
saved, on some well in that stretch - not a forecast, and not a cause: the
|
|
1108
|
+
bit, the motor, the mud and the hole size are not in the record. The
|
|
1109
|
+
**Benchmark** tab, `gea benchmark`, `gea help benchmark`; an assistant
|
|
1110
|
+
reads it as the `benchmark` tool.
|
|
1111
|
+
|
|
1112
|
+
### Public data: a real pad
|
|
1113
|
+
|
|
1114
|
+
A pad anyone may check. The Utah FORGE project - the U.S. Department of
|
|
1115
|
+
Energy's geothermal field laboratory near Milford, Utah - publishes the
|
|
1116
|
+
rig recorders of five wells drilled through the same basin fill and
|
|
1117
|
+
granite between 2017 and 2023, under Creative Commons Attribution 4.0.
|
|
1118
|
+
`gea public-pad` turns those files into a site of its own, so the rig
|
|
1119
|
+
time, the roadmap, the drilling alerts and the benchmark run on real
|
|
1120
|
+
records before any client's. The program does not contain the files and
|
|
1121
|
+
does not fetch them: the site downloads them in a browser from the
|
|
1122
|
+
Geothermal Data Repository, names the folder, and the program checks each
|
|
1123
|
+
file against the size and the SHA-256 it had when this release was checked
|
|
1124
|
+
with it, converts the three layouts that are not the recorder's own
|
|
1125
|
+
export, attaches each well, and keeps on the record what was done to
|
|
1126
|
+
each - 16A(78)-32's bit depth is RECONSTRUCTED from the block and the
|
|
1127
|
+
slips and is marked so on every page. Every page and report of that site
|
|
1128
|
+
ends with the credit the licence asks for.
|
|
1129
|
+
|
|
1130
|
+
What this release made of them, on the five files as published:
|
|
1131
|
+
|
|
1132
|
+
| Well | Drilled, ft | Days | ft/day | On bottom, ft/h | Median connection, min |
|
|
1133
|
+
|---|---|---|---|---|---|
|
|
1134
|
+
| 58-32 (2017) | 6,288 | 43.5 | 145 | 15.9 | 14.4 |
|
|
1135
|
+
| 16A(78)-32 (2020) | 11,035 | 67.8 | 163 | 34.4 | 11.3 |
|
|
1136
|
+
| 56-32 (2021) | 9,232 | 19.0 | 487 | 46.6 | 7.5 |
|
|
1137
|
+
| 78B-32 (2021) | 9,372 | 29.1 | 322 | 84.7 | 7.7 |
|
|
1138
|
+
| 16B(78)-32 (2023) | 10,490 | 52.4 | 200 | 45.7 | 10.2 |
|
|
1139
|
+
|
|
1140
|
+
Against the pad's best the five wells spent 812 of their 1,256 on-bottom
|
|
1141
|
+
hours beyond it. The roadmap's own check on them is split - running nearer
|
|
1142
|
+
the window was the faster half on two wells and the slower on two - which
|
|
1143
|
+
is the page saying, of wells drilled six years apart in three hole sizes,
|
|
1144
|
+
that one well's parameters are not the next well's roadmap. The drilling
|
|
1145
|
+
alerts, replayed, find 27 motor stalls on the three wells whose records
|
|
1146
|
+
can show one, three falls in off-bottom pressure on 78B-32 that no trip followed
|
|
1147
|
+
and one on 58-32 that a trip out of the hole followed within twelve hours.
|
|
1148
|
+
|
|
1149
|
+
The same site takes the published pumping records of the two deviated
|
|
1150
|
+
wells' stimulation - three stages on 16A(78)-32 in April 2022, nine more
|
|
1151
|
+
and four on 16B(78)-32 in April 2024 - when those files are in the folder
|
|
1152
|
+
too, and the Frac treatment tab reads all sixteen: 132,132 bbl of slurry
|
|
1153
|
+
and 2,969,800 lbm of proppant by the records' own rates, fifteen of the
|
|
1154
|
+
sixteen volumes within 0.6 % of the record's own totaliser (the sixteenth
|
|
1155
|
+
3.6 % under it: that totaliser also counted the lines being primed); an
|
|
1156
|
+
ISIP at every stage, 3,289 to 5,664 psi at the surface; thirteen stages
|
|
1157
|
+
stepped down to the shut-in. The service company's reports are published with the
|
|
1158
|
+
2022 stages, so the page can be checked against them: for stage 1 the
|
|
1159
|
+
company gives a final ISIP of 4,019 psi and 3,715, 3,582 and 3,501 psi
|
|
1160
|
+
after 5, 10 and 15 minutes, and this page reads 3,985 psi (3,975 to 3,997)
|
|
1161
|
+
and 3,720, 3,585 and 3,486; for stage 2, 3,918 psi and 3,664, 3,565 and
|
|
1162
|
+
3,506 against 3,859 (3,852 to 3,862) and 3,665, 3,572 and 3,508. The page's
|
|
1163
|
+
ISIP is the lower because it is read back along the decline, not taken at
|
|
1164
|
+
the top of the ringing. No
|
|
1165
|
+
stage's fall-off shows a closure: the records stop a quarter of an hour
|
|
1166
|
+
after the pumps, and the page says so and offers none.
|
|
1167
|
+
|
|
1168
|
+
Data: Utah FORGE, Energy & Geoscience Institute at the University of Utah,
|
|
1169
|
+
funded by the U.S. Department of Energy; Geothermal Data Repository,
|
|
1170
|
+
gdr.openei.org; CC BY 4.0. The **Public data** tab, `gea public-pad`,
|
|
1171
|
+
`gea help public-data`.
|
|
1172
|
+
|
|
1076
1173
|
### Plan vs actual and the survey tools
|
|
1077
1174
|
|
|
1078
1175
|
Each well against its directional plan: at every survey station, how far
|
|
@@ -1737,7 +1834,7 @@ attaches the zips to the GitHub release of that tag.
|
|
|
1737
1834
|
|
|
1738
1835
|
### The Windows installer
|
|
1739
1836
|
|
|
1740
|
-
Every release also carries `GEA-Program-Setup-0.
|
|
1837
|
+
Every release also carries `GEA-Program-Setup-0.91.0.exe` (for 0.91.0): the
|
|
1741
1838
|
same Windows kit installed like any Windows program, for the signed-in user
|
|
1742
1839
|
alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
|
|
1743
1840
|
It asks for the site workspace (an existing one such as `C:\site` is used as
|
|
@@ -1756,7 +1853,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
|
|
|
1756
1853
|
software deployment:
|
|
1757
1854
|
|
|
1758
1855
|
```
|
|
1759
|
-
GEA-Program-Setup-0.
|
|
1856
|
+
GEA-Program-Setup-0.91.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
|
|
1760
1857
|
```
|
|
1761
1858
|
|
|
1762
1859
|
The setup is built by Inno Setup 6 from `tools/installer.iss` in the same
|
|
@@ -808,7 +808,7 @@ unsigned, the key hand-overs - and shows the reports as they were signed. A
|
|
|
808
808
|
reader made from the workspace knows the site's key fingerprints, so it
|
|
809
809
|
says whether a dossier is the site's; it allows no network request, and it
|
|
810
810
|
leaves the trusted time-stamp to `verify_dossier.py`. For a client who wants
|
|
811
|
-
it installed, every release also carries `GEA-Reader-Setup-0.
|
|
811
|
+
it installed, every release also carries `GEA-Reader-Setup-0.91.0.exe`: GEA
|
|
812
812
|
Reader as a Windows program of its own - its own icon and taskbar button,
|
|
813
813
|
Check with GEA Reader on a dossier's right-click menu, fingerprints the client
|
|
814
814
|
saves kept on that computer, nothing of GEA-Program. `gea help reader`.
|
|
@@ -895,6 +895,26 @@ the window. The Dutch offshore well L07-01 (NLOG open data) is the worked
|
|
|
895
895
|
example. The **Pore pressure** tab, `gea pore-pressure`,
|
|
896
896
|
`gea help pore-pressure`.
|
|
897
897
|
|
|
898
|
+
### Frac treatment
|
|
899
|
+
|
|
900
|
+
Each fracturing stage from its own pumping record - the treating pressure,
|
|
901
|
+
the slurry rate and the proppant concentration, second by second, as the
|
|
902
|
+
frac service company gave them (a spreadsheet with its stacked header, a
|
|
903
|
+
frac van's data-acquisition export, or a plain CSV). With nothing fitted to
|
|
904
|
+
a model of the fracture, the page reads what was pumped beside the record's
|
|
905
|
+
own totalisers; the ISIP - a straight line fitted to the pressure after the
|
|
906
|
+
ringing has died down and read back to the moment the rate reached zero,
|
|
907
|
+
over three windows, with the spread between them as its range; the friction
|
|
908
|
+
at the last rate held, and where the rate was stepped down its two parts,
|
|
909
|
+
one with the square of the rate (the pipe and the perforations) and one
|
|
910
|
+
with its root (the path just outside the wellbore); the pressure at 5, 10
|
|
911
|
+
and 15 minutes and against Nolte's G, with a closure candidate offered only
|
|
912
|
+
where the record supports one; and a step-rate test where there was one.
|
|
913
|
+
With the depth of the perforations declared, the bottomhole ISIP and its
|
|
914
|
+
gradient. It hands the Frac hits tab each stage's times. The **Frac
|
|
915
|
+
treatment** tab, `gea frac-treatment`, `gea help frac-treatment`; an
|
|
916
|
+
assistant reads it as the `frac_treatment` tool.
|
|
917
|
+
|
|
898
918
|
### Frac hits
|
|
899
919
|
|
|
900
920
|
What each fracturing stage did to the pressure in the wells around it. A
|
|
@@ -1034,6 +1054,83 @@ eras of the protocol are spoken: the stateless revision 2026-07-28 and the
|
|
|
1034
1054
|
`initialize` handshake of 2025-11-25 and earlier. The **Assistant access**
|
|
1035
1055
|
tab (one button adds it to Claude Desktop), `gea mcp`, `gea help mcp`.
|
|
1036
1056
|
|
|
1057
|
+
### Benchmark
|
|
1058
|
+
|
|
1059
|
+
The wells of a pad against one another, and each against the best the pad
|
|
1060
|
+
has done. Every well with a drilling record is measured the same way from
|
|
1061
|
+
its own record - the footage, the days from its first stand to its last,
|
|
1062
|
+
feet per day, the rate on bottom, rotary and sliding, the median connection
|
|
1063
|
+
weight to weight, the trip speeds - and ranked on each count. Then each
|
|
1064
|
+
well is set against the pad's best: the well it would have been had every
|
|
1065
|
+
stretch of hole been drilled at the rate of whichever well was fastest
|
|
1066
|
+
through that stretch (300 ft or more of it), and every connection made in
|
|
1067
|
+
the pad's best quarter. The gap is hours the pad has already shown can be
|
|
1068
|
+
saved, on some well in that stretch - not a forecast, and not a cause: the
|
|
1069
|
+
bit, the motor, the mud and the hole size are not in the record. The
|
|
1070
|
+
**Benchmark** tab, `gea benchmark`, `gea help benchmark`; an assistant
|
|
1071
|
+
reads it as the `benchmark` tool.
|
|
1072
|
+
|
|
1073
|
+
### Public data: a real pad
|
|
1074
|
+
|
|
1075
|
+
A pad anyone may check. The Utah FORGE project - the U.S. Department of
|
|
1076
|
+
Energy's geothermal field laboratory near Milford, Utah - publishes the
|
|
1077
|
+
rig recorders of five wells drilled through the same basin fill and
|
|
1078
|
+
granite between 2017 and 2023, under Creative Commons Attribution 4.0.
|
|
1079
|
+
`gea public-pad` turns those files into a site of its own, so the rig
|
|
1080
|
+
time, the roadmap, the drilling alerts and the benchmark run on real
|
|
1081
|
+
records before any client's. The program does not contain the files and
|
|
1082
|
+
does not fetch them: the site downloads them in a browser from the
|
|
1083
|
+
Geothermal Data Repository, names the folder, and the program checks each
|
|
1084
|
+
file against the size and the SHA-256 it had when this release was checked
|
|
1085
|
+
with it, converts the three layouts that are not the recorder's own
|
|
1086
|
+
export, attaches each well, and keeps on the record what was done to
|
|
1087
|
+
each - 16A(78)-32's bit depth is RECONSTRUCTED from the block and the
|
|
1088
|
+
slips and is marked so on every page. Every page and report of that site
|
|
1089
|
+
ends with the credit the licence asks for.
|
|
1090
|
+
|
|
1091
|
+
What this release made of them, on the five files as published:
|
|
1092
|
+
|
|
1093
|
+
| Well | Drilled, ft | Days | ft/day | On bottom, ft/h | Median connection, min |
|
|
1094
|
+
|---|---|---|---|---|---|
|
|
1095
|
+
| 58-32 (2017) | 6,288 | 43.5 | 145 | 15.9 | 14.4 |
|
|
1096
|
+
| 16A(78)-32 (2020) | 11,035 | 67.8 | 163 | 34.4 | 11.3 |
|
|
1097
|
+
| 56-32 (2021) | 9,232 | 19.0 | 487 | 46.6 | 7.5 |
|
|
1098
|
+
| 78B-32 (2021) | 9,372 | 29.1 | 322 | 84.7 | 7.7 |
|
|
1099
|
+
| 16B(78)-32 (2023) | 10,490 | 52.4 | 200 | 45.7 | 10.2 |
|
|
1100
|
+
|
|
1101
|
+
Against the pad's best the five wells spent 812 of their 1,256 on-bottom
|
|
1102
|
+
hours beyond it. The roadmap's own check on them is split - running nearer
|
|
1103
|
+
the window was the faster half on two wells and the slower on two - which
|
|
1104
|
+
is the page saying, of wells drilled six years apart in three hole sizes,
|
|
1105
|
+
that one well's parameters are not the next well's roadmap. The drilling
|
|
1106
|
+
alerts, replayed, find 27 motor stalls on the three wells whose records
|
|
1107
|
+
can show one, three falls in off-bottom pressure on 78B-32 that no trip followed
|
|
1108
|
+
and one on 58-32 that a trip out of the hole followed within twelve hours.
|
|
1109
|
+
|
|
1110
|
+
The same site takes the published pumping records of the two deviated
|
|
1111
|
+
wells' stimulation - three stages on 16A(78)-32 in April 2022, nine more
|
|
1112
|
+
and four on 16B(78)-32 in April 2024 - when those files are in the folder
|
|
1113
|
+
too, and the Frac treatment tab reads all sixteen: 132,132 bbl of slurry
|
|
1114
|
+
and 2,969,800 lbm of proppant by the records' own rates, fifteen of the
|
|
1115
|
+
sixteen volumes within 0.6 % of the record's own totaliser (the sixteenth
|
|
1116
|
+
3.6 % under it: that totaliser also counted the lines being primed); an
|
|
1117
|
+
ISIP at every stage, 3,289 to 5,664 psi at the surface; thirteen stages
|
|
1118
|
+
stepped down to the shut-in. The service company's reports are published with the
|
|
1119
|
+
2022 stages, so the page can be checked against them: for stage 1 the
|
|
1120
|
+
company gives a final ISIP of 4,019 psi and 3,715, 3,582 and 3,501 psi
|
|
1121
|
+
after 5, 10 and 15 minutes, and this page reads 3,985 psi (3,975 to 3,997)
|
|
1122
|
+
and 3,720, 3,585 and 3,486; for stage 2, 3,918 psi and 3,664, 3,565 and
|
|
1123
|
+
3,506 against 3,859 (3,852 to 3,862) and 3,665, 3,572 and 3,508. The page's
|
|
1124
|
+
ISIP is the lower because it is read back along the decline, not taken at
|
|
1125
|
+
the top of the ringing. No
|
|
1126
|
+
stage's fall-off shows a closure: the records stop a quarter of an hour
|
|
1127
|
+
after the pumps, and the page says so and offers none.
|
|
1128
|
+
|
|
1129
|
+
Data: Utah FORGE, Energy & Geoscience Institute at the University of Utah,
|
|
1130
|
+
funded by the U.S. Department of Energy; Geothermal Data Repository,
|
|
1131
|
+
gdr.openei.org; CC BY 4.0. The **Public data** tab, `gea public-pad`,
|
|
1132
|
+
`gea help public-data`.
|
|
1133
|
+
|
|
1037
1134
|
### Plan vs actual and the survey tools
|
|
1038
1135
|
|
|
1039
1136
|
Each well against its directional plan: at every survey station, how far
|
|
@@ -1698,7 +1795,7 @@ attaches the zips to the GitHub release of that tag.
|
|
|
1698
1795
|
|
|
1699
1796
|
### The Windows installer
|
|
1700
1797
|
|
|
1701
|
-
Every release also carries `GEA-Program-Setup-0.
|
|
1798
|
+
Every release also carries `GEA-Program-Setup-0.91.0.exe` (for 0.91.0): the
|
|
1702
1799
|
same Windows kit installed like any Windows program, for the signed-in user
|
|
1703
1800
|
alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
|
|
1704
1801
|
It asks for the site workspace (an existing one such as `C:\site` is used as
|
|
@@ -1717,7 +1814,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
|
|
|
1717
1814
|
software deployment:
|
|
1718
1815
|
|
|
1719
1816
|
```
|
|
1720
|
-
GEA-Program-Setup-0.
|
|
1817
|
+
GEA-Program-Setup-0.91.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
|
|
1721
1818
|
```
|
|
1722
1819
|
|
|
1723
1820
|
The setup is built by Inno Setup 6 from `tools/installer.iss` in the same
|
|
@@ -677,6 +677,32 @@ def main(argv=None) -> int:
|
|
|
677
677
|
p_os.add_argument("--actor", type=str, default="cli")
|
|
678
678
|
p_os.add_argument("--json", action="store_true")
|
|
679
679
|
|
|
680
|
+
p_bm = sub.add_parser("benchmark", help="the wells of a pad against one another: feet per day, on-bottom rate, connections and trips ranked, and each well against the pad's best - every stretch at the rate of the fastest well through it")
|
|
681
|
+
p_bm.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs")
|
|
682
|
+
p_bm.add_argument("--write", action="store_true", help="write reports/benchmark/benchmark.json, .md, .csv and stretches.csv")
|
|
683
|
+
p_bm.add_argument("--actor", type=str, default="cli")
|
|
684
|
+
p_bm.add_argument("--json", action="store_true")
|
|
685
|
+
p_ft = sub.add_parser("frac-treatment", help="each fracturing stage from its own pumping record: what was pumped, the ISIP read back through the ringing with its range, the friction and its two parts from a step-down, the fall-off against G, a step-rate test - nothing fitted to a model of the fracture")
|
|
686
|
+
p_ft.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (stages built with every answer known)")
|
|
687
|
+
p_ft.add_argument("--well", type=str, default=None, help="a well, by its name or id: with --stage, that stage in full")
|
|
688
|
+
p_ft.add_argument("--stage", type=str, default=None, help="the stage (1, 3R, 6A)")
|
|
689
|
+
p_ft.add_argument("--attach", type=str, default=None, help="a stage's treatment record to keep (CSV or Excel: the pressure, the rate and the proppant, second by second); needs --well, --stage and --source")
|
|
690
|
+
p_ft.add_argument("--start", type=str, default=None, help="--attach: the record's first moment, for a file that only has elapsed time (2026-08-03T06:00:00)")
|
|
691
|
+
p_ft.add_argument("--tvd", type=float, default=None, help="declare the true vertical depth of the perforations, ft: for --stage, or every stage of --well; needs --source")
|
|
692
|
+
p_ft.add_argument("--fluid", type=float, default=None, help="with --tvd: the gradient of the fluid in the well at the shut-in, psi/ft (fresh water, 0.433, when not given)")
|
|
693
|
+
p_ft.add_argument("--source", type=str, default="", help="where the record, or the depth, came from")
|
|
694
|
+
p_ft.add_argument("--to-frac-hits", action="store_true", help="give the Frac hits page --well's stage times, read from these records")
|
|
695
|
+
p_ft.add_argument("--write", action="store_true", help="write reports/frac_treatment/frac_treatment.json, .md, stages.csv and a stage table a well")
|
|
696
|
+
p_ft.add_argument("--actor", type=str, default="cli")
|
|
697
|
+
p_ft.add_argument("--json", action="store_true")
|
|
698
|
+
p_pp = sub.add_parser("public-pad", help="a real pad from public data: the Utah FORGE wells' published rig recorders (CC BY 4.0) made into a site of their own - the files to get and where, checked against their sizes and hashes, converted and attached; the program fetches nothing")
|
|
699
|
+
p_pp.add_argument("--folder", type=str, default=None, help="the folder the downloaded files are in; with nothing else, lists each file and whether it is there. Without a folder the self-test runs (stand-ins in each published layout)")
|
|
700
|
+
p_pp.add_argument("--verify", action="store_true", help="hash each file that is there against the SHA-256 this release was checked with")
|
|
701
|
+
p_pp.add_argument("--build", action="store_true", help="make the site at --site from the files in --folder, or add to it the wells it does not have yet")
|
|
702
|
+
p_pp.add_argument("--site", type=str, default=None, help="--build: the folder the site's workspace is made in")
|
|
703
|
+
p_pp.add_argument("--list", action="store_true", help="list the dataset's files, sizes, hashes and where each is published, and exit")
|
|
704
|
+
p_pp.add_argument("--actor", type=str, default="cli")
|
|
705
|
+
p_pp.add_argument("--json", action="store_true")
|
|
680
706
|
p_mc = sub.add_parser("mcp", help="the site, readable by an assistant: a Model Context Protocol server on standard input and output - local (no port), read-only (every tool reads one of the program's pages, none changes anything), logged; with --workspace alone it serves until its input closes")
|
|
681
707
|
p_mc.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (both eras of the protocol against a labelled site)")
|
|
682
708
|
p_mc.add_argument("--allow", type=str, default=None, help="serve only these tools this run, comma-separated (never more than the site offers)")
|
|
@@ -3575,6 +3601,102 @@ def main(argv=None) -> int:
|
|
|
3575
3601
|
for v in f_["versions"][: (50 if a.family else 3)]:
|
|
3576
3602
|
print(f" {v['utc']} {v.get('report_id') or ''} reports/{v['dir']}")
|
|
3577
3603
|
return 0
|
|
3604
|
+
elif a.cmd == "benchmark":
|
|
3605
|
+
import json as _json
|
|
3606
|
+
from . import benchmark as _BM
|
|
3607
|
+
from .cli import _safe_stdout
|
|
3608
|
+
from .workspace import Workspace, WorkspaceError
|
|
3609
|
+
_safe_stdout()
|
|
3610
|
+
if not a.workspace:
|
|
3611
|
+
r = _BM.selftest()
|
|
3612
|
+
print("\n".join(f"{'PASS' if c['pass'] else 'FAIL'} {c['check']}: {c['value']}" for c in r["checks"]) + f"\n{'OK' if r['ok'] else 'FAILED'} - {r['label']}")
|
|
3613
|
+
return 0 if r["ok"] else 1
|
|
3614
|
+
try:
|
|
3615
|
+
ws = Workspace(a.workspace)
|
|
3616
|
+
if a.write:
|
|
3617
|
+
from . import __version__ as _ver90b
|
|
3618
|
+
r = _BM.write_report(ws, _ver90b, a.actor)
|
|
3619
|
+
print(f"written: {', '.join(r['files'])} under {r['folder']}")
|
|
3620
|
+
p = _BM.page(ws)
|
|
3621
|
+
except (_BM.BenchmarkError, WorkspaceError, ValueError, OSError) as e:
|
|
3622
|
+
raise SystemExit(f"benchmark: {e.args[0] if e.args else e}")
|
|
3623
|
+
print(_json.dumps(p, default=str) if a.json else _BM.text(p))
|
|
3624
|
+
return 0
|
|
3625
|
+
elif a.cmd == "frac-treatment":
|
|
3626
|
+
import json as _json
|
|
3627
|
+
from . import frac_treatment as _FT
|
|
3628
|
+
from .cli import _safe_stdout
|
|
3629
|
+
from .workspace import Workspace, WorkspaceError
|
|
3630
|
+
_safe_stdout()
|
|
3631
|
+
if not a.workspace:
|
|
3632
|
+
r = _FT.selftest()
|
|
3633
|
+
print("\n".join(f"{'PASS' if c['pass'] else 'FAIL'} {c['check']}: {c['value']}" for c in r["checks"]) + f"\n{'OK' if r['ok'] else 'FAILED'} - {r['label']}")
|
|
3634
|
+
return 0 if r["ok"] else 1
|
|
3635
|
+
try:
|
|
3636
|
+
ws = Workspace(a.workspace)
|
|
3637
|
+
wid = None
|
|
3638
|
+
if a.well:
|
|
3639
|
+
wid = next((w["id"] for w in ws.wells() if a.well in (w["id"], w.get("display"))), None)
|
|
3640
|
+
if wid is None:
|
|
3641
|
+
raise SystemExit(f"frac-treatment: no well {a.well!r} in this workspace")
|
|
3642
|
+
if a.attach:
|
|
3643
|
+
if not (wid and a.stage):
|
|
3644
|
+
raise SystemExit("frac-treatment: --attach needs --well and --stage")
|
|
3645
|
+
with open(a.attach, "rb") as f_:
|
|
3646
|
+
m_ = _FT.attach(ws, wid, a.stage, a.attach, f_.read(), a.actor, a.source, a.start)
|
|
3647
|
+
print(f"kept: stage {m_['stage']}, {m_['samples']:,} samples from {m_['start'] or 'its first sample'} ({m_['layout']}); read as " + ", ".join(f"{k}: {v}" for k, v in m_["read_as"].items()))
|
|
3648
|
+
if a.tvd is not None:
|
|
3649
|
+
if not wid:
|
|
3650
|
+
raise SystemExit("frac-treatment: --tvd needs --well")
|
|
3651
|
+
d_ = _FT.declare(ws, wid, a.actor, a.source, a.tvd, a.fluid, a.stage)
|
|
3652
|
+
print(f"declared for stage {', '.join(d_['stages'])}: perforations at {d_['tvd_ft']:,.0f} ft TVD, fluid {d_['fluid_psi_ft']:g} psi/ft")
|
|
3653
|
+
if a.to_frac_hits:
|
|
3654
|
+
if not wid:
|
|
3655
|
+
raise SystemExit("frac-treatment: --to-frac-hits needs --well")
|
|
3656
|
+
h_ = _FT.to_frac_hits(ws, wid, a.actor)
|
|
3657
|
+
print(f"the Frac hits page has {h_['stages']} stage(s) for this well, {h_['first'][:16]} to {h_['last'][:16]}")
|
|
3658
|
+
if a.write:
|
|
3659
|
+
from . import __version__ as _ver91
|
|
3660
|
+
r = _FT.write_report(ws, _ver91, a.actor)
|
|
3661
|
+
print(f"written: {', '.join(r['files'])} under {r['folder']}")
|
|
3662
|
+
p = _FT.page(ws, wid, a.stage)
|
|
3663
|
+
except (_FT.TreatmentError, WorkspaceError, KeyError, ValueError, OSError) as e:
|
|
3664
|
+
raise SystemExit(f"frac-treatment: {e.args[0] if e.args else e}")
|
|
3665
|
+
print(_json.dumps(p, default=str) if a.json else _FT.text(p))
|
|
3666
|
+
return 0
|
|
3667
|
+
elif a.cmd == "public-pad":
|
|
3668
|
+
import json as _json
|
|
3669
|
+
from . import public_pad as _PP
|
|
3670
|
+
from .cli import _safe_stdout
|
|
3671
|
+
_safe_stdout()
|
|
3672
|
+
if not a.folder and not a.list:
|
|
3673
|
+
r = _PP.selftest()
|
|
3674
|
+
print("\n".join(f"{'PASS' if c['pass'] else 'FAIL'} {c['check']}: {c['value']}" for c in r["checks"]) + f"\n{'OK' if r['ok'] else 'FAILED'} - {r['label']}")
|
|
3675
|
+
return 0 if r["ok"] else 1
|
|
3676
|
+
try:
|
|
3677
|
+
if a.build:
|
|
3678
|
+
if not a.site:
|
|
3679
|
+
raise SystemExit("public-pad: --build needs --site, the folder the site is made in")
|
|
3680
|
+
last_ = {"t": ""}
|
|
3681
|
+
|
|
3682
|
+
def say_(d_):
|
|
3683
|
+
t_ = f"{d_.get('well', '')} {d_.get('step', '')}".strip()
|
|
3684
|
+
if t_ != last_["t"] and d_.get("step") != "done":
|
|
3685
|
+
last_["t"] = t_
|
|
3686
|
+
print(f" {d_.get('n', '')}/{d_.get('of', '')} {t_}", flush=True)
|
|
3687
|
+
r = _PP.build(a.folder, a.site, a.actor, verify=True, progress=say_)
|
|
3688
|
+
print(f"{r['name']} at {r['path']}: " + (f"added {', '.join(r['added'])}" if r["added"] else "nothing to add") + f"; it has {', '.join(r['wells'])}")
|
|
3689
|
+
if r.get("stages"):
|
|
3690
|
+
print(f" and the pumping record of {len(r['stages'])} stimulation stage(s): {', '.join(r['stages'])}")
|
|
3691
|
+
for e_ in r["record"]["wells"]:
|
|
3692
|
+
for n_ in e_["notes"]:
|
|
3693
|
+
print(f" {e_['well']}: {n_}")
|
|
3694
|
+
return 0
|
|
3695
|
+
s_ = _PP.status(a.folder or "", verify=a.verify)
|
|
3696
|
+
except (_PP.PublicPadError, OSError) as e:
|
|
3697
|
+
raise SystemExit(f"public-pad: {e.args[0] if e.args else e}")
|
|
3698
|
+
print(_json.dumps(s_, default=str) if a.json else _PP.text(s_))
|
|
3699
|
+
return 0
|
|
3578
3700
|
elif a.cmd == "mcp":
|
|
3579
3701
|
import json as _json
|
|
3580
3702
|
from . import mcp_server as _MC
|