gea-program 0.49.0__tar.gz → 0.51.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 (355) hide show
  1. {gea_program-0.49.0 → gea_program-0.51.0}/PKG-INFO +30 -1
  2. {gea_program-0.49.0 → gea_program-0.51.0}/README.md +29 -0
  3. {gea_program-0.49.0 → gea_program-0.51.0}/gea/__init__.py +1 -1
  4. {gea_program-0.49.0 → gea_program-0.51.0}/gea/__main__.py +114 -0
  5. {gea_program-0.49.0 → gea_program-0.51.0}/gea/acceptance_tests.py +433 -2
  6. {gea_program-0.49.0 → gea_program-0.51.0}/gea/alerts.py +20 -2
  7. {gea_program-0.49.0 → gea_program-0.51.0}/gea/collision.py +60 -12
  8. {gea_program-0.49.0 → gea_program-0.51.0}/gea/dossier.py +36 -4
  9. gea_program-0.51.0/gea/frac_hits.py +518 -0
  10. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/alerts.md +1 -1
  11. gea_program-0.51.0/gea/help/collision.md +19 -0
  12. gea_program-0.51.0/gea/help/frac-hits.md +17 -0
  13. gea_program-0.51.0/gea/help/plan.md +19 -0
  14. {gea_program-0.49.0 → gea_program-0.51.0}/gea/helplib.py +4 -2
  15. {gea_program-0.49.0 → gea_program-0.51.0}/gea/notify.py +3 -1
  16. gea_program-0.51.0/gea/reference/iscwsa_rev5_example.json +2015 -0
  17. gea_program-0.51.0/gea/reference/owsg_tool_models.json +4611 -0
  18. {gea_program-0.49.0 → gea_program-0.51.0}/gea/service.py +49 -0
  19. {gea_program-0.49.0 → gea_program-0.51.0}/gea/web/app.html +171 -4
  20. {gea_program-0.49.0 → gea_program-0.51.0}/gea/well3d.py +50 -18
  21. gea_program-0.51.0/gea/wellplan.py +388 -0
  22. {gea_program-0.49.0 → gea_program-0.51.0}/gea/wellpos.py +169 -5
  23. {gea_program-0.49.0 → gea_program-0.51.0}/gea_program.egg-info/PKG-INFO +30 -1
  24. {gea_program-0.49.0 → gea_program-0.51.0}/gea_program.egg-info/SOURCES.txt +6 -0
  25. {gea_program-0.49.0 → gea_program-0.51.0}/pyproject.toml +1 -1
  26. gea_program-0.49.0/gea/help/collision.md +0 -19
  27. {gea_program-0.49.0 → gea_program-0.51.0}/LICENSE +0 -0
  28. {gea_program-0.49.0 → gea_program-0.51.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  29. {gea_program-0.49.0 → gea_program-0.51.0}/gea/accuracy_statement.py +0 -0
  30. {gea_program-0.49.0 → gea_program-0.51.0}/gea/alarm_engine.py +0 -0
  31. {gea_program-0.49.0 → gea_program-0.51.0}/gea/backup.py +0 -0
  32. {gea_program-0.49.0 → gea_program-0.51.0}/gea/bench.py +0 -0
  33. {gea_program-0.49.0 → gea_program-0.51.0}/gea/blind_harness.py +0 -0
  34. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  35. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  36. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  37. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  38. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  39. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  40. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  41. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  42. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  43. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  44. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  45. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  46. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  47. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  48. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  49. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  50. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  51. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  52. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  53. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  54. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  55. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  56. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  57. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  58. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  59. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  60. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  61. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  62. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  63. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  64. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  65. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  66. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  67. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  68. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  69. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  70. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  71. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  72. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  73. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  74. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  75. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  76. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  77. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  78. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  79. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  80. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  81. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  82. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  83. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  84. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  85. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  86. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  87. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  88. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  89. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  90. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  91. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  92. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  93. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  94. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  95. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  96. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  97. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  98. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  99. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  100. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  101. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/med_160_sapropels.txt +0 -0
  102. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  103. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  104. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  105. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  106. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  107. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  108. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  109. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  110. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  111. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  112. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  113. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  114. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  115. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  116. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  117. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  118. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  119. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  120. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  121. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  122. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  123. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  124. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  125. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  126. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  127. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  128. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  129. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  130. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  131. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  132. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  133. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  134. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  135. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  136. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  137. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  138. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog_map.py +0 -0
  139. {gea_program-0.49.0 → gea_program-0.51.0}/gea/catalog_register.py +0 -0
  140. {gea_program-0.49.0 → gea_program-0.51.0}/gea/certificates.py +0 -0
  141. {gea_program-0.49.0 → gea_program-0.51.0}/gea/cli.py +0 -0
  142. {gea_program-0.49.0 → gea_program-0.51.0}/gea/client_reports.py +0 -0
  143. {gea_program-0.49.0 → gea_program-0.51.0}/gea/config_versioning.py +0 -0
  144. {gea_program-0.49.0 → gea_program-0.51.0}/gea/conformance.py +0 -0
  145. {gea_program-0.49.0 → gea_program-0.51.0}/gea/control_room.py +0 -0
  146. {gea_program-0.49.0 → gea_program-0.51.0}/gea/correlation.py +0 -0
  147. {gea_program-0.49.0 → gea_program-0.51.0}/gea/dashboard.py +0 -0
  148. {gea_program-0.49.0 → gea_program-0.51.0}/gea/declarations.py +0 -0
  149. {gea_program-0.49.0 → gea_program-0.51.0}/gea/deviation.py +0 -0
  150. {gea_program-0.49.0 → gea_program-0.51.0}/gea/dlis.py +0 -0
  151. {gea_program-0.49.0 → gea_program-0.51.0}/gea/dnp3.py +0 -0
  152. {gea_program-0.49.0 → gea_program-0.51.0}/gea/doctor.py +0 -0
  153. {gea_program-0.49.0 → gea_program-0.51.0}/gea/dossier_verify.py +0 -0
  154. {gea_program-0.49.0 → gea_program-0.51.0}/gea/downhole_engine.py +0 -0
  155. {gea_program-0.49.0 → gea_program-0.51.0}/gea/drift_monitor.py +0 -0
  156. {gea_program-0.49.0 → gea_program-0.51.0}/gea/drill_string.py +0 -0
  157. {gea_program-0.49.0 → gea_program-0.51.0}/gea/earth_model.py +0 -0
  158. {gea_program-0.49.0 → gea_program-0.51.0}/gea/economics.py +0 -0
  159. {gea_program-0.49.0 → gea_program-0.51.0}/gea/ed25519.py +0 -0
  160. {gea_program-0.49.0 → gea_program-0.51.0}/gea/edr.py +0 -0
  161. {gea_program-0.49.0 → gea_program-0.51.0}/gea/elevation.py +0 -0
  162. {gea_program-0.49.0 → gea_program-0.51.0}/gea/etp.py +0 -0
  163. {gea_program-0.49.0 → gea_program-0.51.0}/gea/etp12_schemas.json +0 -0
  164. {gea_program-0.49.0 → gea_program-0.51.0}/gea/example_register_map.json +0 -0
  165. {gea_program-0.49.0 → gea_program-0.51.0}/gea/fat_sat.py +0 -0
  166. {gea_program-0.49.0 → gea_program-0.51.0}/gea/files.py +0 -0
  167. {gea_program-0.49.0 → gea_program-0.51.0}/gea/fixtures/README.md +0 -0
  168. {gea_program-0.49.0 → gea_program-0.51.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
  169. {gea_program-0.49.0 → gea_program-0.51.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
  170. {gea_program-0.49.0 → gea_program-0.51.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
  171. {gea_program-0.49.0 → gea_program-0.51.0}/gea/fixtures/ne_110m_coastline.json +0 -0
  172. {gea_program-0.49.0 → gea_program-0.51.0}/gea/follower.py +0 -0
  173. {gea_program-0.49.0 → gea_program-0.51.0}/gea/forward_model.py +0 -0
  174. {gea_program-0.49.0 → gea_program-0.51.0}/gea/friction_priors.py +0 -0
  175. {gea_program-0.49.0 → gea_program-0.51.0}/gea/gamma.py +0 -0
  176. {gea_program-0.49.0 → gea_program-0.51.0}/gea/gauge_aging.py +0 -0
  177. {gea_program-0.49.0 → gea_program-0.51.0}/gea/gauge_specs.py +0 -0
  178. {gea_program-0.49.0 → gea_program-0.51.0}/gea/geodesy.py +0 -0
  179. {gea_program-0.49.0 → gea_program-0.51.0}/gea/geomag.py +0 -0
  180. {gea_program-0.49.0 → gea_program-0.51.0}/gea/gravity_reference.py +0 -0
  181. {gea_program-0.49.0 → gea_program-0.51.0}/gea/hartip.py +0 -0
  182. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/TESTER_GUIDE.md +0 -0
  183. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/alarms.md +0 -0
  184. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/audit-update.md +0 -0
  185. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/backup.md +0 -0
  186. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/catalog.md +0 -0
  187. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/charts.md +0 -0
  188. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/conformance.md +0 -0
  189. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/control-room.md +0 -0
  190. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/data-in.md +0 -0
  191. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/declare.md +0 -0
  192. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/dlis.md +0 -0
  193. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/doctor.md +0 -0
  194. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/dossier.md +0 -0
  195. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/drift.md +0 -0
  196. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/drillstring.md +0 -0
  197. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/economics.md +0 -0
  198. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/edr.md +0 -0
  199. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/etp.md +0 -0
  200. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/field-ports.md +0 -0
  201. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/files.md +0 -0
  202. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/historian.md +0 -0
  203. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/instruments.md +0 -0
  204. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/interval.md +0 -0
  205. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/invoice-check.md +0 -0
  206. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/map.md +0 -0
  207. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/month-end.md +0 -0
  208. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/notifications.md +0 -0
  209. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/opseis.md +0 -0
  210. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/osdu.md +0 -0
  211. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/pad-summary.md +0 -0
  212. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/patches.md +0 -0
  213. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/penetrator.md +0 -0
  214. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/ppdm.md +0 -0
  215. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/quakeml.md +0 -0
  216. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/quality.md +0 -0
  217. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/report-history.md +0 -0
  218. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/rig-time.md +0 -0
  219. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/seedlink.md +0 -0
  220. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/seismic.md +0 -0
  221. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/setup.md +0 -0
  222. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/simulation.md +0 -0
  223. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/site.md +0 -0
  224. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/sites.md +0 -0
  225. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/slip.md +0 -0
  226. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/soak.md +0 -0
  227. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/sra.md +0 -0
  228. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/start.md +0 -0
  229. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/structure.md +0 -0
  230. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/tools.md +0 -0
  231. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/transients.md +0 -0
  232. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/upkeep.md +0 -0
  233. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/vibration.md +0 -0
  234. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/well-report.md +0 -0
  235. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/well-tests.md +0 -0
  236. {gea_program-0.49.0 → gea_program-0.51.0}/gea/help/well3d.md +0 -0
  237. {gea_program-0.49.0 → gea_program-0.51.0}/gea/housekeeping.py +0 -0
  238. {gea_program-0.49.0 → gea_program-0.51.0}/gea/interval.py +0 -0
  239. {gea_program-0.49.0 → gea_program-0.51.0}/gea/inverse_engine.py +0 -0
  240. {gea_program-0.49.0 → gea_program-0.51.0}/gea/invoice_check.py +0 -0
  241. {gea_program-0.49.0 → gea_program-0.51.0}/gea/jobs.py +0 -0
  242. {gea_program-0.49.0 → gea_program-0.51.0}/gea/live_ports.py +0 -0
  243. {gea_program-0.49.0 → gea_program-0.51.0}/gea/loadtest.py +0 -0
  244. {gea_program-0.49.0 → gea_program-0.51.0}/gea/matplotlib_demo.py +0 -0
  245. {gea_program-0.49.0 → gea_program-0.51.0}/gea/modbus.py +0 -0
  246. {gea_program-0.49.0 → gea_program-0.51.0}/gea/modbus_rtu.py +0 -0
  247. {gea_program-0.49.0 → gea_program-0.51.0}/gea/model_card.py +0 -0
  248. {gea_program-0.49.0 → gea_program-0.51.0}/gea/month_end.py +0 -0
  249. {gea_program-0.49.0 → gea_program-0.51.0}/gea/mqtt_port.py +0 -0
  250. {gea_program-0.49.0 → gea_program-0.51.0}/gea/op_seismicity.py +0 -0
  251. {gea_program-0.49.0 → gea_program-0.51.0}/gea/opcua_port.py +0 -0
  252. {gea_program-0.49.0 → gea_program-0.51.0}/gea/operator_app.py +0 -0
  253. {gea_program-0.49.0 → gea_program-0.51.0}/gea/osdu.py +0 -0
  254. {gea_program-0.49.0 → gea_program-0.51.0}/gea/pad_summary.py +0 -0
  255. {gea_program-0.49.0 → gea_program-0.51.0}/gea/patches.py +0 -0
  256. {gea_program-0.49.0 → gea_program-0.51.0}/gea/pdf_report.py +0 -0
  257. {gea_program-0.49.0 → gea_program-0.51.0}/gea/penetrator.py +0 -0
  258. {gea_program-0.49.0 → gea_program-0.51.0}/gea/permits.py +0 -0
  259. {gea_program-0.49.0 → gea_program-0.51.0}/gea/piwebapi.py +0 -0
  260. {gea_program-0.49.0 → gea_program-0.51.0}/gea/ports.py +0 -0
  261. {gea_program-0.49.0 → gea_program-0.51.0}/gea/ppdm.py +0 -0
  262. {gea_program-0.49.0 → gea_program-0.51.0}/gea/profile_catalog.py +0 -0
  263. {gea_program-0.49.0 → gea_program-0.51.0}/gea/project.py +0 -0
  264. {gea_program-0.49.0 → gea_program-0.51.0}/gea/qt6_downhole_app.py +0 -0
  265. {gea_program-0.49.0 → gea_program-0.51.0}/gea/quakeml.py +0 -0
  266. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reconciler.py +0 -0
  267. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
  268. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
  269. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/WMM2025.COF +0 -0
  270. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
  271. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/eia_prices.provenance.json +0 -0
  272. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
  273. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/iscwsa_rev4_example.json +0 -0
  274. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/libmseed_steim.provenance.json +0 -0
  275. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
  276. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
  277. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
  278. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/mahoning_example.json +0 -0
  279. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/mud_motor_specs.json +0 -0
  280. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/penetrator_ratings.json +0 -0
  281. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/seismicity_protocols.json +0 -0
  282. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/tool_sources.json +0 -0
  283. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/us_outline.json +0 -0
  284. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/us_outline.provenance.json +0 -0
  285. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_3d.provenance.json +0 -0
  286. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
  287. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
  288. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
  289. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_surfaces.json.gz +0 -0
  290. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
  291. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
  292. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
  293. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
  294. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
  295. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
  296. {gea_program-0.49.0 → gea_program-0.51.0}/gea/reference/volve_well_picks.csv.gz +0 -0
  297. {gea_program-0.49.0 → gea_program-0.51.0}/gea/report_history.py +0 -0
  298. {gea_program-0.49.0 → gea_program-0.51.0}/gea/rig_state.py +0 -0
  299. {gea_program-0.49.0 → gea_program-0.51.0}/gea/rock_inventory.py +0 -0
  300. {gea_program-0.49.0 → gea_program-0.51.0}/gea/sample_record.py +0 -0
  301. {gea_program-0.49.0 → gea_program-0.51.0}/gea/sample_well_profile.csv +0 -0
  302. {gea_program-0.49.0 → gea_program-0.51.0}/gea/sbom.py +0 -0
  303. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seedlink.py +0 -0
  304. {gea_program-0.49.0 → gea_program-0.51.0}/gea/segy.py +0 -0
  305. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic.py +0 -0
  306. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_array.py +0 -0
  307. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_assoc.py +0 -0
  308. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_detect.py +0 -0
  309. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_film.py +0 -0
  310. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_harmonic.py +0 -0
  311. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_qc.py +0 -0
  312. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_response.py +0 -0
  313. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_signature.py +0 -0
  314. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_track.py +0 -0
  315. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_uncertainty.py +0 -0
  316. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_unlisted.py +0 -0
  317. {gea_program-0.49.0 → gea_program-0.51.0}/gea/seismic_watch.py +0 -0
  318. {gea_program-0.49.0 → gea_program-0.51.0}/gea/sensor_swap.py +0 -0
  319. {gea_program-0.49.0 → gea_program-0.51.0}/gea/series_cache.py +0 -0
  320. {gea_program-0.49.0 → gea_program-0.51.0}/gea/service_life.py +0 -0
  321. {gea_program-0.49.0 → gea_program-0.51.0}/gea/setup_checklist.py +0 -0
  322. {gea_program-0.49.0 → gea_program-0.51.0}/gea/shapefile.py +0 -0
  323. {gea_program-0.49.0 → gea_program-0.51.0}/gea/shell.py +0 -0
  324. {gea_program-0.49.0 → gea_program-0.51.0}/gea/shut_in.py +0 -0
  325. {gea_program-0.49.0 → gea_program-0.51.0}/gea/simulation.py +0 -0
  326. {gea_program-0.49.0 → gea_program-0.51.0}/gea/site_map.py +0 -0
  327. {gea_program-0.49.0 → gea_program-0.51.0}/gea/sla_report.py +0 -0
  328. {gea_program-0.49.0 → gea_program-0.51.0}/gea/slip.py +0 -0
  329. {gea_program-0.49.0 → gea_program-0.51.0}/gea/soak.py +0 -0
  330. {gea_program-0.49.0 → gea_program-0.51.0}/gea/sra.py +0 -0
  331. {gea_program-0.49.0 → gea_program-0.51.0}/gea/store_forward.py +0 -0
  332. {gea_program-0.49.0 → gea_program-0.51.0}/gea/strata_join.py +0 -0
  333. {gea_program-0.49.0 → gea_program-0.51.0}/gea/structure.py +0 -0
  334. {gea_program-0.49.0 → gea_program-0.51.0}/gea/supervisor.py +0 -0
  335. {gea_program-0.49.0 → gea_program-0.51.0}/gea/survey_cmd.py +0 -0
  336. {gea_program-0.49.0 → gea_program-0.51.0}/gea/survey_view.py +0 -0
  337. {gea_program-0.49.0 → gea_program-0.51.0}/gea/telemetry.py +0 -0
  338. {gea_program-0.49.0 → gea_program-0.51.0}/gea/tool_catalog.py +0 -0
  339. {gea_program-0.49.0 → gea_program-0.51.0}/gea/tool_library.py +0 -0
  340. {gea_program-0.49.0 → gea_program-0.51.0}/gea/tool_taxonomy.py +0 -0
  341. {gea_program-0.49.0 → gea_program-0.51.0}/gea/transient.py +0 -0
  342. {gea_program-0.49.0 → gea_program-0.51.0}/gea/vibration.py +0 -0
  343. {gea_program-0.49.0 → gea_program-0.51.0}/gea/well_assembler.py +0 -0
  344. {gea_program-0.49.0 → gea_program-0.51.0}/gea/well_report.py +0 -0
  345. {gea_program-0.49.0 → gea_program-0.51.0}/gea/well_test_validation.py +0 -0
  346. {gea_program-0.49.0 → gea_program-0.51.0}/gea/wits0.py +0 -0
  347. {gea_program-0.49.0 → gea_program-0.51.0}/gea/witsml.py +0 -0
  348. {gea_program-0.49.0 → gea_program-0.51.0}/gea/workspace.py +0 -0
  349. {gea_program-0.49.0 → gea_program-0.51.0}/gea/xlsx_read.py +0 -0
  350. {gea_program-0.49.0 → gea_program-0.51.0}/gea_program.egg-info/dependency_links.txt +0 -0
  351. {gea_program-0.49.0 → gea_program-0.51.0}/gea_program.egg-info/entry_points.txt +0 -0
  352. {gea_program-0.49.0 → gea_program-0.51.0}/gea_program.egg-info/requires.txt +0 -0
  353. {gea_program-0.49.0 → gea_program-0.51.0}/gea_program.egg-info/top_level.txt +0 -0
  354. {gea_program-0.49.0 → gea_program-0.51.0}/setup.cfg +0 -0
  355. {gea_program-0.49.0 → gea_program-0.51.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.49.0
3
+ Version: 0.51.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
@@ -648,6 +648,35 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
648
648
  itself; `gea help seedlink`. A TexNet station is served by EarthScope at
649
649
  `rtserve.iris.washington.edu:18000`, network `TX`.
650
650
 
651
+ ### Frac hits
652
+
653
+ What each fracturing stage did to the pressure in the wells around it. A
654
+ treatment well's stage table (from the frac company's post-job report, CSV
655
+ or Excel) is read against every well with a pressure gauge in its record:
656
+ the pressure's departure from its own trend while the stage pumps and after
657
+ it stops, the first response and the fluid pumped by then, and the type -
658
+ no response, poroelastic (the rock squeezed, falling at the stop), mixed
659
+ (a hydraulic connection, holding or rising after it) or a frac hit (the
660
+ stage's fluid reaching the well). With surveys, the distance from each
661
+ stage to the monitored well; with an earthquake catalogue, the earthquakes
662
+ during each stage. A frac hit is an alert. The **Frac hits** tab,
663
+ `gea frac-hits`, `gea help frac-hits`.
664
+
665
+ ### Plan vs actual and the survey tools
666
+
667
+ Each well against its directional plan: at every survey station, how far
668
+ it is from the plan - high or low, right or left, in the plan's own frame -
669
+ against the survey's own uncertainty in that direction; the bit projected
670
+ below the last survey; the one arc back to the plan, with its dogleg
671
+ severity and toolface. Each well's survey program names the tool that
672
+ surveyed each run, weighed by the ISCWSA MWD Rev 5.11 model (checked
673
+ against all 144 rows of the ISCWSA's own Rev 5 example) or one of 21 OWSG
674
+ tool-code models on its weighting functions - MWD and EMS with the standard,
675
+ high- or low-resolution geomagnetic model or in-field referencing. Wells not
676
+ yet drilled are checked for collision along their plans, a well being
677
+ drilled along its survey and then its plan, and the Collision tab draws the
678
+ travelling cylinder. The **Plan vs actual** tab, `gea plan`, `gea help plan`.
679
+
651
680
  ### Well collision checks
652
681
 
653
682
  Every well scanned against every other: at each point of one well, the
@@ -609,6 +609,35 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
609
609
  itself; `gea help seedlink`. A TexNet station is served by EarthScope at
610
610
  `rtserve.iris.washington.edu:18000`, network `TX`.
611
611
 
612
+ ### Frac hits
613
+
614
+ What each fracturing stage did to the pressure in the wells around it. A
615
+ treatment well's stage table (from the frac company's post-job report, CSV
616
+ or Excel) is read against every well with a pressure gauge in its record:
617
+ the pressure's departure from its own trend while the stage pumps and after
618
+ it stops, the first response and the fluid pumped by then, and the type -
619
+ no response, poroelastic (the rock squeezed, falling at the stop), mixed
620
+ (a hydraulic connection, holding or rising after it) or a frac hit (the
621
+ stage's fluid reaching the well). With surveys, the distance from each
622
+ stage to the monitored well; with an earthquake catalogue, the earthquakes
623
+ during each stage. A frac hit is an alert. The **Frac hits** tab,
624
+ `gea frac-hits`, `gea help frac-hits`.
625
+
626
+ ### Plan vs actual and the survey tools
627
+
628
+ Each well against its directional plan: at every survey station, how far
629
+ it is from the plan - high or low, right or left, in the plan's own frame -
630
+ against the survey's own uncertainty in that direction; the bit projected
631
+ below the last survey; the one arc back to the plan, with its dogleg
632
+ severity and toolface. Each well's survey program names the tool that
633
+ surveyed each run, weighed by the ISCWSA MWD Rev 5.11 model (checked
634
+ against all 144 rows of the ISCWSA's own Rev 5 example) or one of 21 OWSG
635
+ tool-code models on its weighting functions - MWD and EMS with the standard,
636
+ high- or low-resolution geomagnetic model or in-field referencing. Wells not
637
+ yet drilled are checked for collision along their plans, a well being
638
+ drilled along its survey and then its plan, and the Collision tab draws the
639
+ travelling cylinder. The **Plan vs actual** tab, `gea plan`, `gea help plan`.
640
+
612
641
  ### Well collision checks
613
642
 
614
643
  Every well scanned against every other: at each point of one well, the
@@ -123,7 +123,7 @@ from .profile_catalog import (
123
123
  read_pangaea_txt,
124
124
  )
125
125
 
126
- __version__ = "0.49.0"
126
+ __version__ = "0.51.0"
127
127
  __all__ = [
128
128
  "aging_rate", "rate_psi_yr", "accuracy_psi",
129
129
  "Sensor", "SimulatorConfig", "DownholeEngine",
@@ -604,6 +604,40 @@ def main(argv=None) -> int:
604
604
  p_co.add_argument("--actor", type=str, default="cli")
605
605
  p_co.add_argument("--json", action="store_true")
606
606
 
607
+ p_pl = sub.add_parser("plan", help="a well against its plan: the distance high/low and right/left at each survey, the bit projected, the arc back to the plan; the survey program's tool models")
608
+ p_pl.add_argument("--workspace", type=str, default=None)
609
+ p_pl.add_argument("--well", type=str, default=None)
610
+ p_pl.add_argument("--attach", type=str, default=None, help="attach FILE as the well's plan (CSV, Excel or WITSML)")
611
+ p_pl.add_argument("--azimuth-reference", type=str, default=None, help="with --attach: true, grid or magnetic")
612
+ p_pl.add_argument("--md-unit", type=str, default="ft", help="with --attach: ft or m")
613
+ p_pl.add_argument("--grid", type=str, default=None, help="with a grid azimuth reference: the grid (e.g. UTM14N)")
614
+ p_pl.add_argument("--declination", type=str, default=None, help="with a magnetic azimuth reference: the declination used")
615
+ p_pl.add_argument("--remove", action="store_true", help="take the well's plan off it")
616
+ p_pl.add_argument("--program", type=str, default=None, help="the survey program: 'MWD+SRGM' or '0-1500:MWD+SRGM, 1500-:MWD+IFR1' (metres)")
617
+ p_pl.add_argument("--bit-offset", type=str, default=None, help="survey sensor to bit, m")
618
+ p_pl.add_argument("--lookahead", type=str, default=None, help="how far ahead the arc back rejoins the plan, m")
619
+ p_pl.add_argument("--source", type=str, default="", help="where the plan or the program came from")
620
+ p_pl.add_argument("--models", action="store_true", help="list the tool models")
621
+ p_pl.add_argument("--write", action="store_true", help="write the well's report")
622
+ p_pl.add_argument("--actor", type=str, default="cli")
623
+ p_pl.add_argument("--json", action="store_true")
624
+
625
+ p_fh = sub.add_parser("frac-hits", help="what each fracturing stage did to the pressure in the wells around it: none, poroelastic, mixed or a frac hit, the first response and the volume pumped by then")
626
+ p_fh.add_argument("--workspace", type=str, required=True)
627
+ p_fh.add_argument("--well", type=str, default=None, help="the treatment well (with --stages or --remove) or the monitored well (with --channel)")
628
+ p_fh.add_argument("--stages", type=str, default=None, help="attach FILE as the well's stage table (CSV or Excel)")
629
+ p_fh.add_argument("--depth-unit", type=str, default="ft")
630
+ p_fh.add_argument("--utc-offset", type=str, default=None, help="the stage clock's hours from UTC (for the earthquake count)")
631
+ p_fh.add_argument("--remove", action="store_true", help="take the well's stage table off it")
632
+ p_fh.add_argument("--channel", type=str, default=None, help="with --well: the monitored pressure channel ('' for the first in psi)")
633
+ p_fh.add_argument("--hit-psi", type=str, default=None, help="a frac hit from this many psi")
634
+ p_fh.add_argument("--min-psi", type=str, default=None, help="the smallest response, psi")
635
+ p_fh.add_argument("--k-sigma", type=str, default=None, help="the response threshold in multiples of the trend's noise")
636
+ p_fh.add_argument("--source", type=str, default="", help="where the stage table or the rule came from")
637
+ p_fh.add_argument("--write", action="store_true", help="write the report")
638
+ p_fh.add_argument("--actor", type=str, default="cli")
639
+ p_fh.add_argument("--json", action="store_true")
640
+
607
641
  p_rt = sub.add_parser("rig-time", help="what the rig did each second of the drilling record - drilling, connections, trips, the slips - and the time lost against the pad's own best")
608
642
  p_rt.add_argument("--workspace", type=str, required=True)
609
643
  p_rt.add_argument("--well", type=str, default=None, help="with --write: one well's report (without it, the pad's)")
@@ -2422,6 +2456,86 @@ def main(argv=None) -> int:
2422
2456
  raise SystemExit(f"collision: {e.args[0] if e.args else e}")
2423
2457
  print(_json.dumps({k: v for k, v in r.items()}, default=str) if a.json else _CO.text(r))
2424
2458
  return 0
2459
+ elif a.cmd == "frac-hits":
2460
+ import json as _json
2461
+ from . import frac_hits as _FH
2462
+ from .cli import _safe_stdout
2463
+ from .workspace import Workspace, WorkspaceError
2464
+ _safe_stdout()
2465
+ try:
2466
+ ws = Workspace(a.workspace)
2467
+ if a.stages or a.remove or a.channel is not None:
2468
+ if not a.well:
2469
+ raise ValueError("--well is needed")
2470
+ if a.stages:
2471
+ with open(a.stages, "rb") as f_:
2472
+ r_ = _FH.attach_stages(ws, a.well, os.path.basename(a.stages), f_.read(), a.actor, a.source, a.depth_unit, a.utc_offset)
2473
+ print(f"stage table attached to {a.well}: {r_['stages']} stages, {r_['first'][:16]} to {r_['last'][:16]}")
2474
+ return 0
2475
+ if a.remove:
2476
+ _FH.remove_stages(ws, a.well, a.actor)
2477
+ print(f"stage table removed from {a.well}")
2478
+ return 0
2479
+ if a.channel is not None or a.hit_psi is not None or a.min_psi is not None or a.k_sigma is not None:
2480
+ s_ = _FH.set_settings(ws, a.actor, a.source, (a.well, a.channel) if a.channel is not None else None,
2481
+ hit_psi=a.hit_psi, min_psi=a.min_psi, k_sigma=a.k_sigma)
2482
+ print(f"rule: frac hit from {s_['hit_psi']:g} psi, threshold {s_['k_sigma']:g} x noise and at least {s_['min_psi']:g} psi; monitors: "
2483
+ + (", ".join(f"{k} {v['channel']}" for k, v in s_['monitors'].items()) or "the first pressure channel of each well"))
2484
+ return 0
2485
+ if a.write:
2486
+ r_ = _FH.write_report(ws, __version__, a.actor)
2487
+ print(f"wrote {r_['report_id']}: {r_['paths']['html']}")
2488
+ if r_['paths'].get('pdf'):
2489
+ print(f" printable: {r_['paths']['pdf']}")
2490
+ return 0
2491
+ r = _FH.page(ws)
2492
+ except (KeyError, ValueError, OSError, WorkspaceError) as e:
2493
+ raise SystemExit(f"frac-hits: {e.args[0] if e.args else e}")
2494
+ print(_json.dumps(r, default=str) if a.json else _FH.text(r))
2495
+ return 0
2496
+ elif a.cmd == "plan":
2497
+ import json as _json
2498
+ from . import wellplan as _PL
2499
+ from . import wellpos as _WP
2500
+ from .cli import _safe_stdout
2501
+ from .workspace import Workspace, WorkspaceError
2502
+ _safe_stdout()
2503
+ try:
2504
+ if a.models:
2505
+ for m_ in _WP.model_list():
2506
+ print(f"{m_['name']:<18} {m_['id']:<14} {m_['terms']:>2} terms {m_['family']:<10} {m_['long_name']}" + (" (default)" if m_['default'] else ""))
2507
+ return 0
2508
+ if not a.workspace:
2509
+ raise ValueError("--workspace is needed")
2510
+ ws = Workspace(a.workspace)
2511
+ if (a.attach or a.remove or a.program or a.bit_offset is not None or a.lookahead is not None or a.write) and not a.well:
2512
+ raise ValueError("--well is needed")
2513
+ if a.attach:
2514
+ with open(a.attach, "rb") as f_:
2515
+ r_ = _PL.attach(ws, a.well, os.path.basename(a.attach), f_.read(), a.actor, a.azimuth_reference or "", a.md_unit, a.grid,
2516
+ float(a.declination) if a.declination else None, a.source)
2517
+ print(f"plan attached to {a.well}: {r_['stations']} stations, {r_['md_range_m'][0]:,.1f} to {r_['md_range_m'][1]:,.1f} m MD ({r_['azimuth_reference']} north)")
2518
+ return 0
2519
+ if a.remove:
2520
+ _PL.remove(ws, a.well, a.actor)
2521
+ print(f"plan removed from {a.well}")
2522
+ return 0
2523
+ if a.program or a.bit_offset is not None or a.lookahead is not None:
2524
+ s_ = _PL.set_well(ws, a.actor, a.well, _PL.parse_program(a.program) if a.program else None, a.bit_offset, a.lookahead, a.source)
2525
+ print(f"{a.well}: " + ", ".join(f"{p_['model']} to {p_['to_md_m']:,.0f} m" if p_['to_md_m'] is not None else f"{p_['model']} to TD" for p_ in s_['program'])
2526
+ + f"; the bit {s_['bit_offset_m']:g} m below the survey sensor; back to the plan {s_['lookahead_m']:g} m ahead")
2527
+ return 0
2528
+ if a.write:
2529
+ r_ = _PL.write_report(ws, __version__, a.well, a.actor)
2530
+ print(f"wrote {r_['report_id']}: {r_['paths']['html']}")
2531
+ if r_['paths'].get('pdf'):
2532
+ print(f" printable: {r_['paths']['pdf']}")
2533
+ return 0
2534
+ r = _PL.page(ws, a.well)
2535
+ except (KeyError, ValueError, OSError, WorkspaceError) as e:
2536
+ raise SystemExit(f"plan: {e.args[0] if e.args else e}")
2537
+ print(_json.dumps(r, default=str) if a.json else _PL.text(r))
2538
+ return 0
2425
2539
  elif a.cmd == "rig-time":
2426
2540
  import json as _json
2427
2541
  from . import rig_state as _RS