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.
Files changed (215) hide show
  1. {gea_program-0.4.0/gea_program.egg-info → gea_program-0.5.0}/PKG-INFO +77 -12
  2. {gea_program-0.4.0 → gea_program-0.5.0}/README.md +76 -11
  3. gea_program-0.5.0/gea/BENCH_TEST_PROTOCOL.md +91 -0
  4. {gea_program-0.4.0 → gea_program-0.5.0}/gea/__init__.py +23 -34
  5. {gea_program-0.4.0 → gea_program-0.5.0}/gea/__main__.py +165 -56
  6. {gea_program-0.4.0 → gea_program-0.5.0}/gea/acceptance_tests.py +333 -88
  7. gea_program-0.5.0/gea/bench.py +123 -0
  8. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +1 -1
  9. {gea_program-0.4.0 → gea_program-0.5.0}/gea/client_reports.py +11 -10
  10. {gea_program-0.4.0 → gea_program-0.5.0}/gea/downhole_engine.py +70 -163
  11. {gea_program-0.4.0 → gea_program-0.5.0}/gea/drift_monitor.py +1 -1
  12. {gea_program-0.4.0 → gea_program-0.5.0}/gea/fat_sat.py +1 -0
  13. {gea_program-0.4.0 → gea_program-0.5.0}/gea/files.py +15 -2
  14. gea_program-0.5.0/gea/gauge_aging.py +61 -0
  15. {gea_program-0.4.0 → gea_program-0.5.0}/gea/gauge_specs.py +31 -41
  16. gea_program-0.5.0/gea/help/drift.md +13 -0
  17. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/files.md +1 -1
  18. gea_program-0.5.0/gea/help/seismic.md +13 -0
  19. {gea_program-0.4.0 → gea_program-0.5.0}/gea/helplib.py +2 -1
  20. {gea_program-0.4.0 → gea_program-0.5.0}/gea/matplotlib_demo.py +6 -5
  21. {gea_program-0.4.0 → gea_program-0.5.0}/gea/model_card.py +14 -16
  22. {gea_program-0.4.0 → gea_program-0.5.0}/gea/operator_app.py +22 -50
  23. {gea_program-0.4.0 → gea_program-0.5.0}/gea/qt6_downhole_app.py +12 -32
  24. {gea_program-0.4.0 → gea_program-0.5.0}/gea/reconciler.py +31 -32
  25. gea_program-0.5.0/gea/reference/libmseed_steim.provenance.json +20 -0
  26. gea_program-0.5.0/gea/reference/libmseed_steim1_4096.mseed +0 -0
  27. gea_program-0.5.0/gea/reference/libmseed_steim2_4096.mseed +0 -0
  28. gea_program-0.5.0/gea/reference/libmseed_steim2_512.mseed +0 -0
  29. gea_program-0.5.0/gea/seismic.py +801 -0
  30. gea_program-0.5.0/gea/seismic_detect.py +298 -0
  31. {gea_program-0.4.0 → gea_program-0.5.0}/gea/service.py +1 -1
  32. gea_program-0.5.0/gea/service_life.py +116 -0
  33. {gea_program-0.4.0 → gea_program-0.5.0}/gea/tool_library.py +45 -79
  34. {gea_program-0.4.0 → gea_program-0.5.0/gea_program.egg-info}/PKG-INFO +77 -12
  35. {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/SOURCES.txt +8 -2
  36. {gea_program-0.4.0 → gea_program-0.5.0}/pyproject.toml +2 -2
  37. gea_program-0.4.0/gea/BENCH_TEST_PROTOCOL.md +0 -96
  38. gea_program-0.4.0/gea/bench.py +0 -144
  39. gea_program-0.4.0/gea/case_study.py +0 -228
  40. gea_program-0.4.0/gea/help/drift.md +0 -13
  41. gea_program-0.4.0/gea/quartz_hpht_extension.py +0 -152
  42. gea_program-0.4.0/gea/service_life.py +0 -173
  43. {gea_program-0.4.0 → gea_program-0.5.0}/LICENSE +0 -0
  44. {gea_program-0.4.0 → gea_program-0.5.0}/gea/accuracy_statement.py +0 -0
  45. {gea_program-0.4.0 → gea_program-0.5.0}/gea/alarm_engine.py +0 -0
  46. {gea_program-0.4.0 → gea_program-0.5.0}/gea/blind_harness.py +0 -0
  47. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  48. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  49. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  50. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  51. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  52. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  53. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  54. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  55. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  56. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  57. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  58. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  59. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  60. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  61. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  62. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  63. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  64. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  65. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  66. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  67. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  68. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  69. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  70. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  71. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  72. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  73. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  74. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  75. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  76. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  77. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  78. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  79. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  80. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  81. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  82. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  83. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  84. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  85. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  86. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  87. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  88. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  89. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  90. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  91. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  92. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  93. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  94. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  95. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  96. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  97. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  98. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  99. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  100. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  101. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  102. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  103. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  104. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  105. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  106. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  107. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  108. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  109. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  110. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  111. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  112. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  113. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/med_160_sapropels.txt +0 -0
  114. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  115. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  116. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  117. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  118. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  119. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  120. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  121. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  122. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  123. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  124. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  125. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  126. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  127. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  128. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  129. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  130. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  131. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  132. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  133. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  134. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  135. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  136. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  137. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  138. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  139. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  140. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  141. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  142. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  143. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  144. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  145. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  146. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  147. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  148. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  149. {gea_program-0.4.0 → gea_program-0.5.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  150. {gea_program-0.4.0 → gea_program-0.5.0}/gea/certificates.py +0 -0
  151. {gea_program-0.4.0 → gea_program-0.5.0}/gea/cli.py +0 -0
  152. {gea_program-0.4.0 → gea_program-0.5.0}/gea/config_versioning.py +0 -0
  153. {gea_program-0.4.0 → gea_program-0.5.0}/gea/correlation.py +0 -0
  154. {gea_program-0.4.0 → gea_program-0.5.0}/gea/dashboard.py +0 -0
  155. {gea_program-0.4.0 → gea_program-0.5.0}/gea/deviation.py +0 -0
  156. {gea_program-0.4.0 → gea_program-0.5.0}/gea/doctor.py +0 -0
  157. {gea_program-0.4.0 → gea_program-0.5.0}/gea/earth_model.py +0 -0
  158. {gea_program-0.4.0 → gea_program-0.5.0}/gea/example_register_map.json +0 -0
  159. {gea_program-0.4.0 → gea_program-0.5.0}/gea/follower.py +0 -0
  160. {gea_program-0.4.0 → gea_program-0.5.0}/gea/forward_model.py +0 -0
  161. {gea_program-0.4.0 → gea_program-0.5.0}/gea/gamma.py +0 -0
  162. {gea_program-0.4.0 → gea_program-0.5.0}/gea/gravity_reference.py +0 -0
  163. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/TESTER_GUIDE.md +0 -0
  164. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/alarms.md +0 -0
  165. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/data-in.md +0 -0
  166. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/doctor.md +0 -0
  167. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/instruments.md +0 -0
  168. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/notifications.md +0 -0
  169. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/patches.md +0 -0
  170. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/quality.md +0 -0
  171. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/site.md +0 -0
  172. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/start.md +0 -0
  173. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/transients.md +0 -0
  174. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/upkeep.md +0 -0
  175. {gea_program-0.4.0 → gea_program-0.5.0}/gea/help/well-tests.md +0 -0
  176. {gea_program-0.4.0 → gea_program-0.5.0}/gea/housekeeping.py +0 -0
  177. {gea_program-0.4.0 → gea_program-0.5.0}/gea/inverse_engine.py +0 -0
  178. {gea_program-0.4.0 → gea_program-0.5.0}/gea/jobs.py +0 -0
  179. {gea_program-0.4.0 → gea_program-0.5.0}/gea/live_ports.py +0 -0
  180. {gea_program-0.4.0 → gea_program-0.5.0}/gea/loadtest.py +0 -0
  181. {gea_program-0.4.0 → gea_program-0.5.0}/gea/modbus.py +0 -0
  182. {gea_program-0.4.0 → gea_program-0.5.0}/gea/mqtt_port.py +0 -0
  183. {gea_program-0.4.0 → gea_program-0.5.0}/gea/notify.py +0 -0
  184. {gea_program-0.4.0 → gea_program-0.5.0}/gea/opcua_port.py +0 -0
  185. {gea_program-0.4.0 → gea_program-0.5.0}/gea/patches.py +0 -0
  186. {gea_program-0.4.0 → gea_program-0.5.0}/gea/ports.py +0 -0
  187. {gea_program-0.4.0 → gea_program-0.5.0}/gea/profile_catalog.py +0 -0
  188. {gea_program-0.4.0 → gea_program-0.5.0}/gea/project.py +0 -0
  189. {gea_program-0.4.0 → gea_program-0.5.0}/gea/rock_inventory.py +0 -0
  190. {gea_program-0.4.0 → gea_program-0.5.0}/gea/sample_record.py +0 -0
  191. {gea_program-0.4.0 → gea_program-0.5.0}/gea/sample_well_profile.csv +0 -0
  192. {gea_program-0.4.0 → gea_program-0.5.0}/gea/sbom.py +0 -0
  193. {gea_program-0.4.0 → gea_program-0.5.0}/gea/segy.py +0 -0
  194. {gea_program-0.4.0 → gea_program-0.5.0}/gea/sensor_swap.py +0 -0
  195. {gea_program-0.4.0 → gea_program-0.5.0}/gea/shell.py +0 -0
  196. {gea_program-0.4.0 → gea_program-0.5.0}/gea/shut_in.py +0 -0
  197. {gea_program-0.4.0 → gea_program-0.5.0}/gea/sla_report.py +0 -0
  198. {gea_program-0.4.0 → gea_program-0.5.0}/gea/store_forward.py +0 -0
  199. {gea_program-0.4.0 → gea_program-0.5.0}/gea/strata_join.py +0 -0
  200. {gea_program-0.4.0 → gea_program-0.5.0}/gea/survey_cmd.py +0 -0
  201. {gea_program-0.4.0 → gea_program-0.5.0}/gea/survey_view.py +0 -0
  202. {gea_program-0.4.0 → gea_program-0.5.0}/gea/telemetry.py +0 -0
  203. {gea_program-0.4.0 → gea_program-0.5.0}/gea/transient.py +0 -0
  204. {gea_program-0.4.0 → gea_program-0.5.0}/gea/web/app.html +0 -0
  205. {gea_program-0.4.0 → gea_program-0.5.0}/gea/well_assembler.py +0 -0
  206. {gea_program-0.4.0 → gea_program-0.5.0}/gea/well_test_validation.py +0 -0
  207. {gea_program-0.4.0 → gea_program-0.5.0}/gea/wits0.py +0 -0
  208. {gea_program-0.4.0 → gea_program-0.5.0}/gea/witsml.py +0 -0
  209. {gea_program-0.4.0 → gea_program-0.5.0}/gea/workspace.py +0 -0
  210. {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/dependency_links.txt +0 -0
  211. {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/entry_points.txt +0 -0
  212. {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/requires.txt +0 -0
  213. {gea_program-0.4.0 → gea_program-0.5.0}/gea_program.egg-info/top_level.txt +0 -0
  214. {gea_program-0.4.0 → gea_program-0.5.0}/setup.cfg +0 -0
  215. {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.4.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 (237 checks)
107
- gea help drift # the help library, by the job (14 pages; the same text is on every dashboard page)
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 fourteen pages indexed by the job a reader arrives with -
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, patches, files, notifications,
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,desktop # add the PyQt6 desktop window (~100 MB)
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
- Two statements the product carries on its own model cards: the gauge aging
352
- envelope's lower bound is an engineering model with no field validation on
353
- record, and five of the fourteen back-tested strata quantities are NOT
354
- ACCEPTABLE at the 95 % target. Both are printed, never claimed otherwise.
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 (237 checks)
68
- gea help drift # the help library, by the job (14 pages; the same text is on every dashboard page)
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 fourteen pages indexed by the job a reader arrives with -
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, patches, files, notifications,
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,desktop # add the PyQt6 desktop window (~100 MB)
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
- Two statements the product carries on its own model cards: the gauge aging
313
- envelope's lower bound is an engineering model with no field validation on
314
- record, and five of the fourteen back-tested strata quantities are NOT
315
- ACCEPTABLE at the 95 % target. Both are printed, never claimed otherwise.
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 — the GEA Downhole HPHT Quartz-Gauge Simulator.
4
+ """gea - GEA-Program: the downhole gauge monitoring program.
5
5
 
6
- The gea-program's first packaged industry-application module: a
7
- deep-well (TD ~20,300 ft) six-gauge quartz P/T string with GEA-stabilized
8
- drift, transient events, live animation (matplotlib / optional PyQt6), and
9
- CSV export.
10
-
11
- The program aging model composes a fixed drift-suppression factor from three
12
- locked engineering constants (K_MEX = 25/12, PHI_RES = 0.84, F_TRZ = 0.1); the
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
- Demos (need a display):
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 .quartz_hpht_extension import (
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
- piezoresistive_drift,
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.4.0"
123
+ __version__ = "0.5.0"
133
124
  __all__ = [
134
- "calculate_quartz_transducer_hpht_program", "canonical_suppression",
135
- "conventional_drift", "drift_comparison",
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
- "CaseStudyConfig", "case_study", "depth_sweep", "write_markdown",
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
- "piezoresistive_drift", "rating_check",
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",