gea-program 0.89.0__tar.gz → 0.91.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 (448) hide show
  1. {gea_program-0.89.0 → gea_program-0.91.0}/PKG-INFO +101 -4
  2. {gea_program-0.89.0 → gea_program-0.91.0}/README.md +100 -3
  3. {gea_program-0.89.0 → gea_program-0.91.0}/gea/__init__.py +1 -1
  4. {gea_program-0.89.0 → gea_program-0.91.0}/gea/__main__.py +122 -0
  5. {gea_program-0.89.0 → gea_program-0.91.0}/gea/acceptance_tests.py +482 -7
  6. gea_program-0.91.0/gea/benchmark.py +272 -0
  7. {gea_program-0.89.0 → gea_program-0.91.0}/gea/dysfunction.py +27 -9
  8. {gea_program-0.89.0 → gea_program-0.91.0}/gea/edr.py +73 -6
  9. gea_program-0.91.0/gea/frac_treatment.py +1224 -0
  10. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/IT_SECURITY.md +5 -1
  11. gea_program-0.91.0/gea/help/benchmark.md +13 -0
  12. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/driller.md +1 -1
  13. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/dysfunction.md +1 -1
  14. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/edr.md +3 -1
  15. gea_program-0.91.0/gea/help/frac-treatment.md +13 -0
  16. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/install.md +2 -2
  17. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/mcp.md +1 -1
  18. gea_program-0.91.0/gea/help/public-data.md +17 -0
  19. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/reader.md +1 -1
  20. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/recorder.md +1 -1
  21. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/roadmap.md +1 -1
  22. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/01-install.md +2 -2
  23. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/13-drilling-pages.md +10 -8
  24. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/14-production-pages.md +12 -11
  25. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/19-dossier-reader.md +1 -1
  26. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/22-updates.md +1 -1
  27. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/23-vpn.md +1 -1
  28. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/25-install-recorder.md +2 -2
  29. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/29-driller-rig.md +1 -1
  30. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial.md +2 -2
  31. {gea_program-0.89.0 → gea_program-0.91.0}/gea/helplib.py +4 -1
  32. {gea_program-0.89.0 → gea_program-0.91.0}/gea/mcp_server.py +21 -0
  33. gea_program-0.91.0/gea/public_pad.py +761 -0
  34. {gea_program-0.89.0 → gea_program-0.91.0}/gea/rig_state.py +5 -2
  35. {gea_program-0.89.0 → gea_program-0.91.0}/gea/roadmap.py +26 -7
  36. {gea_program-0.89.0 → gea_program-0.91.0}/gea/service.py +45 -0
  37. {gea_program-0.89.0 → gea_program-0.91.0}/gea/web/app.html +184 -1
  38. {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/PKG-INFO +101 -4
  39. {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/SOURCES.txt +6 -0
  40. {gea_program-0.89.0 → gea_program-0.91.0}/pyproject.toml +1 -1
  41. {gea_program-0.89.0 → gea_program-0.91.0}/LICENSE +0 -0
  42. {gea_program-0.89.0 → gea_program-0.91.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  43. {gea_program-0.89.0 → gea_program-0.91.0}/gea/accuracy_statement.py +0 -0
  44. {gea_program-0.89.0 → gea_program-0.91.0}/gea/alarm_engine.py +0 -0
  45. {gea_program-0.89.0 → gea_program-0.91.0}/gea/alerts.py +0 -0
  46. {gea_program-0.89.0 → gea_program-0.91.0}/gea/backup.py +0 -0
  47. {gea_program-0.89.0 → gea_program-0.91.0}/gea/bench.py +0 -0
  48. {gea_program-0.89.0 → gea_program-0.91.0}/gea/bit_seismic.py +0 -0
  49. {gea_program-0.89.0 → gea_program-0.91.0}/gea/blind_harness.py +0 -0
  50. {gea_program-0.89.0 → gea_program-0.91.0}/gea/calibration.py +0 -0
  51. {gea_program-0.89.0 → gea_program-0.91.0}/gea/casing_design.py +0 -0
  52. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  53. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  54. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  55. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  56. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  57. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  58. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  59. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  60. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  61. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  62. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  63. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  64. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  65. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  66. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  67. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  68. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  69. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  70. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  71. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  72. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  73. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  74. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  75. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  76. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  77. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  78. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  79. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  80. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  81. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  82. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  83. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  84. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  85. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  86. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  87. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  88. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  89. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  90. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  91. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  92. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  93. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  94. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  95. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  96. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  97. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  98. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  99. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  100. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  101. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  102. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  103. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  104. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  105. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  106. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  107. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  108. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  109. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  110. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  111. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  112. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  113. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  114. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  115. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  116. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  117. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  118. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  119. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/med_160_sapropels.txt +0 -0
  120. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  121. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  122. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  123. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  124. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  125. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  126. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  127. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  128. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  129. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  130. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  131. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  132. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  133. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  134. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  135. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  136. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  137. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  138. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  139. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  140. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  141. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  142. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  143. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  144. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  145. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  146. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  147. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  148. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  149. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  150. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  151. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  152. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  153. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  154. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  155. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  156. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog_map.py +0 -0
  157. {gea_program-0.89.0 → gea_program-0.91.0}/gea/catalog_register.py +0 -0
  158. {gea_program-0.89.0 → gea_program-0.91.0}/gea/certificates.py +0 -0
  159. {gea_program-0.89.0 → gea_program-0.91.0}/gea/cli.py +0 -0
  160. {gea_program-0.89.0 → gea_program-0.91.0}/gea/client_reports.py +0 -0
  161. {gea_program-0.89.0 → gea_program-0.91.0}/gea/collision.py +0 -0
  162. {gea_program-0.89.0 → gea_program-0.91.0}/gea/config_versioning.py +0 -0
  163. {gea_program-0.89.0 → gea_program-0.91.0}/gea/conformance.py +0 -0
  164. {gea_program-0.89.0 → gea_program-0.91.0}/gea/control_room.py +0 -0
  165. {gea_program-0.89.0 → gea_program-0.91.0}/gea/correlation.py +0 -0
  166. {gea_program-0.89.0 → gea_program-0.91.0}/gea/dashboard.py +0 -0
  167. {gea_program-0.89.0 → gea_program-0.91.0}/gea/declarations.py +0 -0
  168. {gea_program-0.89.0 → gea_program-0.91.0}/gea/decline.py +0 -0
  169. {gea_program-0.89.0 → gea_program-0.91.0}/gea/deviation.py +0 -0
  170. {gea_program-0.89.0 → gea_program-0.91.0}/gea/dlis.py +0 -0
  171. {gea_program-0.89.0 → gea_program-0.91.0}/gea/dnp3.py +0 -0
  172. {gea_program-0.89.0 → gea_program-0.91.0}/gea/doctor.py +0 -0
  173. {gea_program-0.89.0 → gea_program-0.91.0}/gea/dossier.py +0 -0
  174. {gea_program-0.89.0 → gea_program-0.91.0}/gea/dossier_verify.py +0 -0
  175. {gea_program-0.89.0 → gea_program-0.91.0}/gea/downhole_engine.py +0 -0
  176. {gea_program-0.89.0 → gea_program-0.91.0}/gea/drift_monitor.py +0 -0
  177. {gea_program-0.89.0 → gea_program-0.91.0}/gea/drill_string.py +0 -0
  178. {gea_program-0.89.0 → gea_program-0.91.0}/gea/driller_link.py +0 -0
  179. {gea_program-0.89.0 → gea_program-0.91.0}/gea/earth_model.py +0 -0
  180. {gea_program-0.89.0 → gea_program-0.91.0}/gea/economics.py +0 -0
  181. {gea_program-0.89.0 → gea_program-0.91.0}/gea/ed25519.py +0 -0
  182. {gea_program-0.89.0 → gea_program-0.91.0}/gea/elevation.py +0 -0
  183. {gea_program-0.89.0 → gea_program-0.91.0}/gea/etp.py +0 -0
  184. {gea_program-0.89.0 → gea_program-0.91.0}/gea/etp12_schemas.json +0 -0
  185. {gea_program-0.89.0 → gea_program-0.91.0}/gea/example_register_map.json +0 -0
  186. {gea_program-0.89.0 → gea_program-0.91.0}/gea/fat_sat.py +0 -0
  187. {gea_program-0.89.0 → gea_program-0.91.0}/gea/field_pull.py +0 -0
  188. {gea_program-0.89.0 → gea_program-0.91.0}/gea/files.py +0 -0
  189. {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/README.md +0 -0
  190. {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
  191. {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
  192. {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
  193. {gea_program-0.89.0 → gea_program-0.91.0}/gea/fixtures/ne_110m_coastline.json +0 -0
  194. {gea_program-0.89.0 → gea_program-0.91.0}/gea/fluid.py +0 -0
  195. {gea_program-0.89.0 → gea_program-0.91.0}/gea/follower.py +0 -0
  196. {gea_program-0.89.0 → gea_program-0.91.0}/gea/forward_model.py +0 -0
  197. {gea_program-0.89.0 → gea_program-0.91.0}/gea/frac_hits.py +0 -0
  198. {gea_program-0.89.0 → gea_program-0.91.0}/gea/friction_priors.py +0 -0
  199. {gea_program-0.89.0 → gea_program-0.91.0}/gea/front.py +0 -0
  200. {gea_program-0.89.0 → gea_program-0.91.0}/gea/gamma.py +0 -0
  201. {gea_program-0.89.0 → gea_program-0.91.0}/gea/gauge_aging.py +0 -0
  202. {gea_program-0.89.0 → gea_program-0.91.0}/gea/gauge_specs.py +0 -0
  203. {gea_program-0.89.0 → gea_program-0.91.0}/gea/geodesy.py +0 -0
  204. {gea_program-0.89.0 → gea_program-0.91.0}/gea/geomag.py +0 -0
  205. {gea_program-0.89.0 → gea_program-0.91.0}/gea/gravity_reference.py +0 -0
  206. {gea_program-0.89.0 → gea_program-0.91.0}/gea/hartip.py +0 -0
  207. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/TESTER_GUIDE.md +0 -0
  208. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/alarms.md +0 -0
  209. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/alerts.md +0 -0
  210. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/audit-update.md +0 -0
  211. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/backup.md +0 -0
  212. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/bit-image.md +0 -0
  213. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/calibration.md +0 -0
  214. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/casing.md +0 -0
  215. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/catalog.md +0 -0
  216. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/charts.md +0 -0
  217. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/collision.md +0 -0
  218. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/company-sign-in.md +0 -0
  219. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/conformance.md +0 -0
  220. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/control-room.md +0 -0
  221. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/data-in.md +0 -0
  222. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/declare.md +0 -0
  223. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/decline.md +0 -0
  224. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/dlis.md +0 -0
  225. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/doctor.md +0 -0
  226. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/dossier.md +0 -0
  227. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/drift.md +0 -0
  228. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/drillstring.md +0 -0
  229. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/economics.md +0 -0
  230. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/etp.md +0 -0
  231. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/field-ports.md +0 -0
  232. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/files.md +0 -0
  233. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/fluid.md +0 -0
  234. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/frac-hits.md +0 -0
  235. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/front.md +0 -0
  236. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/historian.md +0 -0
  237. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/https.md +0 -0
  238. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/hydraulics.md +0 -0
  239. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/instruments.md +0 -0
  240. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/interval.md +0 -0
  241. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/invoice-check.md +0 -0
  242. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/map.md +0 -0
  243. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/month-end.md +0 -0
  244. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/notifications.md +0 -0
  245. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/opseis.md +0 -0
  246. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/osdu.md +0 -0
  247. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/pad-summary.md +0 -0
  248. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/patches.md +0 -0
  249. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/penetrator.md +0 -0
  250. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/plan.md +0 -0
  251. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/plume.md +0 -0
  252. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/pore-pressure.md +0 -0
  253. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/ppdm.md +0 -0
  254. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/quakeml.md +0 -0
  255. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/quality.md +0 -0
  256. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/records.md +0 -0
  257. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/report-history.md +0 -0
  258. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/rig-time.md +0 -0
  259. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/rocks.md +0 -0
  260. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/seedlink.md +0 -0
  261. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/seismic.md +0 -0
  262. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/setup.md +0 -0
  263. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/simulation.md +0 -0
  264. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/site.md +0 -0
  265. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/sites.md +0 -0
  266. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/slip.md +0 -0
  267. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/soak.md +0 -0
  268. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/sra.md +0 -0
  269. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/start.md +0 -0
  270. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/structure.md +0 -0
  271. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tools.md +0 -0
  272. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/torque-drag.md +0 -0
  273. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/transients.md +0 -0
  274. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/02-sign-in.md +0 -0
  275. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/03-site.md +0 -0
  276. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/04-add-well.md +0 -0
  277. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/05-records.md +0 -0
  278. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/06-well-page.md +0 -0
  279. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/07-declare.md +0 -0
  280. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/08-patches.md +0 -0
  281. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/09-alarms.md +0 -0
  282. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/10-control-room.md +0 -0
  283. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/11-summary-month.md +0 -0
  284. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/12-where-the-well-is.md +0 -0
  285. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/15-seismic.md +0 -0
  286. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/16-seismicity.md +0 -0
  287. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/17-recorder-office.md +0 -0
  288. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/18-reports.md +0 -0
  289. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/20-admin.md +0 -0
  290. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/21-upkeep.md +0 -0
  291. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/24-the-box.md +0 -0
  292. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/26-monitor.md +0 -0
  293. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/27-mirror-vpn.md +0 -0
  294. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/tutorial/28-driller-office.md +0 -0
  295. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/upkeep.md +0 -0
  296. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/vibration.md +0 -0
  297. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/vpn.md +0 -0
  298. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/well-report.md +0 -0
  299. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/well-tests.md +0 -0
  300. {gea_program-0.89.0 → gea_program-0.91.0}/gea/help/well3d.md +0 -0
  301. {gea_program-0.89.0 → gea_program-0.91.0}/gea/housekeeping.py +0 -0
  302. {gea_program-0.89.0 → gea_program-0.91.0}/gea/hydraulics.py +0 -0
  303. {gea_program-0.89.0 → gea_program-0.91.0}/gea/icon.py +0 -0
  304. {gea_program-0.89.0 → gea_program-0.91.0}/gea/interval.py +0 -0
  305. {gea_program-0.89.0 → gea_program-0.91.0}/gea/inverse_engine.py +0 -0
  306. {gea_program-0.89.0 → gea_program-0.91.0}/gea/invoice_check.py +0 -0
  307. {gea_program-0.89.0 → gea_program-0.91.0}/gea/jobs.py +0 -0
  308. {gea_program-0.89.0 → gea_program-0.91.0}/gea/launcher.py +0 -0
  309. {gea_program-0.89.0 → gea_program-0.91.0}/gea/live_ports.py +0 -0
  310. {gea_program-0.89.0 → gea_program-0.91.0}/gea/loadtest.py +0 -0
  311. {gea_program-0.89.0 → gea_program-0.91.0}/gea/matplotlib_demo.py +0 -0
  312. {gea_program-0.89.0 → gea_program-0.91.0}/gea/modbus.py +0 -0
  313. {gea_program-0.89.0 → gea_program-0.91.0}/gea/modbus_rtu.py +0 -0
  314. {gea_program-0.89.0 → gea_program-0.91.0}/gea/model_card.py +0 -0
  315. {gea_program-0.89.0 → gea_program-0.91.0}/gea/month_end.py +0 -0
  316. {gea_program-0.89.0 → gea_program-0.91.0}/gea/mqtt_port.py +0 -0
  317. {gea_program-0.89.0 → gea_program-0.91.0}/gea/notify.py +0 -0
  318. {gea_program-0.89.0 → gea_program-0.91.0}/gea/oidc.py +0 -0
  319. {gea_program-0.89.0 → gea_program-0.91.0}/gea/oidc_mock.py +0 -0
  320. {gea_program-0.89.0 → gea_program-0.91.0}/gea/op_seismicity.py +0 -0
  321. {gea_program-0.89.0 → gea_program-0.91.0}/gea/opcua_port.py +0 -0
  322. {gea_program-0.89.0 → gea_program-0.91.0}/gea/operator_app.py +0 -0
  323. {gea_program-0.89.0 → gea_program-0.91.0}/gea/osdu.py +0 -0
  324. {gea_program-0.89.0 → gea_program-0.91.0}/gea/pad_summary.py +0 -0
  325. {gea_program-0.89.0 → gea_program-0.91.0}/gea/patches.py +0 -0
  326. {gea_program-0.89.0 → gea_program-0.91.0}/gea/pdf_report.py +0 -0
  327. {gea_program-0.89.0 → gea_program-0.91.0}/gea/penetrator.py +0 -0
  328. {gea_program-0.89.0 → gea_program-0.91.0}/gea/permits.py +0 -0
  329. {gea_program-0.89.0 → gea_program-0.91.0}/gea/piwebapi.py +0 -0
  330. {gea_program-0.89.0 → gea_program-0.91.0}/gea/plume.py +0 -0
  331. {gea_program-0.89.0 → gea_program-0.91.0}/gea/pore_pressure.py +0 -0
  332. {gea_program-0.89.0 → gea_program-0.91.0}/gea/ports.py +0 -0
  333. {gea_program-0.89.0 → gea_program-0.91.0}/gea/ppdm.py +0 -0
  334. {gea_program-0.89.0 → gea_program-0.91.0}/gea/profile_catalog.py +0 -0
  335. {gea_program-0.89.0 → gea_program-0.91.0}/gea/project.py +0 -0
  336. {gea_program-0.89.0 → gea_program-0.91.0}/gea/qt6_downhole_app.py +0 -0
  337. {gea_program-0.89.0 → gea_program-0.91.0}/gea/quakeml.py +0 -0
  338. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reader.py +0 -0
  339. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reader_app.py +0 -0
  340. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reconciler.py +0 -0
  341. {gea_program-0.89.0 → gea_program-0.91.0}/gea/recorder_link.py +0 -0
  342. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
  343. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
  344. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/WMM2025.COF +0 -0
  345. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
  346. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/eia_prices.provenance.json +0 -0
  347. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
  348. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/iscwsa_rev4_example.json +0 -0
  349. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/iscwsa_rev5_example.json +0 -0
  350. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/l0701_sonic_gr.las.gz +0 -0
  351. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/l0701_sonic_gr.provenance.json +0 -0
  352. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/libmseed_steim.provenance.json +0 -0
  353. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
  354. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
  355. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
  356. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/mahoning_example.json +0 -0
  357. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/mud_motor_specs.json +0 -0
  358. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/owsg_tool_models.json +0 -0
  359. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/penetrator_ratings.json +0 -0
  360. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/seismicity_protocols.json +0 -0
  361. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/tool_sources.json +0 -0
  362. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/us_outline.json +0 -0
  363. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/us_outline.provenance.json +0 -0
  364. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_3d.provenance.json +0 -0
  365. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
  366. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
  367. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
  368. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_surfaces.json.gz +0 -0
  369. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
  370. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
  371. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
  372. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
  373. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
  374. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
  375. {gea_program-0.89.0 → gea_program-0.91.0}/gea/reference/volve_well_picks.csv.gz +0 -0
  376. {gea_program-0.89.0 → gea_program-0.91.0}/gea/report_history.py +0 -0
  377. {gea_program-0.89.0 → gea_program-0.91.0}/gea/rock_inventory.py +0 -0
  378. {gea_program-0.89.0 → gea_program-0.91.0}/gea/sample_record.py +0 -0
  379. {gea_program-0.89.0 → gea_program-0.91.0}/gea/sample_well_profile.csv +0 -0
  380. {gea_program-0.89.0 → gea_program-0.91.0}/gea/sbom.py +0 -0
  381. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seedlink.py +0 -0
  382. {gea_program-0.89.0 → gea_program-0.91.0}/gea/segy.py +0 -0
  383. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic.py +0 -0
  384. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_array.py +0 -0
  385. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_assoc.py +0 -0
  386. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_detect.py +0 -0
  387. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_film.py +0 -0
  388. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_harmonic.py +0 -0
  389. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_qc.py +0 -0
  390. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_response.py +0 -0
  391. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_signature.py +0 -0
  392. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_track.py +0 -0
  393. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_uncertainty.py +0 -0
  394. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_unlisted.py +0 -0
  395. {gea_program-0.89.0 → gea_program-0.91.0}/gea/seismic_watch.py +0 -0
  396. {gea_program-0.89.0 → gea_program-0.91.0}/gea/sensor_swap.py +0 -0
  397. {gea_program-0.89.0 → gea_program-0.91.0}/gea/series_cache.py +0 -0
  398. {gea_program-0.89.0 → gea_program-0.91.0}/gea/service_life.py +0 -0
  399. {gea_program-0.89.0 → gea_program-0.91.0}/gea/setup_checklist.py +0 -0
  400. {gea_program-0.89.0 → gea_program-0.91.0}/gea/shapefile.py +0 -0
  401. {gea_program-0.89.0 → gea_program-0.91.0}/gea/shell.py +0 -0
  402. {gea_program-0.89.0 → gea_program-0.91.0}/gea/shut_in.py +0 -0
  403. {gea_program-0.89.0 → gea_program-0.91.0}/gea/simulation.py +0 -0
  404. {gea_program-0.89.0 → gea_program-0.91.0}/gea/site_map.py +0 -0
  405. {gea_program-0.89.0 → gea_program-0.91.0}/gea/sla_report.py +0 -0
  406. {gea_program-0.89.0 → gea_program-0.91.0}/gea/slip.py +0 -0
  407. {gea_program-0.89.0 → gea_program-0.91.0}/gea/soak.py +0 -0
  408. {gea_program-0.89.0 → gea_program-0.91.0}/gea/sra.py +0 -0
  409. {gea_program-0.89.0 → gea_program-0.91.0}/gea/store_forward.py +0 -0
  410. {gea_program-0.89.0 → gea_program-0.91.0}/gea/strata_join.py +0 -0
  411. {gea_program-0.89.0 → gea_program-0.91.0}/gea/structure.py +0 -0
  412. {gea_program-0.89.0 → gea_program-0.91.0}/gea/supervisor.py +0 -0
  413. {gea_program-0.89.0 → gea_program-0.91.0}/gea/survey_cmd.py +0 -0
  414. {gea_program-0.89.0 → gea_program-0.91.0}/gea/survey_view.py +0 -0
  415. {gea_program-0.89.0 → gea_program-0.91.0}/gea/telemetry.py +0 -0
  416. {gea_program-0.89.0 → gea_program-0.91.0}/gea/timestamp.py +0 -0
  417. {gea_program-0.89.0 → gea_program-0.91.0}/gea/tls.py +0 -0
  418. {gea_program-0.89.0 → gea_program-0.91.0}/gea/tool_catalog.py +0 -0
  419. {gea_program-0.89.0 → gea_program-0.91.0}/gea/tool_library.py +0 -0
  420. {gea_program-0.89.0 → gea_program-0.91.0}/gea/tool_taxonomy.py +0 -0
  421. {gea_program-0.89.0 → gea_program-0.91.0}/gea/torque_drag.py +0 -0
  422. {gea_program-0.89.0 → gea_program-0.91.0}/gea/transient.py +0 -0
  423. {gea_program-0.89.0 → gea_program-0.91.0}/gea/tray.py +0 -0
  424. {gea_program-0.89.0 → gea_program-0.91.0}/gea/tutorial.py +0 -0
  425. {gea_program-0.89.0 → gea_program-0.91.0}/gea/updates.py +0 -0
  426. {gea_program-0.89.0 → gea_program-0.91.0}/gea/vibration.py +0 -0
  427. {gea_program-0.89.0 → gea_program-0.91.0}/gea/vpn.py +0 -0
  428. {gea_program-0.89.0 → gea_program-0.91.0}/gea/web/reader.html +0 -0
  429. {gea_program-0.89.0 → gea_program-0.91.0}/gea/well3d.py +0 -0
  430. {gea_program-0.89.0 → gea_program-0.91.0}/gea/well_assembler.py +0 -0
  431. {gea_program-0.89.0 → gea_program-0.91.0}/gea/well_records.py +0 -0
  432. {gea_program-0.89.0 → gea_program-0.91.0}/gea/well_report.py +0 -0
  433. {gea_program-0.89.0 → gea_program-0.91.0}/gea/well_test_validation.py +0 -0
  434. {gea_program-0.89.0 → gea_program-0.91.0}/gea/wellplan.py +0 -0
  435. {gea_program-0.89.0 → gea_program-0.91.0}/gea/wellpos.py +0 -0
  436. {gea_program-0.89.0 → gea_program-0.91.0}/gea/winident.py +0 -0
  437. {gea_program-0.89.0 → gea_program-0.91.0}/gea/wits0.py +0 -0
  438. {gea_program-0.89.0 → gea_program-0.91.0}/gea/witsml.py +0 -0
  439. {gea_program-0.89.0 → gea_program-0.91.0}/gea/workspace.py +0 -0
  440. {gea_program-0.89.0 → gea_program-0.91.0}/gea/workspaces.py +0 -0
  441. {gea_program-0.89.0 → gea_program-0.91.0}/gea/x25519.py +0 -0
  442. {gea_program-0.89.0 → gea_program-0.91.0}/gea/xlsx_read.py +0 -0
  443. {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/dependency_links.txt +0 -0
  444. {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/entry_points.txt +0 -0
  445. {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/requires.txt +0 -0
  446. {gea_program-0.89.0 → gea_program-0.91.0}/gea_program.egg-info/top_level.txt +0 -0
  447. {gea_program-0.89.0 → gea_program-0.91.0}/setup.cfg +0 -0
  448. {gea_program-0.89.0 → gea_program-0.91.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.89.0
3
+ Version: 0.91.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
@@ -847,7 +847,7 @@ unsigned, the key hand-overs - and shows the reports as they were signed. A
847
847
  reader made from the workspace knows the site's key fingerprints, so it
848
848
  says whether a dossier is the site's; it allows no network request, and it
849
849
  leaves the trusted time-stamp to `verify_dossier.py`. For a client who wants
850
- it installed, every release also carries `GEA-Reader-Setup-0.89.0.exe`: GEA
850
+ it installed, every release also carries `GEA-Reader-Setup-0.91.0.exe`: GEA
851
851
  Reader as a Windows program of its own - its own icon and taskbar button,
852
852
  Check with GEA Reader on a dossier's right-click menu, fingerprints the client
853
853
  saves kept on that computer, nothing of GEA-Program. `gea help reader`.
@@ -934,6 +934,26 @@ the window. The Dutch offshore well L07-01 (NLOG open data) is the worked
934
934
  example. The **Pore pressure** tab, `gea pore-pressure`,
935
935
  `gea help pore-pressure`.
936
936
 
937
+ ### Frac treatment
938
+
939
+ Each fracturing stage from its own pumping record - the treating pressure,
940
+ the slurry rate and the proppant concentration, second by second, as the
941
+ frac service company gave them (a spreadsheet with its stacked header, a
942
+ frac van's data-acquisition export, or a plain CSV). With nothing fitted to
943
+ a model of the fracture, the page reads what was pumped beside the record's
944
+ own totalisers; the ISIP - a straight line fitted to the pressure after the
945
+ ringing has died down and read back to the moment the rate reached zero,
946
+ over three windows, with the spread between them as its range; the friction
947
+ at the last rate held, and where the rate was stepped down its two parts,
948
+ one with the square of the rate (the pipe and the perforations) and one
949
+ with its root (the path just outside the wellbore); the pressure at 5, 10
950
+ and 15 minutes and against Nolte's G, with a closure candidate offered only
951
+ where the record supports one; and a step-rate test where there was one.
952
+ With the depth of the perforations declared, the bottomhole ISIP and its
953
+ gradient. It hands the Frac hits tab each stage's times. The **Frac
954
+ treatment** tab, `gea frac-treatment`, `gea help frac-treatment`; an
955
+ assistant reads it as the `frac_treatment` tool.
956
+
937
957
  ### Frac hits
938
958
 
939
959
  What each fracturing stage did to the pressure in the wells around it. A
@@ -1073,6 +1093,83 @@ eras of the protocol are spoken: the stateless revision 2026-07-28 and the
1073
1093
  `initialize` handshake of 2025-11-25 and earlier. The **Assistant access**
1074
1094
  tab (one button adds it to Claude Desktop), `gea mcp`, `gea help mcp`.
1075
1095
 
1096
+ ### Benchmark
1097
+
1098
+ The wells of a pad against one another, and each against the best the pad
1099
+ has done. Every well with a drilling record is measured the same way from
1100
+ its own record - the footage, the days from its first stand to its last,
1101
+ feet per day, the rate on bottom, rotary and sliding, the median connection
1102
+ weight to weight, the trip speeds - and ranked on each count. Then each
1103
+ well is set against the pad's best: the well it would have been had every
1104
+ stretch of hole been drilled at the rate of whichever well was fastest
1105
+ through that stretch (300 ft or more of it), and every connection made in
1106
+ the pad's best quarter. The gap is hours the pad has already shown can be
1107
+ saved, on some well in that stretch - not a forecast, and not a cause: the
1108
+ bit, the motor, the mud and the hole size are not in the record. The
1109
+ **Benchmark** tab, `gea benchmark`, `gea help benchmark`; an assistant
1110
+ reads it as the `benchmark` tool.
1111
+
1112
+ ### Public data: a real pad
1113
+
1114
+ A pad anyone may check. The Utah FORGE project - the U.S. Department of
1115
+ Energy's geothermal field laboratory near Milford, Utah - publishes the
1116
+ rig recorders of five wells drilled through the same basin fill and
1117
+ granite between 2017 and 2023, under Creative Commons Attribution 4.0.
1118
+ `gea public-pad` turns those files into a site of its own, so the rig
1119
+ time, the roadmap, the drilling alerts and the benchmark run on real
1120
+ records before any client's. The program does not contain the files and
1121
+ does not fetch them: the site downloads them in a browser from the
1122
+ Geothermal Data Repository, names the folder, and the program checks each
1123
+ file against the size and the SHA-256 it had when this release was checked
1124
+ with it, converts the three layouts that are not the recorder's own
1125
+ export, attaches each well, and keeps on the record what was done to
1126
+ each - 16A(78)-32's bit depth is RECONSTRUCTED from the block and the
1127
+ slips and is marked so on every page. Every page and report of that site
1128
+ ends with the credit the licence asks for.
1129
+
1130
+ What this release made of them, on the five files as published:
1131
+
1132
+ | Well | Drilled, ft | Days | ft/day | On bottom, ft/h | Median connection, min |
1133
+ |---|---|---|---|---|---|
1134
+ | 58-32 (2017) | 6,288 | 43.5 | 145 | 15.9 | 14.4 |
1135
+ | 16A(78)-32 (2020) | 11,035 | 67.8 | 163 | 34.4 | 11.3 |
1136
+ | 56-32 (2021) | 9,232 | 19.0 | 487 | 46.6 | 7.5 |
1137
+ | 78B-32 (2021) | 9,372 | 29.1 | 322 | 84.7 | 7.7 |
1138
+ | 16B(78)-32 (2023) | 10,490 | 52.4 | 200 | 45.7 | 10.2 |
1139
+
1140
+ Against the pad's best the five wells spent 812 of their 1,256 on-bottom
1141
+ hours beyond it. The roadmap's own check on them is split - running nearer
1142
+ the window was the faster half on two wells and the slower on two - which
1143
+ is the page saying, of wells drilled six years apart in three hole sizes,
1144
+ that one well's parameters are not the next well's roadmap. The drilling
1145
+ alerts, replayed, find 27 motor stalls on the three wells whose records
1146
+ can show one, three falls in off-bottom pressure on 78B-32 that no trip followed
1147
+ and one on 58-32 that a trip out of the hole followed within twelve hours.
1148
+
1149
+ The same site takes the published pumping records of the two deviated
1150
+ wells' stimulation - three stages on 16A(78)-32 in April 2022, nine more
1151
+ and four on 16B(78)-32 in April 2024 - when those files are in the folder
1152
+ too, and the Frac treatment tab reads all sixteen: 132,132 bbl of slurry
1153
+ and 2,969,800 lbm of proppant by the records' own rates, fifteen of the
1154
+ sixteen volumes within 0.6 % of the record's own totaliser (the sixteenth
1155
+ 3.6 % under it: that totaliser also counted the lines being primed); an
1156
+ ISIP at every stage, 3,289 to 5,664 psi at the surface; thirteen stages
1157
+ stepped down to the shut-in. The service company's reports are published with the
1158
+ 2022 stages, so the page can be checked against them: for stage 1 the
1159
+ company gives a final ISIP of 4,019 psi and 3,715, 3,582 and 3,501 psi
1160
+ after 5, 10 and 15 minutes, and this page reads 3,985 psi (3,975 to 3,997)
1161
+ and 3,720, 3,585 and 3,486; for stage 2, 3,918 psi and 3,664, 3,565 and
1162
+ 3,506 against 3,859 (3,852 to 3,862) and 3,665, 3,572 and 3,508. The page's
1163
+ ISIP is the lower because it is read back along the decline, not taken at
1164
+ the top of the ringing. No
1165
+ stage's fall-off shows a closure: the records stop a quarter of an hour
1166
+ after the pumps, and the page says so and offers none.
1167
+
1168
+ Data: Utah FORGE, Energy & Geoscience Institute at the University of Utah,
1169
+ funded by the U.S. Department of Energy; Geothermal Data Repository,
1170
+ gdr.openei.org; CC BY 4.0. The **Public data** tab, `gea public-pad`,
1171
+ `gea help public-data`.
1172
+
1076
1173
  ### Plan vs actual and the survey tools
1077
1174
 
1078
1175
  Each well against its directional plan: at every survey station, how far
@@ -1737,7 +1834,7 @@ attaches the zips to the GitHub release of that tag.
1737
1834
 
1738
1835
  ### The Windows installer
1739
1836
 
1740
- Every release also carries `GEA-Program-Setup-0.89.0.exe` (for 0.89.0): the
1837
+ Every release also carries `GEA-Program-Setup-0.91.0.exe` (for 0.91.0): the
1741
1838
  same Windows kit installed like any Windows program, for the signed-in user
1742
1839
  alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
1743
1840
  It asks for the site workspace (an existing one such as `C:\site` is used as
@@ -1756,7 +1853,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
1756
1853
  software deployment:
1757
1854
 
1758
1855
  ```
1759
- GEA-Program-Setup-0.89.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1856
+ GEA-Program-Setup-0.91.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1760
1857
  ```
1761
1858
 
1762
1859
  The setup is built by Inno Setup 6 from `tools/installer.iss` in the same
@@ -808,7 +808,7 @@ unsigned, the key hand-overs - and shows the reports as they were signed. A
808
808
  reader made from the workspace knows the site's key fingerprints, so it
809
809
  says whether a dossier is the site's; it allows no network request, and it
810
810
  leaves the trusted time-stamp to `verify_dossier.py`. For a client who wants
811
- it installed, every release also carries `GEA-Reader-Setup-0.89.0.exe`: GEA
811
+ it installed, every release also carries `GEA-Reader-Setup-0.91.0.exe`: GEA
812
812
  Reader as a Windows program of its own - its own icon and taskbar button,
813
813
  Check with GEA Reader on a dossier's right-click menu, fingerprints the client
814
814
  saves kept on that computer, nothing of GEA-Program. `gea help reader`.
@@ -895,6 +895,26 @@ the window. The Dutch offshore well L07-01 (NLOG open data) is the worked
895
895
  example. The **Pore pressure** tab, `gea pore-pressure`,
896
896
  `gea help pore-pressure`.
897
897
 
898
+ ### Frac treatment
899
+
900
+ Each fracturing stage from its own pumping record - the treating pressure,
901
+ the slurry rate and the proppant concentration, second by second, as the
902
+ frac service company gave them (a spreadsheet with its stacked header, a
903
+ frac van's data-acquisition export, or a plain CSV). With nothing fitted to
904
+ a model of the fracture, the page reads what was pumped beside the record's
905
+ own totalisers; the ISIP - a straight line fitted to the pressure after the
906
+ ringing has died down and read back to the moment the rate reached zero,
907
+ over three windows, with the spread between them as its range; the friction
908
+ at the last rate held, and where the rate was stepped down its two parts,
909
+ one with the square of the rate (the pipe and the perforations) and one
910
+ with its root (the path just outside the wellbore); the pressure at 5, 10
911
+ and 15 minutes and against Nolte's G, with a closure candidate offered only
912
+ where the record supports one; and a step-rate test where there was one.
913
+ With the depth of the perforations declared, the bottomhole ISIP and its
914
+ gradient. It hands the Frac hits tab each stage's times. The **Frac
915
+ treatment** tab, `gea frac-treatment`, `gea help frac-treatment`; an
916
+ assistant reads it as the `frac_treatment` tool.
917
+
898
918
  ### Frac hits
899
919
 
900
920
  What each fracturing stage did to the pressure in the wells around it. A
@@ -1034,6 +1054,83 @@ eras of the protocol are spoken: the stateless revision 2026-07-28 and the
1034
1054
  `initialize` handshake of 2025-11-25 and earlier. The **Assistant access**
1035
1055
  tab (one button adds it to Claude Desktop), `gea mcp`, `gea help mcp`.
1036
1056
 
1057
+ ### Benchmark
1058
+
1059
+ The wells of a pad against one another, and each against the best the pad
1060
+ has done. Every well with a drilling record is measured the same way from
1061
+ its own record - the footage, the days from its first stand to its last,
1062
+ feet per day, the rate on bottom, rotary and sliding, the median connection
1063
+ weight to weight, the trip speeds - and ranked on each count. Then each
1064
+ well is set against the pad's best: the well it would have been had every
1065
+ stretch of hole been drilled at the rate of whichever well was fastest
1066
+ through that stretch (300 ft or more of it), and every connection made in
1067
+ the pad's best quarter. The gap is hours the pad has already shown can be
1068
+ saved, on some well in that stretch - not a forecast, and not a cause: the
1069
+ bit, the motor, the mud and the hole size are not in the record. The
1070
+ **Benchmark** tab, `gea benchmark`, `gea help benchmark`; an assistant
1071
+ reads it as the `benchmark` tool.
1072
+
1073
+ ### Public data: a real pad
1074
+
1075
+ A pad anyone may check. The Utah FORGE project - the U.S. Department of
1076
+ Energy's geothermal field laboratory near Milford, Utah - publishes the
1077
+ rig recorders of five wells drilled through the same basin fill and
1078
+ granite between 2017 and 2023, under Creative Commons Attribution 4.0.
1079
+ `gea public-pad` turns those files into a site of its own, so the rig
1080
+ time, the roadmap, the drilling alerts and the benchmark run on real
1081
+ records before any client's. The program does not contain the files and
1082
+ does not fetch them: the site downloads them in a browser from the
1083
+ Geothermal Data Repository, names the folder, and the program checks each
1084
+ file against the size and the SHA-256 it had when this release was checked
1085
+ with it, converts the three layouts that are not the recorder's own
1086
+ export, attaches each well, and keeps on the record what was done to
1087
+ each - 16A(78)-32's bit depth is RECONSTRUCTED from the block and the
1088
+ slips and is marked so on every page. Every page and report of that site
1089
+ ends with the credit the licence asks for.
1090
+
1091
+ What this release made of them, on the five files as published:
1092
+
1093
+ | Well | Drilled, ft | Days | ft/day | On bottom, ft/h | Median connection, min |
1094
+ |---|---|---|---|---|---|
1095
+ | 58-32 (2017) | 6,288 | 43.5 | 145 | 15.9 | 14.4 |
1096
+ | 16A(78)-32 (2020) | 11,035 | 67.8 | 163 | 34.4 | 11.3 |
1097
+ | 56-32 (2021) | 9,232 | 19.0 | 487 | 46.6 | 7.5 |
1098
+ | 78B-32 (2021) | 9,372 | 29.1 | 322 | 84.7 | 7.7 |
1099
+ | 16B(78)-32 (2023) | 10,490 | 52.4 | 200 | 45.7 | 10.2 |
1100
+
1101
+ Against the pad's best the five wells spent 812 of their 1,256 on-bottom
1102
+ hours beyond it. The roadmap's own check on them is split - running nearer
1103
+ the window was the faster half on two wells and the slower on two - which
1104
+ is the page saying, of wells drilled six years apart in three hole sizes,
1105
+ that one well's parameters are not the next well's roadmap. The drilling
1106
+ alerts, replayed, find 27 motor stalls on the three wells whose records
1107
+ can show one, three falls in off-bottom pressure on 78B-32 that no trip followed
1108
+ and one on 58-32 that a trip out of the hole followed within twelve hours.
1109
+
1110
+ The same site takes the published pumping records of the two deviated
1111
+ wells' stimulation - three stages on 16A(78)-32 in April 2022, nine more
1112
+ and four on 16B(78)-32 in April 2024 - when those files are in the folder
1113
+ too, and the Frac treatment tab reads all sixteen: 132,132 bbl of slurry
1114
+ and 2,969,800 lbm of proppant by the records' own rates, fifteen of the
1115
+ sixteen volumes within 0.6 % of the record's own totaliser (the sixteenth
1116
+ 3.6 % under it: that totaliser also counted the lines being primed); an
1117
+ ISIP at every stage, 3,289 to 5,664 psi at the surface; thirteen stages
1118
+ stepped down to the shut-in. The service company's reports are published with the
1119
+ 2022 stages, so the page can be checked against them: for stage 1 the
1120
+ company gives a final ISIP of 4,019 psi and 3,715, 3,582 and 3,501 psi
1121
+ after 5, 10 and 15 minutes, and this page reads 3,985 psi (3,975 to 3,997)
1122
+ and 3,720, 3,585 and 3,486; for stage 2, 3,918 psi and 3,664, 3,565 and
1123
+ 3,506 against 3,859 (3,852 to 3,862) and 3,665, 3,572 and 3,508. The page's
1124
+ ISIP is the lower because it is read back along the decline, not taken at
1125
+ the top of the ringing. No
1126
+ stage's fall-off shows a closure: the records stop a quarter of an hour
1127
+ after the pumps, and the page says so and offers none.
1128
+
1129
+ Data: Utah FORGE, Energy & Geoscience Institute at the University of Utah,
1130
+ funded by the U.S. Department of Energy; Geothermal Data Repository,
1131
+ gdr.openei.org; CC BY 4.0. The **Public data** tab, `gea public-pad`,
1132
+ `gea help public-data`.
1133
+
1037
1134
  ### Plan vs actual and the survey tools
1038
1135
 
1039
1136
  Each well against its directional plan: at every survey station, how far
@@ -1698,7 +1795,7 @@ attaches the zips to the GitHub release of that tag.
1698
1795
 
1699
1796
  ### The Windows installer
1700
1797
 
1701
- Every release also carries `GEA-Program-Setup-0.89.0.exe` (for 0.89.0): the
1798
+ Every release also carries `GEA-Program-Setup-0.91.0.exe` (for 0.91.0): the
1702
1799
  same Windows kit installed like any Windows program, for the signed-in user
1703
1800
  alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
1704
1801
  It asks for the site workspace (an existing one such as `C:\site` is used as
@@ -1717,7 +1814,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
1717
1814
  software deployment:
1718
1815
 
1719
1816
  ```
1720
- GEA-Program-Setup-0.89.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1817
+ GEA-Program-Setup-0.91.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1721
1818
  ```
1722
1819
 
1723
1820
  The setup is built by Inno Setup 6 from `tools/installer.iss` in the same
@@ -123,7 +123,7 @@ from .profile_catalog import (
123
123
  read_pangaea_txt,
124
124
  )
125
125
 
126
- __version__ = "0.89.0"
126
+ __version__ = "0.91.0"
127
127
  __all__ = [
128
128
  "aging_rate", "rate_psi_yr", "accuracy_psi",
129
129
  "Sensor", "SimulatorConfig", "DownholeEngine",
@@ -677,6 +677,32 @@ def main(argv=None) -> int:
677
677
  p_os.add_argument("--actor", type=str, default="cli")
678
678
  p_os.add_argument("--json", action="store_true")
679
679
 
680
+ p_bm = sub.add_parser("benchmark", help="the wells of a pad against one another: feet per day, on-bottom rate, connections and trips ranked, and each well against the pad's best - every stretch at the rate of the fastest well through it")
681
+ p_bm.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs")
682
+ p_bm.add_argument("--write", action="store_true", help="write reports/benchmark/benchmark.json, .md, .csv and stretches.csv")
683
+ p_bm.add_argument("--actor", type=str, default="cli")
684
+ p_bm.add_argument("--json", action="store_true")
685
+ p_ft = sub.add_parser("frac-treatment", help="each fracturing stage from its own pumping record: what was pumped, the ISIP read back through the ringing with its range, the friction and its two parts from a step-down, the fall-off against G, a step-rate test - nothing fitted to a model of the fracture")
686
+ p_ft.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (stages built with every answer known)")
687
+ p_ft.add_argument("--well", type=str, default=None, help="a well, by its name or id: with --stage, that stage in full")
688
+ p_ft.add_argument("--stage", type=str, default=None, help="the stage (1, 3R, 6A)")
689
+ p_ft.add_argument("--attach", type=str, default=None, help="a stage's treatment record to keep (CSV or Excel: the pressure, the rate and the proppant, second by second); needs --well, --stage and --source")
690
+ p_ft.add_argument("--start", type=str, default=None, help="--attach: the record's first moment, for a file that only has elapsed time (2026-08-03T06:00:00)")
691
+ p_ft.add_argument("--tvd", type=float, default=None, help="declare the true vertical depth of the perforations, ft: for --stage, or every stage of --well; needs --source")
692
+ p_ft.add_argument("--fluid", type=float, default=None, help="with --tvd: the gradient of the fluid in the well at the shut-in, psi/ft (fresh water, 0.433, when not given)")
693
+ p_ft.add_argument("--source", type=str, default="", help="where the record, or the depth, came from")
694
+ p_ft.add_argument("--to-frac-hits", action="store_true", help="give the Frac hits page --well's stage times, read from these records")
695
+ p_ft.add_argument("--write", action="store_true", help="write reports/frac_treatment/frac_treatment.json, .md, stages.csv and a stage table a well")
696
+ p_ft.add_argument("--actor", type=str, default="cli")
697
+ p_ft.add_argument("--json", action="store_true")
698
+ p_pp = sub.add_parser("public-pad", help="a real pad from public data: the Utah FORGE wells' published rig recorders (CC BY 4.0) made into a site of their own - the files to get and where, checked against their sizes and hashes, converted and attached; the program fetches nothing")
699
+ p_pp.add_argument("--folder", type=str, default=None, help="the folder the downloaded files are in; with nothing else, lists each file and whether it is there. Without a folder the self-test runs (stand-ins in each published layout)")
700
+ p_pp.add_argument("--verify", action="store_true", help="hash each file that is there against the SHA-256 this release was checked with")
701
+ p_pp.add_argument("--build", action="store_true", help="make the site at --site from the files in --folder, or add to it the wells it does not have yet")
702
+ p_pp.add_argument("--site", type=str, default=None, help="--build: the folder the site's workspace is made in")
703
+ p_pp.add_argument("--list", action="store_true", help="list the dataset's files, sizes, hashes and where each is published, and exit")
704
+ p_pp.add_argument("--actor", type=str, default="cli")
705
+ p_pp.add_argument("--json", action="store_true")
680
706
  p_mc = sub.add_parser("mcp", help="the site, readable by an assistant: a Model Context Protocol server on standard input and output - local (no port), read-only (every tool reads one of the program's pages, none changes anything), logged; with --workspace alone it serves until its input closes")
681
707
  p_mc.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (both eras of the protocol against a labelled site)")
682
708
  p_mc.add_argument("--allow", type=str, default=None, help="serve only these tools this run, comma-separated (never more than the site offers)")
@@ -3575,6 +3601,102 @@ def main(argv=None) -> int:
3575
3601
  for v in f_["versions"][: (50 if a.family else 3)]:
3576
3602
  print(f" {v['utc']} {v.get('report_id') or ''} reports/{v['dir']}")
3577
3603
  return 0
3604
+ elif a.cmd == "benchmark":
3605
+ import json as _json
3606
+ from . import benchmark as _BM
3607
+ from .cli import _safe_stdout
3608
+ from .workspace import Workspace, WorkspaceError
3609
+ _safe_stdout()
3610
+ if not a.workspace:
3611
+ r = _BM.selftest()
3612
+ print("\n".join(f"{'PASS' if c['pass'] else 'FAIL'} {c['check']}: {c['value']}" for c in r["checks"]) + f"\n{'OK' if r['ok'] else 'FAILED'} - {r['label']}")
3613
+ return 0 if r["ok"] else 1
3614
+ try:
3615
+ ws = Workspace(a.workspace)
3616
+ if a.write:
3617
+ from . import __version__ as _ver90b
3618
+ r = _BM.write_report(ws, _ver90b, a.actor)
3619
+ print(f"written: {', '.join(r['files'])} under {r['folder']}")
3620
+ p = _BM.page(ws)
3621
+ except (_BM.BenchmarkError, WorkspaceError, ValueError, OSError) as e:
3622
+ raise SystemExit(f"benchmark: {e.args[0] if e.args else e}")
3623
+ print(_json.dumps(p, default=str) if a.json else _BM.text(p))
3624
+ return 0
3625
+ elif a.cmd == "frac-treatment":
3626
+ import json as _json
3627
+ from . import frac_treatment as _FT
3628
+ from .cli import _safe_stdout
3629
+ from .workspace import Workspace, WorkspaceError
3630
+ _safe_stdout()
3631
+ if not a.workspace:
3632
+ r = _FT.selftest()
3633
+ print("\n".join(f"{'PASS' if c['pass'] else 'FAIL'} {c['check']}: {c['value']}" for c in r["checks"]) + f"\n{'OK' if r['ok'] else 'FAILED'} - {r['label']}")
3634
+ return 0 if r["ok"] else 1
3635
+ try:
3636
+ ws = Workspace(a.workspace)
3637
+ wid = None
3638
+ if a.well:
3639
+ wid = next((w["id"] for w in ws.wells() if a.well in (w["id"], w.get("display"))), None)
3640
+ if wid is None:
3641
+ raise SystemExit(f"frac-treatment: no well {a.well!r} in this workspace")
3642
+ if a.attach:
3643
+ if not (wid and a.stage):
3644
+ raise SystemExit("frac-treatment: --attach needs --well and --stage")
3645
+ with open(a.attach, "rb") as f_:
3646
+ m_ = _FT.attach(ws, wid, a.stage, a.attach, f_.read(), a.actor, a.source, a.start)
3647
+ print(f"kept: stage {m_['stage']}, {m_['samples']:,} samples from {m_['start'] or 'its first sample'} ({m_['layout']}); read as " + ", ".join(f"{k}: {v}" for k, v in m_["read_as"].items()))
3648
+ if a.tvd is not None:
3649
+ if not wid:
3650
+ raise SystemExit("frac-treatment: --tvd needs --well")
3651
+ d_ = _FT.declare(ws, wid, a.actor, a.source, a.tvd, a.fluid, a.stage)
3652
+ print(f"declared for stage {', '.join(d_['stages'])}: perforations at {d_['tvd_ft']:,.0f} ft TVD, fluid {d_['fluid_psi_ft']:g} psi/ft")
3653
+ if a.to_frac_hits:
3654
+ if not wid:
3655
+ raise SystemExit("frac-treatment: --to-frac-hits needs --well")
3656
+ h_ = _FT.to_frac_hits(ws, wid, a.actor)
3657
+ print(f"the Frac hits page has {h_['stages']} stage(s) for this well, {h_['first'][:16]} to {h_['last'][:16]}")
3658
+ if a.write:
3659
+ from . import __version__ as _ver91
3660
+ r = _FT.write_report(ws, _ver91, a.actor)
3661
+ print(f"written: {', '.join(r['files'])} under {r['folder']}")
3662
+ p = _FT.page(ws, wid, a.stage)
3663
+ except (_FT.TreatmentError, WorkspaceError, KeyError, ValueError, OSError) as e:
3664
+ raise SystemExit(f"frac-treatment: {e.args[0] if e.args else e}")
3665
+ print(_json.dumps(p, default=str) if a.json else _FT.text(p))
3666
+ return 0
3667
+ elif a.cmd == "public-pad":
3668
+ import json as _json
3669
+ from . import public_pad as _PP
3670
+ from .cli import _safe_stdout
3671
+ _safe_stdout()
3672
+ if not a.folder and not a.list:
3673
+ r = _PP.selftest()
3674
+ print("\n".join(f"{'PASS' if c['pass'] else 'FAIL'} {c['check']}: {c['value']}" for c in r["checks"]) + f"\n{'OK' if r['ok'] else 'FAILED'} - {r['label']}")
3675
+ return 0 if r["ok"] else 1
3676
+ try:
3677
+ if a.build:
3678
+ if not a.site:
3679
+ raise SystemExit("public-pad: --build needs --site, the folder the site is made in")
3680
+ last_ = {"t": ""}
3681
+
3682
+ def say_(d_):
3683
+ t_ = f"{d_.get('well', '')} {d_.get('step', '')}".strip()
3684
+ if t_ != last_["t"] and d_.get("step") != "done":
3685
+ last_["t"] = t_
3686
+ print(f" {d_.get('n', '')}/{d_.get('of', '')} {t_}", flush=True)
3687
+ r = _PP.build(a.folder, a.site, a.actor, verify=True, progress=say_)
3688
+ print(f"{r['name']} at {r['path']}: " + (f"added {', '.join(r['added'])}" if r["added"] else "nothing to add") + f"; it has {', '.join(r['wells'])}")
3689
+ if r.get("stages"):
3690
+ print(f" and the pumping record of {len(r['stages'])} stimulation stage(s): {', '.join(r['stages'])}")
3691
+ for e_ in r["record"]["wells"]:
3692
+ for n_ in e_["notes"]:
3693
+ print(f" {e_['well']}: {n_}")
3694
+ return 0
3695
+ s_ = _PP.status(a.folder or "", verify=a.verify)
3696
+ except (_PP.PublicPadError, OSError) as e:
3697
+ raise SystemExit(f"public-pad: {e.args[0] if e.args else e}")
3698
+ print(_json.dumps(s_, default=str) if a.json else _PP.text(s_))
3699
+ return 0
3578
3700
  elif a.cmd == "mcp":
3579
3701
  import json as _json
3580
3702
  from . import mcp_server as _MC