gea-program 0.86.0__tar.gz → 0.88.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 (440) hide show
  1. {gea_program-0.86.0 → gea_program-0.88.0}/PKG-INFO +57 -4
  2. {gea_program-0.86.0 → gea_program-0.88.0}/README.md +56 -3
  3. {gea_program-0.86.0 → gea_program-0.88.0}/gea/__init__.py +1 -1
  4. {gea_program-0.86.0 → gea_program-0.88.0}/gea/__main__.py +121 -1
  5. {gea_program-0.86.0 → gea_program-0.88.0}/gea/acceptance_tests.py +658 -0
  6. {gea_program-0.86.0 → gea_program-0.88.0}/gea/alerts.py +16 -1
  7. gea_program-0.88.0/gea/calibration.py +976 -0
  8. {gea_program-0.86.0 → gea_program-0.88.0}/gea/dossier.py +21 -1
  9. gea_program-0.88.0/gea/dysfunction.py +769 -0
  10. {gea_program-0.86.0 → gea_program-0.88.0}/gea/fluid.py +21 -11
  11. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/alerts.md +1 -1
  12. gea_program-0.88.0/gea/help/calibration.md +13 -0
  13. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/driller.md +1 -1
  14. gea_program-0.88.0/gea/help/dysfunction.md +13 -0
  15. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/fluid.md +1 -1
  16. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/install.md +2 -2
  17. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/reader.md +1 -1
  18. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/recorder.md +1 -1
  19. gea_program-0.88.0/gea/help/roadmap.md +13 -0
  20. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/01-install.md +2 -2
  21. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/13-drilling-pages.md +10 -8
  22. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/14-production-pages.md +6 -5
  23. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/19-dossier-reader.md +1 -1
  24. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/22-updates.md +1 -1
  25. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/23-vpn.md +1 -1
  26. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/25-install-recorder.md +2 -2
  27. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/29-driller-rig.md +1 -1
  28. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial.md +2 -2
  29. {gea_program-0.86.0 → gea_program-0.88.0}/gea/helplib.py +4 -1
  30. {gea_program-0.86.0 → gea_program-0.88.0}/gea/notify.py +3 -1
  31. {gea_program-0.86.0 → gea_program-0.88.0}/gea/rig_state.py +3 -1
  32. gea_program-0.88.0/gea/roadmap.py +678 -0
  33. {gea_program-0.86.0 → gea_program-0.88.0}/gea/series_cache.py +52 -10
  34. {gea_program-0.86.0 → gea_program-0.88.0}/gea/service.py +42 -0
  35. {gea_program-0.86.0 → gea_program-0.88.0}/gea/web/app.html +175 -3
  36. {gea_program-0.86.0 → gea_program-0.88.0}/gea_program.egg-info/PKG-INFO +57 -4
  37. {gea_program-0.86.0 → gea_program-0.88.0}/gea_program.egg-info/SOURCES.txt +6 -0
  38. {gea_program-0.86.0 → gea_program-0.88.0}/pyproject.toml +1 -1
  39. {gea_program-0.86.0 → gea_program-0.88.0}/LICENSE +0 -0
  40. {gea_program-0.86.0 → gea_program-0.88.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  41. {gea_program-0.86.0 → gea_program-0.88.0}/gea/accuracy_statement.py +0 -0
  42. {gea_program-0.86.0 → gea_program-0.88.0}/gea/alarm_engine.py +0 -0
  43. {gea_program-0.86.0 → gea_program-0.88.0}/gea/backup.py +0 -0
  44. {gea_program-0.86.0 → gea_program-0.88.0}/gea/bench.py +0 -0
  45. {gea_program-0.86.0 → gea_program-0.88.0}/gea/bit_seismic.py +0 -0
  46. {gea_program-0.86.0 → gea_program-0.88.0}/gea/blind_harness.py +0 -0
  47. {gea_program-0.86.0 → gea_program-0.88.0}/gea/casing_design.py +0 -0
  48. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  49. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  50. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  51. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  52. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  53. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  54. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  55. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  56. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  57. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  58. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  59. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  60. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  61. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  62. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  63. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  64. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  65. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  66. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  67. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  68. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  69. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  70. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  71. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  72. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  73. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  74. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  75. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  76. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  77. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  78. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  79. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  80. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  81. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  82. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  83. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  84. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  85. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  86. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  87. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  88. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  89. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  90. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  91. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  92. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  93. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  94. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  95. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  96. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  97. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  98. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  99. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  100. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  101. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  102. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  103. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  104. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  105. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  106. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  107. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  108. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  109. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  110. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  111. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  112. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  113. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  114. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  115. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/med_160_sapropels.txt +0 -0
  116. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  117. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  118. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  119. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  120. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  121. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  122. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  123. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  124. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  125. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  126. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  127. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  128. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  129. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  130. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  131. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  132. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  133. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  134. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  135. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  136. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  137. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  138. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  139. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  140. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  141. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  142. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  143. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  144. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  145. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  146. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  147. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  148. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  149. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  150. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  151. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  152. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog_map.py +0 -0
  153. {gea_program-0.86.0 → gea_program-0.88.0}/gea/catalog_register.py +0 -0
  154. {gea_program-0.86.0 → gea_program-0.88.0}/gea/certificates.py +0 -0
  155. {gea_program-0.86.0 → gea_program-0.88.0}/gea/cli.py +0 -0
  156. {gea_program-0.86.0 → gea_program-0.88.0}/gea/client_reports.py +0 -0
  157. {gea_program-0.86.0 → gea_program-0.88.0}/gea/collision.py +0 -0
  158. {gea_program-0.86.0 → gea_program-0.88.0}/gea/config_versioning.py +0 -0
  159. {gea_program-0.86.0 → gea_program-0.88.0}/gea/conformance.py +0 -0
  160. {gea_program-0.86.0 → gea_program-0.88.0}/gea/control_room.py +0 -0
  161. {gea_program-0.86.0 → gea_program-0.88.0}/gea/correlation.py +0 -0
  162. {gea_program-0.86.0 → gea_program-0.88.0}/gea/dashboard.py +0 -0
  163. {gea_program-0.86.0 → gea_program-0.88.0}/gea/declarations.py +0 -0
  164. {gea_program-0.86.0 → gea_program-0.88.0}/gea/decline.py +0 -0
  165. {gea_program-0.86.0 → gea_program-0.88.0}/gea/deviation.py +0 -0
  166. {gea_program-0.86.0 → gea_program-0.88.0}/gea/dlis.py +0 -0
  167. {gea_program-0.86.0 → gea_program-0.88.0}/gea/dnp3.py +0 -0
  168. {gea_program-0.86.0 → gea_program-0.88.0}/gea/doctor.py +0 -0
  169. {gea_program-0.86.0 → gea_program-0.88.0}/gea/dossier_verify.py +0 -0
  170. {gea_program-0.86.0 → gea_program-0.88.0}/gea/downhole_engine.py +0 -0
  171. {gea_program-0.86.0 → gea_program-0.88.0}/gea/drift_monitor.py +0 -0
  172. {gea_program-0.86.0 → gea_program-0.88.0}/gea/drill_string.py +0 -0
  173. {gea_program-0.86.0 → gea_program-0.88.0}/gea/driller_link.py +0 -0
  174. {gea_program-0.86.0 → gea_program-0.88.0}/gea/earth_model.py +0 -0
  175. {gea_program-0.86.0 → gea_program-0.88.0}/gea/economics.py +0 -0
  176. {gea_program-0.86.0 → gea_program-0.88.0}/gea/ed25519.py +0 -0
  177. {gea_program-0.86.0 → gea_program-0.88.0}/gea/edr.py +0 -0
  178. {gea_program-0.86.0 → gea_program-0.88.0}/gea/elevation.py +0 -0
  179. {gea_program-0.86.0 → gea_program-0.88.0}/gea/etp.py +0 -0
  180. {gea_program-0.86.0 → gea_program-0.88.0}/gea/etp12_schemas.json +0 -0
  181. {gea_program-0.86.0 → gea_program-0.88.0}/gea/example_register_map.json +0 -0
  182. {gea_program-0.86.0 → gea_program-0.88.0}/gea/fat_sat.py +0 -0
  183. {gea_program-0.86.0 → gea_program-0.88.0}/gea/field_pull.py +0 -0
  184. {gea_program-0.86.0 → gea_program-0.88.0}/gea/files.py +0 -0
  185. {gea_program-0.86.0 → gea_program-0.88.0}/gea/fixtures/README.md +0 -0
  186. {gea_program-0.86.0 → gea_program-0.88.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
  187. {gea_program-0.86.0 → gea_program-0.88.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
  188. {gea_program-0.86.0 → gea_program-0.88.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
  189. {gea_program-0.86.0 → gea_program-0.88.0}/gea/fixtures/ne_110m_coastline.json +0 -0
  190. {gea_program-0.86.0 → gea_program-0.88.0}/gea/follower.py +0 -0
  191. {gea_program-0.86.0 → gea_program-0.88.0}/gea/forward_model.py +0 -0
  192. {gea_program-0.86.0 → gea_program-0.88.0}/gea/frac_hits.py +0 -0
  193. {gea_program-0.86.0 → gea_program-0.88.0}/gea/friction_priors.py +0 -0
  194. {gea_program-0.86.0 → gea_program-0.88.0}/gea/front.py +0 -0
  195. {gea_program-0.86.0 → gea_program-0.88.0}/gea/gamma.py +0 -0
  196. {gea_program-0.86.0 → gea_program-0.88.0}/gea/gauge_aging.py +0 -0
  197. {gea_program-0.86.0 → gea_program-0.88.0}/gea/gauge_specs.py +0 -0
  198. {gea_program-0.86.0 → gea_program-0.88.0}/gea/geodesy.py +0 -0
  199. {gea_program-0.86.0 → gea_program-0.88.0}/gea/geomag.py +0 -0
  200. {gea_program-0.86.0 → gea_program-0.88.0}/gea/gravity_reference.py +0 -0
  201. {gea_program-0.86.0 → gea_program-0.88.0}/gea/hartip.py +0 -0
  202. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/IT_SECURITY.md +0 -0
  203. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/TESTER_GUIDE.md +0 -0
  204. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/alarms.md +0 -0
  205. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/audit-update.md +0 -0
  206. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/backup.md +0 -0
  207. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/bit-image.md +0 -0
  208. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/casing.md +0 -0
  209. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/catalog.md +0 -0
  210. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/charts.md +0 -0
  211. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/collision.md +0 -0
  212. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/company-sign-in.md +0 -0
  213. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/conformance.md +0 -0
  214. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/control-room.md +0 -0
  215. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/data-in.md +0 -0
  216. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/declare.md +0 -0
  217. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/decline.md +0 -0
  218. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/dlis.md +0 -0
  219. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/doctor.md +0 -0
  220. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/dossier.md +0 -0
  221. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/drift.md +0 -0
  222. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/drillstring.md +0 -0
  223. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/economics.md +0 -0
  224. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/edr.md +0 -0
  225. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/etp.md +0 -0
  226. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/field-ports.md +0 -0
  227. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/files.md +0 -0
  228. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/frac-hits.md +0 -0
  229. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/front.md +0 -0
  230. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/historian.md +0 -0
  231. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/https.md +0 -0
  232. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/hydraulics.md +0 -0
  233. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/instruments.md +0 -0
  234. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/interval.md +0 -0
  235. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/invoice-check.md +0 -0
  236. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/map.md +0 -0
  237. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/month-end.md +0 -0
  238. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/notifications.md +0 -0
  239. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/opseis.md +0 -0
  240. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/osdu.md +0 -0
  241. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/pad-summary.md +0 -0
  242. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/patches.md +0 -0
  243. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/penetrator.md +0 -0
  244. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/plan.md +0 -0
  245. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/plume.md +0 -0
  246. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/pore-pressure.md +0 -0
  247. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/ppdm.md +0 -0
  248. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/quakeml.md +0 -0
  249. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/quality.md +0 -0
  250. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/records.md +0 -0
  251. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/report-history.md +0 -0
  252. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/rig-time.md +0 -0
  253. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/rocks.md +0 -0
  254. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/seedlink.md +0 -0
  255. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/seismic.md +0 -0
  256. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/setup.md +0 -0
  257. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/simulation.md +0 -0
  258. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/site.md +0 -0
  259. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/sites.md +0 -0
  260. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/slip.md +0 -0
  261. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/soak.md +0 -0
  262. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/sra.md +0 -0
  263. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/start.md +0 -0
  264. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/structure.md +0 -0
  265. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tools.md +0 -0
  266. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/torque-drag.md +0 -0
  267. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/transients.md +0 -0
  268. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/02-sign-in.md +0 -0
  269. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/03-site.md +0 -0
  270. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/04-add-well.md +0 -0
  271. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/05-records.md +0 -0
  272. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/06-well-page.md +0 -0
  273. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/07-declare.md +0 -0
  274. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/08-patches.md +0 -0
  275. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/09-alarms.md +0 -0
  276. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/10-control-room.md +0 -0
  277. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/11-summary-month.md +0 -0
  278. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/12-where-the-well-is.md +0 -0
  279. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/15-seismic.md +0 -0
  280. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/16-seismicity.md +0 -0
  281. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/17-recorder-office.md +0 -0
  282. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/18-reports.md +0 -0
  283. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/20-admin.md +0 -0
  284. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/21-upkeep.md +0 -0
  285. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/24-the-box.md +0 -0
  286. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/26-monitor.md +0 -0
  287. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/27-mirror-vpn.md +0 -0
  288. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/tutorial/28-driller-office.md +0 -0
  289. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/upkeep.md +0 -0
  290. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/vibration.md +0 -0
  291. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/vpn.md +0 -0
  292. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/well-report.md +0 -0
  293. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/well-tests.md +0 -0
  294. {gea_program-0.86.0 → gea_program-0.88.0}/gea/help/well3d.md +0 -0
  295. {gea_program-0.86.0 → gea_program-0.88.0}/gea/housekeeping.py +0 -0
  296. {gea_program-0.86.0 → gea_program-0.88.0}/gea/hydraulics.py +0 -0
  297. {gea_program-0.86.0 → gea_program-0.88.0}/gea/icon.py +0 -0
  298. {gea_program-0.86.0 → gea_program-0.88.0}/gea/interval.py +0 -0
  299. {gea_program-0.86.0 → gea_program-0.88.0}/gea/inverse_engine.py +0 -0
  300. {gea_program-0.86.0 → gea_program-0.88.0}/gea/invoice_check.py +0 -0
  301. {gea_program-0.86.0 → gea_program-0.88.0}/gea/jobs.py +0 -0
  302. {gea_program-0.86.0 → gea_program-0.88.0}/gea/launcher.py +0 -0
  303. {gea_program-0.86.0 → gea_program-0.88.0}/gea/live_ports.py +0 -0
  304. {gea_program-0.86.0 → gea_program-0.88.0}/gea/loadtest.py +0 -0
  305. {gea_program-0.86.0 → gea_program-0.88.0}/gea/matplotlib_demo.py +0 -0
  306. {gea_program-0.86.0 → gea_program-0.88.0}/gea/modbus.py +0 -0
  307. {gea_program-0.86.0 → gea_program-0.88.0}/gea/modbus_rtu.py +0 -0
  308. {gea_program-0.86.0 → gea_program-0.88.0}/gea/model_card.py +0 -0
  309. {gea_program-0.86.0 → gea_program-0.88.0}/gea/month_end.py +0 -0
  310. {gea_program-0.86.0 → gea_program-0.88.0}/gea/mqtt_port.py +0 -0
  311. {gea_program-0.86.0 → gea_program-0.88.0}/gea/oidc.py +0 -0
  312. {gea_program-0.86.0 → gea_program-0.88.0}/gea/oidc_mock.py +0 -0
  313. {gea_program-0.86.0 → gea_program-0.88.0}/gea/op_seismicity.py +0 -0
  314. {gea_program-0.86.0 → gea_program-0.88.0}/gea/opcua_port.py +0 -0
  315. {gea_program-0.86.0 → gea_program-0.88.0}/gea/operator_app.py +0 -0
  316. {gea_program-0.86.0 → gea_program-0.88.0}/gea/osdu.py +0 -0
  317. {gea_program-0.86.0 → gea_program-0.88.0}/gea/pad_summary.py +0 -0
  318. {gea_program-0.86.0 → gea_program-0.88.0}/gea/patches.py +0 -0
  319. {gea_program-0.86.0 → gea_program-0.88.0}/gea/pdf_report.py +0 -0
  320. {gea_program-0.86.0 → gea_program-0.88.0}/gea/penetrator.py +0 -0
  321. {gea_program-0.86.0 → gea_program-0.88.0}/gea/permits.py +0 -0
  322. {gea_program-0.86.0 → gea_program-0.88.0}/gea/piwebapi.py +0 -0
  323. {gea_program-0.86.0 → gea_program-0.88.0}/gea/plume.py +0 -0
  324. {gea_program-0.86.0 → gea_program-0.88.0}/gea/pore_pressure.py +0 -0
  325. {gea_program-0.86.0 → gea_program-0.88.0}/gea/ports.py +0 -0
  326. {gea_program-0.86.0 → gea_program-0.88.0}/gea/ppdm.py +0 -0
  327. {gea_program-0.86.0 → gea_program-0.88.0}/gea/profile_catalog.py +0 -0
  328. {gea_program-0.86.0 → gea_program-0.88.0}/gea/project.py +0 -0
  329. {gea_program-0.86.0 → gea_program-0.88.0}/gea/qt6_downhole_app.py +0 -0
  330. {gea_program-0.86.0 → gea_program-0.88.0}/gea/quakeml.py +0 -0
  331. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reader.py +0 -0
  332. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reader_app.py +0 -0
  333. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reconciler.py +0 -0
  334. {gea_program-0.86.0 → gea_program-0.88.0}/gea/recorder_link.py +0 -0
  335. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
  336. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
  337. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/WMM2025.COF +0 -0
  338. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
  339. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/eia_prices.provenance.json +0 -0
  340. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
  341. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/iscwsa_rev4_example.json +0 -0
  342. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/iscwsa_rev5_example.json +0 -0
  343. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/l0701_sonic_gr.las.gz +0 -0
  344. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/l0701_sonic_gr.provenance.json +0 -0
  345. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/libmseed_steim.provenance.json +0 -0
  346. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
  347. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
  348. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
  349. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/mahoning_example.json +0 -0
  350. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/mud_motor_specs.json +0 -0
  351. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/owsg_tool_models.json +0 -0
  352. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/penetrator_ratings.json +0 -0
  353. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/seismicity_protocols.json +0 -0
  354. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/tool_sources.json +0 -0
  355. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/us_outline.json +0 -0
  356. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/us_outline.provenance.json +0 -0
  357. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_3d.provenance.json +0 -0
  358. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
  359. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
  360. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
  361. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_surfaces.json.gz +0 -0
  362. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
  363. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
  364. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
  365. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
  366. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
  367. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
  368. {gea_program-0.86.0 → gea_program-0.88.0}/gea/reference/volve_well_picks.csv.gz +0 -0
  369. {gea_program-0.86.0 → gea_program-0.88.0}/gea/report_history.py +0 -0
  370. {gea_program-0.86.0 → gea_program-0.88.0}/gea/rock_inventory.py +0 -0
  371. {gea_program-0.86.0 → gea_program-0.88.0}/gea/sample_record.py +0 -0
  372. {gea_program-0.86.0 → gea_program-0.88.0}/gea/sample_well_profile.csv +0 -0
  373. {gea_program-0.86.0 → gea_program-0.88.0}/gea/sbom.py +0 -0
  374. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seedlink.py +0 -0
  375. {gea_program-0.86.0 → gea_program-0.88.0}/gea/segy.py +0 -0
  376. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic.py +0 -0
  377. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_array.py +0 -0
  378. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_assoc.py +0 -0
  379. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_detect.py +0 -0
  380. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_film.py +0 -0
  381. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_harmonic.py +0 -0
  382. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_qc.py +0 -0
  383. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_response.py +0 -0
  384. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_signature.py +0 -0
  385. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_track.py +0 -0
  386. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_uncertainty.py +0 -0
  387. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_unlisted.py +0 -0
  388. {gea_program-0.86.0 → gea_program-0.88.0}/gea/seismic_watch.py +0 -0
  389. {gea_program-0.86.0 → gea_program-0.88.0}/gea/sensor_swap.py +0 -0
  390. {gea_program-0.86.0 → gea_program-0.88.0}/gea/service_life.py +0 -0
  391. {gea_program-0.86.0 → gea_program-0.88.0}/gea/setup_checklist.py +0 -0
  392. {gea_program-0.86.0 → gea_program-0.88.0}/gea/shapefile.py +0 -0
  393. {gea_program-0.86.0 → gea_program-0.88.0}/gea/shell.py +0 -0
  394. {gea_program-0.86.0 → gea_program-0.88.0}/gea/shut_in.py +0 -0
  395. {gea_program-0.86.0 → gea_program-0.88.0}/gea/simulation.py +0 -0
  396. {gea_program-0.86.0 → gea_program-0.88.0}/gea/site_map.py +0 -0
  397. {gea_program-0.86.0 → gea_program-0.88.0}/gea/sla_report.py +0 -0
  398. {gea_program-0.86.0 → gea_program-0.88.0}/gea/slip.py +0 -0
  399. {gea_program-0.86.0 → gea_program-0.88.0}/gea/soak.py +0 -0
  400. {gea_program-0.86.0 → gea_program-0.88.0}/gea/sra.py +0 -0
  401. {gea_program-0.86.0 → gea_program-0.88.0}/gea/store_forward.py +0 -0
  402. {gea_program-0.86.0 → gea_program-0.88.0}/gea/strata_join.py +0 -0
  403. {gea_program-0.86.0 → gea_program-0.88.0}/gea/structure.py +0 -0
  404. {gea_program-0.86.0 → gea_program-0.88.0}/gea/supervisor.py +0 -0
  405. {gea_program-0.86.0 → gea_program-0.88.0}/gea/survey_cmd.py +0 -0
  406. {gea_program-0.86.0 → gea_program-0.88.0}/gea/survey_view.py +0 -0
  407. {gea_program-0.86.0 → gea_program-0.88.0}/gea/telemetry.py +0 -0
  408. {gea_program-0.86.0 → gea_program-0.88.0}/gea/timestamp.py +0 -0
  409. {gea_program-0.86.0 → gea_program-0.88.0}/gea/tls.py +0 -0
  410. {gea_program-0.86.0 → gea_program-0.88.0}/gea/tool_catalog.py +0 -0
  411. {gea_program-0.86.0 → gea_program-0.88.0}/gea/tool_library.py +0 -0
  412. {gea_program-0.86.0 → gea_program-0.88.0}/gea/tool_taxonomy.py +0 -0
  413. {gea_program-0.86.0 → gea_program-0.88.0}/gea/torque_drag.py +0 -0
  414. {gea_program-0.86.0 → gea_program-0.88.0}/gea/transient.py +0 -0
  415. {gea_program-0.86.0 → gea_program-0.88.0}/gea/tray.py +0 -0
  416. {gea_program-0.86.0 → gea_program-0.88.0}/gea/tutorial.py +0 -0
  417. {gea_program-0.86.0 → gea_program-0.88.0}/gea/updates.py +0 -0
  418. {gea_program-0.86.0 → gea_program-0.88.0}/gea/vibration.py +0 -0
  419. {gea_program-0.86.0 → gea_program-0.88.0}/gea/vpn.py +0 -0
  420. {gea_program-0.86.0 → gea_program-0.88.0}/gea/web/reader.html +0 -0
  421. {gea_program-0.86.0 → gea_program-0.88.0}/gea/well3d.py +0 -0
  422. {gea_program-0.86.0 → gea_program-0.88.0}/gea/well_assembler.py +0 -0
  423. {gea_program-0.86.0 → gea_program-0.88.0}/gea/well_records.py +0 -0
  424. {gea_program-0.86.0 → gea_program-0.88.0}/gea/well_report.py +0 -0
  425. {gea_program-0.86.0 → gea_program-0.88.0}/gea/well_test_validation.py +0 -0
  426. {gea_program-0.86.0 → gea_program-0.88.0}/gea/wellplan.py +0 -0
  427. {gea_program-0.86.0 → gea_program-0.88.0}/gea/wellpos.py +0 -0
  428. {gea_program-0.86.0 → gea_program-0.88.0}/gea/winident.py +0 -0
  429. {gea_program-0.86.0 → gea_program-0.88.0}/gea/wits0.py +0 -0
  430. {gea_program-0.86.0 → gea_program-0.88.0}/gea/witsml.py +0 -0
  431. {gea_program-0.86.0 → gea_program-0.88.0}/gea/workspace.py +0 -0
  432. {gea_program-0.86.0 → gea_program-0.88.0}/gea/workspaces.py +0 -0
  433. {gea_program-0.86.0 → gea_program-0.88.0}/gea/x25519.py +0 -0
  434. {gea_program-0.86.0 → gea_program-0.88.0}/gea/xlsx_read.py +0 -0
  435. {gea_program-0.86.0 → gea_program-0.88.0}/gea_program.egg-info/dependency_links.txt +0 -0
  436. {gea_program-0.86.0 → gea_program-0.88.0}/gea_program.egg-info/entry_points.txt +0 -0
  437. {gea_program-0.86.0 → gea_program-0.88.0}/gea_program.egg-info/requires.txt +0 -0
  438. {gea_program-0.86.0 → gea_program-0.88.0}/gea_program.egg-info/top_level.txt +0 -0
  439. {gea_program-0.86.0 → gea_program-0.88.0}/setup.cfg +0 -0
  440. {gea_program-0.86.0 → gea_program-0.88.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.86.0
3
+ Version: 0.88.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.86.0.exe`: GEA
850
+ it installed, every release also carries `GEA-Reader-Setup-0.88.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`.
@@ -1000,6 +1000,59 @@ in plan, in section and, at its depths, in the 3D tab. Every figure a
1000
1000
  SIMULATION, said on every line. The **Fluid front** tab, `gea front`,
1001
1001
  `gea help front`.
1002
1002
 
1003
+ ### Calibration
1004
+
1005
+ The plume and the front, run many times over the numbers nobody knows
1006
+ exactly and ranked against what is measured. Each uncertain number - the
1007
+ permeability, the thickness, the porosity, the compressibility - gets a
1008
+ range, declared with its source or a default spread named as one; each
1009
+ fault layer is open in half the runs and sealing in the other half. Every
1010
+ run is scored against the pressures in the ledger (a gauge in an
1011
+ observation well, an injector's or a producer's own bottomhole pressure,
1012
+ each compared in its shape through time) and the producers' measured TDS;
1013
+ the runs the measurements do not contradict are kept, and when none comes
1014
+ close the page says NO RUN FITS and to look outside the ranges. Every
1015
+ forecast the other pages give as one number - the area of review, each
1016
+ fault's rise and the share of kept runs that take it past the friction
1017
+ line, the front's radius, each producer's share and arrival - is given as
1018
+ a range: what the declarations alone allow beside what the measurements
1019
+ leave. And what to measure next, ranked: a falloff test, a gauge at a
1020
+ neighbour, a water analysis, each with how much it would narrow the area
1021
+ of review and the front. Run by a person, kept with the hash of its inputs,
1022
+ marked stale when they change. Every figure a SIMULATION. The
1023
+ **Calibration** tab, `gea calibrate`, `gea help calibration`.
1024
+
1025
+ ### Drilling roadmap
1026
+
1027
+ What the fastest stands on the pad were drilled with, stretch by stretch.
1028
+ Every well's drilling record is cut into stands of 100 ft; each stand goes
1029
+ into the stretch of hole it was drilled in - 1,000 ft of true vertical
1030
+ depth down to the heel, 1,000 ft along the hole beyond it, named for the
1031
+ mapped formation where the workspace has the tops and the well its
1032
+ elevation. In each stretch the fastest quarter of the stands is found, and
1033
+ the window is what those stands ran: the weight on bit, the rotary speed,
1034
+ the flow, the differential pressure, beside the well that was fastest
1035
+ there and what every other well ran through the same rock. Then the
1036
+ roadmap checks itself: each well is set against the roadmap made from the
1037
+ others, the half of its stands nearer the window against the farther half,
1038
+ stretch by stretch - so the page says whether running nearer the window
1039
+ went with drilling faster, or did not, before anyone drills the next well
1040
+ from it. The **Roadmap** tab, `gea roadmap`, `gea help roadmap`.
1041
+
1042
+ ### Drilling alerts
1043
+
1044
+ Three old driller's rules, written down so each is applied to every stand
1045
+ of every well the same way, and replayed over the whole of each record:
1046
+ the off-bottom pressure falling at a steady flow, connection after
1047
+ connection (a washout - or a pump, the mud or a nozzle; the trip finds
1048
+ which); the differential pressure spiking with the bit stopped (a motor
1049
+ stall); the pick-up and slack-off weight leaving their own trend (the hole
1050
+ getting tight). The page shows every reading, what each rule would have
1051
+ said and when, and what the rig did next - whether a trip out of the hole
1052
+ followed. The thresholds are settings, each changed with its source. On a
1053
+ record still being written an event raises an alert once. The **Drilling
1054
+ alerts** tab, `gea dysfunction`, `gea help dysfunction`.
1055
+
1003
1056
  ### Plan vs actual and the survey tools
1004
1057
 
1005
1058
  Each well against its directional plan: at every survey station, how far
@@ -1664,7 +1717,7 @@ attaches the zips to the GitHub release of that tag.
1664
1717
 
1665
1718
  ### The Windows installer
1666
1719
 
1667
- Every release also carries `GEA-Program-Setup-0.86.0.exe` (for 0.86.0): the
1720
+ Every release also carries `GEA-Program-Setup-0.88.0.exe` (for 0.88.0): the
1668
1721
  same Windows kit installed like any Windows program, for the signed-in user
1669
1722
  alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
1670
1723
  It asks for the site workspace (an existing one such as `C:\site` is used as
@@ -1683,7 +1736,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
1683
1736
  software deployment:
1684
1737
 
1685
1738
  ```
1686
- GEA-Program-Setup-0.86.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1739
+ GEA-Program-Setup-0.88.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1687
1740
  ```
1688
1741
 
1689
1742
  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.86.0.exe`: GEA
811
+ it installed, every release also carries `GEA-Reader-Setup-0.88.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`.
@@ -961,6 +961,59 @@ in plan, in section and, at its depths, in the 3D tab. Every figure a
961
961
  SIMULATION, said on every line. The **Fluid front** tab, `gea front`,
962
962
  `gea help front`.
963
963
 
964
+ ### Calibration
965
+
966
+ The plume and the front, run many times over the numbers nobody knows
967
+ exactly and ranked against what is measured. Each uncertain number - the
968
+ permeability, the thickness, the porosity, the compressibility - gets a
969
+ range, declared with its source or a default spread named as one; each
970
+ fault layer is open in half the runs and sealing in the other half. Every
971
+ run is scored against the pressures in the ledger (a gauge in an
972
+ observation well, an injector's or a producer's own bottomhole pressure,
973
+ each compared in its shape through time) and the producers' measured TDS;
974
+ the runs the measurements do not contradict are kept, and when none comes
975
+ close the page says NO RUN FITS and to look outside the ranges. Every
976
+ forecast the other pages give as one number - the area of review, each
977
+ fault's rise and the share of kept runs that take it past the friction
978
+ line, the front's radius, each producer's share and arrival - is given as
979
+ a range: what the declarations alone allow beside what the measurements
980
+ leave. And what to measure next, ranked: a falloff test, a gauge at a
981
+ neighbour, a water analysis, each with how much it would narrow the area
982
+ of review and the front. Run by a person, kept with the hash of its inputs,
983
+ marked stale when they change. Every figure a SIMULATION. The
984
+ **Calibration** tab, `gea calibrate`, `gea help calibration`.
985
+
986
+ ### Drilling roadmap
987
+
988
+ What the fastest stands on the pad were drilled with, stretch by stretch.
989
+ Every well's drilling record is cut into stands of 100 ft; each stand goes
990
+ into the stretch of hole it was drilled in - 1,000 ft of true vertical
991
+ depth down to the heel, 1,000 ft along the hole beyond it, named for the
992
+ mapped formation where the workspace has the tops and the well its
993
+ elevation. In each stretch the fastest quarter of the stands is found, and
994
+ the window is what those stands ran: the weight on bit, the rotary speed,
995
+ the flow, the differential pressure, beside the well that was fastest
996
+ there and what every other well ran through the same rock. Then the
997
+ roadmap checks itself: each well is set against the roadmap made from the
998
+ others, the half of its stands nearer the window against the farther half,
999
+ stretch by stretch - so the page says whether running nearer the window
1000
+ went with drilling faster, or did not, before anyone drills the next well
1001
+ from it. The **Roadmap** tab, `gea roadmap`, `gea help roadmap`.
1002
+
1003
+ ### Drilling alerts
1004
+
1005
+ Three old driller's rules, written down so each is applied to every stand
1006
+ of every well the same way, and replayed over the whole of each record:
1007
+ the off-bottom pressure falling at a steady flow, connection after
1008
+ connection (a washout - or a pump, the mud or a nozzle; the trip finds
1009
+ which); the differential pressure spiking with the bit stopped (a motor
1010
+ stall); the pick-up and slack-off weight leaving their own trend (the hole
1011
+ getting tight). The page shows every reading, what each rule would have
1012
+ said and when, and what the rig did next - whether a trip out of the hole
1013
+ followed. The thresholds are settings, each changed with its source. On a
1014
+ record still being written an event raises an alert once. The **Drilling
1015
+ alerts** tab, `gea dysfunction`, `gea help dysfunction`.
1016
+
964
1017
  ### Plan vs actual and the survey tools
965
1018
 
966
1019
  Each well against its directional plan: at every survey station, how far
@@ -1625,7 +1678,7 @@ attaches the zips to the GitHub release of that tag.
1625
1678
 
1626
1679
  ### The Windows installer
1627
1680
 
1628
- Every release also carries `GEA-Program-Setup-0.86.0.exe` (for 0.86.0): the
1681
+ Every release also carries `GEA-Program-Setup-0.88.0.exe` (for 0.88.0): the
1629
1682
  same Windows kit installed like any Windows program, for the signed-in user
1630
1683
  alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
1631
1684
  It asks for the site workspace (an existing one such as `C:\site` is used as
@@ -1644,7 +1697,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
1644
1697
  software deployment:
1645
1698
 
1646
1699
  ```
1647
- GEA-Program-Setup-0.86.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1700
+ GEA-Program-Setup-0.88.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1648
1701
  ```
1649
1702
 
1650
1703
  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.86.0"
126
+ __version__ = "0.88.0"
127
127
  __all__ = [
128
128
  "aging_rate", "rate_psi_yr", "accuracy_psi",
129
129
  "Sensor", "SimulatorConfig", "DownholeEngine",
@@ -565,7 +565,7 @@ def main(argv=None) -> int:
565
565
  p_fl.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs on labelled scenes")
566
566
  p_fl.add_argument("--well", type=str, default=None, help="the well a declaration, a report or a removal is for")
567
567
  p_fl.add_argument("--declare", action="store_true", help="declare the well's role, formation or density (with --source)")
568
- p_fl.add_argument("--role", type=str, default=None, choices=("injection", "production"))
568
+ p_fl.add_argument("--role", type=str, default=None, choices=("injection", "production", "observation"), help="--declare: injection, production, or observation (a gauge or a water analysis, no flow)")
569
569
  p_fl.add_argument("--formation", type=str, default=None, help="--declare: the formation the well is completed in; alone with --porosity etc.: the formation to declare")
570
570
  p_fl.add_argument("--density-sg", type=float, default=None, help="--declare: the injected water's specific gravity")
571
571
  p_fl.add_argument("--density-ppg", type=float, default=None, help="--declare: the injected water's density in lb/gal")
@@ -611,6 +611,41 @@ def main(argv=None) -> int:
611
611
  p_ff.add_argument("--write", action="store_true", help="write reports/front/front.json and .md")
612
612
  p_ff.add_argument("--actor", type=str, default="cli")
613
613
  p_ff.add_argument("--json", action="store_true")
614
+ p_cb = sub.add_parser("calibrate", help="the calibration (SIMULATION): the plume and the front run many times over the uncertain numbers - permeability, thickness, porosity, compressibility, each fault open or sealing - ranked against the measured pressures and the producers' water; the ranges that leaves, and which measurement would narrow them most")
615
+ p_cb.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (a formation whose true numbers are not the declared ones, found from its measurements)")
616
+ p_cb.add_argument("--run", action="store_true", help="run the ensemble now and keep the result")
617
+ p_cb.add_argument("--formation", type=str, default=None, help="--run: one formation; --range: the formation the range is for")
618
+ p_cb.add_argument("--runs", type=int, default=None, help="settings: the runs, 8 to 200 (default 48)")
619
+ p_cb.add_argument("--sigma-psi", type=float, default=None, help="settings: the pressure measurements' error, psi (default 25)")
620
+ p_cb.add_argument("--sigma-share", type=float, default=None, help="settings: the error of a share of injected water read from a TDS (default 0.05)")
621
+ p_cb.add_argument("--well-radius-ft", type=float, default=None, help="settings: the wellbore radius for a flowing well's own draw (default 0.354)")
622
+ p_cb.add_argument("--sample-sealing", type=str, default=None, choices=("yes", "no"), help="settings: whether each fault layer is open in half the runs and sealing in the other half (default yes)")
623
+ p_cb.add_argument("--range", dest="range_param", type=str, default=None, choices=("k_md", "thickness_ft", "porosity", "c_t_per_psi"), help="declare an uncertain number's range for --formation: --low, --high, --source (or --clear)")
624
+ p_cb.add_argument("--low", type=float, default=None)
625
+ p_cb.add_argument("--high", type=float, default=None)
626
+ p_cb.add_argument("--clear", action="store_true", help="--range: back to the default spread")
627
+ p_cb.add_argument("--source", type=str, default="", help="where a declared range comes from")
628
+ p_cb.add_argument("--write", action="store_true", help="write reports/calibration/calibration.json and .md from the kept result")
629
+ p_cb.add_argument("--actor", type=str, default="cli")
630
+ p_cb.add_argument("--json", action="store_true")
631
+ p_rm = sub.add_parser("roadmap", help="the drilling roadmap: for every stretch of hole, the weight on bit, rotary speed, flow and differential pressure the fastest quarter of the stands on the pad's wells were drilled with, which well was fastest there, and each well checked against the roadmap made from the others")
632
+ p_rm.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (three labelled wells through rock with a known best weight and speed)")
633
+ p_rm.add_argument("--well", type=str, default=None, help="the well the next stand is given for (default: the well whose record ends last)")
634
+ p_rm.add_argument("--write", action="store_true", help="write reports/roadmap/roadmap.json, .md and .csv")
635
+ p_rm.add_argument("--actor", type=str, default="cli")
636
+ p_rm.add_argument("--json", action="store_true")
637
+ p_dy = sub.add_parser("dysfunction", help="drilling alerts replayed over each well's record: the off-bottom pressure falling at a steady flow (a washout), the differential pressure spiking with the bit stopped (a motor stall), the pick-up weight leaving its own trend (the hole getting tight) - what each rule would have said, when, and whether a trip followed")
638
+ p_dy.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (a labelled record with a washout, three stalls and a tightening hole put in, and a sound one)")
639
+ p_dy.add_argument("--washout-fall", type=float, default=None, help="settings: the fall in off-bottom pressure that flags a reading, as a fraction (default 0.06)")
640
+ p_dy.add_argument("--washout-min-psi", type=float, default=None, help="settings: and the least fall in psi (default 100)")
641
+ p_dy.add_argument("--stall-rise", type=float, default=None, help="settings: the rise in differential pressure over its median that is a stall, as a fraction (default 0.6)")
642
+ p_dy.add_argument("--stall-min-psi", type=float, default=None, help="settings: and the least rise in psi (default 300)")
643
+ p_dy.add_argument("--drag-sigma", type=float, default=None, help="settings: how many scatters off its trend a pick-up or slack-off weight is flagged at (default 3)")
644
+ p_dy.add_argument("--drag-min-klbf", type=float, default=None, help="settings: and the least distance in klbf (default 10)")
645
+ p_dy.add_argument("--source", type=str, default="", help="who set a changed setting and on what grounds")
646
+ p_dy.add_argument("--write", action="store_true", help="write reports/dysfunction/drilling_alerts.json, .md and events.csv")
647
+ p_dy.add_argument("--actor", type=str, default="cli")
648
+ p_dy.add_argument("--json", action="store_true")
614
649
  p_os = sub.add_parser("seismicity", help="operations and seismicity: each well's drilling, completion and disposal windows against the earthquake catalogue around it - the events during and after each, the levels a regulator's protocol would reach, and the rate during operations against the rest of the record; the Mahoning Valley worked example")
615
650
  p_os.add_argument("--workspace", type=str, default=None)
616
651
  p_os.add_argument("--scene", type=str, default=None, choices=("workspace", "mahoning"), help="your wells (the default with --workspace) or the public worked example")
@@ -2776,6 +2811,91 @@ def main(argv=None) -> int:
2776
2811
  raise SystemExit(f"front: {e.args[0] if e.args else e}")
2777
2812
  print(_json.dumps(p, default=str) if a.json else _FF.text(p))
2778
2813
  return 0
2814
+ elif a.cmd == "calibrate":
2815
+ import json as _json
2816
+ from . import calibration as _CB
2817
+ from .cli import _safe_stdout
2818
+ from .workspace import Workspace, WorkspaceError
2819
+ _safe_stdout()
2820
+ if not a.workspace:
2821
+ r = _CB.selftest()
2822
+ print(_json.dumps(r, default=str) if a.json else "\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']} ({r['runs']} runs)")
2823
+ return 0 if r["ok"] else 1
2824
+ try:
2825
+ ws = Workspace(a.workspace)
2826
+ except WorkspaceError as e:
2827
+ raise SystemExit(f"calibrate: {e}")
2828
+ try:
2829
+ if a.range_param:
2830
+ if not a.formation:
2831
+ raise SystemExit("calibrate: --range needs --formation")
2832
+ _CB.set_range(ws, a.actor, a.formation, a.range_param, None if a.clear else a.low, None if a.clear else a.high, a.source)
2833
+ rg_ = _CB.page(ws)["ranges"].get(a.formation, {}).get(a.range_param)
2834
+ print(f"{a.formation} {a.range_param}: " + (f"{rg_['low']:g} to {rg_['high']:g} ({rg_['kind']}: {rg_['source']})" if rg_ else "kept; the formation has no permeability, thickness and porosity declared yet"))
2835
+ return 0
2836
+ if any(v is not None for v in (a.runs, a.sigma_psi, a.sigma_share, a.well_radius_ft, a.sample_sealing)):
2837
+ st_ = _CB.set_settings(ws, a.actor, a.runs, a.sigma_psi, a.sigma_share, (None if a.sample_sealing is None else a.sample_sealing == "yes"), a.well_radius_ft)
2838
+ print("settings: " + ", ".join(f"{k} {v}" for k, v in st_.items() if k in ("runs", "sigma_psi", "sigma_share", "well_radius_ft", "sample_sealing")))
2839
+ if not a.run:
2840
+ return 0
2841
+ if a.run:
2842
+ r = _CB.run(ws, a.actor, a.formation)
2843
+ print(f"run: {r['seconds']} s; " + "; ".join(f"{f['formation']} {f['status']}" + (f" ({f['n_kept']} of {f['n_ok']} kept)" if f.get('n_kept') is not None else "") for f in r["formations"]))
2844
+ if a.write:
2845
+ from . import __version__ as _ver87
2846
+ r = _CB.write_report(ws, _ver87, a.actor)
2847
+ print(f"written: {', '.join(r['files'])} under {r['folder']}")
2848
+ p = _CB.page(ws)
2849
+ except (_CB.CalibrationError, WorkspaceError, ValueError, OSError) as e:
2850
+ raise SystemExit(f"calibrate: {e.args[0] if e.args else e}")
2851
+ print(_json.dumps(p, default=str) if a.json else _CB.text(p))
2852
+ return 0
2853
+ elif a.cmd == "roadmap":
2854
+ import json as _json
2855
+ from . import roadmap as _RM
2856
+ from .cli import _safe_stdout
2857
+ from .workspace import Workspace, WorkspaceError
2858
+ _safe_stdout()
2859
+ if not a.workspace:
2860
+ r = _RM.selftest()
2861
+ print(_json.dumps(r, default=str) if a.json else "\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']}")
2862
+ return 0 if r["ok"] else 1
2863
+ try:
2864
+ ws = Workspace(a.workspace)
2865
+ if a.write:
2866
+ from . import __version__ as _ver88r
2867
+ r = _RM.write_report(ws, _ver88r, a.actor)
2868
+ print(f"written: {', '.join(r['files'])} under {r['folder']}")
2869
+ p = _RM.page(ws, a.well)
2870
+ except (_RM.RoadmapError, WorkspaceError, ValueError, OSError) as e:
2871
+ raise SystemExit(f"roadmap: {e.args[0] if e.args else e}")
2872
+ print(_json.dumps(p, default=str) if a.json else _RM.text(p))
2873
+ return 0
2874
+ elif a.cmd == "dysfunction":
2875
+ import json as _json
2876
+ from . import dysfunction as _DY
2877
+ from .cli import _safe_stdout
2878
+ from .workspace import Workspace, WorkspaceError
2879
+ _safe_stdout()
2880
+ if not a.workspace:
2881
+ r = _DY.selftest()
2882
+ print(_json.dumps(r, default=str) if a.json else "\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']}")
2883
+ return 0 if r["ok"] else 1
2884
+ try:
2885
+ ws = Workspace(a.workspace)
2886
+ kw_ = {"washout_fall": a.washout_fall, "washout_min_psi": a.washout_min_psi, "stall_rise": a.stall_rise, "stall_min_psi": a.stall_min_psi, "drag_sigma": a.drag_sigma, "drag_min_klbf": a.drag_min_klbf}
2887
+ if any(v is not None for v in kw_.values()):
2888
+ st_ = _DY.set_settings(ws, a.actor, a.source, **kw_)
2889
+ print("settings: " + ", ".join(f"{k} {st_[k]:g}" for k in _DY.DEFAULTS))
2890
+ if a.write:
2891
+ from . import __version__ as _ver88d
2892
+ r = _DY.write_report(ws, _ver88d, a.actor)
2893
+ print(f"written: {', '.join(r['files'])} under {r['folder']}")
2894
+ p = _DY.page(ws)
2895
+ except (_DY.DysfunctionError, WorkspaceError, ValueError, OSError) as e:
2896
+ raise SystemExit(f"dysfunction: {e.args[0] if e.args else e}")
2897
+ print(_json.dumps(p, default=str) if a.json else _DY.text(p))
2898
+ return 0
2779
2899
  elif a.cmd == "seismicity":
2780
2900
  import json as _json
2781
2901
  from . import op_seismicity as _OS