gea-program 0.1.0__py3-none-any.whl

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 (163) hide show
  1. gea/BENCH_TEST_PROTOCOL.md +97 -0
  2. gea/IMPORT_RECORD.md +61 -0
  3. gea/__init__.py +160 -0
  4. gea/__main__.py +661 -0
  5. gea/acceptance_tests.py +1315 -0
  6. gea/accuracy_statement.py +181 -0
  7. gea/alarm_engine.py +307 -0
  8. gea/bench.py +144 -0
  9. gea/blind_harness.py +108 -0
  10. gea/case_study.py +229 -0
  11. gea/catalog/acex_lomonosov_age_depth_model.provenance.json +23 -0
  12. gea/catalog/acex_lomonosov_age_depth_model.txt +28 -0
  13. gea/catalog/agassiz77_canada_temperature.csv +68 -0
  14. gea/catalog/agassiz77_canada_temperature.provenance.json +17 -0
  15. gea/catalog/barbados_110_consolidation.provenance.json +24 -0
  16. gea/catalog/barbados_110_consolidation.txt +91 -0
  17. gea/catalog/bengal_u1452_grain_size.provenance.json +20 -0
  18. gea/catalog/bengal_u1452_grain_size.txt +252 -0
  19. gea/catalog/blake_164_methane_isotopes.provenance.json +22 -0
  20. gea/catalog/blake_164_methane_isotopes.txt +68 -0
  21. gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +23 -0
  22. gea/catalog/chicxulub_m0077a_pwave_velocity.txt +735 -0
  23. gea/catalog/collingwood_1_28_ks_complete.las +128 -0
  24. gea/catalog/collingwood_1_28_ks_complete.provenance.json +17 -0
  25. gea/catalog/costa_rica_odp_friction_envelope.provenance.json +24 -0
  26. gea/catalog/costa_rica_odp_friction_envelope.txt +57 -0
  27. gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +21 -0
  28. gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +94 -0
  29. gea/catalog/dsdp_504b_physical_properties.provenance.json +24 -0
  30. gea/catalog/dsdp_504b_physical_properties.txt +82 -0
  31. gea/catalog/dsdp_504b_sound_velocity.provenance.json +21 -0
  32. gea/catalog/dsdp_504b_sound_velocity.txt +81 -0
  33. gea/catalog/elgygytgyn_5011_turbidites.provenance.json +20 -0
  34. gea/catalog/elgygytgyn_5011_turbidites.txt +193 -0
  35. gea/catalog/epica_domec_co2_800kyr.provenance.json +21 -0
  36. gea/catalog/epica_domec_co2_800kyr.txt +265 -0
  37. gea/catalog/fram_909_organic_petrography.provenance.json +22 -0
  38. gea/catalog/fram_909_organic_petrography.txt +40 -0
  39. gea/catalog/gbr_325_coral_uth_ages.provenance.json +23 -0
  40. gea/catalog/gbr_325_coral_uth_ages.txt +71 -0
  41. gea/catalog/gisp2_greenland_temperature.csv +599 -0
  42. gea/catalog/gisp2_greenland_temperature.provenance.json +17 -0
  43. gea/catalog/gom_308_t2p_insitu.provenance.json +21 -0
  44. gea/catalog/gom_308_t2p_insitu.txt +40 -0
  45. gea/catalog/guaymas_385_dom_d13c.provenance.json +21 -0
  46. gea/catalog/guaymas_385_dom_d13c.txt +103 -0
  47. gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +26 -0
  48. gea/catalog/hikurangi_u1520_friction_insitu.txt +74 -0
  49. gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +22 -0
  50. gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +60 -0
  51. gea/catalog/iodp_u1324_pore_pressure.provenance.json +22 -0
  52. gea/catalog/iodp_u1324_pore_pressure.txt +42 -0
  53. gea/catalog/jfast_c0019_slow_slip_events.provenance.json +28 -0
  54. gea/catalog/jfast_c0019_slow_slip_events.txt +35 -0
  55. gea/catalog/kennetcook_2_p129_excerpt.las +139 -0
  56. gea/catalog/kennetcook_2_p129_excerpt.provenance.json +17 -0
  57. gea/catalog/ktb_hb_bhgm_density.dat +227 -0
  58. gea/catalog/ktb_hb_bhgm_density.provenance.json +22 -0
  59. gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +20 -0
  60. gea/catalog/ktb_hb_complog_6020_excerpt.txt +72 -0
  61. gea/catalog/ktb_hb_hlog246_temperature.dat +1636 -0
  62. gea/catalog/ktb_hb_hlog246_temperature.provenance.json +22 -0
  63. gea/catalog/ktb_hb_rockmech_compress.dat +33 -0
  64. gea/catalog/ktb_hb_rockmech_compress.provenance.json +22 -0
  65. gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +2817 -0
  66. gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +20 -0
  67. gea/catalog/ktb_vb_rockmech_compress.dat +125 -0
  68. gea/catalog/ktb_vb_rockmech_compress.provenance.json +22 -0
  69. gea/catalog/ktb_vb_vlog251_temperature.dat +1127 -0
  70. gea/catalog/ktb_vb_vlog251_temperature.provenance.json +24 -0
  71. gea/catalog/l06_06_nl_survey.csv +201 -0
  72. gea/catalog/l06_06_nl_survey.provenance.json +17 -0
  73. gea/catalog/l07_01_nl_excerpt.las +90 -0
  74. gea/catalog/l07_01_nl_excerpt.provenance.json +17 -0
  75. gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +21 -0
  76. gea/catalog/mariana_1200_serpentinite_geochem.txt +63 -0
  77. gea/catalog/med_160_sapropels.provenance.json +22 -0
  78. gea/catalog/med_160_sapropels.txt +43 -0
  79. gea/catalog/nankai_megasplay_shear_strength.provenance.json +26 -0
  80. gea/catalog/nankai_megasplay_shear_strength.txt +42 -0
  81. gea/catalog/odp_1027b_thermal_conductivity.provenance.json +21 -0
  82. gea/catalog/odp_1027b_thermal_conductivity.txt +52 -0
  83. gea/catalog/odp_1027c_cork_temperature.provenance.json +20 -0
  84. gea/catalog/odp_1027c_cork_temperature.txt +26 -0
  85. gea/catalog/odp_1165b_thermal_conductivity.provenance.json +22 -0
  86. gea/catalog/odp_1165b_thermal_conductivity.txt +102 -0
  87. gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +27 -0
  88. gea/catalog/odp_1274a_mantle_peridotite_mad.txt +44 -0
  89. gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +27 -0
  90. gea/catalog/odp_504b_dike_elastic_moduli.txt +85 -0
  91. gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +19 -0
  92. gea/catalog/odp_504b_leg137_borehole_fluids.txt +68 -0
  93. gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +28 -0
  94. gea/catalog/odp_735b_gabbro_elastic_moduli.txt +127 -0
  95. gea/catalog/peru_201_sulfate_reduction.provenance.json +22 -0
  96. gea/catalog/peru_201_sulfate_reduction.txt +322 -0
  97. gea/catalog/scorpio_e1_sa_excerpt.las +113 -0
  98. gea/catalog/scorpio_e1_sa_excerpt.provenance.json +17 -0
  99. gea/catalog/sumatra_362_cohesion.provenance.json +21 -0
  100. gea/catalog/sumatra_362_cohesion.txt +38 -0
  101. gea/catalog/university_6_17_no1_tx_excerpt.las +119 -0
  102. gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +17 -0
  103. gea/catalog/ursa_308_xrd_mineralogy.provenance.json +21 -0
  104. gea/catalog/ursa_308_xrd_mineralogy.txt +46 -0
  105. gea/catalog/volve_15_9_19_sr_excerpt.las +183 -0
  106. gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +16 -0
  107. gea/catalog/volve_15_9_19a_core_excerpt.csv +88 -0
  108. gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +18 -0
  109. gea/catalog/volve_f12_f14_production_excerpt.csv +167 -0
  110. gea/catalog/volve_f12_f14_production_excerpt.provenance.json +21 -0
  111. gea/catalog/walvis_208_petm_carbonate.provenance.json +21 -0
  112. gea/catalog/walvis_208_petm_carbonate.txt +268 -0
  113. gea/catalog/woodlark_1109_rock_eval.provenance.json +23 -0
  114. gea/catalog/woodlark_1109_rock_eval.txt +30 -0
  115. gea/cli.py +125 -0
  116. gea/client_reports.py +943 -0
  117. gea/config_versioning.py +133 -0
  118. gea/correlation.py +155 -0
  119. gea/dashboard.py +390 -0
  120. gea/deviation.py +70 -0
  121. gea/downhole_engine.py +395 -0
  122. gea/drift_monitor.py +310 -0
  123. gea/earth_model.py +230 -0
  124. gea/example_register_map.json +14 -0
  125. gea/fat_sat.py +68 -0
  126. gea/follower.py +98 -0
  127. gea/forward_model.py +139 -0
  128. gea/gamma.py +176 -0
  129. gea/gauge_specs.py +112 -0
  130. gea/gravity_reference.py +116 -0
  131. gea/inverse_engine.py +215 -0
  132. gea/matplotlib_demo.py +85 -0
  133. gea/modbus.py +229 -0
  134. gea/model_card.py +248 -0
  135. gea/operator_app.py +442 -0
  136. gea/ports.py +340 -0
  137. gea/profile_catalog.py +773 -0
  138. gea/project.py +213 -0
  139. gea/qt6_downhole_app.py +144 -0
  140. gea/quartz_hpht_extension.py +152 -0
  141. gea/reconciler.py +206 -0
  142. gea/rock_inventory.py +404 -0
  143. gea/sample_record.py +430 -0
  144. gea/sample_well_profile.csv +15 -0
  145. gea/sbom.py +116 -0
  146. gea/segy.py +181 -0
  147. gea/service_life.py +173 -0
  148. gea/shell.py +107 -0
  149. gea/sla_report.py +199 -0
  150. gea/store_forward.py +234 -0
  151. gea/strata_join.py +186 -0
  152. gea/survey_cmd.py +264 -0
  153. gea/survey_view.py +138 -0
  154. gea/telemetry.py +306 -0
  155. gea/tool_library.py +260 -0
  156. gea/well_assembler.py +457 -0
  157. gea/well_test_validation.py +369 -0
  158. gea_program-0.1.0.dist-info/METADATA +138 -0
  159. gea_program-0.1.0.dist-info/RECORD +163 -0
  160. gea_program-0.1.0.dist-info/WHEEL +5 -0
  161. gea_program-0.1.0.dist-info/entry_points.txt +2 -0
  162. gea_program-0.1.0.dist-info/licenses/LICENSE +373 -0
  163. gea_program-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,97 @@
1
+ # Bench-Test Protocol — Measuring the 1.0324 Suppression Ratio
2
+
3
+ **Field-tier step 8 (independent evaluation, adopted 2026-08-27).**
4
+ Status of the quantity under test: `canonical_suppression()` = **1.0324 at
5
+ unity trims** is today a **DERIVED_HYBRID** composition — industry baseline
6
+ drift (0.215 %FS/yr class) with HPHT stress dressing, divided by a
7
+ locked-primitive GEA composition. It is **not** a measured constant, and the
8
+ product labels it so everywhere it appears. This protocol is the experiment
9
+ that would change — or refuse to change — that label.
10
+
11
+ ---
12
+
13
+ ## 1. Falsifiable prediction
14
+
15
+ Two matched GEOQ-177-class quartz P/T gauges (same spec, same batch
16
+ preferred), one operated with the GEA-informed configuration and one as the
17
+ conventional reference, co-located at a fixed HPHT setpoint, will exhibit a
18
+ long-term drift-rate ratio
19
+
20
+ ```
21
+ R = drift_conventional / drift_program = 1.0324 (at unity trims)
22
+ ```
23
+
24
+ equivalently a predicted separation rate of ~2.3 psi/yr at a 30,000-psi
25
+ full scale (the service-life module's number for these conditions). The
26
+ prediction is falsifiable in both directions: a measured R statistically
27
+ inconsistent with 1.0324 **refutes the composition at bench conditions**.
28
+
29
+ ## 2. Apparatus
30
+
31
+ - 2× (minimum; 3+ pairs preferred for scatter) quartz P/T gauges,
32
+ 177 °C / 30 kpsi class, from the same vendor lot.
33
+ - Temperature-controlled bath or HPHT vessel holding a setpoint in the
34
+ 150 °C / 10,000 psi class (inside every rating — the rating_check rule
35
+ applies on the bench too).
36
+ - Reference pressure standard, 0.01 %-class (deadweight tester or
37
+ transfer standard), for baseline and periodic checks.
38
+ - Logging at ≥ 1 reading/day per gauge into the package's historian CSV
39
+ format (`time_s` + one raw pressure column per gauge).
40
+
41
+ ## 3. Duration — the package's own rule applies
42
+
43
+ The reconciler refuses trend verdicts below its minimum span
44
+ (`ReconcilerConfig.min_trend_span_years`, the ≥18-day slope rule). The bench
45
+ protocol requires **≥ 90 days** at setpoint for slope confidence; 180+ days
46
+ preferred. The analysis tool enforces the 18-day floor mechanically and
47
+ reports `INSUFFICIENT_SPAN` below it — the bench cannot be rushed past the
48
+ product's own honesty rule.
49
+
50
+ ## 4. Procedure
51
+
52
+ 1. Baseline both gauges against the reference standard; record offsets.
53
+ 2. Install co-located at the setpoint; log continuously.
54
+ 3. Weekly: verify setpoint stability against the reference (do not adjust
55
+ the gauges under test).
56
+ 4. Export each leg as a historian CSV; run
57
+ `python -m gea bench --program-csv A.csv --conv-csv B.csv`.
58
+ 5. Repeat with roles swapped on a second pair (control for unit-to-unit
59
+ scatter — the piezo lesson: individual units scatter around class curves).
60
+
61
+ ## 5. Analysis and verdict vocabulary
62
+
63
+ `bench.bench_analysis()` fits each leg's drift slope (OLS, psi/yr →
64
+ %FS/yr), propagates slope uncertainties into the ratio, and returns one of:
65
+
66
+ - `MEASURED_CONFIRMS` — R within its own propagated uncertainty of 1.0324.
67
+ - `MEASURED_REFUTES` — R inconsistent with 1.0324 (the uncertainty is small
68
+ enough to exclude it). **This is a valid and useful outcome** — the
69
+ composition is falsified at bench conditions and the label stays
70
+ DERIVED_HYBRID with the refutation on record.
71
+ - `INSUFFICIENT_SPAN` — under the 18-day floor: no verdict.
72
+ - `INSUFFICIENT_SNR` — the uncertainty band contains both 1.0324 and 1.0
73
+ (cannot distinguish suppression from no-suppression): no verdict, more
74
+ data required.
75
+
76
+ ## 6. Outcome handling (labeling rules)
77
+
78
+ - **Confirmed:** `canonical_suppression()`'s label may move from
79
+ DERIVED_HYBRID to MEASURED_ON_BENCH **with the test ID, dates, apparatus
80
+ and per-pair results attached**. The composition's primitives are then a
81
+ measured-consistent model, not just a labeled one.
82
+ - **Refuted:** the label stays DERIVED_HYBRID; the refutation (conditions,
83
+ measured R, uncertainty) is recorded beside it. No silent retuning of
84
+ trims to fit the bench — a post-hoc trim fit would be a new calibration
85
+ claim, labeled as such, never a derivation.
86
+ - **Either way:** `U_i` remains loaded-but-unused in the drift formula until
87
+ a GEA derivation path for its role is supplied (Rule 10 — the framework
88
+ author provides the physics; the product does not invent it).
89
+
90
+ ## 7. Analysis-tool verification (available today, and labeled)
91
+
92
+ The analysis tool is verified NOW against the simulator's own twin legs:
93
+ `bench --selftest` generates synthetic paired-leg data from the engine's
94
+ models and must return `MEASURED_CONFIRMS` at R ≈ 1.0324. **This is a
95
+ SIMULATION_SELF_TEST — it verifies the analysis arithmetic, not the
96
+ physics.** It proves the bench pipeline is ready; it proves nothing about
97
+ gauges. The acceptance suite runs it on every gate.
gea/IMPORT_RECORD.md ADDED
@@ -0,0 +1,61 @@
1
+ # Import record
2
+
3
+ Source: Star-Magic-Program @ c16090852e28f35f0fcb31cba6384da566016a61 (uqff_downhole_simulator 1.91.0)
4
+ Package version: 0.1.0
5
+ Imported: 2026-09-29T19:34:53Z
6
+
7
+ | source | destination | sha256 (first 16) |
8
+ |---|---|---|
9
+ | uqff_downhole_simulator/(native tools/native/cli.py) | gea/cli.py | 241ce978934b032d |
10
+ | uqff_downhole_simulator/(native tools/native/shell.py) | gea/shell.py | 93a3f0221b773ce3 |
11
+ | uqff_downhole_simulator/__init__.py | gea/__init__.py | 3d1fc4e3158ecb4a |
12
+ | uqff_downhole_simulator/__main__.py | gea/__main__.py | fb4ae045d738d9fc |
13
+ | uqff_downhole_simulator/acceptance_tests.py | gea/acceptance_tests.py | c0e6fed3acd5d73b |
14
+ | uqff_downhole_simulator/accuracy_statement.py | gea/accuracy_statement.py | 0f0c8f30c802ad4b |
15
+ | uqff_downhole_simulator/alarm_engine.py | gea/alarm_engine.py | 2ca983787ba42f36 |
16
+ | uqff_downhole_simulator/client_reports.py | gea/client_reports.py | 2ea70a4a6a48b8cb |
17
+ | uqff_downhole_simulator/config_versioning.py | gea/config_versioning.py | cda47534351d0dc5 |
18
+ | uqff_downhole_simulator/dashboard.py | gea/dashboard.py | b5f5ecf17b082ff0 |
19
+ | uqff_downhole_simulator/drift_monitor.py | gea/drift_monitor.py | e532a0832f682c5c |
20
+ | uqff_downhole_simulator/fat_sat.py | gea/fat_sat.py | 49bb8c484670ae22 |
21
+ | uqff_downhole_simulator/matplotlib_demo.py | gea/matplotlib_demo.py | b50f8912788c3983 |
22
+ | uqff_downhole_simulator/model_card.py | gea/model_card.py | 11a9e15f0a4e1620 |
23
+ | uqff_downhole_simulator/qt6_downhole_app.py | gea/qt6_downhole_app.py | 1cf384f7ce1290bd |
24
+ | uqff_downhole_simulator/sample_record.py | gea/sample_record.py | 70fd0b4e9174b181 |
25
+ | uqff_downhole_simulator/sbom.py | gea/sbom.py | ba68811dbadfb999 |
26
+ | uqff_downhole_simulator/sla_report.py | gea/sla_report.py | e8fab50b054230e8 |
27
+ | uqff_downhole_simulator/store_forward.py | gea/store_forward.py | 3b0e038eb73ab22a |
28
+ | uqff_downhole_simulator/uqff_bench.py | gea/bench.py | 41e3cb75983a8013 |
29
+ | uqff_downhole_simulator/uqff_blind_harness.py | gea/blind_harness.py | 571f78e21ca5fbce |
30
+ | uqff_downhole_simulator/uqff_case_study.py | gea/case_study.py | f480097a40dedd20 |
31
+ | uqff_downhole_simulator/uqff_correlation.py | gea/correlation.py | 0d889d9767f44d96 |
32
+ | uqff_downhole_simulator/uqff_deviation.py | gea/deviation.py | b32a25990e1632f9 |
33
+ | uqff_downhole_simulator/uqff_differentiator.py | gea/(dropped) | - |
34
+ | uqff_downhole_simulator/uqff_downhole_engine.py | gea/downhole_engine.py | c3b9a6804ef0aadf |
35
+ | uqff_downhole_simulator/uqff_earth_model.py | gea/earth_model.py | b5605e54474bc32a |
36
+ | uqff_downhole_simulator/uqff_follower.py | gea/follower.py | 69224480b838757d |
37
+ | uqff_downhole_simulator/uqff_forward_model.py | gea/forward_model.py | 0c4c9889c053a131 |
38
+ | uqff_downhole_simulator/uqff_gamma.py | gea/gamma.py | 15b379e3d713094e |
39
+ | uqff_downhole_simulator/uqff_gauge_specs.py | gea/gauge_specs.py | 44828b3a9d90cba4 |
40
+ | uqff_downhole_simulator/uqff_gravity_reference.py | gea/gravity_reference.py | 1d006c95b118d6bf |
41
+ | uqff_downhole_simulator/uqff_inverse_engine.py | gea/inverse_engine.py | ce29836c3417e533 |
42
+ | uqff_downhole_simulator/uqff_modbus.py | gea/modbus.py | 5ecb5da8cc2bd520 |
43
+ | uqff_downhole_simulator/uqff_operator_app.py | gea/operator_app.py | df307c7496c09fee |
44
+ | uqff_downhole_simulator/uqff_ports.py | gea/ports.py | 65ee6ac33199167c |
45
+ | uqff_downhole_simulator/uqff_profile_catalog.py | gea/profile_catalog.py | bd680cd96e9f62ae |
46
+ | uqff_downhole_simulator/uqff_project.py | gea/project.py | fe6e2ea2a94f39a9 |
47
+ | uqff_downhole_simulator/uqff_quartz_hpht_extension.py | gea/quartz_hpht_extension.py | 0b76f77babdddb1a |
48
+ | uqff_downhole_simulator/uqff_reconciler.py | gea/reconciler.py | db611a20061765f6 |
49
+ | uqff_downhole_simulator/uqff_rock_inventory.py | gea/rock_inventory.py | 98b6f74e290d0812 |
50
+ | uqff_downhole_simulator/uqff_segy.py | gea/segy.py | 98e1917515371b36 |
51
+ | uqff_downhole_simulator/uqff_service_life.py | gea/service_life.py | cbabcde1c6afe9e7 |
52
+ | uqff_downhole_simulator/uqff_strata_join.py | gea/strata_join.py | a5d9ecec62b255e0 |
53
+ | uqff_downhole_simulator/uqff_structural_ladder.py | gea/(dropped) | - |
54
+ | uqff_downhole_simulator/uqff_survey_cmd.py | gea/survey_cmd.py | d0937bea85ae703c |
55
+ | uqff_downhole_simulator/uqff_survey_view.py | gea/survey_view.py | 790fdec7cbb2205b |
56
+ | uqff_downhole_simulator/uqff_telemetry.py | gea/telemetry.py | 839bcd9e6d576fd8 |
57
+ | uqff_downhole_simulator/uqff_tool_library.py | gea/tool_library.py | 40bc90e7ad18dfe4 |
58
+ | uqff_downhole_simulator/uqff_well_assembler.py | gea/well_assembler.py | cc1e92fb6da52d5c |
59
+ | uqff_downhole_simulator/well_test_validation.py | gea/well_test_validation.py | 08ca4fa66a0333eb |
60
+
61
+ Transformations: corpus import removed from quartz_hpht_extension (constants labelled as settings); forward_model on CODATA 2018 G, standard gravity and the IUGG mean radius; rock_inventory on the published anchors and range midpoints only; structural_ladder and differentiator dropped; survey report without the structural-frame section; identifiers renamed (see tools/import_from_star_magic.py).
gea/__init__.py ADDED
@@ -0,0 +1,160 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+ """gea — the GEA Downhole HPHT Quartz-Gauge Simulator.
5
+
6
+ The gea-program's first packaged industry-application module: a
7
+ deep-well (TD ~20,300 ft) six-gauge quartz P/T string with GEA-stabilized
8
+ drift, transient events, live animation (matplotlib / optional PyQt6), and
9
+ CSV export.
10
+
11
+ Provenance: ported 2026-08-22 (Daniel GO) from the 22Aug2026 Grok thread
12
+ template (grok_cce7a73b); canonical primitives locked, template tuning knobs
13
+ renamed to engineering trims per the knob ruling. See README.md and
14
+ PAPER_2256.
15
+
16
+ Quick use (headless):
17
+ from gea import DownholeEngine, SimulatorConfig
18
+ e = DownholeEngine()
19
+ for _ in range(100): e.step()
20
+ print(e.summary()); e.export_csv("run.csv")
21
+
22
+ Demos (need a display):
23
+ python -m gea.matplotlib_demo
24
+ python -m gea.qt6_downhole_app (pip install PyQt6)
25
+ """
26
+
27
+ from .quartz_hpht_extension import (
28
+ calculate_quartz_transducer_hpht_program,
29
+ canonical_suppression,
30
+ conventional_drift,
31
+ drift_comparison,
32
+ PROGRAM_MODEL_AVAILABLE,
33
+ )
34
+ from .downhole_engine import (
35
+ Sensor,
36
+ SimulatorConfig,
37
+ DownholeEngine,
38
+ WellProfile,
39
+ load_well_profile_csv,
40
+ make_sensor_string,
41
+ DEFAULT_TD_FT,
42
+ DEFAULT_SENSOR_DEPTHS_FT,
43
+ )
44
+ from .service_life import (
45
+ ServiceLifeConfig,
46
+ ServiceLifeSimulator,
47
+ )
48
+ from .telemetry import (
49
+ TelemetryConfig,
50
+ TelemetryRecorder,
51
+ )
52
+ from .case_study import (
53
+ CaseStudyConfig,
54
+ case_study,
55
+ depth_sweep,
56
+ write_markdown,
57
+ )
58
+ from .gauge_specs import (
59
+ GaugeSpec,
60
+ GAUGE_SPECS,
61
+ load_gauge_spec_json,
62
+ )
63
+ from .deviation import (
64
+ DeviationSurvey,
65
+ load_deviation_csv,
66
+ )
67
+ from .downhole_engine import run_batch
68
+ from .tool_library import (
69
+ ToolSpec,
70
+ TOOL_LIBRARY,
71
+ ToolString,
72
+ drift_model_for,
73
+ piezoresistive_drift,
74
+ rating_check,
75
+ )
76
+ from .ports import (
77
+ LiveStream,
78
+ StreamChannel,
79
+ PortSpec,
80
+ PORT_REGISTRY,
81
+ ingest,
82
+ read_historian_csv,
83
+ read_las,
84
+ register_port,
85
+ )
86
+ from .reconciler import (
87
+ Reconciler,
88
+ ReconcilerConfig,
89
+ auto_station_map,
90
+ )
91
+ from .follower import (
92
+ FollowerPoll,
93
+ HistorianFollower,
94
+ )
95
+ from .modbus import (
96
+ PYMODBUS_AVAILABLE,
97
+ RegisterMap,
98
+ load_register_map,
99
+ )
100
+ from .well_assembler import (
101
+ WellAssembly, WellComponent, assemble, assemble_ktb_hb, assemble_odp_504b,
102
+ assemble_site_1027, assemble_u1324, BUILTIN_ASSEMBLIES,
103
+ demo_config, production_live_stream,
104
+ )
105
+ from .gamma import (
106
+ find_gr_channels, shale_volume, formation_flags, gamma_report, gamma_entries,
107
+ )
108
+ from .bench import (
109
+ bench_analysis, bench_selftest,
110
+ )
111
+ from .operator_app import (
112
+ OperatorSession, launch_operator_app,
113
+ )
114
+ from .profile_catalog import (
115
+ CATALOG,
116
+ CatalogEntry,
117
+ PROFILE_SOURCES,
118
+ las_to_profile,
119
+ read_temperature_csv,
120
+ read_survey_csv,
121
+ read_core_csv,
122
+ read_production_csv,
123
+ read_ktb_dat,
124
+ read_ktb_table,
125
+ read_pangaea_txt,
126
+ )
127
+
128
+ __version__ = "0.1.0"
129
+ __all__ = [
130
+ "calculate_quartz_transducer_hpht_program", "canonical_suppression",
131
+ "conventional_drift", "drift_comparison",
132
+ "PROGRAM_MODEL_AVAILABLE", "Sensor", "SimulatorConfig", "DownholeEngine",
133
+ "WellProfile", "load_well_profile_csv", "make_sensor_string",
134
+ "ServiceLifeConfig", "ServiceLifeSimulator",
135
+ "TelemetryConfig", "TelemetryRecorder",
136
+ "CaseStudyConfig", "case_study", "depth_sweep", "write_markdown",
137
+ "GaugeSpec", "GAUGE_SPECS", "load_gauge_spec_json",
138
+ "DeviationSurvey", "load_deviation_csv", "run_batch",
139
+ "ToolSpec", "TOOL_LIBRARY", "ToolString", "drift_model_for",
140
+ "piezoresistive_drift", "rating_check",
141
+ "LiveStream", "StreamChannel", "PortSpec", "PORT_REGISTRY",
142
+ "ingest", "read_historian_csv", "read_las", "register_port",
143
+ "Reconciler", "ReconcilerConfig", "auto_station_map",
144
+ "FollowerPoll", "HistorianFollower",
145
+ "PYMODBUS_AVAILABLE", "RegisterMap", "load_register_map",
146
+ "CATALOG", "CatalogEntry", "PROFILE_SOURCES", "las_to_profile", "read_temperature_csv", "read_survey_csv", "read_core_csv", "read_production_csv", "read_ktb_dat", "read_ktb_table", "read_pangaea_txt",
147
+ "DEFAULT_TD_FT", "DEFAULT_SENSOR_DEPTHS_FT",
148
+ "strata_join",
149
+ "well_assembler", "gamma", "bench",
150
+ "operator_app", "acceptance_tests",
151
+ "reconcile_survey_tvd",
152
+ "earth_model",
153
+ "forward_model",
154
+ "inverse_engine",
155
+ "survey_view",
156
+ "correlation",
157
+ "blind_harness",
158
+ "segy",
159
+ "project",
160
+ ]