gea-program 0.3.0__tar.gz → 0.4.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 (203) hide show
  1. {gea_program-0.3.0/gea_program.egg-info → gea_program-0.4.0}/PKG-INFO +115 -5
  2. {gea_program-0.3.0 → gea_program-0.4.0}/README.md +114 -4
  3. {gea_program-0.3.0 → gea_program-0.4.0}/gea/__init__.py +3 -1
  4. {gea_program-0.3.0 → gea_program-0.4.0}/gea/__main__.py +291 -5
  5. {gea_program-0.3.0 → gea_program-0.4.0}/gea/acceptance_tests.py +866 -11
  6. {gea_program-0.3.0 → gea_program-0.4.0}/gea/alarm_engine.py +54 -9
  7. gea_program-0.4.0/gea/certificates.py +130 -0
  8. {gea_program-0.3.0 → gea_program-0.4.0}/gea/cli.py +37 -10
  9. {gea_program-0.3.0 → gea_program-0.4.0}/gea/client_reports.py +117 -5
  10. {gea_program-0.3.0 → gea_program-0.4.0}/gea/dashboard.py +110 -4
  11. gea_program-0.4.0/gea/doctor.py +214 -0
  12. {gea_program-0.3.0 → gea_program-0.4.0}/gea/fat_sat.py +6 -0
  13. gea_program-0.4.0/gea/files.py +367 -0
  14. gea_program-0.4.0/gea/help/TESTER_GUIDE.md +163 -0
  15. gea_program-0.4.0/gea/help/alarms.md +13 -0
  16. gea_program-0.4.0/gea/help/data-in.md +13 -0
  17. gea_program-0.4.0/gea/help/doctor.md +13 -0
  18. gea_program-0.4.0/gea/help/drift.md +13 -0
  19. gea_program-0.4.0/gea/help/files.md +13 -0
  20. gea_program-0.4.0/gea/help/instruments.md +13 -0
  21. gea_program-0.4.0/gea/help/notifications.md +13 -0
  22. gea_program-0.4.0/gea/help/patches.md +13 -0
  23. gea_program-0.4.0/gea/help/quality.md +13 -0
  24. gea_program-0.4.0/gea/help/site.md +15 -0
  25. gea_program-0.4.0/gea/help/start.md +13 -0
  26. gea_program-0.4.0/gea/help/transients.md +13 -0
  27. gea_program-0.4.0/gea/help/upkeep.md +13 -0
  28. gea_program-0.4.0/gea/help/well-tests.md +13 -0
  29. gea_program-0.4.0/gea/helplib.py +166 -0
  30. gea_program-0.4.0/gea/housekeeping.py +153 -0
  31. gea_program-0.4.0/gea/loadtest.py +115 -0
  32. gea_program-0.4.0/gea/notify.py +348 -0
  33. {gea_program-0.3.0 → gea_program-0.4.0}/gea/ports.py +6 -1
  34. gea_program-0.4.0/gea/sensor_swap.py +221 -0
  35. {gea_program-0.3.0 → gea_program-0.4.0}/gea/service.py +615 -21
  36. gea_program-0.4.0/gea/shut_in.py +201 -0
  37. gea_program-0.4.0/gea/transient.py +247 -0
  38. {gea_program-0.3.0 → gea_program-0.4.0}/gea/web/app.html +201 -20
  39. {gea_program-0.3.0 → gea_program-0.4.0}/gea/workspace.py +3 -2
  40. {gea_program-0.3.0 → gea_program-0.4.0/gea_program.egg-info}/PKG-INFO +115 -5
  41. {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/SOURCES.txt +25 -0
  42. {gea_program-0.3.0 → gea_program-0.4.0}/pyproject.toml +2 -2
  43. {gea_program-0.3.0 → gea_program-0.4.0}/LICENSE +0 -0
  44. {gea_program-0.3.0 → gea_program-0.4.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  45. {gea_program-0.3.0 → gea_program-0.4.0}/gea/accuracy_statement.py +0 -0
  46. {gea_program-0.3.0 → gea_program-0.4.0}/gea/bench.py +0 -0
  47. {gea_program-0.3.0 → gea_program-0.4.0}/gea/blind_harness.py +0 -0
  48. {gea_program-0.3.0 → gea_program-0.4.0}/gea/case_study.py +0 -0
  49. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  50. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  51. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  52. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  53. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  54. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  55. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  56. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  57. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  58. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  59. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  60. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  61. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  62. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  63. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  64. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  65. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  66. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  67. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  68. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  69. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  70. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  71. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  72. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  73. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  74. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  75. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  76. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  77. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  78. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  79. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  80. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  81. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  82. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  83. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  84. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  85. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  86. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  87. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  88. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  89. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  90. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  91. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  92. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  93. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  94. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  95. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  96. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  97. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  98. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  99. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  100. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  101. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  102. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  103. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  104. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  105. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  106. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  107. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  108. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  109. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  110. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  111. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  112. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  113. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  114. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  115. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  116. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/med_160_sapropels.txt +0 -0
  117. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  118. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  119. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  120. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  121. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  122. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  123. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  124. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  125. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  126. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  127. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  128. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  129. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  130. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  131. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  132. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  133. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  134. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  135. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  136. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  137. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  138. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  139. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  140. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  141. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  142. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  143. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  144. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  145. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  146. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  147. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  148. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  149. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  150. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  151. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  152. {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  153. {gea_program-0.3.0 → gea_program-0.4.0}/gea/config_versioning.py +0 -0
  154. {gea_program-0.3.0 → gea_program-0.4.0}/gea/correlation.py +0 -0
  155. {gea_program-0.3.0 → gea_program-0.4.0}/gea/deviation.py +0 -0
  156. {gea_program-0.3.0 → gea_program-0.4.0}/gea/downhole_engine.py +0 -0
  157. {gea_program-0.3.0 → gea_program-0.4.0}/gea/drift_monitor.py +0 -0
  158. {gea_program-0.3.0 → gea_program-0.4.0}/gea/earth_model.py +0 -0
  159. {gea_program-0.3.0 → gea_program-0.4.0}/gea/example_register_map.json +0 -0
  160. {gea_program-0.3.0 → gea_program-0.4.0}/gea/follower.py +0 -0
  161. {gea_program-0.3.0 → gea_program-0.4.0}/gea/forward_model.py +0 -0
  162. {gea_program-0.3.0 → gea_program-0.4.0}/gea/gamma.py +0 -0
  163. {gea_program-0.3.0 → gea_program-0.4.0}/gea/gauge_specs.py +0 -0
  164. {gea_program-0.3.0 → gea_program-0.4.0}/gea/gravity_reference.py +0 -0
  165. {gea_program-0.3.0 → gea_program-0.4.0}/gea/inverse_engine.py +0 -0
  166. {gea_program-0.3.0 → gea_program-0.4.0}/gea/jobs.py +0 -0
  167. {gea_program-0.3.0 → gea_program-0.4.0}/gea/live_ports.py +0 -0
  168. {gea_program-0.3.0 → gea_program-0.4.0}/gea/matplotlib_demo.py +0 -0
  169. {gea_program-0.3.0 → gea_program-0.4.0}/gea/modbus.py +0 -0
  170. {gea_program-0.3.0 → gea_program-0.4.0}/gea/model_card.py +0 -0
  171. {gea_program-0.3.0 → gea_program-0.4.0}/gea/mqtt_port.py +0 -0
  172. {gea_program-0.3.0 → gea_program-0.4.0}/gea/opcua_port.py +0 -0
  173. {gea_program-0.3.0 → gea_program-0.4.0}/gea/operator_app.py +0 -0
  174. {gea_program-0.3.0 → gea_program-0.4.0}/gea/patches.py +0 -0
  175. {gea_program-0.3.0 → gea_program-0.4.0}/gea/profile_catalog.py +0 -0
  176. {gea_program-0.3.0 → gea_program-0.4.0}/gea/project.py +0 -0
  177. {gea_program-0.3.0 → gea_program-0.4.0}/gea/qt6_downhole_app.py +0 -0
  178. {gea_program-0.3.0 → gea_program-0.4.0}/gea/quartz_hpht_extension.py +0 -0
  179. {gea_program-0.3.0 → gea_program-0.4.0}/gea/reconciler.py +0 -0
  180. {gea_program-0.3.0 → gea_program-0.4.0}/gea/rock_inventory.py +0 -0
  181. {gea_program-0.3.0 → gea_program-0.4.0}/gea/sample_record.py +0 -0
  182. {gea_program-0.3.0 → gea_program-0.4.0}/gea/sample_well_profile.csv +0 -0
  183. {gea_program-0.3.0 → gea_program-0.4.0}/gea/sbom.py +0 -0
  184. {gea_program-0.3.0 → gea_program-0.4.0}/gea/segy.py +0 -0
  185. {gea_program-0.3.0 → gea_program-0.4.0}/gea/service_life.py +0 -0
  186. {gea_program-0.3.0 → gea_program-0.4.0}/gea/shell.py +0 -0
  187. {gea_program-0.3.0 → gea_program-0.4.0}/gea/sla_report.py +0 -0
  188. {gea_program-0.3.0 → gea_program-0.4.0}/gea/store_forward.py +0 -0
  189. {gea_program-0.3.0 → gea_program-0.4.0}/gea/strata_join.py +0 -0
  190. {gea_program-0.3.0 → gea_program-0.4.0}/gea/survey_cmd.py +0 -0
  191. {gea_program-0.3.0 → gea_program-0.4.0}/gea/survey_view.py +0 -0
  192. {gea_program-0.3.0 → gea_program-0.4.0}/gea/telemetry.py +0 -0
  193. {gea_program-0.3.0 → gea_program-0.4.0}/gea/tool_library.py +0 -0
  194. {gea_program-0.3.0 → gea_program-0.4.0}/gea/well_assembler.py +0 -0
  195. {gea_program-0.3.0 → gea_program-0.4.0}/gea/well_test_validation.py +0 -0
  196. {gea_program-0.3.0 → gea_program-0.4.0}/gea/wits0.py +0 -0
  197. {gea_program-0.3.0 → gea_program-0.4.0}/gea/witsml.py +0 -0
  198. {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/dependency_links.txt +0 -0
  199. {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/entry_points.txt +0 -0
  200. {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/requires.txt +0 -0
  201. {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/top_level.txt +0 -0
  202. {gea_program-0.3.0 → gea_program-0.4.0}/setup.cfg +0 -0
  203. {gea_program-0.3.0 → gea_program-0.4.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.3.0
3
+ Version: 0.4.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
@@ -103,11 +103,16 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
103
103
  gea client-report --report accuracy --out client_report
104
104
  gea model-cards --out model_cards
105
105
  gea sbom --out sbom
106
- gea accept # the product gate (199 checks)
106
+ gea accept # the product gate (237 checks)
107
+ gea help drift # the help library, by the job (14 pages; the same text is on every dashboard page)
107
108
  gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
108
109
  gea gui # the desktop window (pip install "gea-program[desktop]")
109
110
  gea workspace --path C:\site --action init --name "Pad 3" # a site folder
110
111
  gea serve --workspace C:\site # the dashboard as the door: http://127.0.0.1:8765/
112
+ gea doctor --workspace C:\site # which code runs, can it serve, with every fix
113
+ gea files --workspace C:\site --action list --root historian # the import roots, detection by content, import, export, packs
114
+ gea transient --file historian.csv --params params.json --out pta # shut-ins and build-up analysis with a band
115
+ gea swaps / gea certificates / gea notify / gea housekeeping / gea loadtest # instruments, notification rules, site upkeep
111
116
  ```
112
117
 
113
118
  `gea` is the front door (`gea/cli.py`); every other subcommand passes through to
@@ -186,11 +191,23 @@ alarms and commits configuration; **approver** decides well tests and re-fits;
186
191
  ranking), Wells (add from a file, the catalogue or a live tag map; each well's
187
192
  reports, quality, trends, tests and alarms), Patch panel (supervised sources,
188
193
  their state and live values, their maps, live values), Alarms (the wall, acknowledge, definitions), Approvals (one queue),
194
+ Files (the import and export roots an administrator allows, browse with
195
+ detection by content, import into a well, "save to..." on every report, the
196
+ evidence pack, watch folders), Alarms (the wall: acknowledge one or all, shelve
197
+ with a reason and an expiry, unshelve; definitions), Approvals (one queue),
189
198
  Configuration (versioned JSON with history, diff and rollback), Reports
190
199
  (generate and open every report), Verification (the acceptance suite, FAT/SAT,
191
200
  SBOM and the standalone check from the page), Survey (a LAS file in, a strata
192
- report out), Jobs (every run with its log), Administration (users, schedule,
193
- audit log).
201
+ report out), Jobs (every run with its log), Administration (users, live
202
+ sessions, file roots, schedule, site settings, notifications, audit log). A
203
+ search box in the header spans wells, alarms, reports, jobs, configuration,
204
+ patches and schedules; the navigation shows badge counts (unacknowledged
205
+ alarms, decisions waiting, failed jobs, patches down); Home opens with what
206
+ happened since your last sign-in; every page has a help panel (the Help
207
+ button hides them); every timestamp is shown in your time zone and every
208
+ value in your units (field or SI - "Your preferences", with site defaults
209
+ under Administration); a first-run guide walks a new site through its
210
+ settings, first well, people and first refresh; every page prints cleanly.
194
211
 
195
212
  Every action the page takes is a job: `python -m gea <command>` run by the
196
213
  service with its log kept under `jobs/`, so one code path serves the page, the
@@ -212,6 +229,99 @@ evaluations and change logs), `reports/` (the printed dashboard and every
212
229
  report), `jobs/` (every run), `records/audit.jsonl`, `users.json`. All of it is
213
230
  text: JSON, JSON lines, CSV, Markdown, HTML.
214
231
 
232
+ ### The help library
233
+
234
+ `gea help` lists fourteen pages indexed by the job a reader arrives with -
235
+ start, bring data in, quality rules, drift, well tests, alarms and the month,
236
+ the site, instruments, shut-ins and build-ups, patches, files, notifications,
237
+ which code is running, upkeep. Each page carries four lines and stops: the
238
+ command, what it writes, the one number to check, and what the page will not
239
+ call a measurement. The pages ship inside the package (`gea/help/`), and the
240
+ same text is what `/api/help` serves and what the dashboard shows under every
241
+ heading and under Help, so the terminal and the page cannot drift apart. The
242
+ click-by-click tester guide ships with them: `gea guide`.
243
+
244
+ ### Which code is running
245
+
246
+ `gea doctor` answers the question every stale-page report comes down to:
247
+ which Python, which copy of the package, does pip's record match the code
248
+ that runs (an editable checkout or an installed release), is another copy
249
+ shadowing it, is the page present, which dependencies are installed, is a
250
+ newer release on PyPI; with `--workspace` it also checks the site folder, the
251
+ accounts, the patches, a free port and write access. Every finding carries
252
+ its fix. `gea serve` runs the same checks and does not start on a blocking
253
+ finding, so a stale page is never served silently.
254
+
255
+ ### Notifications
256
+
257
+ Rules route events to channels: a webhook URL or an SMTP mailbox. Events:
258
+ `alarm.activated` (by priority), `alarm.shelved`, `job.failed`, `patch.down`
259
+ and `patch.up`, `approval.pending`, `file.imported`. A quiet window stops
260
+ repeats of the same key; every attempt and every suppression is in
261
+ `records/notifications.jsonl`; an SMTP password is read from the environment
262
+ variable the channel names, never from the configuration. `gea notify
263
+ --example` prints a configuration to commit as `notifications` (Administration
264
+ has the editor and a "send a test" button per channel).
265
+
266
+ ### Instruments and transients
267
+
268
+ A swapped gauge is a new instrument. Record the swap on the well page (or
269
+ confirm one the step detector proposes - it looks for a jump in a gauge's
270
+ offset against its peers, which a process change does not produce) and the
271
+ drift fit restarts at the swap, with the swap printed in the report. File the
272
+ calibration certificate of each instrument (serial, lab, dates, stated
273
+ accuracy; the document is kept and hashed) and its status - VALID, EXPIRING,
274
+ EXPIRED, MISSING - is on the well page, on Home, and beside the measured bias
275
+ in the drift report, so a reader sees whether a bias is inside the
276
+ instrument's own class.
277
+
278
+ Every shut-in in a record (found by the rate channel, the on-stream hours, or
279
+ the pressure signature alone when there is no rate - marked so) gets a
280
+ build-up analysis on the next refresh: Horner slope and p* on a middle-time
281
+ region chosen by the flat Bourdet derivative, wellbore storage, and - once the
282
+ rock and fluid parameters are saved on the well page - kh, k, skin and the
283
+ radius of investigation, each with a 90 % band from a residual bootstrap. The
284
+ Shut-in and Pressure Transient report prints the region and the rule that
285
+ chose it; an analyst can move the region (`gea transient --mtr 2:40`) and the
286
+ result follows. It is the first look every shut-in should get automatically,
287
+ not a replacement for a full interpretation, and it says so.
288
+
289
+ ### Before a site goes live
290
+
291
+ `deploy/README.md` is the checklist: keep the service on the loopback
292
+ address and put a TLS proxy in front (`deploy/Caddyfile`,
293
+ `deploy/nginx-gea.conf`), start with `--behind-proxy`. The service itself
294
+ rate-limits sign-ins (five failures lock the name and the address for 15
295
+ minutes, audited), lists and revokes live sessions, sends the security
296
+ headers on every response, and `gea housekeeping --workspace C:\site --apply`
297
+ (schedule it daily from Administration) segments the append-only logs rather
298
+ than truncating them and prunes finished job folders and old recordings. `gea
299
+ loadtest --patches 16 --seconds 60 --with-service` tells you whether the site
300
+ machine carries the patches it will be given, with the page still answering.
301
+
302
+ ## The standalone install kit
303
+
304
+ A client site often has no internet and no Python. The kit is one folder
305
+ (and one zip) that carries its own Python, the package and every dependency
306
+ as files, with the scripts a site needs; it installs without a network and
307
+ without administrator rights, and keeps the site's data in a separate
308
+ workspace folder it never deletes.
309
+
310
+ ```
311
+ python tools/build_installer.py # dist/gea-program-<version>-win64/ and .zip (needs internet here, none there)
312
+ python tools/build_installer.py --extras live,plotting,xls,desktop # add the PyQt6 desktop window (~100 MB)
313
+ python tools/build_installer.py --platform linux # a venv-based kit for a Linux site server
314
+ ```
315
+
316
+ At the site: unzip, `install.cmd`, `start-dashboard.cmd`; the browser opens
317
+ `http://127.0.0.1:8765/`. `verify.cmd` runs the acceptance gate from the
318
+ installed kit (the client's own evidence), `register-service.cmd` starts the
319
+ dashboard at logon, `uninstall.cmd` removes the kit and leaves the workspace.
320
+ `SHA256SUMS.txt` lets the site verify the kit after copying it. Every tag
321
+ builds the Windows and Linux kits in CI (`build-installer.yml`), installs
322
+ them the way a client does, runs the gate from the installed kit, and
323
+ attaches the zips to the GitHub release of that tag.
324
+
215
325
  ## Layout
216
326
 
217
327
  ```
@@ -221,7 +331,7 @@ gea/catalog/ 52 public archive entries, each with a provenance file
221
331
  docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
222
332
  SESSION_LOG.md (the working record, session by session),
223
333
  commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
224
- tools/ standalone_check.py (the self-contained guard: imports, text, metadata; run by ci and ship.ps1)
334
+ tools/ standalone_check.py (the self-contained guard; run by ci and ship.ps1), build_installer.py (the kit)
225
335
  CHANGELOG.md per-release summary (a tag ships only with its section); SHIP_LOG.md is written by ship.ps1
226
336
  tests/ pytest wrapper around the acceptance suite and the standalone check
227
337
  ```
@@ -64,11 +64,16 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
64
64
  gea client-report --report accuracy --out client_report
65
65
  gea model-cards --out model_cards
66
66
  gea sbom --out sbom
67
- gea accept # the product gate (199 checks)
67
+ gea accept # the product gate (237 checks)
68
+ gea help drift # the help library, by the job (14 pages; the same text is on every dashboard page)
68
69
  gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
69
70
  gea gui # the desktop window (pip install "gea-program[desktop]")
70
71
  gea workspace --path C:\site --action init --name "Pad 3" # a site folder
71
72
  gea serve --workspace C:\site # the dashboard as the door: http://127.0.0.1:8765/
73
+ gea doctor --workspace C:\site # which code runs, can it serve, with every fix
74
+ gea files --workspace C:\site --action list --root historian # the import roots, detection by content, import, export, packs
75
+ gea transient --file historian.csv --params params.json --out pta # shut-ins and build-up analysis with a band
76
+ gea swaps / gea certificates / gea notify / gea housekeeping / gea loadtest # instruments, notification rules, site upkeep
72
77
  ```
73
78
 
74
79
  `gea` is the front door (`gea/cli.py`); every other subcommand passes through to
@@ -147,11 +152,23 @@ alarms and commits configuration; **approver** decides well tests and re-fits;
147
152
  ranking), Wells (add from a file, the catalogue or a live tag map; each well's
148
153
  reports, quality, trends, tests and alarms), Patch panel (supervised sources,
149
154
  their state and live values, their maps, live values), Alarms (the wall, acknowledge, definitions), Approvals (one queue),
155
+ Files (the import and export roots an administrator allows, browse with
156
+ detection by content, import into a well, "save to..." on every report, the
157
+ evidence pack, watch folders), Alarms (the wall: acknowledge one or all, shelve
158
+ with a reason and an expiry, unshelve; definitions), Approvals (one queue),
150
159
  Configuration (versioned JSON with history, diff and rollback), Reports
151
160
  (generate and open every report), Verification (the acceptance suite, FAT/SAT,
152
161
  SBOM and the standalone check from the page), Survey (a LAS file in, a strata
153
- report out), Jobs (every run with its log), Administration (users, schedule,
154
- audit log).
162
+ report out), Jobs (every run with its log), Administration (users, live
163
+ sessions, file roots, schedule, site settings, notifications, audit log). A
164
+ search box in the header spans wells, alarms, reports, jobs, configuration,
165
+ patches and schedules; the navigation shows badge counts (unacknowledged
166
+ alarms, decisions waiting, failed jobs, patches down); Home opens with what
167
+ happened since your last sign-in; every page has a help panel (the Help
168
+ button hides them); every timestamp is shown in your time zone and every
169
+ value in your units (field or SI - "Your preferences", with site defaults
170
+ under Administration); a first-run guide walks a new site through its
171
+ settings, first well, people and first refresh; every page prints cleanly.
155
172
 
156
173
  Every action the page takes is a job: `python -m gea <command>` run by the
157
174
  service with its log kept under `jobs/`, so one code path serves the page, the
@@ -173,6 +190,99 @@ evaluations and change logs), `reports/` (the printed dashboard and every
173
190
  report), `jobs/` (every run), `records/audit.jsonl`, `users.json`. All of it is
174
191
  text: JSON, JSON lines, CSV, Markdown, HTML.
175
192
 
193
+ ### The help library
194
+
195
+ `gea help` lists fourteen pages indexed by the job a reader arrives with -
196
+ start, bring data in, quality rules, drift, well tests, alarms and the month,
197
+ the site, instruments, shut-ins and build-ups, patches, files, notifications,
198
+ which code is running, upkeep. Each page carries four lines and stops: the
199
+ command, what it writes, the one number to check, and what the page will not
200
+ call a measurement. The pages ship inside the package (`gea/help/`), and the
201
+ same text is what `/api/help` serves and what the dashboard shows under every
202
+ heading and under Help, so the terminal and the page cannot drift apart. The
203
+ click-by-click tester guide ships with them: `gea guide`.
204
+
205
+ ### Which code is running
206
+
207
+ `gea doctor` answers the question every stale-page report comes down to:
208
+ which Python, which copy of the package, does pip's record match the code
209
+ that runs (an editable checkout or an installed release), is another copy
210
+ shadowing it, is the page present, which dependencies are installed, is a
211
+ newer release on PyPI; with `--workspace` it also checks the site folder, the
212
+ accounts, the patches, a free port and write access. Every finding carries
213
+ its fix. `gea serve` runs the same checks and does not start on a blocking
214
+ finding, so a stale page is never served silently.
215
+
216
+ ### Notifications
217
+
218
+ Rules route events to channels: a webhook URL or an SMTP mailbox. Events:
219
+ `alarm.activated` (by priority), `alarm.shelved`, `job.failed`, `patch.down`
220
+ and `patch.up`, `approval.pending`, `file.imported`. A quiet window stops
221
+ repeats of the same key; every attempt and every suppression is in
222
+ `records/notifications.jsonl`; an SMTP password is read from the environment
223
+ variable the channel names, never from the configuration. `gea notify
224
+ --example` prints a configuration to commit as `notifications` (Administration
225
+ has the editor and a "send a test" button per channel).
226
+
227
+ ### Instruments and transients
228
+
229
+ A swapped gauge is a new instrument. Record the swap on the well page (or
230
+ confirm one the step detector proposes - it looks for a jump in a gauge's
231
+ offset against its peers, which a process change does not produce) and the
232
+ drift fit restarts at the swap, with the swap printed in the report. File the
233
+ calibration certificate of each instrument (serial, lab, dates, stated
234
+ accuracy; the document is kept and hashed) and its status - VALID, EXPIRING,
235
+ EXPIRED, MISSING - is on the well page, on Home, and beside the measured bias
236
+ in the drift report, so a reader sees whether a bias is inside the
237
+ instrument's own class.
238
+
239
+ Every shut-in in a record (found by the rate channel, the on-stream hours, or
240
+ the pressure signature alone when there is no rate - marked so) gets a
241
+ build-up analysis on the next refresh: Horner slope and p* on a middle-time
242
+ region chosen by the flat Bourdet derivative, wellbore storage, and - once the
243
+ rock and fluid parameters are saved on the well page - kh, k, skin and the
244
+ radius of investigation, each with a 90 % band from a residual bootstrap. The
245
+ Shut-in and Pressure Transient report prints the region and the rule that
246
+ chose it; an analyst can move the region (`gea transient --mtr 2:40`) and the
247
+ result follows. It is the first look every shut-in should get automatically,
248
+ not a replacement for a full interpretation, and it says so.
249
+
250
+ ### Before a site goes live
251
+
252
+ `deploy/README.md` is the checklist: keep the service on the loopback
253
+ address and put a TLS proxy in front (`deploy/Caddyfile`,
254
+ `deploy/nginx-gea.conf`), start with `--behind-proxy`. The service itself
255
+ rate-limits sign-ins (five failures lock the name and the address for 15
256
+ minutes, audited), lists and revokes live sessions, sends the security
257
+ headers on every response, and `gea housekeeping --workspace C:\site --apply`
258
+ (schedule it daily from Administration) segments the append-only logs rather
259
+ than truncating them and prunes finished job folders and old recordings. `gea
260
+ loadtest --patches 16 --seconds 60 --with-service` tells you whether the site
261
+ machine carries the patches it will be given, with the page still answering.
262
+
263
+ ## The standalone install kit
264
+
265
+ A client site often has no internet and no Python. The kit is one folder
266
+ (and one zip) that carries its own Python, the package and every dependency
267
+ as files, with the scripts a site needs; it installs without a network and
268
+ without administrator rights, and keeps the site's data in a separate
269
+ workspace folder it never deletes.
270
+
271
+ ```
272
+ python tools/build_installer.py # dist/gea-program-<version>-win64/ and .zip (needs internet here, none there)
273
+ python tools/build_installer.py --extras live,plotting,xls,desktop # add the PyQt6 desktop window (~100 MB)
274
+ python tools/build_installer.py --platform linux # a venv-based kit for a Linux site server
275
+ ```
276
+
277
+ At the site: unzip, `install.cmd`, `start-dashboard.cmd`; the browser opens
278
+ `http://127.0.0.1:8765/`. `verify.cmd` runs the acceptance gate from the
279
+ installed kit (the client's own evidence), `register-service.cmd` starts the
280
+ dashboard at logon, `uninstall.cmd` removes the kit and leaves the workspace.
281
+ `SHA256SUMS.txt` lets the site verify the kit after copying it. Every tag
282
+ builds the Windows and Linux kits in CI (`build-installer.yml`), installs
283
+ them the way a client does, runs the gate from the installed kit, and
284
+ attaches the zips to the GitHub release of that tag.
285
+
176
286
  ## Layout
177
287
 
178
288
  ```
@@ -182,7 +292,7 @@ gea/catalog/ 52 public archive entries, each with a provenance file
182
292
  docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
183
293
  SESSION_LOG.md (the working record, session by session),
184
294
  commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
185
- tools/ standalone_check.py (the self-contained guard: imports, text, metadata; run by ci and ship.ps1)
295
+ tools/ standalone_check.py (the self-contained guard; run by ci and ship.ps1), build_installer.py (the kit)
186
296
  CHANGELOG.md per-release summary (a tag ships only with its section); SHIP_LOG.md is written by ship.ps1
187
297
  tests/ pytest wrapper around the acceptance suite and the standalone check
188
298
  ```
@@ -99,6 +99,8 @@ from .modbus import (
99
99
  )
100
100
  from .opcua_port import ASYNCUA_AVAILABLE, OpcUaTap # registers the 'opcua' port at import
101
101
  from .mqtt_port import PAHO_AVAILABLE, MqttTap # registers the 'mqtt' port at import
102
+ from .wits0 import Wits0Tap, SERIAL_AVAILABLE # registers the 'wits0' port at import
103
+ from .witsml import WitsmlTap # registers the 'witsml' port at import
102
104
  from .well_assembler import (
103
105
  WellAssembly, WellComponent, assemble, assemble_ktb_hb, assemble_odp_504b,
104
106
  assemble_site_1027, assemble_u1324, BUILTIN_ASSEMBLIES,
@@ -127,7 +129,7 @@ from .profile_catalog import (
127
129
  read_pangaea_txt,
128
130
  )
129
131
 
130
- __version__ = "0.3.0"
132
+ __version__ = "0.4.0"
131
133
  __all__ = [
132
134
  "calculate_quartz_transducer_hpht_program", "canonical_suppression",
133
135
  "conventional_drift", "drift_comparison",