openflowsheet 0.1.1__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 (177) hide show
  1. openflowsheet/__init__.py +16 -0
  2. openflowsheet/_data/benchmarks/k04/reference_values.yaml +540 -0
  3. openflowsheet/_data/benchmarks/syn001/reference_values.yaml +539 -0
  4. openflowsheet/_data/benchmarks/t08/numerical_policy_v2.yaml +184 -0
  5. openflowsheet/_data/schemas/api-error.schema.json +45 -0
  6. openflowsheet/_data/schemas/application-results.schema.json +577 -0
  7. openflowsheet/_data/schemas/attempt-context.schema.json +300 -0
  8. openflowsheet/_data/schemas/capability-reference.schema.json +93 -0
  9. openflowsheet/_data/schemas/change-set.schema.json +124 -0
  10. openflowsheet/_data/schemas/checkpoint.schema.json +196 -0
  11. openflowsheet/_data/schemas/compiled-problem-metadata.schema.json +145 -0
  12. openflowsheet/_data/schemas/component-record.schema.json +91 -0
  13. openflowsheet/_data/schemas/evaluation-result.schema.json +115 -0
  14. openflowsheet/_data/schemas/evidence-manifest.schema.json +118 -0
  15. openflowsheet/_data/schemas/execution-plan.schema.json +319 -0
  16. openflowsheet/_data/schemas/failure-bundle.schema.json +95 -0
  17. openflowsheet/_data/schemas/jacobian-result.schema.json +150 -0
  18. openflowsheet/_data/schemas/job-event.schema.json +155 -0
  19. openflowsheet/_data/schemas/job.schema.json +562 -0
  20. openflowsheet/_data/schemas/model-manifest.schema.json +285 -0
  21. openflowsheet/_data/schemas/process-revision.schema.json +177 -0
  22. openflowsheet/_data/schemas/project-policy.schema.json +44 -0
  23. openflowsheet/_data/schemas/quantity.schema.json +85 -0
  24. openflowsheet/_data/schemas/regularity-evidence.schema.json +124 -0
  25. openflowsheet/_data/schemas/replay-report.schema.json +99 -0
  26. openflowsheet/_data/schemas/requirements-ledger.schema.json +182 -0
  27. openflowsheet/_data/schemas/run-manifest.schema.json +199 -0
  28. openflowsheet/_data/schemas/run-result.schema.json +125 -0
  29. openflowsheet/_data/schemas/solution-certificate.schema.json +453 -0
  30. openflowsheet/_data/schemas/solution-state.schema.json +39 -0
  31. openflowsheet/_data/schemas/solve-event.schema.json +454 -0
  32. openflowsheet/_data/schemas/solve-plan.schema.json +184 -0
  33. openflowsheet/_data/schemas/solve-policy.schema.json +392 -0
  34. openflowsheet/_data/schemas/specification.schema.json +75 -0
  35. openflowsheet/_data/schemas/transaction-result.schema.json +134 -0
  36. openflowsheet/_data/schemas/validation-report.schema.json +105 -0
  37. openflowsheet/application/__init__.py +10 -0
  38. openflowsheet/application/admission.py +285 -0
  39. openflowsheet/application/authz.py +354 -0
  40. openflowsheet/application/binding.py +1241 -0
  41. openflowsheet/application/bindings/__init__.py +3 -0
  42. openflowsheet/application/bindings/descriptions/REVIEW.json +345 -0
  43. openflowsheet/application/bindings/descriptions/cancel_job.md +9 -0
  44. openflowsheet/application/bindings/descriptions/commit_change.md +20 -0
  45. openflowsheet/application/bindings/descriptions/diff_revisions.md +7 -0
  46. openflowsheet/application/bindings/descriptions/get_artifact.md +7 -0
  47. openflowsheet/application/bindings/descriptions/get_job.md +9 -0
  48. openflowsheet/application/bindings/descriptions/get_job_result.md +11 -0
  49. openflowsheet/application/bindings/descriptions/get_project.md +9 -0
  50. openflowsheet/application/bindings/descriptions/get_revision.md +7 -0
  51. openflowsheet/application/bindings/descriptions/inspect_structure.md +9 -0
  52. openflowsheet/application/bindings/descriptions/list_job_events.md +11 -0
  53. openflowsheet/application/bindings/descriptions/list_jobs.md +9 -0
  54. openflowsheet/application/bindings/descriptions/list_models.md +16 -0
  55. openflowsheet/application/bindings/descriptions/list_revisions.md +9 -0
  56. openflowsheet/application/bindings/descriptions/preview_change.md +16 -0
  57. openflowsheet/application/bindings/descriptions/submit_job.md +11 -0
  58. openflowsheet/application/bindings/descriptions/validate.md +11 -0
  59. openflowsheet/application/bindings/descriptions/wait_job.md +9 -0
  60. openflowsheet/application/bindings/http.py +481 -0
  61. openflowsheet/application/bindings/mcp.py +296 -0
  62. openflowsheet/application/cli.py +561 -0
  63. openflowsheet/application/contract.py +194 -0
  64. openflowsheet/application/jobs/__init__.py +7 -0
  65. openflowsheet/application/jobs/executor.py +599 -0
  66. openflowsheet/application/jobs/interrupt.py +92 -0
  67. openflowsheet/application/jobs/model.py +280 -0
  68. openflowsheet/application/jobs/runner.py +566 -0
  69. openflowsheet/application/jobs/worker.py +210 -0
  70. openflowsheet/application/local.py +1473 -0
  71. openflowsheet/application/operations.py +571 -0
  72. openflowsheet/application/policies.py +138 -0
  73. openflowsheet/application/projection.py +317 -0
  74. openflowsheet/application/revision_binding.py +1285 -0
  75. openflowsheet/application/revision_run.py +778 -0
  76. openflowsheet/application/revisions.py +121 -0
  77. openflowsheet/application/serving.py +106 -0
  78. openflowsheet/application/store.py +1143 -0
  79. openflowsheet/application/transactions.py +294 -0
  80. openflowsheet/application/types.py +1445 -0
  81. openflowsheet/application/validation.py +995 -0
  82. openflowsheet/canonical.py +599 -0
  83. openflowsheet/compile/__init__.py +11 -0
  84. openflowsheet/compile/casadi_backend.py +640 -0
  85. openflowsheet/compile/reference.py +90 -0
  86. openflowsheet/compile/spec.py +246 -0
  87. openflowsheet/compiled.py +172 -0
  88. openflowsheet/graph/__init__.py +30 -0
  89. openflowsheet/graph/analysis.py +218 -0
  90. openflowsheet/graph/blocks.py +226 -0
  91. openflowsheet/graph/certificates.py +236 -0
  92. openflowsheet/graph/dof.py +141 -0
  93. openflowsheet/graph/matching.py +208 -0
  94. openflowsheet/graph/process.py +75 -0
  95. openflowsheet/graph/report.py +248 -0
  96. openflowsheet/graph/tear.py +404 -0
  97. openflowsheet/graph/trace.py +521 -0
  98. openflowsheet/ir/__init__.py +10 -0
  99. openflowsheet/models/__init__.py +661 -0
  100. openflowsheet/models/revision_flowsheet.py +849 -0
  101. openflowsheet/models/rows.py +338 -0
  102. openflowsheet/models/syn001/__init__.py +50 -0
  103. openflowsheet/models/syn001/admission.py +74 -0
  104. openflowsheet/models/syn001/bisection.py +74 -0
  105. openflowsheet/models/syn001/blocks.py +224 -0
  106. openflowsheet/models/syn001/component_separator.py +576 -0
  107. openflowsheet/models/syn001/conversion_reactor.py +767 -0
  108. openflowsheet/models/syn001/feed.py +304 -0
  109. openflowsheet/models/syn001/flash.py +576 -0
  110. openflowsheet/models/syn001/flowsheet.py +392 -0
  111. openflowsheet/models/syn001/heat_exchanger.py +867 -0
  112. openflowsheet/models/syn001/heater.py +498 -0
  113. openflowsheet/models/syn001/kinetic_cstr.py +703 -0
  114. openflowsheet/models/syn001/mixer.py +595 -0
  115. openflowsheet/models/syn001/ph_flash.py +605 -0
  116. openflowsheet/models/syn001/ph_kernel.py +693 -0
  117. openflowsheet/models/syn001/pump.py +546 -0
  118. openflowsheet/models/syn001/saturation_band.py +235 -0
  119. openflowsheet/models/syn001/sink.py +148 -0
  120. openflowsheet/models/syn001/splitter.py +340 -0
  121. openflowsheet/models/syn001/tp_state.py +528 -0
  122. openflowsheet/models/syn001/valve.py +414 -0
  123. openflowsheet/numerics/__init__.py +14 -0
  124. openflowsheet/numerics/anderson.py +507 -0
  125. openflowsheet/numerics/linear.py +233 -0
  126. openflowsheet/numerics/newton.py +892 -0
  127. openflowsheet/numerics/ptc.py +759 -0
  128. openflowsheet/numerics/scaling.py +187 -0
  129. openflowsheet/orchestrator/__init__.py +14 -0
  130. openflowsheet/orchestrator/attempts.py +595 -0
  131. openflowsheet/orchestrator/budget.py +128 -0
  132. openflowsheet/orchestrator/execution.py +861 -0
  133. openflowsheet/orchestrator/executor.py +1096 -0
  134. openflowsheet/orchestrator/homotopy.py +398 -0
  135. openflowsheet/orchestrator/mass.py +450 -0
  136. openflowsheet/orchestrator/merge.py +266 -0
  137. openflowsheet/orchestrator/phase_contract.py +527 -0
  138. openflowsheet/orchestrator/rank.py +251 -0
  139. openflowsheet/orchestrator/recovery.py +85 -0
  140. openflowsheet/orchestrator/region.py +2568 -0
  141. openflowsheet/orchestrator/revision.py +409 -0
  142. openflowsheet/orchestrator/roots.py +134 -0
  143. openflowsheet/orchestrator/splits.py +526 -0
  144. openflowsheet/orchestrator/tear.py +753 -0
  145. openflowsheet/orchestrator/trace.py +826 -0
  146. openflowsheet/orchestrator/warm_start.py +136 -0
  147. openflowsheet/py.typed +0 -0
  148. openflowsheet/resources.py +46 -0
  149. openflowsheet/run/__init__.py +16 -0
  150. openflowsheet/run/bundle.py +259 -0
  151. openflowsheet/run/compare.py +767 -0
  152. openflowsheet/run/identity.py +185 -0
  153. openflowsheet/run/manifest.py +351 -0
  154. openflowsheet/run/replay.py +344 -0
  155. openflowsheet/run/session.py +140 -0
  156. openflowsheet/run/solution_state.py +109 -0
  157. openflowsheet/serialize.py +309 -0
  158. openflowsheet/thermo/__init__.py +224 -0
  159. openflowsheet/thermo/cache.py +339 -0
  160. openflowsheet/thermo/syn001.py +423 -0
  161. openflowsheet/units/__init__.py +601 -0
  162. openflowsheet/verify/__init__.py +221 -0
  163. openflowsheet/verify/certificate.py +1235 -0
  164. openflowsheet/verify/checks.py +930 -0
  165. openflowsheet/verify/failure.py +480 -0
  166. openflowsheet/verify/projection.py +199 -0
  167. openflowsheet/verify/regularity.py +486 -0
  168. openflowsheet/verify/saturation.py +253 -0
  169. openflowsheet/verify/table.py +1652 -0
  170. openflowsheet/verify/zero_flow.py +240 -0
  171. openflowsheet-0.1.1.dist-info/METADATA +101 -0
  172. openflowsheet-0.1.1.dist-info/RECORD +177 -0
  173. openflowsheet-0.1.1.dist-info/WHEEL +5 -0
  174. openflowsheet-0.1.1.dist-info/entry_points.txt +2 -0
  175. openflowsheet-0.1.1.dist-info/licenses/LICENSE +202 -0
  176. openflowsheet-0.1.1.dist-info/licenses/NOTICE +27 -0
  177. openflowsheet-0.1.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,16 @@
1
+ """Agent-native open process simulator, provisional import name ``openflowsheet``.
2
+
3
+ This distribution is the single installable package described in blueprint v3.1 §15: one
4
+ modular monorepo with logical layers rather than microservices. The subpackages ``ir``,
5
+ ``units``, ``models``, ``thermo``, ``compile``, ``graph``, ``numerics``, ``orchestrator``,
6
+ and ``application`` correspond to the architectural boundaries of blueprint §3, and each one
7
+ states its own responsibility and the work package that will introduce its behavior. Later
8
+ layers (``studies``, ``adapters``, clients, and the web workbench) are deliberately absent
9
+ until their packages start, per implementation plan §2.
10
+
11
+ No functionality yet; introduced by package P00 (repository bootstrap only).
12
+ """
13
+
14
+ __version__ = "0.1.1"
15
+
16
+ __all__ = ["__version__"]
@@ -0,0 +1,540 @@
1
+ generated_by: Fable 5.1, mpmath 1.3.0 at 40 significant digits, from plan §3.1 definitions and derivation §2, §4.1,
2
+ §5.1, §6 only; exact rational arithmetic for the triangular fixtures
3
+ specification: docs/derivations/K04-certificate-spec.md
4
+ independence: closed-form expectations; no verifier, solver, oracle or process_runtime code was used. The P01 reference
5
+ is read in --check to prove two derivations agree and is never copied.
6
+ check_tolerances:
7
+ molar_flow:
8
+ absolute: '1.0000e-9'
9
+ relative: '1.0000e-8'
10
+ scale: '3.00000'
11
+ total: '3.10000e-8'
12
+ scaled_total: '1.03333e-8'
13
+ heat_rate:
14
+ absolute: '1.0000e-5'
15
+ relative: '1.0000e-8'
16
+ scale: '100000.'
17
+ total: '0.00101000'
18
+ scaled_total: '1.01000e-8'
19
+ temperature:
20
+ absolute: '1.0000e-6'
21
+ relative: '0.0'
22
+ scale: '100.000'
23
+ total: '1.00000e-6'
24
+ scaled_total: '1.00000e-8'
25
+ pressure:
26
+ absolute: '0.010000'
27
+ relative: '0.0'
28
+ scale: '100000.'
29
+ total: '0.0100000'
30
+ scaled_total: '1.00000e-7'
31
+ normalized_composition:
32
+ absolute: '1.0000e-10'
33
+ relative: '0.0'
34
+ scale: '1.00000'
35
+ total: '1.00000e-10'
36
+ scaled_total: '1.00000e-10'
37
+ molar_flow_squared:
38
+ absolute: '3.0000e-9'
39
+ relative: '1.0000e-8'
40
+ scale: '9.00000'
41
+ total: '9.30000e-8'
42
+ scaled_total: '1.03333e-8'
43
+ scaled_tolerance_minimum: '1.00e-8'
44
+ regularity_policy:
45
+ matrix: the 47x47 scaled target Jacobian after the two alias eliminations, evaluated at the final state (K04 §7.1)
46
+ recipe: splu (ADR 0004 options) -> LinearOperator -> onenormest -> rcond_1 = 1/(||J||_1 ||J^-1||_1) (plan §6.3)
47
+ tau_ill_conditioned: 1e-8
48
+ svd_rank_tolerance: n * eps * sigma_max, eps = 2^-52
49
+ svd_dimension_cap: 2000
50
+ absolute_conditioning_threshold:
51
+ rule: '||J^-1||_1 <= tau_hat_min / (n eps); violation is ILL_CONDITIONED(absolute)'
52
+ syn001_n47: '958213.'
53
+ seed_n1_tol_1e-8: '4.50360e+7'
54
+ seed_n1_tol_1e-12: '4503.60'
55
+ solution_error_bound: recorded evidence with a statement, never a pass/fail check (K04 §7.4, amended 2026-09-22)
56
+ variants:
57
+ SYN-001-nominal:
58
+ r: '0.500'
59
+ T_flash_K: '360.00'
60
+ flash_regime: TWO_PHASE
61
+ t_star_mol_per_s:
62
+ - '0.29777671393051394767'
63
+ - '0.54639697692561612246'
64
+ - '0.79501723992071829724'
65
+ vapor_product_S4_mol_per_s:
66
+ - '0.70222328606948605233'
67
+ - '0.45360302307438387754'
68
+ - '0.20498276007928170276'
69
+ flash_liquid_S5_mol_per_s:
70
+ - '0.59555342786102789535'
71
+ - '1.0927939538512322449'
72
+ - '1.5900344798414365945'
73
+ purge_S7_mol_per_s:
74
+ - '0.29777671393051394767'
75
+ - '0.54639697692561612246'
76
+ - '0.79501723992071829724'
77
+ V_mol_per_s: '1.3608090692231516326'
78
+ L_mol_per_s: '3.2783818615536967347'
79
+ T_mix_K: '321.20013108193881014'
80
+ heater_outlet_regime: LIQUID
81
+ heater_outlet_beta: '0.0'
82
+ heater_outlet_sum_zK_350K: '0.96231656003527667518'
83
+ S3_vapor_mol_per_s:
84
+ - '0.0'
85
+ - '0.0'
86
+ - '0.0'
87
+ S3_liquid_mol_per_s:
88
+ - '1.2977767139305139477'
89
+ - '1.5463969769256161225'
90
+ - '1.7950172399207182972'
91
+ Q_heater_W: '13360.809069223151633'
92
+ Q_flash_W: '42977.260377520375599'
93
+ Q_total_W: '56338.069446743527231'
94
+ H_S2_W: '9835.1455846610902042'
95
+ H_S3_W: '23195.954653884241837'
96
+ H_S4_W: '46502.923862082437027'
97
+ H_S5_W: '19670.291169322180408'
98
+ H_S7_W: '9835.1455846610902042'
99
+ overall_energy_identity_W: '0.0'
100
+ SYN-001-once-through:
101
+ r: '0.0'
102
+ T_flash_K: '360.00'
103
+ flash_regime: TWO_PHASE
104
+ t_star_mol_per_s:
105
+ - '0.0'
106
+ - '0.0'
107
+ - '0.0'
108
+ vapor_product_S4_mol_per_s:
109
+ - '0.70222328606948605233'
110
+ - '0.45360302307438387754'
111
+ - '0.20498276007928170276'
112
+ flash_liquid_S5_mol_per_s:
113
+ - '0.29777671393051394767'
114
+ - '0.54639697692561612246'
115
+ - '0.79501723992071829724'
116
+ purge_S7_mol_per_s:
117
+ - '0.29777671393051394767'
118
+ - '0.54639697692561612246'
119
+ - '0.79501723992071829724'
120
+ V_mol_per_s: '1.3608090692231516326'
121
+ L_mol_per_s: '1.6391909307768483674'
122
+ T_mix_K: '300.00000000000000000'
123
+ heater_outlet_regime: TWO_PHASE
124
+ heater_outlet_beta: '0.10136872342672775985'
125
+ heater_outlet_sum_zK_350K: '1.0703142190807741552'
126
+ S3_vapor_mol_per_s:
127
+ - '0.20153742984785378405'
128
+ - '0.078098253651684779698'
129
+ - '0.024470486780644715795'
130
+ S3_liquid_mol_per_s:
131
+ - '0.79846257015214621595'
132
+ - '0.92190174634831522030'
133
+ - '0.97552951321935528421'
134
+ Q_heater_W: '23237.850393069453045'
135
+ Q_flash_W: '33100.219053674074186'
136
+ Q_total_W: '56338.069446743527231'
137
+ H_S2_W: '0.0'
138
+ H_S3_W: '23237.850393069453045'
139
+ H_S4_W: '46502.923862082437027'
140
+ H_S5_W: '9835.1455846610902042'
141
+ H_S7_W: '9835.1455846610902042'
142
+ overall_energy_identity_W: '0.0'
143
+ SYN-001-high-recycle:
144
+ r: '0.950'
145
+ T_flash_K: '360.00'
146
+ flash_regime: TWO_PHASE
147
+ t_star_mol_per_s:
148
+ - '5.6577575646797650058'
149
+ - '10.381542561586706327'
150
+ - '15.105327558493647647'
151
+ vapor_product_S4_mol_per_s:
152
+ - '0.70222328606948605233'
153
+ - '0.45360302307438387754'
154
+ - '0.20498276007928170276'
155
+ flash_liquid_S5_mol_per_s:
156
+ - '5.9555342786102789535'
157
+ - '10.927939538512322449'
158
+ - '15.900344798414365945'
159
+ purge_S7_mol_per_s:
160
+ - '0.29777671393051394767'
161
+ - '0.54639697692561612246'
162
+ - '0.79501723992071829724'
163
+ V_mol_per_s: '1.3608090692231516326'
164
+ L_mol_per_s: '32.783818615536967347'
165
+ T_mix_K: '354.72830684634057450'
166
+ heater_outlet_regime: LIQUID
167
+ heater_outlet_beta: '0.0'
168
+ heater_outlet_sum_zK_350K: '0.79151740409485847777'
169
+ S3_vapor_mol_per_s:
170
+ - '0.0'
171
+ - '0.0'
172
+ - '0.0'
173
+ S3_liquid_mol_per_s:
174
+ - '6.6577575646797650058'
175
+ - '11.381542561586706327'
176
+ - '16.105327558493647647'
177
+ Q_heater_W: '-16144.627684760118980'
178
+ Q_flash_W: '72482.697131503646211'
179
+ Q_total_W: '56338.069446743527231'
180
+ H_S2_W: '186867.76610856071388'
181
+ H_S3_W: '170723.13842380059490'
182
+ H_S4_W: '46502.923862082437027'
183
+ H_S5_W: '196702.91169322180408'
184
+ H_S7_W: '9835.1455846610902042'
185
+ overall_energy_identity_W: '0.0'
186
+ SYN-001-all-liquid-310K:
187
+ r: '0.500'
188
+ T_flash_K: '310.00'
189
+ flash_regime: LIQUID
190
+ t_star_mol_per_s:
191
+ - '1.0000000000000000000'
192
+ - '1.0000000000000000000'
193
+ - '1.0000000000000000000'
194
+ vapor_product_S4_mol_per_s:
195
+ - '0.0'
196
+ - '0.0'
197
+ - '0.0'
198
+ flash_liquid_S5_mol_per_s:
199
+ - '2.0000000000000000000'
200
+ - '2.0000000000000000000'
201
+ - '2.0000000000000000000'
202
+ purge_S7_mol_per_s:
203
+ - '1.0000000000000000000'
204
+ - '1.0000000000000000000'
205
+ - '1.0000000000000000000'
206
+ V_mol_per_s: '0.0'
207
+ L_mol_per_s: '6.0000000000000000000'
208
+ T_mix_K: '305.00000000000000000'
209
+ heater_outlet_regime: TWO_PHASE
210
+ heater_outlet_beta: '0.10136872342672775985'
211
+ heater_outlet_sum_zK_350K: '1.0703142190807741552'
212
+ S3_vapor_mol_per_s:
213
+ - '0.40307485969570756811'
214
+ - '0.15619650730336955940'
215
+ - '0.048940973561289431590'
216
+ S3_liquid_mol_per_s:
217
+ - '1.5969251403042924319'
218
+ - '1.8438034926966304406'
219
+ - '1.9510590264387105684'
220
+ Q_heater_W: '43475.700786138906090'
221
+ Q_flash_W: '-40475.700786138906090'
222
+ Q_total_W: '3000.0000000000000000'
223
+ H_S2_W: '3000.0000000000000000'
224
+ H_S3_W: '46475.700786138906090'
225
+ H_S4_W: '0.0'
226
+ H_S5_W: '6000.0000000000000000'
227
+ H_S7_W: '3000.0000000000000000'
228
+ overall_energy_identity_W: '0.0'
229
+ SYN-001-all-vapor-420K:
230
+ r: '0.500'
231
+ T_flash_K: '420.00'
232
+ flash_regime: VAPOR
233
+ t_star_mol_per_s:
234
+ - '0.0'
235
+ - '0.0'
236
+ - '0.0'
237
+ vapor_product_S4_mol_per_s:
238
+ - '1.0000000000000000000'
239
+ - '1.0000000000000000000'
240
+ - '1.0000000000000000000'
241
+ flash_liquid_S5_mol_per_s:
242
+ - '0.0'
243
+ - '0.0'
244
+ - '0.0'
245
+ purge_S7_mol_per_s:
246
+ - '0.0'
247
+ - '0.0'
248
+ - '0.0'
249
+ V_mol_per_s: '3.0000000000000000000'
250
+ L_mol_per_s: '0.0'
251
+ T_mix_K: '300.00000000000000000'
252
+ heater_outlet_regime: TWO_PHASE
253
+ heater_outlet_beta: '0.10136872342672775985'
254
+ heater_outlet_sum_zK_350K: '1.0703142190807741552'
255
+ S3_vapor_mol_per_s:
256
+ - '0.20153742984785378405'
257
+ - '0.078098253651684779698'
258
+ - '0.024470486780644715795'
259
+ S3_liquid_mol_per_s:
260
+ - '0.79846257015214621595'
261
+ - '0.92190174634831522030'
262
+ - '0.97552951321935528421'
263
+ Q_heater_W: '23237.850393069453045'
264
+ Q_flash_W: '102762.14960693054695'
265
+ Q_total_W: '126000.00000000000000'
266
+ H_S2_W: '0.0'
267
+ H_S3_W: '23237.850393069453045'
268
+ H_S4_W: '126000.00000000000000'
269
+ H_S5_W: '0.0'
270
+ H_S7_W: '0.0'
271
+ overall_energy_identity_W: '0.0'
272
+ injections:
273
+ INJ-1-energy-bookkeeping:
274
+ state: nominal x(t*) with U-HEAT.Q + delta
275
+ fails_at_W: '1'
276
+ passes_at_W: 5e-4
277
+ row_shift: HEAT-duty by exactly delta; independent heater and overall energy checks by delta
278
+ energy_tolerance_W: '0.00101000'
279
+ INJ-2-trivial-root:
280
+ state: once-through x(t*) with S3's lifted split forced all-liquid and both duties closed
281
+ S3_liquid_forced_mol_per_s:
282
+ - '1.0000000000000000000'
283
+ - '1.0000000000000000000'
284
+ - '1.0000000000000000000'
285
+ Q_heater_spurious_W: '15000.000000000000000'
286
+ Q_heater_true_W: '23237.850393069453045'
287
+ Q_flash_spurious_W: '41338.069446743527231'
288
+ Q_flash_true_W: '33100.219053674074186'
289
+ offset_W: '8237.8503930694530451'
290
+ duty_sum_W: '56338.069446743527231'
291
+ S3_sum_xK_350K: '1.0703142190807741552'
292
+ S3_true_beta: '0.10136872342672775985'
293
+ S3_true_V_mol_per_s: '0.30410617028018327955'
294
+ S3_true_vapor_mol_per_s:
295
+ - '0.20153742984785378405'
296
+ - '0.078098253651684779698'
297
+ - '0.024470486780644715795'
298
+ passes: residual (all 49 rows), material balances, alias certificates, overall energy identity, regularity
299
+ fails: phase admissibility (S3, all_liquid); independent split (S3); heater and flash unit energy
300
+ INJ-3-consistent-near-state:
301
+ state: nominal, t* + 1e-6 e_C reconstructed through the tear map
302
+ t_mol_per_s:
303
+ - '0.29777671393051394767'
304
+ - '0.54639697692561612246'
305
+ - '0.79501823992071829724'
306
+ R_mol_per_s:
307
+ - '2.1026619074827601294e-7'
308
+ - '2.0915418562319922615e-7'
309
+ - '-4.3862216621698096089e-7'
310
+ R_inf_mol_per_s: '4.3862216621698096089e-7'
311
+ flow_tolerance_mol_per_s: '3.10000e-8'
312
+ mixer_margin: '4.2058543350126470152e-7'
313
+ fails: residual (the three SPLIT-recycle rows); material (splitter ratio rows)
314
+ passes: every other check
315
+ INJ-6-one-coordinate:
316
+ state: nominal x(t*) with S6.n.A + delta, rows evaluated at x directly
317
+ fails_at_mol_per_s: 1e-6
318
+ passes_at_mol_per_s: 1e-8
319
+ MIX_energy_shift_per_mol_per_s_W: '6000.00'
320
+ rows_shifted_by_delta:
321
+ - U-MIX:MIX-mole:A
322
+ - U-SPLIT:SPLIT-recycle:A
323
+ row_shifted_by_delta_h: U-MIX:MIX-energy
324
+ INJ-7-tampered-specification:
325
+ state: nominal x(t*) with S3.T + delta
326
+ fails_at_K: 1e-5
327
+ passes_at_K: 1e-7
328
+ HEAT_duty_shift_per_K_W: '-463.919093078'
329
+ FLASH_duty_shift_per_K_W: '463.919093078'
330
+ temperature_tolerance_K: '1.00e-6'
331
+ regularity_fixtures:
332
+ triangular_unit_diagonal:
333
+ '16':
334
+ definition: U = I - N, N strictly upper triangular of ones; every U_ii = 1
335
+ rcond_1_exact: '1.9073486328125000000e-6'
336
+ rcond_1_exact_rational: 1/(16 * 2^15)
337
+ sigma_min_upper_bound: '0.000122070'
338
+ sigma_min_lower_bound: '7.62939e-6'
339
+ svd_rank_tolerance_bounds:
340
+ - '1.42109e-14'
341
+ - '5.68434e-14'
342
+ expected_status: NO_RANK_LOSS_DETECTED
343
+ expected_svd_rank: 16
344
+ u_diagonal_ratio: '1'
345
+ '32':
346
+ definition: U = I - N, N strictly upper triangular of ones; every U_ii = 1
347
+ rcond_1_exact: '1.4551915228366851807e-11'
348
+ rcond_1_exact_rational: 1/(32 * 2^31)
349
+ sigma_min_upper_bound: '2.63418e-9'
350
+ sigma_min_lower_bound: '8.23181e-11'
351
+ svd_rank_tolerance_bounds:
352
+ - '4.01944e-14'
353
+ - '2.27374e-13'
354
+ expected_status: ILL_CONDITIONED
355
+ expected_svd_rank: 32
356
+ u_diagonal_ratio: '1'
357
+ '64':
358
+ definition: U = I - N, N strictly upper triangular of ones; every U_ii = 1
359
+ rcond_1_exact: '1.6940658945086006781e-21'
360
+ rcond_1_exact_rational: 1/(64 * 2^63)
361
+ sigma_min_upper_bound: '8.67362e-19'
362
+ sigma_min_lower_bound: '1.35525e-20'
363
+ svd_rank_tolerance_bounds:
364
+ - '1.13687e-13'
365
+ - '9.09495e-13'
366
+ expected_status: RANK_DEFICIENT
367
+ expected_svd_rank: 63
368
+ u_diagonal_ratio: '1'
369
+ x_squared:
370
+ exact_root:
371
+ x: '0'
372
+ F: '0'
373
+ J: '0'
374
+ expected_status: RANK_DEFICIENT
375
+ svd_rank: 0
376
+ k03_newton_from_1:
377
+ steps: 14
378
+ x_final: '0.000061035156250000000000'
379
+ F_final: '3.7252902984619140625e-9'
380
+ J_final: '0.00012207031250000000000'
381
+ rcond_1: '1'
382
+ inverse_one_norm: '8192.0000000000000000'
383
+ absolute_threshold: '4.50360e+7'
384
+ solution_error_bound_scaled: '0.000030517578125000000000'
385
+ expected_status: NO_RANK_LOSS_DETECTED
386
+ expected_verdict: VERIFIED, with the bound recorded and its statement
387
+ k03_newton_from_1_tol_1e-12:
388
+ steps: 20
389
+ x_final: '9.5367431640625000000e-7'
390
+ F_final: '9.0949470177292823792e-13'
391
+ J_final: '1.9073486328125000000e-6'
392
+ rcond_1: '1'
393
+ inverse_one_norm: '524288.00000000000000'
394
+ absolute_threshold: '4503.60'
395
+ solution_error_bound_scaled: '4.7683715820312500000e-7'
396
+ expected_status: ILL_CONDITIONED(absolute)
397
+ expected_verdict: UNVERIFIED
398
+ numerical_policy:
399
+ id: K04-numerical-policy-v1
400
+ relative: 1e-9
401
+ near_threshold_margin: '10'
402
+ floors:
403
+ residual_inf_unscaled:
404
+ floor: '3.10000e-8'
405
+ why: ADR 0001 D6 flow rule (the K03 tear rows)
406
+ merit:
407
+ floor: '5.33889e-17'
408
+ why: half the squared scaled flow tolerance
409
+ witness_max_diff:
410
+ floor: 1e-7
411
+ why: K04 §4.8 derivative-witness tolerance
412
+ step_inf_scaled:
413
+ floor: '1.03333e-8'
414
+ why: the scaled flow tolerance
415
+ residual_normalized:
416
+ floor: 1e-12
417
+ why: ADR 0004 D3.2
418
+ eta:
419
+ floor: 1e-10
420
+ why: K03 §3.4
421
+ constant_mismatch:
422
+ floor: 1e-2
423
+ why: ADR 0001 D6 pressure
424
+ u_diag_min_abs:
425
+ floor: 1e-10 x u_diag_max_abs
426
+ why: ADR 0004 D3.4 screen ratio
427
+ u_diag_max_abs:
428
+ floor: '0'
429
+ why: compared relatively
430
+ rcond_1:
431
+ floor: 1e-14
432
+ why: n eps at n = 47; below it the estimate is noise
433
+ solution_error_bound_scaled:
434
+ floor: '1.00e-8'
435
+ why: the scaled tolerance minimum (recorded evidence, not a check)
436
+ inverse_one_norm_estimate:
437
+ floor: '0'
438
+ why: compared relatively; its threshold is a policy-derived constant
439
+ check.value:
440
+ floor: the check's own tolerance
441
+ why: ADR 0007 D2.2
442
+ kappa_2:
443
+ floor: '0'
444
+ why: 'ADR 0009 D3 as amended: relative only, inside its comparability window'
445
+ gamma_inf:
446
+ floor: '0'
447
+ why: 'ADR 0009 D3 as amended: relative only, inside its comparability window'
448
+ comparability_windows:
449
+ kappa_2:
450
+ sibling: residual_inf_scaled
451
+ minimum: 1e-4
452
+ why: 'measured on the CI pair: <= 3.3e-13 relative where |f_k| >= 1e-4, up to 1.06e-8 below'
453
+ gamma_inf:
454
+ sibling: residual_inf_scaled
455
+ minimum: 1e-4
456
+ why: 'measured on the CI pair: <= 3.3e-13 relative where |f_k| >= 1e-4, up to 1.06e-8 below'
457
+ exact_fields:
458
+ - alpha
459
+ - scales
460
+ - bounds
461
+ - tolerance
462
+ - beta_substitution
463
+ - delta_scaled_inf
464
+ unreproducible_counts:
465
+ - property_calls
466
+ - requested_evaluations
467
+ - cache_hits
468
+ - nnz_L
469
+ - nnz_U
470
+ digests_never_compared:
471
+ - state_sha256
472
+ - full_state_sha256
473
+ - jacobian_identity
474
+ - target_state_sha256
475
+ floors_measured_2026_09_22:
476
+ note: measured by Fable on the K02 flowsheet through the CasADi backend and SciPy SuperLU at the five reconstructed
477
+ x(t*); regression floors, not closed forms
478
+ residual_rows_unscaled_max:
479
+ molar_flow: '3.6e-15'
480
+ temperature: '0.0'
481
+ pressure_or_heat_rate: '1.5e-10'
482
+ molar_flow_squared: '1.8e-14'
483
+ material_balance_max_mol_per_s: '3.6e-15'
484
+ energy_balance_independent_flash_max_W: '9.4e-10'
485
+ specification_rows_max: '0.0'
486
+ alias_identity_max_Pa: '1.5e-10'
487
+ rcond_1_target_47x47_scaled:
488
+ nominal: '1.161e-3'
489
+ once_through: '1.851e-3'
490
+ high_recycle: '1.331e-4'
491
+ all_liquid_310K: '2.019e-3'
492
+ all_vapor_420K: '7.705e-4'
493
+ trivial_root_spurious: '2.194e-3'
494
+ rcond_1_target_47x47_unscaled_range: 9.0e-12 to 5.9e-11
495
+ onenormest_over_exact_one_norm: 1.000 at every state and fixture
496
+ u_diagonal_ratio_range: 4.4e-3 to 2.6e-1
497
+ solution_error_bound_scaled_max: 6.9e-13 (high recycle)
498
+ fd_compiled_function_scaled_max_abs:
499
+ delta=1e-4: '2.7e-8'
500
+ delta=1e-5: '2.8e-10'
501
+ delta=1e-6: '2.8e-9'
502
+ delta=1e-7: '1.2e-8'
503
+ off_pattern: '0.0'
504
+ smallest_nonzero_scaled_jacobian_entry: '1.6e-4'
505
+ provider_vs_oracle_enthalpy_J_per_mol: '0.0'
506
+ provider_vs_oracle_K_relative: '6.3e-16'
507
+ checks_passed:
508
+ - 'SYN-001-nominal: R(t*) = 0 to 1e-35'
509
+ - 'SYN-001-nominal: Q_h + Q_f = H(S4) + H(S7) - H(S1) = c_p (T_f - 300) F_tot + V sum y_i L_i to 1e-30'
510
+ - 'SYN-001-nominal: mixer, flash and envelope component balances close to 1e-35'
511
+ - 'SYN-001-once-through: R(t*) = 0 to 1e-35'
512
+ - 'SYN-001-once-through: Q_h + Q_f = H(S4) + H(S7) - H(S1) = c_p (T_f - 300) F_tot + V sum y_i L_i to 1e-30'
513
+ - 'SYN-001-once-through: mixer, flash and envelope component balances close to 1e-35'
514
+ - 'SYN-001-high-recycle: R(t*) = 0 to 1e-35'
515
+ - 'SYN-001-high-recycle: Q_h + Q_f = H(S4) + H(S7) - H(S1) = c_p (T_f - 300) F_tot + V sum y_i L_i to 1e-30'
516
+ - 'SYN-001-high-recycle: mixer, flash and envelope component balances close to 1e-35'
517
+ - 'SYN-001-all-liquid-310K: R(t*) = 0 to 1e-35'
518
+ - 'SYN-001-all-liquid-310K: Q_h + Q_f = H(S4) + H(S7) - H(S1) = c_p (T_f - 300) F_tot + V sum y_i L_i to 1e-30'
519
+ - 'SYN-001-all-liquid-310K: mixer, flash and envelope component balances close to 1e-35'
520
+ - 'SYN-001-all-vapor-420K: R(t*) = 0 to 1e-35'
521
+ - 'SYN-001-all-vapor-420K: Q_h + Q_f = H(S4) + H(S7) - H(S1) = c_p (T_f - 300) F_tot + V sum y_i L_i to 1e-30'
522
+ - 'SYN-001-all-vapor-420K: mixer, flash and envelope component balances close to 1e-35'
523
+ - '360 K variants: vapor product and total duty invariant in r to 1e-35 / 1e-30'
524
+ - 'INJ-2: forcing S3 all-liquid at once-through gives Q_h = c_p (350 - 300) F_tot = 15000 W exactly; the offset
525
+ V_h sum y_h,i L_i exceeds 8000 W; the duty sum is invariant; sum x K(350 K) > 1 + 1e-3'
526
+ - 'INJ-3: |R(t* + 1e-6 e_C)| exceeds 10x the flow tolerance; the three rows are distinct; the mixer admits the state'
527
+ - 'INJ-6: +1e-6 mol/s on S6.n.A fails two flow rows by > 10x and MIX-energy by > 5x; +1e-8 passes every row by >
528
+ 3x'
529
+ - 'INJ-7: +1e-5 K on S3.T fails HEAT-T by > 9x and both duty rows by > 4x; +1e-7 K passes by > 9x'
530
+ - 'INJ-1: +1 W on the heater duty fails HEAT-duty by > 900x; +5e-4 W passes by > 2x'
531
+ - 'triangular fixtures: n=16 rcond_1 > 100 tau_ill; n=32 rcond_1 < tau_ill/100 with sigma_min > 100x the SVD rank
532
+ tolerance (full rank); n=64 sigma_min < 1e-4 x the SVD rank tolerance (rank deficient)'
533
+ - scaled tolerance minimum over row kinds is 1e-8 (temperature rows)
534
+ - absolute-conditioning threshold for SYN-001 exceeds 2000x the measured maximum ||J^-1||_1 of 476.1
535
+ - 'SQ-1: x^2 = 0 from x0 = 1 at tolerance 1e-8: 14 halvings land on 2^-14; F = 2^-28; the recorded bound 2^-15 exceeds
536
+ 1000x the scaled tolerance; ||J^-1||_1 = 2^13 sits 5000x under the absolute threshold, so the verdict is VERIFIED
537
+ with the bound recorded'
538
+ - 'SQ-2: x^2 = 0 from x0 = 1 at tolerance 1e-12: 20 halvings land on 2^-20; ||J^-1||_1 = 2^19 exceeds 100x the absolute
539
+ threshold 1e-12/eps, so the status is ILL_CONDITIONED(absolute) and the verdict UNVERIFIED'
540
+ - every certified quantity agrees with the P01 20-digit reference to 4.76e-20 relative (independent derivation)