star-magic-program 0.395.0__tar.gz → 0.396.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.
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/CHANGELOG.md +32 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/CITATION.cff +3 -3
- {star_magic_program-0.395.0/star_magic_program.egg-info → star_magic_program-0.396.0}/PKG-INFO +8 -8
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/README.md +6 -6
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/SESSION_LOG.md +37 -0
- star_magic_program-0.396.0/UNIFIED_REGISTRY_VERSION.txt +1 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_XGEO_QUEUE.csv +1 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_XGEO_ROUTES.csv +1 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/_BUILD_LOG.md +3 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/pyproject.toml +2 -2
- {star_magic_program-0.395.0 → star_magic_program-0.396.0/star_magic_program.egg-info}/PKG-INFO +8 -8
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/star_magic_program.egg-info/SOURCES.txt +4 -1
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_calculator.py +1 -1
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/README.md +76 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/__init__.py +29 -1
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/__main__.py +20 -0
- star_magic_program-0.396.0/uqff_downhole_simulator/uqff_ports.py +277 -0
- star_magic_program-0.396.0/uqff_downhole_simulator/uqff_reconciler.py +203 -0
- star_magic_program-0.396.0/uqff_downhole_simulator/uqff_tool_library.py +257 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_fidelity_tests.py +119 -6
- star_magic_program-0.395.0/UNIFIED_REGISTRY_VERSION.txt +0 -1
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/AUDIT_500_PAPER_REPORT.md +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/COMMERCIAL.md +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/LICENSE +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/LICENSE-AGPL-3.0.txt +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/LICENSE-MIT-INITIAL.txt +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/NOTICE +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_ANCHORS.csv +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_EXACT_IDENTITIES.csv +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_FALSIFIABILITY.md +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_OPEN_ITEMS.csv +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_PARADOX_CENSUS.csv +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_PREDICTIONS.csv +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_PROGRAM_PLAN.md +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_RESIDUALS.csv +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_RESULTS_TABLE.md +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_SCHEMA.md +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_STATUS_REPORT.md +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_XGEO_CONFIRMATIONS.csv +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_XGEO_EXTRACTED.csv +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/WHITEPAPER_INDEX.md +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/notebooks/00_quickstart.ipynb +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/reference/COMPLETE_UQFF_EQUATIONS_REFERENCE.pdf +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/reference/Star-Magic_manuscript_v5.pdf +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/reference/UQFF_VALIDATION_SYNC_AUDIT.pdf +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/reference/uqff_production_arxiv.pdf +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/registry_generator.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/setup.cfg +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/star_magic_program.egg-info/dependency_links.txt +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/star_magic_program.egg-info/requires.txt +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/star_magic_program.egg-info/top_level.txt +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_backbone_locks.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_derived_constants.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_derived_functions.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/matplotlib_demo.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/qt6_downhole_app.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/sample_well_profile.csv +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_case_study.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_deviation.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_downhole_engine.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_gauge_specs.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_quartz_hpht_extension.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_service_life.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_telemetry.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_fubii_variants.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_material_landmarks.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_ngc_catalog.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_primitive_identities.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_registry_graph.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_registry_primitives.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_registry_status.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_registry_xgeo.py +0 -0
- {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_session_closures.py +0 -0
|
@@ -7,6 +7,38 @@ Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v0.396.0 — 2026-08-24 — THE TWO-STREAM SHIP
|
|
11
|
+
|
|
12
|
+
`uqff_downhole_simulator` v1.7.0–v1.9.0 — Daniel's two-stream architecture
|
|
13
|
+
(closed theoretical stream vs live site stream, coordinated to find offset
|
|
14
|
+
undervalued data) built COMPLETE:
|
|
15
|
+
|
|
16
|
+
- **v1.7.0 the tool library** — cited catalog of 8 toolstring entries: quartz
|
|
17
|
+
twins (wrapping the GEOQ 177 specs), piezoresistive class (drift FORM cited
|
|
18
|
+
from ChampionX — exponential in temperature; coefficients disclosed as
|
|
19
|
+
representative fit), vibrating wire / thermocouple card / DTS fiber as
|
|
20
|
+
PARAMETERS_USER_SUPPLIED (refusing invented vendor numbers), and the G6
|
|
21
|
+
Modbus-RS485 surface interface declared as the ports target. ToolString +
|
|
22
|
+
station rating checks (catches a 177 °C gauge in the 217 °C kick zone).
|
|
23
|
+
- **v1.8.0 the ports/plug-in layer** — READ-ONLY ingest to the normalized
|
|
24
|
+
LiveStream form. IMPLEMENTED: historian CSV (round-trip verified against the
|
|
25
|
+
v1.3.0 telemetry export to precision) and LAS 2.0 (CWLS standard; NULL→NaN;
|
|
26
|
+
wrapped mode refused, never mis-parsed). DECLARED (refusing until site
|
|
27
|
+
details): modbus_g6, witsml, opcua. register_port() for site plug-ins;
|
|
28
|
+
CLI `ingest`.
|
|
29
|
+
- **v1.9.0 the reconciler** — per-station offset series classified IN_FAMILY /
|
|
30
|
+
CALIBRATION_OFFSET / DRIFT_CONSISTENT / TRANSIENTS / UNEXPLAINED, thresholds
|
|
31
|
+
disclosed in every report. Four-scenario validation per gate run: clean well
|
|
32
|
+
6/6 in-family; +50 psi bias recovered at 50.09; 2-yr drift inside the
|
|
33
|
+
spec-aware envelope; THE FIND — kick well vs linear-gradient assumption
|
|
34
|
+
flags 610/4,448/6,083 psi unexplained offsets. CLI `reconcile`.
|
|
35
|
+
|
|
36
|
+
Also: v0.395.0 red-gate portability fix hardened (PORTABILITY GUARD self-scan).
|
|
37
|
+
Gate 5,801 → 5,816. PAPER_2256 +3 appendices (6/7/8). Zero calculator physics
|
|
38
|
+
changes; zero new dispatches.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
10
42
|
## v0.395.0 — 2026-08-23 — THE INSTRUMENT SHIP
|
|
11
43
|
|
|
12
44
|
`uqff_downhole_simulator` v1.2.0–v1.6.0 (Daniel-directed extension list, complete):
|
|
@@ -3,8 +3,8 @@ message: "If you use Star-Magic-Program (UQFF systematic rebuild) in your resear
|
|
|
3
3
|
type: software
|
|
4
4
|
title: "Star-Magic-Program: UQFF Systematic Rebuild"
|
|
5
5
|
abbreviation: "UQFF"
|
|
6
|
-
version: "0.
|
|
7
|
-
date-released: "2026-08-
|
|
6
|
+
version: "0.396.0"
|
|
7
|
+
date-released: "2026-08-24"
|
|
8
8
|
authors:
|
|
9
9
|
- family-names: "Murphy"
|
|
10
10
|
given-names: "Daniel T."
|
|
@@ -53,7 +53,7 @@ preferred-citation:
|
|
|
53
53
|
- family-names: "Murphy"
|
|
54
54
|
given-names: "Daniel T."
|
|
55
55
|
year: 2026
|
|
56
|
-
version: "0.
|
|
56
|
+
version: "0.396.0"
|
|
57
57
|
url: "https://github.com/Daniel8Murphy0007/Star-Magic-Program"
|
|
58
58
|
notes: >-
|
|
59
59
|
Cite both the software and the relevant whitepapers by PAPER_N
|
{star_magic_program-0.395.0/star_magic_program.egg-info → star_magic_program-0.396.0}/PKG-INFO
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: star-magic-program
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Star-Magic UQFF calculator v0.
|
|
3
|
+
Version: 0.396.0
|
|
4
|
+
Summary: Star-Magic UQFF calculator v0.396.0: THE TWO-STREAM SHIP. 2,252 dispatches (2,307 keys), gate 5,816/0. uqff_downhole_simulator v1.7.0-v1.9.0 completes Daniel's two-stream architecture: cited tool library (8 entries, no invented vendor data), read-only ports (historian CSV + LAS 2.0 implemented, live taps declared), and the two-stream reconciler - closed-stream predictions vs live data, offsets classified, undervalued streams flagged (kick-well find: 6,083 psi unexplained). Next: PAPER_2257.
|
|
5
5
|
Author-email: "Daniel T. Murphy" <daniel.murphy00@enrgyone.com>
|
|
6
6
|
License: AGPL-3.0-or-later OR LicenseRef-StarMagic-Commercial
|
|
7
7
|
Project-URL: Homepage, https://github.com/Daniel8Murphy0007/Star-Magic-Program
|
|
@@ -34,17 +34,17 @@ Dynamic: license-file
|
|
|
34
34
|
|
|
35
35
|
# Star-Magic-Program
|
|
36
36
|
|
|
37
|
-
[](https://pypi.org/project/star-magic-program/)
|
|
38
|
+
[](https://pypi.org/project/star-magic-program/)
|
|
39
39
|
[](https://star-magic-program.readthedocs.io/en/latest/?badge=latest)
|
|
40
40
|
[](LICENSE)
|
|
41
|
-
[](uqff_fidelity_tests.py)
|
|
42
42
|
[](uqff_calculator.py)
|
|
43
43
|
[](whitepapers/)
|
|
44
44
|
|
|
45
|
-
**UQFF systematic rebuild — v0.
|
|
45
|
+
**UQFF systematic rebuild — v0.396.0 complete-compile campaign live**
|
|
46
46
|
|
|
47
|
-
**This release (v0.
|
|
47
|
+
**This release (v0.396.0): THE TWO-STREAM SHIP — THE ARCHITECTURE COMPLETE.** **PAPER_2256 + `uqff_downhole_simulator` v1.6.0:** the program's first packaged industry-application module, built from Daniel's 22Aug2026 template thread (grok_cce7a73b) on same-day GO — a deep-well HPHT simulator (TD ≈ 20,300 ft) with a quartz P/T gauge string whose drift is **suppressed by the canonical lattice**: suppression = (0.58+0.32·(1−F_TRZ))·(0.52+0.38·K_MEX)·(0.68+0.27·Φ_res) = **1.0324 at the locked {0.1, 25/12, 0.84}** — drift BELOW the 0.215 %FS/yr industry baseline. **The knob ruling (Rule 2):** the template's adjustable "K_MEX"/"Φ_res" sliders were tuning gains wearing primitive names — canonicals now LOCKED in-physics (verified live by the dispatch on every call), sliders renamed `k_structural_trim`/`phi_coupling_trim`. **v1.1.0 extensions (Daniel-directed):** N-gauge strings (`make_sensor_string`); real well profiles from CSV (`load_well_profile_csv`; the shipped sample carries an HPHT overpressure kick the linear model cannot see — 18,405 vs 9,313 psi at the deepest gauge); and **twin-gauge drift-comparison mode** — every station carries a conventional reference gauge, and away from the clip band the measured conventional/UQFF ratio EQUALS the canonical suppression (1.0325 measured vs 1.0324 predicted across a 12-gauge string on the real profile) — the PAPER_2250 quartz bench test's complete simulation instrument. **v1.2.0 extension:** service-life drift ACCUMULATION (`ServiceLifeSimulator`) — the rates integrated over simulated service years, twin-leg divergence curves (2-3 psi/yr separation per station at FS 30,000 psi, 10-15 psi at a 5-yr horizon), recalibration resets, years-to-error-budget arithmetic; the accumulated-error ratio converges to the canonical suppression at every station. **v1.3.0 extension:** field-telemetry realism (`TelemetryRecorder`) — 1-reading/min timestamped acquisition with line dropouts, stuck gauges and spikes, historian quality flags, and a scored QC pipeline (frozen-value detection 1.0/1.0; Hampel despiker with common-mode veto, spike precision 0.83-1.0) exporting field-historian-style CSVs. **v1.4.0 extension:** depth-sweep case-study mode (`case_study`/`write_markdown` + CLI) — where the advantage is largest: 2.04 psi/yr flat below the HPHT knees compounding to 3.04 psi/yr at 20,000 ft (4.21 at 27,000 ft on a 30,000-ft well), rendered as a one-page customer case with the honest DERIVED_HYBRID note. **v1.5.0 extension:** real-datasheet gauge specs (`GaugeSpec`/`GAUGE_SPECS`) — web-verified GEO PSI GEOQ 177 (Quartzdyne) presets with mandatory citations (uncited specs rejected in code), plumbed through every layer; the suppression ratio is baseline-independent while the psi/yr story honestly scales with the cited spec bound. **v1.6.0 extensions:** wellbore deviation (MD/TVD surveys — a 60-deg tangent reads 6,525 vs the vertical model's 9,315 psi at the deepest gauge), multi-well batch runs (ratio invariant across geometries), and a headless CLI (`python -m uqff_downhole_simulator run|service-life|telemetry|case-study`). The 2026-08-23 extension list is complete. **v1.7.0 (two-stream build, piece 1): the tool library** — cited catalog of 8 toolstring entries (quartz twins, piezoresistive class with ChampionX-cited exponential drift form, vibrating wire/DTS/thermocouple as PARAMETERS_USER_SUPPLIED refusing invented numbers, and the G6 Modbus-RS485 surface interface declared as the ports-layer target) + ToolString composition + station rating checks (catches a 177 °C gauge in the 217 °C kick zone). **v1.8.0 (two-stream build, piece 2): the ports/plug-in layer** — READ-ONLY ingest to the normalized LiveStream form: historian-CSV and LAS 2.0 readers IMPLEMENTED (round-trip verified against the v1.3.0 telemetry export; wrapped LAS refused, not mis-parsed), live-protocol taps (modbus_g6/witsml/opcua) DECLARED and refusing until site details exist, `register_port()` for site plug-ins, CLI `ingest` subcommand. **v1.9.0 (piece 3 — the architecture COMPLETE): the two-stream reconciler** — per-station offset series classified IN_FAMILY / CALIBRATION_OFFSET / DRIFT_CONSISTENT / TRANSIENTS / UNEXPLAINED with disclosed thresholds; validated on four scenarios incl. THE FIND: the kick well reconciled against a linear-gradient assumption flags 610/4,448/6,083 psi unexplained offsets — the closed stream exposing the undervalued data stream. CLI `reconcile` subcommand. Sixteen package files (14 modules incl. the headless CLI + README + sample profile), installable package, engine headless by design, DERIVED_HYBRID with every industry anchor inline-commented, gate-verified per run. **Totals: 2,252 wired (2,307 DISPATCH keys) / gate 5,816 green / 4,179 defs. Next paper: PAPER_2257.**
|
|
48
48
|
|
|
49
49
|
Author: Daniel T. Murphy · Star-Magic Research Program
|
|
50
50
|
License: AGPL-3.0-or-later OR Commercial
|
|
@@ -102,7 +102,7 @@ Mizuno, Rossi).
|
|
|
102
102
|
Full framework physics lives in the whitepaper corpus — the physics is the
|
|
103
103
|
whitepapers; the calculator computes what the whitepapers derive.
|
|
104
104
|
|
|
105
|
-
## What is currently shipped (v0.
|
|
105
|
+
## What is currently shipped (v0.396.0)
|
|
106
106
|
|
|
107
107
|
### Wiring campaign — LIVE (see `CLAUDE.md` charter)
|
|
108
108
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# Star-Magic-Program
|
|
2
2
|
|
|
3
|
-
[](https://pypi.org/project/star-magic-program/)
|
|
4
|
+
[](https://pypi.org/project/star-magic-program/)
|
|
5
5
|
[](https://star-magic-program.readthedocs.io/en/latest/?badge=latest)
|
|
6
6
|
[](LICENSE)
|
|
7
|
-
[](uqff_fidelity_tests.py)
|
|
8
8
|
[](uqff_calculator.py)
|
|
9
9
|
[](whitepapers/)
|
|
10
10
|
|
|
11
|
-
**UQFF systematic rebuild — v0.
|
|
11
|
+
**UQFF systematic rebuild — v0.396.0 complete-compile campaign live**
|
|
12
12
|
|
|
13
|
-
**This release (v0.
|
|
13
|
+
**This release (v0.396.0): THE TWO-STREAM SHIP — THE ARCHITECTURE COMPLETE.** **PAPER_2256 + `uqff_downhole_simulator` v1.6.0:** the program's first packaged industry-application module, built from Daniel's 22Aug2026 template thread (grok_cce7a73b) on same-day GO — a deep-well HPHT simulator (TD ≈ 20,300 ft) with a quartz P/T gauge string whose drift is **suppressed by the canonical lattice**: suppression = (0.58+0.32·(1−F_TRZ))·(0.52+0.38·K_MEX)·(0.68+0.27·Φ_res) = **1.0324 at the locked {0.1, 25/12, 0.84}** — drift BELOW the 0.215 %FS/yr industry baseline. **The knob ruling (Rule 2):** the template's adjustable "K_MEX"/"Φ_res" sliders were tuning gains wearing primitive names — canonicals now LOCKED in-physics (verified live by the dispatch on every call), sliders renamed `k_structural_trim`/`phi_coupling_trim`. **v1.1.0 extensions (Daniel-directed):** N-gauge strings (`make_sensor_string`); real well profiles from CSV (`load_well_profile_csv`; the shipped sample carries an HPHT overpressure kick the linear model cannot see — 18,405 vs 9,313 psi at the deepest gauge); and **twin-gauge drift-comparison mode** — every station carries a conventional reference gauge, and away from the clip band the measured conventional/UQFF ratio EQUALS the canonical suppression (1.0325 measured vs 1.0324 predicted across a 12-gauge string on the real profile) — the PAPER_2250 quartz bench test's complete simulation instrument. **v1.2.0 extension:** service-life drift ACCUMULATION (`ServiceLifeSimulator`) — the rates integrated over simulated service years, twin-leg divergence curves (2-3 psi/yr separation per station at FS 30,000 psi, 10-15 psi at a 5-yr horizon), recalibration resets, years-to-error-budget arithmetic; the accumulated-error ratio converges to the canonical suppression at every station. **v1.3.0 extension:** field-telemetry realism (`TelemetryRecorder`) — 1-reading/min timestamped acquisition with line dropouts, stuck gauges and spikes, historian quality flags, and a scored QC pipeline (frozen-value detection 1.0/1.0; Hampel despiker with common-mode veto, spike precision 0.83-1.0) exporting field-historian-style CSVs. **v1.4.0 extension:** depth-sweep case-study mode (`case_study`/`write_markdown` + CLI) — where the advantage is largest: 2.04 psi/yr flat below the HPHT knees compounding to 3.04 psi/yr at 20,000 ft (4.21 at 27,000 ft on a 30,000-ft well), rendered as a one-page customer case with the honest DERIVED_HYBRID note. **v1.5.0 extension:** real-datasheet gauge specs (`GaugeSpec`/`GAUGE_SPECS`) — web-verified GEO PSI GEOQ 177 (Quartzdyne) presets with mandatory citations (uncited specs rejected in code), plumbed through every layer; the suppression ratio is baseline-independent while the psi/yr story honestly scales with the cited spec bound. **v1.6.0 extensions:** wellbore deviation (MD/TVD surveys — a 60-deg tangent reads 6,525 vs the vertical model's 9,315 psi at the deepest gauge), multi-well batch runs (ratio invariant across geometries), and a headless CLI (`python -m uqff_downhole_simulator run|service-life|telemetry|case-study`). The 2026-08-23 extension list is complete. **v1.7.0 (two-stream build, piece 1): the tool library** — cited catalog of 8 toolstring entries (quartz twins, piezoresistive class with ChampionX-cited exponential drift form, vibrating wire/DTS/thermocouple as PARAMETERS_USER_SUPPLIED refusing invented numbers, and the G6 Modbus-RS485 surface interface declared as the ports-layer target) + ToolString composition + station rating checks (catches a 177 °C gauge in the 217 °C kick zone). **v1.8.0 (two-stream build, piece 2): the ports/plug-in layer** — READ-ONLY ingest to the normalized LiveStream form: historian-CSV and LAS 2.0 readers IMPLEMENTED (round-trip verified against the v1.3.0 telemetry export; wrapped LAS refused, not mis-parsed), live-protocol taps (modbus_g6/witsml/opcua) DECLARED and refusing until site details exist, `register_port()` for site plug-ins, CLI `ingest` subcommand. **v1.9.0 (piece 3 — the architecture COMPLETE): the two-stream reconciler** — per-station offset series classified IN_FAMILY / CALIBRATION_OFFSET / DRIFT_CONSISTENT / TRANSIENTS / UNEXPLAINED with disclosed thresholds; validated on four scenarios incl. THE FIND: the kick well reconciled against a linear-gradient assumption flags 610/4,448/6,083 psi unexplained offsets — the closed stream exposing the undervalued data stream. CLI `reconcile` subcommand. Sixteen package files (14 modules incl. the headless CLI + README + sample profile), installable package, engine headless by design, DERIVED_HYBRID with every industry anchor inline-commented, gate-verified per run. **Totals: 2,252 wired (2,307 DISPATCH keys) / gate 5,816 green / 4,179 defs. Next paper: PAPER_2257.**
|
|
14
14
|
|
|
15
15
|
Author: Daniel T. Murphy · Star-Magic Research Program
|
|
16
16
|
License: AGPL-3.0-or-later OR Commercial
|
|
@@ -68,7 +68,7 @@ Mizuno, Rossi).
|
|
|
68
68
|
Full framework physics lives in the whitepaper corpus — the physics is the
|
|
69
69
|
whitepapers; the calculator computes what the whitepapers derive.
|
|
70
70
|
|
|
71
|
-
## What is currently shipped (v0.
|
|
71
|
+
## What is currently shipped (v0.396.0)
|
|
72
72
|
|
|
73
73
|
### Wiring campaign — LIVE (see `CLAUDE.md` charter)
|
|
74
74
|
|
|
@@ -11811,3 +11811,40 @@ own source for quote-adjacent Unix temp-path literals (needle constructed at
|
|
|
11811
11811
|
runtime so the guard cannot self-match) — the mistake cannot be reintroduced.
|
|
11812
11812
|
Gate 5,800 → 5,801; README badge + pyproject description synced. Standing
|
|
11813
11813
|
lesson for the charter set: gate pins write scratch files ONLY via tempfile.
|
|
11814
|
+
|
|
11815
|
+
## Entry 268 — 2026-08-24 — v0.396.0 THE TWO-STREAM SHIP (downhole v1.7.0–v1.9.0)
|
|
11816
|
+
|
|
11817
|
+
Daniel's architectural ruling (2026-08-23, verbatim frame): "There are two
|
|
11818
|
+
sides to this program so that the standalone theoretical can function to find
|
|
11819
|
+
the offset undervalued data streams that coordinate live stream with closed
|
|
11820
|
+
stream." Confirmed correct reading; built as three pieces, COMPLETE:
|
|
11821
|
+
|
|
11822
|
+
1. v1.7.0 `uqff_tool_library.py` — cited 8-entry catalog: quartz twins (GEOQ
|
|
11823
|
+
177 specs), piezoresistive class (ChampionX-cited exponential-in-T FORM,
|
|
11824
|
+
representative coefficients disclosed), GEOVW/GEOXTR/GEOPulse as
|
|
11825
|
+
PARAMETERS_USER_SUPPLIED with drift_model_for() REFUSING them, G6 Modbus
|
|
11826
|
+
interface = declared ports target; ToolString + rating_check (177 °C gauge
|
|
11827
|
+
caught at the 217 °C kick station).
|
|
11828
|
+
2. v1.8.0 `uqff_ports.py` — READ-ONLY plug-in registry → normalized
|
|
11829
|
+
LiveStream. historian_csv + las2 IMPLEMENTED; round-trip vs the v1.3.0
|
|
11830
|
+
telemetry export verified to precision (MISSING→NaN, flags carried);
|
|
11831
|
+
wrapped LAS REFUSED; modbus_g6/witsml/opcua DECLARED-refusing;
|
|
11832
|
+
register_port(); CLI ingest.
|
|
11833
|
+
3. v1.9.0 `uqff_reconciler.py` — offset(t) = measured − predicted per
|
|
11834
|
+
station; classifications with thresholds DISCLOSED in every report; drift
|
|
11835
|
+
not classified under ~18-day windows (slopes are noise, said so). Four
|
|
11836
|
+
scenarios verified per gate run: clean 6/6 IN_FAMILY; +50 psi bias →
|
|
11837
|
+
CALIBRATION_OFFSET 50.09 recovered; 2-yr synthetic at conventional rate →
|
|
11838
|
+
DRIFT_CONSISTENT (82.45 in [79.71, 82.29]); THE FIND — kick well vs
|
|
11839
|
+
linear-gradient assumption → UNEXPLAINED_OFFSET 610/4,448/6,083 psi.
|
|
11840
|
+
|
|
11841
|
+
Session also carried the v0.395.0 RED-GATE portability incident (hard-coded
|
|
11842
|
+
Unix temp path in a gate pin; fixed; permanent PORTABILITY GUARD self-scan
|
|
11843
|
+
added — gate 5,800→5,801) before this arc (5,801→5,816, +15 pins).
|
|
11844
|
+
|
|
11845
|
+
Ship prep: 6 pins at 0.396.0 (desc 495 chars, measured counts); SHIP GUARD
|
|
11846
|
+
marker INSTRUMENT_ARC→TWOSTREAM_ARC (+ GAPS id twostream_arc_rule7); README
|
|
11847
|
+
release paragraph/campaign/shipped header; CHANGELOG + _BUILD_LOG +
|
|
11848
|
+
SHIP_MESSAGE + RULINGS trail; 10 TWOSTREAM_ARC trail rows. Zero calculator
|
|
11849
|
+
physics changes; zero new dispatches (ratchet untouched). Awaiting Daniel:
|
|
11850
|
+
`.\ship.ps1` (clear .git/index.lock first).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
v0.396.0
|
|
@@ -1722,3 +1722,4 @@ CENSUS_ARC,n/a,n/a,NOT_APPLICABLE,census consolidation single-geometry,v0.392.0
|
|
|
1722
1722
|
LEDGER_ARC,n/a,n/a,NOT_APPLICABLE,census+packaging single-geometry,v0.393.0
|
|
1723
1723
|
DOWNHOLE_ARC,n/a,n/a,NOT_APPLICABLE,application module single-geometry,v0.394.0
|
|
1724
1724
|
INSTRUMENT_ARC,n/a,n/a,NOT_APPLICABLE,application-module extensions single-geometry,v0.395.0
|
|
1725
|
+
TWOSTREAM_ARC,n/a,n/a,NOT_APPLICABLE,application-module architecture single-geometry,v0.396.0
|
|
@@ -1723,3 +1723,4 @@ CENSUS_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.392.0
|
|
|
1723
1723
|
LEDGER_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.393.0
|
|
1724
1724
|
DOWNHOLE_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.394.0
|
|
1725
1725
|
INSTRUMENT_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.395.0
|
|
1726
|
+
TWOSTREAM_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.396.0
|
|
@@ -306,3 +306,6 @@ THE DOWNHOLE SHIP: PAPER_2256 + uqff_downhole_simulator v1.1.0 (first industry-a
|
|
|
306
306
|
|
|
307
307
|
## v0.395.0 — 2026-08-23
|
|
308
308
|
THE INSTRUMENT SHIP: uqff_downhole_simulator v1.2.0-v1.6.0 (service-life divergence curves; telemetry realism with scored QC; depth-sweep case studies; web-verified GEOQ 177 gauge specs with mandatory citations; MD/TVD deviation; batch runs; headless CLI). Suppression ratio 1.0324 invariant across geometry and baseline. Gate 5,800/0. 23-file pass verified.
|
|
309
|
+
|
|
310
|
+
## v0.396.0 — 2026-08-24
|
|
311
|
+
THE TWO-STREAM SHIP: uqff_downhole_simulator v1.7.0-v1.9.0 (cited tool library; read-only ports with historian/LAS implemented and live taps declared; two-stream reconciler with four-scenario validation incl. the 6,083-psi kick find). Architecture complete. Gate 5,816/0. 23-file pass verified.
|
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "star-magic-program"
|
|
7
|
-
version = "0.
|
|
8
|
-
description = "Star-Magic UQFF calculator v0.
|
|
7
|
+
version = "0.396.0"
|
|
8
|
+
description = "Star-Magic UQFF calculator v0.396.0: THE TWO-STREAM SHIP. 2,252 dispatches (2,307 keys), gate 5,816/0. uqff_downhole_simulator v1.7.0-v1.9.0 completes Daniel's two-stream architecture: cited tool library (8 entries, no invented vendor data), read-only ports (historian CSV + LAS 2.0 implemented, live taps declared), and the two-stream reconciler - closed-stream predictions vs live data, offsets classified, undervalued streams flagged (kick-well find: 6,083 psi unexplained). Next: PAPER_2257."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
11
11
|
{ name = "Daniel T. Murphy", email = "daniel.murphy00@enrgyone.com" }
|
{star_magic_program-0.395.0 → star_magic_program-0.396.0/star_magic_program.egg-info}/PKG-INFO
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: star-magic-program
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Star-Magic UQFF calculator v0.
|
|
3
|
+
Version: 0.396.0
|
|
4
|
+
Summary: Star-Magic UQFF calculator v0.396.0: THE TWO-STREAM SHIP. 2,252 dispatches (2,307 keys), gate 5,816/0. uqff_downhole_simulator v1.7.0-v1.9.0 completes Daniel's two-stream architecture: cited tool library (8 entries, no invented vendor data), read-only ports (historian CSV + LAS 2.0 implemented, live taps declared), and the two-stream reconciler - closed-stream predictions vs live data, offsets classified, undervalued streams flagged (kick-well find: 6,083 psi unexplained). Next: PAPER_2257.
|
|
5
5
|
Author-email: "Daniel T. Murphy" <daniel.murphy00@enrgyone.com>
|
|
6
6
|
License: AGPL-3.0-or-later OR LicenseRef-StarMagic-Commercial
|
|
7
7
|
Project-URL: Homepage, https://github.com/Daniel8Murphy0007/Star-Magic-Program
|
|
@@ -34,17 +34,17 @@ Dynamic: license-file
|
|
|
34
34
|
|
|
35
35
|
# Star-Magic-Program
|
|
36
36
|
|
|
37
|
-
[](https://pypi.org/project/star-magic-program/)
|
|
38
|
+
[](https://pypi.org/project/star-magic-program/)
|
|
39
39
|
[](https://star-magic-program.readthedocs.io/en/latest/?badge=latest)
|
|
40
40
|
[](LICENSE)
|
|
41
|
-
[](uqff_fidelity_tests.py)
|
|
42
42
|
[](uqff_calculator.py)
|
|
43
43
|
[](whitepapers/)
|
|
44
44
|
|
|
45
|
-
**UQFF systematic rebuild — v0.
|
|
45
|
+
**UQFF systematic rebuild — v0.396.0 complete-compile campaign live**
|
|
46
46
|
|
|
47
|
-
**This release (v0.
|
|
47
|
+
**This release (v0.396.0): THE TWO-STREAM SHIP — THE ARCHITECTURE COMPLETE.** **PAPER_2256 + `uqff_downhole_simulator` v1.6.0:** the program's first packaged industry-application module, built from Daniel's 22Aug2026 template thread (grok_cce7a73b) on same-day GO — a deep-well HPHT simulator (TD ≈ 20,300 ft) with a quartz P/T gauge string whose drift is **suppressed by the canonical lattice**: suppression = (0.58+0.32·(1−F_TRZ))·(0.52+0.38·K_MEX)·(0.68+0.27·Φ_res) = **1.0324 at the locked {0.1, 25/12, 0.84}** — drift BELOW the 0.215 %FS/yr industry baseline. **The knob ruling (Rule 2):** the template's adjustable "K_MEX"/"Φ_res" sliders were tuning gains wearing primitive names — canonicals now LOCKED in-physics (verified live by the dispatch on every call), sliders renamed `k_structural_trim`/`phi_coupling_trim`. **v1.1.0 extensions (Daniel-directed):** N-gauge strings (`make_sensor_string`); real well profiles from CSV (`load_well_profile_csv`; the shipped sample carries an HPHT overpressure kick the linear model cannot see — 18,405 vs 9,313 psi at the deepest gauge); and **twin-gauge drift-comparison mode** — every station carries a conventional reference gauge, and away from the clip band the measured conventional/UQFF ratio EQUALS the canonical suppression (1.0325 measured vs 1.0324 predicted across a 12-gauge string on the real profile) — the PAPER_2250 quartz bench test's complete simulation instrument. **v1.2.0 extension:** service-life drift ACCUMULATION (`ServiceLifeSimulator`) — the rates integrated over simulated service years, twin-leg divergence curves (2-3 psi/yr separation per station at FS 30,000 psi, 10-15 psi at a 5-yr horizon), recalibration resets, years-to-error-budget arithmetic; the accumulated-error ratio converges to the canonical suppression at every station. **v1.3.0 extension:** field-telemetry realism (`TelemetryRecorder`) — 1-reading/min timestamped acquisition with line dropouts, stuck gauges and spikes, historian quality flags, and a scored QC pipeline (frozen-value detection 1.0/1.0; Hampel despiker with common-mode veto, spike precision 0.83-1.0) exporting field-historian-style CSVs. **v1.4.0 extension:** depth-sweep case-study mode (`case_study`/`write_markdown` + CLI) — where the advantage is largest: 2.04 psi/yr flat below the HPHT knees compounding to 3.04 psi/yr at 20,000 ft (4.21 at 27,000 ft on a 30,000-ft well), rendered as a one-page customer case with the honest DERIVED_HYBRID note. **v1.5.0 extension:** real-datasheet gauge specs (`GaugeSpec`/`GAUGE_SPECS`) — web-verified GEO PSI GEOQ 177 (Quartzdyne) presets with mandatory citations (uncited specs rejected in code), plumbed through every layer; the suppression ratio is baseline-independent while the psi/yr story honestly scales with the cited spec bound. **v1.6.0 extensions:** wellbore deviation (MD/TVD surveys — a 60-deg tangent reads 6,525 vs the vertical model's 9,315 psi at the deepest gauge), multi-well batch runs (ratio invariant across geometries), and a headless CLI (`python -m uqff_downhole_simulator run|service-life|telemetry|case-study`). The 2026-08-23 extension list is complete. **v1.7.0 (two-stream build, piece 1): the tool library** — cited catalog of 8 toolstring entries (quartz twins, piezoresistive class with ChampionX-cited exponential drift form, vibrating wire/DTS/thermocouple as PARAMETERS_USER_SUPPLIED refusing invented numbers, and the G6 Modbus-RS485 surface interface declared as the ports-layer target) + ToolString composition + station rating checks (catches a 177 °C gauge in the 217 °C kick zone). **v1.8.0 (two-stream build, piece 2): the ports/plug-in layer** — READ-ONLY ingest to the normalized LiveStream form: historian-CSV and LAS 2.0 readers IMPLEMENTED (round-trip verified against the v1.3.0 telemetry export; wrapped LAS refused, not mis-parsed), live-protocol taps (modbus_g6/witsml/opcua) DECLARED and refusing until site details exist, `register_port()` for site plug-ins, CLI `ingest` subcommand. **v1.9.0 (piece 3 — the architecture COMPLETE): the two-stream reconciler** — per-station offset series classified IN_FAMILY / CALIBRATION_OFFSET / DRIFT_CONSISTENT / TRANSIENTS / UNEXPLAINED with disclosed thresholds; validated on four scenarios incl. THE FIND: the kick well reconciled against a linear-gradient assumption flags 610/4,448/6,083 psi unexplained offsets — the closed stream exposing the undervalued data stream. CLI `reconcile` subcommand. Sixteen package files (14 modules incl. the headless CLI + README + sample profile), installable package, engine headless by design, DERIVED_HYBRID with every industry anchor inline-commented, gate-verified per run. **Totals: 2,252 wired (2,307 DISPATCH keys) / gate 5,816 green / 4,179 defs. Next paper: PAPER_2257.**
|
|
48
48
|
|
|
49
49
|
Author: Daniel T. Murphy · Star-Magic Research Program
|
|
50
50
|
License: AGPL-3.0-or-later OR Commercial
|
|
@@ -102,7 +102,7 @@ Mizuno, Rossi).
|
|
|
102
102
|
Full framework physics lives in the whitepaper corpus — the physics is the
|
|
103
103
|
whitepapers; the calculator computes what the whitepapers derive.
|
|
104
104
|
|
|
105
|
-
## What is currently shipped (v0.
|
|
105
|
+
## What is currently shipped (v0.396.0)
|
|
106
106
|
|
|
107
107
|
### Wiring campaign — LIVE (see `CLAUDE.md` charter)
|
|
108
108
|
|
{star_magic_program-0.395.0 → star_magic_program-0.396.0}/star_magic_program.egg-info/SOURCES.txt
RENAMED
|
@@ -62,6 +62,9 @@ uqff_downhole_simulator/uqff_case_study.py
|
|
|
62
62
|
uqff_downhole_simulator/uqff_deviation.py
|
|
63
63
|
uqff_downhole_simulator/uqff_downhole_engine.py
|
|
64
64
|
uqff_downhole_simulator/uqff_gauge_specs.py
|
|
65
|
+
uqff_downhole_simulator/uqff_ports.py
|
|
65
66
|
uqff_downhole_simulator/uqff_quartz_hpht_extension.py
|
|
67
|
+
uqff_downhole_simulator/uqff_reconciler.py
|
|
66
68
|
uqff_downhole_simulator/uqff_service_life.py
|
|
67
|
-
uqff_downhole_simulator/uqff_telemetry.py
|
|
69
|
+
uqff_downhole_simulator/uqff_telemetry.py
|
|
70
|
+
uqff_downhole_simulator/uqff_tool_library.py
|
|
@@ -73,7 +73,7 @@ from uqff_registry_primitives import (
|
|
|
73
73
|
DELTA_M2_21_EV2, DELTA_M2_32_EV2,
|
|
74
74
|
)
|
|
75
75
|
|
|
76
|
-
VERSION = "0.
|
|
76
|
+
VERSION = "0.396.0"
|
|
77
77
|
|
|
78
78
|
# NAMED OBSERVED SI ANCHORS (constant drain 2026-08-16, PAPER_2141 bulk pattern + PAPER_2149 observation-headlining)
|
|
79
79
|
# Bit-identical to the literals they replace; UQFF-derived counterparts live in uqff_registry_primitives.
|
|
@@ -215,3 +215,79 @@ cs = case_study(CaseStudyConfig(gauge_spec=GAUGE_SPECS['geoq177_30k']))
|
|
|
215
215
|
python -m uqff_downhole_simulator run --steps 200 --gauges 8 --out run.csv
|
|
216
216
|
python -m uqff_downhole_simulator case-study --td 22000 --kickoff 9000 --inclination 45 --spec geoq177_30k --out case.md
|
|
217
217
|
```
|
|
218
|
+
|
|
219
|
+
## v1.7.0 extension: the tool library (Daniel-directed, 2026-08-23 — first piece of the two-stream build)
|
|
220
|
+
|
|
221
|
+
`uqff_tool_library.py` generalizes the gauge-spec discipline to the whole
|
|
222
|
+
toolstring: a cited catalog (`TOOL_LIBRARY`, 8 entries) of downhole and
|
|
223
|
+
surface tools — UQFF/conventional quartz P/T (wrapping the v1.5.0 GaugeSpecs),
|
|
224
|
+
a piezoresistive class (drift FORM cited from ChampionX: unpredictable,
|
|
225
|
+
exponential in temperature; coefficients disclosed as representative fit),
|
|
226
|
+
vibrating-wire, 18-point thermocouple string, DTS fiber, and the **G6 surface
|
|
227
|
+
interface (Modbus RS485 + 4-20mA)** — every entry declaring the telemetry
|
|
228
|
+
interface it speaks, which is the declaration the live-stream ports/plug-in
|
|
229
|
+
layer will implement.
|
|
230
|
+
|
|
231
|
+
Honesty structure: entries whose existence is verified but whose numbers were
|
|
232
|
+
not published are `PARAMETERS_USER_SUPPLIED` — their fields are None and
|
|
233
|
+
`drift_model_for()` refuses to invent vendor data. `ToolString` composes
|
|
234
|
+
mixed strings of stations; `rating_check()` checks every tool against the
|
|
235
|
+
well conditions at its station (profile or gradients, deviation honored) —
|
|
236
|
+
it catches a 177 °C gauge hung in the sample well's 217 °C kick zone before
|
|
237
|
+
the well does.
|
|
238
|
+
|
|
239
|
+
```python
|
|
240
|
+
from uqff_downhole_simulator import ToolString, rating_check, load_well_profile_csv
|
|
241
|
+
ts = ToolString([(3000, 'quartz_pt_uqff_geoq177_30k'), (18200, 'piezoresistive_pt_class')])
|
|
242
|
+
print(rating_check(ts, profile=load_well_profile_csv("uqff_downhole_simulator/sample_well_profile.csv")))
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## v1.8.0 extension: the ports/plug-in layer (Daniel-directed, 2026-08-23 — two-stream build, piece 2)
|
|
246
|
+
|
|
247
|
+
`uqff_ports.py` — READ-ONLY taps ingesting live-stream data into the
|
|
248
|
+
normalized `LiveStream` form the reconciler will consume (index = time or
|
|
249
|
+
depth; per-channel values with NaN for missing; quality flags carried; units
|
|
250
|
+
carried). `PORT_REGISTRY` with explicit statuses: **IMPLEMENTED** —
|
|
251
|
+
`historian_csv` (wide-format historian exports, auto-detecting the v1.3.0
|
|
252
|
+
telemetry layout) and `las2` (LAS 2.0 well logs, CWLS public standard, NULL
|
|
253
|
+
substitution, wrapped mode refused rather than mis-parsed); **DECLARED** —
|
|
254
|
+
`modbus_g6` (the tool library's declared port target), `witsml`, `opcua` —
|
|
255
|
+
these name the protocol but REFUSE to run until real site details exist (no
|
|
256
|
+
invented site behavior). `register_port()` lets a site plug in its own reader
|
|
257
|
+
additively.
|
|
258
|
+
|
|
259
|
+
The proof loop: the simulator's own v1.3.0 field-style export re-ingested
|
|
260
|
+
through the port matches the recorder's arrays to export precision, with
|
|
261
|
+
MISSING → NaN and flags carried — closed stream → simulated live file →
|
|
262
|
+
port → same numbers. The ingest path is verified in simulation before it
|
|
263
|
+
ever touches a site. CLI: `python -m uqff_downhole_simulator ingest --file
|
|
264
|
+
field.csv` (or `--port las2`).
|
|
265
|
+
|
|
266
|
+
## v1.9.0 extension: the two-stream reconciler (Daniel-directed, 2026-08-23 — piece 3, the architecture complete)
|
|
267
|
+
|
|
268
|
+
`uqff_reconciler.py` — the coordinator. The closed stream predicts what every
|
|
269
|
+
gauge in a described well *should* read; a `LiveStream` delivers what it
|
|
270
|
+
*does* read; the reconciler works the per-station offset series and
|
|
271
|
+
classifies each: IN_FAMILY, CALIBRATION_OFFSET (bias recovered),
|
|
272
|
+
DRIFT_CONSISTENT (trend inside the closed stream's own drift envelope
|
|
273
|
+
[UQFF rate, conventional rate] at station T/P — needs ≥18 days of data,
|
|
274
|
+
below that slopes are noise and it says so), TRANSIENTS, or
|
|
275
|
+
**UNEXPLAINED_OFFSET/TREND — the undervalued streams**. Thresholds are
|
|
276
|
+
disclosed engineering heuristics; labels are advisory triage and the numbers
|
|
277
|
+
(bias, slope, sigma, envelope) always ride along.
|
|
278
|
+
|
|
279
|
+
Validated on four scenarios: clean well → 6/6 IN_FAMILY; +50 psi biased
|
|
280
|
+
gauge → CALIBRATION_OFFSET, 50.09 psi recovered; 2-year synthetic drifting
|
|
281
|
+
at the conventional rate → DRIFT_CONSISTENT (slope 82.45 vs envelope
|
|
282
|
+
[79.71, 82.29] psi/yr); and **the find** — the kick well reconciled against
|
|
283
|
+
a linear-gradient assumption flags 610 / 4,448 / 6,083 psi unexplained
|
|
284
|
+
offsets at the deep stations. The closed stream exposes what the assumed
|
|
285
|
+
model cannot see.
|
|
286
|
+
|
|
287
|
+
```python
|
|
288
|
+
from uqff_downhole_simulator import Reconciler, SimulatorConfig, ingest
|
|
289
|
+
report = Reconciler(SimulatorConfig(td_ft=18500)).reconcile(ingest("field.csv"))
|
|
290
|
+
print(report['undervalued_streams'])
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
CLI: `python -m uqff_downhole_simulator reconcile --file field.csv --td 18500`
|
{star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/__init__.py
RENAMED
|
@@ -62,8 +62,31 @@ from .uqff_deviation import (
|
|
|
62
62
|
load_deviation_csv,
|
|
63
63
|
)
|
|
64
64
|
from .uqff_downhole_engine import run_batch
|
|
65
|
+
from .uqff_tool_library import (
|
|
66
|
+
ToolSpec,
|
|
67
|
+
TOOL_LIBRARY,
|
|
68
|
+
ToolString,
|
|
69
|
+
drift_model_for,
|
|
70
|
+
piezoresistive_drift,
|
|
71
|
+
rating_check,
|
|
72
|
+
)
|
|
73
|
+
from .uqff_ports import (
|
|
74
|
+
LiveStream,
|
|
75
|
+
StreamChannel,
|
|
76
|
+
PortSpec,
|
|
77
|
+
PORT_REGISTRY,
|
|
78
|
+
ingest,
|
|
79
|
+
read_historian_csv,
|
|
80
|
+
read_las,
|
|
81
|
+
register_port,
|
|
82
|
+
)
|
|
83
|
+
from .uqff_reconciler import (
|
|
84
|
+
Reconciler,
|
|
85
|
+
ReconcilerConfig,
|
|
86
|
+
auto_station_map,
|
|
87
|
+
)
|
|
65
88
|
|
|
66
|
-
__version__ = "1.
|
|
89
|
+
__version__ = "1.9.0"
|
|
67
90
|
__all__ = [
|
|
68
91
|
"calculate_quartz_transducer_hpht_UQFF", "canonical_suppression",
|
|
69
92
|
"conventional_drift", "drift_comparison",
|
|
@@ -74,5 +97,10 @@ __all__ = [
|
|
|
74
97
|
"CaseStudyConfig", "case_study", "depth_sweep", "write_markdown",
|
|
75
98
|
"GaugeSpec", "GAUGE_SPECS", "load_gauge_spec_json",
|
|
76
99
|
"DeviationSurvey", "load_deviation_csv", "run_batch",
|
|
100
|
+
"ToolSpec", "TOOL_LIBRARY", "ToolString", "drift_model_for",
|
|
101
|
+
"piezoresistive_drift", "rating_check",
|
|
102
|
+
"LiveStream", "StreamChannel", "PortSpec", "PORT_REGISTRY",
|
|
103
|
+
"ingest", "read_historian_csv", "read_las", "register_port",
|
|
104
|
+
"Reconciler", "ReconcilerConfig", "auto_station_map",
|
|
77
105
|
"DEFAULT_TD_FT", "DEFAULT_SENSOR_DEPTHS_FT",
|
|
78
106
|
]
|
{star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/__main__.py
RENAMED
|
@@ -70,6 +70,16 @@ def main(argv=None) -> int:
|
|
|
70
70
|
p_tm.add_argument("--seed", type=int, default=None)
|
|
71
71
|
p_tm.add_argument("--out", type=str, default="uqff_telemetry.csv")
|
|
72
72
|
|
|
73
|
+
p_in = sub.add_parser("ingest", help="ingest a live-stream file through a port (read-only)")
|
|
74
|
+
p_in.add_argument("--file", type=str, required=True, help="source file (historian CSV or LAS)")
|
|
75
|
+
p_in.add_argument("--port", type=str, default="historian_csv",
|
|
76
|
+
help="port name from PORT_REGISTRY (historian_csv | las2 | site plug-ins)")
|
|
77
|
+
|
|
78
|
+
p_rc = sub.add_parser("reconcile", help="two-stream reconciliation: live file vs closed-stream prediction")
|
|
79
|
+
_add_well_args(p_rc)
|
|
80
|
+
p_rc.add_argument("--file", type=str, required=True, help="live-stream file (historian CSV)")
|
|
81
|
+
p_rc.add_argument("--port", type=str, default="historian_csv")
|
|
82
|
+
|
|
73
83
|
p_cs = sub.add_parser("case-study", help="depth sweep, write the one-page markdown case")
|
|
74
84
|
_add_well_args(p_cs)
|
|
75
85
|
p_cs.add_argument("--points", type=int, default=12)
|
|
@@ -107,6 +117,16 @@ def main(argv=None) -> int:
|
|
|
107
117
|
s = rec.telemetry_summary()
|
|
108
118
|
print(f"telemetry: {s['samples']} samples -> {out} "
|
|
109
119
|
f"(uptime {s['uptime_pct']}%, stuck P/R {s['stuck_score']['precision']}/{s['stuck_score']['recall']})")
|
|
120
|
+
elif a.cmd == "ingest":
|
|
121
|
+
from . import ingest as _ingest
|
|
122
|
+
st = _ingest(a.file, port=a.port)
|
|
123
|
+
import json as _json
|
|
124
|
+
print(_json.dumps(st.summary(), indent=1))
|
|
125
|
+
elif a.cmd == "reconcile":
|
|
126
|
+
from . import ingest as _ingest, Reconciler
|
|
127
|
+
rep = Reconciler(_build_config(a)).reconcile(_ingest(a.file, port=a.port))
|
|
128
|
+
import json as _json
|
|
129
|
+
print(_json.dumps(rep, indent=1))
|
|
110
130
|
elif a.cmd == "case-study":
|
|
111
131
|
from .uqff_deviation import DeviationSurvey
|
|
112
132
|
td = a.td if a.td is not None else DEFAULT_TD_FT
|