gea-program 0.48.0__tar.gz → 0.50.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 (352) hide show
  1. {gea_program-0.48.0 → gea_program-0.50.0}/PKG-INFO +32 -1
  2. {gea_program-0.48.0 → gea_program-0.50.0}/README.md +31 -0
  3. {gea_program-0.48.0 → gea_program-0.50.0}/gea/__init__.py +1 -1
  4. {gea_program-0.48.0 → gea_program-0.50.0}/gea/__main__.py +111 -0
  5. {gea_program-0.48.0 → gea_program-0.50.0}/gea/acceptance_tests.py +434 -0
  6. gea_program-0.50.0/gea/collision.py +392 -0
  7. {gea_program-0.48.0 → gea_program-0.50.0}/gea/dossier.py +22 -3
  8. gea_program-0.50.0/gea/geomag.py +122 -0
  9. gea_program-0.50.0/gea/help/collision.md +19 -0
  10. gea_program-0.50.0/gea/help/plan.md +19 -0
  11. {gea_program-0.48.0 → gea_program-0.50.0}/gea/helplib.py +3 -1
  12. gea_program-0.50.0/gea/reference/WMM2025.COF +93 -0
  13. gea_program-0.50.0/gea/reference/iscwsa_rev4_example.json +1751 -0
  14. gea_program-0.50.0/gea/reference/iscwsa_rev5_example.json +2015 -0
  15. gea_program-0.50.0/gea/reference/owsg_tool_models.json +4611 -0
  16. {gea_program-0.48.0 → gea_program-0.50.0}/gea/service.py +42 -0
  17. {gea_program-0.48.0 → gea_program-0.50.0}/gea/web/app.html +152 -1
  18. {gea_program-0.48.0 → gea_program-0.50.0}/gea/well3d.py +50 -18
  19. gea_program-0.50.0/gea/wellplan.py +388 -0
  20. gea_program-0.50.0/gea/wellpos.py +450 -0
  21. {gea_program-0.48.0 → gea_program-0.50.0}/gea_program.egg-info/PKG-INFO +32 -1
  22. {gea_program-0.48.0 → gea_program-0.50.0}/gea_program.egg-info/SOURCES.txt +10 -0
  23. {gea_program-0.48.0 → gea_program-0.50.0}/pyproject.toml +1 -1
  24. {gea_program-0.48.0 → gea_program-0.50.0}/LICENSE +0 -0
  25. {gea_program-0.48.0 → gea_program-0.50.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  26. {gea_program-0.48.0 → gea_program-0.50.0}/gea/accuracy_statement.py +0 -0
  27. {gea_program-0.48.0 → gea_program-0.50.0}/gea/alarm_engine.py +0 -0
  28. {gea_program-0.48.0 → gea_program-0.50.0}/gea/alerts.py +0 -0
  29. {gea_program-0.48.0 → gea_program-0.50.0}/gea/backup.py +0 -0
  30. {gea_program-0.48.0 → gea_program-0.50.0}/gea/bench.py +0 -0
  31. {gea_program-0.48.0 → gea_program-0.50.0}/gea/blind_harness.py +0 -0
  32. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  33. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  34. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  35. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  36. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  37. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  38. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  39. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  40. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  41. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  42. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  43. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  44. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  45. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  46. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  47. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  48. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  49. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  50. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  51. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  52. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  53. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  54. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  55. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  56. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  57. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  58. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  59. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  60. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  61. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  62. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  63. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  64. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  65. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  66. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  67. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  68. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  69. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  70. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  71. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  72. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  73. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  74. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  75. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  76. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  77. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  78. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  79. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  80. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  81. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  82. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  83. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  84. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  85. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  86. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  87. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  88. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  89. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  90. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  91. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  92. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  93. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  94. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  95. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  96. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  97. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  98. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  99. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/med_160_sapropels.txt +0 -0
  100. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  101. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  102. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  103. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  104. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  105. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  106. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  107. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  108. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  109. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  110. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  111. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  112. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  113. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  114. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  115. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  116. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  117. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  118. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  119. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  120. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  121. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  122. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  123. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  124. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  125. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  126. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  127. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  128. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  129. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  130. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  131. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  132. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  133. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  134. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  135. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  136. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog_map.py +0 -0
  137. {gea_program-0.48.0 → gea_program-0.50.0}/gea/catalog_register.py +0 -0
  138. {gea_program-0.48.0 → gea_program-0.50.0}/gea/certificates.py +0 -0
  139. {gea_program-0.48.0 → gea_program-0.50.0}/gea/cli.py +0 -0
  140. {gea_program-0.48.0 → gea_program-0.50.0}/gea/client_reports.py +0 -0
  141. {gea_program-0.48.0 → gea_program-0.50.0}/gea/config_versioning.py +0 -0
  142. {gea_program-0.48.0 → gea_program-0.50.0}/gea/conformance.py +0 -0
  143. {gea_program-0.48.0 → gea_program-0.50.0}/gea/control_room.py +0 -0
  144. {gea_program-0.48.0 → gea_program-0.50.0}/gea/correlation.py +0 -0
  145. {gea_program-0.48.0 → gea_program-0.50.0}/gea/dashboard.py +0 -0
  146. {gea_program-0.48.0 → gea_program-0.50.0}/gea/declarations.py +0 -0
  147. {gea_program-0.48.0 → gea_program-0.50.0}/gea/deviation.py +0 -0
  148. {gea_program-0.48.0 → gea_program-0.50.0}/gea/dlis.py +0 -0
  149. {gea_program-0.48.0 → gea_program-0.50.0}/gea/dnp3.py +0 -0
  150. {gea_program-0.48.0 → gea_program-0.50.0}/gea/doctor.py +0 -0
  151. {gea_program-0.48.0 → gea_program-0.50.0}/gea/dossier_verify.py +0 -0
  152. {gea_program-0.48.0 → gea_program-0.50.0}/gea/downhole_engine.py +0 -0
  153. {gea_program-0.48.0 → gea_program-0.50.0}/gea/drift_monitor.py +0 -0
  154. {gea_program-0.48.0 → gea_program-0.50.0}/gea/drill_string.py +0 -0
  155. {gea_program-0.48.0 → gea_program-0.50.0}/gea/earth_model.py +0 -0
  156. {gea_program-0.48.0 → gea_program-0.50.0}/gea/economics.py +0 -0
  157. {gea_program-0.48.0 → gea_program-0.50.0}/gea/ed25519.py +0 -0
  158. {gea_program-0.48.0 → gea_program-0.50.0}/gea/edr.py +0 -0
  159. {gea_program-0.48.0 → gea_program-0.50.0}/gea/elevation.py +0 -0
  160. {gea_program-0.48.0 → gea_program-0.50.0}/gea/etp.py +0 -0
  161. {gea_program-0.48.0 → gea_program-0.50.0}/gea/etp12_schemas.json +0 -0
  162. {gea_program-0.48.0 → gea_program-0.50.0}/gea/example_register_map.json +0 -0
  163. {gea_program-0.48.0 → gea_program-0.50.0}/gea/fat_sat.py +0 -0
  164. {gea_program-0.48.0 → gea_program-0.50.0}/gea/files.py +0 -0
  165. {gea_program-0.48.0 → gea_program-0.50.0}/gea/fixtures/README.md +0 -0
  166. {gea_program-0.48.0 → gea_program-0.50.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
  167. {gea_program-0.48.0 → gea_program-0.50.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
  168. {gea_program-0.48.0 → gea_program-0.50.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
  169. {gea_program-0.48.0 → gea_program-0.50.0}/gea/fixtures/ne_110m_coastline.json +0 -0
  170. {gea_program-0.48.0 → gea_program-0.50.0}/gea/follower.py +0 -0
  171. {gea_program-0.48.0 → gea_program-0.50.0}/gea/forward_model.py +0 -0
  172. {gea_program-0.48.0 → gea_program-0.50.0}/gea/friction_priors.py +0 -0
  173. {gea_program-0.48.0 → gea_program-0.50.0}/gea/gamma.py +0 -0
  174. {gea_program-0.48.0 → gea_program-0.50.0}/gea/gauge_aging.py +0 -0
  175. {gea_program-0.48.0 → gea_program-0.50.0}/gea/gauge_specs.py +0 -0
  176. {gea_program-0.48.0 → gea_program-0.50.0}/gea/geodesy.py +0 -0
  177. {gea_program-0.48.0 → gea_program-0.50.0}/gea/gravity_reference.py +0 -0
  178. {gea_program-0.48.0 → gea_program-0.50.0}/gea/hartip.py +0 -0
  179. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/TESTER_GUIDE.md +0 -0
  180. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/alarms.md +0 -0
  181. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/alerts.md +0 -0
  182. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/audit-update.md +0 -0
  183. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/backup.md +0 -0
  184. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/catalog.md +0 -0
  185. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/charts.md +0 -0
  186. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/conformance.md +0 -0
  187. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/control-room.md +0 -0
  188. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/data-in.md +0 -0
  189. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/declare.md +0 -0
  190. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/dlis.md +0 -0
  191. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/doctor.md +0 -0
  192. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/dossier.md +0 -0
  193. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/drift.md +0 -0
  194. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/drillstring.md +0 -0
  195. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/economics.md +0 -0
  196. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/edr.md +0 -0
  197. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/etp.md +0 -0
  198. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/field-ports.md +0 -0
  199. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/files.md +0 -0
  200. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/historian.md +0 -0
  201. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/instruments.md +0 -0
  202. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/interval.md +0 -0
  203. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/invoice-check.md +0 -0
  204. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/map.md +0 -0
  205. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/month-end.md +0 -0
  206. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/notifications.md +0 -0
  207. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/opseis.md +0 -0
  208. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/osdu.md +0 -0
  209. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/pad-summary.md +0 -0
  210. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/patches.md +0 -0
  211. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/penetrator.md +0 -0
  212. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/ppdm.md +0 -0
  213. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/quakeml.md +0 -0
  214. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/quality.md +0 -0
  215. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/report-history.md +0 -0
  216. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/rig-time.md +0 -0
  217. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/seedlink.md +0 -0
  218. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/seismic.md +0 -0
  219. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/setup.md +0 -0
  220. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/simulation.md +0 -0
  221. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/site.md +0 -0
  222. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/sites.md +0 -0
  223. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/slip.md +0 -0
  224. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/soak.md +0 -0
  225. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/sra.md +0 -0
  226. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/start.md +0 -0
  227. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/structure.md +0 -0
  228. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/tools.md +0 -0
  229. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/transients.md +0 -0
  230. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/upkeep.md +0 -0
  231. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/vibration.md +0 -0
  232. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/well-report.md +0 -0
  233. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/well-tests.md +0 -0
  234. {gea_program-0.48.0 → gea_program-0.50.0}/gea/help/well3d.md +0 -0
  235. {gea_program-0.48.0 → gea_program-0.50.0}/gea/housekeeping.py +0 -0
  236. {gea_program-0.48.0 → gea_program-0.50.0}/gea/interval.py +0 -0
  237. {gea_program-0.48.0 → gea_program-0.50.0}/gea/inverse_engine.py +0 -0
  238. {gea_program-0.48.0 → gea_program-0.50.0}/gea/invoice_check.py +0 -0
  239. {gea_program-0.48.0 → gea_program-0.50.0}/gea/jobs.py +0 -0
  240. {gea_program-0.48.0 → gea_program-0.50.0}/gea/live_ports.py +0 -0
  241. {gea_program-0.48.0 → gea_program-0.50.0}/gea/loadtest.py +0 -0
  242. {gea_program-0.48.0 → gea_program-0.50.0}/gea/matplotlib_demo.py +0 -0
  243. {gea_program-0.48.0 → gea_program-0.50.0}/gea/modbus.py +0 -0
  244. {gea_program-0.48.0 → gea_program-0.50.0}/gea/modbus_rtu.py +0 -0
  245. {gea_program-0.48.0 → gea_program-0.50.0}/gea/model_card.py +0 -0
  246. {gea_program-0.48.0 → gea_program-0.50.0}/gea/month_end.py +0 -0
  247. {gea_program-0.48.0 → gea_program-0.50.0}/gea/mqtt_port.py +0 -0
  248. {gea_program-0.48.0 → gea_program-0.50.0}/gea/notify.py +0 -0
  249. {gea_program-0.48.0 → gea_program-0.50.0}/gea/op_seismicity.py +0 -0
  250. {gea_program-0.48.0 → gea_program-0.50.0}/gea/opcua_port.py +0 -0
  251. {gea_program-0.48.0 → gea_program-0.50.0}/gea/operator_app.py +0 -0
  252. {gea_program-0.48.0 → gea_program-0.50.0}/gea/osdu.py +0 -0
  253. {gea_program-0.48.0 → gea_program-0.50.0}/gea/pad_summary.py +0 -0
  254. {gea_program-0.48.0 → gea_program-0.50.0}/gea/patches.py +0 -0
  255. {gea_program-0.48.0 → gea_program-0.50.0}/gea/pdf_report.py +0 -0
  256. {gea_program-0.48.0 → gea_program-0.50.0}/gea/penetrator.py +0 -0
  257. {gea_program-0.48.0 → gea_program-0.50.0}/gea/permits.py +0 -0
  258. {gea_program-0.48.0 → gea_program-0.50.0}/gea/piwebapi.py +0 -0
  259. {gea_program-0.48.0 → gea_program-0.50.0}/gea/ports.py +0 -0
  260. {gea_program-0.48.0 → gea_program-0.50.0}/gea/ppdm.py +0 -0
  261. {gea_program-0.48.0 → gea_program-0.50.0}/gea/profile_catalog.py +0 -0
  262. {gea_program-0.48.0 → gea_program-0.50.0}/gea/project.py +0 -0
  263. {gea_program-0.48.0 → gea_program-0.50.0}/gea/qt6_downhole_app.py +0 -0
  264. {gea_program-0.48.0 → gea_program-0.50.0}/gea/quakeml.py +0 -0
  265. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reconciler.py +0 -0
  266. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
  267. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
  268. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
  269. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/eia_prices.provenance.json +0 -0
  270. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
  271. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/libmseed_steim.provenance.json +0 -0
  272. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
  273. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
  274. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
  275. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/mahoning_example.json +0 -0
  276. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/mud_motor_specs.json +0 -0
  277. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/penetrator_ratings.json +0 -0
  278. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/seismicity_protocols.json +0 -0
  279. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/tool_sources.json +0 -0
  280. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/us_outline.json +0 -0
  281. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/us_outline.provenance.json +0 -0
  282. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_3d.provenance.json +0 -0
  283. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
  284. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
  285. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
  286. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_surfaces.json.gz +0 -0
  287. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
  288. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
  289. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
  290. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
  291. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
  292. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
  293. {gea_program-0.48.0 → gea_program-0.50.0}/gea/reference/volve_well_picks.csv.gz +0 -0
  294. {gea_program-0.48.0 → gea_program-0.50.0}/gea/report_history.py +0 -0
  295. {gea_program-0.48.0 → gea_program-0.50.0}/gea/rig_state.py +0 -0
  296. {gea_program-0.48.0 → gea_program-0.50.0}/gea/rock_inventory.py +0 -0
  297. {gea_program-0.48.0 → gea_program-0.50.0}/gea/sample_record.py +0 -0
  298. {gea_program-0.48.0 → gea_program-0.50.0}/gea/sample_well_profile.csv +0 -0
  299. {gea_program-0.48.0 → gea_program-0.50.0}/gea/sbom.py +0 -0
  300. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seedlink.py +0 -0
  301. {gea_program-0.48.0 → gea_program-0.50.0}/gea/segy.py +0 -0
  302. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic.py +0 -0
  303. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_array.py +0 -0
  304. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_assoc.py +0 -0
  305. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_detect.py +0 -0
  306. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_film.py +0 -0
  307. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_harmonic.py +0 -0
  308. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_qc.py +0 -0
  309. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_response.py +0 -0
  310. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_signature.py +0 -0
  311. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_track.py +0 -0
  312. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_uncertainty.py +0 -0
  313. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_unlisted.py +0 -0
  314. {gea_program-0.48.0 → gea_program-0.50.0}/gea/seismic_watch.py +0 -0
  315. {gea_program-0.48.0 → gea_program-0.50.0}/gea/sensor_swap.py +0 -0
  316. {gea_program-0.48.0 → gea_program-0.50.0}/gea/series_cache.py +0 -0
  317. {gea_program-0.48.0 → gea_program-0.50.0}/gea/service_life.py +0 -0
  318. {gea_program-0.48.0 → gea_program-0.50.0}/gea/setup_checklist.py +0 -0
  319. {gea_program-0.48.0 → gea_program-0.50.0}/gea/shapefile.py +0 -0
  320. {gea_program-0.48.0 → gea_program-0.50.0}/gea/shell.py +0 -0
  321. {gea_program-0.48.0 → gea_program-0.50.0}/gea/shut_in.py +0 -0
  322. {gea_program-0.48.0 → gea_program-0.50.0}/gea/simulation.py +0 -0
  323. {gea_program-0.48.0 → gea_program-0.50.0}/gea/site_map.py +0 -0
  324. {gea_program-0.48.0 → gea_program-0.50.0}/gea/sla_report.py +0 -0
  325. {gea_program-0.48.0 → gea_program-0.50.0}/gea/slip.py +0 -0
  326. {gea_program-0.48.0 → gea_program-0.50.0}/gea/soak.py +0 -0
  327. {gea_program-0.48.0 → gea_program-0.50.0}/gea/sra.py +0 -0
  328. {gea_program-0.48.0 → gea_program-0.50.0}/gea/store_forward.py +0 -0
  329. {gea_program-0.48.0 → gea_program-0.50.0}/gea/strata_join.py +0 -0
  330. {gea_program-0.48.0 → gea_program-0.50.0}/gea/structure.py +0 -0
  331. {gea_program-0.48.0 → gea_program-0.50.0}/gea/supervisor.py +0 -0
  332. {gea_program-0.48.0 → gea_program-0.50.0}/gea/survey_cmd.py +0 -0
  333. {gea_program-0.48.0 → gea_program-0.50.0}/gea/survey_view.py +0 -0
  334. {gea_program-0.48.0 → gea_program-0.50.0}/gea/telemetry.py +0 -0
  335. {gea_program-0.48.0 → gea_program-0.50.0}/gea/tool_catalog.py +0 -0
  336. {gea_program-0.48.0 → gea_program-0.50.0}/gea/tool_library.py +0 -0
  337. {gea_program-0.48.0 → gea_program-0.50.0}/gea/tool_taxonomy.py +0 -0
  338. {gea_program-0.48.0 → gea_program-0.50.0}/gea/transient.py +0 -0
  339. {gea_program-0.48.0 → gea_program-0.50.0}/gea/vibration.py +0 -0
  340. {gea_program-0.48.0 → gea_program-0.50.0}/gea/well_assembler.py +0 -0
  341. {gea_program-0.48.0 → gea_program-0.50.0}/gea/well_report.py +0 -0
  342. {gea_program-0.48.0 → gea_program-0.50.0}/gea/well_test_validation.py +0 -0
  343. {gea_program-0.48.0 → gea_program-0.50.0}/gea/wits0.py +0 -0
  344. {gea_program-0.48.0 → gea_program-0.50.0}/gea/witsml.py +0 -0
  345. {gea_program-0.48.0 → gea_program-0.50.0}/gea/workspace.py +0 -0
  346. {gea_program-0.48.0 → gea_program-0.50.0}/gea/xlsx_read.py +0 -0
  347. {gea_program-0.48.0 → gea_program-0.50.0}/gea_program.egg-info/dependency_links.txt +0 -0
  348. {gea_program-0.48.0 → gea_program-0.50.0}/gea_program.egg-info/entry_points.txt +0 -0
  349. {gea_program-0.48.0 → gea_program-0.50.0}/gea_program.egg-info/requires.txt +0 -0
  350. {gea_program-0.48.0 → gea_program-0.50.0}/gea_program.egg-info/top_level.txt +0 -0
  351. {gea_program-0.48.0 → gea_program-0.50.0}/setup.cfg +0 -0
  352. {gea_program-0.48.0 → gea_program-0.50.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.48.0
3
+ Version: 0.50.0
4
4
  Summary: GEA-Program: downhole gauge monitoring - canonical measurement records, quality rules, drift evaluation with a re-fit change log, well-test validation, alarm management, model cards, store-and-forward, monthly SLA measurement, FAT/SAT protocols and a dashboard, generated from live objects in the client's reporting outline.
5
5
  Author: Daniel T. Murphy
6
6
  License: MPL-2.0
@@ -648,6 +648,37 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
648
648
  itself; `gea help seedlink`. A TexNet station is served by EarthScope at
649
649
  `rtserve.iris.washington.edu:18000`, network `TX`.
650
650
 
651
+ ### Plan vs actual and the survey tools
652
+
653
+ Each well against its directional plan: at every survey station, how far
654
+ it is from the plan - high or low, right or left, in the plan's own frame -
655
+ against the survey's own uncertainty in that direction; the bit projected
656
+ below the last survey; the one arc back to the plan, with its dogleg
657
+ severity and toolface. Each well's survey program names the tool that
658
+ surveyed each run, weighed by the ISCWSA MWD Rev 5.11 model (checked
659
+ against all 144 rows of the ISCWSA's own Rev 5 example) or one of 21 OWSG
660
+ tool-code models on its weighting functions - MWD and EMS with the standard,
661
+ high- or low-resolution geomagnetic model or in-field referencing. Wells not
662
+ yet drilled are checked for collision along their plans, a well being
663
+ drilled along its survey and then its plan, and the Collision tab draws the
664
+ travelling cylinder. The **Plan vs actual** tab, `gea plan`, `gea help plan`.
665
+
666
+ ### Well collision checks
667
+
668
+ Every well scanned against every other: at each point of one well, the
669
+ closest point of the other, and the ISCWSA separation factor - the distance
670
+ between them less the holes and a surface margin, over k times the
671
+ uncertainty of that distance. Each well's position uncertainty comes from
672
+ the ISCWSA MWD Rev 4 error model (27 error sources, propagated as the model
673
+ says, the errors two wells share taken out of the distance between them),
674
+ checked against all 112 rows of the ISCWSA's own example; the Earth's field
675
+ at each well comes from the World Magnetic Model 2025. Each pair is levelled
676
+ as the ISCWSA's separation rule does - reported below 4.0, the approach
677
+ limit below 1.5, revise the plan below 1.25, below 1.0 only by the
678
+ operator's dispensation - with a company standard's k and margin kept with
679
+ its source. The Volve template's three wells are the worked example. The
680
+ **Collision** tab, `gea collision`, `gea help collision`.
681
+
651
682
  ### One record, tied together
652
683
 
653
684
  The invoice check, rig time, the daily summary, the alerts, the signed
@@ -609,6 +609,37 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
609
609
  itself; `gea help seedlink`. A TexNet station is served by EarthScope at
610
610
  `rtserve.iris.washington.edu:18000`, network `TX`.
611
611
 
612
+ ### Plan vs actual and the survey tools
613
+
614
+ Each well against its directional plan: at every survey station, how far
615
+ it is from the plan - high or low, right or left, in the plan's own frame -
616
+ against the survey's own uncertainty in that direction; the bit projected
617
+ below the last survey; the one arc back to the plan, with its dogleg
618
+ severity and toolface. Each well's survey program names the tool that
619
+ surveyed each run, weighed by the ISCWSA MWD Rev 5.11 model (checked
620
+ against all 144 rows of the ISCWSA's own Rev 5 example) or one of 21 OWSG
621
+ tool-code models on its weighting functions - MWD and EMS with the standard,
622
+ high- or low-resolution geomagnetic model or in-field referencing. Wells not
623
+ yet drilled are checked for collision along their plans, a well being
624
+ drilled along its survey and then its plan, and the Collision tab draws the
625
+ travelling cylinder. The **Plan vs actual** tab, `gea plan`, `gea help plan`.
626
+
627
+ ### Well collision checks
628
+
629
+ Every well scanned against every other: at each point of one well, the
630
+ closest point of the other, and the ISCWSA separation factor - the distance
631
+ between them less the holes and a surface margin, over k times the
632
+ uncertainty of that distance. Each well's position uncertainty comes from
633
+ the ISCWSA MWD Rev 4 error model (27 error sources, propagated as the model
634
+ says, the errors two wells share taken out of the distance between them),
635
+ checked against all 112 rows of the ISCWSA's own example; the Earth's field
636
+ at each well comes from the World Magnetic Model 2025. Each pair is levelled
637
+ as the ISCWSA's separation rule does - reported below 4.0, the approach
638
+ limit below 1.5, revise the plan below 1.25, below 1.0 only by the
639
+ operator's dispensation - with a company standard's k and margin kept with
640
+ its source. The Volve template's three wells are the worked example. The
641
+ **Collision** tab, `gea collision`, `gea help collision`.
642
+
612
643
  ### One record, tied together
613
644
 
614
645
  The invoice check, rig time, the daily summary, the alerts, the signed
@@ -123,7 +123,7 @@ from .profile_catalog import (
123
123
  read_pangaea_txt,
124
124
  )
125
125
 
126
- __version__ = "0.48.0"
126
+ __version__ = "0.50.0"
127
127
  __all__ = [
128
128
  "aging_rate", "rate_psi_yr", "accuracy_psi",
129
129
  "Sensor", "SimulatorConfig", "DownholeEngine",
@@ -590,6 +590,38 @@ def main(argv=None) -> int:
590
590
  p_dz.add_argument("--actor", type=str, default="cli")
591
591
  p_dz.add_argument("--json", action="store_true")
592
592
 
593
+ p_co = sub.add_parser("collision", help="every well scanned against every other: the closest approach and the ISCWSA separation factor, each well's position uncertainty by the ISCWSA MWD model and the field by WMM2025")
594
+ p_co.add_argument("--workspace", type=str, default=None)
595
+ p_co.add_argument("--scene", type=str, default=None, help="workspace (your wells) or volve (the worked example)")
596
+ p_co.add_argument("--write", action="store_true", help="write the client report")
597
+ p_co.add_argument("--k", type=str, default=None, help="declare the rule's scaling factor")
598
+ p_co.add_argument("--surface-margin", type=str, default=None, help="declare the surface margin, m")
599
+ p_co.add_argument("--sigma-pa", type=str, default=None, help="declare the project-ahead uncertainty, m")
600
+ p_co.add_argument("--source", type=str, default="", help="where the rule's values came from")
601
+ p_co.add_argument("--well", type=str, default=None)
602
+ p_co.add_argument("--hole", type=str, default=None, help="with --well: the hole size in inches ('' removes it)")
603
+ p_co.add_argument("--field", type=str, default=None, help="the magnetic field at LAT,LON[,YYYY-MM-DD] by WMM2025, and nothing else")
604
+ p_co.add_argument("--actor", type=str, default="cli")
605
+ p_co.add_argument("--json", action="store_true")
606
+
607
+ p_pl = sub.add_parser("plan", help="a well against its plan: the distance high/low and right/left at each survey, the bit projected, the arc back to the plan; the survey program's tool models")
608
+ p_pl.add_argument("--workspace", type=str, default=None)
609
+ p_pl.add_argument("--well", type=str, default=None)
610
+ p_pl.add_argument("--attach", type=str, default=None, help="attach FILE as the well's plan (CSV, Excel or WITSML)")
611
+ p_pl.add_argument("--azimuth-reference", type=str, default=None, help="with --attach: true, grid or magnetic")
612
+ p_pl.add_argument("--md-unit", type=str, default="ft", help="with --attach: ft or m")
613
+ p_pl.add_argument("--grid", type=str, default=None, help="with a grid azimuth reference: the grid (e.g. UTM14N)")
614
+ p_pl.add_argument("--declination", type=str, default=None, help="with a magnetic azimuth reference: the declination used")
615
+ p_pl.add_argument("--remove", action="store_true", help="take the well's plan off it")
616
+ p_pl.add_argument("--program", type=str, default=None, help="the survey program: 'MWD+SRGM' or '0-1500:MWD+SRGM, 1500-:MWD+IFR1' (metres)")
617
+ p_pl.add_argument("--bit-offset", type=str, default=None, help="survey sensor to bit, m")
618
+ p_pl.add_argument("--lookahead", type=str, default=None, help="how far ahead the arc back rejoins the plan, m")
619
+ p_pl.add_argument("--source", type=str, default="", help="where the plan or the program came from")
620
+ p_pl.add_argument("--models", action="store_true", help="list the tool models")
621
+ p_pl.add_argument("--write", action="store_true", help="write the well's report")
622
+ p_pl.add_argument("--actor", type=str, default="cli")
623
+ p_pl.add_argument("--json", action="store_true")
624
+
593
625
  p_rt = sub.add_parser("rig-time", help="what the rig did each second of the drilling record - drilling, connections, trips, the slips - and the time lost against the pad's own best")
594
626
  p_rt.add_argument("--workspace", type=str, required=True)
595
627
  p_rt.add_argument("--well", type=str, default=None, help="with --write: one well's report (without it, the pad's)")
@@ -2372,6 +2404,85 @@ def main(argv=None) -> int:
2372
2404
  print(f" {os.path.join(ws.reports_dir, e['path'])}")
2373
2405
  print(f" key fingerprint {e['fingerprint']}")
2374
2406
  return 0
2407
+ elif a.cmd == "collision":
2408
+ import json as _json
2409
+ from . import collision as _CO
2410
+ from .cli import _safe_stdout
2411
+ from .workspace import Workspace, WorkspaceError
2412
+ _safe_stdout()
2413
+ try:
2414
+ if a.field:
2415
+ from . import geomag as _GM
2416
+ parts = [x.strip() for x in a.field.split(",")]
2417
+ f_ = _GM.field(float(parts[0]), float(parts[1]), 0.0, parts[2] if len(parts) > 2 else None)
2418
+ print(f"{f_['model']} at {float(parts[0]):.4f}, {float(parts[1]):.4f} for {f_['decimal_year']:.2f}: declination {f_['declination_deg']:+.3f} deg, "
2419
+ f"dip {f_['dip_deg']:.3f} deg, total {f_['total_nT']:,.1f} nT" + (f" ({f_['note']})" if f_['note'] else ""))
2420
+ return 0
2421
+ ws = Workspace(a.workspace) if a.workspace else None
2422
+ if ws is not None and (a.k is not None or a.surface_margin is not None or a.sigma_pa is not None or a.hole is not None):
2423
+ if a.hole is not None and not a.well:
2424
+ raise ValueError("--hole needs --well")
2425
+ s_ = _CO.set_settings(ws, a.actor, a.k, a.surface_margin, a.sigma_pa, (a.well, a.hole) if a.hole is not None else None, a.source)
2426
+ print(f"rule: k {s_['k']:g}, surface margin {s_['surface_margin_m']:g} m, project-ahead {s_['sigma_pa_m']:g} m; holes: "
2427
+ + (", ".join(f"{k} {v:g} in" for k, v in s_['holes_in'].items()) or "8.5 in by default"))
2428
+ return 0
2429
+ scene = a.scene or ("workspace" if ws is not None else "volve")
2430
+ if a.write:
2431
+ if ws is None:
2432
+ raise ValueError("--write needs --workspace")
2433
+ r_ = _CO.write_report(ws, __version__, a.actor, scene)
2434
+ print(f"wrote {r_['report_id']}: {r_['paths']['html']}")
2435
+ if r_['paths'].get('pdf'):
2436
+ print(f" printable: {r_['paths']['pdf']}")
2437
+ return 0
2438
+ r = _CO.page(ws, scene)
2439
+ except (KeyError, ValueError, OSError, WorkspaceError) as e:
2440
+ raise SystemExit(f"collision: {e.args[0] if e.args else e}")
2441
+ print(_json.dumps({k: v for k, v in r.items()}, default=str) if a.json else _CO.text(r))
2442
+ return 0
2443
+ elif a.cmd == "plan":
2444
+ import json as _json
2445
+ from . import wellplan as _PL
2446
+ from . import wellpos as _WP
2447
+ from .cli import _safe_stdout
2448
+ from .workspace import Workspace, WorkspaceError
2449
+ _safe_stdout()
2450
+ try:
2451
+ if a.models:
2452
+ for m_ in _WP.model_list():
2453
+ print(f"{m_['name']:<18} {m_['id']:<14} {m_['terms']:>2} terms {m_['family']:<10} {m_['long_name']}" + (" (default)" if m_['default'] else ""))
2454
+ return 0
2455
+ if not a.workspace:
2456
+ raise ValueError("--workspace is needed")
2457
+ ws = Workspace(a.workspace)
2458
+ if (a.attach or a.remove or a.program or a.bit_offset is not None or a.lookahead is not None or a.write) and not a.well:
2459
+ raise ValueError("--well is needed")
2460
+ if a.attach:
2461
+ with open(a.attach, "rb") as f_:
2462
+ r_ = _PL.attach(ws, a.well, os.path.basename(a.attach), f_.read(), a.actor, a.azimuth_reference or "", a.md_unit, a.grid,
2463
+ float(a.declination) if a.declination else None, a.source)
2464
+ print(f"plan attached to {a.well}: {r_['stations']} stations, {r_['md_range_m'][0]:,.1f} to {r_['md_range_m'][1]:,.1f} m MD ({r_['azimuth_reference']} north)")
2465
+ return 0
2466
+ if a.remove:
2467
+ _PL.remove(ws, a.well, a.actor)
2468
+ print(f"plan removed from {a.well}")
2469
+ return 0
2470
+ if a.program or a.bit_offset is not None or a.lookahead is not None:
2471
+ s_ = _PL.set_well(ws, a.actor, a.well, _PL.parse_program(a.program) if a.program else None, a.bit_offset, a.lookahead, a.source)
2472
+ print(f"{a.well}: " + ", ".join(f"{p_['model']} to {p_['to_md_m']:,.0f} m" if p_['to_md_m'] is not None else f"{p_['model']} to TD" for p_ in s_['program'])
2473
+ + f"; the bit {s_['bit_offset_m']:g} m below the survey sensor; back to the plan {s_['lookahead_m']:g} m ahead")
2474
+ return 0
2475
+ if a.write:
2476
+ r_ = _PL.write_report(ws, __version__, a.well, a.actor)
2477
+ print(f"wrote {r_['report_id']}: {r_['paths']['html']}")
2478
+ if r_['paths'].get('pdf'):
2479
+ print(f" printable: {r_['paths']['pdf']}")
2480
+ return 0
2481
+ r = _PL.page(ws, a.well)
2482
+ except (KeyError, ValueError, OSError, WorkspaceError) as e:
2483
+ raise SystemExit(f"plan: {e.args[0] if e.args else e}")
2484
+ print(_json.dumps(r, default=str) if a.json else _PL.text(r))
2485
+ return 0
2375
2486
  elif a.cmd == "rig-time":
2376
2487
  import json as _json
2377
2488
  from . import rig_state as _RS