gea-program 0.77.0__tar.gz → 0.78.1__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.77.0/gea_program.egg-info → gea_program-0.78.1}/PKG-INFO +8 -5
- {gea_program-0.77.0 → gea_program-0.78.1}/README.md +7 -4
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/__init__.py +1 -1
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/acceptance_tests.py +71 -14
- gea_program-0.78.1/gea/help/driller.md +13 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/install.md +2 -2
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/reader.md +1 -1
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/recorder.md +1 -1
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/01-install.md +2 -2
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/19-dossier-reader.md +1 -1
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/22-updates.md +1 -1
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/25-install-recorder.md +2 -2
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/28-driller-office.md +1 -1
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/29-driller-rig.md +1 -1
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial.md +2 -2
- {gea_program-0.77.0 → gea_program-0.78.1/gea_program.egg-info}/PKG-INFO +8 -5
- {gea_program-0.77.0 → gea_program-0.78.1}/pyproject.toml +1 -1
- gea_program-0.77.0/gea/help/driller.md +0 -13
- {gea_program-0.77.0 → gea_program-0.78.1}/LICENSE +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/BENCH_TEST_PROTOCOL.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/__main__.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/accuracy_statement.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/alarm_engine.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/alerts.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/backup.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/bench.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/bit_seismic.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/blind_harness.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/casing_design.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/barbados_110_consolidation.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/fram_909_organic_petrography.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/l06_06_nl_survey.csv +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/l07_01_nl_excerpt.las +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/med_160_sapropels.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/med_160_sapropels.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/sumatra_362_cohesion.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog_map.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog_register.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/certificates.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/cli.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/client_reports.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/collision.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/config_versioning.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/conformance.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/control_room.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/correlation.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/dashboard.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/declarations.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/decline.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/deviation.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/dlis.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/dnp3.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/doctor.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/dossier.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/dossier_verify.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/downhole_engine.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/drift_monitor.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/drill_string.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/driller_link.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/earth_model.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/economics.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/ed25519.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/edr.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/elevation.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/etp.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/etp12_schemas.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/example_register_map.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/fat_sat.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/field_pull.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/files.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/fixtures/README.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/fixtures/ne_110m_coastline.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/follower.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/forward_model.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/frac_hits.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/friction_priors.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/gamma.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/gauge_aging.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/gauge_specs.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/geodesy.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/geomag.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/gravity_reference.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/hartip.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/IT_SECURITY.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/TESTER_GUIDE.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/alarms.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/alerts.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/audit-update.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/backup.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/bit-image.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/casing.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/catalog.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/charts.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/collision.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/company-sign-in.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/conformance.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/control-room.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/data-in.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/declare.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/decline.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/dlis.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/doctor.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/dossier.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/drift.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/drillstring.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/economics.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/edr.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/etp.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/field-ports.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/files.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/frac-hits.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/historian.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/https.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/hydraulics.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/instruments.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/interval.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/invoice-check.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/map.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/month-end.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/notifications.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/opseis.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/osdu.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/pad-summary.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/patches.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/penetrator.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/plan.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/pore-pressure.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/ppdm.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/quakeml.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/quality.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/records.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/report-history.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/rig-time.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/rocks.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/seedlink.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/seismic.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/setup.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/simulation.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/site.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/sites.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/slip.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/soak.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/sra.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/start.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/structure.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tools.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/torque-drag.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/transients.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/02-sign-in.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/03-site.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/04-add-well.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/05-records.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/06-well-page.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/07-declare.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/08-patches.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/09-alarms.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/10-control-room.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/11-summary-month.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/12-where-the-well-is.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/13-drilling-pages.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/14-production-pages.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/15-seismic.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/16-seismicity.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/17-recorder-office.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/18-reports.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/20-admin.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/21-upkeep.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/23-vpn.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/24-the-box.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/26-monitor.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/tutorial/27-mirror-vpn.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/upkeep.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/vibration.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/vpn.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/well-report.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/well-tests.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/help/well3d.md +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/helplib.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/housekeeping.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/hydraulics.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/icon.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/interval.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/inverse_engine.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/invoice_check.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/jobs.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/launcher.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/live_ports.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/loadtest.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/matplotlib_demo.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/modbus.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/modbus_rtu.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/model_card.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/month_end.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/mqtt_port.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/notify.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/oidc.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/oidc_mock.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/op_seismicity.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/opcua_port.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/operator_app.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/osdu.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/pad_summary.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/patches.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/pdf_report.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/penetrator.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/permits.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/piwebapi.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/pore_pressure.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/ports.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/ppdm.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/profile_catalog.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/project.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/qt6_downhole_app.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/quakeml.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reader.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reader_app.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reconciler.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/recorder_link.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/WMM2025.COF +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/eia_prices.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/eia_wti_daily.csv.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/iscwsa_rev4_example.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/iscwsa_rev5_example.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/l0701_sonic_gr.las.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/l0701_sonic_gr.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/libmseed_steim.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/libmseed_steim1_4096.mseed +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/libmseed_steim2_4096.mseed +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/libmseed_steim2_512.mseed +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/mahoning_example.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/mud_motor_specs.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/owsg_tool_models.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/penetrator_ratings.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/seismicity_protocols.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/tool_sources.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/us_outline.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/us_outline.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_3d.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_f4_interpretation.las.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_f4_logs.provenance.json +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_f4_lwd.las.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_surfaces.json.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_traj_F-10.xml.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_traj_F-4.xml.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/reference/volve_well_picks.csv.gz +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/report_history.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/rig_state.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/rock_inventory.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/sample_record.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/sample_well_profile.csv +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/sbom.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seedlink.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/segy.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_array.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_assoc.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_detect.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_film.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_harmonic.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_qc.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_response.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_signature.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_track.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_uncertainty.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_unlisted.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/seismic_watch.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/sensor_swap.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/series_cache.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/service.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/service_life.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/setup_checklist.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/shapefile.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/shell.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/shut_in.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/simulation.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/site_map.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/sla_report.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/slip.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/soak.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/sra.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/store_forward.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/strata_join.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/structure.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/supervisor.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/survey_cmd.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/survey_view.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/telemetry.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/timestamp.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/tls.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/tool_catalog.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/tool_library.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/tool_taxonomy.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/torque_drag.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/transient.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/tray.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/tutorial.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/updates.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/vibration.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/vpn.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/web/app.html +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/web/reader.html +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/well3d.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/well_assembler.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/well_records.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/well_report.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/well_test_validation.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/wellplan.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/wellpos.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/winident.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/wits0.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/witsml.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/workspace.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/workspaces.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/x25519.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea/xlsx_read.py +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea_program.egg-info/SOURCES.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea_program.egg-info/dependency_links.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea_program.egg-info/entry_points.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea_program.egg-info/requires.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/gea_program.egg-info/top_level.txt +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/setup.cfg +0 -0
- {gea_program-0.77.0 → gea_program-0.78.1}/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.78.1
|
|
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
|
|
@@ -472,7 +472,10 @@ the EDR's WITS0 feed and the pre-drill model of the target layer and, every
|
|
|
472
472
|
build, drop or hold and by how much (toolface and steering ratio for a
|
|
473
473
|
rotary steerable system), the weight on bit, the rotary speed, the flow
|
|
474
474
|
rate, and whether to drill on, circulate, or ream and wash first - with its
|
|
475
|
-
reasons and the confidence of each choice.
|
|
475
|
+
reasons and the confidence of each choice. A position filter (since
|
|
476
|
+
0.78.1) places the bit in the layer the way a geosteerer does, from the
|
|
477
|
+
gamma and the deep-resistivity distance against the model, and the screen
|
|
478
|
+
draws the band it puts the layer in. The driller accepts, rejects or
|
|
476
479
|
records what was done instead, by name; every recommendation, answer and
|
|
477
480
|
command is on record with its hash, and GEA pulls the records into the
|
|
478
481
|
well from the **Drill string** tab's card (`gea workspace --path C:\site
|
|
@@ -827,7 +830,7 @@ unsigned, the key hand-overs - and shows the reports as they were signed. A
|
|
|
827
830
|
reader made from the workspace knows the site's key fingerprints, so it
|
|
828
831
|
says whether a dossier is the site's; it allows no network request, and it
|
|
829
832
|
leaves the trusted time-stamp to `verify_dossier.py`. For a client who wants
|
|
830
|
-
it installed, every release also carries `GEA-Reader-Setup-0.
|
|
833
|
+
it installed, every release also carries `GEA-Reader-Setup-0.78.1.exe`: GEA
|
|
831
834
|
Reader as a Windows program of its own - its own icon and taskbar button,
|
|
832
835
|
Check with GEA Reader on a dossier's right-click menu, fingerprints the client
|
|
833
836
|
saves kept on that computer, nothing of GEA-Program. `gea help reader`.
|
|
@@ -1592,7 +1595,7 @@ attaches the zips to the GitHub release of that tag.
|
|
|
1592
1595
|
|
|
1593
1596
|
### The Windows installer
|
|
1594
1597
|
|
|
1595
|
-
Every release also carries `GEA-Program-Setup-0.
|
|
1598
|
+
Every release also carries `GEA-Program-Setup-0.78.1.exe` (for 0.78.1): the
|
|
1596
1599
|
same Windows kit installed like any Windows program, for the signed-in user
|
|
1597
1600
|
alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
|
|
1598
1601
|
It asks for the site workspace (an existing one such as `C:\site` is used as
|
|
@@ -1611,7 +1614,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
|
|
|
1611
1614
|
software deployment:
|
|
1612
1615
|
|
|
1613
1616
|
```
|
|
1614
|
-
GEA-Program-Setup-0.
|
|
1617
|
+
GEA-Program-Setup-0.78.1.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
|
|
1615
1618
|
```
|
|
1616
1619
|
|
|
1617
1620
|
The setup is built by Inno Setup 6 from `tools/installer.iss` in the same
|
|
@@ -433,7 +433,10 @@ the EDR's WITS0 feed and the pre-drill model of the target layer and, every
|
|
|
433
433
|
build, drop or hold and by how much (toolface and steering ratio for a
|
|
434
434
|
rotary steerable system), the weight on bit, the rotary speed, the flow
|
|
435
435
|
rate, and whether to drill on, circulate, or ream and wash first - with its
|
|
436
|
-
reasons and the confidence of each choice.
|
|
436
|
+
reasons and the confidence of each choice. A position filter (since
|
|
437
|
+
0.78.1) places the bit in the layer the way a geosteerer does, from the
|
|
438
|
+
gamma and the deep-resistivity distance against the model, and the screen
|
|
439
|
+
draws the band it puts the layer in. The driller accepts, rejects or
|
|
437
440
|
records what was done instead, by name; every recommendation, answer and
|
|
438
441
|
command is on record with its hash, and GEA pulls the records into the
|
|
439
442
|
well from the **Drill string** tab's card (`gea workspace --path C:\site
|
|
@@ -788,7 +791,7 @@ unsigned, the key hand-overs - and shows the reports as they were signed. A
|
|
|
788
791
|
reader made from the workspace knows the site's key fingerprints, so it
|
|
789
792
|
says whether a dossier is the site's; it allows no network request, and it
|
|
790
793
|
leaves the trusted time-stamp to `verify_dossier.py`. For a client who wants
|
|
791
|
-
it installed, every release also carries `GEA-Reader-Setup-0.
|
|
794
|
+
it installed, every release also carries `GEA-Reader-Setup-0.78.1.exe`: GEA
|
|
792
795
|
Reader as a Windows program of its own - its own icon and taskbar button,
|
|
793
796
|
Check with GEA Reader on a dossier's right-click menu, fingerprints the client
|
|
794
797
|
saves kept on that computer, nothing of GEA-Program. `gea help reader`.
|
|
@@ -1553,7 +1556,7 @@ attaches the zips to the GitHub release of that tag.
|
|
|
1553
1556
|
|
|
1554
1557
|
### The Windows installer
|
|
1555
1558
|
|
|
1556
|
-
Every release also carries `GEA-Program-Setup-0.
|
|
1559
|
+
Every release also carries `GEA-Program-Setup-0.78.1.exe` (for 0.78.1): the
|
|
1557
1560
|
same Windows kit installed like any Windows program, for the signed-in user
|
|
1558
1561
|
alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
|
|
1559
1562
|
It asks for the site workspace (an existing one such as `C:\site` is used as
|
|
@@ -1572,7 +1575,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
|
|
|
1572
1575
|
software deployment:
|
|
1573
1576
|
|
|
1574
1577
|
```
|
|
1575
|
-
GEA-Program-Setup-0.
|
|
1578
|
+
GEA-Program-Setup-0.78.1.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
|
|
1576
1579
|
```
|
|
1577
1580
|
|
|
1578
1581
|
The setup is built by Inno Setup 6 from `tools/installer.iss` in the same
|
|
@@ -1835,8 +1835,11 @@ def section_ad_patch_panel(tmp: str) -> None:
|
|
|
1835
1835
|
r2 = _cli(["witsml", "--write-example-config", str(Path(tmp, "wm.json"))], tmp)
|
|
1836
1836
|
r3 = _cli(["wits0", "--config", str(Path(tmp, "w0.json")), "--replay", rec, "--out", "w0_records.csv", "--stream-csv", "w0_stream.csv"], tmp)
|
|
1837
1837
|
r4 = _cli(["wits0-sim", "--help"], tmp)
|
|
1838
|
-
|
|
1839
|
-
|
|
1838
|
+
ad10 = {"maps": r1.returncode == 0 and r2.returncode == 0, "replay": r3.returncode == 0 and Path(tmp, "w0_stream.csv").exists(), "sim_help": r4.returncode == 0 and "--connect" in r4.stdout}
|
|
1839
|
+
ad10_bad = [k for k, v in ad10.items() if not v]
|
|
1840
|
+
ok(not ad10_bad,
|
|
1841
|
+
"AD10 CLI: example maps for wits0 and witsml; `gea wits0 --replay` writes the records and the stream CSV; `gea wits0-sim` is there for a site to rehearse with"
|
|
1842
|
+
+ (f" [failed: {', '.join(ad10_bad)}; rc {r1.returncode}/{r2.returncode}/{r3.returncode}/{r4.returncode}; " + "; ".join((r_.stderr or r_.stdout).strip()[-200:].replace(chr(10), ' ') for r_ in (r1, r2, r3, r4) if r_.returncode != 0) + "]" if ad10_bad else ""))
|
|
1840
1843
|
|
|
1841
1844
|
|
|
1842
1845
|
def section_ae_doctor(tmp: str) -> None:
|
|
@@ -15892,12 +15895,13 @@ def section_dr_field_recorder(tmp: str) -> None:
|
|
|
15892
15895
|
from . import recorder_link as RL
|
|
15893
15896
|
prog = RL.program()
|
|
15894
15897
|
ws3 = Workspace.create(str(d / "ws3"), "Pad 3 sim", actor="tester")
|
|
15895
|
-
|
|
15898
|
+
import socket as _sk
|
|
15899
|
+
_s = _sk.socket(); _s.bind(("127.0.0.1", 0)); port = _s.getsockname()[1]; _s.close() # a free port: the driller's twin and a real box may hold 8790-8791
|
|
15896
15900
|
if prog is None:
|
|
15897
15901
|
ok(True, "DR4 the simulated box and the monitor: the recorder's program is not installed beside GEA in this install (the kit and the setup "
|
|
15898
15902
|
"carry it); nothing to start here")
|
|
15899
15903
|
else:
|
|
15900
|
-
st = RL.start_sim(ws3, actor="tester", port=port)
|
|
15904
|
+
st = RL.start_sim(ws3, actor="tester", port=port, wait_s=25.0) # a Windows PC scanning new files takes its time over the first start
|
|
15901
15905
|
live = None
|
|
15902
15906
|
try:
|
|
15903
15907
|
if st["running"]:
|
|
@@ -15923,6 +15927,11 @@ def section_dr_field_recorder(tmp: str) -> None:
|
|
|
15923
15927
|
"kit_wheel": "gea-recorder=={version}" in (pkg.parent / "tools" / "build_installer.py").read_text(encoding="utf-8") if (pkg.parent / "tools" / "build_installer.py").is_file() else True,
|
|
15924
15928
|
}
|
|
15925
15929
|
failed4 = [k for k, v in c4.items() if not v]
|
|
15930
|
+
if failed4:
|
|
15931
|
+
try:
|
|
15932
|
+
failed4.append("console: " + Path(RL.sim_dir(ws3), "console.log").read_text(encoding="utf-8", errors="replace").strip()[-300:].replace("\n", " | "))
|
|
15933
|
+
except OSError:
|
|
15934
|
+
pass
|
|
15926
15935
|
ok(not failed4,
|
|
15927
15936
|
"DR4 the control panel starts the recorder on this computer as a simulated box (the test signal in place of the ADC, a process of its own), "
|
|
15928
15937
|
"its monitor answers, it stops the way systemd would with every file closed and listed, and the pull makes the stations from them; the "
|
|
@@ -16182,17 +16191,26 @@ def section_dt_vpn(tmp: str) -> None:
|
|
|
16182
16191
|
sh = shutil.which("sh") if os.name != "nt" else None # the scripts run on Linux hosts; Git's sh.exe on a Windows machine is not that
|
|
16183
16192
|
sh_ok = None
|
|
16184
16193
|
if sh:
|
|
16194
|
+
tool_notes = []
|
|
16185
16195
|
try:
|
|
16186
|
-
sh_ok =
|
|
16187
|
-
|
|
16188
|
-
|
|
16196
|
+
sh_ok = True
|
|
16197
|
+
for f in ("hub/install-hub.sh", f"{box['id']}/vpn.sh"):
|
|
16198
|
+
rs = [subprocess.run([sh, "-n", str(root / f)], capture_output=True, text=True, timeout=20) for _ in range(2)]
|
|
16199
|
+
if not any(r_.returncode == 0 for r_ in rs):
|
|
16200
|
+
sh_ok = False; tool_notes.append(f"sh -n {f}: rc {rs[-1].returncode} {rs[-1].stderr.strip()[:160]}")
|
|
16201
|
+
except (OSError, subprocess.SubprocessError) as e:
|
|
16202
|
+
sh_ok = None; tool_notes.append(f"sh: {type(e).__name__}")
|
|
16189
16203
|
wgq = shutil.which("wg-quick") if os.name != "nt" else None
|
|
16190
16204
|
strip_ok = None
|
|
16191
16205
|
if wgq:
|
|
16192
16206
|
try:
|
|
16193
|
-
strip_ok =
|
|
16194
|
-
|
|
16195
|
-
|
|
16207
|
+
strip_ok = True
|
|
16208
|
+
for f in ("hub/gea-vpn.conf", f"{box['id']}/gea-vpn.conf", "office/gea-vpn.conf"):
|
|
16209
|
+
rs = [subprocess.run([wgq, "strip", str(root / f)], capture_output=True, text=True, timeout=20) for _ in range(2)]
|
|
16210
|
+
if not any(r_.returncode == 0 for r_ in rs):
|
|
16211
|
+
strip_ok = False; tool_notes.append(f"wg-quick strip {f}: rc {rs[-1].returncode} {rs[-1].stderr.strip()[:160]}")
|
|
16212
|
+
except (OSError, subprocess.SubprocessError) as e:
|
|
16213
|
+
strip_ok = None; tool_notes.append(f"wg-quick: {type(e).__name__}")
|
|
16196
16214
|
removed = VP.remove_member(ws, "tester", rd["id"])
|
|
16197
16215
|
rd_gone_at_once = not rd_zip.exists() and not (root / rd["id"]).exists()
|
|
16198
16216
|
VP.write_bundles(ws, "tester")
|
|
@@ -16212,7 +16230,7 @@ def section_dt_vpn(tmp: str) -> None:
|
|
|
16212
16230
|
ok(not failed3,
|
|
16213
16231
|
"DT3 the hub bundle (the configuration, an idempotent installer that opens 51820/udp, turns forwarding on and syncs a running tunnel, a README) "
|
|
16214
16232
|
"and a bundle per member (a box's with vpn.sh, a window's with a README)" + (", read back by wg-quick strip" if wgq else "") + (", sh -n clean" if sh else "")
|
|
16215
|
-
+ "; a member removed leaves the hub's configuration and the files without it" + (f" [failed: {', '.join(failed3)}]" if failed3 else ""))
|
|
16233
|
+
+ "; a member removed leaves the hub's configuration and the files without it" + (f" [failed: {', '.join(failed3)}{('; ' + '; '.join(tool_notes)) if tool_notes else ''}]" if failed3 else ""))
|
|
16216
16234
|
# -- DT4 the backup carries the keys; the routes; the card; the command; the help --------------------------------------
|
|
16217
16235
|
bk = BK.make(ws.path, str(d / "bk"), actor="tester")
|
|
16218
16236
|
with zipfile.ZipFile(bk["path"]) as z:
|
|
@@ -16506,7 +16524,7 @@ def section_dv_driller(tmp: str) -> None:
|
|
|
16506
16524
|
ex = shipped.explain(T.Lateral(T.Scene(2)).reset())
|
|
16507
16525
|
c2 = {
|
|
16508
16526
|
"gradients": grads_ok,
|
|
16509
|
-
"beats_textbook": ev["reward"] > tb["reward"] and ev["in_layer_pct"] > tb["in_layer_pct"] +
|
|
16527
|
+
"beats_textbook": ev["reward"] > tb["reward"] and ev["in_layer_pct"] > tb["in_layer_pct"] + 5.0 and ev["stuck"] <= tb["stuck"],
|
|
16510
16528
|
"learns": after["reward"] > before["reward"],
|
|
16511
16529
|
"file": same and layout_refused and int(shipped.meta.get("trained_steps", 0)) >= 1000000,
|
|
16512
16530
|
"explains": set(ex["choices"]) == set(T.ACTION_NAMES) and all(0 < c["confidence"] <= 1 for c in ex["choices"].values()) and ex["choices"]["wob"]["choice"] in T.WOB_CHOICES,
|
|
@@ -16543,7 +16561,9 @@ def section_dv_driller(tmp: str) -> None:
|
|
|
16543
16561
|
s_noname, _ = call("/api/answer", {"what": "accept", "by": ""})
|
|
16544
16562
|
s_acc, _ = call("/api/answer", {"what": "accept", "by": "tester"})
|
|
16545
16563
|
s_twice, _ = call("/api/answer", {"what": "accept", "by": "tester"})
|
|
16546
|
-
time.
|
|
16564
|
+
t_end = time.monotonic() + 15 # the next decision, however slow the machine
|
|
16565
|
+
while time.monotonic() < t_end and not drl.advisor.current:
|
|
16566
|
+
time.sleep(0.2)
|
|
16547
16567
|
s_ov, _ = call("/api/answer", {"what": "override", "by": "tester", "note": "held", "override": {"build_deg_100ft": 0.0, "wob_klb": 25}})
|
|
16548
16568
|
md = drl.feed.snapshot()["state"]["hole_depth"]
|
|
16549
16569
|
s_long, _ = call("/api/arm", {"by": "tester", "to_md": md + 5000})
|
|
@@ -16594,7 +16614,8 @@ def section_dv_driller(tmp: str) -> None:
|
|
|
16594
16614
|
"armed": s_long == 400 and s_arm == 200 and armed.get("ok") and s_arm2 == 200 and any(c["event"] == "command" and c["result"]["sent"] is False and c["by"] == "tester" for c in cmds),
|
|
16595
16615
|
"disarmed": ended_by_section and ended_by_limit and cmds[-1]["event"] == "disarmed",
|
|
16596
16616
|
"refusals": cfg_refused and arm_refused,
|
|
16597
|
-
"screen": live["ok"] and live["twin"]["label"] == "SIMULATION" and "Arm for this section" in screen and "Did something else" in screen and health["program"] == "GEA Driller" and traversal
|
|
16617
|
+
"screen": live["ok"] and live["twin"]["label"] == "SIMULATION" and "Arm for this section" in screen and "Did something else" in screen and health["program"] == "GEA Driller" and traversal
|
|
16618
|
+
and live["advisor"]["estimate"] is not None and 0.0 <= live["advisor"]["estimate"]["p_in"] <= 1.0 and "position filter" in " ".join(cur["reasons"]),
|
|
16598
16619
|
"manifest": {"decisions.jsonl", "commands.jsonl", "surveys.csv"} <= {f["file"] for f in man["files"]} and all(f["sha256"] for f in man["files"]) and man["program"] == "GEA Driller",
|
|
16599
16620
|
}
|
|
16600
16621
|
failed3 = [k for k, v in c3.items() if not v]
|
|
@@ -16665,6 +16686,42 @@ def section_dv_driller(tmp: str) -> None:
|
|
|
16665
16686
|
"kit": (wf is None or ("GEA-Driller-" in wf and "build_driller.py" in wf)) and (bi is None or "gea-driller=={version}" in bi) and (not (pkg.parent / "tools").is_dir() or (pkg.parent / "tools" / "build_driller.py").is_file()),
|
|
16666
16687
|
"help": not H.check("driller") and any(t_ == "driller" for t_, _, _ in H.INDEX) and "GEA Driller" in (pkg / "help" / "IT_SECURITY.md").read_text(encoding="utf-8"),
|
|
16667
16688
|
}
|
|
16689
|
+
# -- DV5 the position filter -----------------------------------------------------------------------------------------------
|
|
16690
|
+
PF = importlib.import_module("gea_driller.position")
|
|
16691
|
+
conf = {"above": {"above": 0, "in": 0, "below": 0}, "in": {"above": 0, "in": 0, "below": 0}, "below": {"above": 0, "in": 0, "below": 0}}
|
|
16692
|
+
errs = []; n_steps = 0
|
|
16693
|
+
for sd in range(20):
|
|
16694
|
+
sc = T.Scene(sd); lt = T.Lateral(sc); ob = lt.reset()
|
|
16695
|
+
while not lt.done:
|
|
16696
|
+
ob, _, _, inf = lt.step(T.textbook_action(ob))
|
|
16697
|
+
if "estimate" in inf:
|
|
16698
|
+
e_ = inf["estimate"]; truth = inf["lithology"]
|
|
16699
|
+
guess = max(("above", e_["p_above"]), ("in", e_["p_in"]), ("below", e_["p_below"]), key=lambda x: x[1])[0]
|
|
16700
|
+
conf[truth][guess] += 1; n_steps += 1
|
|
16701
|
+
errs.append(abs(e_["d_top"] - (lt.tvd - sc.layer_top(lt.vs))))
|
|
16702
|
+
right = sum(conf[k][k] for k in conf); total = sum(sum(v.values()) for v in conf.values())
|
|
16703
|
+
# a filter told nothing but the gamma of a flat layer sits where the model says; told a boundary, it moves
|
|
16704
|
+
f1 = PF.PositionFilter(9000.0, 0.0, 40.0, 60.0, 130.0, 115.0, seed=3)
|
|
16705
|
+
f1.update(9020.0, 60.0); e_mid = f1.estimate(9020.0)
|
|
16706
|
+
f2 = PF.PositionFilter(9000.0, 0.0, 40.0, 60.0, 130.0, 115.0, seed=3)
|
|
16707
|
+
for _ in range(6):
|
|
16708
|
+
f2.predict(30.0); f2.update(9020.0, 62.0, 4.0) # the gamma says the layer, the deep tool says the top is 4 ft above: the bit is just under the top, 16 ft off the model
|
|
16709
|
+
e_top = f2.estimate(9020.0)
|
|
16710
|
+
tb_f = P.evaluate(T.textbook_action, range(20), "textbook")
|
|
16711
|
+
c5 = {
|
|
16712
|
+
# inside a flat-gamma layer the position is unobservable until a boundary is read, and the model's dip error accumulates
|
|
16713
|
+
# with the distance drilled; the side of an exit is then the model's guess where the gamma above and below are alike
|
|
16714
|
+
"classifies": total > 1000 and right / total >= 0.75 and conf["in"]["in"] / max(sum(conf["in"].values()), 1) >= 0.9,
|
|
16715
|
+
"distance": float(np_.median(errs)) < 12.0,
|
|
16716
|
+
"moves": abs(e_mid["d_top"] - 20.0) < 8.0 and abs(e_top["d_top"] - 4.0) < 4.0 and e_top["sigma"] < e_mid["sigma"],
|
|
16717
|
+
"helps": tb_f["in_layer_pct"] >= 50.0,
|
|
16718
|
+
"ahead": abs(e_top["top_ahead_tvd"] - e_top["top_tvd"]) < 10.0 and e_top["base_tvd"] > e_top["top_tvd"],
|
|
16719
|
+
}
|
|
16720
|
+
failed5 = [k for k, v in c5.items() if not v]
|
|
16721
|
+
ok(not failed5,
|
|
16722
|
+
f"DV5 the position filter places the bit above, in or below the layer right {100 * right / max(total, 1):.0f}% of the time on twenty scenes "
|
|
16723
|
+
f"(median distance error {float(np_.median(errs)) if errs else 0:.1f} ft), sits where the model says until a reading moves it and tightens on a boundary reading, "
|
|
16724
|
+
f"carries the layer ahead of the bit, and lifts the textbook driller to {tb_f['in_layer_pct']:.0f}% in the layer" + (f" [failed: {', '.join(failed5)}]" if failed5 else ""))
|
|
16668
16725
|
failed4 = [k for k, v in c4.items() if not v]
|
|
16669
16726
|
ok(not failed4,
|
|
16670
16727
|
"DV4 GEA pulls the driller's records into the well checked against their hashes (a second pull fetches nothing; a file altered after its hash is "
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# GEA Driller - the directional driller's agent
|
|
2
|
+
|
|
3
|
+
> A program on the rig PC that reads the rig's own feed and the pre-drill model, places the bit in the layer with a position filter, and, every 30 ft, recommends in the driller's units what to do next - a policy trained by reinforcement learning in a physics twin of the lateral - with the driller's answer, every command, and the records pulled into GEA.
|
|
4
|
+
|
|
5
|
+
**The command**: on the rig PC, `GEA-Driller-0.78.1.tar.gz` from the release (or the kit's `installers` folder, fetched on the Audit / Update tab): unpack it and run `sudo sh install.sh` on Linux or `install.cmd` on Windows, once; edit its config - the EDR's WITS0 feed (`tcp`, the host and port; `serial`, the COM port), the pre-drill model (the target layer's top TVD at the heel, its thickness and dip, the gamma in, above and below, the deep-resistivity tool, the heel's MD and TVD), the tool's cap, the limits - and restart it. The driller's screen is at port 8790 of the rig PC: `http://192.168.1.60:8790/live`. It shows the section with the model's layer window, the hole drilled through it and - since 0.78.0 - the **position filter**'s band: where the layer is from the readings, as a geosteerer places it (a particle filter over the layer's offset from the model, its dip error and its thickness, moved every decision and kept to the guesses that explain the gamma and the deep-resistivity distance), with the probability the bit is in the layer, above or below it and the distance to the top and the base with its spread, sixty feet ahead; the agent reads the same estimate, and so does the textbook driller it is judged against. Then the recommendation in words - *Build +1.5°/100 ft (toolface up, 25% steering); 25 klb WOB, 120 rpm, 500 gpm* - with its reasons (what the deep-resistivity tool says, the gamma against the model's values, the model's bracket, the limits) and the confidence of each choice, the rig's numbers against the limits, and **Accept**, **Reject** or **Did something else…** with the operator's name. In GEA: the **Drill string** tab's card **GEA Driller** - the rig PC's address and the well, **Pull**: the records come in checked against their hashes, and the table says how many decisions, accepted, rejected, done otherwise, the hole under advice, the armed sections and the commands. **Open the driller's screen** opens the rig PC's screen from its address. Before there is a rig PC: **Start the twin as the rig** runs the driller's program on this computer with a scene drilling itself under the agent - **Open its screen** is the driller's screen with the twin behind it, labelled SIMULATION - and **Pull from it** brings its records in; **Stop it** closes them. Over a cellular modem the rig PC joins GEA-VPN as a member of kind `driller` and GEA pulls from `http://10.77.0.4:8790`. The closed loop: `closed_loop.allowed` in the rig PC's config puts the switch on its screen; an operator arms it by name for one section of at most 500 ft (**Arm for this section**), every decision then goes to the downlink as a command, and the loop disarms itself on a stale feed, a crossed limit, the section's end or **Disarm now** - and this version's only downlink is the null one, which keeps every command on record and sends none, because no vendor's downlink protocol ships with it. From a terminal: `gea workspace --path C:\site --action driller-pull --box http://192.168.1.60:8790 --well SWD-1`; on the rig PC `gea-driller sim --seed 7 --pace 3 --port 8790`, `gea-driller evaluate --scenes 20`, `gea-driller train --seconds 600 --out policy.json`, `gea-driller selftest`.
|
|
6
|
+
|
|
7
|
+
**What it writes**: on the rig PC, `decisions.jsonl` (every observation, recommendation, confidence, reasons and answer), `commands.jsonl` (every arming, command and disarming with its reason) and `surveys.csv`, each with a `.sha256` beside it, and `manifest.json`. In GEA, `wells\SWD-1\driller\` holds the same files as pulled, `manifest.json` and `last_pull.json` with the summary; the audit lines `driller.pull`, `driller.sim_start`, `driller.sim_stop`. The twin as the rig writes under `field\sim-driller\data`.
|
|
8
|
+
|
|
9
|
+
**The number to check**: on the rig PC's screen, the feed's age (a decision is made only on a live feed) and, in GEA's table, accepted against rejected and done otherwise - an agent whose advice is rejected more than taken is not helping, and the records say so. For the agent itself, `gea-driller evaluate` prints the policy against a textbook driller on twenty held-out twin scenes - the hole in the layer, the sweet spot, feet a day, dogleg, stuck pipe, losses - labelled SIMULATION; the self-test refuses a policy that does not beat the textbook.
|
|
10
|
+
|
|
11
|
+
**What this page will not call a measurement**: the twin's figures are a simulation's, however many scenes, and say nothing of a real formation; a recommendation is the agent's reading of the feed, the model and the filter's estimate, not a survey; the filter's band is a probability, not a log, and the hole's position on its screen is projected from the surveys and the continuous inclination, not measured at the bit; the hole-cleaning and balling the agent reasons from are the model's estimates; and "commands sent" is zero in this version by construction.
|
|
12
|
+
|
|
13
|
+
Related: `gea help drillstring`, `gea help recorder`, `gea help vpn`.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> GEA-Program-Setup: the program installed for you like any Windows program - a window of its own, an icon in the notification area, Start-menu and desktop shortcuts, an Add/Remove Programs entry, upgrades in place - with no administrator rights and the site's data left where it is.
|
|
4
4
|
|
|
5
|
-
**The command**: download the setup from the release on GitHub (`GEA-Program-Setup-0.
|
|
5
|
+
**The command**: download the setup from the release on GitHub (`GEA-Program-Setup-0.78.1.exe` for this version) and run it. It installs for you alone, under `%LOCALAPPDATA%\Programs\GEA-Program`, and asks for the site workspace - the folder that holds the wells, reports, records, accounts and keys. An existing one such as `C:\site` is used exactly as it is, its name included; for a new one (by default `%LOCALAPPDATA%\GEA-Program\site`) it also asks the site's name, which heads every report, and makes the workspace with it (left empty, the workspace is named after its folder; an administrator renames the site in Administration's site settings). Then the Start menu's **GEA-Program** (and the desktop shortcut) starts the control panel when it is not running and opens it in a window of its own. A newer setup installs over the older one: it stops the control panel, replaces the program, keeps the workspace and the choices made before. For a site's software deployment: `GEA-Program-Setup-0.78.1.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"` (`/SITENAME` names a workspace the setup makes; one that exists keeps its own name). From a terminal: `gea launch` does what the shortcut does, `gea launch --selftest` says what it would do, `gea tray --selftest` checks the icon.
|
|
6
6
|
|
|
7
7
|
**The window**: Microsoft Edge's app window (`msedge --app=`: the control panel with no tabs and no address bar, its own button on the taskbar, which shows the program's derrick and pins as GEA-Program, not as Edge), with a browser profile of its own (`%LOCALAPPDATA%\GEA-Program\window`, no extensions; the first time, Edge may say it signed that profile in to your Microsoft account - Got it), else Google Chrome's, else a tab in the default browser. Where the browser keeps no cookies (its settings or a policy block them), the sign-in page says so and the control panel holds the sign-in itself, in the window's address, until the window is closed. The control panel itself runs with no window of its own: `gea supervise` keeps it running in the background, starts it again when it asks for a restart, and writes everything it would have shown in a console - the start, the sign-ins, the jobs, a stop and why - to `records\console.log` in the workspace. No PowerShell or console window opens. The kit's `start-dashboard.cmd` still runs it in a console window, for a site that wants to watch it there.
|
|
8
8
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
**The number to check**: Add/Remove Programs lists GEA-Program with the version you installed; `gea doctor --workspace C:\site` ends with `nothing blocks serving`; the Start menu's **Verify GEA-Program** runs the acceptance gate from the installation and ends with `[ACCEPTANCE] OK - N checks passed`. The release's build installs, upgrades and uninstalls the setup silently before it is published, with the control panel running, and checks the workspace untouched afterwards.
|
|
20
20
|
|
|
21
|
-
**Signed**: when the publisher's code-signing certificate is configured for the build, the setup is signed with it (Authenticode, timestamped) and Windows names the publisher; until then it ships unsigned and Windows SmartScreen says "unknown publisher" (More info, then Run anyway). The build's provenance holds either way: `gh attestation verify GEA-Program-Setup-0.
|
|
21
|
+
**Signed**: when the publisher's code-signing certificate is configured for the build, the setup is signed with it (Authenticode, timestamped) and Windows names the publisher; until then it ships unsigned and Windows SmartScreen says "unknown publisher" (More info, then Run anyway). The build's provenance holds either way: `gh attestation verify GEA-Program-Setup-0.78.1.exe -R Daniel8Murphy0007/GEA-Program`. The uninstaller the setup leaves behind is Inno Setup's own and is not signed separately.
|
|
22
22
|
|
|
23
23
|
**What this page will not call a measurement**: the icon's running or stopped is whether the control panel's port answers on this computer, read every three seconds - not whether every patch, job or report behind it is healthy (Home and the Verification page say that).
|
|
24
24
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**The command**: Reports tab -> Signed dossiers -> **Download GEA Reader for your clients**, or `gea reader --workspace C:\site --out C:\site\GEA-Reader.html`. Send the file once, by any channel (email, a USB stick, the client's portal); send the site's key fingerprint separately - by phone, email or in the contract - as for any dossier. The client opens GEA-Reader.html, drops a dossier on it (or chooses it), and reads the verdict: **Valid** (signed with the site's key, or with a newer key the site's key handed over to), **Valid, but signed by a key you were not given**, or **Not valid** with the reason. Below the verdict: each check, the signer's fingerprint, the key hand-overs, and every file the dossier holds - a report opens in the page as it was signed, a PDF in the browser's own viewer, a table or a log as text, and any file can be saved. A dossier that lists source records by hash without carrying them lets the client choose their copies and checks each against its hash.
|
|
6
6
|
|
|
7
|
-
**The program**: for a client who wants it installed, **GEA-Reader-Setup-0.
|
|
7
|
+
**The program**: for a client who wants it installed, **GEA-Reader-Setup-0.78.1.exe** on the release page installs GEA Reader as a Windows program of its own, for the signed-in user, with no administrator rights and nothing of GEA-Program: GEA Reader in the Start menu and on the desktop with its own icon (a white page with a green seal, on blue) and its own taskbar button, and **Check with GEA Reader** on the right-click menu of .zip files (on Windows 11, under Show more options), which opens the dossier at once. It opens the same page in Microsoft Edge's app window with a browser profile of its own (`%LOCALAPPDATA%\GEA-Reader\window`), so a fingerprint the client saves - **Remember this fingerprint**, with whose it is - stays on that computer, and every later dossier signed with that key reads **Valid** with the name the client gave it. `GEA-Reader-portable-0.78.1.zip` is the same program to unzip and run (`GEA-Reader.cmd`). `python\python.exe -m gea_reader --selftest`, in the installed folder, checks the page, the icon, the taskbar identity and the hand-over of a dossier without opening a window.
|
|
8
8
|
|
|
9
9
|
**What it writes**: the one file, GEA-Reader.html (about 40 KB): the checks, written in the page's own script - Ed25519 (RFC 8032) in its own arithmetic, SHA-256 from the browser - and, when made from a workspace, the site's name and the fingerprints of every key it has signed with (the current one and each retired one from the key history: public halves only; the signing key never leaves `keys\`). The audit log records each download (`reader.download`) and each `gea reader` (`reader.write`) with the fingerprints the reader carried. The reader page writes nothing on the client's computer but the fingerprints a client saves (in the browser's storage for the page): it reads the zip it is given, in memory, and a saved copy goes where the client's browser saves downloads. The installed program also writes the page it opens to `%LOCALAPPDATA%\GEA-Reader\page` (with the dossier inside it when one was right-clicked; removed ten minutes later) and its right-click entry under the user's own registry keys, removed with the program.
|
|
10
10
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> GEA Recorder is the program on the pad: a Raspberry Pi in a sealed box that records the ground channels (geophones, accelerometers, electrode dipoles) through a 24-bit ADC and the rig's WITS0 feed, every sample on one GPS-disciplined clock, into hourly miniSEED files with a SHA-256 beside each and a manifest, and serves one status page on the pad network. Nothing to type: power it and it records. GEA pulls its files in and makes stations of them.
|
|
4
4
|
|
|
5
|
-
**The command**: the **Seismic** tab, the card **Field recorder**: the box's address on the pad network (`http://192.168.1.50:8780` - the status page shows the address) or the folder of the USB mirror carried to the office, a station name if the site's is not wanted, then **Pull** (a job). GEA fetches the manifest, downloads every file it does not have, checks each against its SHA-256, and makes or updates two stations: the array of the ground-motion sensors (band 8-80 Hz, the sensors' positions from the box's config) and the electrode station (0.01-5 Hz); each sensor's hours are joined in order into one record, nothing re-sampled or filtered. Pull again later: only the new hours come across, and the stations are updated in place. From a terminal: `gea workspace --path C:\site --action field-pull --box http://192.168.1.50:8780`. On the box: `gea-recorder status`, `gea-recorder selftest`; `sudo sh kiosk.sh` once puts the live view full-screen on a monitor on the box's HDMI port from boot - RECORDING in green or what is wrong in red, the clock, the rig's depth, every channel's last minute and the ground sensors' spectrogram, nothing to press - and the same view is at `/live` on the box's page from any browser on the pad network; `sudo sh install.sh` once, from the release's `GEA-Recorder-0.
|
|
5
|
+
**The command**: the **Seismic** tab, the card **Field recorder**: the box's address on the pad network (`http://192.168.1.50:8780` - the status page shows the address) or the folder of the USB mirror carried to the office, a station name if the site's is not wanted, then **Pull** (a job). GEA fetches the manifest, downloads every file it does not have, checks each against its SHA-256, and makes or updates two stations: the array of the ground-motion sensors (band 8-80 Hz, the sensors' positions from the box's config) and the electrode station (0.01-5 Hz); each sensor's hours are joined in order into one record, nothing re-sampled or filtered. Pull again later: only the new hours come across, and the stations are updated in place. From a terminal: `gea workspace --path C:\site --action field-pull --box http://192.168.1.50:8780`. On the box: `gea-recorder status`, `gea-recorder selftest`; `sudo sh kiosk.sh` once puts the live view full-screen on a monitor on the box's HDMI port from boot - RECORDING in green or what is wrong in red, the clock, the rig's depth, every channel's last minute and the ground sensors' spectrogram, nothing to press - and the same view is at `/live` on the box's page from any browser on the pad network; `sudo sh install.sh` once, from the release's `GEA-Recorder-0.78.1.tar.gz`; the box's README has the parts list, the wiring and the three chrony lines for the GPS clock.
|
|
6
6
|
|
|
7
7
|
**Before there is a Pi**: on the same card, **Start the simulated box**: the recorder's own program runs on this computer with its test signal in place of the ADC (a process of its own, its files under `field\sim-box\` in the workspace, its page on port 8781), **Open its monitor** shows the live screen the attendant will see, **Pull from it** brings its files in as stations, **Stop it** closes every file and lists them. **Open the box's monitor** opens any real box's live screen from its address. The kit and the setup install the recorder's program beside GEA for this; a pip install adds it with `pip install gea-recorder`. **From the office, over the internet**: GEA-VPN (`gea help vpn`, Administration) gives every box a private address the office pulls from (`http://10.77.0.3:8780`) through a tunnel from the pad's cellular modem; the box's zip from that card holds `vpn.sh`, run once on the Pi.
|
|
8
8
|
|
|
@@ -5,10 +5,10 @@ Takes: 15 minutes
|
|
|
5
5
|
> The program installed like any Windows program, with the site's folder chosen once.
|
|
6
6
|
|
|
7
7
|
## Before you start
|
|
8
|
-
You need a Windows PC that will stay on while the site is watched (the office machine, or the doghouse PC), and the setup file for this version, `GEA-Program-Setup-0.
|
|
8
|
+
You need a Windows PC that will stay on while the site is watched (the office machine, or the doghouse PC), and the setup file for this version, `GEA-Program-Setup-0.78.1.exe`, from the release page on GitHub. No administrator rights are needed: the program installs for you alone.
|
|
9
9
|
|
|
10
10
|
## Steps
|
|
11
|
-
1. Double-click `GEA-Program-Setup-0.
|
|
11
|
+
1. Double-click `GEA-Program-Setup-0.78.1.exe`. If Windows asks whether to run it, choose **Run** - the setup is published by the site, not by a store.
|
|
12
12
|
2. The setup asks for the **site workspace**: the one folder that will hold the wells, the reports, the records, the accounts and the keys. For a new site keep the default or type `C:\site`. For a workspace that already exists, point at it - it is used exactly as it is, its name included.
|
|
13
13
|
3. For a new workspace it asks the **site's name** (`Pad 3`). This name heads every report the program writes; an administrator can change it later in Administration, site settings.
|
|
14
14
|
4. Tick the desktop shortcut and finish. The setup puts **GEA-Program** in the Start menu and an icon in the notification area by the clock.
|
|
@@ -8,7 +8,7 @@ Takes: 20 minutes
|
|
|
8
8
|
1. On **Reports**, **Signed dossiers**: **Sign a dossier for the pad**, or one of the wells (the operator role). Tick *embed the source records* to carry the drilling records themselves rather than their hashes. The dossier is a zip: the reports as they stand, the declarations behind them, the audit log, the source records' hashes, the site's Ed25519 signature, and a checker inside (`verify_dossier.py`, plain Python).
|
|
9
9
|
2. **Check** re-checks a dossier this site signed against the workspace as it now stands; a workspace that no longer matches a signed dossier raises an alert. *Check a dossier someone sent you* checks an uploaded one.
|
|
10
10
|
3. **Download GEA Reader for your clients**: one HTML file. Send it to the client once by any channel - email, a USB stick, their portal. Send the site's **key fingerprint** separately - by phone, or in the contract - as for any dossier; the card shows it.
|
|
11
|
-
4. The client opens `GEA-Reader.html` in any current browser, offline, and drops a dossier on it. The verdict: **Valid** (signed with the site's key, or a newer key the site's key handed over to), **Valid, but signed by a key you were not given**, or **Not valid** with the reason. Below it, every file the dossier holds: a report opens in the page as it was signed, a PDF in the browser's own viewer. A client who wants it installed, with a right-click **Check with GEA Reader** on dossiers, gets `GEA-Reader-Setup-0.
|
|
11
|
+
4. The client opens `GEA-Reader.html` in any current browser, offline, and drops a dossier on it. The verdict: **Valid** (signed with the site's key, or a newer key the site's key handed over to), **Valid, but signed by a key you were not given**, or **Not valid** with the reason. Below it, every file the dossier holds: a report opens in the page as it was signed, a PDF in the browser's own viewer. A client who wants it installed, with a right-click **Check with GEA Reader** on dossiers, gets `GEA-Reader-Setup-0.78.1.exe` from the release page.
|
|
12
12
|
5. **The key**: it lives in `keys\dossier_ed25519.json` in the workspace. The backup carries it; nothing else does; never send it. An administrator **rotates** it with a reason when a person who had access leaves; the old key's history rides in every later dossier so a reader of an old dossier still knows it was the site's.
|
|
13
13
|
|
|
14
14
|
## You know it worked when
|
|
@@ -8,7 +8,7 @@ Takes: 10 minutes
|
|
|
8
8
|
1. Open **Audit / Update**, the card **The release**: the newest release on GitHub against the version running, with the three kits it carries - `GEA-Program-Setup`, `GEA-Reader-Setup` and `GEA-Recorder` - each with the SHA-256 GitHub recorded.
|
|
9
9
|
2. Press **Fetch the kits** (the button names the version). A job brings them into the workspace's `installers\` folder, checks each against its recorded hash (a kit altered after that is not kept), and moves older kits to `installers\_older`. The card marks every kit on hand ✓.
|
|
10
10
|
3. Press **Install now** (the button names the version). The program's setup runs silently from there with this workspace, and the reader's setup with it; the control panel stops for about a minute and is started again by a helper outside the program. Sign in again. The card now shows the new version running.
|
|
11
|
-
4. The recorder's kit, `GEA-Recorder-0.
|
|
11
|
+
4. The recorder's kit, `GEA-Recorder-0.78.1.tar.gz`, is in the same folder for the attendant to take to the box (lesson 25).
|
|
12
12
|
5. On a computer that cannot reach GitHub, the setup from the release page installs over the old version the same way; the workspace is kept.
|
|
13
13
|
|
|
14
14
|
## You know it worked when
|
|
@@ -5,10 +5,10 @@ Takes: 30 minutes
|
|
|
5
5
|
> One script, one config file, one restart.
|
|
6
6
|
|
|
7
7
|
## Before you start
|
|
8
|
-
The box assembled (lesson 24), the Pi on the pad network, and the release's `GEA-Recorder-0.
|
|
8
|
+
The box assembled (lesson 24), the Pi on the pad network, and the release's `GEA-Recorder-0.78.1.tar.gz` - from the office's `installers\` folder (lesson 22) or the release page - copied to the Pi.
|
|
9
9
|
|
|
10
10
|
## Steps
|
|
11
|
-
1. On the Pi, unpack the kit and run the installer once: `tar xzf GEA-Recorder-0.
|
|
11
|
+
1. On the Pi, unpack the kit and run the installer once: `tar xzf GEA-Recorder-0.78.1.tar.gz`, `cd GEA-Recorder-0.78.1`, `sudo sh install.sh`. It makes `/opt/gea-recorder` (a Python environment of its own), writes the example config to `/etc/gea-recorder/config.json`, makes `/var/lib/gea-recorder`, enables SPI, enables the service to start at boot and runs the self-test.
|
|
12
12
|
2. The clock: wire the GPS as lesson 24 says, then the three lines the README gives - `dtoverlay=pps-gpio,gpiopin=18` and `enable_uart=1` in `/boot/firmware/config.txt`, the two `refclock` lines in `/etc/chrony/chrony.conf` - `sudo apt install gpsd pps-tools`, and reboot. `chronyc tracking` then names PPS as the reference with an offset of microseconds.
|
|
13
13
|
3. Edit the config: `sudo nano /etc/gea-recorder/config.json`. The site's name as the office spells it; the station id; the wellhead's latitude and longitude; each channel's ADC input, its id (`REF`, `S01`...), its kind (`geophone` or `electrode`) and its place in feet east and north of the wellhead; the ADC driver `ads1256` (`sim` records a test signal with no hardware); the rig feed - `rig.enabled`, the serial port or the TCP host and port the EDR offers; the mirror path for the USB stick.
|
|
14
14
|
4. `sudo systemctl restart gea-recorder`. Open the box's page from any computer on the pad network: port 8780 of the box's address - `http://192.168.1.50:8780/` when that is its address. It shows the site, the station, RECORDING, the clock and what its time is worth, every channel's level, the files closed, the free space, the rig feed.
|
|
@@ -9,7 +9,7 @@ GEA Driller is a program for the rig PC. It reads the rig's own feed and the pre
|
|
|
9
9
|
|
|
10
10
|
## Steps
|
|
11
11
|
1. Open **Drill string**; the card **GEA Driller** is at the bottom. Press **Start the twin as the rig**: the driller's own program runs on this computer with a scene drilling itself under the agent, one step every three seconds. Press **Open its screen**.
|
|
12
|
-
2. Read the screen: the green band is the model's layer window, the blue line the hole from the surveys, the orange dot the bit, the dotted stub where the recommendation points. The recommendation in words with its reasons - what the deep-resistivity tool says when the scene has one, the gamma against the model's values, the model's bracket, the limits - and the confidence of each choice. The rig's numbers against the limits. The decisions so far, and whether they were answered.
|
|
12
|
+
2. Read the screen: the green band is the model's layer window, the blue line the hole from the surveys, the orange dot the bit, the dotted stub where the recommendation points, and the orange band where the position filter puts the layer from the readings - the tile beside it says how sure it is that the bit is in the layer and how far the top and the base are. The recommendation in words with its reasons - what the deep-resistivity tool says when the scene has one, the gamma against the model's values, the model's bracket, the limits - and the confidence of each choice. The rig's numbers against the limits. The decisions so far, and whether they were answered.
|
|
13
13
|
3. Type your name and press **Accept** on a recommendation; press **Reject** on the next; press **Did something else…** and record a build of +1.5°/100 ft at 25 klb on a third. Each answer is on the record with your name; the twin drills on under the agent.
|
|
14
14
|
4. The closed loop: **Arm for this section** to 300 ft further, confirm. The panel turns red: every decision is now a command, and the agent's panel says the null downlink kept it and sent nothing. **Disarm now**, or wait for the section's end - it disarms itself, and says why.
|
|
15
15
|
5. Back in GEA, choose the well the records go under and press **Pull from it**: a job fetches the records, checks each against its SHA-256 and keeps them under the well. The table says how many decisions, accepted, rejected, done otherwise, the hole under advice, the armed sections and the commands; the last decisions are listed below. **Stop it** closes the twin's records.
|
|
@@ -5,7 +5,7 @@ Takes: 30 minutes
|
|
|
5
5
|
> One install, one config file, and the driller's screen on the rig.
|
|
6
6
|
|
|
7
7
|
## Before you start
|
|
8
|
-
The rig PC (the EDR's own, or the directional driller's laptop) on the rig network, with the EDR's WITS0 feed available on a TCP port or a serial line - ask the EDR vendor's hand for the port; it is read-only and nothing is ever sent to it. The kit `GEA-Driller-0.
|
|
8
|
+
The rig PC (the EDR's own, or the directional driller's laptop) on the rig network, with the EDR's WITS0 feed available on a TCP port or a serial line - ask the EDR vendor's hand for the port; it is read-only and nothing is ever sent to it. The kit `GEA-Driller-0.78.1.tar.gz` from the office's `installers\` folder (lesson 22) or the release page. On Windows, Python 3.9 or newer from python.org with "Add to PATH" ticked.
|
|
9
9
|
|
|
10
10
|
## Steps
|
|
11
11
|
1. Unpack the kit. On a Linux PC: `sudo sh install.sh`. On Windows: double-click `install.cmd`. Either makes a Python environment of its own with the package and the trained policy inside it, writes the example config beside it, makes the data folder, runs the self-test (a minute: the twin, the policy against the textbook driller, a short training that learns, the service), and sets the program to start with the PC.
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> Every step of GEA and the programs around it - the control panel, the Reader, the Recorder on the pad, GEA-VPN, GEA Driller - as 29 lessons: the office's first, the pad attendant's after, each naming the page it is done on, what you press, and how you know it worked.
|
|
4
4
|
|
|
5
|
-
**The command**: the **Tutorial** tab. The lessons are listed by part - Getting started, Wells and their data, Watching the pad, The engineering pages, Seismic, Reports for the client, Keeping it running, On the pad, The driller's agent - each with who it is for and how long it takes. Open one: **Open the page this lesson is about** goes to the tab it is done on, the numbered steps say what to press, **You know it worked when** says what to look for, and **Mark this lesson done** ticks it off for you (each account has its own progress; the list says how many are done and which comes next). **Print the handout** opens the whole course as one page for the people who do not sit at this screen - the attendant on the pad - and the browser's Print makes the PDF; **Write the handout into exports\tutorial** (the operator role) writes the same as `GEA-Tutorial-0.
|
|
5
|
+
**The command**: the **Tutorial** tab. The lessons are listed by part - Getting started, Wells and their data, Watching the pad, The engineering pages, Seismic, Reports for the client, Keeping it running, On the pad, The driller's agent - each with who it is for and how long it takes. Open one: **Open the page this lesson is about** goes to the tab it is done on, the numbered steps say what to press, **You know it worked when** says what to look for, and **Mark this lesson done** ticks it off for you (each account has its own progress; the list says how many are done and which comes next). **Print the handout** opens the whole course as one page for the people who do not sit at this screen - the attendant on the pad - and the browser's Print makes the PDF; **Write the handout into exports\tutorial** (the operator role) writes the same as `GEA-Tutorial-0.78.1.html` and `.md` into the workspace. From a terminal: `gea tutorial` lists the lessons, `gea tutorial --lesson 3` prints one, `gea tutorial --lesson install` the same by name, `gea tutorial --handout --workspace C:\site` writes the handout into the workspace, `gea tutorial --handout --out C:\site\GEA-Tutorial.html` writes it anywhere. The lessons are Markdown files under the program's `help\tutorial` folder.
|
|
6
6
|
|
|
7
|
-
**What it writes**: `records\tutorial_progress.json` in the workspace (who finished which lesson, when); `exports\tutorial\GEA-Tutorial-0.
|
|
7
|
+
**What it writes**: `records\tutorial_progress.json` in the workspace (who finished which lesson, when); `exports\tutorial\GEA-Tutorial-0.78.1.html` and `.md` when the handout is written, with the audit line `tutorial.handout`; `tutorial.print` when the handout is opened from the page. Reading a lesson writes nothing.
|
|
8
8
|
|
|
9
9
|
**The number to check**: the list's "done" count against 29, and on the Tutorial tab which lesson is next. A lesson's own check is its **You know it worked when** - the thing on the screen or the disk that is there only if the steps were done; a tick without it is a tick.
|
|
10
10
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gea-program
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.78.1
|
|
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
|
|
@@ -472,7 +472,10 @@ the EDR's WITS0 feed and the pre-drill model of the target layer and, every
|
|
|
472
472
|
build, drop or hold and by how much (toolface and steering ratio for a
|
|
473
473
|
rotary steerable system), the weight on bit, the rotary speed, the flow
|
|
474
474
|
rate, and whether to drill on, circulate, or ream and wash first - with its
|
|
475
|
-
reasons and the confidence of each choice.
|
|
475
|
+
reasons and the confidence of each choice. A position filter (since
|
|
476
|
+
0.78.1) places the bit in the layer the way a geosteerer does, from the
|
|
477
|
+
gamma and the deep-resistivity distance against the model, and the screen
|
|
478
|
+
draws the band it puts the layer in. The driller accepts, rejects or
|
|
476
479
|
records what was done instead, by name; every recommendation, answer and
|
|
477
480
|
command is on record with its hash, and GEA pulls the records into the
|
|
478
481
|
well from the **Drill string** tab's card (`gea workspace --path C:\site
|
|
@@ -827,7 +830,7 @@ unsigned, the key hand-overs - and shows the reports as they were signed. A
|
|
|
827
830
|
reader made from the workspace knows the site's key fingerprints, so it
|
|
828
831
|
says whether a dossier is the site's; it allows no network request, and it
|
|
829
832
|
leaves the trusted time-stamp to `verify_dossier.py`. For a client who wants
|
|
830
|
-
it installed, every release also carries `GEA-Reader-Setup-0.
|
|
833
|
+
it installed, every release also carries `GEA-Reader-Setup-0.78.1.exe`: GEA
|
|
831
834
|
Reader as a Windows program of its own - its own icon and taskbar button,
|
|
832
835
|
Check with GEA Reader on a dossier's right-click menu, fingerprints the client
|
|
833
836
|
saves kept on that computer, nothing of GEA-Program. `gea help reader`.
|
|
@@ -1592,7 +1595,7 @@ attaches the zips to the GitHub release of that tag.
|
|
|
1592
1595
|
|
|
1593
1596
|
### The Windows installer
|
|
1594
1597
|
|
|
1595
|
-
Every release also carries `GEA-Program-Setup-0.
|
|
1598
|
+
Every release also carries `GEA-Program-Setup-0.78.1.exe` (for 0.78.1): the
|
|
1596
1599
|
same Windows kit installed like any Windows program, for the signed-in user
|
|
1597
1600
|
alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
|
|
1598
1601
|
It asks for the site workspace (an existing one such as `C:\site` is used as
|
|
@@ -1611,7 +1614,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
|
|
|
1611
1614
|
software deployment:
|
|
1612
1615
|
|
|
1613
1616
|
```
|
|
1614
|
-
GEA-Program-Setup-0.
|
|
1617
|
+
GEA-Program-Setup-0.78.1.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
|
|
1615
1618
|
```
|
|
1616
1619
|
|
|
1617
1620
|
The setup is built by Inno Setup 6 from `tools/installer.iss` in the same
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "gea-program"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.78.1"
|
|
8
8
|
description = "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."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# GEA Driller - the directional driller's agent
|
|
2
|
-
|
|
3
|
-
> A program on the rig PC that reads the rig's own feed and the pre-drill model and, every 30 ft, recommends in the driller's units what to do next - a policy trained by reinforcement learning in a physics twin of the lateral - with the driller's answer, every command, and the records pulled into GEA.
|
|
4
|
-
|
|
5
|
-
**The command**: on the rig PC, `GEA-Driller-0.77.0.tar.gz` from the release (or the kit's `installers` folder, fetched on the Audit / Update tab): unpack it and run `sudo sh install.sh` on Linux or `install.cmd` on Windows, once; edit its config - the EDR's WITS0 feed (`tcp`, the host and port; `serial`, the COM port), the pre-drill model (the target layer's top TVD at the heel, its thickness and dip, the gamma in, above and below, the deep-resistivity tool, the heel's MD and TVD), the tool's cap, the limits - and restart it. The driller's screen is at port 8790 of the rig PC: `http://192.168.1.60:8790/live`. It shows the section with the model's layer window and the hole drilled through it, the recommendation in words - *Build +1.5°/100 ft (toolface up, 25% steering); 25 klb WOB, 120 rpm, 500 gpm* - with its reasons (what the deep-resistivity tool says, the gamma against the model's values, the model's bracket, the limits) and the confidence of each choice, the rig's numbers against the limits, and **Accept**, **Reject** or **Did something else…** with the operator's name. In GEA: the **Drill string** tab's card **GEA Driller** - the rig PC's address and the well, **Pull**: the records come in checked against their hashes, and the table says how many decisions, accepted, rejected, done otherwise, the hole under advice, the armed sections and the commands. **Open the driller's screen** opens the rig PC's screen from its address. Before there is a rig PC: **Start the twin as the rig** runs the driller's program on this computer with a scene drilling itself under the agent - **Open its screen** is the driller's screen with the twin behind it, labelled SIMULATION - and **Pull from it** brings its records in; **Stop it** closes them. Over a cellular modem the rig PC joins GEA-VPN as a member of kind `driller` and GEA pulls from `http://10.77.0.4:8790`. The closed loop: `closed_loop.allowed` in the rig PC's config puts the switch on its screen; an operator arms it by name for one section of at most 500 ft (**Arm for this section**), every decision then goes to the downlink as a command, and the loop disarms itself on a stale feed, a crossed limit, the section's end or **Disarm now** - and this version's only downlink is the null one, which keeps every command on record and sends none, because no vendor's downlink protocol ships with it. From a terminal: `gea workspace --path C:\site --action driller-pull --box http://192.168.1.60:8790 --well SWD-1`; on the rig PC `gea-driller sim --seed 7 --pace 3 --port 8790`, `gea-driller evaluate --scenes 20`, `gea-driller train --seconds 600 --out policy.json`, `gea-driller selftest`.
|
|
6
|
-
|
|
7
|
-
**What it writes**: on the rig PC, `decisions.jsonl` (every observation, recommendation, confidence, reasons and answer), `commands.jsonl` (every arming, command and disarming with its reason) and `surveys.csv`, each with a `.sha256` beside it, and `manifest.json`. In GEA, `wells\SWD-1\driller\` holds the same files as pulled, `manifest.json` and `last_pull.json` with the summary; the audit lines `driller.pull`, `driller.sim_start`, `driller.sim_stop`. The twin as the rig writes under `field\sim-driller\data`.
|
|
8
|
-
|
|
9
|
-
**The number to check**: on the rig PC's screen, the feed's age (a decision is made only on a live feed) and, in GEA's table, accepted against rejected and done otherwise - an agent whose advice is rejected more than taken is not helping, and the records say so. For the agent itself, `gea-driller evaluate` prints the policy against a textbook driller on twenty held-out twin scenes - the hole in the layer, the sweet spot, feet a day, dogleg, stuck pipe, losses - labelled SIMULATION; the self-test refuses a policy that does not beat the textbook.
|
|
10
|
-
|
|
11
|
-
**What this page will not call a measurement**: the twin's figures are a simulation's, however many scenes, and say nothing of a real formation; a recommendation is the agent's reading of the feed and the model, not a survey, and the hole's position on its screen is projected from the surveys and the continuous inclination, not measured at the bit; the hole-cleaning and balling the agent reasons from are the model's estimates; and "commands sent" is zero in this version by construction.
|
|
12
|
-
|
|
13
|
-
Related: `gea help drillstring`, `gea help recorder`, `gea help vpn`.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/agassiz77_canada_temperature.provenance.json
RENAMED
|
File without changes
|
{gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/barbados_110_consolidation.provenance.json
RENAMED
|
File without changes
|
|
File without changes
|
{gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/bengal_u1452_grain_size.provenance.json
RENAMED
|
File without changes
|
|
File without changes
|
{gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/blake_164_methane_isotopes.provenance.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gea_program-0.77.0 → gea_program-0.78.1}/gea/catalog/collingwood_1_28_ks_complete.provenance.json
RENAMED
|
File without changes
|
|
File without changes
|