gea-program 0.4.0__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gea_program-0.4.0/gea_program.egg-info → gea_program-0.5.0}/PKG-INFO +77 -12
- {gea_program-0.4.0 → gea_program-0.5.0}/README.md +76 -11
- gea_program-0.5.0/gea/BENCH_TEST_PROTOCOL.md +91 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/__init__.py +23 -34
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/__main__.py +165 -56
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/acceptance_tests.py +333 -88
- gea_program-0.5.0/gea/bench.py +123 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +1 -1
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/client_reports.py +11 -10
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/downhole_engine.py +70 -163
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/drift_monitor.py +1 -1
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/fat_sat.py +1 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/files.py +15 -2
- gea_program-0.5.0/gea/gauge_aging.py +61 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/gauge_specs.py +31 -41
- gea_program-0.5.0/gea/help/drift.md +13 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/files.md +1 -1
- gea_program-0.5.0/gea/help/seismic.md +13 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/helplib.py +2 -1
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/matplotlib_demo.py +6 -5
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/model_card.py +14 -16
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/operator_app.py +22 -50
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/qt6_downhole_app.py +12 -32
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/reconciler.py +31 -32
- gea_program-0.5.0/gea/reference/libmseed_steim.provenance.json +20 -0
- gea_program-0.5.0/gea/reference/libmseed_steim1_4096.mseed +0 -0
- gea_program-0.5.0/gea/reference/libmseed_steim2_4096.mseed +0 -0
- gea_program-0.5.0/gea/reference/libmseed_steim2_512.mseed +0 -0
- gea_program-0.5.0/gea/seismic.py +801 -0
- gea_program-0.5.0/gea/seismic_detect.py +298 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/service.py +1 -1
- gea_program-0.5.0/gea/service_life.py +116 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/tool_library.py +45 -79
- {gea_program-0.4.0 → gea_program-0.5.0/gea_program.egg-info}/PKG-INFO +77 -12
- {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/SOURCES.txt +8 -2
- {gea_program-0.4.0 → gea_program-0.5.0}/pyproject.toml +2 -2
- gea_program-0.4.0/gea/BENCH_TEST_PROTOCOL.md +0 -96
- gea_program-0.4.0/gea/bench.py +0 -144
- gea_program-0.4.0/gea/case_study.py +0 -228
- gea_program-0.4.0/gea/help/drift.md +0 -13
- gea_program-0.4.0/gea/quartz_hpht_extension.py +0 -152
- gea_program-0.4.0/gea/service_life.py +0 -173
- {gea_program-0.4.0 → gea_program-0.5.0}/LICENSE +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/accuracy_statement.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/alarm_engine.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/blind_harness.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/med_160_sapropels.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/certificates.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/cli.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/config_versioning.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/correlation.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/dashboard.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/deviation.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/doctor.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/earth_model.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/example_register_map.json +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/follower.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/forward_model.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/gamma.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/gravity_reference.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/TESTER_GUIDE.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/alarms.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/data-in.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/doctor.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/instruments.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/notifications.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/patches.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/quality.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/site.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/start.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/transients.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/upkeep.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/well-tests.md +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/housekeeping.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/inverse_engine.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/jobs.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/live_ports.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/loadtest.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/modbus.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/mqtt_port.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/notify.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/opcua_port.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/patches.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/ports.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/profile_catalog.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/project.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/rock_inventory.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/sample_record.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/sample_well_profile.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/sbom.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/segy.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/sensor_swap.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/shell.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/shut_in.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/sla_report.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/store_forward.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/strata_join.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/survey_cmd.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/survey_view.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/telemetry.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/transient.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/web/app.html +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/well_assembler.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/well_test_validation.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/wits0.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/witsml.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea/workspace.py +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/dependency_links.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/entry_points.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/requires.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/top_level.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/setup.cfg +0 -0
- {gea_program-0.4.0 → gea_program-0.5.0}/tests/test_acceptance.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gea-program
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: GEA-Program: downhole gauge monitoring - canonical measurement records, quality rules, drift evaluation with a re-fit change log, well-test validation, alarm management, model cards, store-and-forward, monthly SLA measurement, FAT/SAT protocols and a dashboard, generated from live objects in the client's reporting outline.
|
|
5
5
|
Author: Daniel T. Murphy
|
|
6
6
|
License: MPL-2.0
|
|
@@ -92,6 +92,14 @@ reaches a client document. Nothing unmeasured is ever reported as met.
|
|
|
92
92
|
- **Survey track** (`earth_model.py`, `strata_join.py`, `inverse_engine.py`,
|
|
93
93
|
`blind_harness.py`, `rock_inventory.py`, `forward_model.py`, ...): strata
|
|
94
94
|
property estimation over a public co-located library, blind-scored on every run.
|
|
95
|
+
- **The second leg - seismic** (`seismic.py`, `seismic_detect.py`): raw seismic
|
|
96
|
+
records in (miniSEED with Steim1/Steim2, SAC, or fetched from any FDSN
|
|
97
|
+
archive - TexNet, EarthScope), Welch spectra, spectrograms and the persistent
|
|
98
|
+
lines above the local floor out, and the detectability test: one station's
|
|
99
|
+
record against a list of known rigs with positions and working windows,
|
|
100
|
+
verdict per rig, the detection radius bracketed between the farthest rig
|
|
101
|
+
heard and the nearest not heard. The decoder is proven against records
|
|
102
|
+
written by libmseed. See *The second leg*.
|
|
95
103
|
|
|
96
104
|
## Quick start
|
|
97
105
|
|
|
@@ -103,8 +111,8 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
103
111
|
gea client-report --report accuracy --out client_report
|
|
104
112
|
gea model-cards --out model_cards
|
|
105
113
|
gea sbom --out sbom
|
|
106
|
-
gea accept # the product gate (
|
|
107
|
-
gea help drift # the help library, by the job (
|
|
114
|
+
gea accept # the product gate (246 checks)
|
|
115
|
+
gea help drift # the help library, by the job (15 pages; the same text is on every dashboard page)
|
|
108
116
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
109
117
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
110
118
|
gea workspace --path C:\site --action init --name "Pad 3" # a site folder
|
|
@@ -112,6 +120,7 @@ gea serve --workspace C:\site # the dashboard as
|
|
|
112
120
|
gea doctor --workspace C:\site # which code runs, can it serve, with every fix
|
|
113
121
|
gea files --workspace C:\site --action list --root historian # the import roots, detection by content, import, export, packs
|
|
114
122
|
gea transient --file historian.csv --params params.json --out pta # shut-ins and build-up analysis with a band
|
|
123
|
+
gea seismic --action detect --file tx.mseed --station-lat 31.9 --station-lon -102.1 --sources rigs.csv # the second leg: is a known rig in this record?
|
|
115
124
|
gea swaps / gea certificates / gea notify / gea housekeeping / gea loadtest # instruments, notification rules, site upkeep
|
|
116
125
|
```
|
|
117
126
|
|
|
@@ -231,10 +240,10 @@ text: JSON, JSON lines, CSV, Markdown, HTML.
|
|
|
231
240
|
|
|
232
241
|
### The help library
|
|
233
242
|
|
|
234
|
-
`gea help` lists
|
|
243
|
+
`gea help` lists fifteen pages indexed by the job a reader arrives with -
|
|
235
244
|
start, bring data in, quality rules, drift, well tests, alarms and the month,
|
|
236
|
-
the site, instruments, shut-ins and build-ups,
|
|
237
|
-
which code is running, upkeep. Each page carries four lines and stops: the
|
|
245
|
+
the site, instruments, shut-ins and build-ups, seismic (the second leg),
|
|
246
|
+
patches, files, notifications, which code is running, upkeep. Each page carries four lines and stops: the
|
|
238
247
|
command, what it writes, the one number to check, and what the page will not
|
|
239
248
|
call a measurement. The pages ship inside the package (`gea/help/`), and the
|
|
240
249
|
same text is what `/api/help` serves and what the dashboard shows under every
|
|
@@ -286,6 +295,41 @@ chose it; an analyst can move the region (`gea transient --mtr 2:40`) and the
|
|
|
286
295
|
result follows. It is the first look every shut-in should get automatically,
|
|
287
296
|
not a replacement for a full interpretation, and it says so.
|
|
288
297
|
|
|
298
|
+
### The second leg
|
|
299
|
+
|
|
300
|
+
The second leg of the program is seismic: the client's site records ground
|
|
301
|
+
motion that conventional processing treats as noise, and in that noise are
|
|
302
|
+
the machinery lines of every rig working within range - mud pumps and their
|
|
303
|
+
harmonics, rotary tables, engines. The leg starts with ingest and one measured
|
|
304
|
+
number, not with a map. `gea seismic` reads the two formats the archives and
|
|
305
|
+
most field recorders write (miniSEED with Steim1/Steim2 and integer/float
|
|
306
|
+
encodings, decided by content; SAC), fetches records from any FDSN web service
|
|
307
|
+
(`--base texnet` for the Texas network TX, `--base iris` for EarthScope), and
|
|
308
|
+
produces the standard spectral products: the Welch PSD, a spectrogram, and
|
|
309
|
+
the lines that persist above a running-median floor in the band where rig
|
|
310
|
+
machinery sits (1-50 Hz by default). The decoder is proven in the acceptance
|
|
311
|
+
suite against records written by libmseed, the format's reference
|
|
312
|
+
implementation (`gea/reference/`).
|
|
313
|
+
|
|
314
|
+
The first number is the detectability test (`--action detect`): one station's
|
|
315
|
+
continuous record, the station's position, and a CSV of known rigs - position
|
|
316
|
+
and working window from a public permit register or the operator's own
|
|
317
|
+
schedule. For every rig that worked alone for enough windows the test
|
|
318
|
+
compares the band power in its windows with the quiet baseline (the windows
|
|
319
|
+
when no listed rig was working) and says DETECTED or NOT_DETECTED, with the
|
|
320
|
+
excess in dB and the lines that belong to those windows and not to the quiet
|
|
321
|
+
ones; a rig that never worked alone is AMBIGUOUS, and a record with no quiet
|
|
322
|
+
hour gets NO_QUIET_BASELINE and no verdict at all. The result is the radius
|
|
323
|
+
bracketed between the farthest rig heard and the nearest not heard - the
|
|
324
|
+
station's measured reach for rigs like those on the list. Everything the leg
|
|
325
|
+
can later claim sits inside that radius. What the test will not call a
|
|
326
|
+
measurement is printed with it: a well's position or track (one station
|
|
327
|
+
detects, it does not locate - locating is the array step that comes after
|
|
328
|
+
this number exists), a radius beyond the farthest listed rig, anything about
|
|
329
|
+
a rig not on the list, and any quantity in physical units until a station's
|
|
330
|
+
response has been applied and named. `--action selftest` runs the test on a
|
|
331
|
+
synthetic scene and labels its output SIMULATION_SELF_TEST.
|
|
332
|
+
|
|
289
333
|
### Before a site goes live
|
|
290
334
|
|
|
291
335
|
`deploy/README.md` is the checklist: keep the service on the loopback
|
|
@@ -309,10 +353,15 @@ workspace folder it never deletes.
|
|
|
309
353
|
|
|
310
354
|
```
|
|
311
355
|
python tools/build_installer.py # dist/gea-program-<version>-win64/ and .zip (needs internet here, none there)
|
|
312
|
-
python tools/build_installer.py --extras live,plotting,xls
|
|
356
|
+
python tools/build_installer.py --extras live,plotting,xls # a smaller kit without the PyQt6 desktop window
|
|
313
357
|
python tools/build_installer.py --platform linux # a venv-based kit for a Linux site server
|
|
314
358
|
```
|
|
315
359
|
|
|
360
|
+
The kit carries every optional dependency by default - the live ports
|
|
361
|
+
(asyncua, paho-mqtt, pymodbus, pyserial), matplotlib, xlrd and the PyQt6
|
|
362
|
+
desktop window - so `gea sbom` from an installed kit lists all of them as
|
|
363
|
+
installed; and `report-samples/`, one rendered example of every report.
|
|
364
|
+
|
|
316
365
|
At the site: unzip, `install.cmd`, `start-dashboard.cmd`; the browser opens
|
|
317
366
|
`http://127.0.0.1:8765/`. `verify.cmd` runs the acceptance gate from the
|
|
318
367
|
installed kit (the client's own evidence), `register-service.cmd` starts the
|
|
@@ -328,6 +377,8 @@ attaches the zips to the GitHub release of that tag.
|
|
|
328
377
|
gea/ the package: engines, record layer, reports, monitor, dashboard, cli, shell, acceptance suite,
|
|
329
378
|
workspace, jobs, service, patches and web/app.html (the served dashboard)
|
|
330
379
|
gea/catalog/ 52 public archive entries, each with a provenance file
|
|
380
|
+
gea/reference/ miniSEED records written by libmseed, with their provenance: the decoder's independent reference
|
|
381
|
+
docs/report_samples/ one rendered example of every client report, from this build (tools/render_report_samples.py; SAMPLES.md names each command)
|
|
331
382
|
docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
|
|
332
383
|
SESSION_LOG.md (the working record, session by session),
|
|
333
384
|
commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
|
|
@@ -348,10 +399,22 @@ density anchors and Vp ranges with their citations (Telford, Geldart and
|
|
|
348
399
|
Sheriff; Schon). Every catalogue entry under `gea/catalog/` has a provenance
|
|
349
400
|
file naming its public source.
|
|
350
401
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
402
|
+
The gauge aging rate the drift evaluation uses is the instrument's published
|
|
403
|
+
drift specification, read from a cited datasheet (`gea/gauge_specs.py`), with
|
|
404
|
+
nothing added for temperature or pressure - above the rating the rate is
|
|
405
|
+
flagged, not changed. The program carries no aging model of its own, no
|
|
406
|
+
engineering constant that is not a datasheet number, and no claim about a
|
|
407
|
+
gauge beyond what its datasheet says; `tools/standalone_check.py` fails the
|
|
408
|
+
build on the names, phrases and numbers of the model that once stood there.
|
|
409
|
+
The seismic leg is textbook signal processing - Welch's PSD estimate, a
|
|
410
|
+
running-median floor, band power, great-circle distance - and the decoder is
|
|
411
|
+
checked against libmseed; the synthetic scene behind its self-test states its
|
|
412
|
+
own assumptions (body-wave spreading, a Q) and is labelled as a scene, not a
|
|
413
|
+
ground. Two statements the product carries on its own model cards: the datasheet
|
|
414
|
+
rate has no field validation on record against a gauge with a known history
|
|
415
|
+
(`gea bench` is the instrument for it), and five of the fourteen back-tested
|
|
416
|
+
strata quantities are NOT ACCEPTABLE at the 95 % target. Both are printed,
|
|
417
|
+
never claimed otherwise.
|
|
355
418
|
|
|
356
419
|
## Shipping
|
|
357
420
|
|
|
@@ -361,7 +424,9 @@ not exist anywhere, every version in `SHIP_LOG.md` must have its tag, `python -m
|
|
|
361
424
|
accept` must be green, `SHIP_MESSAGE.txt` must start with the tag; then commit, tag,
|
|
362
425
|
push, and the remote tag must be seen before SHIPPED is printed. `CHANGELOG.md` must carry a
|
|
363
426
|
section headed by the tag, and `tools/standalone_check.py` must report no findings. `-DryRun` runs every
|
|
364
|
-
check and changes nothing; `-NoPush` stops after the local tag.
|
|
427
|
+
check and changes nothing; `-NoPush` stops after the local tag. Before the gate, after the bump:
|
|
428
|
+
`python tools/render_report_samples.py` re-renders `docs/report_samples/` from the new build
|
|
429
|
+
(section AM fails on a stale build number).
|
|
365
430
|
|
|
366
431
|
## Publishing to PyPI
|
|
367
432
|
|
|
@@ -53,6 +53,14 @@ reaches a client document. Nothing unmeasured is ever reported as met.
|
|
|
53
53
|
- **Survey track** (`earth_model.py`, `strata_join.py`, `inverse_engine.py`,
|
|
54
54
|
`blind_harness.py`, `rock_inventory.py`, `forward_model.py`, ...): strata
|
|
55
55
|
property estimation over a public co-located library, blind-scored on every run.
|
|
56
|
+
- **The second leg - seismic** (`seismic.py`, `seismic_detect.py`): raw seismic
|
|
57
|
+
records in (miniSEED with Steim1/Steim2, SAC, or fetched from any FDSN
|
|
58
|
+
archive - TexNet, EarthScope), Welch spectra, spectrograms and the persistent
|
|
59
|
+
lines above the local floor out, and the detectability test: one station's
|
|
60
|
+
record against a list of known rigs with positions and working windows,
|
|
61
|
+
verdict per rig, the detection radius bracketed between the farthest rig
|
|
62
|
+
heard and the nearest not heard. The decoder is proven against records
|
|
63
|
+
written by libmseed. See *The second leg*.
|
|
56
64
|
|
|
57
65
|
## Quick start
|
|
58
66
|
|
|
@@ -64,8 +72,8 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
64
72
|
gea client-report --report accuracy --out client_report
|
|
65
73
|
gea model-cards --out model_cards
|
|
66
74
|
gea sbom --out sbom
|
|
67
|
-
gea accept # the product gate (
|
|
68
|
-
gea help drift # the help library, by the job (
|
|
75
|
+
gea accept # the product gate (246 checks)
|
|
76
|
+
gea help drift # the help library, by the job (15 pages; the same text is on every dashboard page)
|
|
69
77
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
70
78
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
71
79
|
gea workspace --path C:\site --action init --name "Pad 3" # a site folder
|
|
@@ -73,6 +81,7 @@ gea serve --workspace C:\site # the dashboard as
|
|
|
73
81
|
gea doctor --workspace C:\site # which code runs, can it serve, with every fix
|
|
74
82
|
gea files --workspace C:\site --action list --root historian # the import roots, detection by content, import, export, packs
|
|
75
83
|
gea transient --file historian.csv --params params.json --out pta # shut-ins and build-up analysis with a band
|
|
84
|
+
gea seismic --action detect --file tx.mseed --station-lat 31.9 --station-lon -102.1 --sources rigs.csv # the second leg: is a known rig in this record?
|
|
76
85
|
gea swaps / gea certificates / gea notify / gea housekeeping / gea loadtest # instruments, notification rules, site upkeep
|
|
77
86
|
```
|
|
78
87
|
|
|
@@ -192,10 +201,10 @@ text: JSON, JSON lines, CSV, Markdown, HTML.
|
|
|
192
201
|
|
|
193
202
|
### The help library
|
|
194
203
|
|
|
195
|
-
`gea help` lists
|
|
204
|
+
`gea help` lists fifteen pages indexed by the job a reader arrives with -
|
|
196
205
|
start, bring data in, quality rules, drift, well tests, alarms and the month,
|
|
197
|
-
the site, instruments, shut-ins and build-ups,
|
|
198
|
-
which code is running, upkeep. Each page carries four lines and stops: the
|
|
206
|
+
the site, instruments, shut-ins and build-ups, seismic (the second leg),
|
|
207
|
+
patches, files, notifications, which code is running, upkeep. Each page carries four lines and stops: the
|
|
199
208
|
command, what it writes, the one number to check, and what the page will not
|
|
200
209
|
call a measurement. The pages ship inside the package (`gea/help/`), and the
|
|
201
210
|
same text is what `/api/help` serves and what the dashboard shows under every
|
|
@@ -247,6 +256,41 @@ chose it; an analyst can move the region (`gea transient --mtr 2:40`) and the
|
|
|
247
256
|
result follows. It is the first look every shut-in should get automatically,
|
|
248
257
|
not a replacement for a full interpretation, and it says so.
|
|
249
258
|
|
|
259
|
+
### The second leg
|
|
260
|
+
|
|
261
|
+
The second leg of the program is seismic: the client's site records ground
|
|
262
|
+
motion that conventional processing treats as noise, and in that noise are
|
|
263
|
+
the machinery lines of every rig working within range - mud pumps and their
|
|
264
|
+
harmonics, rotary tables, engines. The leg starts with ingest and one measured
|
|
265
|
+
number, not with a map. `gea seismic` reads the two formats the archives and
|
|
266
|
+
most field recorders write (miniSEED with Steim1/Steim2 and integer/float
|
|
267
|
+
encodings, decided by content; SAC), fetches records from any FDSN web service
|
|
268
|
+
(`--base texnet` for the Texas network TX, `--base iris` for EarthScope), and
|
|
269
|
+
produces the standard spectral products: the Welch PSD, a spectrogram, and
|
|
270
|
+
the lines that persist above a running-median floor in the band where rig
|
|
271
|
+
machinery sits (1-50 Hz by default). The decoder is proven in the acceptance
|
|
272
|
+
suite against records written by libmseed, the format's reference
|
|
273
|
+
implementation (`gea/reference/`).
|
|
274
|
+
|
|
275
|
+
The first number is the detectability test (`--action detect`): one station's
|
|
276
|
+
continuous record, the station's position, and a CSV of known rigs - position
|
|
277
|
+
and working window from a public permit register or the operator's own
|
|
278
|
+
schedule. For every rig that worked alone for enough windows the test
|
|
279
|
+
compares the band power in its windows with the quiet baseline (the windows
|
|
280
|
+
when no listed rig was working) and says DETECTED or NOT_DETECTED, with the
|
|
281
|
+
excess in dB and the lines that belong to those windows and not to the quiet
|
|
282
|
+
ones; a rig that never worked alone is AMBIGUOUS, and a record with no quiet
|
|
283
|
+
hour gets NO_QUIET_BASELINE and no verdict at all. The result is the radius
|
|
284
|
+
bracketed between the farthest rig heard and the nearest not heard - the
|
|
285
|
+
station's measured reach for rigs like those on the list. Everything the leg
|
|
286
|
+
can later claim sits inside that radius. What the test will not call a
|
|
287
|
+
measurement is printed with it: a well's position or track (one station
|
|
288
|
+
detects, it does not locate - locating is the array step that comes after
|
|
289
|
+
this number exists), a radius beyond the farthest listed rig, anything about
|
|
290
|
+
a rig not on the list, and any quantity in physical units until a station's
|
|
291
|
+
response has been applied and named. `--action selftest` runs the test on a
|
|
292
|
+
synthetic scene and labels its output SIMULATION_SELF_TEST.
|
|
293
|
+
|
|
250
294
|
### Before a site goes live
|
|
251
295
|
|
|
252
296
|
`deploy/README.md` is the checklist: keep the service on the loopback
|
|
@@ -270,10 +314,15 @@ workspace folder it never deletes.
|
|
|
270
314
|
|
|
271
315
|
```
|
|
272
316
|
python tools/build_installer.py # dist/gea-program-<version>-win64/ and .zip (needs internet here, none there)
|
|
273
|
-
python tools/build_installer.py --extras live,plotting,xls
|
|
317
|
+
python tools/build_installer.py --extras live,plotting,xls # a smaller kit without the PyQt6 desktop window
|
|
274
318
|
python tools/build_installer.py --platform linux # a venv-based kit for a Linux site server
|
|
275
319
|
```
|
|
276
320
|
|
|
321
|
+
The kit carries every optional dependency by default - the live ports
|
|
322
|
+
(asyncua, paho-mqtt, pymodbus, pyserial), matplotlib, xlrd and the PyQt6
|
|
323
|
+
desktop window - so `gea sbom` from an installed kit lists all of them as
|
|
324
|
+
installed; and `report-samples/`, one rendered example of every report.
|
|
325
|
+
|
|
277
326
|
At the site: unzip, `install.cmd`, `start-dashboard.cmd`; the browser opens
|
|
278
327
|
`http://127.0.0.1:8765/`. `verify.cmd` runs the acceptance gate from the
|
|
279
328
|
installed kit (the client's own evidence), `register-service.cmd` starts the
|
|
@@ -289,6 +338,8 @@ attaches the zips to the GitHub release of that tag.
|
|
|
289
338
|
gea/ the package: engines, record layer, reports, monitor, dashboard, cli, shell, acceptance suite,
|
|
290
339
|
workspace, jobs, service, patches and web/app.html (the served dashboard)
|
|
291
340
|
gea/catalog/ 52 public archive entries, each with a provenance file
|
|
341
|
+
gea/reference/ miniSEED records written by libmseed, with their provenance: the decoder's independent reference
|
|
342
|
+
docs/report_samples/ one rendered example of every client report, from this build (tools/render_report_samples.py; SAMPLES.md names each command)
|
|
292
343
|
docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
|
|
293
344
|
SESSION_LOG.md (the working record, session by session),
|
|
294
345
|
commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
|
|
@@ -309,10 +360,22 @@ density anchors and Vp ranges with their citations (Telford, Geldart and
|
|
|
309
360
|
Sheriff; Schon). Every catalogue entry under `gea/catalog/` has a provenance
|
|
310
361
|
file naming its public source.
|
|
311
362
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
363
|
+
The gauge aging rate the drift evaluation uses is the instrument's published
|
|
364
|
+
drift specification, read from a cited datasheet (`gea/gauge_specs.py`), with
|
|
365
|
+
nothing added for temperature or pressure - above the rating the rate is
|
|
366
|
+
flagged, not changed. The program carries no aging model of its own, no
|
|
367
|
+
engineering constant that is not a datasheet number, and no claim about a
|
|
368
|
+
gauge beyond what its datasheet says; `tools/standalone_check.py` fails the
|
|
369
|
+
build on the names, phrases and numbers of the model that once stood there.
|
|
370
|
+
The seismic leg is textbook signal processing - Welch's PSD estimate, a
|
|
371
|
+
running-median floor, band power, great-circle distance - and the decoder is
|
|
372
|
+
checked against libmseed; the synthetic scene behind its self-test states its
|
|
373
|
+
own assumptions (body-wave spreading, a Q) and is labelled as a scene, not a
|
|
374
|
+
ground. Two statements the product carries on its own model cards: the datasheet
|
|
375
|
+
rate has no field validation on record against a gauge with a known history
|
|
376
|
+
(`gea bench` is the instrument for it), and five of the fourteen back-tested
|
|
377
|
+
strata quantities are NOT ACCEPTABLE at the 95 % target. Both are printed,
|
|
378
|
+
never claimed otherwise.
|
|
316
379
|
|
|
317
380
|
## Shipping
|
|
318
381
|
|
|
@@ -322,7 +385,9 @@ not exist anywhere, every version in `SHIP_LOG.md` must have its tag, `python -m
|
|
|
322
385
|
accept` must be green, `SHIP_MESSAGE.txt` must start with the tag; then commit, tag,
|
|
323
386
|
push, and the remote tag must be seen before SHIPPED is printed. `CHANGELOG.md` must carry a
|
|
324
387
|
section headed by the tag, and `tools/standalone_check.py` must report no findings. `-DryRun` runs every
|
|
325
|
-
check and changes nothing; `-NoPush` stops after the local tag.
|
|
388
|
+
check and changes nothing; `-NoPush` stops after the local tag. Before the gate, after the bump:
|
|
389
|
+
`python tools/render_report_samples.py` re-renders `docs/report_samples/` from the new build
|
|
390
|
+
(section AM fails on a stale build number).
|
|
326
391
|
|
|
327
392
|
## Publishing to PyPI
|
|
328
393
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Bench-Test Protocol - Does this gauge drift within its datasheet?
|
|
2
|
+
|
|
3
|
+
The program judges a measured drift trend against one number: the
|
|
4
|
+
instrument's published drift specification (percent of full scale per year,
|
|
5
|
+
from its datasheet). That number is a specification, not a measurement of
|
|
6
|
+
the gauge in your hand. This protocol is the measurement: one gauge, one
|
|
7
|
+
held setpoint, one reference standard, enough weeks, and a verdict written
|
|
8
|
+
down - the bench record the drift report cites as `NONE ON RECORD` until it
|
|
9
|
+
exists.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. What is being tested
|
|
14
|
+
|
|
15
|
+
For a gauge of serial number S with datasheet drift specification D (%FS/yr):
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
measured drift rate (|slope| of the gauge's reading against the reference, at a held setpoint)
|
|
19
|
+
compared with D, with the slope's own standard error
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The outcome is one of four words (section 5). A gauge that drifts faster
|
|
23
|
+
than its datasheet is a finding, not an error.
|
|
24
|
+
|
|
25
|
+
## 2. Apparatus
|
|
26
|
+
|
|
27
|
+
- The gauge under test, with its serial number and its calibration
|
|
28
|
+
certificate id (both go on the record; `gea certificates` files the
|
|
29
|
+
certificate).
|
|
30
|
+
- A temperature-controlled bath or pressure vessel holding a setpoint inside
|
|
31
|
+
the gauge's rating (the rating check applies on the bench too).
|
|
32
|
+
- A reference pressure standard of a class better than the specification
|
|
33
|
+
under test (deadweight tester or transfer standard), logged at the same
|
|
34
|
+
cadence, or at least checked weekly and logged.
|
|
35
|
+
- Logging at one reading per day or better into the program's historian CSV
|
|
36
|
+
format (a timestamp or `time_s` column and one pressure column per
|
|
37
|
+
instrument).
|
|
38
|
+
|
|
39
|
+
## 3. Duration - the program's own rule applies
|
|
40
|
+
|
|
41
|
+
The reconciler refuses trend verdicts below its minimum span
|
|
42
|
+
(`ReconcilerConfig.min_trend_span_years`, the 18-day rule), and the bench
|
|
43
|
+
analysis reads that floor from the same configuration: a shorter record is
|
|
44
|
+
`INSUFFICIENT_SPAN`, no verdict. The protocol asks for **at least 90 days**
|
|
45
|
+
at setpoint; 180 days or more when the specification is tight (a 0.01 %FS/yr
|
|
46
|
+
gauge at 30,000 psi full scale drifts 3 psi in a year - 0.75 psi in 90
|
|
47
|
+
days - so the reference and the logging must resolve tenths of a psi).
|
|
48
|
+
|
|
49
|
+
## 4. Procedure
|
|
50
|
+
|
|
51
|
+
1. File the certificate (`gea certificates --action add ...`) and record the
|
|
52
|
+
serial number.
|
|
53
|
+
2. Install the gauge and the reference at the setpoint; log continuously.
|
|
54
|
+
3. Weekly: verify the setpoint against the reference; do not adjust the gauge
|
|
55
|
+
under test. Log every intervention.
|
|
56
|
+
4. Export the gauge's series and the reference's series as historian CSVs.
|
|
57
|
+
5. Run:
|
|
58
|
+
|
|
59
|
+
gea bench --gauge-csv gauge.csv --reference-csv reference.csv --spec geoq177_30k --serial SN --certificate CERT --out bench_register.jsonl
|
|
60
|
+
|
|
61
|
+
The reference series is subtracted first (the setpoint's own wander is
|
|
62
|
+
not the gauge's drift). `--spec` names the datasheet preset or a JSON
|
|
63
|
+
datasheet of your own.
|
|
64
|
+
6. Keep the record: the JSON line appended to the register carries the fit,
|
|
65
|
+
the band, the datasheet source, the serial, the certificate and the verdict.
|
|
66
|
+
|
|
67
|
+
## 5. Analysis and verdict vocabulary
|
|
68
|
+
|
|
69
|
+
- The slope of the (gauge - reference) series is fitted by least squares;
|
|
70
|
+
its standard error comes from the residuals.
|
|
71
|
+
- A band of k sigma (default 2) is placed around the measured rate.
|
|
72
|
+
- `WITHIN_DATASHEET` - the whole band is at or below the specification.
|
|
73
|
+
- `EXCEEDS_DATASHEET` - the whole band is above the specification: this
|
|
74
|
+
gauge, at these conditions, drifts faster than its datasheet says. A
|
|
75
|
+
first-class outcome.
|
|
76
|
+
- `INSUFFICIENT_SPAN` - shorter than the 18-day floor; no verdict.
|
|
77
|
+
- `INSUFFICIENT_SNR` - the band straddles the specification; a longer span
|
|
78
|
+
or a quieter setpoint is needed; no verdict.
|
|
79
|
+
|
|
80
|
+
`gea bench --selftest` runs the arithmetic on synthetic series and labels
|
|
81
|
+
its output `SIMULATION_SELF_TEST`; it proves nothing about a physical gauge.
|
|
82
|
+
|
|
83
|
+
## 6. What the record changes
|
|
84
|
+
|
|
85
|
+
Nothing in the program's arithmetic changes with a bench result; the
|
|
86
|
+
datasheet rate stays the rate the reports use. What changes is the model
|
|
87
|
+
card's `field validation` line, which can cite the register once a gauge
|
|
88
|
+
with a known history has been run, and the reader's confidence in a
|
|
89
|
+
`DRIFT_CONSISTENT` label on that instrument. An `EXCEEDS_DATASHEET` record
|
|
90
|
+
is the reason to recalibrate, replace or re-rate that gauge, and to file
|
|
91
|
+
the result with its certificate.
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
"""gea
|
|
4
|
+
"""gea - GEA-Program: the downhole gauge monitoring program.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
user-facing settings are the two instrument trims (k_structural_trim,
|
|
14
|
-
phi_coupling_trim), never the constants. See README.md.
|
|
6
|
+
A described well (gradients or a real profile, a toolstring of cited
|
|
7
|
+
instruments), the data that comes back from it (files or live ports), and
|
|
8
|
+
the report family that judges the two against each other: data quality,
|
|
9
|
+
gauge drift against each instrument's datasheet aging rate, well tests,
|
|
10
|
+
alarms, shut-ins and build-ups, instruments and certificates, the monthly
|
|
11
|
+
service note. Every number on a report names the rule or the datasheet it
|
|
12
|
+
came from; the program adds no physics of its own.
|
|
15
13
|
|
|
16
14
|
Quick use (headless):
|
|
17
15
|
from gea import DownholeEngine, SimulatorConfig
|
|
@@ -19,18 +17,10 @@ Quick use (headless):
|
|
|
19
17
|
for _ in range(100): e.step()
|
|
20
18
|
print(e.summary()); e.export_csv("run.csv")
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
python -m gea.matplotlib_demo
|
|
24
|
-
python -m gea.qt6_downhole_app (pip install PyQt6)
|
|
20
|
+
The dashboard: gea workspace --path C:\\site --action init --name "Pad 3"; gea serve --workspace C:\\site
|
|
25
21
|
"""
|
|
26
22
|
|
|
27
|
-
from .
|
|
28
|
-
calculate_quartz_transducer_hpht_program,
|
|
29
|
-
canonical_suppression,
|
|
30
|
-
conventional_drift,
|
|
31
|
-
drift_comparison,
|
|
32
|
-
PROGRAM_MODEL_AVAILABLE,
|
|
33
|
-
)
|
|
23
|
+
from .gauge_aging import aging_rate, rate_psi_yr, accuracy_psi
|
|
34
24
|
from .downhole_engine import (
|
|
35
25
|
Sensor,
|
|
36
26
|
SimulatorConfig,
|
|
@@ -49,15 +39,11 @@ from .telemetry import (
|
|
|
49
39
|
TelemetryConfig,
|
|
50
40
|
TelemetryRecorder,
|
|
51
41
|
)
|
|
52
|
-
from .case_study import (
|
|
53
|
-
CaseStudyConfig,
|
|
54
|
-
case_study,
|
|
55
|
-
depth_sweep,
|
|
56
|
-
write_markdown,
|
|
57
|
-
)
|
|
58
42
|
from .gauge_specs import (
|
|
59
43
|
GaugeSpec,
|
|
60
44
|
GAUGE_SPECS,
|
|
45
|
+
DEFAULT_SPEC,
|
|
46
|
+
get_spec,
|
|
61
47
|
load_gauge_spec_json,
|
|
62
48
|
)
|
|
63
49
|
from .deviation import (
|
|
@@ -70,7 +56,7 @@ from .tool_library import (
|
|
|
70
56
|
TOOL_LIBRARY,
|
|
71
57
|
ToolString,
|
|
72
58
|
drift_model_for,
|
|
73
|
-
|
|
59
|
+
user_gauge_tool,
|
|
74
60
|
rating_check,
|
|
75
61
|
)
|
|
76
62
|
from .ports import (
|
|
@@ -109,6 +95,11 @@ from .well_assembler import (
|
|
|
109
95
|
from .gamma import (
|
|
110
96
|
find_gr_channels, shale_volume, formation_flags, gamma_report, gamma_entries,
|
|
111
97
|
)
|
|
98
|
+
from .seismic import (
|
|
99
|
+
Trace as SeismicTrace, read_mseed, write_mseed, read_sac, write_sac, read_any as read_seismic, fdsn_fetch, fdsn_stations,
|
|
100
|
+
welch_psd, spectrogram, persistent_lines, band_power,
|
|
101
|
+
)
|
|
102
|
+
from .seismic_detect import Source as SeismicSource, detectability_test, load_sources_csv, haversine_km, DRILLING_BAND_HZ
|
|
112
103
|
from .bench import (
|
|
113
104
|
bench_analysis, bench_selftest,
|
|
114
105
|
)
|
|
@@ -129,19 +120,17 @@ from .profile_catalog import (
|
|
|
129
120
|
read_pangaea_txt,
|
|
130
121
|
)
|
|
131
122
|
|
|
132
|
-
__version__ = "0.
|
|
123
|
+
__version__ = "0.5.0"
|
|
133
124
|
__all__ = [
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"PROGRAM_MODEL_AVAILABLE", "Sensor", "SimulatorConfig", "DownholeEngine",
|
|
125
|
+
"aging_rate", "rate_psi_yr", "accuracy_psi",
|
|
126
|
+
"Sensor", "SimulatorConfig", "DownholeEngine",
|
|
137
127
|
"WellProfile", "load_well_profile_csv", "make_sensor_string",
|
|
138
128
|
"ServiceLifeConfig", "ServiceLifeSimulator",
|
|
139
129
|
"TelemetryConfig", "TelemetryRecorder",
|
|
140
|
-
"
|
|
141
|
-
"GaugeSpec", "GAUGE_SPECS", "load_gauge_spec_json",
|
|
130
|
+
"GaugeSpec", "GAUGE_SPECS", "DEFAULT_SPEC", "get_spec", "load_gauge_spec_json",
|
|
142
131
|
"DeviationSurvey", "load_deviation_csv", "run_batch",
|
|
143
132
|
"ToolSpec", "TOOL_LIBRARY", "ToolString", "drift_model_for",
|
|
144
|
-
"
|
|
133
|
+
"user_gauge_tool", "rating_check",
|
|
145
134
|
"LiveStream", "StreamChannel", "PortSpec", "PORT_REGISTRY",
|
|
146
135
|
"ingest", "read_historian_csv", "read_las", "register_port",
|
|
147
136
|
"Reconciler", "ReconcilerConfig", "auto_station_map",
|