universal-physics-tensor 0.45.2 → 0.47.0

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 (548) hide show
  1. package/README.md +85 -66
  2. package/bin/upt.mjs +22 -22
  3. package/dist/atlas/applicability.d.ts +108 -0
  4. package/dist/atlas/applicability.d.ts.map +1 -0
  5. package/dist/atlas/applicability.js +301 -0
  6. package/dist/atlas/applicability.js.map +1 -0
  7. package/dist/atlas/association.d.ts +92 -0
  8. package/dist/atlas/association.d.ts.map +1 -0
  9. package/dist/atlas/association.js +112 -0
  10. package/dist/atlas/association.js.map +1 -0
  11. package/dist/atlas/benchmark/backend-shapes.d.ts +47 -0
  12. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -0
  13. package/dist/atlas/benchmark/backend-shapes.js +58 -0
  14. package/dist/atlas/benchmark/backend-shapes.js.map +1 -0
  15. package/dist/atlas/benchmark/baselines.d.ts +64 -0
  16. package/dist/atlas/benchmark/baselines.d.ts.map +1 -0
  17. package/dist/atlas/benchmark/baselines.js +112 -0
  18. package/dist/atlas/benchmark/baselines.js.map +1 -0
  19. package/dist/atlas/benchmark/leakage.d.ts +56 -0
  20. package/dist/atlas/benchmark/leakage.d.ts.map +1 -0
  21. package/dist/atlas/benchmark/leakage.js +100 -0
  22. package/dist/atlas/benchmark/leakage.js.map +1 -0
  23. package/dist/atlas/benchmark/loader.d.ts +56 -0
  24. package/dist/atlas/benchmark/loader.d.ts.map +1 -0
  25. package/dist/atlas/benchmark/loader.js +104 -0
  26. package/dist/atlas/benchmark/loader.js.map +1 -0
  27. package/dist/atlas/benchmark/run-atlas.d.ts +72 -0
  28. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -0
  29. package/dist/atlas/benchmark/run-atlas.js +210 -0
  30. package/dist/atlas/benchmark/run-atlas.js.map +1 -0
  31. package/dist/atlas/benchmark/stats.d.ts +90 -0
  32. package/dist/atlas/benchmark/stats.d.ts.map +1 -0
  33. package/dist/atlas/benchmark/stats.js +159 -0
  34. package/dist/atlas/benchmark/stats.js.map +1 -0
  35. package/dist/atlas/benchmark/study.d.ts +120 -0
  36. package/dist/atlas/benchmark/study.d.ts.map +1 -0
  37. package/dist/atlas/benchmark/study.js +192 -0
  38. package/dist/atlas/benchmark/study.js.map +1 -0
  39. package/dist/atlas/benchmark/types.d.ts +79 -0
  40. package/dist/atlas/benchmark/types.d.ts.map +1 -0
  41. package/dist/atlas/benchmark/types.js +46 -0
  42. package/dist/atlas/benchmark/types.js.map +1 -0
  43. package/dist/atlas/composition-table.d.ts +55 -0
  44. package/dist/atlas/composition-table.d.ts.map +1 -0
  45. package/dist/atlas/composition-table.js +133 -0
  46. package/dist/atlas/composition-table.js.map +1 -0
  47. package/dist/atlas/conventions.d.ts +63 -0
  48. package/dist/atlas/conventions.d.ts.map +1 -0
  49. package/dist/atlas/conventions.js +93 -0
  50. package/dist/atlas/conventions.js.map +1 -0
  51. package/dist/atlas/coverage.d.ts +93 -0
  52. package/dist/atlas/coverage.d.ts.map +1 -0
  53. package/dist/atlas/coverage.js +69 -0
  54. package/dist/atlas/coverage.js.map +1 -0
  55. package/dist/atlas/derivation.d.ts +137 -0
  56. package/dist/atlas/derivation.d.ts.map +1 -0
  57. package/dist/atlas/derivation.js +190 -0
  58. package/dist/atlas/derivation.js.map +1 -0
  59. package/dist/atlas/derive-evidence.d.ts +218 -0
  60. package/dist/atlas/derive-evidence.d.ts.map +1 -0
  61. package/dist/atlas/derive-evidence.js +225 -0
  62. package/dist/atlas/derive-evidence.js.map +1 -0
  63. package/dist/atlas/diffusion/bridges-closure.d.ts +63 -0
  64. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -0
  65. package/dist/atlas/diffusion/bridges-closure.js +350 -0
  66. package/dist/atlas/diffusion/bridges-closure.js.map +1 -0
  67. package/dist/atlas/diffusion/bridges.d.ts +36 -0
  68. package/dist/atlas/diffusion/bridges.d.ts.map +1 -0
  69. package/dist/atlas/diffusion/bridges.js +226 -0
  70. package/dist/atlas/diffusion/bridges.js.map +1 -0
  71. package/dist/atlas/diffusion/dimensions.d.ts +21 -0
  72. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -0
  73. package/dist/atlas/diffusion/dimensions.js +21 -0
  74. package/dist/atlas/diffusion/dimensions.js.map +1 -0
  75. package/dist/atlas/diffusion/index.d.ts +16 -0
  76. package/dist/atlas/diffusion/index.d.ts.map +1 -0
  77. package/dist/atlas/diffusion/index.js +23 -0
  78. package/dist/atlas/diffusion/index.js.map +1 -0
  79. package/dist/atlas/diffusion/models.d.ts +24 -0
  80. package/dist/atlas/diffusion/models.d.ts.map +1 -0
  81. package/dist/atlas/diffusion/models.js +139 -0
  82. package/dist/atlas/diffusion/models.js.map +1 -0
  83. package/dist/atlas/diffusion/numerics.d.ts +181 -0
  84. package/dist/atlas/diffusion/numerics.d.ts.map +1 -0
  85. package/dist/atlas/diffusion/numerics.js +251 -0
  86. package/dist/atlas/diffusion/numerics.js.map +1 -0
  87. package/dist/atlas/error-algebra.d.ts +52 -0
  88. package/dist/atlas/error-algebra.d.ts.map +1 -0
  89. package/dist/atlas/error-algebra.js +55 -0
  90. package/dist/atlas/error-algebra.js.map +1 -0
  91. package/dist/atlas/export.d.ts +48 -0
  92. package/dist/atlas/export.d.ts.map +1 -0
  93. package/dist/atlas/export.js +106 -0
  94. package/dist/atlas/export.js.map +1 -0
  95. package/dist/atlas/families.d.ts +14 -0
  96. package/dist/atlas/families.d.ts.map +1 -0
  97. package/dist/atlas/families.js +20 -0
  98. package/dist/atlas/families.js.map +1 -0
  99. package/dist/atlas/index.d.ts +90 -0
  100. package/dist/atlas/index.d.ts.map +1 -0
  101. package/dist/atlas/index.js +69 -0
  102. package/dist/atlas/index.js.map +1 -0
  103. package/dist/atlas/link-prediction.d.ts +71 -0
  104. package/dist/atlas/link-prediction.d.ts.map +1 -0
  105. package/dist/atlas/link-prediction.js +128 -0
  106. package/dist/atlas/link-prediction.js.map +1 -0
  107. package/dist/atlas/model.d.ts +70 -0
  108. package/dist/atlas/model.d.ts.map +1 -0
  109. package/dist/atlas/model.js +26 -0
  110. package/dist/atlas/model.js.map +1 -0
  111. package/dist/atlas/oscillators/bridges-coarse.d.ts +71 -0
  112. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -0
  113. package/dist/atlas/oscillators/bridges-coarse.js +146 -0
  114. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -0
  115. package/dist/atlas/oscillators/bridges-exact.d.ts +70 -0
  116. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -0
  117. package/dist/atlas/oscillators/bridges-exact.js +230 -0
  118. package/dist/atlas/oscillators/bridges-exact.js.map +1 -0
  119. package/dist/atlas/oscillators/bridges-limits.d.ts +118 -0
  120. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -0
  121. package/dist/atlas/oscillators/bridges-limits.js +345 -0
  122. package/dist/atlas/oscillators/bridges-limits.js.map +1 -0
  123. package/dist/atlas/oscillators/dimensions.d.ts +34 -0
  124. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -0
  125. package/dist/atlas/oscillators/dimensions.js +34 -0
  126. package/dist/atlas/oscillators/dimensions.js.map +1 -0
  127. package/dist/atlas/oscillators/index.d.ts +38 -0
  128. package/dist/atlas/oscillators/index.d.ts.map +1 -0
  129. package/dist/atlas/oscillators/index.js +37 -0
  130. package/dist/atlas/oscillators/index.js.map +1 -0
  131. package/dist/atlas/oscillators/models.d.ts +25 -0
  132. package/dist/atlas/oscillators/models.d.ts.map +1 -0
  133. package/dist/atlas/oscillators/models.js +160 -0
  134. package/dist/atlas/oscillators/models.js.map +1 -0
  135. package/dist/atlas/oscillators/rejections.d.ts +21 -0
  136. package/dist/atlas/oscillators/rejections.d.ts.map +1 -0
  137. package/dist/atlas/oscillators/rejections.js +54 -0
  138. package/dist/atlas/oscillators/rejections.js.map +1 -0
  139. package/dist/atlas/path-bound.d.ts +143 -0
  140. package/dist/atlas/path-bound.d.ts.map +1 -0
  141. package/dist/atlas/path-bound.js +268 -0
  142. package/dist/atlas/path-bound.js.map +1 -0
  143. package/dist/atlas/poster/associations.d.ts +66 -0
  144. package/dist/atlas/poster/associations.d.ts.map +1 -0
  145. package/dist/atlas/poster/associations.js +90 -0
  146. package/dist/atlas/poster/associations.js.map +1 -0
  147. package/dist/atlas/poster/derivations.d.ts +156 -0
  148. package/dist/atlas/poster/derivations.d.ts.map +1 -0
  149. package/dist/atlas/poster/derivations.js +430 -0
  150. package/dist/atlas/poster/derivations.js.map +1 -0
  151. package/dist/atlas/poster/statements.d.ts +198 -0
  152. package/dist/atlas/poster/statements.d.ts.map +1 -0
  153. package/dist/atlas/poster/statements.js +365 -0
  154. package/dist/atlas/poster/statements.js.map +1 -0
  155. package/dist/atlas/public.d.ts +26 -0
  156. package/dist/atlas/public.d.ts.map +1 -0
  157. package/dist/atlas/public.js +21 -0
  158. package/dist/atlas/public.js.map +1 -0
  159. package/dist/atlas/regime.d.ts +171 -0
  160. package/dist/atlas/regime.d.ts.map +1 -0
  161. package/dist/atlas/regime.js +309 -0
  162. package/dist/atlas/regime.js.map +1 -0
  163. package/dist/atlas/serialize.d.ts +50 -0
  164. package/dist/atlas/serialize.d.ts.map +1 -0
  165. package/dist/atlas/serialize.js +180 -0
  166. package/dist/atlas/serialize.js.map +1 -0
  167. package/dist/atlas/statement.d.ts +165 -0
  168. package/dist/atlas/statement.d.ts.map +1 -0
  169. package/dist/atlas/statement.js +176 -0
  170. package/dist/atlas/statement.js.map +1 -0
  171. package/dist/atlas/types.d.ts +325 -0
  172. package/dist/atlas/types.d.ts.map +1 -0
  173. package/dist/atlas/types.js +61 -0
  174. package/dist/atlas/types.js.map +1 -0
  175. package/dist/atlas/waves/bridges-closure.d.ts +39 -0
  176. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -0
  177. package/dist/atlas/waves/bridges-closure.js +226 -0
  178. package/dist/atlas/waves/bridges-closure.js.map +1 -0
  179. package/dist/atlas/waves/bridges.d.ts +49 -0
  180. package/dist/atlas/waves/bridges.d.ts.map +1 -0
  181. package/dist/atlas/waves/bridges.js +266 -0
  182. package/dist/atlas/waves/bridges.js.map +1 -0
  183. package/dist/atlas/waves/index.d.ts +16 -0
  184. package/dist/atlas/waves/index.d.ts.map +1 -0
  185. package/dist/atlas/waves/index.js +23 -0
  186. package/dist/atlas/waves/index.js.map +1 -0
  187. package/dist/atlas/waves/models.d.ts +29 -0
  188. package/dist/atlas/waves/models.d.ts.map +1 -0
  189. package/dist/atlas/waves/models.js +127 -0
  190. package/dist/atlas/waves/models.js.map +1 -0
  191. package/dist/atlas/waves/numerics.d.ts +149 -0
  192. package/dist/atlas/waves/numerics.d.ts.map +1 -0
  193. package/dist/atlas/waves/numerics.js +218 -0
  194. package/dist/atlas/waves/numerics.js.map +1 -0
  195. package/dist/atlas/witness-artifact.d.ts +65 -0
  196. package/dist/atlas/witness-artifact.d.ts.map +1 -0
  197. package/dist/atlas/witness-artifact.js +78 -0
  198. package/dist/atlas/witness-artifact.js.map +1 -0
  199. package/dist/atlas/witness-numeric.d.ts +81 -0
  200. package/dist/atlas/witness-numeric.d.ts.map +1 -0
  201. package/dist/atlas/witness-numeric.js +105 -0
  202. package/dist/atlas/witness-numeric.js.map +1 -0
  203. package/dist/atlas/witness-result.d.ts +77 -0
  204. package/dist/atlas/witness-result.d.ts.map +1 -0
  205. package/dist/atlas/witness-result.js +39 -0
  206. package/dist/atlas/witness-result.js.map +1 -0
  207. package/dist/atlas/witness-specs.d.ts +110 -0
  208. package/dist/atlas/witness-specs.d.ts.map +1 -0
  209. package/dist/atlas/witness-specs.js +372 -0
  210. package/dist/atlas/witness-specs.js.map +1 -0
  211. package/dist/atlas/witness-symbolic.d.ts +79 -0
  212. package/dist/atlas/witness-symbolic.d.ts.map +1 -0
  213. package/dist/atlas/witness-symbolic.js +140 -0
  214. package/dist/atlas/witness-symbolic.js.map +1 -0
  215. package/dist/atlas/witnesses/quantum-support.d.ts +50 -0
  216. package/dist/atlas/witnesses/quantum-support.d.ts.map +1 -0
  217. package/dist/atlas/witnesses/quantum-support.js +48 -0
  218. package/dist/atlas/witnesses/quantum-support.js.map +1 -0
  219. package/dist/bridges/be11-decoherence-confrontation.js.map +1 -1
  220. package/dist/bridges/be21-kss-confrontation.js.map +1 -1
  221. package/dist/bridges/be23-planckian-confrontation.js.map +1 -1
  222. package/dist/bridges/be35-bootstrap-confrontation.js.map +1 -1
  223. package/dist/bridges/be36-gw170817-confrontation.js.map +1 -1
  224. package/dist/bridges/be37-cassini-confrontation.js.map +1 -1
  225. package/dist/bridges/be48-collapse-confrontation.js.map +1 -1
  226. package/dist/bridges/be51-lensing-confrontation.d.ts.map +1 -1
  227. package/dist/bridges/be51-lensing-confrontation.js +5 -3
  228. package/dist/bridges/be51-lensing-confrontation.js.map +1 -1
  229. package/dist/bridges/be52-mercury-confrontation.d.ts.map +1 -1
  230. package/dist/bridges/be52-mercury-confrontation.js +4 -1
  231. package/dist/bridges/be52-mercury-confrontation.js.map +1 -1
  232. package/dist/bridges/be55-quantum-hall-confrontation.js.map +1 -1
  233. package/dist/bridges/be56-casimir-confrontation.js.map +1 -1
  234. package/dist/bridges/be58-johnson-nyquist-confrontation.js.map +1 -1
  235. package/dist/bridges/be59-ac-josephson-confrontation.js.map +1 -1
  236. package/dist/bridges/be60-fractional-qh-confrontation.js.map +1 -1
  237. package/dist/bridges/be61-wiedemann-franz-confrontation.js.map +1 -1
  238. package/dist/bridges/be62-bcs-gap-confrontation.js.map +1 -1
  239. package/dist/bridges/be63-chandrasekhar-mass-confrontation.js.map +1 -1
  240. package/dist/bridges/be64-eddington-luminosity-confrontation.js.map +1 -1
  241. package/dist/bridges/be65-jeans-mass-confrontation.js.map +1 -1
  242. package/dist/bridges/bridge-equations.d.ts +2 -2
  243. package/dist/bridges/bridge-equations.d.ts.map +1 -1
  244. package/dist/bridges/bridge-equations.js +2 -2
  245. package/dist/bridges/bridge-equations.js.map +1 -1
  246. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  247. package/dist/bridges/catalog-adapter.js.map +1 -1
  248. package/dist/bridges/confrontations.d.ts.map +1 -1
  249. package/dist/bridges/confrontations.js +7 -0
  250. package/dist/bridges/confrontations.js.map +1 -1
  251. package/dist/bridges/equations/_be-helpers.d.ts +2 -2
  252. package/dist/bridges/equations/_be-helpers.js +2 -2
  253. package/dist/bridges/equations/be-20-vacuum-energy.js.map +1 -1
  254. package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts +59 -72
  255. package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts.map +1 -1
  256. package/dist/bridges/equations/be-35-conformal-bootstrap.js +66 -98
  257. package/dist/bridges/equations/be-35-conformal-bootstrap.js.map +1 -1
  258. package/dist/bridges/equations/be-48-grw-localization.d.ts +9 -8
  259. package/dist/bridges/equations/be-48-grw-localization.d.ts.map +1 -1
  260. package/dist/bridges/equations/be-48-grw-localization.js +9 -8
  261. package/dist/bridges/equations/be-48-grw-localization.js.map +1 -1
  262. package/dist/bridges/gravitational-lensing.d.ts +10 -0
  263. package/dist/bridges/gravitational-lensing.d.ts.map +1 -1
  264. package/dist/bridges/gravitational-lensing.js.map +1 -1
  265. package/dist/bridges/index.d.ts +125 -7
  266. package/dist/bridges/index.d.ts.map +1 -1
  267. package/dist/bridges/index.js +483 -20
  268. package/dist/bridges/index.js.map +1 -1
  269. package/dist/bridges/observations/types.d.ts +14 -0
  270. package/dist/bridges/observations/types.d.ts.map +1 -1
  271. package/dist/bridges/observations/types.js.map +1 -1
  272. package/dist/bridges/perihelion-precession.d.ts +10 -0
  273. package/dist/bridges/perihelion-precession.d.ts.map +1 -1
  274. package/dist/bridges/perihelion-precession.js.map +1 -1
  275. package/dist/bridges/rhs-registry.js +2 -2
  276. package/dist/canonical/canonical-equation.d.ts +15 -0
  277. package/dist/canonical/canonical-equation.d.ts.map +1 -1
  278. package/dist/canonical/entries/_l1-build.d.ts +1 -1
  279. package/dist/canonical/entries/_l1-build.d.ts.map +1 -1
  280. package/dist/canonical/entries/atomic.d.ts.map +1 -1
  281. package/dist/canonical/entries/atomic.js +23 -0
  282. package/dist/canonical/entries/atomic.js.map +1 -1
  283. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  284. package/dist/canonical/entries/nonmonomial.js +93 -0
  285. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  286. package/dist/canonical/normal-form.js.map +1 -1
  287. package/dist/canonical/residual.d.ts +28 -0
  288. package/dist/canonical/residual.d.ts.map +1 -0
  289. package/dist/canonical/residual.js +31 -0
  290. package/dist/canonical/residual.js.map +1 -0
  291. package/dist/cli/command.d.ts +8 -0
  292. package/dist/cli/command.d.ts.map +1 -1
  293. package/dist/cli/command.js +10 -0
  294. package/dist/cli/command.js.map +1 -1
  295. package/dist/cli/commands/atlas.d.ts +3 -0
  296. package/dist/cli/commands/atlas.d.ts.map +1 -0
  297. package/dist/cli/commands/atlas.js +158 -0
  298. package/dist/cli/commands/atlas.js.map +1 -0
  299. package/dist/cli/commands/audit.js +3 -3
  300. package/dist/cli/commands/candidates.js +3 -3
  301. package/dist/cli/commands/canonical.js +3 -3
  302. package/dist/cli/commands/confront.d.ts.map +1 -1
  303. package/dist/cli/commands/confront.js +8 -1
  304. package/dist/cli/commands/confront.js.map +1 -1
  305. package/dist/cli/commands/connectors.js +7 -7
  306. package/dist/cli/commands/coverage.js +3 -3
  307. package/dist/cli/commands/derive.d.ts.map +1 -1
  308. package/dist/cli/commands/derive.js +40 -9
  309. package/dist/cli/commands/derive.js.map +1 -1
  310. package/dist/cli/commands/discover.d.ts.map +1 -1
  311. package/dist/cli/commands/discover.js +46 -27
  312. package/dist/cli/commands/discover.js.map +1 -1
  313. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  314. package/dist/cli/commands/evaluate.js +2 -1
  315. package/dist/cli/commands/evaluate.js.map +1 -1
  316. package/dist/cli/commands/explain.d.ts.map +1 -1
  317. package/dist/cli/commands/explain.js +19 -6
  318. package/dist/cli/commands/explain.js.map +1 -1
  319. package/dist/cli/commands/index.d.ts +3 -0
  320. package/dist/cli/commands/index.d.ts.map +1 -1
  321. package/dist/cli/commands/index.js +3 -0
  322. package/dist/cli/commands/index.js.map +1 -1
  323. package/dist/cli/commands/map.d.ts.map +1 -1
  324. package/dist/cli/commands/map.js +187 -36
  325. package/dist/cli/commands/map.js.map +1 -1
  326. package/dist/cli/commands/path.d.ts +3 -0
  327. package/dist/cli/commands/path.d.ts.map +1 -0
  328. package/dist/cli/commands/path.js +228 -0
  329. package/dist/cli/commands/path.js.map +1 -0
  330. package/dist/cli/commands/predict.js +4 -4
  331. package/dist/cli/commands/priority.js +2 -2
  332. package/dist/cli/commands/probe.d.ts.map +1 -1
  333. package/dist/cli/commands/probe.js +59 -2
  334. package/dist/cli/commands/probe.js.map +1 -1
  335. package/dist/cli/commands/recover.d.ts.map +1 -1
  336. package/dist/cli/commands/recover.js +25 -6
  337. package/dist/cli/commands/recover.js.map +1 -1
  338. package/dist/cli/commands/regime.d.ts +41 -0
  339. package/dist/cli/commands/regime.d.ts.map +1 -0
  340. package/dist/cli/commands/regime.js +243 -0
  341. package/dist/cli/commands/regime.js.map +1 -0
  342. package/dist/cli/commands/symbolic.js +5 -5
  343. package/dist/cli/errors.d.ts +13 -1
  344. package/dist/cli/errors.d.ts.map +1 -1
  345. package/dist/cli/errors.js +13 -1
  346. package/dist/cli/errors.js.map +1 -1
  347. package/dist/cli/graphs.d.ts.map +1 -1
  348. package/dist/cli/graphs.js +5 -1
  349. package/dist/cli/graphs.js.map +1 -1
  350. package/dist/cli/main.d.ts.map +1 -1
  351. package/dist/cli/main.js +29 -2
  352. package/dist/cli/main.js.map +1 -1
  353. package/dist/cli/output.d.ts +6 -1
  354. package/dist/cli/output.d.ts.map +1 -1
  355. package/dist/cli/output.js.map +1 -1
  356. package/dist/cli/version.js.map +1 -1
  357. package/dist/cli-api.d.ts +21 -1
  358. package/dist/cli-api.d.ts.map +1 -1
  359. package/dist/cli-api.js +23 -1
  360. package/dist/cli-api.js.map +1 -1
  361. package/dist/composition/axis-audit.js.map +1 -1
  362. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  363. package/dist/composition/bridge-prediction.js +0 -0
  364. package/dist/composition/bridge-prediction.js.map +1 -1
  365. package/dist/composition/canonical-compare.d.ts +65 -0
  366. package/dist/composition/canonical-compare.d.ts.map +1 -0
  367. package/dist/composition/canonical-compare.js +237 -0
  368. package/dist/composition/canonical-compare.js.map +1 -0
  369. package/dist/composition/canonical-graph.d.ts +2 -2
  370. package/dist/composition/canonical-graph.js +2 -2
  371. package/dist/composition/canonical-graph.js.map +1 -1
  372. package/dist/composition/canonical-prefactors.d.ts +32 -0
  373. package/dist/composition/canonical-prefactors.d.ts.map +1 -0
  374. package/dist/composition/canonical-prefactors.js +80 -0
  375. package/dist/composition/canonical-prefactors.js.map +1 -0
  376. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  377. package/dist/composition/compose-symbolic.js.map +1 -1
  378. package/dist/composition/compose.d.ts.map +1 -1
  379. package/dist/composition/compose.js +80 -1
  380. package/dist/composition/compose.js.map +1 -1
  381. package/dist/composition/consequence.js.map +1 -1
  382. package/dist/composition/discovery.d.ts +20 -3
  383. package/dist/composition/discovery.d.ts.map +1 -1
  384. package/dist/composition/discovery.js +30 -4
  385. package/dist/composition/discovery.js.map +1 -1
  386. package/dist/composition/edge.d.ts +64 -0
  387. package/dist/composition/edge.d.ts.map +1 -1
  388. package/dist/composition/edge.js +29 -0
  389. package/dist/composition/edge.js.map +1 -1
  390. package/dist/composition/edges/calibration.d.ts.map +1 -1
  391. package/dist/composition/edges/calibration.js +46 -0
  392. package/dist/composition/edges/calibration.js.map +1 -1
  393. package/dist/composition/edges/catalog-quantum.d.ts.map +1 -1
  394. package/dist/composition/edges/catalog-quantum.js +9 -0
  395. package/dist/composition/edges/catalog-quantum.js.map +1 -1
  396. package/dist/composition/edges/catalog-tranche.d.ts.map +1 -1
  397. package/dist/composition/edges/catalog-tranche.js +18 -0
  398. package/dist/composition/edges/catalog-tranche.js.map +1 -1
  399. package/dist/composition/enumerate.js.map +1 -1
  400. package/dist/composition/explain.d.ts +9 -1
  401. package/dist/composition/explain.d.ts.map +1 -1
  402. package/dist/composition/explain.js +34 -8
  403. package/dist/composition/explain.js.map +1 -1
  404. package/dist/composition/expr-eval.d.ts.map +1 -1
  405. package/dist/composition/expr-eval.js.map +1 -1
  406. package/dist/composition/expr-simplify.d.ts +13 -0
  407. package/dist/composition/expr-simplify.d.ts.map +1 -1
  408. package/dist/composition/expr-simplify.js +25 -0
  409. package/dist/composition/expr-simplify.js.map +1 -1
  410. package/dist/composition/expr-subst.js.map +1 -1
  411. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  412. package/dist/composition/graph-viz.d.ts +118 -1
  413. package/dist/composition/graph-viz.d.ts.map +1 -1
  414. package/dist/composition/graph-viz.js +189 -6
  415. package/dist/composition/graph-viz.js.map +1 -1
  416. package/dist/composition/grounding.d.ts.map +1 -1
  417. package/dist/composition/grounding.js +6 -1
  418. package/dist/composition/grounding.js.map +1 -1
  419. package/dist/composition/identifiability.js.map +1 -1
  420. package/dist/composition/index.d.ts +4 -2
  421. package/dist/composition/index.d.ts.map +1 -1
  422. package/dist/composition/index.js +2 -1
  423. package/dist/composition/index.js.map +1 -1
  424. package/dist/composition/poster-source.d.ts +153 -0
  425. package/dist/composition/poster-source.d.ts.map +1 -0
  426. package/dist/composition/poster-source.js +183 -0
  427. package/dist/composition/poster-source.js.map +1 -0
  428. package/dist/composition/probe/backend-protocol.d.ts +34 -1
  429. package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
  430. package/dist/composition/probe/backend-protocol.js +9 -2
  431. package/dist/composition/probe/backend-protocol.js.map +1 -1
  432. package/dist/composition/probe/candidate-store.d.ts.map +1 -1
  433. package/dist/composition/probe/corpus.d.ts +12 -0
  434. package/dist/composition/probe/corpus.d.ts.map +1 -1
  435. package/dist/composition/probe/corpus.js +100 -0
  436. package/dist/composition/probe/corpus.js.map +1 -1
  437. package/dist/composition/probe/generator.d.ts +14 -0
  438. package/dist/composition/probe/generator.d.ts.map +1 -1
  439. package/dist/composition/probe/generator.js +24 -2
  440. package/dist/composition/probe/generator.js.map +1 -1
  441. package/dist/composition/probe/limits.js.map +1 -1
  442. package/dist/composition/probe/pipeline.d.ts +5 -0
  443. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  444. package/dist/composition/probe/pipeline.js +20 -3
  445. package/dist/composition/probe/pipeline.js.map +1 -1
  446. package/dist/composition/probe/problem.js.map +1 -1
  447. package/dist/composition/probe/report.d.ts.map +1 -1
  448. package/dist/composition/probe/report.js +2 -0
  449. package/dist/composition/probe/report.js.map +1 -1
  450. package/dist/composition/probe/residual.d.ts.map +1 -1
  451. package/dist/composition/probe/residual.js.map +1 -1
  452. package/dist/composition/probe/search-budget.js.map +1 -1
  453. package/dist/composition/proposed-bridges.d.ts +2 -2
  454. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  455. package/dist/composition/proposed-bridges.js +1 -1
  456. package/dist/composition/proposed-bridges.js.map +1 -1
  457. package/dist/composition/retrodiction.js.map +1 -1
  458. package/dist/composition/uncertainty.d.ts +52 -2
  459. package/dist/composition/uncertainty.d.ts.map +1 -1
  460. package/dist/composition/uncertainty.js +38 -2
  461. package/dist/composition/uncertainty.js.map +1 -1
  462. package/dist/composition/user-equation.d.ts.map +1 -1
  463. package/dist/core/constants.d.ts +13 -0
  464. package/dist/core/constants.d.ts.map +1 -1
  465. package/dist/core/constants.js +13 -0
  466. package/dist/core/constants.js.map +1 -1
  467. package/dist/core/flux-rules.d.ts.map +1 -1
  468. package/dist/core/flux-rules.js.map +1 -1
  469. package/dist/core/labeled-tensor.d.ts.map +1 -1
  470. package/dist/core/regime-registry.d.ts.map +1 -1
  471. package/dist/core/regime-rule-install.js.map +1 -1
  472. package/dist/core/tensor.d.ts.map +1 -1
  473. package/dist/core/tensor.js.map +1 -1
  474. package/dist/core/types.d.ts.map +1 -1
  475. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  476. package/dist/diff/bridge-gradient.d.ts +1 -1
  477. package/dist/diff/bridge-gradient.js +1 -1
  478. package/dist/dimensional/ast-types.d.ts +31 -1
  479. package/dist/dimensional/ast-types.d.ts.map +1 -1
  480. package/dist/dimensional/bridge-check.d.ts +1 -1
  481. package/dist/dimensional/bridge-check.js +1 -1
  482. package/dist/dimensional/buckingham.d.ts.map +1 -1
  483. package/dist/dimensional/connection.d.ts +2 -0
  484. package/dist/dimensional/connection.d.ts.map +1 -1
  485. package/dist/dimensional/connection.js +2 -0
  486. package/dist/dimensional/connection.js.map +1 -1
  487. package/dist/dimensional/curvature-composite.d.ts +5 -3
  488. package/dist/dimensional/curvature-composite.d.ts.map +1 -1
  489. package/dist/dimensional/curvature-composite.js +1 -0
  490. package/dist/dimensional/curvature-composite.js.map +1 -1
  491. package/dist/dimensional/curvature-invariants.d.ts +2 -0
  492. package/dist/dimensional/curvature-invariants.d.ts.map +1 -1
  493. package/dist/dimensional/curvature-invariants.js +2 -0
  494. package/dist/dimensional/curvature-invariants.js.map +1 -1
  495. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  496. package/dist/dimensional/einstein-equation.d.ts +3 -3
  497. package/dist/dimensional/einstein-equation.js +3 -3
  498. package/dist/dimensional/errors.d.ts.map +1 -1
  499. package/dist/dimensional/metric.d.ts +5 -2
  500. package/dist/dimensional/metric.d.ts.map +1 -1
  501. package/dist/dimensional/metric.js +5 -2
  502. package/dist/dimensional/metric.js.map +1 -1
  503. package/dist/dimensional/tensor-trace.js.map +1 -1
  504. package/dist/dimensional/validator-registry.js.map +1 -1
  505. package/dist/dimensional/validator.d.ts +3 -2
  506. package/dist/dimensional/validator.d.ts.map +1 -1
  507. package/dist/dimensional/validator.js +23 -4
  508. package/dist/dimensional/validator.js.map +1 -1
  509. package/dist/index.d.ts +4 -3
  510. package/dist/index.d.ts.map +1 -1
  511. package/dist/index.js +4 -1
  512. package/dist/index.js.map +1 -1
  513. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  514. package/dist/numerical/curvature-lowering-helpers.js +104 -0
  515. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  516. package/dist/numerical/errors.d.ts.map +1 -1
  517. package/dist/numerical/errors.js.map +1 -1
  518. package/dist/numerical/float64-engine.d.ts.map +1 -1
  519. package/dist/numerical/float64-engine.js +51 -24
  520. package/dist/numerical/float64-engine.js.map +1 -1
  521. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  522. package/dist/numerical/formula-dimension.js.map +1 -1
  523. package/dist/numerical/formula.d.ts.map +1 -1
  524. package/dist/numerical/formula.js.map +1 -1
  525. package/dist/numerical/geometrized.d.ts.map +1 -1
  526. package/dist/numerical/gl4-integrator.d.ts +3 -3
  527. package/dist/numerical/gl4-integrator.js +3 -3
  528. package/dist/numerical/killing.d.ts +47 -5
  529. package/dist/numerical/killing.d.ts.map +1 -1
  530. package/dist/numerical/killing.js +41 -3
  531. package/dist/numerical/killing.js.map +1 -1
  532. package/dist/numerical/klein-gordon.d.ts +2 -2
  533. package/dist/numerical/klein-gordon.js +2 -2
  534. package/dist/numerical/lowering.d.ts +2 -2
  535. package/dist/numerical/lowering.d.ts.map +1 -1
  536. package/dist/numerical/lowering.js +5 -3
  537. package/dist/numerical/lowering.js.map +1 -1
  538. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  539. package/dist/numerical/mathts-engine.js.map +1 -1
  540. package/dist/numerical/metric-inverse.js.map +1 -1
  541. package/dist/numerical/perihelion-finder.d.ts +15 -13
  542. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  543. package/dist/numerical/perihelion-finder.js +15 -13
  544. package/dist/numerical/perihelion-finder.js.map +1 -1
  545. package/dist/numerical/weyl-lowering.d.ts.map +1 -1
  546. package/dist/numerical/weyl-lowering.js +90 -40
  547. package/dist/numerical/weyl-lowering.js.map +1 -1
  548. package/package.json +163 -104
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Regime derivation — π-groups as the coordinates a regime is written in.
3
+ *
4
+ * Dimensionless inputs are passed INTO `buckinghamPi` as zero-dimension
5
+ * variables and come back as their own trivial groups, keyed by their own
6
+ * names in `PiGroup.formula`. Nothing is synthesized here. (Measured in
7
+ * design note §10 Q1 by executing `buckinghamPi`; the implementation plan's
8
+ * "plus one trivial group per dimensionless input" would double-add.)
9
+ *
10
+ * @module atlas/regime
11
+ */
12
+ import { buckinghamPi } from '../dimensional/buckingham.js';
13
+ import { DIMENSIONLESS } from '../dimensional/types.js';
14
+ import { MissingDeltaAtError, MissingHorizonError } from './types.js';
15
+ /**
16
+ * Derive the regime coordinates of a family, keyed by `PiGroup.formula`.
17
+ *
18
+ * A dimensionally-independent set has no groups and yields an empty record.
19
+ *
20
+ * @internal
21
+ */
22
+ export function deriveRegimeGroups(family, parameters, dimensionlessInputs) {
23
+ const variables = [
24
+ ...parameters,
25
+ ...dimensionlessInputs.map((name) => ({ name, dim: DIMENSIONLESS })),
26
+ ];
27
+ if (variables.length === 0) {
28
+ throw new Error(`deriveRegimeGroups(${family}) requires at least one variable`);
29
+ }
30
+ // buckinghamPi rejects duplicate names itself; the message is clearer here.
31
+ const names = variables.map((v) => v.name);
32
+ if (new Set(names).size !== names.length) {
33
+ throw new Error(`deriveRegimeGroups(${family}) requires unique names across parameters and ` +
34
+ `dimensionless inputs; got [${names.join(', ')}]`);
35
+ }
36
+ const groups = {};
37
+ for (const group of buckinghamPi(variables).piGroups)
38
+ groups[group.formula] = group;
39
+ return groups;
40
+ }
41
+ function satisfies(value, ineq) {
42
+ switch (ineq.op) {
43
+ case '<':
44
+ return value < ineq.bound;
45
+ case '<=':
46
+ return value <= ineq.bound;
47
+ case '>':
48
+ return value > ineq.bound;
49
+ case '>=':
50
+ return value >= ineq.bound;
51
+ }
52
+ }
53
+ /**
54
+ * Check a regime against measured group values.
55
+ *
56
+ * A group with no supplied value, or a non-finite one, is UNCHECKED — not
57
+ * violated and not satisfied. See {@link RegimeCheck} for why the distinction
58
+ * is load-bearing. A regime with no inequalities returns `true`: there was
59
+ * nothing to check and nothing went unchecked, so the claim "every inequality
60
+ * was checked and satisfied" is vacuously true rather than unknown.
61
+ *
62
+ * A violation outranks an absence: once one inequality is CHECKED and fails,
63
+ * the regime does not hold, whatever the unmeasured coordinates would say.
64
+ *
65
+ * @public
66
+ */
67
+ export function regimeHolds(regime, groupValues) {
68
+ const violated = [];
69
+ const unchecked = [];
70
+ for (const ineq of regime.inequalities) {
71
+ const value = groupValues[ineq.group];
72
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
73
+ unchecked.push(ineq);
74
+ }
75
+ else if (!satisfies(value, ineq)) {
76
+ violated.push(ineq);
77
+ }
78
+ }
79
+ const ok = violated.length > 0 ? false : unchecked.length > 0 ? 'unknown' : true;
80
+ return { ok, violated, unchecked };
81
+ }
82
+ // ── Sprint 2: regime algebra and admission ──────────────────────────────────
83
+ /**
84
+ * Merge two regimes into the regime that holds where BOTH hold.
85
+ *
86
+ * The conjunction is the whole operation: an inequality from either side is an
87
+ * inequality of the intersection, so the list is concatenated rather than
88
+ * reduced. No attempt is made to simplify `x < 1` and `x < 2` into one
89
+ * inequality — the redundant one is still true, and a simplifier that dropped
90
+ * the wrong one would be a silent change of claim.
91
+ *
92
+ * `groupDefinitions` are merged and CHECKED, not overwritten. Two regimes that
93
+ * key the same `PiGroup.formula` to different exponent vectors are not
94
+ * traceable to one dimension matrix, and quietly keeping one would hand the
95
+ * caller a regime whose group definitions no longer describe its inequalities.
96
+ *
97
+ * @throws Error if the families differ, or if a shared group name carries
98
+ * conflicting definitions.
99
+ * @internal
100
+ */
101
+ export function intersectRegimes(a, b) {
102
+ if (a.family !== b.family) {
103
+ throw new Error(`intersectRegimes: families differ ('${a.family}' vs '${b.family}'); ` +
104
+ 'a regime is stated in the groups of its own family');
105
+ }
106
+ const groupDefinitions = { ...a.groupDefinitions };
107
+ for (const [name, group] of Object.entries(b.groupDefinitions)) {
108
+ const existing = groupDefinitions[name];
109
+ if (existing !== undefined && !samePiGroup(existing, group)) {
110
+ throw new Error(`intersectRegimes: group '${name}' is defined differently in the two regimes`);
111
+ }
112
+ groupDefinitions[name] = group;
113
+ }
114
+ return {
115
+ family: a.family,
116
+ inequalities: [...a.inequalities, ...b.inequalities],
117
+ groupDefinitions,
118
+ };
119
+ }
120
+ function samePiGroup(x, y) {
121
+ const names = new Set([...Object.keys(x.exponents), ...Object.keys(y.exponents)]);
122
+ for (const name of names) {
123
+ if ((x.exponents[name] ?? 0) !== (y.exponents[name] ?? 0))
124
+ return false;
125
+ }
126
+ return true;
127
+ }
128
+ function fullInterval() {
129
+ return { lo: -Infinity, loOpen: true, hi: Infinity, hiOpen: true };
130
+ }
131
+ /** Narrow `iv` in place by one inequality. */
132
+ function narrow(iv, ineq) {
133
+ switch (ineq.op) {
134
+ case '<':
135
+ case '<=': {
136
+ const open = ineq.op === '<';
137
+ if (ineq.bound < iv.hi || (ineq.bound === iv.hi && open)) {
138
+ iv.hi = ineq.bound;
139
+ iv.hiOpen = open;
140
+ }
141
+ return;
142
+ }
143
+ case '>':
144
+ case '>=': {
145
+ const open = ineq.op === '>';
146
+ if (ineq.bound > iv.lo || (ineq.bound === iv.lo && open)) {
147
+ iv.lo = ineq.bound;
148
+ iv.loOpen = open;
149
+ }
150
+ return;
151
+ }
152
+ }
153
+ }
154
+ /** The per-group intervals the inequalities of a regime carve out. */
155
+ function intervalsOf(regime) {
156
+ const out = new Map();
157
+ for (const ineq of regime.inequalities) {
158
+ let iv = out.get(ineq.group);
159
+ if (iv === undefined) {
160
+ iv = fullInterval();
161
+ out.set(ineq.group, iv);
162
+ }
163
+ narrow(iv, ineq);
164
+ }
165
+ return out;
166
+ }
167
+ function isEmpty(iv) {
168
+ if (iv.lo > iv.hi)
169
+ return true;
170
+ return iv.lo === iv.hi && (iv.loOpen || iv.hiOpen);
171
+ }
172
+ function intersectIntervals(x, y) {
173
+ const lo = Math.max(x.lo, y.lo);
174
+ const hi = Math.min(x.hi, y.hi);
175
+ return {
176
+ lo,
177
+ loOpen: (x.lo === lo && x.loOpen) || (y.lo === lo && y.loOpen),
178
+ hi,
179
+ hiOpen: (x.hi === hi && x.hiOpen) || (y.hi === hi && y.hiOpen),
180
+ };
181
+ }
182
+ /** Is every point of `inner` a point of `outer`? */
183
+ function contains(outer, inner) {
184
+ if (isEmpty(inner))
185
+ return true;
186
+ const loOk = outer.lo < inner.lo || (outer.lo === inner.lo && (!outer.loOpen || inner.loOpen));
187
+ const hiOk = outer.hi > inner.hi || (outer.hi === inner.hi && (!outer.hiOpen || inner.hiOpen));
188
+ return loOk && hiOk;
189
+ }
190
+ /**
191
+ * Classify two regimes on the group names they SHARE.
192
+ *
193
+ * Shared names only, and that restriction is the whole subtlety. A group one
194
+ * regime constrains and the other says nothing about cannot separate them:
195
+ * silence is not a constraint, so treating the unconstrained side as empty
196
+ * would report `'disjoint'` for two regimes that genuinely overlap. The answer
197
+ * is therefore about the shared coordinates, and says nothing about the
198
+ * private ones.
199
+ *
200
+ * - `'disjoint'` — some shared group has intervals that cannot both hold.
201
+ * - `'nested'` — the shared box of one regime contains the other (equal boxes,
202
+ * and the no-shared-group case, are nested: each contains the other).
203
+ * - `'overlap'` — they meet, and neither contains the other.
204
+ *
205
+ * @internal
206
+ */
207
+ export function regimeOverlap(a, b) {
208
+ const ia = intervalsOf(a);
209
+ const ib = intervalsOf(b);
210
+ const shared = [...ia.keys()].filter((name) => ib.has(name));
211
+ for (const name of shared) {
212
+ if (isEmpty(intersectIntervals(ia.get(name), ib.get(name))))
213
+ return 'disjoint';
214
+ }
215
+ const aInB = shared.every((name) => contains(ib.get(name), ia.get(name)));
216
+ const bInA = shared.every((name) => contains(ia.get(name), ib.get(name)));
217
+ return aInB || bInA ? 'nested' : 'overlap';
218
+ }
219
+ /**
220
+ * Grid-sample a group box and list the cells no regime covers.
221
+ *
222
+ * `samples` IS the box: one explicit axis of values per π-group name. The box
223
+ * is not derived from the bounds the regimes themselves carry, and that is
224
+ * deliberate — a synthesized box would report coverage against an extent this
225
+ * library invented, so "uncovered" would measure the guess rather than the
226
+ * atlas. The caller states where it wants to know about.
227
+ *
228
+ * COVERED means some regime returned `true`. An `'unknown'` is NOT coverage,
229
+ * by the same rule that makes {@link regimeHolds} tri-state: a regime whose
230
+ * groups the sample axes never mention has not been shown to apply anywhere.
231
+ *
232
+ * Records of another family are skipped, so a mixed list is safe to pass.
233
+ *
234
+ * @internal
235
+ */
236
+ export function uncoveredRegions(family, models, samples) {
237
+ const inFamily = models.filter((m) => m.regime.family === family);
238
+ const uncovered = [];
239
+ for (const point of gridPoints(samples)) {
240
+ const coveredBy = inFamily
241
+ .filter((m) => regimeHolds(m.regime, point).ok === true)
242
+ .map((m) => m.id);
243
+ if (coveredBy.length === 0)
244
+ uncovered.push({ point, coveredBy });
245
+ }
246
+ return uncovered;
247
+ }
248
+ /** Cartesian product of the named axes. An axis with no values yields nothing. */
249
+ function gridPoints(samples) {
250
+ let points = [{}];
251
+ for (const [group, axis] of Object.entries(samples)) {
252
+ const next = [];
253
+ for (const base of points) {
254
+ for (const value of axis)
255
+ next.push({ ...base, [group]: value });
256
+ }
257
+ points = next;
258
+ }
259
+ return points;
260
+ }
261
+ /**
262
+ * Admit a bridge, refusing an approximation whose horizon is missing.
263
+ *
264
+ * The gate is at ADMISSION, matching the existing throw in `makeApproximation`,
265
+ * and for the same reason: a validator that runs "later" can be skipped, and an
266
+ * unhorizoned bound that reached the atlas would be a bound claiming to hold
267
+ * everywhere. The move-the-gate-to-use argument of design note §2 applies to
268
+ * `uniformity` — a field whose absence is a legitimate NOT-YET-ANALYSED state
269
+ * — and NOT to `horizon`, which `ApproximationBound` already mandates.
270
+ *
271
+ * Any relation may carry a `bound`; every bound present is checked, so a
272
+ * `coarse-graining` cannot smuggle in an unhorizoned one.
273
+ *
274
+ * @returns the bridge, unchanged, so this can wrap a record at its definition.
275
+ * The same argument applies to `deltaAt`, the machine form of `delta`, and is
276
+ * why it is checked here beside the horizon. `delta` alone is a single number
277
+ * for a whole domain: an implementer whose bound depends on a parameter can
278
+ * only freeze it at one point, and a frozen point reads exactly like a
279
+ * supremum. Requiring the machine form makes the dependence SAYABLE, so the
280
+ * scalar can be held to its stated meaning. It is required only of an
281
+ * `approximation`, matching `bound` itself; a `coarse-graining` may still
282
+ * carry a constant bound with no `deltaAt`.
283
+ *
284
+ * @throws MissingHorizonError if an `approximation` has no bound, or if a
285
+ * present bound has an empty `horizon` or no `horizonHolds`.
286
+ * @throws MissingDeltaAtError if an `approximation` bound has no `deltaAt`.
287
+ * @internal
288
+ */
289
+ export function admitApproximation(bridge) {
290
+ const { bound } = bridge;
291
+ if (bound === undefined) {
292
+ if (bridge.relation === 'approximation') {
293
+ throw new MissingHorizonError(`${bridge.id}: an approximation requires a bound carrying a horizon`);
294
+ }
295
+ return bridge;
296
+ }
297
+ if (bound.horizon.trim() === '') {
298
+ throw new MissingHorizonError(`${bridge.id}: an approximation bound requires a non-empty prose horizon`);
299
+ }
300
+ if (typeof bound.horizonHolds !== 'function') {
301
+ throw new MissingHorizonError(`${bridge.id}: an approximation bound requires a machine horizonHolds beside its prose horizon`);
302
+ }
303
+ if (bridge.relation === 'approximation' && typeof bound.deltaAt !== 'function') {
304
+ throw new MissingDeltaAtError(`${bridge.id}: an approximation bound requires a machine deltaAt beside its scalar delta, ` +
305
+ 'which must be the supremum over the whole declared domain');
306
+ }
307
+ return bridge;
308
+ }
309
+ //# sourceMappingURL=regime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regime.js","sourceRoot":"","sources":["../../src/atlas/regime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * JSON projection of an atlas family (Atlas Phase 0, S0.6).
3
+ *
4
+ * The in-memory record is not JSON. Two fields make that true, and both are
5
+ * handled here rather than left to `JSON.stringify`:
6
+ *
7
+ * 1. `AtlasBridge.evidence` is a `ReadonlySet<EvidenceTag>`, and a `Set`
8
+ * stringifies to `{}` — the artifact would be silently empty exactly where
9
+ * the evidence lives. Design note §7 requires the emitter to serialize it
10
+ * explicitly; it is emitted as a SORTED array so the artifact is stable
11
+ * under insertion-order changes.
12
+ * 2. `ApproximationBound.horizonHolds` is a function, which stringifies to
13
+ * nothing at all. Only the `horizon` PROSE crosses into JSON; the machine
14
+ * predicate stays in TypeScript, as `data/schemas/atlas-record.v0.json`
15
+ * states.
16
+ *
17
+ * Every record key order and every `Record<>` key order is fixed here, so two
18
+ * calls on the same family produce byte-identical output. That is what lets
19
+ * `tests/atlas/atlas-json.test.ts` pin the committed artifact against the live
20
+ * family the way `catalog-json.test.ts` pins the bridge catalog.
21
+ *
22
+ * @module atlas/serialize
23
+ */
24
+ import type { AtlasFamily } from './oscillators/index.js';
25
+ /** Record major version of the emitted artifact. @internal */
26
+ export declare const ATLAS_RECORD_SCHEMA_VERSION = "0";
27
+ /** A JSON value, as emitted. @internal */
28
+ export type JsonValue = string | number | boolean | null | readonly JsonValue[] | {
29
+ readonly [k: string]: JsonValue;
30
+ };
31
+ /** The emitted artifact. @internal */
32
+ export interface AtlasRecordJson {
33
+ readonly $schema: string;
34
+ readonly schemaVersion: string;
35
+ readonly packageVersion: string;
36
+ readonly family: string;
37
+ readonly models: readonly JsonValue[];
38
+ readonly bridges: readonly JsonValue[];
39
+ readonly rejections: readonly JsonValue[];
40
+ }
41
+ /**
42
+ * Project an atlas family into the shape of
43
+ * `data/schemas/atlas-record.v0.json`.
44
+ *
45
+ * Deterministic: equal inputs give byte-identical `JSON.stringify` output.
46
+ *
47
+ * @internal
48
+ */
49
+ export declare function toAtlasJson(family: AtlasFamily, packageVersion: string): AtlasRecordJson;
50
+ //# sourceMappingURL=serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/atlas/serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,8DAA8D;AAC9D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,0CAA0C;AAC1C,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,SAAS,EAAE,GACpB;IAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAExC,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;CAC3C;AAmJD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,cAAc,EAAE,MAAM,GACrB,eAAe,CAUjB"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * JSON projection of an atlas family (Atlas Phase 0, S0.6).
3
+ *
4
+ * The in-memory record is not JSON. Two fields make that true, and both are
5
+ * handled here rather than left to `JSON.stringify`:
6
+ *
7
+ * 1. `AtlasBridge.evidence` is a `ReadonlySet<EvidenceTag>`, and a `Set`
8
+ * stringifies to `{}` — the artifact would be silently empty exactly where
9
+ * the evidence lives. Design note §7 requires the emitter to serialize it
10
+ * explicitly; it is emitted as a SORTED array so the artifact is stable
11
+ * under insertion-order changes.
12
+ * 2. `ApproximationBound.horizonHolds` is a function, which stringifies to
13
+ * nothing at all. Only the `horizon` PROSE crosses into JSON; the machine
14
+ * predicate stays in TypeScript, as `data/schemas/atlas-record.v0.json`
15
+ * states.
16
+ *
17
+ * Every record key order and every `Record<>` key order is fixed here, so two
18
+ * calls on the same family produce byte-identical output. That is what lets
19
+ * `tests/atlas/atlas-json.test.ts` pin the committed artifact against the live
20
+ * family the way `catalog-json.test.ts` pins the bridge catalog.
21
+ *
22
+ * @module atlas/serialize
23
+ */
24
+ /** Record major version of the emitted artifact. @internal */
25
+ export const ATLAS_RECORD_SCHEMA_VERSION = '0';
26
+ /** Rebuild a record with its keys in sorted order, so emission is stable. */
27
+ const sortedRecord = (source) => {
28
+ const out = {};
29
+ for (const key of Object.keys(source).sort())
30
+ out[key] = source[key];
31
+ return out;
32
+ };
33
+ /**
34
+ * Normalize negative zero. `buckinghamPi` produces `-0` exponents (a `-1 * 0`
35
+ * in the null-space arithmetic), and `JSON.stringify(-0)` is `"0"` — so a
36
+ * record holding `-0` does NOT survive its own round-trip. Collapsing it here
37
+ * makes the projection genuinely JSON-faithful instead of nearly so.
38
+ */
39
+ const zeroSafe = (n) => (n === 0 ? 0 : n);
40
+ const serializePiGroup = (group) => {
41
+ const exponents = {};
42
+ const sorted = sortedRecord(group.exponents);
43
+ for (const key of Object.keys(sorted))
44
+ exponents[key] = zeroSafe(sorted[key]);
45
+ return { exponents, formula: group.formula };
46
+ };
47
+ const serializeRegime = (regime) => {
48
+ const definitions = {};
49
+ for (const key of Object.keys(regime.groupDefinitions).sort()) {
50
+ definitions[key] = serializePiGroup(regime.groupDefinitions[key]);
51
+ }
52
+ return {
53
+ family: regime.family,
54
+ inequalities: regime.inequalities.map((i) => ({
55
+ group: i.group,
56
+ op: i.op,
57
+ bound: zeroSafe(i.bound),
58
+ ...(i.alias === undefined ? {} : { alias: i.alias }),
59
+ })),
60
+ groupDefinitions: definitions,
61
+ };
62
+ };
63
+ /**
64
+ * `horizonHolds` and `deltaAt` are deliberately absent: a predicate is not
65
+ * data, and a serialized function would be a claim no reader could check.
66
+ * `uniformity` IS data. `null` is the not-yet-analysed state and must be
67
+ * present in the artifact, not dropped.
68
+ */
69
+ const serializeBound = (bound) => ({
70
+ K: zeroSafe(bound.K),
71
+ delta: zeroSafe(bound.delta),
72
+ norm: bound.norm,
73
+ domain: bound.domain,
74
+ horizon: bound.horizon,
75
+ ...(bound.parameterRange === undefined ? {} : { parameterRange: bound.parameterRange }),
76
+ limitCharacter: bound.limitCharacter,
77
+ uniformity: bound.uniformity === null ? null : [...bound.uniformity],
78
+ });
79
+ /**
80
+ * Fields are enumerated EXPLICITLY, never spread: a new optional field stays
81
+ * invisible to the artifact until it is added here, so a model that records
82
+ * none of the Phase 3 additions serializes byte-identically to the committed
83
+ * `data/atlas/oscillators.json` that `tests/atlas/atlas-json.test.ts`
84
+ * deep-equals against.
85
+ */
86
+ const serializeModel = (model) => ({
87
+ id: model.id,
88
+ family: model.family,
89
+ stateSpace: model.stateSpace,
90
+ dynamics: model.dynamics,
91
+ observables: [...model.observables],
92
+ parameters: model.parameters.map((p) => ({
93
+ name: p.name,
94
+ dim: { ...p.dim },
95
+ })),
96
+ dimensionlessInputs: [...model.dimensionlessInputs],
97
+ canonicalRefs: [...model.canonicalRefs],
98
+ regime: serializeRegime(model.regime),
99
+ ...(model.boundaryData === undefined ? {} : { boundaryData: [...model.boundaryData] }),
100
+ ...(model.initialData === undefined ? {} : { initialData: [...model.initialData] }),
101
+ ...(model.symmetryGroup === undefined ? {} : { symmetryGroup: model.symmetryGroup }),
102
+ });
103
+ const serializeWitnesses = (witnesses) => witnesses.map((w) => ({
104
+ id: w.id,
105
+ kind: w.kind,
106
+ test: w.test,
107
+ ...(w.tolerance === undefined ? {} : { tolerance: w.tolerance }),
108
+ }));
109
+ const serializeBridge = (bridge) => ({
110
+ id: bridge.id,
111
+ relation: bridge.relation,
112
+ premises: [...bridge.premises],
113
+ conclusion: bridge.conclusion,
114
+ transformation: bridge.transformation,
115
+ ...(bridge.inverse === undefined ? {} : { inverse: bridge.inverse }),
116
+ preserves: [...bridge.preserves],
117
+ doesNotPreserve: [...bridge.doesNotPreserve],
118
+ sideConditions: [...bridge.sideConditions],
119
+ ...(bridge.bound === undefined ? {} : { bound: serializeBound(bridge.bound) }),
120
+ regime: serializeRegime(bridge.regime),
121
+ counterexamples: bridge.counterexamples.map((c) => ({
122
+ description: c.description,
123
+ witness: c.witness,
124
+ })),
125
+ // The Set, explicitly — sorted, so the artifact does not churn on
126
+ // insertion order.
127
+ evidence: [...bridge.evidence].sort(),
128
+ witnesses: serializeWitnesses(bridge.witnesses),
129
+ citations: [...bridge.citations],
130
+ reviewStatus: bridge.reviewStatus,
131
+ // Omitted, never emptied, when absent (Phase 4 S4.6): an absent reference is
132
+ // the honest default, and `{}` would read as a reference with no content.
133
+ ...(bridge.formalRef === undefined
134
+ ? {}
135
+ : {
136
+ formalRef: {
137
+ system: bridge.formalRef.system,
138
+ statement: bridge.formalRef.statement,
139
+ version: bridge.formalRef.version,
140
+ axioms: [...bridge.formalRef.axioms],
141
+ fidelity: bridge.formalRef.fidelity,
142
+ },
143
+ }),
144
+ });
145
+ /**
146
+ * `claimed` is emitted as `claimedRelation`, and `reason` is ALSO emitted as
147
+ * `counterexample.description`, because the schema's rejection record names
148
+ * those two keys. The description is the refutation itself restated under the
149
+ * key the schema requires — no new claim is introduced.
150
+ */
151
+ const serializeRejection = (rejection) => ({
152
+ id: rejection.id,
153
+ claimedRelation: rejection.claimed,
154
+ premises: [...rejection.premises],
155
+ conclusion: rejection.conclusion,
156
+ reason: rejection.reason,
157
+ survivingGroup: rejection.survivingGroup,
158
+ counterexample: { description: rejection.reason },
159
+ witnesses: serializeWitnesses(rejection.witnesses),
160
+ });
161
+ /**
162
+ * Project an atlas family into the shape of
163
+ * `data/schemas/atlas-record.v0.json`.
164
+ *
165
+ * Deterministic: equal inputs give byte-identical `JSON.stringify` output.
166
+ *
167
+ * @internal
168
+ */
169
+ export function toAtlasJson(family, packageVersion) {
170
+ return {
171
+ $schema: '../schemas/atlas-record.v0.json',
172
+ schemaVersion: ATLAS_RECORD_SCHEMA_VERSION,
173
+ packageVersion,
174
+ family: family.family,
175
+ models: family.models.map(serializeModel),
176
+ bridges: family.bridges.map(serializeBridge),
177
+ rejections: family.rejections.map(serializeRejection),
178
+ };
179
+ }
180
+ //# sourceMappingURL=serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/atlas/serialize.ts"],"names":[],"mappings":"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"}