gea-program 0.30.0__tar.gz → 0.33.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 (284) hide show
  1. {gea_program-0.30.0/gea_program.egg-info → gea_program-0.33.0}/PKG-INFO +64 -6
  2. {gea_program-0.30.0 → gea_program-0.33.0}/README.md +63 -5
  3. {gea_program-0.30.0 → gea_program-0.33.0}/gea/__init__.py +1 -1
  4. {gea_program-0.30.0 → gea_program-0.33.0}/gea/__main__.py +115 -4
  5. {gea_program-0.30.0 → gea_program-0.33.0}/gea/acceptance_tests.py +489 -3
  6. {gea_program-0.30.0 → gea_program-0.33.0}/gea/backup.py +1 -1
  7. {gea_program-0.30.0 → gea_program-0.33.0}/gea/dashboard.py +11 -3
  8. {gea_program-0.30.0 → gea_program-0.33.0}/gea/edr.py +397 -84
  9. {gea_program-0.30.0 → gea_program-0.33.0}/gea/gamma.py +2 -2
  10. gea_program-0.33.0/gea/help/charts.md +11 -0
  11. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/edr.md +4 -2
  12. gea_program-0.33.0/gea/help/setup.md +11 -0
  13. gea_program-0.33.0/gea/help/tools.md +11 -0
  14. {gea_program-0.30.0 → gea_program-0.33.0}/gea/helplib.py +4 -2
  15. {gea_program-0.30.0 → gea_program-0.33.0}/gea/osdu.py +5 -5
  16. {gea_program-0.30.0 → gea_program-0.33.0}/gea/ppdm.py +7 -1
  17. gea_program-0.33.0/gea/reference/tool_sources.json +3046 -0
  18. gea_program-0.33.0/gea/series_cache.py +299 -0
  19. {gea_program-0.30.0 → gea_program-0.33.0}/gea/service.py +151 -2
  20. gea_program-0.33.0/gea/setup_checklist.py +256 -0
  21. {gea_program-0.30.0 → gea_program-0.33.0}/gea/sra.py +1 -1
  22. gea_program-0.33.0/gea/tool_taxonomy.py +905 -0
  23. {gea_program-0.30.0 → gea_program-0.33.0}/gea/web/app.html +388 -12
  24. {gea_program-0.30.0 → gea_program-0.33.0}/gea/workspace.py +17 -3
  25. {gea_program-0.30.0 → gea_program-0.33.0/gea_program.egg-info}/PKG-INFO +64 -6
  26. {gea_program-0.30.0 → gea_program-0.33.0}/gea_program.egg-info/SOURCES.txt +6 -0
  27. {gea_program-0.30.0 → gea_program-0.33.0}/pyproject.toml +1 -1
  28. gea_program-0.30.0/gea/help/tools.md +0 -11
  29. {gea_program-0.30.0 → gea_program-0.33.0}/LICENSE +0 -0
  30. {gea_program-0.30.0 → gea_program-0.33.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  31. {gea_program-0.30.0 → gea_program-0.33.0}/gea/accuracy_statement.py +0 -0
  32. {gea_program-0.30.0 → gea_program-0.33.0}/gea/alarm_engine.py +0 -0
  33. {gea_program-0.30.0 → gea_program-0.33.0}/gea/bench.py +0 -0
  34. {gea_program-0.30.0 → gea_program-0.33.0}/gea/blind_harness.py +0 -0
  35. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  36. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  37. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  38. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  39. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  40. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  41. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  42. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  43. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  44. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  45. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  46. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  47. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  48. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  49. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  50. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  51. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  52. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  53. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  54. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  55. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  56. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  57. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  58. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  59. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  60. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  61. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  62. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  63. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  64. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  65. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  66. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  67. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  68. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  69. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  70. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  71. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  72. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  73. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  74. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  75. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  76. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  77. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  78. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  79. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  80. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  81. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  82. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  83. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  84. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  85. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  86. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  87. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  88. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  89. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  90. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  91. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  92. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  93. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  94. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  95. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  96. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  97. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  98. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  99. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  100. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  101. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  102. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/med_160_sapropels.txt +0 -0
  103. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  104. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  105. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  106. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  107. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  108. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  109. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  110. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  111. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  112. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  113. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  114. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  115. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  116. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  117. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  118. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  119. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  120. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  121. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  122. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  123. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  124. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  125. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  126. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  127. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  128. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  129. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  130. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  131. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  132. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  133. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  134. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  135. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  136. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  137. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  138. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  139. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog_map.py +0 -0
  140. {gea_program-0.30.0 → gea_program-0.33.0}/gea/catalog_register.py +0 -0
  141. {gea_program-0.30.0 → gea_program-0.33.0}/gea/certificates.py +0 -0
  142. {gea_program-0.30.0 → gea_program-0.33.0}/gea/cli.py +0 -0
  143. {gea_program-0.30.0 → gea_program-0.33.0}/gea/client_reports.py +0 -0
  144. {gea_program-0.30.0 → gea_program-0.33.0}/gea/config_versioning.py +0 -0
  145. {gea_program-0.30.0 → gea_program-0.33.0}/gea/conformance.py +0 -0
  146. {gea_program-0.30.0 → gea_program-0.33.0}/gea/correlation.py +0 -0
  147. {gea_program-0.30.0 → gea_program-0.33.0}/gea/deviation.py +0 -0
  148. {gea_program-0.30.0 → gea_program-0.33.0}/gea/dlis.py +0 -0
  149. {gea_program-0.30.0 → gea_program-0.33.0}/gea/dnp3.py +0 -0
  150. {gea_program-0.30.0 → gea_program-0.33.0}/gea/doctor.py +0 -0
  151. {gea_program-0.30.0 → gea_program-0.33.0}/gea/downhole_engine.py +0 -0
  152. {gea_program-0.30.0 → gea_program-0.33.0}/gea/drift_monitor.py +0 -0
  153. {gea_program-0.30.0 → gea_program-0.33.0}/gea/earth_model.py +0 -0
  154. {gea_program-0.30.0 → gea_program-0.33.0}/gea/elevation.py +0 -0
  155. {gea_program-0.30.0 → gea_program-0.33.0}/gea/etp.py +0 -0
  156. {gea_program-0.30.0 → gea_program-0.33.0}/gea/etp12_schemas.json +0 -0
  157. {gea_program-0.30.0 → gea_program-0.33.0}/gea/example_register_map.json +0 -0
  158. {gea_program-0.30.0 → gea_program-0.33.0}/gea/fat_sat.py +0 -0
  159. {gea_program-0.30.0 → gea_program-0.33.0}/gea/files.py +0 -0
  160. {gea_program-0.30.0 → gea_program-0.33.0}/gea/fixtures/README.md +0 -0
  161. {gea_program-0.30.0 → gea_program-0.33.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
  162. {gea_program-0.30.0 → gea_program-0.33.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
  163. {gea_program-0.30.0 → gea_program-0.33.0}/gea/fixtures/ne_110m_coastline.json +0 -0
  164. {gea_program-0.30.0 → gea_program-0.33.0}/gea/follower.py +0 -0
  165. {gea_program-0.30.0 → gea_program-0.33.0}/gea/forward_model.py +0 -0
  166. {gea_program-0.30.0 → gea_program-0.33.0}/gea/friction_priors.py +0 -0
  167. {gea_program-0.30.0 → gea_program-0.33.0}/gea/gauge_aging.py +0 -0
  168. {gea_program-0.30.0 → gea_program-0.33.0}/gea/gauge_specs.py +0 -0
  169. {gea_program-0.30.0 → gea_program-0.33.0}/gea/geodesy.py +0 -0
  170. {gea_program-0.30.0 → gea_program-0.33.0}/gea/gravity_reference.py +0 -0
  171. {gea_program-0.30.0 → gea_program-0.33.0}/gea/hartip.py +0 -0
  172. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/TESTER_GUIDE.md +0 -0
  173. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/alarms.md +0 -0
  174. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/audit-update.md +0 -0
  175. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/backup.md +0 -0
  176. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/catalog.md +0 -0
  177. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/conformance.md +0 -0
  178. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/data-in.md +0 -0
  179. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/dlis.md +0 -0
  180. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/doctor.md +0 -0
  181. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/drift.md +0 -0
  182. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/etp.md +0 -0
  183. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/field-ports.md +0 -0
  184. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/files.md +0 -0
  185. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/historian.md +0 -0
  186. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/instruments.md +0 -0
  187. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/interval.md +0 -0
  188. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/month-end.md +0 -0
  189. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/notifications.md +0 -0
  190. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/osdu.md +0 -0
  191. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/patches.md +0 -0
  192. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/ppdm.md +0 -0
  193. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/quakeml.md +0 -0
  194. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/quality.md +0 -0
  195. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/seedlink.md +0 -0
  196. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/seismic.md +0 -0
  197. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/site.md +0 -0
  198. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/sites.md +0 -0
  199. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/slip.md +0 -0
  200. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/soak.md +0 -0
  201. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/sra.md +0 -0
  202. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/start.md +0 -0
  203. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/structure.md +0 -0
  204. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/transients.md +0 -0
  205. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/upkeep.md +0 -0
  206. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/vibration.md +0 -0
  207. {gea_program-0.30.0 → gea_program-0.33.0}/gea/help/well-tests.md +0 -0
  208. {gea_program-0.30.0 → gea_program-0.33.0}/gea/housekeeping.py +0 -0
  209. {gea_program-0.30.0 → gea_program-0.33.0}/gea/interval.py +0 -0
  210. {gea_program-0.30.0 → gea_program-0.33.0}/gea/inverse_engine.py +0 -0
  211. {gea_program-0.30.0 → gea_program-0.33.0}/gea/jobs.py +0 -0
  212. {gea_program-0.30.0 → gea_program-0.33.0}/gea/live_ports.py +0 -0
  213. {gea_program-0.30.0 → gea_program-0.33.0}/gea/loadtest.py +0 -0
  214. {gea_program-0.30.0 → gea_program-0.33.0}/gea/matplotlib_demo.py +0 -0
  215. {gea_program-0.30.0 → gea_program-0.33.0}/gea/modbus.py +0 -0
  216. {gea_program-0.30.0 → gea_program-0.33.0}/gea/modbus_rtu.py +0 -0
  217. {gea_program-0.30.0 → gea_program-0.33.0}/gea/model_card.py +0 -0
  218. {gea_program-0.30.0 → gea_program-0.33.0}/gea/month_end.py +0 -0
  219. {gea_program-0.30.0 → gea_program-0.33.0}/gea/mqtt_port.py +0 -0
  220. {gea_program-0.30.0 → gea_program-0.33.0}/gea/notify.py +0 -0
  221. {gea_program-0.30.0 → gea_program-0.33.0}/gea/opcua_port.py +0 -0
  222. {gea_program-0.30.0 → gea_program-0.33.0}/gea/operator_app.py +0 -0
  223. {gea_program-0.30.0 → gea_program-0.33.0}/gea/patches.py +0 -0
  224. {gea_program-0.30.0 → gea_program-0.33.0}/gea/permits.py +0 -0
  225. {gea_program-0.30.0 → gea_program-0.33.0}/gea/piwebapi.py +0 -0
  226. {gea_program-0.30.0 → gea_program-0.33.0}/gea/ports.py +0 -0
  227. {gea_program-0.30.0 → gea_program-0.33.0}/gea/profile_catalog.py +0 -0
  228. {gea_program-0.30.0 → gea_program-0.33.0}/gea/project.py +0 -0
  229. {gea_program-0.30.0 → gea_program-0.33.0}/gea/qt6_downhole_app.py +0 -0
  230. {gea_program-0.30.0 → gea_program-0.33.0}/gea/quakeml.py +0 -0
  231. {gea_program-0.30.0 → gea_program-0.33.0}/gea/reconciler.py +0 -0
  232. {gea_program-0.30.0 → gea_program-0.33.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
  233. {gea_program-0.30.0 → gea_program-0.33.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
  234. {gea_program-0.30.0 → gea_program-0.33.0}/gea/reference/libmseed_steim.provenance.json +0 -0
  235. {gea_program-0.30.0 → gea_program-0.33.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
  236. {gea_program-0.30.0 → gea_program-0.33.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
  237. {gea_program-0.30.0 → gea_program-0.33.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
  238. {gea_program-0.30.0 → gea_program-0.33.0}/gea/rock_inventory.py +0 -0
  239. {gea_program-0.30.0 → gea_program-0.33.0}/gea/sample_record.py +0 -0
  240. {gea_program-0.30.0 → gea_program-0.33.0}/gea/sample_well_profile.csv +0 -0
  241. {gea_program-0.30.0 → gea_program-0.33.0}/gea/sbom.py +0 -0
  242. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seedlink.py +0 -0
  243. {gea_program-0.30.0 → gea_program-0.33.0}/gea/segy.py +0 -0
  244. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic.py +0 -0
  245. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_array.py +0 -0
  246. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_assoc.py +0 -0
  247. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_detect.py +0 -0
  248. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_film.py +0 -0
  249. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_harmonic.py +0 -0
  250. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_qc.py +0 -0
  251. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_response.py +0 -0
  252. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_signature.py +0 -0
  253. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_track.py +0 -0
  254. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_uncertainty.py +0 -0
  255. {gea_program-0.30.0 → gea_program-0.33.0}/gea/seismic_unlisted.py +0 -0
  256. {gea_program-0.30.0 → gea_program-0.33.0}/gea/sensor_swap.py +0 -0
  257. {gea_program-0.30.0 → gea_program-0.33.0}/gea/service_life.py +0 -0
  258. {gea_program-0.30.0 → gea_program-0.33.0}/gea/shapefile.py +0 -0
  259. {gea_program-0.30.0 → gea_program-0.33.0}/gea/shell.py +0 -0
  260. {gea_program-0.30.0 → gea_program-0.33.0}/gea/shut_in.py +0 -0
  261. {gea_program-0.30.0 → gea_program-0.33.0}/gea/sla_report.py +0 -0
  262. {gea_program-0.30.0 → gea_program-0.33.0}/gea/slip.py +0 -0
  263. {gea_program-0.30.0 → gea_program-0.33.0}/gea/soak.py +0 -0
  264. {gea_program-0.30.0 → gea_program-0.33.0}/gea/store_forward.py +0 -0
  265. {gea_program-0.30.0 → gea_program-0.33.0}/gea/strata_join.py +0 -0
  266. {gea_program-0.30.0 → gea_program-0.33.0}/gea/structure.py +0 -0
  267. {gea_program-0.30.0 → gea_program-0.33.0}/gea/supervisor.py +0 -0
  268. {gea_program-0.30.0 → gea_program-0.33.0}/gea/survey_cmd.py +0 -0
  269. {gea_program-0.30.0 → gea_program-0.33.0}/gea/survey_view.py +0 -0
  270. {gea_program-0.30.0 → gea_program-0.33.0}/gea/telemetry.py +0 -0
  271. {gea_program-0.30.0 → gea_program-0.33.0}/gea/tool_catalog.py +0 -0
  272. {gea_program-0.30.0 → gea_program-0.33.0}/gea/tool_library.py +0 -0
  273. {gea_program-0.30.0 → gea_program-0.33.0}/gea/transient.py +0 -0
  274. {gea_program-0.30.0 → gea_program-0.33.0}/gea/vibration.py +0 -0
  275. {gea_program-0.30.0 → gea_program-0.33.0}/gea/well_assembler.py +0 -0
  276. {gea_program-0.30.0 → gea_program-0.33.0}/gea/well_test_validation.py +0 -0
  277. {gea_program-0.30.0 → gea_program-0.33.0}/gea/wits0.py +0 -0
  278. {gea_program-0.30.0 → gea_program-0.33.0}/gea/witsml.py +0 -0
  279. {gea_program-0.30.0 → gea_program-0.33.0}/gea_program.egg-info/dependency_links.txt +0 -0
  280. {gea_program-0.30.0 → gea_program-0.33.0}/gea_program.egg-info/entry_points.txt +0 -0
  281. {gea_program-0.30.0 → gea_program-0.33.0}/gea_program.egg-info/requires.txt +0 -0
  282. {gea_program-0.30.0 → gea_program-0.33.0}/gea_program.egg-info/top_level.txt +0 -0
  283. {gea_program-0.30.0 → gea_program-0.33.0}/setup.cfg +0 -0
  284. {gea_program-0.30.0 → gea_program-0.33.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.30.0
3
+ Version: 0.33.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
@@ -125,7 +125,7 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
125
125
  gea client-report --report accuracy --out client_report
126
126
  gea model-cards --out model_cards
127
127
  gea sbom --out sbom
128
- gea accept # the product gate (376 checks)
128
+ gea accept # the product gate (386 checks)
129
129
  gea help drift # the help library, by the job (16 pages; the same text is on every dashboard page)
130
130
  gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
131
131
  gea gui # the desktop window (pip install "gea-program[desktop]")
@@ -648,10 +648,62 @@ 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
+ ### The charts
652
+
653
+ A well's page carries the Charts card: up to four channels stacked on one
654
+ horizontal axis, a cursor that reads them all at the same moment, cut from
655
+ every sample of the well's file. Drag across a stretch to zoom into it, the
656
+ wheel zooms where you point, double-click or Reset shows everything; the
657
+ keyboard does the same (arrows, + and -, Page Up and Page Down, Home). A
658
+ month-wide view keeps a one-second spike - each bucket is the minimum, the
659
+ maximum and the mean of its samples - and a stretch with no samples is drawn
660
+ empty, never bridged. On a drilling recorder's export the axis switches
661
+ between time and depth (the drilling samples by bit depth, kept off hole a
662
+ later sidetrack abandoned), the depth events are marked where they
663
+ happened, and each section of the recording is a button. The Wells page
664
+ carries the drilling progress of every drilling-recorder well: hole depth
665
+ against days, one colour per well. The refresh writes a chart cache per well
666
+ from the read it already makes; `gea help charts`.
667
+
668
+ ### The setup checklist
669
+
670
+ The Setup tab (`#/setup`, `gea checklist --workspace C:\site`) says what a
671
+ workspace still needs before its reports can be handed over, read from the
672
+ workspace as it stands: an administrator, the wells, a site record naming
673
+ the client, a backup folder off the machine, a current backup, the daily
674
+ schedule, current reports, and for each well its surface location and
675
+ datum, its reference elevation with its source, and its US Well Number.
676
+ Each item carries its own form or button - declare the position, take the
677
+ ground level from USGS 3DEP to check, create the site, back up now - and,
678
+ where every value is already known, the command to paste. The tab's badge
679
+ counts the required items still to do and the Home page names the next
680
+ one. A drilling record's depth events are confirmed by a person against
681
+ the daily drilling reports, with a note; the confirmation stops counting
682
+ if the record changes. `gea checklist` exits 0 when everything required is
683
+ done. `gea help setup`.
684
+
651
685
  ### Tools and ports
652
686
 
653
- The Tools & ports tab (`#/tools`, `gea tools`) is the program's two
654
- registers in one place: the tool library - every downhole and surface tool
687
+ The Tools & ports tab (`#/tools`, `gea tools`) opens on the **downhole tool
688
+ library**: every class of downhole tool in use across the industry - bits
689
+ and hole openers, motors and rotary steerable systems, MWD and LWD, the drill
690
+ string and its subs, casing and cementing equipment, completion and
691
+ artificial lift, wireline and cased-hole tools, fishing and milling, test
692
+ tools - ninety-six classes in nine categories. Point at a tool, or Tab to
693
+ it, for a one-line description; click, tap or press Enter for its tutorial:
694
+ what it is, where it runs, how it works, what it shows in the data, what to
695
+ watch, and what this program does with it, with the published figures
696
+ quoted from the pages they cite and the pages themselves. The tutorials
697
+ carry no numbers of their own; a figure on a tool's card is the cited page's
698
+ words, most often one maker's product, never a limit for the class. Your
699
+ **fleet** - the tools you actually run - goes in beside the classes, each
700
+ with its maker, model, serial and the datasheet that rates it
701
+ (`gea tools --action fleet-add --workspace C:\site --class pdm_motor
702
+ --maker ... --model ... --datasheet ...`, or from the tutorial), kept in the
703
+ workspace and audited. `gea tools --action classes`, `--action tutorial
704
+ --class drilling_jar`.
705
+
706
+ Below it are the program's two registers: the gauge library - every gauge
655
707
  with its source citation, ratings, what it measures, the telemetry interface
656
708
  it declares and its datasheet aging rate where the vendor published one -
657
709
  and the ports, the file formats read and the eleven live protocols spoken,
@@ -730,8 +782,14 @@ on bottom and rotating, the rate of penetration on bottom, the connections,
730
782
  the peaks; for the well, total depth and when the bit was first on bottom
731
783
  there, the recorder's TVD at it; per channel what was missing and how
732
784
  often; and the **MD-TVD table**, hole depth against the recorder's
733
- interpolated TVD, labelled an interpolation and not a survey. A recorder
734
- that resets its hole depth at a restart is named, not corrected. `gea edr
785
+ interpolated TVD, labelled an interpolation and not a survey. Before any
786
+ footage is counted the hole depth is read for what it can be trusted for:
787
+ a depth carried over from the last well, a depth set back and counted up
788
+ again by running pipe, a sidetrack, an overstated or understated depth
789
+ corrected - each named as a depth event in the record and on the well
790
+ page, and handled so that total depth is the final borehole's and the
791
+ footage adds up. The recorder's gamma is written as a LAS log by bit
792
+ depth. `gea edr
735
793
  --file C:\site\_incoming\30636033.csv`; `gea workspace --action add-file`
736
794
  then `refresh` for the record beside the well's other reports. `gea help
737
795
  edr`.
@@ -86,7 +86,7 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
86
86
  gea client-report --report accuracy --out client_report
87
87
  gea model-cards --out model_cards
88
88
  gea sbom --out sbom
89
- gea accept # the product gate (376 checks)
89
+ gea accept # the product gate (386 checks)
90
90
  gea help drift # the help library, by the job (16 pages; the same text is on every dashboard page)
91
91
  gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
92
92
  gea gui # the desktop window (pip install "gea-program[desktop]")
@@ -609,10 +609,62 @@ 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
+ ### The charts
613
+
614
+ A well's page carries the Charts card: up to four channels stacked on one
615
+ horizontal axis, a cursor that reads them all at the same moment, cut from
616
+ every sample of the well's file. Drag across a stretch to zoom into it, the
617
+ wheel zooms where you point, double-click or Reset shows everything; the
618
+ keyboard does the same (arrows, + and -, Page Up and Page Down, Home). A
619
+ month-wide view keeps a one-second spike - each bucket is the minimum, the
620
+ maximum and the mean of its samples - and a stretch with no samples is drawn
621
+ empty, never bridged. On a drilling recorder's export the axis switches
622
+ between time and depth (the drilling samples by bit depth, kept off hole a
623
+ later sidetrack abandoned), the depth events are marked where they
624
+ happened, and each section of the recording is a button. The Wells page
625
+ carries the drilling progress of every drilling-recorder well: hole depth
626
+ against days, one colour per well. The refresh writes a chart cache per well
627
+ from the read it already makes; `gea help charts`.
628
+
629
+ ### The setup checklist
630
+
631
+ The Setup tab (`#/setup`, `gea checklist --workspace C:\site`) says what a
632
+ workspace still needs before its reports can be handed over, read from the
633
+ workspace as it stands: an administrator, the wells, a site record naming
634
+ the client, a backup folder off the machine, a current backup, the daily
635
+ schedule, current reports, and for each well its surface location and
636
+ datum, its reference elevation with its source, and its US Well Number.
637
+ Each item carries its own form or button - declare the position, take the
638
+ ground level from USGS 3DEP to check, create the site, back up now - and,
639
+ where every value is already known, the command to paste. The tab's badge
640
+ counts the required items still to do and the Home page names the next
641
+ one. A drilling record's depth events are confirmed by a person against
642
+ the daily drilling reports, with a note; the confirmation stops counting
643
+ if the record changes. `gea checklist` exits 0 when everything required is
644
+ done. `gea help setup`.
645
+
612
646
  ### Tools and ports
613
647
 
614
- The Tools & ports tab (`#/tools`, `gea tools`) is the program's two
615
- registers in one place: the tool library - every downhole and surface tool
648
+ The Tools & ports tab (`#/tools`, `gea tools`) opens on the **downhole tool
649
+ library**: every class of downhole tool in use across the industry - bits
650
+ and hole openers, motors and rotary steerable systems, MWD and LWD, the drill
651
+ string and its subs, casing and cementing equipment, completion and
652
+ artificial lift, wireline and cased-hole tools, fishing and milling, test
653
+ tools - ninety-six classes in nine categories. Point at a tool, or Tab to
654
+ it, for a one-line description; click, tap or press Enter for its tutorial:
655
+ what it is, where it runs, how it works, what it shows in the data, what to
656
+ watch, and what this program does with it, with the published figures
657
+ quoted from the pages they cite and the pages themselves. The tutorials
658
+ carry no numbers of their own; a figure on a tool's card is the cited page's
659
+ words, most often one maker's product, never a limit for the class. Your
660
+ **fleet** - the tools you actually run - goes in beside the classes, each
661
+ with its maker, model, serial and the datasheet that rates it
662
+ (`gea tools --action fleet-add --workspace C:\site --class pdm_motor
663
+ --maker ... --model ... --datasheet ...`, or from the tutorial), kept in the
664
+ workspace and audited. `gea tools --action classes`, `--action tutorial
665
+ --class drilling_jar`.
666
+
667
+ Below it are the program's two registers: the gauge library - every gauge
616
668
  with its source citation, ratings, what it measures, the telemetry interface
617
669
  it declares and its datasheet aging rate where the vendor published one -
618
670
  and the ports, the file formats read and the eleven live protocols spoken,
@@ -691,8 +743,14 @@ on bottom and rotating, the rate of penetration on bottom, the connections,
691
743
  the peaks; for the well, total depth and when the bit was first on bottom
692
744
  there, the recorder's TVD at it; per channel what was missing and how
693
745
  often; and the **MD-TVD table**, hole depth against the recorder's
694
- interpolated TVD, labelled an interpolation and not a survey. A recorder
695
- that resets its hole depth at a restart is named, not corrected. `gea edr
746
+ interpolated TVD, labelled an interpolation and not a survey. Before any
747
+ footage is counted the hole depth is read for what it can be trusted for:
748
+ a depth carried over from the last well, a depth set back and counted up
749
+ again by running pipe, a sidetrack, an overstated or understated depth
750
+ corrected - each named as a depth event in the record and on the well
751
+ page, and handled so that total depth is the final borehole's and the
752
+ footage adds up. The recorder's gamma is written as a LAS log by bit
753
+ depth. `gea edr
696
754
  --file C:\site\_incoming\30636033.csv`; `gea workspace --action add-file`
697
755
  then `refresh` for the record beside the well's other reports. `gea help
698
756
  edr`.
@@ -123,7 +123,7 @@ from .profile_catalog import (
123
123
  read_pangaea_txt,
124
124
  )
125
125
 
126
- __version__ = "0.30.0"
126
+ __version__ = "0.33.0"
127
127
  __all__ = [
128
128
  "aging_rate", "rate_psi_yr", "accuracy_psi",
129
129
  "Sensor", "SimulatorConfig", "DownholeEngine",
@@ -285,6 +285,17 @@ def main(argv=None) -> int:
285
285
  p_tl.add_argument("--station", type=str, action="append", default=None, help="a station as DEPTH_FT:TOOL, e.g. 9850:quartz_pt_geoq177_16k")
286
286
  p_tl.add_argument("--surface-temp-f", type=float, default=75.0); p_tl.add_argument("--temp-gradient-f-ft", type=float, default=0.018)
287
287
  p_tl.add_argument("--surface-pressure-psi", type=float, default=14.7); p_tl.add_argument("--pressure-gradient-psi-ft", type=float, default=0.465)
288
+ p_tl.add_argument("--action", choices=["classes", "tutorial", "fleet", "fleet-add", "fleet-remove"], default=None,
289
+ help="the downhole tool classes in use across the industry: classes (--category, --find), tutorial --class ID, and the workspace's own fleet (fleet, fleet-add, fleet-remove)")
290
+ p_tl.add_argument("--category", type=str, default=None, help="classes: one category (bits, drive, measure, bha, casing, completion, logging, fishing, testing)")
291
+ p_tl.add_argument("--find", type=str, default="", help="classes: words to look for in the name and description")
292
+ p_tl.add_argument("--class", dest="class_id", type=str, default=None, help="tutorial / fleet-add: the tool class id, e.g. pdm_motor")
293
+ p_tl.add_argument("--workspace", type=str, default=None, help="fleet actions: the workspace folder")
294
+ p_tl.add_argument("--maker", type=str, default=""); p_tl.add_argument("--model", type=str, default="")
295
+ p_tl.add_argument("--datasheet", type=str, default="", help="fleet-add: the datasheet that rates the tool - title and revision, or its URL (required)")
296
+ p_tl.add_argument("--serial", type=str, default=""); p_tl.add_argument("--od-in", type=float, default=None); p_tl.add_argument("--note", type=str, default="")
297
+ p_tl.add_argument("--id", type=str, default=None, help="fleet-remove: the fleet tool id (gea tools --action fleet lists them)")
298
+ p_tl.add_argument("--actor", type=str, default="cli")
288
299
  p_cc = sub.add_parser("comcat", help="USGS ComCat / any FDSN event service: --lat --lon --radius-km --start --end prints the text-format query to open; --file reads the export it returns")
289
300
  p_cc.add_argument("--lat", type=float, default=None); p_cc.add_argument("--lon", type=float, default=None); p_cc.add_argument("--radius-km", type=float, default=25.0)
290
301
  p_cc.add_argument("--start", type=str, default=None); p_cc.add_argument("--end", type=str, default=None); p_cc.add_argument("--min-mag", type=float, default=1.0)
@@ -457,6 +468,13 @@ def main(argv=None) -> int:
457
468
  p_ws.add_argument("--sat", action="store_true", help="refresh: also run the SAT protocol")
458
469
  p_ws.add_argument("--outage", action="append", default=None, help="refresh: outage window start/end (ISO), repeatable")
459
470
 
471
+ p_ck = sub.add_parser("checklist", help="the setup checklist: what this workspace still needs before its reports can be handed over - read from the workspace as it stands")
472
+ p_ck.add_argument("--workspace", type=str, default=None, help="the workspace folder, e.g. C:\\site")
473
+ p_ck.add_argument("--json", action="store_true")
474
+ p_ck.add_argument("--confirm", type=str, default=None, help="record a person's check of a confirmation item, e.g. events:Well-30636033")
475
+ p_ck.add_argument("--note", type=str, default="", help="--confirm: what it was checked against (required)")
476
+ p_ck.add_argument("--actor", type=str, default="cli")
477
+
460
478
  p_sv = sub.add_parser("serve", help="serve the dashboard over a workspace: the page, the reports and the JSON API (standard library HTTP)")
461
479
  p_sv.add_argument("--workspace", type=str, required=True, help="the workspace folder (gea workspace --action init)")
462
480
  p_sv.add_argument("--host", type=str, default="127.0.0.1", help="bind address; 0.0.0.0 exposes it on the site network (put TLS in front)")
@@ -1879,6 +1897,31 @@ def main(argv=None) -> int:
1879
1897
  elif a.cmd == "update":
1880
1898
  from .doctor import update as _update
1881
1899
  return _update(check_only=a.check, extras=a.extras, as_json=a.json)
1900
+ elif a.cmd == "checklist":
1901
+ import json as _json
1902
+ from . import setup_checklist as _SC
1903
+ from .cli import _safe_stdout
1904
+ from .workspace import Workspace, WorkspaceError
1905
+ _safe_stdout()
1906
+ if not a.workspace:
1907
+ raise SystemExit("checklist needs --workspace, e.g. --workspace C:\\site")
1908
+ try:
1909
+ ws = Workspace(a.workspace)
1910
+ except WorkspaceError as e:
1911
+ raise SystemExit(f"checklist: {e}")
1912
+ if a.confirm:
1913
+ try:
1914
+ rec = _SC.confirm(ws, a.confirm, a.actor, a.note)
1915
+ except ValueError as e:
1916
+ raise SystemExit(f"checklist: {e}")
1917
+ print(f"confirmed {a.confirm} by {rec['by']} at {rec['utc']}: {rec['note']}")
1918
+ return 0
1919
+ r = _SC.checklist(ws)
1920
+ if a.json:
1921
+ print(_json.dumps(r, indent=1))
1922
+ else:
1923
+ print(_SC.text(r))
1924
+ return 0 if r["ready"] else 2
1882
1925
  elif a.cmd == "serve":
1883
1926
  from .service import Service
1884
1927
  from .workspace import WorkspaceError
@@ -2067,16 +2110,19 @@ def main(argv=None) -> int:
2067
2110
  print(f"3DEP ground elevation {r['elev_ft']:,.2f} ft ({r['source']})")
2068
2111
  elif a.ref_elev_ft is not None or a.ref_elev_datum or a.ref_elev_source:
2069
2112
  surface["elevation"] = {"ft": a.ref_elev_ft, "datum": a.ref_elev_datum, "source": a.ref_elev_source}
2070
- disposal = {k: v for k, v in {"api_number": a.api, "uic_number": a.uic, "depth_tier": a.depth_tier, "formation_basis": a.formation,
2113
+ identity = {"api_number": a.api} if a.api else {}
2114
+ disposal = {k: v for k, v in {"uic_number": a.uic, "depth_tier": a.depth_tier, "formation_basis": a.formation,
2071
2115
  "channel_pressure": a.channel_pressure, "channel_rate": a.channel_rate, "rate_unit": a.rate_unit,
2072
2116
  "bhp_method": a.bhp_method, "channel_bhp": a.channel_bhp, "top_interval_ft": a.top_interval_ft,
2073
2117
  "base_interval_ft": a.base_interval_ft, "depth_reference": a.depth_ref,
2074
2118
  "gradient_psi_ft": a.gradient_psi_ft}.items() if v is not None}
2075
- if not surface and not disposal:
2119
+ if a.api and (disposal or (ws.well(a.well).get("disposal") or {})):
2120
+ disposal["api_number"] = a.api # a disposal well keeps its number in the block the SRA packet reads too
2121
+ if not surface and not disposal and not identity:
2076
2122
  raise SystemExit("set-well: nothing to declare (give --lat/--lon, --ref-elev-ft, or any of --api --uic --depth-tier --top-interval-ft ...)")
2077
2123
  surface = surface or None
2078
- w = ws.set_well(a.well, surface=surface, disposal=disposal or None, actor=a.actor)
2079
- print(f"well {a.well}: surface {w.get('surface')}; disposal {w.get('disposal')}"); return 0
2124
+ w = ws.set_well(a.well, surface=surface, disposal=disposal or None, identity=identity or None, actor=a.actor)
2125
+ print(f"well {a.well}: surface {w.get('surface')}; identity {w.get('identity')}; disposal {w.get('disposal')}"); return 0
2080
2126
  elif a.action == "sra-define":
2081
2127
  if not a.site or not a.name or a.lat is None or a.lon is None or a.radius_km is None or not a.plan_date:
2082
2128
  raise SystemExit("sra-define needs --site, --name, --lat, --lon, --radius-km and --plan-date")
@@ -2374,6 +2420,71 @@ def main(argv=None) -> int:
2374
2420
  elif a.cmd == "tools":
2375
2421
  import json as _json
2376
2422
  from . import tool_catalog as _TC
2423
+ if a.action:
2424
+ from . import tool_taxonomy as _TX
2425
+ from .cli import _safe_stdout
2426
+ _safe_stdout() # the cited figures carry fractions and degree signs
2427
+ if a.action == "classes":
2428
+ cs = _TX.classes(a.category, a.find)
2429
+ if a.category and a.category not in _TX.CATEGORY_NAMES:
2430
+ raise SystemExit(f"tools: no category {a.category!r}; one of {', '.join(_TX.CATEGORY_NAMES)}")
2431
+ if a.json:
2432
+ print(_json.dumps(cs, indent=1)); return 0
2433
+ sm = _TX.summary()
2434
+ print(f"{len(cs)} of {sm['classes']} tool classes; {sm['sources']} pages checked (fetched {sm['sources_fetched']}); {sm['figures']} published figures, each quoted from its page")
2435
+ last = None
2436
+ for t in cs:
2437
+ if t["category"] != last:
2438
+ print(f"\n{t['category_name']}"); last = t["category"]
2439
+ print(f" {t['id']:<24s} {t['name']}")
2440
+ print(f" {t['one_line']}")
2441
+ print("\n`gea tools --action tutorial --class ID` opens one.")
2442
+ return 0
2443
+ if a.action == "tutorial":
2444
+ if not a.class_id:
2445
+ raise SystemExit("tools: tutorial needs --class, e.g. --class pdm_motor (gea tools --action classes lists them)")
2446
+ try:
2447
+ if a.json:
2448
+ print(_json.dumps(_TX.tool_class(a.class_id), indent=1)); return 0
2449
+ print(_TX.tutorial_text(a.class_id))
2450
+ except KeyError as e:
2451
+ raise SystemExit(f"tools: {e.args[0]}")
2452
+ return 0
2453
+ if not a.workspace:
2454
+ raise SystemExit(f"tools: --action {a.action} needs --workspace, e.g. --workspace C:\\site")
2455
+ from .workspace import Workspace, WorkspaceError
2456
+ try:
2457
+ ws = Workspace(a.workspace)
2458
+ except WorkspaceError as e:
2459
+ raise SystemExit(f"tools: {e}")
2460
+ if a.action == "fleet":
2461
+ fl = _TX.fleet_list(ws.path)
2462
+ if a.json:
2463
+ print(_json.dumps(fl, indent=1)); return 0
2464
+ if not fl:
2465
+ print("the fleet is empty: gea tools --action fleet-add --workspace ... --class pdm_motor --maker ... --model ... --datasheet ...")
2466
+ for t in fl:
2467
+ print(f"{t['id']:<32s} {t['class_name']} - {t['maker']} {t['model']}" + (f" s/n {t['serial']}" if t['serial'] else '') + (f", {t['od_in']:g} in OD" if t['od_in'] else ''))
2468
+ print(f" datasheet: {t['datasheet']}")
2469
+ return 0
2470
+ if a.action == "fleet-add":
2471
+ try:
2472
+ rec = _TX.fleet_add(ws.path, a.class_id or "", a.maker, a.model, a.datasheet, serial=a.serial, od_in=a.od_in, note=a.note, actor=a.actor)
2473
+ except ValueError as e:
2474
+ raise SystemExit(f"tools: {e}")
2475
+ ws.audit(a.actor, 'fleet.add', {'id': rec['id'], 'class': rec['class_id'], 'datasheet': rec['datasheet']})
2476
+ print(f"added {rec['id']}: {rec['maker']} {rec['model']} ({rec['class_name']}); datasheet {rec['datasheet']}")
2477
+ return 0
2478
+ if a.action == "fleet-remove":
2479
+ if not a.id:
2480
+ raise SystemExit("tools: fleet-remove needs --id (gea tools --action fleet lists them)")
2481
+ try:
2482
+ rec = _TX.fleet_remove(ws.path, a.id)
2483
+ except ValueError as e:
2484
+ raise SystemExit(f"tools: {e}")
2485
+ ws.audit(a.actor, 'fleet.remove', {'id': rec['id'], 'class': rec['class_id']})
2486
+ print(f"removed {rec['id']}")
2487
+ return 0
2377
2488
  if a.rating or a.station:
2378
2489
  stations = []
2379
2490
  for spec in (a.station or []):