gea-program 0.33.0__tar.gz → 0.34.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.33.0/gea_program.egg-info → gea_program-0.34.0}/PKG-INFO +18 -2
- {gea_program-0.33.0 → gea_program-0.34.0}/README.md +17 -1
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/__init__.py +1 -1
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/acceptance_tests.py +145 -0
- gea_program-0.34.0/gea/help/map.md +11 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/helplib.py +2 -1
- gea_program-0.34.0/gea/reference/us_outline.json +1 -0
- gea_program-0.34.0/gea/reference/us_outline.provenance.json +22 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/service.py +28 -0
- gea_program-0.34.0/gea/site_map.py +295 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/web/app.html +114 -1
- {gea_program-0.33.0 → gea_program-0.34.0/gea_program.egg-info}/PKG-INFO +18 -2
- {gea_program-0.33.0 → gea_program-0.34.0}/gea_program.egg-info/SOURCES.txt +4 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/pyproject.toml +1 -1
- {gea_program-0.33.0 → gea_program-0.34.0}/LICENSE +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/__main__.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/accuracy_statement.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/alarm_engine.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/backup.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/bench.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/blind_harness.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/med_160_sapropels.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog_map.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/catalog_register.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/certificates.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/cli.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/client_reports.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/config_versioning.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/conformance.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/correlation.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/dashboard.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/deviation.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/dlis.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/dnp3.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/doctor.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/downhole_engine.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/drift_monitor.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/earth_model.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/edr.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/elevation.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/etp.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/etp12_schemas.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/example_register_map.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/fat_sat.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/files.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/fixtures/README.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/fixtures/ne_110m_coastline.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/follower.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/forward_model.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/friction_priors.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/gamma.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/gauge_aging.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/gauge_specs.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/geodesy.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/gravity_reference.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/hartip.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/TESTER_GUIDE.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/alarms.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/audit-update.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/backup.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/catalog.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/charts.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/conformance.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/data-in.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/dlis.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/doctor.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/drift.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/edr.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/etp.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/field-ports.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/files.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/historian.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/instruments.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/interval.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/month-end.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/notifications.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/osdu.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/patches.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/ppdm.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/quakeml.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/quality.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/seedlink.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/seismic.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/setup.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/site.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/sites.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/slip.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/soak.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/sra.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/start.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/structure.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/tools.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/transients.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/upkeep.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/vibration.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/help/well-tests.md +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/housekeeping.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/interval.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/inverse_engine.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/jobs.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/live_ports.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/loadtest.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/matplotlib_demo.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/modbus.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/modbus_rtu.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/model_card.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/month_end.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/mqtt_port.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/notify.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/opcua_port.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/operator_app.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/osdu.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/patches.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/permits.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/piwebapi.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/ports.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/ppdm.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/profile_catalog.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/project.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/qt6_downhole_app.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/quakeml.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/reconciler.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/reference/libmseed_steim.provenance.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/reference/tool_sources.json +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/rock_inventory.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/sample_record.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/sample_well_profile.csv +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/sbom.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seedlink.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/segy.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_array.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_assoc.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_detect.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_film.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_harmonic.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_qc.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_response.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_signature.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_track.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_uncertainty.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/seismic_unlisted.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/sensor_swap.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/series_cache.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/service_life.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/setup_checklist.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/shapefile.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/shell.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/shut_in.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/sla_report.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/slip.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/soak.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/sra.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/store_forward.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/strata_join.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/structure.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/supervisor.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/survey_cmd.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/survey_view.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/telemetry.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/tool_catalog.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/tool_library.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/tool_taxonomy.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/transient.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/vibration.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/well_assembler.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/well_test_validation.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/wits0.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/witsml.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea/workspace.py +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea_program.egg-info/dependency_links.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea_program.egg-info/entry_points.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea_program.egg-info/requires.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/gea_program.egg-info/top_level.txt +0 -0
- {gea_program-0.33.0 → gea_program-0.34.0}/setup.cfg +0 -0
- {gea_program-0.33.0 → gea_program-0.34.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.34.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
|
|
@@ -125,7 +125,7 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
125
125
|
gea client-report --report accuracy --out client_report
|
|
126
126
|
gea model-cards --out model_cards
|
|
127
127
|
gea sbom --out sbom
|
|
128
|
-
gea accept # the product gate (
|
|
128
|
+
gea accept # the product gate (389 checks)
|
|
129
129
|
gea help drift # the help library, by the job (16 pages; the same text is on every dashboard page)
|
|
130
130
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
131
131
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
@@ -648,6 +648,22 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
|
|
|
648
648
|
itself; `gea help seedlink`. A TexNet station is served by EarthScope at
|
|
649
649
|
`rtserve.iris.washington.edu:18000`, network `TX`.
|
|
650
650
|
|
|
651
|
+
### The site map
|
|
652
|
+
|
|
653
|
+
The Map tab puts everything in the workspace that has a position in one
|
|
654
|
+
WGS84 frame: the wells at their declared surface positions (a NAD27
|
|
655
|
+
declaration moved by its datum shift, the shift shown), the structure layers
|
|
656
|
+
- faults and folds, formation contours, areas, points - each drawn at the
|
|
657
|
+
detail the view needs without a vertex moved, the World Stress Map's SHmax
|
|
658
|
+
directions, the seismic stations and the Seismicity Response Areas, over the
|
|
659
|
+
outline of the US states and counties. The outline ships with the program
|
|
660
|
+
(US Census Bureau 2017 cartographic boundaries by way of us-atlas, with its
|
|
661
|
+
provenance), so the map needs no network. A well without a declared position
|
|
662
|
+
is listed as not placed and is never drawn. Drag, the wheel or the keys pan
|
|
663
|
+
and zoom; click anywhere for what every layer says about that spot and the
|
|
664
|
+
distance to every placed well; rings draw distance circles around the wells.
|
|
665
|
+
`gea help map`.
|
|
666
|
+
|
|
651
667
|
### The charts
|
|
652
668
|
|
|
653
669
|
A well's page carries the Charts card: up to four channels stacked on one
|
|
@@ -86,7 +86,7 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
86
86
|
gea client-report --report accuracy --out client_report
|
|
87
87
|
gea model-cards --out model_cards
|
|
88
88
|
gea sbom --out sbom
|
|
89
|
-
gea accept # the product gate (
|
|
89
|
+
gea accept # the product gate (389 checks)
|
|
90
90
|
gea help drift # the help library, by the job (16 pages; the same text is on every dashboard page)
|
|
91
91
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
92
92
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
@@ -609,6 +609,22 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
|
|
|
609
609
|
itself; `gea help seedlink`. A TexNet station is served by EarthScope at
|
|
610
610
|
`rtserve.iris.washington.edu:18000`, network `TX`.
|
|
611
611
|
|
|
612
|
+
### The site map
|
|
613
|
+
|
|
614
|
+
The Map tab puts everything in the workspace that has a position in one
|
|
615
|
+
WGS84 frame: the wells at their declared surface positions (a NAD27
|
|
616
|
+
declaration moved by its datum shift, the shift shown), the structure layers
|
|
617
|
+
- faults and folds, formation contours, areas, points - each drawn at the
|
|
618
|
+
detail the view needs without a vertex moved, the World Stress Map's SHmax
|
|
619
|
+
directions, the seismic stations and the Seismicity Response Areas, over the
|
|
620
|
+
outline of the US states and counties. The outline ships with the program
|
|
621
|
+
(US Census Bureau 2017 cartographic boundaries by way of us-atlas, with its
|
|
622
|
+
provenance), so the map needs no network. A well without a declared position
|
|
623
|
+
is listed as not placed and is never drawn. Drag, the wheel or the keys pan
|
|
624
|
+
and zoom; click anywhere for what every layer says about that spot and the
|
|
625
|
+
distance to every placed well; rings draw distance circles around the wells.
|
|
626
|
+
`gea help map`.
|
|
627
|
+
|
|
612
628
|
### The charts
|
|
613
629
|
|
|
614
630
|
A well's page carries the Charts card: up to four channels stacked on one
|
|
@@ -8304,6 +8304,150 @@ def section_cb_charts(tmp: str) -> None:
|
|
|
8304
8304
|
"kept while a window loads, the drilling progress chart with one colour per well in a fixed order in both themes; the help page"
|
|
8305
8305
|
+ (f" [failed: {', '.join(failed3)}]" if failed3 else ""))
|
|
8306
8306
|
|
|
8307
|
+
|
|
8308
|
+
def section_cc_site_map(tmp: str) -> None:
|
|
8309
|
+
"""Section CC - the site map: the shipped state and county outline with its provenance, every positioned thing in one
|
|
8310
|
+
WGS84 frame (a NAD27 well moved by its datum shift and saying so, a well without a position never drawn), a layer
|
|
8311
|
+
thinned to the view's pixel without a vertex moved, what every layer says about a spot, the page."""
|
|
8312
|
+
import hashlib as _hl
|
|
8313
|
+
import http.cookiejar
|
|
8314
|
+
import math as _m
|
|
8315
|
+
import urllib.request
|
|
8316
|
+
import urllib.error
|
|
8317
|
+
from . import edr as E
|
|
8318
|
+
from . import helplib as H
|
|
8319
|
+
from . import shapefile as SF
|
|
8320
|
+
from . import site_map as SM
|
|
8321
|
+
from .workspace import Workspace
|
|
8322
|
+
from .service import Service, Users
|
|
8323
|
+
pkg = Path(__file__).parent
|
|
8324
|
+
d = Path(tmp, "cc"); d.mkdir()
|
|
8325
|
+
|
|
8326
|
+
ol = SM.outline_data()
|
|
8327
|
+
prov = json.loads((pkg / "reference" / "us_outline.provenance.json").read_text(encoding="utf-8"))
|
|
8328
|
+
cul = [c for c in ol["counties"] if c["name"] == "Culberson"]
|
|
8329
|
+
wide = SM.outline_view([-110.0, 25.0, -90.0, 37.0], 0.02)
|
|
8330
|
+
near = SM.outline_view([-105.2, 31.0, -104.0, 32.0], 0.002)
|
|
8331
|
+
c1 = {
|
|
8332
|
+
"outline": len(ol["counties"]) == 3231 and ol["states"].get("48") == "Texas" and cul and cul[0]["fips"] == "48109"
|
|
8333
|
+
and abs(cul[0]["label"][0] + 104.65) < 0.2 and abs(cul[0]["label"][1] - 31.47) < 0.2,
|
|
8334
|
+
"provenance": prov["sha256"] == _hl.sha256((pkg / "reference" / "us_outline.json").read_bytes()).hexdigest() and prov["package_license"] == "ISC"
|
|
8335
|
+
and "Copyright 2013-2019 Michael Bostock" in prov["package_license_text"] and "public domain" in prov["original_source"]
|
|
8336
|
+
and prov["counts"]["counties"] == 3231,
|
|
8337
|
+
"detail": all(a["s"] == 1 for a in wide["arcs"]) and not wide["labels"] and any(a["s"] == 0 for a in near["arcs"])
|
|
8338
|
+
and "Culberson" in [x["name"] for x in near["labels"]],
|
|
8339
|
+
}
|
|
8340
|
+
failed1 = [k for k, v in c1.items() if not v]
|
|
8341
|
+
ok(not failed1,
|
|
8342
|
+
"CC1 the outline ships with the program: the US Census Bureau's 2017 cartographic counties by way of us-atlas 3.0.1, 3,231 counties, the "
|
|
8343
|
+
"provenance with its hash, the package's ISC notice and the public-domain source; state lines only in a wide view, county lines and names "
|
|
8344
|
+
"once the view is close (Culberson, FIPS 48109)"
|
|
8345
|
+
+ (f" [failed: {', '.join(failed1)}]" if failed1 else ""))
|
|
8346
|
+
|
|
8347
|
+
lat1, lon1 = 31.42, -104.10
|
|
8348
|
+
kmlon = 1.0 / (111.195 * _m.cos(_m.radians(lat1)))
|
|
8349
|
+
faults = [([[(lon1 - 0.2 + 0.01 * i, lat1 - 0.3 + 0.0002 * j) for j in range(3001)]], {"TYPE": "normal fault", "NAME": f"F{i}"}) for i in range(0, 40, 8)]
|
|
8350
|
+
SF.write(str(d / "Faults"), "PolyLine", faults, [("TYPE", "C", 20, 0), ("NAME", "C", 10, 0)], SF.NAD83_GEOGCS)
|
|
8351
|
+
ctr = [([[(lon1 + (i - 1.5) * 4 * kmlon + 0.001 * k, lat1 - 0.3 + 0.006 * k) for k in range(100)]], {"ElevTop_ft": -8500.0 + 500.0 * i}) for i in range(4)]
|
|
8352
|
+
SF.write(str(d / "Top_A"), "PolyLine", ctr, [("ElevTop_ft", "F", 10, 1)], SF.NAD83_GEOGCS)
|
|
8353
|
+
SF.write(str(d / "Picks"), "Point", [([[(lon1 + 0.0001 * i, lat1 + 0.00005 * i)]], {"NAME": f"P{i}"}) for i in range(6000)], [("NAME", "C", 10, 0)], SF.NAD83_GEOGCS)
|
|
8354
|
+
with open(d / "wsm.csv", "w", encoding="utf-8") as f:
|
|
8355
|
+
f.write("ID,LAT,LON,AZI,TYPE,DEPTH,QUALITY,REGIME,LOCALITY\n")
|
|
8356
|
+
for i in range(40):
|
|
8357
|
+
f.write(f"W{i},{lat1 - 0.1 + 0.005 * i:.4f},{lon1 - 0.05:.4f},{60 + i},BO,2.5,{'DCBA'[i % 4]},NF,test\n")
|
|
8358
|
+
wsp = str(d / "ws"); ws = Workspace.create(wsp, "Pad 3", actor="tester")
|
|
8359
|
+
empty_view = SM.overview(ws)["view"]
|
|
8360
|
+
ws.add_layer(str(d / "Faults.shp"), "Basement faults", actor="tester", citation="test")
|
|
8361
|
+
ws.add_layer(str(d / "Top_A.shp"), "Wolfcamp top", actor="tester", formation="Wolfcamp", role="top", citation="test")
|
|
8362
|
+
ws.add_layer(str(d / "Picks.shp"), "Picks", actor="tester", citation="test")
|
|
8363
|
+
ws.add_stress_map(str(d / "wsm.csv"), actor="tester", citation="test WSM")
|
|
8364
|
+
layer_view0 = SM.overview(ws)["view"]
|
|
8365
|
+
a = E.selftest(str(d)); b = E.selftest_events(str(d))
|
|
8366
|
+
wa = ws.add_well_file(a["path"], display="Well A", actor="tester"); wb = ws.add_well_file(b["path"], display="Well B", actor="tester")
|
|
8367
|
+
wc = ws.add_well_file(a["path"], display="Well C", actor="tester")
|
|
8368
|
+
ws.set_well(wa["id"], surface={"lat": 31.41, "lon": -104.12, "datum": "NAD27"}, actor="tester")
|
|
8369
|
+
ws.set_well(wb["id"], surface={"lat": 31.43, "lon": -104.08, "datum": "NAD83"}, actor="tester")
|
|
8370
|
+
o = SM.overview(ws)
|
|
8371
|
+
wl = {w["id"]: w for w in o["wells"]}
|
|
8372
|
+
view = o["view"]["bbox"]
|
|
8373
|
+
fine = SM.layer_view(ws, "Basement-faults", [-105, 30, -103, 32], 0.0)
|
|
8374
|
+
coarse = SM.layer_view(ws, "Basement-faults", [-105, 30, -103, 32], 0.01)
|
|
8375
|
+
raw = SM._layer(ws, "Basement-faults")
|
|
8376
|
+
src_pts = {(round(float(x), 5), round(float(y), 5)) for f in raw["feats"] for pp in f["parts"] for x, y in pp}
|
|
8377
|
+
moved = [p for f in coarse["features"] for pp in f["parts"] for p in pp if (p[0], p[1]) not in src_pts]
|
|
8378
|
+
ends_kept = all(f["parts"][0][0] == fine["features"][k]["parts"][0][0] and f["parts"][0][-1] == fine["features"][k]["parts"][0][-1] for k, f in enumerate(coarse["features"]))
|
|
8379
|
+
pts = SM.layer_view(ws, "Picks", [-105, 30, -103, 32], 0.0, max_points=1000)
|
|
8380
|
+
wh = SM.what_here(ws, 31.42, -104.10)
|
|
8381
|
+
sv = SM.stress_view(ws, [-104.3, 31.2, -103.9, 31.6])
|
|
8382
|
+
c2 = {
|
|
8383
|
+
"frame": "WGS84" in o["frame"] and o["view"]["why"] == "the placed wells" and empty_view["why"].startswith("nothing in the workspace")
|
|
8384
|
+
and layer_view0["why"].startswith("the area most of the layers cover (the median extent of 3 of the 3)"),
|
|
8385
|
+
"wells": wl[wa["id"]]["placed"] and 30.0 < wl[wa["id"]]["shift_m"] < 90.0 and wl[wa["id"]]["declared"]["datum"] == "NAD27"
|
|
8386
|
+
and wl[wb["id"]]["placed"] and wl[wb["id"]]["shift_m"] == 0.0 and not wl[wc["id"]]["placed"] and "lat" not in wl[wc["id"]]
|
|
8387
|
+
and view[0] < -104.12 < view[2] and view[1] < 31.43 < view[3],
|
|
8388
|
+
"layers": [(l["id"], l["kind"]) for l in o["layers"]] == [("Basement-faults", "structure"), ("Wolfcamp-top", "contours"), ("Picks", "points")]
|
|
8389
|
+
and o["layers"][0]["classes"] == ["fault"] and o["layers"][0]["n_points"] == 5 * 3001 and o["stress_map"]["n_records"] == 40,
|
|
8390
|
+
"thinning": fine["vertices"] == 5 * 3001 and coarse["vertices"] < fine["vertices"] / 10 and not moved and ends_kept
|
|
8391
|
+
and all(f.get("cls") == "fault" for f in coarse["features"]),
|
|
8392
|
+
"points": pts["in_view"] == 6000 and pts["shown"] == 1000 and pts["kind"] == "points",
|
|
8393
|
+
"what_here": wh["answered"] >= 2 and any("Nearest mapped fault" in ln for l_ in wh["layers"] for ln in (l_["lines"] or []))
|
|
8394
|
+
and any("contours" in ln for l_ in wh["layers"] for ln in (l_["lines"] or []))
|
|
8395
|
+
and [w["id"] for w in wh["wells"]] == sorted([wa["id"], wb["id"]], key=lambda i: next(x["distance_km"] for x in wh["wells"] if x["id"] == i))
|
|
8396
|
+
and len(wh["wells"]) == 2,
|
|
8397
|
+
"stress": sv["n_in_view"] == 40 and sv["records"][0]["quality"] == "A" and sv["records"][-1]["quality"] == "D" and sv["citation"] == "test WSM",
|
|
8398
|
+
}
|
|
8399
|
+
failed2 = [k for k, v in c2.items() if not v]
|
|
8400
|
+
ok(not failed2,
|
|
8401
|
+
"CC2 one frame: a well declared on NAD27 moved to WGS84 by its datum shift and the shift kept with it, a well declared on NAD83 not moved, a "
|
|
8402
|
+
"well with no position never placed; the map opens on the placed wells (else the area most layers cover, else Texas, said so); a layer "
|
|
8403
|
+
"thinned to the view's pixel keeps its ends and moves no vertex, points sampled evenly past the limit; each layer's own statement for a spot "
|
|
8404
|
+
"and the distance to every placed well; the stress records in view, best quality first"
|
|
8405
|
+
+ (f" [failed: {', '.join(failed2)}]" if failed2 else ""))
|
|
8406
|
+
|
|
8407
|
+
Users(str(Path(wsp, "users.json"))).add("v", "viewer-pass-1", "viewer")
|
|
8408
|
+
svc = Service(wsp, port=0, scheduler=False).start()
|
|
8409
|
+
base_url = svc.url.rstrip("/")
|
|
8410
|
+
op = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(http.cookiejar.CookieJar()))
|
|
8411
|
+
|
|
8412
|
+
def call(path):
|
|
8413
|
+
req = urllib.request.Request(base_url + path, method="GET")
|
|
8414
|
+
try:
|
|
8415
|
+
with op.open(req, timeout=120) as rr_:
|
|
8416
|
+
return rr_.status, json.loads(rr_.read())
|
|
8417
|
+
except urllib.error.HTTPError as e:
|
|
8418
|
+
return e.code, json.loads(e.read())
|
|
8419
|
+
try:
|
|
8420
|
+
lreq = urllib.request.Request(base_url + "/api/login", method="POST", data=json.dumps({"name": "v", "password": "viewer-pass-1"}).encode())
|
|
8421
|
+
lreq.add_header("Content-Type", "application/json"); lreq.add_header("X-GEA-Action", "1"); op.open(lreq, timeout=30)
|
|
8422
|
+
bb = ",".join(f"{x:.5f}" for x in view)
|
|
8423
|
+
st_o, ov = call("/api/map")
|
|
8424
|
+
st_l, lv = call(f"/api/map/layer/Wolfcamp-top?bbox={bb}&tol=0.001")
|
|
8425
|
+
st_ol, olv = call(f"/api/map/outline?bbox={bb}&tol=0.001")
|
|
8426
|
+
st_s, svv = call(f"/api/map/stress?bbox={bb}")
|
|
8427
|
+
st_a, at = call("/api/map/at?lat=31.42&lon=-104.10")
|
|
8428
|
+
st_bad, _ = call("/api/map/layer/Wolfcamp-top?bbox=1,2,3")
|
|
8429
|
+
st_nol, _ = call(f"/api/map/layer/no-such-layer?bbox={bb}")
|
|
8430
|
+
st_noll, _ = call("/api/map/at?lat=x")
|
|
8431
|
+
finally:
|
|
8432
|
+
svc.stop()
|
|
8433
|
+
page_src = (pkg / "web" / "app.html").read_text(encoding="utf-8")
|
|
8434
|
+
help_md = (pkg / "help" / "map.md").read_text(encoding="utf-8")
|
|
8435
|
+
c3 = {
|
|
8436
|
+
"api": st_o == 200 and len(ov["wells"]) == 3 and st_l == 200 and lv["kind"] == "contours" and all("value" in f for f in lv["features"])
|
|
8437
|
+
and st_ol == 200 and st_s == 200 and st_a == 200 and len(at["wells"]) == 2 and st_bad == 400 and st_nol == 404 and st_noll == 400,
|
|
8438
|
+
"page": all(x in page_src for x in ("VIEWS.map", "['#/map', 'Map']", "/api/map/layer/", "/api/map/outline", "/api/map/stress", "/api/map/at",
|
|
8439
|
+
"Not placed", "declare it", "data-fit", "mpRings", "ArrowUp", "'Home' || k === 'Escape'", "scale bar", "'wheel'",
|
|
8440
|
+
"What is at", "setPointerCapture")),
|
|
8441
|
+
"help": any(t["topic"] == "map" for t in H.topics()) and not H.check("map") and H.VIEW_TOPIC.get("map") == "map"
|
|
8442
|
+
and "never moved" in help_md.split("will not call a measurement")[1],
|
|
8443
|
+
}
|
|
8444
|
+
failed3 = [k for k, v in c3.items() if not v]
|
|
8445
|
+
ok(not failed3,
|
|
8446
|
+
"CC3 the API (the contents, a layer with its contour values, the outline, the stress records, what is at a spot; a malformed box, an unknown "
|
|
8447
|
+
"layer and a missing position named) and the Map tab: pan and zoom by pointer, wheel and keys, layer toggles and fit, distance rings, a scale "
|
|
8448
|
+
"bar, the not-placed wells with the way to place them, what is at a click; the help page"
|
|
8449
|
+
+ (f" [failed: {', '.join(failed3)}]" if failed3 else ""))
|
|
8450
|
+
|
|
8307
8451
|
def main() -> int:
|
|
8308
8452
|
print("GEA-Program - ACCEPTANCE SUITE (the product gate)")
|
|
8309
8453
|
# a handle a job subprocess still holds at the end must not turn a finished gate into a traceback on Windows:
|
|
@@ -8387,6 +8531,7 @@ def main() -> int:
|
|
|
8387
8531
|
section_bz_tool_library(tmp)
|
|
8388
8532
|
section_ca_setup_checklist(tmp)
|
|
8389
8533
|
section_cb_charts(tmp)
|
|
8534
|
+
section_cc_site_map(tmp)
|
|
8390
8535
|
if _FAILS:
|
|
8391
8536
|
print(f"[ACCEPTANCE] {len(_FAILS)} FAILURES ({_PASS} passed):")
|
|
8392
8537
|
for f in _FAILS:
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# The site map
|
|
2
|
+
|
|
3
|
+
> Everything in the workspace that has a position, in one frame: the wells where their surface positions were declared, the structure layers the site brought (faults and folds, formation contours, areas, points), the World Stress Map's SHmax directions, the seismic stations, the Seismicity Response Areas, and the outline of the US states and counties underneath. A well without a declared position is listed as not placed and is never drawn anywhere. Click the map for what every layer says about that spot.
|
|
4
|
+
|
|
5
|
+
**The command**: the Map tab. Drag to pan, the wheel or + − to zoom, Home to return to where the map opened (the placed wells, else the response area, else the area most of the layers cover). Tick a layer to draw it, "fit" to zoom to it; Rings draws distance circles around every placed well. Point at the map for the position (WGS84) and the nearest placed well; click it - or press Enter for the centre - for each layer's own statement there: the nearest fault and its distance and bearing, the contours it lies between, the area it falls in, the nearest points, and the distance and bearing to every placed well. The keyboard does the same once the map has focus: arrows pan, + and − zoom, Home returns. A well's marker opens its page; "declare it" beside a not-placed well opens the setup checklist.
|
|
6
|
+
|
|
7
|
+
**What it writes**: nothing. The map reads the workspace: each well's declared surface position, each layer's shapefile (read once per run of the program and again when it changes), the stress map, the stations and the response areas. The outline is shipped with the program (`reference/us_outline.json`, from the US Census Bureau's 2017 cartographic boundary files by way of the us-atlas package, with its provenance beside it), so the map needs no network.
|
|
8
|
+
|
|
9
|
+
**The number to check**: a placed well against its survey plat - its marker is drawn at the declared latitude and longitude moved from the declared datum to WGS84, and the move is printed beside it (about fifty metres for NAD27 in West Texas); a layer's line against the map it came from, at the scale that map was made.
|
|
10
|
+
|
|
11
|
+
**What this page will not call a measurement**: a well's position - it is the operator's declaration, drawn where it was declared; a line drawn at this zoom as the line in the file - a vertex that would fall in the same screen cell as the one before it is left out of the drawing (never moved), and the full line is what "what is here" measures against; the outline as a survey - it is the Census Bureau's cartographic generalisation, good to a few hundred metres; a distance to a mapped fault as a hazard - it is a fact of the map.
|
|
@@ -43,6 +43,7 @@ INDEX: List[tuple] = [
|
|
|
43
43
|
('edr', 'The drilling recorder', 'the rig\'s one-second EDR export read as delivered - sections, depths, hours on bottom, the rate of penetration, the recorder\'s MD-TVD table - and what the record will not say'),
|
|
44
44
|
('dlis', 'The DLIS log', 'a well log as it is delivered (API RP66 V1), read as the standard lays it out: the frames, the channels, what was skipped; into the strata survey'),
|
|
45
45
|
('historian', 'The historian pull', 'an operator\'s gauge history out of the PI System through PI Web API, read-only, every value with its archive time and flags'),
|
|
46
|
+
('map', 'The site map', 'everything with a position in one frame: the placed wells, the structure layers, the stress directions, the stations and response areas over the state and county outline; what every layer says about any spot'),
|
|
46
47
|
('charts', 'The charts', 'a well\'s channels stacked on one axis with a linked cursor, zoom and pan from every sample, time or depth for a drilling recorder, the depth events marked, and the drilling progress of every well'),
|
|
47
48
|
('setup', 'The setup checklist', 'what this workspace still needs before its reports can be handed over - each well\'s location, elevation and number, the client site, the backup, the reports - read from the workspace as it stands, each with its form or button'),
|
|
48
49
|
('tools', 'Tools and ports', 'every class of downhole tool in use across the industry with a hover description and a pop-open tutorial, your own fleet with its datasheets, the gauges this program reads with their citations and ratings, the formats and protocols that bring readings in, and the rating check on a tool string'),
|
|
@@ -70,7 +71,7 @@ REQUIRED_LINES = ('**The command**', '**What it writes**', '**The number to chec
|
|
|
70
71
|
VIEW_TOPIC: Dict[str, str] = {
|
|
71
72
|
'home': 'start', 'wells': 'data-in', 'well': 'drift', 'live': 'patches', 'patch': 'patches', 'files': 'files', 'alarms': 'alarms',
|
|
72
73
|
'approvals': 'well-tests', 'config': 'site', 'reports': 'drift', 'verify': 'start', 'survey': 'data-in', 'jobs': 'site',
|
|
73
|
-
'admin': 'site', 'prefs': 'site', 'search': 'start', 'welcome': 'start', 'seismic': 'seismic', 'seismic_station': 'seismic', 'track': 'seismic', 'sar': 'seismic', 'sites': 'sites', 'setup': 'setup', 'audit': 'audit-update', 'tools': 'tools', 'catalog': 'catalog',
|
|
74
|
+
'admin': 'site', 'prefs': 'site', 'search': 'start', 'welcome': 'start', 'seismic': 'seismic', 'seismic_station': 'seismic', 'track': 'seismic', 'sar': 'seismic', 'sites': 'sites', 'setup': 'setup', 'map': 'map', 'audit': 'audit-update', 'tools': 'tools', 'catalog': 'catalog',
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
|