gea-program 0.5.0__tar.gz → 0.7.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 (219) hide show
  1. {gea_program-0.5.0/gea_program.egg-info → gea_program-0.7.0}/PKG-INFO +142 -10
  2. {gea_program-0.5.0 → gea_program-0.7.0}/README.md +141 -9
  3. {gea_program-0.5.0 → gea_program-0.7.0}/gea/__init__.py +3 -1
  4. {gea_program-0.5.0 → gea_program-0.7.0}/gea/__main__.py +309 -5
  5. {gea_program-0.5.0 → gea_program-0.7.0}/gea/acceptance_tests.py +696 -3
  6. {gea_program-0.5.0 → gea_program-0.7.0}/gea/cli.py +18 -12
  7. {gea_program-0.5.0 → gea_program-0.7.0}/gea/client_reports.py +182 -0
  8. {gea_program-0.5.0 → gea_program-0.7.0}/gea/doctor.py +45 -6
  9. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/TESTER_GUIDE.md +1 -1
  10. gea_program-0.7.0/gea/help/audit-update.md +13 -0
  11. gea_program-0.7.0/gea/help/seismic.md +13 -0
  12. {gea_program-0.5.0 → gea_program-0.7.0}/gea/helplib.py +2 -1
  13. {gea_program-0.5.0 → gea_program-0.7.0}/gea/jobs.py +11 -4
  14. gea_program-0.7.0/gea/permits.py +222 -0
  15. gea_program-0.7.0/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +122 -0
  16. gea_program-0.7.0/gea/reference/IU_ANMO_10_BHZ_response.xml +188 -0
  17. {gea_program-0.5.0 → gea_program-0.7.0}/gea/seismic.py +175 -89
  18. gea_program-0.7.0/gea/seismic_array.py +592 -0
  19. {gea_program-0.5.0 → gea_program-0.7.0}/gea/seismic_detect.py +1 -1
  20. gea_program-0.7.0/gea/seismic_film.py +303 -0
  21. gea_program-0.7.0/gea/seismic_response.py +358 -0
  22. gea_program-0.7.0/gea/seismic_track.py +435 -0
  23. {gea_program-0.5.0 → gea_program-0.7.0}/gea/service.py +192 -4
  24. {gea_program-0.5.0 → gea_program-0.7.0}/gea/web/app.html +275 -2
  25. gea_program-0.7.0/gea/workspace.py +800 -0
  26. {gea_program-0.5.0 → gea_program-0.7.0/gea_program.egg-info}/PKG-INFO +142 -10
  27. {gea_program-0.5.0 → gea_program-0.7.0}/gea_program.egg-info/SOURCES.txt +8 -0
  28. {gea_program-0.5.0 → gea_program-0.7.0}/pyproject.toml +1 -1
  29. gea_program-0.5.0/gea/help/seismic.md +0 -13
  30. gea_program-0.5.0/gea/workspace.py +0 -359
  31. {gea_program-0.5.0 → gea_program-0.7.0}/LICENSE +0 -0
  32. {gea_program-0.5.0 → gea_program-0.7.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  33. {gea_program-0.5.0 → gea_program-0.7.0}/gea/accuracy_statement.py +0 -0
  34. {gea_program-0.5.0 → gea_program-0.7.0}/gea/alarm_engine.py +0 -0
  35. {gea_program-0.5.0 → gea_program-0.7.0}/gea/bench.py +0 -0
  36. {gea_program-0.5.0 → gea_program-0.7.0}/gea/blind_harness.py +0 -0
  37. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  38. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  39. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  40. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  41. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  42. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  43. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  44. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  45. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  46. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  47. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  48. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  49. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  50. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  51. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  52. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  53. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  54. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  55. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  56. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  57. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  58. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  59. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  60. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  61. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  62. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  63. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  64. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  65. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  66. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  67. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  68. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  69. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  70. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  71. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  72. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  73. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  74. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  75. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  76. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  77. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  78. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  79. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  80. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  81. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  82. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  83. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  84. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  85. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  86. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  87. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  88. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  89. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  90. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  91. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  92. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  93. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  94. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  95. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  96. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  97. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  98. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  99. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  100. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  101. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  102. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  103. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  104. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/med_160_sapropels.txt +0 -0
  105. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  106. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  107. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  108. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  109. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  110. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  111. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  112. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  113. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  114. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  115. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  116. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  117. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  118. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  119. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  120. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  121. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  122. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  123. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  124. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  125. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  126. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  127. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  128. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  129. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  130. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  131. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  132. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  133. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  134. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  135. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  136. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  137. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  138. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  139. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  140. {gea_program-0.5.0 → gea_program-0.7.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  141. {gea_program-0.5.0 → gea_program-0.7.0}/gea/certificates.py +0 -0
  142. {gea_program-0.5.0 → gea_program-0.7.0}/gea/config_versioning.py +0 -0
  143. {gea_program-0.5.0 → gea_program-0.7.0}/gea/correlation.py +0 -0
  144. {gea_program-0.5.0 → gea_program-0.7.0}/gea/dashboard.py +0 -0
  145. {gea_program-0.5.0 → gea_program-0.7.0}/gea/deviation.py +0 -0
  146. {gea_program-0.5.0 → gea_program-0.7.0}/gea/downhole_engine.py +0 -0
  147. {gea_program-0.5.0 → gea_program-0.7.0}/gea/drift_monitor.py +0 -0
  148. {gea_program-0.5.0 → gea_program-0.7.0}/gea/earth_model.py +0 -0
  149. {gea_program-0.5.0 → gea_program-0.7.0}/gea/example_register_map.json +0 -0
  150. {gea_program-0.5.0 → gea_program-0.7.0}/gea/fat_sat.py +0 -0
  151. {gea_program-0.5.0 → gea_program-0.7.0}/gea/files.py +0 -0
  152. {gea_program-0.5.0 → gea_program-0.7.0}/gea/follower.py +0 -0
  153. {gea_program-0.5.0 → gea_program-0.7.0}/gea/forward_model.py +0 -0
  154. {gea_program-0.5.0 → gea_program-0.7.0}/gea/gamma.py +0 -0
  155. {gea_program-0.5.0 → gea_program-0.7.0}/gea/gauge_aging.py +0 -0
  156. {gea_program-0.5.0 → gea_program-0.7.0}/gea/gauge_specs.py +0 -0
  157. {gea_program-0.5.0 → gea_program-0.7.0}/gea/gravity_reference.py +0 -0
  158. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/alarms.md +0 -0
  159. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/data-in.md +0 -0
  160. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/doctor.md +0 -0
  161. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/drift.md +0 -0
  162. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/files.md +0 -0
  163. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/instruments.md +0 -0
  164. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/notifications.md +0 -0
  165. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/patches.md +0 -0
  166. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/quality.md +0 -0
  167. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/site.md +0 -0
  168. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/start.md +0 -0
  169. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/transients.md +0 -0
  170. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/upkeep.md +0 -0
  171. {gea_program-0.5.0 → gea_program-0.7.0}/gea/help/well-tests.md +0 -0
  172. {gea_program-0.5.0 → gea_program-0.7.0}/gea/housekeeping.py +0 -0
  173. {gea_program-0.5.0 → gea_program-0.7.0}/gea/inverse_engine.py +0 -0
  174. {gea_program-0.5.0 → gea_program-0.7.0}/gea/live_ports.py +0 -0
  175. {gea_program-0.5.0 → gea_program-0.7.0}/gea/loadtest.py +0 -0
  176. {gea_program-0.5.0 → gea_program-0.7.0}/gea/matplotlib_demo.py +0 -0
  177. {gea_program-0.5.0 → gea_program-0.7.0}/gea/modbus.py +0 -0
  178. {gea_program-0.5.0 → gea_program-0.7.0}/gea/model_card.py +0 -0
  179. {gea_program-0.5.0 → gea_program-0.7.0}/gea/mqtt_port.py +0 -0
  180. {gea_program-0.5.0 → gea_program-0.7.0}/gea/notify.py +0 -0
  181. {gea_program-0.5.0 → gea_program-0.7.0}/gea/opcua_port.py +0 -0
  182. {gea_program-0.5.0 → gea_program-0.7.0}/gea/operator_app.py +0 -0
  183. {gea_program-0.5.0 → gea_program-0.7.0}/gea/patches.py +0 -0
  184. {gea_program-0.5.0 → gea_program-0.7.0}/gea/ports.py +0 -0
  185. {gea_program-0.5.0 → gea_program-0.7.0}/gea/profile_catalog.py +0 -0
  186. {gea_program-0.5.0 → gea_program-0.7.0}/gea/project.py +0 -0
  187. {gea_program-0.5.0 → gea_program-0.7.0}/gea/qt6_downhole_app.py +0 -0
  188. {gea_program-0.5.0 → gea_program-0.7.0}/gea/reconciler.py +0 -0
  189. {gea_program-0.5.0 → gea_program-0.7.0}/gea/reference/libmseed_steim.provenance.json +0 -0
  190. {gea_program-0.5.0 → gea_program-0.7.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
  191. {gea_program-0.5.0 → gea_program-0.7.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
  192. {gea_program-0.5.0 → gea_program-0.7.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
  193. {gea_program-0.5.0 → gea_program-0.7.0}/gea/rock_inventory.py +0 -0
  194. {gea_program-0.5.0 → gea_program-0.7.0}/gea/sample_record.py +0 -0
  195. {gea_program-0.5.0 → gea_program-0.7.0}/gea/sample_well_profile.csv +0 -0
  196. {gea_program-0.5.0 → gea_program-0.7.0}/gea/sbom.py +0 -0
  197. {gea_program-0.5.0 → gea_program-0.7.0}/gea/segy.py +0 -0
  198. {gea_program-0.5.0 → gea_program-0.7.0}/gea/sensor_swap.py +0 -0
  199. {gea_program-0.5.0 → gea_program-0.7.0}/gea/service_life.py +0 -0
  200. {gea_program-0.5.0 → gea_program-0.7.0}/gea/shell.py +0 -0
  201. {gea_program-0.5.0 → gea_program-0.7.0}/gea/shut_in.py +0 -0
  202. {gea_program-0.5.0 → gea_program-0.7.0}/gea/sla_report.py +0 -0
  203. {gea_program-0.5.0 → gea_program-0.7.0}/gea/store_forward.py +0 -0
  204. {gea_program-0.5.0 → gea_program-0.7.0}/gea/strata_join.py +0 -0
  205. {gea_program-0.5.0 → gea_program-0.7.0}/gea/survey_cmd.py +0 -0
  206. {gea_program-0.5.0 → gea_program-0.7.0}/gea/survey_view.py +0 -0
  207. {gea_program-0.5.0 → gea_program-0.7.0}/gea/telemetry.py +0 -0
  208. {gea_program-0.5.0 → gea_program-0.7.0}/gea/tool_library.py +0 -0
  209. {gea_program-0.5.0 → gea_program-0.7.0}/gea/transient.py +0 -0
  210. {gea_program-0.5.0 → gea_program-0.7.0}/gea/well_assembler.py +0 -0
  211. {gea_program-0.5.0 → gea_program-0.7.0}/gea/well_test_validation.py +0 -0
  212. {gea_program-0.5.0 → gea_program-0.7.0}/gea/wits0.py +0 -0
  213. {gea_program-0.5.0 → gea_program-0.7.0}/gea/witsml.py +0 -0
  214. {gea_program-0.5.0 → gea_program-0.7.0}/gea_program.egg-info/dependency_links.txt +0 -0
  215. {gea_program-0.5.0 → gea_program-0.7.0}/gea_program.egg-info/entry_points.txt +0 -0
  216. {gea_program-0.5.0 → gea_program-0.7.0}/gea_program.egg-info/requires.txt +0 -0
  217. {gea_program-0.5.0 → gea_program-0.7.0}/gea_program.egg-info/top_level.txt +0 -0
  218. {gea_program-0.5.0 → gea_program-0.7.0}/setup.cfg +0 -0
  219. {gea_program-0.5.0 → gea_program-0.7.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.5.0
3
+ Version: 0.7.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
@@ -98,8 +98,22 @@ reaches a client document. Nothing unmeasured is ever reported as met.
98
98
  lines above the local floor out, and the detectability test: one station's
99
99
  record against a list of known rigs with positions and working windows,
100
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*.
101
+ heard and the nearest not heard. The instrument response (`seismic_response.py`):
102
+ the station's StationXML read into its stages, evaluated as evalresp does,
103
+ removed with a water level - counts to m/s, m or m/s^2. The decoder is proven
104
+ against libmseed on a corpus of real-station files; the response against
105
+ evalresp on a real IRIS channel. The array step (`seismic_array.py`):
106
+ beamforming over a slowness grid with the array response function's width
107
+ beside every bearing, the crossing of bearings from several arrays with its
108
+ ellipse, location from lags with the velocity named as an input, and the
109
+ array's detectability test - did it point at each known rig. On a site the
110
+ leg lives on the dashboard: a Seismic page where a station or an array is
111
+ added by upload with its rigs list and station file, refreshed as a job,
112
+ and read - spectrum, lines, verdicts, bearing - with its Seismic Station
113
+ Report under Reports; and the SAR panel on that page, a control panel and a
114
+ screen that plays the leg's arithmetic forward in time on the labelled
115
+ synthetic scene (`seismic_film.py`), every frame stamped SIMULATION_SELF_TEST.
116
+ See *The second leg*.
103
117
 
104
118
  ## Quick start
105
119
 
@@ -111,8 +125,8 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
111
125
  gea client-report --report accuracy --out client_report
112
126
  gea model-cards --out model_cards
113
127
  gea sbom --out sbom
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)
128
+ gea accept # the product gate (266 checks)
129
+ gea help drift # the help library, by the job (16 pages; the same text is on every dashboard page)
116
130
  gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
117
131
  gea gui # the desktop window (pip install "gea-program[desktop]")
118
132
  gea workspace --path C:\site --action init --name "Pad 3" # a site folder
@@ -240,10 +254,10 @@ text: JSON, JSON lines, CSV, Markdown, HTML.
240
254
 
241
255
  ### The help library
242
256
 
243
- `gea help` lists fifteen pages indexed by the job a reader arrives with -
257
+ `gea help` lists sixteen pages indexed by the job a reader arrives with -
244
258
  start, bring data in, quality rules, drift, well tests, alarms and the month,
245
259
  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
260
+ patches, files, notifications, which code is running, audit / update, upkeep. Each page carries four lines and stops: the
247
261
  command, what it writes, the one number to check, and what the page will not
248
262
  call a measurement. The pages ship inside the package (`gea/help/`), and the
249
263
  same text is what `/api/help` serves and what the dashboard shows under every
@@ -309,7 +323,60 @@ produces the standard spectral products: the Welch PSD, a spectrogram, and
309
323
  the lines that persist above a running-median floor in the band where rig
310
324
  machinery sits (1-50 Hz by default). The decoder is proven in the acceptance
311
325
  suite against records written by libmseed, the format's reference
312
- implementation (`gea/reference/`).
326
+ implementation (`gea/reference/`), and `tools/seismic_reader_check.py` runs it
327
+ against libmseed on about ninety real-station files of every encoding and
328
+ byte order (the obspy test corpus, fetched with pip, never redistributed):
329
+ every time-series file sample-exact.
330
+
331
+ Physical units come from the station's own response file. `gea seismic
332
+ --action remove-response --stationxml station.xml` reads the FDSN StationXML
333
+ the archives serve beside the data (`fetch --with-response` fetches it),
334
+ builds the response from its stages - the poles and zeros of the sensor, the
335
+ gain of each stage, the FIR and IIR coefficients of the digitizer with their
336
+ delay corrections - the way evalresp builds it, and removes it in the
337
+ frequency domain with a water level and a pre-filter, giving velocity,
338
+ displacement or acceleration in SI units. The acceptance suite holds the
339
+ evaluation to evalresp's numbers on a real IRIS channel (IU.ANMO.10.BHZ,
340
+ `gea/reference/`) to one part in a hundred thousand. A station file whose
341
+ stages disagree with their own declared sensitivity, a polynomial stage, a
342
+ channel the file does not cover: refused with the reason, never patched, and
343
+ the record stays in counts, labelled.
344
+
345
+ One station detects; an array gives a direction. `gea seismic --action beam`
346
+ takes three or more sensors' records with their positions and returns the
347
+ back-azimuth and slowness the band's energy crossed the array with, by
348
+ frequency-domain beamforming over a slowness grid (the conventional Bartlett
349
+ beam, or Capon), refined around its maximum - and, beside the bearing, the
350
+ array response function's half-power width, which is the resolution the
351
+ geometry allows at that band, and whether the geometry has aliasing lobes
352
+ there, so a lone peak is not mistaken for a source. `--action array-detect`
353
+ is the array's form of the detectability test: for each rig on the
354
+ ground-truth list, in the windows it worked alone, did the array point at it
355
+ within its own tolerance (POINTED, NOT_POINTED, INCOHERENT). `--action
356
+ locate` crosses the bearings of two or more arrays, weighted by their
357
+ uncertainties, and returns the point with its 1-sigma ellipse, the crossing
358
+ angle and the residual of each bearing; a location from station-pair lags is
359
+ there too, with the medium velocity it needs named as the input it is. On
360
+ the labelled synthetic scene (`--action array-selftest`) a 1.2 km,
361
+ nine-sensor array points at rigs from 6 to 45 km within 0.3 degrees against
362
+ a 7-degree tolerance, and three arrays' bearings cross within a kilometre of
363
+ the rig. What none of it claims: a position from one array, a bearing to a
364
+ source nearer than five apertures, a direction finer than the array response
365
+ function, or a velocity that was not measured.
366
+
367
+ On a site the leg is a page. Seismic, beside Wells: a station (one record)
368
+ or an array (one record per sensor and a sensors CSV) is added by upload with
369
+ its position, its rigs list and, when there is one, its StationXML, and lives
370
+ under `seismic/<station>/` in the workspace with its files copied in verbatim
371
+ and hashed. Refresh - a button, or `gea workspace --action refresh-seismic`,
372
+ and like every other action a job with its log - reads the record, removes
373
+ the response when the station file is there, writes the spectrum, the
374
+ persistent lines, the detectability verdicts and, for an array, the beam and
375
+ the array verdicts under `reports/seismic/<station>/`, and the Seismic
376
+ Station Report beside them; the station page draws the spectrum and shows
377
+ the tables with the limits printed under each. The home page counts the
378
+ stations and the listed rigs heard. The sample report is in
379
+ `docs/report_samples/`.
313
380
 
314
381
  The first number is the detectability test (`--action detect`): one station's
315
382
  continuous record, the station's position, and a CSV of known rigs - position
@@ -330,6 +397,70 @@ a rig not on the list, and any quantity in physical units until a station's
330
397
  response has been applied and named. `--action selftest` runs the test on a
331
398
  synthetic scene and labels its output SIMULATION_SELF_TEST.
332
399
 
400
+ The SAR panel at the foot of the Seismic page is the control panel and the
401
+ screen. "Run the scene" is `gea workspace --action sar-film` as a job: the
402
+ labelled synthetic array scene, one frame per window, written under
403
+ `reports/seismic/SIMULATION/`. The screen plays it - the trace, the
404
+ spectrogram column arriving, the beam power map on the slowness grid swinging
405
+ onto the working rig, the map with the bearing and the array's tolerance
406
+ wedge against the rigs where the scene put them, the tally per rig, and at
407
+ the end the array detectability test's verdict on the whole scene, the same
408
+ function a real record goes through. Every frame carries SIMULATION_SELF_TEST
409
+ and the line "not a measurement of any ground"; a real record is refreshed on
410
+ its station and the page shows what it earned, never a film. `gea seismic
411
+ --action sar-film --out film.json` writes the same film from the command line.
412
+
413
+ ### Tracks - the time dimension
414
+
415
+ The array step gives one bearing for one window. `seismic_track.py` runs it
416
+ window after window: a bearing history per array (a bearing with the array's
417
+ own tolerance where the beam was coherent, a gap where it was not, change
418
+ points where the bearing moved beyond the tolerance), a position history from
419
+ two or more arrays crossed window by window (a position only where two or
420
+ more arrays were coherent, the bearings crossed at 15 degrees or more and the
421
+ point lies in front of every array - every other window a gap with its
422
+ reason), and the track: the principal line through the longest continuous
423
+ segment of positions, with its heading, length and rate, the ellipses beside
424
+ every point, and segments listed apart where positions jump farther than
425
+ their ellipses allow (a coherent background crossing in a quiet hour is not
426
+ the rig an hour later). The verdict against ground truth - the lateral's
427
+ surveyed points or a permit's surface hole with its date, interpolated to
428
+ each position's time - is TRACKED, PARTIAL, NOT_TRACKED or INSUFFICIENT, with
429
+ the fraction and the heading difference printed. The labelled scene behind
430
+ `--action track-selftest` is a bit advancing along a straight lateral past
431
+ two arrays. On a site a track is two or more array stations and an optional
432
+ truth CSV, refreshed as a job into the Seismic Track Report; the track view
433
+ shows the map with every position's ellipse, a slider through time and the
434
+ bearings over time, and the SAR panel's second scene plays the same thing
435
+ forward with the track drawn as it is earned.
436
+
437
+ Ground truth from a permit export: `gea permits --file export.csv --out
438
+ rigs.csv --within LAT LON KM` finds the columns of a regulator's query (an
439
+ identifier, a surface position, a spud or approval date) by name, with a
440
+ mapping file when the guesses are wrong, and writes the rigs CSV the tests
441
+ read beside an import note that says which columns were used, how many rows
442
+ were dropped and why, and how many end dates it assumed (a permit rarely says
443
+ when drilling stopped). The Seismic page's add form takes a permit export in
444
+ place of the rigs CSV and keeps both.
445
+
446
+ ### Audit / Update
447
+
448
+ The Audit / Update tab holds three things. The whole audit log
449
+ (`records/audit.jsonl`) with filters by who, by action and since a date, and
450
+ a CSV download - Administration keeps the last hundred lines and points here.
451
+ The program card: the running version and code path, the newest release on
452
+ PyPI (`current`, `behind`, or `PyPI not reachable` when the machine is
453
+ offline), which extras are installed here, and links to PyPI, the releases
454
+ with the install kits, and the CHANGELOG; "Update the program from PyPI"
455
+ (admin) is `gea update` as a job - pip --upgrade from the same Python, after
456
+ which the service must be restarted; the program never restarts itself, and
457
+ an offline kit is updated by installing the newer kit. The data card: every
458
+ report against its source - `current` or `stale` when the source changed
459
+ after the report was written - and "Update every report from its source"
460
+ (operator), which is `gea workspace --action refresh-all` as a job: the
461
+ dashboard for every well, then every seismic station, errors collected and
462
+ listed, never hidden.
463
+
333
464
  ### Before a site goes live
334
465
 
335
466
  `deploy/README.md` is the checklist: keep the service on the loopback
@@ -377,12 +508,13 @@ attaches the zips to the GitHub release of that tag.
377
508
  gea/ the package: engines, record layer, reports, monitor, dashboard, cli, shell, acceptance suite,
378
509
  workspace, jobs, service, patches and web/app.html (the served dashboard)
379
510
  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
511
+ gea/reference/ miniSEED records written by libmseed and an IRIS StationXML with evalresp's numbers, with provenance: the independent references
381
512
  docs/report_samples/ one rendered example of every client report, from this build (tools/render_report_samples.py; SAMPLES.md names each command)
382
513
  docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
383
514
  SESSION_LOG.md (the working record, session by session),
384
515
  commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
385
- tools/ standalone_check.py (the self-contained guard; run by ci and ship.ps1), build_installer.py (the kit)
516
+ tools/ standalone_check.py (the self-contained guard; run by ci and ship.ps1), build_installer.py (the kit),
517
+ render_report_samples.py (docs/report_samples), seismic_reader_check.py (the reader against libmseed)
386
518
  CHANGELOG.md per-release summary (a tag ships only with its section); SHIP_LOG.md is written by ship.ps1
387
519
  tests/ pytest wrapper around the acceptance suite and the standalone check
388
520
  ```
@@ -59,8 +59,22 @@ reaches a client document. Nothing unmeasured is ever reported as met.
59
59
  lines above the local floor out, and the detectability test: one station's
60
60
  record against a list of known rigs with positions and working windows,
61
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*.
62
+ heard and the nearest not heard. The instrument response (`seismic_response.py`):
63
+ the station's StationXML read into its stages, evaluated as evalresp does,
64
+ removed with a water level - counts to m/s, m or m/s^2. The decoder is proven
65
+ against libmseed on a corpus of real-station files; the response against
66
+ evalresp on a real IRIS channel. The array step (`seismic_array.py`):
67
+ beamforming over a slowness grid with the array response function's width
68
+ beside every bearing, the crossing of bearings from several arrays with its
69
+ ellipse, location from lags with the velocity named as an input, and the
70
+ array's detectability test - did it point at each known rig. On a site the
71
+ leg lives on the dashboard: a Seismic page where a station or an array is
72
+ added by upload with its rigs list and station file, refreshed as a job,
73
+ and read - spectrum, lines, verdicts, bearing - with its Seismic Station
74
+ Report under Reports; and the SAR panel on that page, a control panel and a
75
+ screen that plays the leg's arithmetic forward in time on the labelled
76
+ synthetic scene (`seismic_film.py`), every frame stamped SIMULATION_SELF_TEST.
77
+ See *The second leg*.
64
78
 
65
79
  ## Quick start
66
80
 
@@ -72,8 +86,8 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
72
86
  gea client-report --report accuracy --out client_report
73
87
  gea model-cards --out model_cards
74
88
  gea sbom --out sbom
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)
89
+ gea accept # the product gate (266 checks)
90
+ gea help drift # the help library, by the job (16 pages; the same text is on every dashboard page)
77
91
  gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
78
92
  gea gui # the desktop window (pip install "gea-program[desktop]")
79
93
  gea workspace --path C:\site --action init --name "Pad 3" # a site folder
@@ -201,10 +215,10 @@ text: JSON, JSON lines, CSV, Markdown, HTML.
201
215
 
202
216
  ### The help library
203
217
 
204
- `gea help` lists fifteen pages indexed by the job a reader arrives with -
218
+ `gea help` lists sixteen pages indexed by the job a reader arrives with -
205
219
  start, bring data in, quality rules, drift, well tests, alarms and the month,
206
220
  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
221
+ patches, files, notifications, which code is running, audit / update, upkeep. Each page carries four lines and stops: the
208
222
  command, what it writes, the one number to check, and what the page will not
209
223
  call a measurement. The pages ship inside the package (`gea/help/`), and the
210
224
  same text is what `/api/help` serves and what the dashboard shows under every
@@ -270,7 +284,60 @@ produces the standard spectral products: the Welch PSD, a spectrogram, and
270
284
  the lines that persist above a running-median floor in the band where rig
271
285
  machinery sits (1-50 Hz by default). The decoder is proven in the acceptance
272
286
  suite against records written by libmseed, the format's reference
273
- implementation (`gea/reference/`).
287
+ implementation (`gea/reference/`), and `tools/seismic_reader_check.py` runs it
288
+ against libmseed on about ninety real-station files of every encoding and
289
+ byte order (the obspy test corpus, fetched with pip, never redistributed):
290
+ every time-series file sample-exact.
291
+
292
+ Physical units come from the station's own response file. `gea seismic
293
+ --action remove-response --stationxml station.xml` reads the FDSN StationXML
294
+ the archives serve beside the data (`fetch --with-response` fetches it),
295
+ builds the response from its stages - the poles and zeros of the sensor, the
296
+ gain of each stage, the FIR and IIR coefficients of the digitizer with their
297
+ delay corrections - the way evalresp builds it, and removes it in the
298
+ frequency domain with a water level and a pre-filter, giving velocity,
299
+ displacement or acceleration in SI units. The acceptance suite holds the
300
+ evaluation to evalresp's numbers on a real IRIS channel (IU.ANMO.10.BHZ,
301
+ `gea/reference/`) to one part in a hundred thousand. A station file whose
302
+ stages disagree with their own declared sensitivity, a polynomial stage, a
303
+ channel the file does not cover: refused with the reason, never patched, and
304
+ the record stays in counts, labelled.
305
+
306
+ One station detects; an array gives a direction. `gea seismic --action beam`
307
+ takes three or more sensors' records with their positions and returns the
308
+ back-azimuth and slowness the band's energy crossed the array with, by
309
+ frequency-domain beamforming over a slowness grid (the conventional Bartlett
310
+ beam, or Capon), refined around its maximum - and, beside the bearing, the
311
+ array response function's half-power width, which is the resolution the
312
+ geometry allows at that band, and whether the geometry has aliasing lobes
313
+ there, so a lone peak is not mistaken for a source. `--action array-detect`
314
+ is the array's form of the detectability test: for each rig on the
315
+ ground-truth list, in the windows it worked alone, did the array point at it
316
+ within its own tolerance (POINTED, NOT_POINTED, INCOHERENT). `--action
317
+ locate` crosses the bearings of two or more arrays, weighted by their
318
+ uncertainties, and returns the point with its 1-sigma ellipse, the crossing
319
+ angle and the residual of each bearing; a location from station-pair lags is
320
+ there too, with the medium velocity it needs named as the input it is. On
321
+ the labelled synthetic scene (`--action array-selftest`) a 1.2 km,
322
+ nine-sensor array points at rigs from 6 to 45 km within 0.3 degrees against
323
+ a 7-degree tolerance, and three arrays' bearings cross within a kilometre of
324
+ the rig. What none of it claims: a position from one array, a bearing to a
325
+ source nearer than five apertures, a direction finer than the array response
326
+ function, or a velocity that was not measured.
327
+
328
+ On a site the leg is a page. Seismic, beside Wells: a station (one record)
329
+ or an array (one record per sensor and a sensors CSV) is added by upload with
330
+ its position, its rigs list and, when there is one, its StationXML, and lives
331
+ under `seismic/<station>/` in the workspace with its files copied in verbatim
332
+ and hashed. Refresh - a button, or `gea workspace --action refresh-seismic`,
333
+ and like every other action a job with its log - reads the record, removes
334
+ the response when the station file is there, writes the spectrum, the
335
+ persistent lines, the detectability verdicts and, for an array, the beam and
336
+ the array verdicts under `reports/seismic/<station>/`, and the Seismic
337
+ Station Report beside them; the station page draws the spectrum and shows
338
+ the tables with the limits printed under each. The home page counts the
339
+ stations and the listed rigs heard. The sample report is in
340
+ `docs/report_samples/`.
274
341
 
275
342
  The first number is the detectability test (`--action detect`): one station's
276
343
  continuous record, the station's position, and a CSV of known rigs - position
@@ -291,6 +358,70 @@ a rig not on the list, and any quantity in physical units until a station's
291
358
  response has been applied and named. `--action selftest` runs the test on a
292
359
  synthetic scene and labels its output SIMULATION_SELF_TEST.
293
360
 
361
+ The SAR panel at the foot of the Seismic page is the control panel and the
362
+ screen. "Run the scene" is `gea workspace --action sar-film` as a job: the
363
+ labelled synthetic array scene, one frame per window, written under
364
+ `reports/seismic/SIMULATION/`. The screen plays it - the trace, the
365
+ spectrogram column arriving, the beam power map on the slowness grid swinging
366
+ onto the working rig, the map with the bearing and the array's tolerance
367
+ wedge against the rigs where the scene put them, the tally per rig, and at
368
+ the end the array detectability test's verdict on the whole scene, the same
369
+ function a real record goes through. Every frame carries SIMULATION_SELF_TEST
370
+ and the line "not a measurement of any ground"; a real record is refreshed on
371
+ its station and the page shows what it earned, never a film. `gea seismic
372
+ --action sar-film --out film.json` writes the same film from the command line.
373
+
374
+ ### Tracks - the time dimension
375
+
376
+ The array step gives one bearing for one window. `seismic_track.py` runs it
377
+ window after window: a bearing history per array (a bearing with the array's
378
+ own tolerance where the beam was coherent, a gap where it was not, change
379
+ points where the bearing moved beyond the tolerance), a position history from
380
+ two or more arrays crossed window by window (a position only where two or
381
+ more arrays were coherent, the bearings crossed at 15 degrees or more and the
382
+ point lies in front of every array - every other window a gap with its
383
+ reason), and the track: the principal line through the longest continuous
384
+ segment of positions, with its heading, length and rate, the ellipses beside
385
+ every point, and segments listed apart where positions jump farther than
386
+ their ellipses allow (a coherent background crossing in a quiet hour is not
387
+ the rig an hour later). The verdict against ground truth - the lateral's
388
+ surveyed points or a permit's surface hole with its date, interpolated to
389
+ each position's time - is TRACKED, PARTIAL, NOT_TRACKED or INSUFFICIENT, with
390
+ the fraction and the heading difference printed. The labelled scene behind
391
+ `--action track-selftest` is a bit advancing along a straight lateral past
392
+ two arrays. On a site a track is two or more array stations and an optional
393
+ truth CSV, refreshed as a job into the Seismic Track Report; the track view
394
+ shows the map with every position's ellipse, a slider through time and the
395
+ bearings over time, and the SAR panel's second scene plays the same thing
396
+ forward with the track drawn as it is earned.
397
+
398
+ Ground truth from a permit export: `gea permits --file export.csv --out
399
+ rigs.csv --within LAT LON KM` finds the columns of a regulator's query (an
400
+ identifier, a surface position, a spud or approval date) by name, with a
401
+ mapping file when the guesses are wrong, and writes the rigs CSV the tests
402
+ read beside an import note that says which columns were used, how many rows
403
+ were dropped and why, and how many end dates it assumed (a permit rarely says
404
+ when drilling stopped). The Seismic page's add form takes a permit export in
405
+ place of the rigs CSV and keeps both.
406
+
407
+ ### Audit / Update
408
+
409
+ The Audit / Update tab holds three things. The whole audit log
410
+ (`records/audit.jsonl`) with filters by who, by action and since a date, and
411
+ a CSV download - Administration keeps the last hundred lines and points here.
412
+ The program card: the running version and code path, the newest release on
413
+ PyPI (`current`, `behind`, or `PyPI not reachable` when the machine is
414
+ offline), which extras are installed here, and links to PyPI, the releases
415
+ with the install kits, and the CHANGELOG; "Update the program from PyPI"
416
+ (admin) is `gea update` as a job - pip --upgrade from the same Python, after
417
+ which the service must be restarted; the program never restarts itself, and
418
+ an offline kit is updated by installing the newer kit. The data card: every
419
+ report against its source - `current` or `stale` when the source changed
420
+ after the report was written - and "Update every report from its source"
421
+ (operator), which is `gea workspace --action refresh-all` as a job: the
422
+ dashboard for every well, then every seismic station, errors collected and
423
+ listed, never hidden.
424
+
294
425
  ### Before a site goes live
295
426
 
296
427
  `deploy/README.md` is the checklist: keep the service on the loopback
@@ -338,12 +469,13 @@ attaches the zips to the GitHub release of that tag.
338
469
  gea/ the package: engines, record layer, reports, monitor, dashboard, cli, shell, acceptance suite,
339
470
  workspace, jobs, service, patches and web/app.html (the served dashboard)
340
471
  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
472
+ gea/reference/ miniSEED records written by libmseed and an IRIS StationXML with evalresp's numbers, with provenance: the independent references
342
473
  docs/report_samples/ one rendered example of every client report, from this build (tools/render_report_samples.py; SAMPLES.md names each command)
343
474
  docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
344
475
  SESSION_LOG.md (the working record, session by session),
345
476
  commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
346
- tools/ standalone_check.py (the self-contained guard; run by ci and ship.ps1), build_installer.py (the kit)
477
+ tools/ standalone_check.py (the self-contained guard; run by ci and ship.ps1), build_installer.py (the kit),
478
+ render_report_samples.py (docs/report_samples), seismic_reader_check.py (the reader against libmseed)
347
479
  CHANGELOG.md per-release summary (a tag ships only with its section); SHIP_LOG.md is written by ship.ps1
348
480
  tests/ pytest wrapper around the acceptance suite and the standalone check
349
481
  ```
@@ -100,6 +100,8 @@ from .seismic import (
100
100
  welch_psd, spectrogram, persistent_lines, band_power,
101
101
  )
102
102
  from .seismic_detect import Source as SeismicSource, detectability_test, load_sources_csv, haversine_km, DRILLING_BAND_HZ
103
+ from .seismic_response import read_stationxml, remove_response, transfer as response_transfer, fdsn_stationxml
104
+ from .seismic_array import Sensor as SeismicSensor, load_sensors_csv, beam as array_beam, array_detectability, intersect_backazimuths, locate_from_lags
103
105
  from .bench import (
104
106
  bench_analysis, bench_selftest,
105
107
  )
@@ -120,7 +122,7 @@ from .profile_catalog import (
120
122
  read_pangaea_txt,
121
123
  )
122
124
 
123
- __version__ = "0.5.0"
125
+ __version__ = "0.7.0"
124
126
  __all__ = [
125
127
  "aging_rate", "rate_psi_yr", "accuracy_psi",
126
128
  "Sensor", "SimulatorConfig", "DownholeEngine",