universal-physics-tensor 9.0.0 → 11.0.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 (1109) hide show
  1. package/README.md +21 -17
  2. package/bin/upt.mjs +13 -1
  3. package/data/atlas/atlas.json +79 -68
  4. package/data/atlas/atlas.jsonld +1 -1
  5. package/data/atlas/diffusion.json +24 -23
  6. package/data/atlas/oscillators.json +21 -16
  7. package/data/atlas/waves.json +36 -31
  8. package/data/atlas/witness-results.json +11 -11
  9. package/data/bridge-catalog.json +1192 -1636
  10. package/data/bridge-catalog.schema.json +390 -135
  11. package/data/quantities.json +53 -19
  12. package/data/schemas/atlas-record.v0.json +184 -46
  13. package/data/units.json +33 -4
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +35 -18
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/association.js.map +1 -1
  18. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
  19. package/dist/atlas/benchmark/backend-shapes.js +5 -1
  20. package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
  21. package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
  22. package/dist/atlas/benchmark/baselines.js +8 -0
  23. package/dist/atlas/benchmark/baselines.js.map +1 -1
  24. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +12 -3
  25. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  26. package/dist/atlas/benchmark/hybrid-retrieval.js +30 -21
  27. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  28. package/dist/atlas/benchmark/leakage.js.map +1 -1
  29. package/dist/atlas/benchmark/loader.js +2 -2
  30. package/dist/atlas/benchmark/loader.js.map +1 -1
  31. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
  32. package/dist/atlas/benchmark/run-atlas.js +14 -2
  33. package/dist/atlas/benchmark/run-atlas.js.map +1 -1
  34. package/dist/atlas/benchmark/stats.d.ts +3 -3
  35. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  36. package/dist/atlas/benchmark/stats.js +16 -8
  37. package/dist/atlas/benchmark/stats.js.map +1 -1
  38. package/dist/atlas/benchmark/study.js.map +1 -1
  39. package/dist/atlas/benchmark/types.js.map +1 -1
  40. package/dist/atlas/bridge-record.d.ts +4 -4
  41. package/dist/atlas/bridge-record.d.ts.map +1 -1
  42. package/dist/atlas/bridge-record.js +6 -6
  43. package/dist/atlas/bridge-record.js.map +1 -1
  44. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  45. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  46. package/dist/atlas/catalog-formal-ref.js +52 -5
  47. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  48. package/dist/atlas/chain-pipeline.d.ts +0 -11
  49. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  50. package/dist/atlas/chain-pipeline.js +12 -24
  51. package/dist/atlas/chain-pipeline.js.map +1 -1
  52. package/dist/atlas/composition-table.js.map +1 -1
  53. package/dist/atlas/conventions.js.map +1 -1
  54. package/dist/atlas/coverage.d.ts +2 -2
  55. package/dist/atlas/coverage.js.map +1 -1
  56. package/dist/atlas/derivation.js.map +1 -1
  57. package/dist/atlas/derive-evidence.d.ts +6 -4
  58. package/dist/atlas/derive-evidence.d.ts.map +1 -1
  59. package/dist/atlas/derive-evidence.js +7 -2
  60. package/dist/atlas/derive-evidence.js.map +1 -1
  61. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  62. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  63. package/dist/atlas/diffusion/bridges-closure.js +8 -17
  64. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  65. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  66. package/dist/atlas/diffusion/bridges.js +27 -42
  67. package/dist/atlas/diffusion/bridges.js.map +1 -1
  68. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  69. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  70. package/dist/atlas/diffusion/dimensions.js +8 -16
  71. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  72. package/dist/atlas/diffusion/index.d.ts +1 -1
  73. package/dist/atlas/diffusion/index.d.ts.map +1 -1
  74. package/dist/atlas/diffusion/index.js.map +1 -1
  75. package/dist/atlas/diffusion/models.d.ts +3 -3
  76. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  77. package/dist/atlas/diffusion/models.js +5 -10
  78. package/dist/atlas/diffusion/models.js.map +1 -1
  79. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  80. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  81. package/dist/atlas/diffusion/numerics.js +38 -24
  82. package/dist/atlas/diffusion/numerics.js.map +1 -1
  83. package/dist/atlas/error-algebra.d.ts +6 -0
  84. package/dist/atlas/error-algebra.d.ts.map +1 -1
  85. package/dist/atlas/error-algebra.js +26 -0
  86. package/dist/atlas/error-algebra.js.map +1 -1
  87. package/dist/atlas/export.d.ts +18 -2
  88. package/dist/atlas/export.d.ts.map +1 -1
  89. package/dist/atlas/export.js +9 -3
  90. package/dist/atlas/export.js.map +1 -1
  91. package/dist/atlas/families.d.ts +19 -2
  92. package/dist/atlas/families.d.ts.map +1 -1
  93. package/dist/atlas/families.js +26 -3
  94. package/dist/atlas/families.js.map +1 -1
  95. package/dist/atlas/family.d.ts +27 -0
  96. package/dist/atlas/family.d.ts.map +1 -0
  97. package/dist/atlas/family.js +12 -0
  98. package/dist/atlas/family.js.map +1 -0
  99. package/dist/atlas/index.d.ts +3 -2
  100. package/dist/atlas/index.d.ts.map +1 -1
  101. package/dist/atlas/index.js +2 -1
  102. package/dist/atlas/index.js.map +1 -1
  103. package/dist/atlas/link-prediction.d.ts +107 -4
  104. package/dist/atlas/link-prediction.d.ts.map +1 -1
  105. package/dist/atlas/link-prediction.js +212 -66
  106. package/dist/atlas/link-prediction.js.map +1 -1
  107. package/dist/atlas/model.js.map +1 -1
  108. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  109. package/dist/atlas/oscillators/bridges-coarse.js +7 -12
  110. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  111. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  112. package/dist/atlas/oscillators/bridges-exact.js +6 -10
  113. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  114. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  115. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  116. package/dist/atlas/oscillators/bridges-limits.js +23 -36
  117. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  118. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  119. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  120. package/dist/atlas/oscillators/dimensions.js +9 -21
  121. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  122. package/dist/atlas/oscillators/index.d.ts +1 -16
  123. package/dist/atlas/oscillators/index.d.ts.map +1 -1
  124. package/dist/atlas/oscillators/index.js.map +1 -1
  125. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  126. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  127. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  128. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  129. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  130. package/dist/atlas/oscillators/models.js +2 -6
  131. package/dist/atlas/oscillators/models.js.map +1 -1
  132. package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
  133. package/dist/atlas/oscillators/norm-transport.js.map +1 -1
  134. package/dist/atlas/oscillators/norms.js.map +1 -1
  135. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  136. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  137. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  138. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  139. package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
  140. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  141. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  142. package/dist/atlas/oscillators/phase-translation.js +3 -4
  143. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  144. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  145. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  146. package/dist/atlas/oscillators/position-translation.js +123 -12
  147. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  148. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  149. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  150. package/dist/atlas/oscillators/rejections.js +0 -7
  151. package/dist/atlas/oscillators/rejections.js.map +1 -1
  152. package/dist/atlas/path-bound.js.map +1 -1
  153. package/dist/atlas/physjs-entries.generated.d.ts +25 -24
  154. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  155. package/dist/atlas/physjs-entries.generated.js +25 -24
  156. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  157. package/dist/atlas/physjs-ref.d.ts +107 -70
  158. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  159. package/dist/atlas/physjs-ref.js +184 -101
  160. package/dist/atlas/physjs-ref.js.map +1 -1
  161. package/dist/atlas/physjs-reviewed.d.ts +31 -0
  162. package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
  163. package/dist/atlas/physjs-reviewed.js +194 -0
  164. package/dist/atlas/physjs-reviewed.js.map +1 -0
  165. package/dist/atlas/poster/associations.js.map +1 -1
  166. package/dist/atlas/poster/derivations.js.map +1 -1
  167. package/dist/atlas/poster/statements.d.ts +0 -19
  168. package/dist/atlas/poster/statements.d.ts.map +1 -1
  169. package/dist/atlas/poster/statements.js +1 -1
  170. package/dist/atlas/poster/statements.js.map +1 -1
  171. package/dist/atlas/proof-target.d.ts +1 -1
  172. package/dist/atlas/proof-target.js +1 -1
  173. package/dist/atlas/proof-target.js.map +1 -1
  174. package/dist/atlas/public.d.ts +2 -1
  175. package/dist/atlas/public.d.ts.map +1 -1
  176. package/dist/atlas/public.js +2 -1
  177. package/dist/atlas/public.js.map +1 -1
  178. package/dist/atlas/regime.d.ts +1 -1
  179. package/dist/atlas/regime.d.ts.map +1 -1
  180. package/dist/atlas/regime.js +1 -1
  181. package/dist/atlas/regime.js.map +1 -1
  182. package/dist/atlas/serialize.d.ts +18 -12
  183. package/dist/atlas/serialize.d.ts.map +1 -1
  184. package/dist/atlas/serialize.js +28 -18
  185. package/dist/atlas/serialize.js.map +1 -1
  186. package/dist/atlas/statement.js.map +1 -1
  187. package/dist/atlas/text-overlap.d.ts +23 -0
  188. package/dist/atlas/text-overlap.d.ts.map +1 -0
  189. package/dist/atlas/text-overlap.js +41 -0
  190. package/dist/atlas/text-overlap.js.map +1 -0
  191. package/dist/atlas/translation-registry.js.map +1 -1
  192. package/dist/atlas/translation.js.map +1 -1
  193. package/dist/atlas/types.d.ts +9 -2
  194. package/dist/atlas/types.d.ts.map +1 -1
  195. package/dist/atlas/types.js +1 -1
  196. package/dist/atlas/types.js.map +1 -1
  197. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  198. package/dist/atlas/waves/bridges-closure.js +2 -9
  199. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  200. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  201. package/dist/atlas/waves/bridges.js +32 -52
  202. package/dist/atlas/waves/bridges.js.map +1 -1
  203. package/dist/atlas/waves/index.d.ts +1 -1
  204. package/dist/atlas/waves/index.d.ts.map +1 -1
  205. package/dist/atlas/waves/index.js.map +1 -1
  206. package/dist/atlas/waves/models.d.ts +5 -6
  207. package/dist/atlas/waves/models.d.ts.map +1 -1
  208. package/dist/atlas/waves/models.js +7 -13
  209. package/dist/atlas/waves/models.js.map +1 -1
  210. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  211. package/dist/atlas/waves/numerics.js +10 -3
  212. package/dist/atlas/waves/numerics.js.map +1 -1
  213. package/dist/atlas/witness-artifact.js.map +1 -1
  214. package/dist/atlas/witness-dominance.d.ts +4 -3
  215. package/dist/atlas/witness-dominance.d.ts.map +1 -1
  216. package/dist/atlas/witness-dominance.js +15 -5
  217. package/dist/atlas/witness-dominance.js.map +1 -1
  218. package/dist/atlas/witness-numeric.d.ts +38 -4
  219. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  220. package/dist/atlas/witness-numeric.js +80 -2
  221. package/dist/atlas/witness-numeric.js.map +1 -1
  222. package/dist/atlas/witness-result.d.ts +7 -1
  223. package/dist/atlas/witness-result.d.ts.map +1 -1
  224. package/dist/atlas/witness-result.js.map +1 -1
  225. package/dist/atlas/witness-specs.d.ts.map +1 -1
  226. package/dist/atlas/witness-specs.js +19 -0
  227. package/dist/atlas/witness-specs.js.map +1 -1
  228. package/dist/atlas/witness-symbolic.d.ts +75 -3
  229. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  230. package/dist/atlas/witness-symbolic.js +116 -10
  231. package/dist/atlas/witness-symbolic.js.map +1 -1
  232. package/dist/atlas/witnesses/quantum-support.js.map +1 -1
  233. package/dist/bridges/caller-table.d.ts +1 -1
  234. package/dist/bridges/caller-table.d.ts.map +1 -1
  235. package/dist/bridges/caller-table.js.map +1 -1
  236. package/dist/bridges/carrier-sign.d.ts.map +1 -1
  237. package/dist/bridges/carrier-sign.js +8 -3
  238. package/dist/bridges/carrier-sign.js.map +1 -1
  239. package/dist/bridges/catalog-adapter.d.ts +12 -3
  240. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  241. package/dist/bridges/catalog-adapter.js +17 -9
  242. package/dist/bridges/catalog-adapter.js.map +1 -1
  243. package/dist/bridges/catalog-load.d.ts +12 -2
  244. package/dist/bridges/catalog-load.d.ts.map +1 -1
  245. package/dist/bridges/catalog-load.js +181 -13
  246. package/dist/bridges/catalog-load.js.map +1 -1
  247. package/dist/bridges/catalog-types.d.ts +74 -26
  248. package/dist/bridges/catalog-types.d.ts.map +1 -1
  249. package/dist/bridges/catalog-types.js +11 -1
  250. package/dist/bridges/catalog-types.js.map +1 -1
  251. package/dist/bridges/coefficient-statement.js +1 -5
  252. package/dist/bridges/coefficient-statement.js.map +1 -1
  253. package/dist/bridges/confrontation-coverage.js.map +1 -1
  254. package/dist/bridges/confrontations.d.ts +1 -1
  255. package/dist/bridges/confrontations.d.ts.map +1 -1
  256. package/dist/bridges/confrontations.js +1 -1
  257. package/dist/bridges/confrontations.js.map +1 -1
  258. package/dist/bridges/evaluation-errors.d.ts +46 -3
  259. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  260. package/dist/bridges/evaluation-errors.js +40 -4
  261. package/dist/bridges/evaluation-errors.js.map +1 -1
  262. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  263. package/dist/bridges/evaluator-inputs.js +7 -5
  264. package/dist/bridges/evaluator-inputs.js.map +1 -1
  265. package/dist/bridges/evaluators.d.ts +17 -2
  266. package/dist/bridges/evaluators.d.ts.map +1 -1
  267. package/dist/bridges/evaluators.js +76 -28
  268. package/dist/bridges/evaluators.js.map +1 -1
  269. package/dist/bridges/expr-parse.d.ts +38 -4
  270. package/dist/bridges/expr-parse.d.ts.map +1 -1
  271. package/dist/bridges/expr-parse.js +101 -12
  272. package/dist/bridges/expr-parse.js.map +1 -1
  273. package/dist/bridges/holds.d.ts +40 -4
  274. package/dist/bridges/holds.d.ts.map +1 -1
  275. package/dist/bridges/holds.js +128 -19
  276. package/dist/bridges/holds.js.map +1 -1
  277. package/dist/bridges/index.d.ts +15 -14
  278. package/dist/bridges/index.d.ts.map +1 -1
  279. package/dist/bridges/index.js +14 -15
  280. package/dist/bridges/index.js.map +1 -1
  281. package/dist/bridges/input-contract.js.map +1 -1
  282. package/dist/bridges/membership.d.ts +5 -3
  283. package/dist/bridges/membership.d.ts.map +1 -1
  284. package/dist/bridges/membership.js +5 -6
  285. package/dist/bridges/membership.js.map +1 -1
  286. package/dist/bridges/notices.d.ts.map +1 -1
  287. package/dist/bridges/notices.js +5 -5
  288. package/dist/bridges/notices.js.map +1 -1
  289. package/dist/bridges/observations/types.js.map +1 -1
  290. package/dist/bridges/rejected.d.ts +11 -17
  291. package/dist/bridges/rejected.d.ts.map +1 -1
  292. package/dist/bridges/rejected.js +13 -68
  293. package/dist/bridges/rejected.js.map +1 -1
  294. package/dist/bridges/relation-eval.d.ts +6 -7
  295. package/dist/bridges/relation-eval.d.ts.map +1 -1
  296. package/dist/bridges/relation-eval.js +20 -50
  297. package/dist/bridges/relation-eval.js.map +1 -1
  298. package/dist/bridges/rhs-registry.js.map +1 -1
  299. package/dist/bridges/sensitivity.d.ts +11 -3
  300. package/dist/bridges/sensitivity.d.ts.map +1 -1
  301. package/dist/bridges/sensitivity.js +27 -13
  302. package/dist/bridges/sensitivity.js.map +1 -1
  303. package/dist/bridges/tensor-index.js.map +1 -1
  304. package/dist/bridges/types.d.ts +1 -7
  305. package/dist/bridges/types.d.ts.map +1 -1
  306. package/dist/bridges/types.js +1 -4
  307. package/dist/bridges/types.js.map +1 -1
  308. package/dist/bridges/validity.d.ts +33 -0
  309. package/dist/bridges/validity.d.ts.map +1 -0
  310. package/dist/bridges/validity.js +67 -0
  311. package/dist/bridges/validity.js.map +1 -0
  312. package/dist/canonical/canonical-equation.js.map +1 -1
  313. package/dist/canonical/dimensional-fields.js.map +1 -1
  314. package/dist/canonical/entries/_l1-build.js.map +1 -1
  315. package/dist/canonical/entries/atomic.js +1 -3
  316. package/dist/canonical/entries/atomic.js.map +1 -1
  317. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  318. package/dist/canonical/entries/condensed-matter.js +8 -9
  319. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  320. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  321. package/dist/canonical/entries/dimensional-classics.js +5 -6
  322. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  323. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  324. package/dist/canonical/entries/electromagnetism.js +6 -12
  325. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  326. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  327. package/dist/canonical/entries/fluids-waves.js +3 -7
  328. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  329. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  330. package/dist/canonical/entries/mechanics.js +4 -6
  331. package/dist/canonical/entries/mechanics.js.map +1 -1
  332. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  333. package/dist/canonical/entries/nonmonomial.js +38 -39
  334. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  335. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  336. package/dist/canonical/entries/relativity.js +6 -6
  337. package/dist/canonical/entries/relativity.js.map +1 -1
  338. package/dist/canonical/entries/statistical-mechanics.js +5 -5
  339. package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
  340. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  341. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  342. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  343. package/dist/canonical/fixed-points.d.ts +94 -0
  344. package/dist/canonical/fixed-points.d.ts.map +1 -0
  345. package/dist/canonical/fixed-points.js +81 -0
  346. package/dist/canonical/fixed-points.js.map +1 -0
  347. package/dist/canonical/linkage.d.ts +29 -4
  348. package/dist/canonical/linkage.d.ts.map +1 -1
  349. package/dist/canonical/linkage.js +47 -64
  350. package/dist/canonical/linkage.js.map +1 -1
  351. package/dist/canonical/normal-form.d.ts +0 -8
  352. package/dist/canonical/normal-form.d.ts.map +1 -1
  353. package/dist/canonical/normal-form.js +22 -23
  354. package/dist/canonical/normal-form.js.map +1 -1
  355. package/dist/canonical/registry.js.map +1 -1
  356. package/dist/canonical/residual.js.map +1 -1
  357. package/dist/canonical/seed-l-layer.d.ts +7 -1
  358. package/dist/canonical/seed-l-layer.d.ts.map +1 -1
  359. package/dist/canonical/seed-l-layer.js +7 -1
  360. package/dist/canonical/seed-l-layer.js.map +1 -1
  361. package/dist/canonical/structural.d.ts +42 -21
  362. package/dist/canonical/structural.d.ts.map +1 -1
  363. package/dist/canonical/structural.js +64 -23
  364. package/dist/canonical/structural.js.map +1 -1
  365. package/dist/cases/brownian-sphere.d.ts +3 -3
  366. package/dist/cases/brownian-sphere.d.ts.map +1 -1
  367. package/dist/cases/brownian-sphere.js +10 -9
  368. package/dist/cases/brownian-sphere.js.map +1 -1
  369. package/dist/cases/damped-resonator.d.ts.map +1 -1
  370. package/dist/cases/damped-resonator.js +8 -11
  371. package/dist/cases/damped-resonator.js.map +1 -1
  372. package/dist/cases/index.js.map +1 -1
  373. package/dist/cases/kepler-rv.d.ts +1 -1
  374. package/dist/cases/kepler-rv.d.ts.map +1 -1
  375. package/dist/cases/kepler-rv.js +3 -2
  376. package/dist/cases/kepler-rv.js.map +1 -1
  377. package/dist/cases/lumped-cooling.d.ts +8 -3
  378. package/dist/cases/lumped-cooling.d.ts.map +1 -1
  379. package/dist/cases/lumped-cooling.js +22 -24
  380. package/dist/cases/lumped-cooling.js.map +1 -1
  381. package/dist/cases/quadrature.d.ts +7 -9
  382. package/dist/cases/quadrature.d.ts.map +1 -1
  383. package/dist/cases/quadrature.js +28 -32
  384. package/dist/cases/quadrature.js.map +1 -1
  385. package/dist/cases/resistor-noise.js +7 -7
  386. package/dist/cases/resistor-noise.js.map +1 -1
  387. package/dist/cases/skin-depth.d.ts +0 -4
  388. package/dist/cases/skin-depth.d.ts.map +1 -1
  389. package/dist/cases/skin-depth.js +3 -7
  390. package/dist/cases/skin-depth.js.map +1 -1
  391. package/dist/cases/types.js.map +1 -1
  392. package/dist/cli/args.d.ts +30 -3
  393. package/dist/cli/args.d.ts.map +1 -1
  394. package/dist/cli/args.js +47 -9
  395. package/dist/cli/args.js.map +1 -1
  396. package/dist/cli/bindings.d.ts +13 -0
  397. package/dist/cli/bindings.d.ts.map +1 -0
  398. package/dist/cli/bindings.js +33 -0
  399. package/dist/cli/bindings.js.map +1 -0
  400. package/dist/cli/closed-form-range.js.map +1 -1
  401. package/dist/cli/command.d.ts +8 -1
  402. package/dist/cli/command.d.ts.map +1 -1
  403. package/dist/cli/command.js.map +1 -1
  404. package/dist/cli/commands/_atlas-map.d.ts +2 -11
  405. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  406. package/dist/cli/commands/_atlas-map.js +50 -35
  407. package/dist/cli/commands/_atlas-map.js.map +1 -1
  408. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  409. package/dist/cli/commands/_atlas-route.js +6 -2
  410. package/dist/cli/commands/_atlas-route.js.map +1 -1
  411. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  412. package/dist/cli/commands/_discovery-opts.js +48 -14
  413. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  414. package/dist/cli/commands/atlas.d.ts.map +1 -1
  415. package/dist/cli/commands/atlas.js +9 -8
  416. package/dist/cli/commands/atlas.js.map +1 -1
  417. package/dist/cli/commands/audit.d.ts.map +1 -1
  418. package/dist/cli/commands/audit.js +20 -20
  419. package/dist/cli/commands/audit.js.map +1 -1
  420. package/dist/cli/commands/axes.d.ts.map +1 -1
  421. package/dist/cli/commands/axes.js +20 -1
  422. package/dist/cli/commands/axes.js.map +1 -1
  423. package/dist/cli/commands/candidates.d.ts.map +1 -1
  424. package/dist/cli/commands/candidates.js +16 -8
  425. package/dist/cli/commands/candidates.js.map +1 -1
  426. package/dist/cli/commands/canonical.js.map +1 -1
  427. package/dist/cli/commands/chain.js +1 -1
  428. package/dist/cli/commands/chain.js.map +1 -1
  429. package/dist/cli/commands/confront.d.ts.map +1 -1
  430. package/dist/cli/commands/confront.js +22 -20
  431. package/dist/cli/commands/confront.js.map +1 -1
  432. package/dist/cli/commands/connectors.js.map +1 -1
  433. package/dist/cli/commands/coverage.js.map +1 -1
  434. package/dist/cli/commands/derive.d.ts.map +1 -1
  435. package/dist/cli/commands/derive.js +60 -35
  436. package/dist/cli/commands/derive.js.map +1 -1
  437. package/dist/cli/commands/discover.d.ts.map +1 -1
  438. package/dist/cli/commands/discover.js +20 -10
  439. package/dist/cli/commands/discover.js.map +1 -1
  440. package/dist/cli/commands/eval.d.ts.map +1 -1
  441. package/dist/cli/commands/eval.js +14 -10
  442. package/dist/cli/commands/eval.js.map +1 -1
  443. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  444. package/dist/cli/commands/evaluate.js +108 -58
  445. package/dist/cli/commands/evaluate.js.map +1 -1
  446. package/dist/cli/commands/explain.d.ts.map +1 -1
  447. package/dist/cli/commands/explain.js +16 -8
  448. package/dist/cli/commands/explain.js.map +1 -1
  449. package/dist/cli/commands/frontier.js.map +1 -1
  450. package/dist/cli/commands/ground.d.ts.map +1 -1
  451. package/dist/cli/commands/ground.js +41 -10
  452. package/dist/cli/commands/ground.js.map +1 -1
  453. package/dist/cli/commands/index.js.map +1 -1
  454. package/dist/cli/commands/map.d.ts.map +1 -1
  455. package/dist/cli/commands/map.js +155 -92
  456. package/dist/cli/commands/map.js.map +1 -1
  457. package/dist/cli/commands/metric.d.ts.map +1 -1
  458. package/dist/cli/commands/metric.js +58 -20
  459. package/dist/cli/commands/metric.js.map +1 -1
  460. package/dist/cli/commands/path.d.ts +10 -0
  461. package/dist/cli/commands/path.d.ts.map +1 -1
  462. package/dist/cli/commands/path.js +29 -7
  463. package/dist/cli/commands/path.js.map +1 -1
  464. package/dist/cli/commands/predict.js.map +1 -1
  465. package/dist/cli/commands/priority.js.map +1 -1
  466. package/dist/cli/commands/probe.d.ts.map +1 -1
  467. package/dist/cli/commands/probe.js +105 -38
  468. package/dist/cli/commands/probe.js.map +1 -1
  469. package/dist/cli/commands/recover.js +1 -1
  470. package/dist/cli/commands/recover.js.map +1 -1
  471. package/dist/cli/commands/regime.d.ts +5 -4
  472. package/dist/cli/commands/regime.d.ts.map +1 -1
  473. package/dist/cli/commands/regime.js +25 -26
  474. package/dist/cli/commands/regime.js.map +1 -1
  475. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  476. package/dist/cli/commands/retrieve.js +23 -14
  477. package/dist/cli/commands/retrieve.js.map +1 -1
  478. package/dist/cli/commands/search.d.ts.map +1 -1
  479. package/dist/cli/commands/search.js +9 -4
  480. package/dist/cli/commands/search.js.map +1 -1
  481. package/dist/cli/commands/symbolic.js +31 -36
  482. package/dist/cli/commands/symbolic.js.map +1 -1
  483. package/dist/cli/commands/testplan.d.ts.map +1 -1
  484. package/dist/cli/commands/testplan.js +5 -3
  485. package/dist/cli/commands/testplan.js.map +1 -1
  486. package/dist/cli/conventions.js.map +1 -1
  487. package/dist/cli/determination.js.map +1 -1
  488. package/dist/cli/errors.js.map +1 -1
  489. package/dist/cli/euler-guard.js.map +1 -1
  490. package/dist/cli/eval-numbers.js.map +1 -1
  491. package/dist/cli/expr-print.d.ts +28 -3
  492. package/dist/cli/expr-print.d.ts.map +1 -1
  493. package/dist/cli/expr-print.js +42 -22
  494. package/dist/cli/expr-print.js.map +1 -1
  495. package/dist/cli/flag-help.js.map +1 -1
  496. package/dist/cli/graphs.js.map +1 -1
  497. package/dist/cli/library-defaults.d.ts +19 -0
  498. package/dist/cli/library-defaults.d.ts.map +1 -0
  499. package/dist/cli/library-defaults.js +22 -0
  500. package/dist/cli/library-defaults.js.map +1 -0
  501. package/dist/cli/main.d.ts +7 -0
  502. package/dist/cli/main.d.ts.map +1 -1
  503. package/dist/cli/main.js +25 -6
  504. package/dist/cli/main.js.map +1 -1
  505. package/dist/cli/map-evidence.js.map +1 -1
  506. package/dist/cli/numeric-flag.d.ts +12 -0
  507. package/dist/cli/numeric-flag.d.ts.map +1 -0
  508. package/dist/cli/numeric-flag.js +44 -0
  509. package/dist/cli/numeric-flag.js.map +1 -0
  510. package/dist/cli/output.d.ts +23 -6
  511. package/dist/cli/output.d.ts.map +1 -1
  512. package/dist/cli/output.js +15 -0
  513. package/dist/cli/output.js.map +1 -1
  514. package/dist/cli/published-url.js.map +1 -1
  515. package/dist/cli/record-reach.d.ts +6 -0
  516. package/dist/cli/record-reach.d.ts.map +1 -1
  517. package/dist/cli/record-reach.js +17 -11
  518. package/dist/cli/record-reach.js.map +1 -1
  519. package/dist/cli/record-tables.d.ts.map +1 -1
  520. package/dist/cli/record-tables.js +7 -6
  521. package/dist/cli/record-tables.js.map +1 -1
  522. package/dist/cli/record.d.ts +1 -5
  523. package/dist/cli/record.d.ts.map +1 -1
  524. package/dist/cli/record.js +40 -20
  525. package/dist/cli/record.js.map +1 -1
  526. package/dist/cli/search-index.d.ts +5 -0
  527. package/dist/cli/search-index.d.ts.map +1 -1
  528. package/dist/cli/search-index.js +19 -7
  529. package/dist/cli/search-index.js.map +1 -1
  530. package/dist/cli/statuses.d.ts +0 -2
  531. package/dist/cli/statuses.d.ts.map +1 -1
  532. package/dist/cli/statuses.js +0 -7
  533. package/dist/cli/statuses.js.map +1 -1
  534. package/dist/cli/stored-results.d.ts +7 -0
  535. package/dist/cli/stored-results.d.ts.map +1 -0
  536. package/dist/cli/stored-results.js +23 -0
  537. package/dist/cli/stored-results.js.map +1 -0
  538. package/dist/cli/top-level-help.js.map +1 -1
  539. package/dist/cli/version.d.ts.map +1 -1
  540. package/dist/cli/version.js +7 -5
  541. package/dist/cli/version.js.map +1 -1
  542. package/dist/cli-api.d.ts +49 -14
  543. package/dist/cli-api.d.ts.map +1 -1
  544. package/dist/cli-api.js +42 -17
  545. package/dist/cli-api.js.map +1 -1
  546. package/dist/composition/adjudication.js.map +1 -1
  547. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  548. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  549. package/dist/composition/algebraic-equivalence.js +115 -0
  550. package/dist/composition/algebraic-equivalence.js.map +1 -0
  551. package/dist/composition/aliases.js.map +1 -1
  552. package/dist/composition/audit-coverage.d.ts +2 -0
  553. package/dist/composition/audit-coverage.d.ts.map +1 -1
  554. package/dist/composition/audit-coverage.js.map +1 -1
  555. package/dist/composition/axes.d.ts +6 -0
  556. package/dist/composition/axes.d.ts.map +1 -1
  557. package/dist/composition/axes.js +18 -6
  558. package/dist/composition/axes.js.map +1 -1
  559. package/dist/composition/axis-audit.d.ts +47 -20
  560. package/dist/composition/axis-audit.d.ts.map +1 -1
  561. package/dist/composition/axis-audit.js +82 -9
  562. package/dist/composition/axis-audit.js.map +1 -1
  563. package/dist/composition/bridge-analysis.d.ts +14 -15
  564. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  565. package/dist/composition/bridge-analysis.js +148 -91
  566. package/dist/composition/bridge-analysis.js.map +1 -1
  567. package/dist/composition/bridge-prediction.d.ts +5 -1
  568. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  569. package/dist/composition/bridge-prediction.js +12 -16
  570. package/dist/composition/bridge-prediction.js.map +1 -1
  571. package/dist/composition/buckingham-filter.js.map +1 -1
  572. package/dist/composition/canonical-compare.d.ts +40 -0
  573. package/dist/composition/canonical-compare.d.ts.map +1 -1
  574. package/dist/composition/canonical-compare.js +134 -26
  575. package/dist/composition/canonical-compare.js.map +1 -1
  576. package/dist/composition/canonical-graph.d.ts +9 -10
  577. package/dist/composition/canonical-graph.d.ts.map +1 -1
  578. package/dist/composition/canonical-graph.js +33 -102
  579. package/dist/composition/canonical-graph.js.map +1 -1
  580. package/dist/composition/canonical-json.js +2 -2
  581. package/dist/composition/canonical-json.js.map +1 -1
  582. package/dist/composition/canonical-prefactors.js.map +1 -1
  583. package/dist/composition/catalog-graph.d.ts.map +1 -1
  584. package/dist/composition/catalog-graph.js +8 -25
  585. package/dist/composition/catalog-graph.js.map +1 -1
  586. package/dist/composition/chain-candidate.d.ts +10 -0
  587. package/dist/composition/chain-candidate.d.ts.map +1 -1
  588. package/dist/composition/chain-candidate.js +11 -2
  589. package/dist/composition/chain-candidate.js.map +1 -1
  590. package/dist/composition/chain-match.d.ts +6 -3
  591. package/dist/composition/chain-match.d.ts.map +1 -1
  592. package/dist/composition/chain-match.js +4 -1
  593. package/dist/composition/chain-match.js.map +1 -1
  594. package/dist/composition/chain-regime.js.map +1 -1
  595. package/dist/composition/chain-result.d.ts.map +1 -1
  596. package/dist/composition/chain-result.js +2 -14
  597. package/dist/composition/chain-result.js.map +1 -1
  598. package/dist/composition/compose-surface.js.map +1 -1
  599. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  600. package/dist/composition/compose-symbolic.js +3 -2
  601. package/dist/composition/compose-symbolic.js.map +1 -1
  602. package/dist/composition/compose.d.ts.map +1 -1
  603. package/dist/composition/compose.js +166 -41
  604. package/dist/composition/compose.js.map +1 -1
  605. package/dist/composition/composition-recovery.d.ts.map +1 -1
  606. package/dist/composition/composition-recovery.js +4 -7
  607. package/dist/composition/composition-recovery.js.map +1 -1
  608. package/dist/composition/consequence.d.ts.map +1 -1
  609. package/dist/composition/consequence.js +15 -6
  610. package/dist/composition/consequence.js.map +1 -1
  611. package/dist/composition/consistency.js.map +1 -1
  612. package/dist/composition/descriptor.d.ts +1 -1
  613. package/dist/composition/descriptor.d.ts.map +1 -1
  614. package/dist/composition/descriptor.js.map +1 -1
  615. package/dist/composition/dimension-adjacency.js.map +1 -1
  616. package/dist/composition/discovery.d.ts +77 -11
  617. package/dist/composition/discovery.d.ts.map +1 -1
  618. package/dist/composition/discovery.js +194 -80
  619. package/dist/composition/discovery.js.map +1 -1
  620. package/dist/composition/edge.d.ts +40 -10
  621. package/dist/composition/edge.d.ts.map +1 -1
  622. package/dist/composition/edge.js +47 -12
  623. package/dist/composition/edge.js.map +1 -1
  624. package/dist/composition/enumerate.d.ts +2 -2
  625. package/dist/composition/enumerate.d.ts.map +1 -1
  626. package/dist/composition/enumerate.js +18 -3
  627. package/dist/composition/enumerate.js.map +1 -1
  628. package/dist/composition/evaluate-relation.d.ts +35 -11
  629. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  630. package/dist/composition/evaluate-relation.js +60 -39
  631. package/dist/composition/evaluate-relation.js.map +1 -1
  632. package/dist/composition/explain.d.ts +5 -9
  633. package/dist/composition/explain.d.ts.map +1 -1
  634. package/dist/composition/explain.js +38 -18
  635. package/dist/composition/explain.js.map +1 -1
  636. package/dist/composition/expr-eval.d.ts.map +1 -1
  637. package/dist/composition/expr-eval.js +2 -11
  638. package/dist/composition/expr-eval.js.map +1 -1
  639. package/dist/composition/expr-simplify.d.ts +16 -0
  640. package/dist/composition/expr-simplify.d.ts.map +1 -1
  641. package/dist/composition/expr-simplify.js +24 -59
  642. package/dist/composition/expr-simplify.js.map +1 -1
  643. package/dist/composition/expr-subst.js.map +1 -1
  644. package/dist/composition/formula-shape.d.ts +28 -0
  645. package/dist/composition/formula-shape.d.ts.map +1 -1
  646. package/dist/composition/formula-shape.js +96 -2
  647. package/dist/composition/formula-shape.js.map +1 -1
  648. package/dist/composition/frontier-account.d.ts +3 -2
  649. package/dist/composition/frontier-account.d.ts.map +1 -1
  650. package/dist/composition/frontier-account.js +7 -3
  651. package/dist/composition/frontier-account.js.map +1 -1
  652. package/dist/composition/graph-structure.d.ts +98 -0
  653. package/dist/composition/graph-structure.d.ts.map +1 -0
  654. package/dist/composition/graph-structure.js +167 -0
  655. package/dist/composition/graph-structure.js.map +1 -0
  656. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  657. package/dist/composition/graph-viz-svg.js +1 -1
  658. package/dist/composition/graph-viz-svg.js.map +1 -1
  659. package/dist/composition/graph-viz.d.ts.map +1 -1
  660. package/dist/composition/graph-viz.js +8 -37
  661. package/dist/composition/graph-viz.js.map +1 -1
  662. package/dist/composition/grounding.js.map +1 -1
  663. package/dist/composition/identifiability.d.ts +91 -4
  664. package/dist/composition/identifiability.d.ts.map +1 -1
  665. package/dist/composition/identifiability.js +363 -6
  666. package/dist/composition/identifiability.js.map +1 -1
  667. package/dist/composition/index.d.ts +14 -8
  668. package/dist/composition/index.d.ts.map +1 -1
  669. package/dist/composition/index.js +7 -5
  670. package/dist/composition/index.js.map +1 -1
  671. package/dist/composition/mathts-quiet.d.ts +29 -0
  672. package/dist/composition/mathts-quiet.d.ts.map +1 -0
  673. package/dist/composition/mathts-quiet.js +57 -0
  674. package/dist/composition/mathts-quiet.js.map +1 -0
  675. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  676. package/dist/composition/mathts-scalar-symbols.js +20 -35
  677. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  678. package/dist/composition/not-composable-seeds.d.ts +3 -1
  679. package/dist/composition/not-composable-seeds.d.ts.map +1 -1
  680. package/dist/composition/not-composable-seeds.js +2 -0
  681. package/dist/composition/not-composable-seeds.js.map +1 -1
  682. package/dist/composition/probe/backend-protocol.js.map +1 -1
  683. package/dist/composition/probe/candidate-store.js.map +1 -1
  684. package/dist/composition/probe/corpus.d.ts +4 -2
  685. package/dist/composition/probe/corpus.d.ts.map +1 -1
  686. package/dist/composition/probe/corpus.js +20 -9
  687. package/dist/composition/probe/corpus.js.map +1 -1
  688. package/dist/composition/probe/dataset.d.ts +17 -0
  689. package/dist/composition/probe/dataset.d.ts.map +1 -1
  690. package/dist/composition/probe/dataset.js +95 -50
  691. package/dist/composition/probe/dataset.js.map +1 -1
  692. package/dist/composition/probe/experiment-design.d.ts +5 -1
  693. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  694. package/dist/composition/probe/experiment-design.js +44 -24
  695. package/dist/composition/probe/experiment-design.js.map +1 -1
  696. package/dist/composition/probe/expression-gaps.js.map +1 -1
  697. package/dist/composition/probe/falsify.d.ts +14 -3
  698. package/dist/composition/probe/falsify.d.ts.map +1 -1
  699. package/dist/composition/probe/falsify.js +16 -27
  700. package/dist/composition/probe/falsify.js.map +1 -1
  701. package/dist/composition/probe/fingerprint.js.map +1 -1
  702. package/dist/composition/probe/fit.d.ts +7 -1
  703. package/dist/composition/probe/fit.d.ts.map +1 -1
  704. package/dist/composition/probe/fit.js +48 -23
  705. package/dist/composition/probe/fit.js.map +1 -1
  706. package/dist/composition/probe/frontier.d.ts.map +1 -1
  707. package/dist/composition/probe/frontier.js +33 -15
  708. package/dist/composition/probe/frontier.js.map +1 -1
  709. package/dist/composition/probe/generator.d.ts +27 -1
  710. package/dist/composition/probe/generator.d.ts.map +1 -1
  711. package/dist/composition/probe/generator.js +53 -30
  712. package/dist/composition/probe/generator.js.map +1 -1
  713. package/dist/composition/probe/index.d.ts +18 -2
  714. package/dist/composition/probe/index.d.ts.map +1 -1
  715. package/dist/composition/probe/index.js +10 -2
  716. package/dist/composition/probe/index.js.map +1 -1
  717. package/dist/composition/probe/limits.d.ts +24 -1
  718. package/dist/composition/probe/limits.d.ts.map +1 -1
  719. package/dist/composition/probe/limits.js +53 -11
  720. package/dist/composition/probe/limits.js.map +1 -1
  721. package/dist/composition/probe/metadata.js.map +1 -1
  722. package/dist/composition/probe/pipeline.d.ts +5 -0
  723. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  724. package/dist/composition/probe/pipeline.js +22 -9
  725. package/dist/composition/probe/pipeline.js.map +1 -1
  726. package/dist/composition/probe/power-law.d.ts +121 -0
  727. package/dist/composition/probe/power-law.d.ts.map +1 -0
  728. package/dist/composition/probe/power-law.js +255 -0
  729. package/dist/composition/probe/power-law.js.map +1 -0
  730. package/dist/composition/probe/problem.d.ts +12 -1
  731. package/dist/composition/probe/problem.d.ts.map +1 -1
  732. package/dist/composition/probe/problem.js +242 -48
  733. package/dist/composition/probe/problem.js.map +1 -1
  734. package/dist/composition/probe/report.js +1 -1
  735. package/dist/composition/probe/report.js.map +1 -1
  736. package/dist/composition/probe/residual.d.ts +6 -1
  737. package/dist/composition/probe/residual.d.ts.map +1 -1
  738. package/dist/composition/probe/residual.js +9 -7
  739. package/dist/composition/probe/residual.js.map +1 -1
  740. package/dist/composition/probe/run-manifest.js +2 -2
  741. package/dist/composition/probe/run-manifest.js.map +1 -1
  742. package/dist/composition/probe/scoring.d.ts +2 -1
  743. package/dist/composition/probe/scoring.d.ts.map +1 -1
  744. package/dist/composition/probe/scoring.js +21 -7
  745. package/dist/composition/probe/scoring.js.map +1 -1
  746. package/dist/composition/probe/search-budget.js.map +1 -1
  747. package/dist/composition/probe/serialize.js.map +1 -1
  748. package/dist/composition/probe/structure.d.ts +82 -17
  749. package/dist/composition/probe/structure.d.ts.map +1 -1
  750. package/dist/composition/probe/structure.js +129 -55
  751. package/dist/composition/probe/structure.js.map +1 -1
  752. package/dist/composition/probe/study.d.ts +35 -12
  753. package/dist/composition/probe/study.d.ts.map +1 -1
  754. package/dist/composition/probe/study.js +241 -184
  755. package/dist/composition/probe/study.js.map +1 -1
  756. package/dist/composition/probe/t-tail.d.ts +17 -0
  757. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  758. package/dist/composition/probe/t-tail.js +32 -0
  759. package/dist/composition/probe/t-tail.js.map +1 -0
  760. package/dist/composition/probe/types.d.ts +6 -1
  761. package/dist/composition/probe/types.d.ts.map +1 -1
  762. package/dist/composition/probe/types.js +2 -0
  763. package/dist/composition/probe/types.js.map +1 -1
  764. package/dist/composition/proposed-bridges.d.ts +51 -13
  765. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  766. package/dist/composition/proposed-bridges.js +110 -58
  767. package/dist/composition/proposed-bridges.js.map +1 -1
  768. package/dist/composition/quantities.d.ts +0 -4
  769. package/dist/composition/quantities.d.ts.map +1 -1
  770. package/dist/composition/quantities.js +5 -5
  771. package/dist/composition/quantities.js.map +1 -1
  772. package/dist/composition/quantity-clusters.d.ts +48 -0
  773. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  774. package/dist/composition/quantity-clusters.js +98 -0
  775. package/dist/composition/quantity-clusters.js.map +1 -0
  776. package/dist/composition/quantity.d.ts +18 -2
  777. package/dist/composition/quantity.d.ts.map +1 -1
  778. package/dist/composition/quantity.js +35 -6
  779. package/dist/composition/quantity.js.map +1 -1
  780. package/dist/composition/rational-exponent.d.ts +40 -0
  781. package/dist/composition/rational-exponent.d.ts.map +1 -0
  782. package/dist/composition/rational-exponent.js +65 -0
  783. package/dist/composition/rational-exponent.js.map +1 -0
  784. package/dist/composition/representative-values.d.ts +22 -0
  785. package/dist/composition/representative-values.d.ts.map +1 -1
  786. package/dist/composition/representative-values.js +23 -0
  787. package/dist/composition/representative-values.js.map +1 -1
  788. package/dist/composition/retrodiction.d.ts +16 -6
  789. package/dist/composition/retrodiction.d.ts.map +1 -1
  790. package/dist/composition/retrodiction.js +36 -10
  791. package/dist/composition/retrodiction.js.map +1 -1
  792. package/dist/composition/uncertainty.js.map +1 -1
  793. package/dist/composition/user-equation.d.ts.map +1 -1
  794. package/dist/composition/user-equation.js +2 -2
  795. package/dist/composition/user-equation.js.map +1 -1
  796. package/dist/core/assignment.d.ts +19 -0
  797. package/dist/core/assignment.d.ts.map +1 -0
  798. package/dist/core/assignment.js +19 -0
  799. package/dist/core/assignment.js.map +1 -0
  800. package/dist/core/axes-registry.d.ts +8 -5
  801. package/dist/core/axes-registry.d.ts.map +1 -1
  802. package/dist/core/axes-registry.js.map +1 -1
  803. package/dist/core/cell.js.map +1 -1
  804. package/dist/core/compare.d.ts +32 -0
  805. package/dist/core/compare.d.ts.map +1 -0
  806. package/dist/core/compare.js +46 -0
  807. package/dist/core/compare.js.map +1 -0
  808. package/dist/core/constants.d.ts +35 -35
  809. package/dist/core/constants.d.ts.map +1 -1
  810. package/dist/core/constants.js +52 -37
  811. package/dist/core/constants.js.map +1 -1
  812. package/dist/core/data-file.d.ts +7 -0
  813. package/dist/core/data-file.d.ts.map +1 -1
  814. package/dist/core/data-file.js +17 -0
  815. package/dist/core/data-file.js.map +1 -1
  816. package/dist/core/flux-rules.js +1 -1
  817. package/dist/core/flux-rules.js.map +1 -1
  818. package/dist/core/format.d.ts +36 -0
  819. package/dist/core/format.d.ts.map +1 -0
  820. package/dist/core/format.js +39 -0
  821. package/dist/core/format.js.map +1 -0
  822. package/dist/core/hash.d.ts +14 -0
  823. package/dist/core/hash.d.ts.map +1 -0
  824. package/dist/core/hash.js +17 -0
  825. package/dist/core/hash.js.map +1 -0
  826. package/dist/core/json-schema.d.ts +3 -1
  827. package/dist/core/json-schema.d.ts.map +1 -1
  828. package/dist/core/json-schema.js +41 -16
  829. package/dist/core/json-schema.js.map +1 -1
  830. package/dist/core/labeled-tensor.d.ts +6 -1
  831. package/dist/core/labeled-tensor.d.ts.map +1 -1
  832. package/dist/core/labeled-tensor.js +18 -16
  833. package/dist/core/labeled-tensor.js.map +1 -1
  834. package/dist/core/mathts-read.d.ts +25 -0
  835. package/dist/core/mathts-read.d.ts.map +1 -0
  836. package/dist/core/mathts-read.js +51 -0
  837. package/dist/core/mathts-read.js.map +1 -0
  838. package/dist/core/regime-registry.d.ts +6 -2
  839. package/dist/core/regime-registry.d.ts.map +1 -1
  840. package/dist/core/regime-registry.js.map +1 -1
  841. package/dist/core/regime-rule-install.js.map +1 -1
  842. package/dist/core/regimes-builtins.js.map +1 -1
  843. package/dist/core/tensor.d.ts +7 -4
  844. package/dist/core/tensor.d.ts.map +1 -1
  845. package/dist/core/tensor.js +64 -8
  846. package/dist/core/tensor.js.map +1 -1
  847. package/dist/core/types.d.ts +5 -5
  848. package/dist/core/types.js.map +1 -1
  849. package/dist/core/universal-index.js.map +1 -1
  850. package/dist/diff/bridge-ast-gradient.d.ts +4 -5
  851. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  852. package/dist/diff/bridge-ast-gradient.js +10 -6
  853. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  854. package/dist/diff/bridge-gradient.d.ts +43 -86
  855. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  856. package/dist/diff/bridge-gradient.js +40 -109
  857. package/dist/diff/bridge-gradient.js.map +1 -1
  858. package/dist/diff/bridge-specs.d.ts +16 -5
  859. package/dist/diff/bridge-specs.d.ts.map +1 -1
  860. package/dist/diff/bridge-specs.js +19 -4
  861. package/dist/diff/bridge-specs.js.map +1 -1
  862. package/dist/dimensional/algebra.d.ts +18 -0
  863. package/dist/dimensional/algebra.d.ts.map +1 -1
  864. package/dist/dimensional/algebra.js +41 -1
  865. package/dist/dimensional/algebra.js.map +1 -1
  866. package/dist/dimensional/ast-builders.d.ts +12 -4
  867. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  868. package/dist/dimensional/ast-builders.js +17 -5
  869. package/dist/dimensional/ast-builders.js.map +1 -1
  870. package/dist/dimensional/ast-leaves.d.ts +81 -0
  871. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  872. package/dist/dimensional/ast-leaves.js +146 -0
  873. package/dist/dimensional/ast-leaves.js.map +1 -0
  874. package/dist/dimensional/ast-types.js.map +1 -1
  875. package/dist/dimensional/bridge-check.js.map +1 -1
  876. package/dist/dimensional/buckingham.d.ts.map +1 -1
  877. package/dist/dimensional/buckingham.js +15 -27
  878. package/dist/dimensional/buckingham.js.map +1 -1
  879. package/dist/dimensional/connection-validators.d.ts +2 -1
  880. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  881. package/dist/dimensional/connection-validators.js.map +1 -1
  882. package/dist/dimensional/connection.js.map +1 -1
  883. package/dist/dimensional/constant-rows.d.ts.map +1 -1
  884. package/dist/dimensional/constant-rows.js +17 -13
  885. package/dist/dimensional/constant-rows.js.map +1 -1
  886. package/dist/dimensional/constants.d.ts +5 -6
  887. package/dist/dimensional/constants.d.ts.map +1 -1
  888. package/dist/dimensional/constants.js +5 -6
  889. package/dist/dimensional/constants.js.map +1 -1
  890. package/dist/dimensional/curvature-composite.js.map +1 -1
  891. package/dist/dimensional/curvature-invariants.js.map +1 -1
  892. package/dist/dimensional/curvature.js.map +1 -1
  893. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  894. package/dist/dimensional/dimension-inference.js +1 -2
  895. package/dist/dimensional/dimension-inference.js.map +1 -1
  896. package/dist/dimensional/dimension-spec.d.ts +13 -7
  897. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  898. package/dist/dimensional/dimension-spec.js +49 -23
  899. package/dist/dimensional/dimension-spec.js.map +1 -1
  900. package/dist/dimensional/einstein-equation.js.map +1 -1
  901. package/dist/dimensional/errors.d.ts +4 -2
  902. package/dist/dimensional/errors.d.ts.map +1 -1
  903. package/dist/dimensional/errors.js +3 -17
  904. package/dist/dimensional/errors.js.map +1 -1
  905. package/dist/dimensional/exact-scale.d.ts +0 -17
  906. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  907. package/dist/dimensional/exact-scale.js +8 -8
  908. package/dist/dimensional/exact-scale.js.map +1 -1
  909. package/dist/dimensional/field-equation-helpers.js.map +1 -1
  910. package/dist/dimensional/formula-names.js.map +1 -1
  911. package/dist/dimensional/fresh-label.js.map +1 -1
  912. package/dist/dimensional/friedmann-equation.d.ts +3 -3
  913. package/dist/dimensional/friedmann-equation.js +3 -3
  914. package/dist/dimensional/friedmann-equation.js.map +1 -1
  915. package/dist/dimensional/gauge-field.d.ts +2 -3
  916. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  917. package/dist/dimensional/gauge-field.js +2 -3
  918. package/dist/dimensional/gauge-field.js.map +1 -1
  919. package/dist/dimensional/hyphen-names.d.ts +12 -2
  920. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  921. package/dist/dimensional/hyphen-names.js +45 -12
  922. package/dist/dimensional/hyphen-names.js.map +1 -1
  923. package/dist/dimensional/killing-validators.js.map +1 -1
  924. package/dist/dimensional/klein-gordon-equation.js.map +1 -1
  925. package/dist/dimensional/metric-validators.d.ts +2 -1
  926. package/dist/dimensional/metric-validators.d.ts.map +1 -1
  927. package/dist/dimensional/metric-validators.js.map +1 -1
  928. package/dist/dimensional/metric.d.ts.map +1 -1
  929. package/dist/dimensional/metric.js +0 -1
  930. package/dist/dimensional/metric.js.map +1 -1
  931. package/dist/dimensional/natural-units.js.map +1 -1
  932. package/dist/dimensional/quantity-registry.d.ts +13 -0
  933. package/dist/dimensional/quantity-registry.d.ts.map +1 -1
  934. package/dist/dimensional/quantity-registry.js +14 -6
  935. package/dist/dimensional/quantity-registry.js.map +1 -1
  936. package/dist/dimensional/rg-flow.js.map +1 -1
  937. package/dist/dimensional/stress-energy-validators.js.map +1 -1
  938. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  939. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  940. package/dist/dimensional/symbolic-constants.js +20 -3
  941. package/dist/dimensional/symbolic-constants.js.map +1 -1
  942. package/dist/dimensional/tensor-trace.js.map +1 -1
  943. package/dist/dimensional/tensor.js.map +1 -1
  944. package/dist/dimensional/types.d.ts +36 -0
  945. package/dist/dimensional/types.d.ts.map +1 -1
  946. package/dist/dimensional/types.js +45 -7
  947. package/dist/dimensional/types.js.map +1 -1
  948. package/dist/dimensional/unit-convention.d.ts +0 -2
  949. package/dist/dimensional/unit-convention.d.ts.map +1 -1
  950. package/dist/dimensional/unit-convention.js +2 -2
  951. package/dist/dimensional/unit-convention.js.map +1 -1
  952. package/dist/dimensional/unit-data.d.ts.map +1 -1
  953. package/dist/dimensional/unit-data.js +11 -7
  954. package/dist/dimensional/unit-data.js.map +1 -1
  955. package/dist/dimensional/units.d.ts.map +1 -1
  956. package/dist/dimensional/units.js +38 -20
  957. package/dist/dimensional/units.js.map +1 -1
  958. package/dist/dimensional/validator-registry.js.map +1 -1
  959. package/dist/dimensional/validator.d.ts +0 -16
  960. package/dist/dimensional/validator.d.ts.map +1 -1
  961. package/dist/dimensional/validator.js +65 -29
  962. package/dist/dimensional/validator.js.map +1 -1
  963. package/dist/dimensional/weyl-validators.js.map +1 -1
  964. package/dist/index.d.ts +59 -8
  965. package/dist/index.d.ts.map +1 -1
  966. package/dist/index.js +22 -24
  967. package/dist/index.js.map +1 -1
  968. package/dist/numerical/bianchi-residual.js.map +1 -1
  969. package/dist/numerical/binding-value.d.ts +11 -6
  970. package/dist/numerical/binding-value.d.ts.map +1 -1
  971. package/dist/numerical/binding-value.js +126 -122
  972. package/dist/numerical/binding-value.js.map +1 -1
  973. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  974. package/dist/numerical/christoffel-flat.js +3 -2
  975. package/dist/numerical/christoffel-flat.js.map +1 -1
  976. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  977. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  978. package/dist/numerical/covariant-eikonal.js +36 -13
  979. package/dist/numerical/covariant-eikonal.js.map +1 -1
  980. package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
  981. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  982. package/dist/numerical/curvature-lowering-helpers.js +9 -5
  983. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  984. package/dist/numerical/derivative-lowering.js.map +1 -1
  985. package/dist/numerical/einstein-equation.js.map +1 -1
  986. package/dist/numerical/engine-registry.js.map +1 -1
  987. package/dist/numerical/errors.d.ts +7 -3
  988. package/dist/numerical/errors.d.ts.map +1 -1
  989. package/dist/numerical/errors.js +5 -8
  990. package/dist/numerical/errors.js.map +1 -1
  991. package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -1
  992. package/dist/numerical/evaluator-uncertainty.js +19 -2
  993. package/dist/numerical/evaluator-uncertainty.js.map +1 -1
  994. package/dist/numerical/finite-difference.d.ts +22 -0
  995. package/dist/numerical/finite-difference.d.ts.map +1 -0
  996. package/dist/numerical/finite-difference.js +27 -0
  997. package/dist/numerical/finite-difference.js.map +1 -0
  998. package/dist/numerical/formula-contract.d.ts +63 -7
  999. package/dist/numerical/formula-contract.d.ts.map +1 -1
  1000. package/dist/numerical/formula-contract.js +61 -42
  1001. package/dist/numerical/formula-contract.js.map +1 -1
  1002. package/dist/numerical/formula-dimension.d.ts +8 -7
  1003. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  1004. package/dist/numerical/formula-dimension.js +58 -36
  1005. package/dist/numerical/formula-dimension.js.map +1 -1
  1006. package/dist/numerical/formula-mathts.d.ts.map +1 -1
  1007. package/dist/numerical/formula-mathts.js +5 -2
  1008. package/dist/numerical/formula-mathts.js.map +1 -1
  1009. package/dist/numerical/formula-registry.d.ts +13 -3
  1010. package/dist/numerical/formula-registry.d.ts.map +1 -1
  1011. package/dist/numerical/formula-registry.js +7 -2
  1012. package/dist/numerical/formula-registry.js.map +1 -1
  1013. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  1014. package/dist/numerical/geodesic-integrator.js +22 -14
  1015. package/dist/numerical/geodesic-integrator.js.map +1 -1
  1016. package/dist/numerical/geometrized.d.ts.map +1 -1
  1017. package/dist/numerical/geometrized.js +0 -1
  1018. package/dist/numerical/geometrized.js.map +1 -1
  1019. package/dist/numerical/gl4-integrator.d.ts +28 -27
  1020. package/dist/numerical/gl4-integrator.d.ts.map +1 -1
  1021. package/dist/numerical/gl4-integrator.js +41 -42
  1022. package/dist/numerical/gl4-integrator.js.map +1 -1
  1023. package/dist/numerical/grid-field.js.map +1 -1
  1024. package/dist/numerical/index.js.map +1 -1
  1025. package/dist/numerical/input-validation.d.ts +3 -6
  1026. package/dist/numerical/input-validation.d.ts.map +1 -1
  1027. package/dist/numerical/input-validation.js +4 -8
  1028. package/dist/numerical/input-validation.js.map +1 -1
  1029. package/dist/numerical/killing.d.ts +8 -5
  1030. package/dist/numerical/killing.d.ts.map +1 -1
  1031. package/dist/numerical/killing.js.map +1 -1
  1032. package/dist/numerical/klein-gordon.js.map +1 -1
  1033. package/dist/numerical/kretschmann.js.map +1 -1
  1034. package/dist/numerical/lowering-utils.js.map +1 -1
  1035. package/dist/numerical/lowering.d.ts.map +1 -1
  1036. package/dist/numerical/lowering.js +7 -17
  1037. package/dist/numerical/lowering.js.map +1 -1
  1038. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  1039. package/dist/numerical/mathts-engine.js +16 -25
  1040. package/dist/numerical/mathts-engine.js.map +1 -1
  1041. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  1042. package/dist/numerical/metric-inverse.js +83 -46
  1043. package/dist/numerical/metric-inverse.js.map +1 -1
  1044. package/dist/numerical/null-ic.js.map +1 -1
  1045. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  1046. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  1047. package/dist/numerical/null-ray-integrator.js +12 -12
  1048. package/dist/numerical/null-ray-integrator.js.map +1 -1
  1049. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  1050. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  1051. package/dist/numerical/pderiv.d.ts.map +1 -1
  1052. package/dist/numerical/pderiv.js +9 -2
  1053. package/dist/numerical/pderiv.js.map +1 -1
  1054. package/dist/numerical/perihelion-finder.d.ts +0 -36
  1055. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  1056. package/dist/numerical/perihelion-finder.js +41 -87
  1057. package/dist/numerical/perihelion-finder.js.map +1 -1
  1058. package/dist/numerical/quadrature.d.ts +5 -2
  1059. package/dist/numerical/quadrature.d.ts.map +1 -1
  1060. package/dist/numerical/quadrature.js +19 -4
  1061. package/dist/numerical/quadrature.js.map +1 -1
  1062. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  1063. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  1064. package/dist/numerical/rk4-trajectory.js +37 -0
  1065. package/dist/numerical/rk4-trajectory.js.map +1 -0
  1066. package/dist/numerical/schwarzschild.d.ts +14 -0
  1067. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  1068. package/dist/numerical/schwarzschild.js +17 -0
  1069. package/dist/numerical/schwarzschild.js.map +1 -0
  1070. package/dist/numerical/spacetime-metrics.d.ts +25 -19
  1071. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  1072. package/dist/numerical/spacetime-metrics.js +180 -286
  1073. package/dist/numerical/spacetime-metrics.js.map +1 -1
  1074. package/dist/numerical/statistics.d.ts +24 -0
  1075. package/dist/numerical/statistics.d.ts.map +1 -0
  1076. package/dist/numerical/statistics.js +52 -0
  1077. package/dist/numerical/statistics.js.map +1 -0
  1078. package/dist/numerical/strides.js.map +1 -1
  1079. package/dist/numerical/tensor-engine.d.ts +30 -5
  1080. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  1081. package/dist/numerical/tensor-engine.js +12 -0
  1082. package/dist/numerical/tensor-engine.js.map +1 -1
  1083. package/dist/numerical/types.js.map +1 -1
  1084. package/dist/numerical/weyl-lowering.js.map +1 -1
  1085. package/dist/relations/category.js.map +1 -1
  1086. package/dist/relations/composition-table.d.ts +4 -4
  1087. package/dist/relations/composition-table.js +4 -4
  1088. package/dist/relations/composition-table.js.map +1 -1
  1089. package/dist/relations/conventions.js.map +1 -1
  1090. package/dist/relations/domain-regimes.js.map +1 -1
  1091. package/dist/relations/regime-registration.js.map +1 -1
  1092. package/dist/relations/regime-vocabularies.js.map +1 -1
  1093. package/dist/relations/regime.d.ts +28 -8
  1094. package/dist/relations/regime.d.ts.map +1 -1
  1095. package/dist/relations/regime.js +44 -15
  1096. package/dist/relations/regime.js.map +1 -1
  1097. package/dist/relations/types.d.ts +18 -5
  1098. package/dist/relations/types.d.ts.map +1 -1
  1099. package/dist/relations/types.js +5 -3
  1100. package/dist/relations/types.js.map +1 -1
  1101. package/package.json +16 -20
  1102. package/dist/bridges/registry.d.ts +0 -60
  1103. package/dist/bridges/registry.d.ts.map +0 -1
  1104. package/dist/bridges/registry.js +0 -87
  1105. package/dist/bridges/registry.js.map +0 -1
  1106. package/dist/cli/poster-source.d.ts +0 -154
  1107. package/dist/cli/poster-source.d.ts.map +0 -1
  1108. package/dist/cli/poster-source.js +0 -184
  1109. package/dist/cli/poster-source.js.map +0 -1
@@ -31,6 +31,19 @@
31
31
  * `lhs − rhs = 0`; the capability needed is SIMPLIFICATION, which lives in
32
32
  * `expr-simplify.ts` (a different peer, `@danielsimonjr/mathts-functions`).
33
33
  *
34
+ * ## The numeric probe is a SECOND result, never folded into the CAS status
35
+ *
36
+ * A simplifier that fails on everything would leave every wrong dictionary
37
+ * `'unresolved'`, which is "not checked", not "shown wrong" (the weaker
38
+ * guarantee NOTES.md records). {@link probeSymbolicWitness} therefore
39
+ * evaluates both sides at seeded random positive points through `evalExpr`
40
+ * and REFUTES on disagreement. Its outcome is its own kind
41
+ * ({@link NumericProbeKind}), carried on the run result beside `status`:
42
+ * a probe that agrees never makes a run `'checked'`, a probe that refutes
43
+ * never makes it `'refuted'`, and the two are tallied as two sets of
44
+ * numbers ({@link tallySymbolicResults}; AGENTS law 4). MathTS
45
+ * `symbolicEqual` is not used: it is the same simplifier, not a second method.
46
+ *
34
47
  * @module atlas/witness-symbolic
35
48
  * @internal
36
49
  */
@@ -64,6 +77,64 @@ export interface SymbolicWitnessSpec {
64
77
  */
65
78
  readonly budgetMs?: number;
66
79
  }
80
+ /**
81
+ * What the numeric probe concluded: its own kind, never the CAS status.
82
+ *
83
+ * - `'numeric-refuted'`: some seeded point gives |lhs − rhs|/(|lhs| + |rhs|)
84
+ * above {@link NUMERIC_PROBE_TOLERANCE}.
85
+ * - `'numeric-agrees'`: every point is within it. Agreement at finitely
86
+ * many points is not a proof, so this never lights an evidence tag.
87
+ * - `'numeric-not-run'`: a side could not be evaluated to a finite number.
88
+ *
89
+ * @internal
90
+ */
91
+ export type NumericProbeKind = 'numeric-refuted' | 'numeric-agrees' | 'numeric-not-run';
92
+ /** The numeric probe's record. @internal */
93
+ export interface NumericProbe {
94
+ readonly kind: NumericProbeKind;
95
+ /** Points evaluated; 0 when not run. */
96
+ readonly points: number;
97
+ /** max |lhs − rhs|/(|lhs| + |rhs|) over the points; absent when not run. */
98
+ readonly worst?: number;
99
+ readonly detail: string;
100
+ }
101
+ /** Seeded points per probe. @internal */
102
+ export declare const NUMERIC_PROBE_POINTS = 8;
103
+ /** The relative difference above which a point refutes. @internal */
104
+ export declare const NUMERIC_PROBE_TOLERANCE = 1e-12;
105
+ /**
106
+ * Evaluate a symbolic witness's two sides at `points` seeded random points,
107
+ * every free symbol drawn from [0.5, 2) by MathTS `random` after
108
+ * `seedProbabilityRng(spec.id)`, so a re-run sees the same points. The free
109
+ * symbols are the scalar leaves (`scalarSymbolsFromMathTs`) that do not
110
+ * evaluate on their own. Never throws.
111
+ *
112
+ * @internal
113
+ */
114
+ export declare function probeSymbolicWitness(spec: SymbolicWitnessSpec, points?: number): NumericProbe;
115
+ /** A symbolic run: the CAS status, and the numeric probe beside it. @internal */
116
+ export interface SymbolicWitnessRunResult extends WitnessRunResult {
117
+ readonly kind: 'symbolic';
118
+ readonly numericProbe: NumericProbe;
119
+ }
120
+ /**
121
+ * The CAS outcomes and the numeric outcomes of symbolic runs, as two separate
122
+ * tallies. They are never added together.
123
+ *
124
+ * @internal
125
+ */
126
+ export declare function tallySymbolicResults(results: readonly SymbolicWitnessRunResult[]): {
127
+ readonly cas: {
128
+ readonly checked: number;
129
+ readonly refuted: number;
130
+ readonly unresolved: number;
131
+ };
132
+ readonly numeric: {
133
+ readonly agrees: number;
134
+ readonly refuted: number;
135
+ readonly notRun: number;
136
+ };
137
+ };
67
138
  /**
68
139
  * Run one symbolic witness.
69
140
  *
@@ -71,9 +142,10 @@ export interface SymbolicWitnessSpec {
71
142
  * @param simplifier - the CAS capability, or `null` when the optional peer is
72
143
  * absent. When omitted, resolves to `simplifyExpr` if the peer is available and
73
144
  * to `null` otherwise. Pass `null` EXPLICITLY to exercise the absent path.
74
- * @returns a result; **never throws**, because a thrown error forces callers
75
- * into a `catch` that cannot distinguish "did not run" from "failed".
145
+ * @returns a result carrying the CAS status and, beside it, the numeric
146
+ * probe; **never throws**, because a thrown error forces callers into a
147
+ * `catch` that cannot distinguish "did not run" from "failed".
76
148
  * @internal
77
149
  */
78
- export declare function runSymbolicWitness(spec: SymbolicWitnessSpec, simplifier?: SymbolicSimplifier | null): Promise<WitnessRunResult>;
150
+ export declare function runSymbolicWitness(spec: SymbolicWitnessSpec, simplifier?: SymbolicSimplifier | null): Promise<SymbolicWitnessRunResult>;
79
151
  //# sourceMappingURL=witness-symbolic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"witness-symbolic.d.ts","sourceRoot":"","sources":["../../src/atlas/witness-symbolic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,IAAI,EAAE,QAAQ,KACX,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAExE,iDAAiD;AACjD,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAeD;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,mBAAmB,EACzB,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,GACrC,OAAO,CAAC,gBAAgB,CAAC,CAoF3B"}
1
+ {"version":3,"file":"witness-symbolic.d.ts","sourceRoot":"","sources":["../../src/atlas/witness-symbolic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAM5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,IAAI,EAAE,QAAQ,KACX,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAExE,iDAAiD;AACjD,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAExF,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,yCAAyC;AACzC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAkB7C;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,GAAE,MAA6B,GAAG,YAAY,CAoCnH;AAED,iFAAiF;AACjF,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAChE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,wBAAwB,EAAE,GAAG;IAClF,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAClG,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAClG,CAUA;AAWD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,mBAAmB,EACzB,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,GACrC,OAAO,CAAC,wBAAwB,CAAC,CAqFnC"}
@@ -31,19 +31,123 @@
31
31
  * `lhs − rhs = 0`; the capability needed is SIMPLIFICATION, which lives in
32
32
  * `expr-simplify.ts` (a different peer, `@danielsimonjr/mathts-functions`).
33
33
  *
34
+ * ## The numeric probe is a SECOND result, never folded into the CAS status
35
+ *
36
+ * A simplifier that fails on everything would leave every wrong dictionary
37
+ * `'unresolved'`, which is "not checked", not "shown wrong" (the weaker
38
+ * guarantee NOTES.md records). {@link probeSymbolicWitness} therefore
39
+ * evaluates both sides at seeded random positive points through `evalExpr`
40
+ * and REFUTES on disagreement. Its outcome is its own kind
41
+ * ({@link NumericProbeKind}), carried on the run result beside `status`:
42
+ * a probe that agrees never makes a run `'checked'`, a probe that refutes
43
+ * never makes it `'refuted'`, and the two are tallied as two sets of
44
+ * numbers ({@link tallySymbolicResults}; AGENTS law 4). MathTS
45
+ * `symbolicEqual` is not used: it is the same simplifier, not a second method.
46
+ *
34
47
  * @module atlas/witness-symbolic
35
48
  * @internal
36
49
  */
50
+ import { random, seedProbabilityRng } from '@danielsimonjr/mathts-functions';
51
+ import { sym } from '../dimensional/ast-builders.js';
52
+ import { DIMENSIONLESS } from '../dimensional/types.js';
53
+ import { evalExpr } from '../composition/expr-eval.js';
37
54
  import { isSimplifierAvailable, simplifyExpr } from '../composition/expr-simplify.js';
55
+ import { scalarSymbolsFromMathTs } from '../composition/mathts-scalar-symbols.js';
56
+ import { literalValue as leafLiteral } from '../dimensional/ast-leaves.js';
38
57
  const DEFAULT_BUDGET_MS = 5000;
39
- /** The numeric value of a literal leaf, or `null`. Same rule as `validator.ts`. */
58
+ /** Seeded points per probe. @internal */
59
+ export const NUMERIC_PROBE_POINTS = 8;
60
+ /** The relative difference above which a point refutes. @internal */
61
+ export const NUMERIC_PROBE_TOLERANCE = 1e-12;
62
+ /** A leaf that evaluates on its own (π, a registered constant, a literal) is a constant, not a free symbol. */
63
+ function evaluatesAlone(name) {
64
+ try {
65
+ return Number.isFinite(evalExpr(sym(name, DIMENSIONLESS)));
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ /** MathTS `random(lo, hi)`, read back as the number it is. */
72
+ function seededPoint(lo, hi) {
73
+ const v = random(lo, hi);
74
+ if (typeof v !== 'number')
75
+ throw new TypeError('random did not return a number');
76
+ return v;
77
+ }
78
+ /**
79
+ * Evaluate a symbolic witness's two sides at `points` seeded random points,
80
+ * every free symbol drawn from [0.5, 2) by MathTS `random` after
81
+ * `seedProbabilityRng(spec.id)`, so a re-run sees the same points. The free
82
+ * symbols are the scalar leaves (`scalarSymbolsFromMathTs`) that do not
83
+ * evaluate on their own. Never throws.
84
+ *
85
+ * @internal
86
+ */
87
+ export function probeSymbolicWitness(spec, points = NUMERIC_PROBE_POINTS) {
88
+ const notRun = (why) => ({ kind: 'numeric-not-run', points: 0, detail: `The numeric probe did not run: ${why}.` });
89
+ try {
90
+ const names = new Set();
91
+ for (const leaf of [...scalarSymbolsFromMathTs(spec.lhs), ...scalarSymbolsFromMathTs(spec.rhs)])
92
+ names.add(leaf.name);
93
+ const free = [...names].filter((name) => !evaluatesAlone(name)).sort();
94
+ seedProbabilityRng(spec.id);
95
+ let worst = 0;
96
+ for (let i = 0; i < points; i++) {
97
+ const values = {};
98
+ for (const name of free)
99
+ values[name] = seededPoint(0.5, 2);
100
+ const lhs = evalExpr(spec.lhs, values);
101
+ const rhs = evalExpr(spec.rhs, values);
102
+ if (!Number.isFinite(lhs) || !Number.isFinite(rhs)) {
103
+ return notRun(`a non-finite value (lhs ${lhs}, rhs ${rhs}) at point ${i + 1}`);
104
+ }
105
+ const scale = Math.abs(lhs) + Math.abs(rhs);
106
+ worst = Math.max(worst, scale === 0 ? 0 : Math.abs(lhs - rhs) / scale);
107
+ }
108
+ if (worst > NUMERIC_PROBE_TOLERANCE) {
109
+ return {
110
+ kind: 'numeric-refuted',
111
+ points,
112
+ worst,
113
+ detail: `lhs and rhs differ at a seeded point: max |lhs − rhs|/(|lhs| + |rhs|) = ${worst} over ${points} points, above ${NUMERIC_PROBE_TOLERANCE}.`,
114
+ };
115
+ }
116
+ return {
117
+ kind: 'numeric-agrees',
118
+ points,
119
+ worst,
120
+ detail: `lhs and rhs agree at ${points} seeded points: max |lhs − rhs|/(|lhs| + |rhs|) = ${worst}. Agreement at points is not a proof.`,
121
+ };
122
+ }
123
+ catch (err) {
124
+ return notRun(`the evaluator threw: ${String(err)}`);
125
+ }
126
+ }
127
+ /**
128
+ * The CAS outcomes and the numeric outcomes of symbolic runs, as two separate
129
+ * tallies. They are never added together.
130
+ *
131
+ * @internal
132
+ */
133
+ export function tallySymbolicResults(results) {
134
+ const cas = { checked: 0, refuted: 0, unresolved: 0 };
135
+ const numeric = { agrees: 0, refuted: 0, notRun: 0 };
136
+ for (const r of results) {
137
+ cas[r.status] += 1;
138
+ if (r.numericProbe.kind === 'numeric-agrees')
139
+ numeric.agrees += 1;
140
+ else if (r.numericProbe.kind === 'numeric-refuted')
141
+ numeric.refuted += 1;
142
+ else
143
+ numeric.notRun += 1;
144
+ }
145
+ return { cas, numeric };
146
+ }
147
+ /** The finite value of a decimal-literal leaf (the one rule, `dimensional/ast-leaves.ts`), or `null`. */
40
148
  function literalValue(node) {
41
- if (node.kind !== 'symbol')
42
- return null;
43
- if (node.name.trim() === '')
44
- return null;
45
- const v = Number(node.name);
46
- return Number.isFinite(v) ? v : null;
149
+ const v = leafLiteral(node);
150
+ return v !== undefined && Number.isFinite(v) ? v : null;
47
151
  }
48
152
  /** A sentinel the timeout race resolves with; never confusable with a result. */
49
153
  const TIMED_OUT = Symbol('timed-out');
@@ -54,8 +158,9 @@ const TIMED_OUT = Symbol('timed-out');
54
158
  * @param simplifier - the CAS capability, or `null` when the optional peer is
55
159
  * absent. When omitted, resolves to `simplifyExpr` if the peer is available and
56
160
  * to `null` otherwise. Pass `null` EXPLICITLY to exercise the absent path.
57
- * @returns a result; **never throws**, because a thrown error forces callers
58
- * into a `catch` that cannot distinguish "did not run" from "failed".
161
+ * @returns a result carrying the CAS status and, beside it, the numeric
162
+ * probe; **never throws**, because a thrown error forces callers into a
163
+ * `catch` that cannot distinguish "did not run" from "failed".
59
164
  * @internal
60
165
  */
61
166
  export async function runSymbolicWitness(spec, simplifier) {
@@ -63,7 +168,8 @@ export async function runSymbolicWitness(spec, simplifier) {
63
168
  if (simplifier === undefined) {
64
169
  simplifier = (await isSimplifierAvailable()) ? simplifyExpr : null;
65
170
  }
66
- const base = { witnessId: spec.id, kind: 'symbolic' };
171
+ // The probe is independent of the CAS: it runs on every path, and decides nothing below.
172
+ const base = { witnessId: spec.id, kind: 'symbolic', numericProbe: probeSymbolicWitness(spec) };
67
173
  const elapsed = () => Date.now() - started;
68
174
  if (simplifier === null) {
69
175
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"witness-symbolic.js","sourceRoot":"","sources":["../../src/atlas/witness-symbolic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"witness-symbolic.js","sourceRoot":"","sources":["../../src/atlas/witness-symbolic.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Atlas Phase 4, S4.2 — the symbolic witness runner.\n *\n * Design note: `docs/planning/Atlas-Phase-4-Design.md` §2.\n *\n * A symbolic witness claims `lhs = rhs`. The runner forms the DIFFERENCE and\n * asks the optional CAS peer to simplify it: a difference that collapses to a\n * literal zero is `'checked'`; one that collapses to a non-zero literal is\n * `'refuted'`; anything else is `'unresolved'` with the reason it could not\n * decide.\n *\n * ## The simplifier is INJECTED, and no test touches the registry\n *\n * `src/numerical/formula-registry.ts` caches its selection in module scope and\n * exposes no reset hook, so a test that registered a stub would leak it into\n * every later test in the same worker. {@link runSymbolicWitness} therefore\n * takes the simplifier as a PARAMETER, defaulting to `simplifyExpr`. Tests\n * pass a stub for the present path and `null` for the absent path; the\n * registry is never written. One test exercises the real peer under the\n * existing skip-when-absent pattern.\n *\n * `null` means \"the peer is absent\" and is a first-class argument value, not a\n * forgotten one. `simplifyExpr` itself CANNOT tell absence from \"nothing to\n * simplify\" — both return `simplified: false` — so when the argument is\n * OMITTED the runner asks `isSimplifierAvailable()` first and maps absence to\n * `null`. Without that step the default path would report a missing peer as\n * `'not-simplified'`, the wrong reason on the one path most callers take.\n *\n * Deviation from the plan's wording, recorded in the design note §2.1: the\n * plan names `getFormulaParser()` as the default. A parser cannot decide\n * `lhs − rhs = 0`; the capability needed is SIMPLIFICATION, which lives in\n * `expr-simplify.ts` (a different peer, `@danielsimonjr/mathts-functions`).\n *\n * ## The numeric probe is a SECOND result, never folded into the CAS status\n *\n * A simplifier that fails on everything would leave every wrong dictionary\n * `'unresolved'`, which is \"not checked\", not \"shown wrong\" (the weaker\n * guarantee NOTES.md records). {@link probeSymbolicWitness} therefore\n * evaluates both sides at seeded random positive points through `evalExpr`\n * and REFUTES on disagreement. Its outcome is its own kind\n * ({@link NumericProbeKind}), carried on the run result beside `status`:\n * a probe that agrees never makes a run `'checked'`, a probe that refutes\n * never makes it `'refuted'`, and the two are tallied as two sets of\n * numbers ({@link tallySymbolicResults}; AGENTS law 4). MathTS\n * `symbolicEqual` is not used: it is the same simplifier, not a second method.\n *\n * @module atlas/witness-symbolic\n * @internal\n */\n\nimport { random, seedProbabilityRng } from '@danielsimonjr/mathts-functions';\nimport type { ExprNode } from '../dimensional/ast-types.js';\nimport { sym } from '../dimensional/ast-builders.js';\nimport { DIMENSIONLESS } from '../dimensional/types.js';\nimport { evalExpr } from '../composition/expr-eval.js';\nimport { isSimplifierAvailable, simplifyExpr } from '../composition/expr-simplify.js';\nimport { scalarSymbolsFromMathTs } from '../composition/mathts-scalar-symbols.js';\nimport type { WitnessRunResult } from './witness-result.js';\nimport { literalValue as leafLiteral } from '../dimensional/ast-leaves.js';\n\n/**\n * The simplification capability this runner needs, as a function rather than\n * the whole module — so a stub is five lines and cannot accidentally depend on\n * anything else `expr-simplify.ts` exports.\n *\n * @internal\n */\nexport type SymbolicSimplifier = (\n expr: ExprNode,\n) => Promise<{ readonly expr: ExprNode; readonly simplified: boolean }>;\n\n/** What a symbolic witness asserts. @internal */\nexport interface SymbolicWitnessSpec {\n /** The `Witness.id` (`'W7b'`). */\n readonly id: string;\n readonly lhs: ExprNode;\n readonly rhs: ExprNode;\n /**\n * Wall-clock budget in milliseconds. Default 5000.\n *\n * ⚠ **This bounds how long the RUNNER WAITS, not how long the CAS works.**\n * The peer's `simplify` is synchronous inside its promise, so nothing here\n * can interrupt it; a timeout reports that no answer arrived in time and the\n * underlying work may still be running. Saying otherwise would be the\n * \"a running process is not a working one\" error in reverse.\n */\n readonly budgetMs?: number;\n}\n\nconst DEFAULT_BUDGET_MS = 5000;\n\n/**\n * What the numeric probe concluded: its own kind, never the CAS status.\n *\n * - `'numeric-refuted'`: some seeded point gives |lhs − rhs|/(|lhs| + |rhs|)\n * above {@link NUMERIC_PROBE_TOLERANCE}.\n * - `'numeric-agrees'`: every point is within it. Agreement at finitely\n * many points is not a proof, so this never lights an evidence tag.\n * - `'numeric-not-run'`: a side could not be evaluated to a finite number.\n *\n * @internal\n */\nexport type NumericProbeKind = 'numeric-refuted' | 'numeric-agrees' | 'numeric-not-run';\n\n/** The numeric probe's record. @internal */\nexport interface NumericProbe {\n readonly kind: NumericProbeKind;\n /** Points evaluated; 0 when not run. */\n readonly points: number;\n /** max |lhs − rhs|/(|lhs| + |rhs|) over the points; absent when not run. */\n readonly worst?: number;\n readonly detail: string;\n}\n\n/** Seeded points per probe. @internal */\nexport const NUMERIC_PROBE_POINTS = 8;\n/** The relative difference above which a point refutes. @internal */\nexport const NUMERIC_PROBE_TOLERANCE = 1e-12;\n\n/** A leaf that evaluates on its own (π, a registered constant, a literal) is a constant, not a free symbol. */\nfunction evaluatesAlone(name: string): boolean {\n try {\n return Number.isFinite(evalExpr(sym(name, DIMENSIONLESS)));\n } catch {\n return false;\n }\n}\n\n/** MathTS `random(lo, hi)`, read back as the number it is. */\nfunction seededPoint(lo: number, hi: number): number {\n const v: unknown = random(lo, hi);\n if (typeof v !== 'number') throw new TypeError('random did not return a number');\n return v;\n}\n\n/**\n * Evaluate a symbolic witness's two sides at `points` seeded random points,\n * every free symbol drawn from [0.5, 2) by MathTS `random` after\n * `seedProbabilityRng(spec.id)`, so a re-run sees the same points. The free\n * symbols are the scalar leaves (`scalarSymbolsFromMathTs`) that do not\n * evaluate on their own. Never throws.\n *\n * @internal\n */\nexport function probeSymbolicWitness(spec: SymbolicWitnessSpec, points: number = NUMERIC_PROBE_POINTS): NumericProbe {\n const notRun = (why: string): NumericProbe => ({ kind: 'numeric-not-run', points: 0, detail: `The numeric probe did not run: ${why}.` });\n try {\n const names = new Set<string>();\n for (const leaf of [...scalarSymbolsFromMathTs(spec.lhs), ...scalarSymbolsFromMathTs(spec.rhs)]) names.add(leaf.name);\n const free = [...names].filter((name) => !evaluatesAlone(name)).sort();\n seedProbabilityRng(spec.id);\n let worst = 0;\n for (let i = 0; i < points; i++) {\n const values: Record<string, number> = {};\n for (const name of free) values[name] = seededPoint(0.5, 2);\n const lhs = evalExpr(spec.lhs, values);\n const rhs = evalExpr(spec.rhs, values);\n if (!Number.isFinite(lhs) || !Number.isFinite(rhs)) {\n return notRun(`a non-finite value (lhs ${lhs}, rhs ${rhs}) at point ${i + 1}`);\n }\n const scale = Math.abs(lhs) + Math.abs(rhs);\n worst = Math.max(worst, scale === 0 ? 0 : Math.abs(lhs - rhs) / scale);\n }\n if (worst > NUMERIC_PROBE_TOLERANCE) {\n return {\n kind: 'numeric-refuted',\n points,\n worst,\n detail: `lhs and rhs differ at a seeded point: max |lhs − rhs|/(|lhs| + |rhs|) = ${worst} over ${points} points, above ${NUMERIC_PROBE_TOLERANCE}.`,\n };\n }\n return {\n kind: 'numeric-agrees',\n points,\n worst,\n detail: `lhs and rhs agree at ${points} seeded points: max |lhs − rhs|/(|lhs| + |rhs|) = ${worst}. Agreement at points is not a proof.`,\n };\n } catch (err) {\n return notRun(`the evaluator threw: ${String(err)}`);\n }\n}\n\n/** A symbolic run: the CAS status, and the numeric probe beside it. @internal */\nexport interface SymbolicWitnessRunResult extends WitnessRunResult {\n readonly kind: 'symbolic';\n readonly numericProbe: NumericProbe;\n}\n\n/**\n * The CAS outcomes and the numeric outcomes of symbolic runs, as two separate\n * tallies. They are never added together.\n *\n * @internal\n */\nexport function tallySymbolicResults(results: readonly SymbolicWitnessRunResult[]): {\n readonly cas: { readonly checked: number; readonly refuted: number; readonly unresolved: number };\n readonly numeric: { readonly agrees: number; readonly refuted: number; readonly notRun: number };\n} {\n const cas = { checked: 0, refuted: 0, unresolved: 0 };\n const numeric = { agrees: 0, refuted: 0, notRun: 0 };\n for (const r of results) {\n cas[r.status] += 1;\n if (r.numericProbe.kind === 'numeric-agrees') numeric.agrees += 1;\n else if (r.numericProbe.kind === 'numeric-refuted') numeric.refuted += 1;\n else numeric.notRun += 1;\n }\n return { cas, numeric };\n}\n\n/** The finite value of a decimal-literal leaf (the one rule, `dimensional/ast-leaves.ts`), or `null`. */\nfunction literalValue(node: ExprNode): number | null {\n const v = leafLiteral(node);\n return v !== undefined && Number.isFinite(v) ? v : null;\n}\n\n/** A sentinel the timeout race resolves with; never confusable with a result. */\nconst TIMED_OUT = Symbol('timed-out');\n\n/**\n * Run one symbolic witness.\n *\n * @param spec - the claim, as two ASTs whose difference should vanish.\n * @param simplifier - the CAS capability, or `null` when the optional peer is\n * absent. When omitted, resolves to `simplifyExpr` if the peer is available and\n * to `null` otherwise. Pass `null` EXPLICITLY to exercise the absent path.\n * @returns a result carrying the CAS status and, beside it, the numeric\n * probe; **never throws**, because a thrown error forces callers into a\n * `catch` that cannot distinguish \"did not run\" from \"failed\".\n * @internal\n */\nexport async function runSymbolicWitness(\n spec: SymbolicWitnessSpec,\n simplifier?: SymbolicSimplifier | null,\n): Promise<SymbolicWitnessRunResult> {\n const started = Date.now();\n if (simplifier === undefined) {\n simplifier = (await isSimplifierAvailable()) ? simplifyExpr : null;\n }\n // The probe is independent of the CAS: it runs on every path, and decides nothing below.\n const base = { witnessId: spec.id, kind: 'symbolic' as const, numericProbe: probeSymbolicWitness(spec) };\n const elapsed = (): number => Date.now() - started;\n\n if (simplifier === null) {\n return {\n ...base,\n status: 'unresolved',\n reason: 'peer-absent',\n detail:\n 'The optional CAS peer is absent, so the claim was never examined. This is ' +\n 'not evidence against it.',\n elapsedMs: elapsed(),\n };\n }\n\n const difference: ExprNode = { kind: 'op', op: '-', args: [spec.lhs, spec.rhs] };\n const budget = spec.budgetMs ?? DEFAULT_BUDGET_MS;\n\n let outcome: Awaited<ReturnType<SymbolicSimplifier>> | typeof TIMED_OUT;\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n outcome = await Promise.race([\n simplifier(difference),\n new Promise<typeof TIMED_OUT>((resolve) => {\n timer = setTimeout(() => resolve(TIMED_OUT), budget);\n }),\n ]);\n } catch (err) {\n return {\n ...base,\n status: 'unresolved',\n reason: 'parse-error',\n detail:\n `The simplifier threw rather than answering: ${String(err)}. A throw is not a ` +\n 'refutation.',\n elapsedMs: elapsed(),\n };\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n }\n\n if (outcome === TIMED_OUT) {\n return {\n ...base,\n status: 'unresolved',\n reason: 'timeout',\n detail:\n `No answer arrived within ${budget} ms. The budget bounds the WAIT, not the ` +\n 'CAS: the underlying simplification may still be running.',\n elapsedMs: elapsed(),\n };\n }\n\n const value = literalValue(outcome.expr);\n if (value === 0) {\n return {\n ...base,\n status: 'checked',\n detail: 'lhs − rhs simplified to literal 0.',\n elapsedMs: elapsed(),\n };\n }\n if (value !== null) {\n return {\n ...base,\n status: 'refuted',\n detail: `lhs − rhs simplified to the non-zero constant ${value}.`,\n elapsedMs: elapsed(),\n };\n }\n return {\n ...base,\n status: 'unresolved',\n reason: 'not-simplified',\n detail:\n 'The difference did not reduce to a constant. The claim may still hold; this ' +\n 'simplifier could not show it.',\n elapsedMs: elapsed(),\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"quantum-support.js","sourceRoot":"","sources":["../../../src/atlas/witnesses/quantum-support.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iCAAiC,CAAC,CAAS,EAAE,KAAa,EAAE,IAAI,GAAG,CAAC;IAClF,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAYD;;;;;;;;GAQG;AACH,MAAM,UAAU,kCAAkC,CAChD,IAAY,EACZ,CAAS;IAET,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;AAClF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,CAAS,EACT,GAAW,EACX,CAAS,EACT,IAAY,EACZ,CAAS;IAET,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"quantum-support.js","sourceRoot":"","sources":["../../../src/atlas/witnesses/quantum-support.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iCAAiC,CAAC,CAAS,EAAE,KAAa,EAAE,IAAI,GAAG,CAAC;IAClF,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAYD;;;;;;;;GAQG;AACH,MAAM,UAAU,kCAAkC,CAChD,IAAY,EACZ,CAAS;IAET,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;AAClF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,CAAS,EACT,GAAW,EACX,CAAS,EACT,IAAY,EACZ,CAAS;IAET,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC","sourcesContent":["/**\n * Quantum-side support functions for Phase 3's `deformation-quantization` and\n * `analytic-continuation` bridges. Phase 0 records NO quantum bridge: these\n * are the two closed forms the later bridges will need, landed early so their\n * witnesses (W4, W5) exist before the records that cite them.\n *\n * @module atlas/witnesses/quantum-support\n */\n\n/**\n * Uncertainty product σx σp of the chirped Gaussian\n * `ψ(x) = N exp(−x²/4s² + i α x²)`.\n *\n * Writing `ψ ~ exp(−A x²)` with `A = 1/(4 s²) − i α` gives `σx = s` and\n * `σp = (ħ/2s) √(1 + 16 α² s⁴)`, so the product is\n * `(ħ/2) √(1 + 16 α² s⁴)`. The chirp raises the product above the\n * Heisenberg floor without changing the position spread; at `α = 0` it is\n * exactly `ħ/2`.\n *\n * @internal\n */\nexport function chirpedGaussianUncertaintyProduct(s: number, alpha: number, hbar = 1): number {\n return (hbar / 2) * Math.sqrt(1 + 16 * alpha * alpha * s * s * s * s);\n}\n\n/** Coefficients of the Wick-rotated Schrödinger equation. @internal */\nexport interface WickRotatedCoefficients {\n /** Coefficient of ∇²φ: ħ/(2m). */\n readonly diffusion: number;\n /** Sign of the potential (reaction) term: −1. */\n readonly reactionSign: number;\n /** Magnitude scale of the potential term: 1/ħ. */\n readonly reactionScale: number;\n}\n\n/**\n * Wick rotation `t = −i τ` turns `i ħ ∂_t ψ = −(ħ²/2m) ∇²ψ + V ψ` into the\n * reaction–diffusion equation `∂_τ φ = (ħ/2m) ∇²φ − V φ / ħ`.\n *\n * The returned coefficients are that equation's: diffusivity `ħ/(2m)`, and a\n * reaction term of sign `−1` and scale `1/ħ`.\n *\n * @internal\n */\nexport function wickRotatedSchrodingerCoefficients(\n hbar: number,\n m: number,\n): WickRotatedCoefficients {\n return { diffusion: hbar / (2 * m), reactionSign: -1, reactionScale: 1 / hbar };\n}\n\n/**\n * Free-particle heat kernel of the Wick-rotated equation with `V = 0`:\n * `φ(x, τ) = (s²/σ(τ))^{1/2} exp(−x²/(4 σ(τ)))` with\n * `σ(τ) = s² + ħ τ / (2 m)`. Normalised so `φ(x, 0)` is the `α = 0` Gaussian\n * of {@link chirpedGaussianUncertaintyProduct} up to a constant.\n *\n * @internal\n */\nexport function wickRotatedFreeKernel(\n x: number,\n tau: number,\n s: number,\n hbar: number,\n m: number,\n): number {\n const sigma = s * s + (hbar * tau) / (2 * m);\n return Math.sqrt((s * s) / sigma) * Math.exp(-(x * x) / (4 * sigma));\n}\n"]}
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @module bridges/caller-table
7
7
  */
8
- import type { ConfrontationOutcome } from './observations/types.js';
8
+ import { type ConfrontationOutcome } from './observations/types.js';
9
9
  /** One row of a caller-supplied measured table. @public */
10
10
  export interface MeasuredCouplingRow {
11
11
  readonly scale: number;
@@ -1 +1 @@
1
- {"version":3,"file":"caller-table.d.ts","sourceRoot":"","sources":["../../src/bridges/caller-table.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAGpE,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,sFAAsF;AACtF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,EACf;QACE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;QACzD,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;KACzC,GACD,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAC3B,IAAI,CAAC;CACV;AAED,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,sFAAsF;AACtF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG,cAAc,CAAC;AA4CpE;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CA6CnG"}
1
+ {"version":3,"file":"caller-table.d.ts","sourceRoot":"","sources":["../../src/bridges/caller-table.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAErF,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,sFAAsF;AACtF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,EACf;QACE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;QACzD,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;KACzC,GACD,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAC3B,IAAI,CAAC;CACV;AAED,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,sFAAsF;AACtF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG,cAAc,CAAC;AA4CpE;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CA6CnG"}
@@ -1 +1 @@
1
- {"version":3,"file":"caller-table.js","sourceRoot":"","sources":["../../src/bridges/caller-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"caller-table.js","sourceRoot":"","sources":["../../src/bridges/caller-table.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * A confrontation that exists only when the caller supplies a measured table\n * and a running procedure. A refusal names the missing inputs and carries no\n * residual. It does not change a catalog status.\n *\n * @module bridges/caller-table\n */\n\nimport { residualInSigma, type ConfrontationOutcome } from './observations/types.js';\n\n/** One row of a caller-supplied measured table. @public */\nexport interface MeasuredCouplingRow {\n readonly scale: number;\n readonly value: number;\n readonly uncertainty: number;\n readonly citation: string;\n}\n\n/** What a running procedure must state before it can be compared. @public */\nexport interface RunningProcedureRecord {\n readonly loopOrder: string;\n readonly flavorThresholds: string;\n}\n\n/** A caller-supplied running procedure. @public */\nexport interface RunningProcedure {\n readonly record: RunningProcedureRecord;\n at(scale: number): number;\n}\n\n/** What a caller may pass. Absent fields are missing inputs, not defaults. @public */\nexport interface CallerTableRequest {\n readonly table?: readonly MeasuredCouplingRow[] | null;\n readonly procedure?:\n | {\n readonly record?: Partial<RunningProcedureRecord> | null;\n readonly at?: (scale: number) => number;\n }\n | ((scale: number) => number)\n | null;\n}\n\n/** Refusal: the named inputs are missing, and no residual was computed. @public */\nexport interface CallerTableRefusal {\n readonly status: 'refused';\n readonly missing: readonly string[];\n}\n\n/** A comparison that uses a value outcome. @public */\nexport interface CallerTableHit {\n readonly status: 'confronted';\n readonly outcome: Extract<ConfrontationOutcome, { kind: 'value' }>;\n}\n\n/** A caller-table confrontation either refuses or reports a value outcome. @public */\nexport type CallerTableResult = CallerTableRefusal | CallerTableHit;\n\nfunction blank(value: string | undefined): boolean {\n return value === undefined || value.trim() === '';\n}\n\nfunction finite(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction missingInputs(request: CallerTableRequest): string[] {\n const missing: string[] = [];\n if (request.table == null || request.table.length === 0) missing.push('table');\n const procedure = request.procedure;\n if (procedure == null) {\n missing.push('running procedure');\n return missing;\n }\n if (typeof procedure === 'function') {\n missing.push('loop order', 'flavor thresholds');\n return missing;\n }\n const record = procedure.record;\n if (blank(record?.loopOrder)) missing.push('loop order');\n if (blank(record?.flavorThresholds)) missing.push('flavor thresholds');\n if (typeof procedure.at !== 'function') missing.push('running procedure');\n return missing;\n}\n\nfunction rowProblems(table: readonly MeasuredCouplingRow[]): string[] {\n const missing: string[] = [];\n for (const row of table) {\n if (!finite(row.scale) && !missing.includes('scale')) missing.push('scale');\n if (!finite(row.value) && !missing.includes('value')) missing.push('value');\n if (!(finite(row.uncertainty) && row.uncertainty > 0) && !missing.includes('uncertainty')) {\n missing.push('uncertainty');\n }\n if ((typeof row.citation !== 'string' || row.citation.trim() === '') && !missing.includes('citation')) {\n missing.push('citation');\n }\n }\n return missing;\n}\n\n/**\n * Confront a caller-supplied table. Otherwise refuse. The refusal does not\n * read or write the catalog. Several rows collapse to the row with the\n * largest absolute residual in units of its uncertainty.\n *\n * @public\n */\nexport function requestCallerTableConfrontation(request: CallerTableRequest = {}): CallerTableResult {\n const missing = missingInputs(request);\n if (missing.length > 0) return { status: 'refused', missing };\n const table = request.table ?? [];\n const rowMissing = rowProblems(table);\n if (rowMissing.length > 0) return { status: 'refused', missing: rowMissing };\n\n const procedure = request.procedure as RunningProcedure;\n let reported: { predicted: number; observed: number; sigma: number; citation: string; residual: number } | undefined;\n for (const row of table) {\n const predicted = procedure.at(row.scale);\n if (!finite(predicted)) return { status: 'refused', missing: ['procedure output'] };\n const residual = residualInSigma(predicted, row.value, row.uncertainty);\n if (reported === undefined || residual > reported.residual) {\n reported = {\n predicted,\n observed: row.value,\n sigma: row.uncertainty,\n citation: row.citation,\n residual,\n };\n }\n }\n if (reported === undefined) return { status: 'refused', missing: ['table'] };\n\n return {\n status: 'confronted',\n outcome: {\n kind: 'value',\n predicted: reported.predicted,\n observed: reported.observed,\n sigma: reported.sigma,\n residualInSigma: reported.residual,\n withinObserved: reported.residual <= 1,\n units: 'caller-supplied',\n provenance: {\n citation: reported.citation,\n year: 0,\n retrieved: 'not supplied',\n note: 'The caller table states a citation and does not state a publication year or a retrieval date. The year 0 is not a year of record.',\n },\n preprocessing: { state: 'not-recorded' },\n independence: { state: 'not-recorded' },\n },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"carrier-sign.d.ts","sourceRoot":"","sources":["../../src/bridges/carrier-sign.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAmBD;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAOD,4EAA4E;AAC5E,UAAU,eAAe;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,EACjD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACxC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,IAAI,CAAC,EAAE,eAAe,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsCxB"}
1
+ {"version":3,"file":"carrier-sign.d.ts","sourceRoot":"","sources":["../../src/bridges/carrier-sign.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAsBD;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAOD,4EAA4E;AAC5E,UAAU,eAAe;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,EACjD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACxC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,IAAI,CAAC,EAAE,eAAe,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsCxB"}
@@ -26,11 +26,16 @@ function sameCarrierSign(a, b) {
26
26
  }
27
27
  /**
28
28
  * Reject opposite signs. `left` and `right` are the names in the message.
29
- * Only {@link applyCarrierSignPolicy} calls this.
29
+ * A value that is not a finite number has no sign to compare, so it is
30
+ * refused as such rather than passed. Only {@link applyCarrierSignPolicy}
31
+ * calls this.
30
32
  */
31
33
  function assertSameCarrierSign(a, b, left, right) {
32
- const opposite = Number.isFinite(a) && Number.isFinite(b) ? !sameCarrierSign(a, b) : a * b < 0;
33
- if (opposite)
34
+ if (!Number.isFinite(a))
35
+ throw new RangeError(`${left} must be a finite number to carry a sign, got ${a}`);
36
+ if (!Number.isFinite(b))
37
+ throw new RangeError(`${right} must be a finite number to carry a sign, got ${b}`);
38
+ if (!sameCarrierSign(a, b))
34
39
  throw new CarrierSignError(`${left} and ${right} must have the same sign`);
35
40
  }
36
41
  /** How many times the sign policy has run since the last reset. The once-check reads this. */
@@ -1 +1 @@
1
- {"version":3,"file":"carrier-sign.js","sourceRoot":"","sources":["../../src/bridges/carrier-sign.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"carrier-sign.js","sourceRoot":"","sources":["../../src/bridges/carrier-sign.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,0EAA0E;AAC1E,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,KAAa;IAC9E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,iDAAiD,CAAC,EAAE,CAAC,CAAC;IAC3G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,GAAG,KAAK,iDAAiD,CAAC,EAAE,CAAC,CAAC;IAC5G,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,GAAG,IAAI,QAAQ,KAAK,0BAA0B,CAAC,CAAC;AACzG,CAAC;AAED,8FAA8F;AAC9F,IAAI,sBAAsB,GAAG,CAAC,CAAC;AAE/B;;;GAGG;AACH,MAAM,UAAU,2BAA2B;IACzC,sBAAsB,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,gFAAgF;AAChF,SAAS,kBAAkB,CAAC,GAAW;IACrC,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAiD,EACjD,MAAwC,EACxC,IAAyB,EACzB,IAAsB;IAEtB,sBAAsB,IAAI,CAAC,CAAC;IAC5B,IAAI,IAAwB,CAAC;IAC7B,IAAI,KAAyB,CAAC;IAC9B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QACd,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QACf,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;SAAM,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC3C,IACE,IAAI,KAAK,SAAS;YAClB,KAAK,KAAK,SAAS;YACnB,kBAAkB,CAAC,IAAI,CAAC;YACxB,kBAAkB,CAAC,KAAK,CAAC,EACzB,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;YACrB,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACnC,QAAQ,GAAG,QAAQ,CAAC;YACpB,SAAS,GAAG,kBAAkB,CAAC;QACjC,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrF,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,GAAuC,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAAE,SAAS;QACvE,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,IAAI,MAAM,CAAC;AACvB,CAAC","sourcesContent":["/**\n * One sign rule for a positive transport coefficient built from a carrier\n * charge and a mobility.\n *\n * `D = μ k_B T / q` and `σ = n q μ` are positive when μ and q have the same\n * sign, and zero when either is zero. Opposite signs are not a negative\n * diffusivity or a negative conductivity. A Hall coefficient and a cyclotron\n * frequency are odd in charge alone; this rule does not apply to them.\n *\n * @module bridges/carrier-sign\n */\n\n/**\n * Thrown when a positive transport coefficient would come out negative\n * because the carrier charge and the mobility have opposite signs.\n * @public\n */\nexport class CarrierSignError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CarrierSignError';\n }\n}\n\n/** True when the product is positive or zero, including a zero factor. */\nfunction sameCarrierSign(a: number, b: number): boolean {\n return a * b >= 0;\n}\n\n/**\n * Reject opposite signs. `left` and `right` are the names in the message.\n * A value that is not a finite number has no sign to compare, so it is\n * refused as such rather than passed. Only {@link applyCarrierSignPolicy}\n * calls this.\n */\nfunction assertSameCarrierSign(a: number, b: number, left: string, right: string): void {\n if (!Number.isFinite(a)) throw new RangeError(`${left} must be a finite number to carry a sign, got ${a}`);\n if (!Number.isFinite(b)) throw new RangeError(`${right} must be a finite number to carry a sign, got ${b}`);\n if (!sameCarrierSign(a, b)) throw new CarrierSignError(`${left} and ${right} must have the same sign`);\n}\n\n/** How many times the sign policy has run since the last reset. The once-check reads this. */\nlet carrierSignPolicyCalls = 0;\n\n/**\n * Reset the sign-policy call count. The once-check reads the count after this.\n * @internal\n */\nexport function resetCarrierSignPolicyCalls(): void {\n carrierSignPolicyCalls = 0;\n}\n\n/**\n * How many times the sign policy has run since the last reset.\n * @internal\n */\nexport function readCarrierSignPolicyCalls(): number {\n return carrierSignPolicyCalls;\n}\n\n/** An integer exponent whose absolute value is odd. A half power is not odd. */\nfunction oddIntegerExponent(exp: number): boolean {\n return Number.isInteger(exp) && Math.abs(exp) % 2 === 1;\n}\n\n/** A same-sign pair whose names are not `charge` and `carrier-mobility`. */\ninterface CarrierSignPair {\n readonly a: number;\n readonly b: number;\n readonly left: string;\n readonly right: string;\n}\n\n/**\n * One sign policy. A monomial odd in both `charge` and `carrier-mobility`\n * rejects opposite signs. `pair` is that same check for a formula whose\n * names are not those two (the Einstein relation). Inputs the scalar AST\n * is even in are replaced by their absolute values. The math underneath\n * does not apply this again.\n * @internal\n */\nexport function applyCarrierSignPolicy(\n monomial: Readonly<Record<string, number>> | null,\n inputs: Readonly<Record<string, number>>,\n even: ReadonlySet<string>,\n pair?: CarrierSignPair,\n): Record<string, number> {\n carrierSignPolicyCalls += 1;\n let left: number | undefined;\n let right: number | undefined;\n let leftName = '';\n let rightName = '';\n if (pair !== undefined) {\n left = pair.a;\n right = pair.b;\n leftName = pair.left;\n rightName = pair.right;\n } else if (monomial !== null) {\n const qExp = monomial.charge;\n const muExp = monomial['carrier-mobility'];\n if (\n qExp !== undefined &&\n muExp !== undefined &&\n oddIntegerExponent(qExp) &&\n oddIntegerExponent(muExp)\n ) {\n left = inputs.charge;\n right = inputs['carrier-mobility'];\n leftName = 'charge';\n rightName = 'carrier-mobility';\n }\n }\n if (left !== undefined && right !== undefined && leftName !== '' && rightName !== '') {\n assertSameCarrierSign(left, right, leftName, rightName);\n }\n if (even.size === 0) return inputs;\n let out: Record<string, number> | undefined;\n for (const name of even) {\n const value = inputs[name];\n if (value === undefined || Object.is(value, Math.abs(value))) continue;\n out ??= { ...inputs };\n out[name] = Math.abs(value);\n }\n return out ?? inputs;\n}\n"]}
@@ -1,8 +1,12 @@
1
1
  /**
2
- * Catalog adapter: ingests the 44-entry `BRIDGE_EQUATIONS` array into
3
- * the v0.7-p2 sparse semantic catalog as `BridgeCell` values.
2
+ * Catalog adapter: ingests `BRIDGE_EQUATIONS` into the v0.7-p2 sparse
3
+ * semantic catalog as `BridgeCell` values.
4
4
  *
5
- * Phase 3 of v0.7 Proposal 2 (Sparse Semantic Catalog).
5
+ * A cell needs a `PhysicalScale` on at least one end, and the catalog's
6
+ * `bridges` tuple names a scale on only part of the rows (the rest name a
7
+ * field such as `chemistry` or `plasma`). The adapter submits the rows it
8
+ * can place and lists every other row in `unsubmitted`, with the reason in
9
+ * `skipped`; it never guesses a scale. Phase 3 of v0.7 Proposal 2.
6
10
  *
7
11
  * Two entry points:
8
12
  *
@@ -64,6 +68,11 @@ export interface CatalogIngestionReport {
64
68
  readonly info: ReadonlyArray<FluxDiagnostic>;
65
69
  /** Bridge IDs the adapter filtered out before submission. */
66
70
  readonly unsubmitted: ReadonlyArray<number>;
71
+ /** Why each unsubmitted id was not placed: the tuple labels that name no `PhysicalScale`. */
72
+ readonly skipped: ReadonlyArray<{
73
+ readonly bridgeId: number;
74
+ readonly reason: string;
75
+ }>;
67
76
  /** Cells that PASSED Rule 1 and would be submitted (or were). */
68
77
  readonly submitted: ReadonlyArray<BridgeCell>;
69
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-adapter.d.ts","sourceRoot":"","sources":["../../src/bridges/catalog-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACX,MAAM,uBAAuB,CAAC;AAU/B;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC/C;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAgB,MAAM,EAAE,sBAAsB,CAAC;IAE/C,YAAY,MAAM,EAAE,sBAAsB,EAQzC;CACF;AAuDD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,aAAa,CAAC,mBAAmB,CAAC,GAC1C,aAAa,CAAC,UAAU,CAAC,CAO3B;AA+GD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,CAAC,mBAAmB,CAAC,GAC1C,sBAAsB,CAuCxB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,aAAa,CAAC,mBAAmB,CAAC,GAC1C,sBAAsB,CASxB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,sBAAsB,GAC7B,UAAU,CAYZ"}
1
+ {"version":3,"file":"catalog-adapter.d.ts","sourceRoot":"","sources":["../../src/bridges/catalog-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACX,MAAM,uBAAuB,CAAC;AAU/B;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxF,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC/C;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAgB,MAAM,EAAE,sBAAsB,CAAC;IAE/C,YAAY,MAAM,EAAE,sBAAsB,EAQzC;CACF;AAoDD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,aAAa,CAAC,mBAAmB,CAAC,GAC1C,aAAa,CAAC,UAAU,CAAC,CAO3B;AA+GD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,CAAC,mBAAmB,CAAC,GAC1C,sBAAsB,CA8CxB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,aAAa,CAAC,mBAAmB,CAAC,GAC1C,sBAAsB,CASxB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,sBAAsB,GAC7B,UAAU,CAYZ"}
@@ -1,8 +1,12 @@
1
1
  /**
2
- * Catalog adapter: ingests the 44-entry `BRIDGE_EQUATIONS` array into
3
- * the v0.7-p2 sparse semantic catalog as `BridgeCell` values.
2
+ * Catalog adapter: ingests `BRIDGE_EQUATIONS` into the v0.7-p2 sparse
3
+ * semantic catalog as `BridgeCell` values.
4
4
  *
5
- * Phase 3 of v0.7 Proposal 2 (Sparse Semantic Catalog).
5
+ * A cell needs a `PhysicalScale` on at least one end, and the catalog's
6
+ * `bridges` tuple names a scale on only part of the rows (the rest name a
7
+ * field such as `chemistry` or `plasma`). The adapter submits the rows it
8
+ * can place and lists every other row in `unsubmitted`, with the reason in
9
+ * `skipped`; it never guesses a scale. Phase 3 of v0.7 Proposal 2.
6
10
  *
7
11
  * Two entry points:
8
12
  *
@@ -64,11 +68,8 @@ function statusToCellConfidence(status) {
64
68
  case 'speculative': return 'speculative';
65
69
  case 'highly-speculative': return 'highly-speculative';
66
70
  case 'invalid':
67
- // 'invalid' catalog entries should not become cells; the
68
- // adapter callers filter on isActiveStatus first. If we ever
69
- // reach here, downgrade to 'highly-speculative' (safest).
70
- return 'highly-speculative';
71
- default:
71
+ // An invalid row is not a claim; the catalog carries none (the status
72
+ // distribution test pins 0). A cell built from one is the weakest grade.
72
73
  return 'highly-speculative';
73
74
  }
74
75
  }
@@ -223,13 +224,19 @@ export function scanCatalog(entries) {
223
224
  const warnings = [];
224
225
  const info = [];
225
226
  const unsubmitted = [];
227
+ const skipped = [];
226
228
  const submitted = [];
227
229
  for (const entry of entries) {
228
230
  const diagnostic = checkDimensionalConsistency(entry);
229
231
  const cell = entryToBridgeCell(entry);
230
232
  const submittable = cell !== null;
231
- if (!submittable)
233
+ if (!submittable) {
232
234
  unsubmitted.push(entry.id);
235
+ skipped.push({
236
+ bridgeId: entry.id,
237
+ reason: `bridges tuple [${entry.bridges.join(', ')}] names no PhysicalScale (quantum, mesoscopic, classical, cosmological) on either end`,
238
+ });
239
+ }
233
240
  else
234
241
  submitted.push(cell);
235
242
  if (diagnostic) {
@@ -258,6 +265,7 @@ export function scanCatalog(entries) {
258
265
  warnings,
259
266
  info,
260
267
  unsubmitted,
268
+ skipped,
261
269
  submitted,
262
270
  };
263
271
  }
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-adapter.js","sourceRoot":"","sources":["../../src/bridges/catalog-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog-adapter.js","sourceRoot":"","sources":["../../src/bridges/catalog-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Catalog adapter: ingests `BRIDGE_EQUATIONS` into the v0.7-p2 sparse\n * semantic catalog as `BridgeCell` values.\n *\n * A cell needs a `PhysicalScale` on at least one end, and the catalog's\n * `bridges` tuple names a scale on only part of the rows (the rest name a\n * field such as `chemistry` or `plasma`). The adapter submits the rows it\n * can place and lists every other row in `unsubmitted`, with the reason in\n * `skipped`; it never guesses a scale. Phase 3 of v0.7 Proposal 2.\n *\n * Two entry points:\n *\n * `catalogToCells(entries)` — pure mapping `BridgeEquationEntry[]\n * → BridgeCell[]`. Filters out entries that would fail the\n * legacy `addBridge` validation (e.g. `bridges: ['unknown',\n * 'unknown']` collapses to identical empty `source`/`target`).\n *\n * `scanCatalog(entries)` — best-effort variant: builds candidates,\n * runs Rule 1 (dimensional consistency), returns a\n * `CatalogIngestionReport` without throwing. Caller decides\n * what to do with the diagnostics.\n *\n * `ingestCatalog(tensor, entries)` — strict variant: two-pass\n * collect-then-commit (Decision #11). If Rule 1 reports any\n * errors, throws `CatalogIngestionError(report)` and the\n * tensor is untouched. Otherwise calls `tensor.addCell` for\n * each candidate.\n *\n * Rule 1 (Dimensional Consistency) operates on\n * `BridgeEquationEntry`, NOT on `Cell` (Decision #3, resolves\n * Adam-V3). It reads `entry.dimensional_signature` directly.\n *\n * @module bridges/catalog-adapter\n */\n\nimport type {\n BridgeEquationEntry,\n BridgeEquationStatus,\n} from './index.js';\nimport type { BridgeCell, CellConfidence } from '../core/cell.js';\nimport type { UniversalTensor } from '../core/tensor.js';\nimport type {\n FluxDiagnostic,\n FluxReport,\n} from '../core/flux-rules.js';\nimport { EXPECTED_DIMENSION_BY_BRIDGE } from '../dimensional/bridge-check.js';\nimport { catalogEntries } from './catalog-load.js';\nimport { format } from '../dimensional/algebra.js';\nimport type { PhysicalScale, TensorIndices } from '../core/types.js';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\n/**\n * Per-entry summary of the catalog ingestion attempt.\n *\n * @public\n */\nexport interface CatalogEntryStatus {\n readonly bridgeId: number;\n readonly name: string;\n /** True iff the entry would be (or was) submitted to `addCell`. */\n readonly submitted: boolean;\n /**\n * Diagnostics from Rule 1 (dimensional consistency) for this entry.\n * `undefined` means the entry passed Rule 1 cleanly.\n */\n readonly diagnostic?: FluxDiagnostic;\n}\n\n/**\n * Aggregate report returned by `scanCatalog` / `ingestCatalog`. The\n * diagnostics surface Rule 1 results; `unsubmitted` lists entries\n * that the adapter filtered out before submission (typically\n * `'unknown' → 'unknown'` bridges that would fail the legacy\n * `addBridge` source !== target check).\n *\n * @public\n */\nexport interface CatalogIngestionReport {\n readonly entries: ReadonlyArray<CatalogEntryStatus>;\n readonly errors: ReadonlyArray<FluxDiagnostic>;\n readonly warnings: ReadonlyArray<FluxDiagnostic>;\n readonly info: ReadonlyArray<FluxDiagnostic>;\n /** Bridge IDs the adapter filtered out before submission. */\n readonly unsubmitted: ReadonlyArray<number>;\n /** Why each unsubmitted id was not placed: the tuple labels that name no `PhysicalScale`. */\n readonly skipped: ReadonlyArray<{ readonly bridgeId: number; readonly reason: string }>;\n /** Cells that PASSED Rule 1 and would be submitted (or were). */\n readonly submitted: ReadonlyArray<BridgeCell>;\n}\n\n/**\n * Thrown by `ingestCatalog` when Rule 1 reports any errors. The\n * caller can inspect `report` for per-entry diagnostics.\n *\n * @public\n */\nexport class CatalogIngestionError extends Error {\n public readonly report: CatalogIngestionReport;\n\n constructor(report: CatalogIngestionReport) {\n super(\n `CatalogIngestionError: ${report.errors.length} dimensional-consistency ` +\n `error(s) in ${report.entries.length} catalog entries. ` +\n `First error: ${report.errors[0]?.message ?? '(none)'}`,\n );\n this.name = 'CatalogIngestionError';\n this.report = report;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Internal: confidence + scale mapping\n// ---------------------------------------------------------------------------\n\n/**\n * Map the catalog's `BridgeEquationStatus` string vocabulary onto\n * the `CellConfidence` vocabulary used by `BridgeCell`. The two\n * vocabularies are nearly aligned — only the `'invalid'` arm differs\n * (catalog allows it; CellConfidence excludes it per the design).\n *\n * @internal\n */\nfunction statusToCellConfidence(status: BridgeEquationStatus): CellConfidence {\n switch (status) {\n case 'established': return 'established';\n case 'speculative': return 'speculative';\n case 'highly-speculative': return 'highly-speculative';\n case 'invalid':\n // An invalid row is not a claim; the catalog carries none (the status\n // distribution test pins 0). A cell built from one is the weakest grade.\n return 'highly-speculative';\n }\n}\n\n/**\n * Translate a free-form catalog `bridges` axis label (e.g.\n * `'classical'`, `'quantum'`, `'unknown'`) to a `PhysicalScale`\n * value or `undefined`. The four-element `PhysicalScale` union is\n * exhaustive; anything else (including the `'unknown'` sentinel)\n * maps to `undefined` — making `source`/`target` an empty\n * `TensorIndices` whose serialized key is `''`.\n *\n * @internal\n */\nfunction labelToScale(label: string): PhysicalScale | undefined {\n switch (label) {\n case 'quantum':\n case 'mesoscopic':\n case 'classical':\n case 'cosmological':\n return label;\n default:\n return undefined;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mapping: BridgeEquationEntry → BridgeCell\n// ---------------------------------------------------------------------------\n\n/**\n * Pure mapper from `BridgeEquationEntry` (legacy catalog shape) to\n * `BridgeCell` (v0.7 typed Cell variant). Filters out entries whose\n * `bridges: [from, to]` collapses to an identical source/target\n * (typically `['unknown', 'unknown']`) — those would fail the\n * legacy `addBridge` validation. The filtering decision is surfaced\n * via the `unsubmitted` array in `CatalogIngestionReport`.\n *\n * @public\n */\nexport function catalogToCells(\n entries: ReadonlyArray<BridgeEquationEntry>,\n): ReadonlyArray<BridgeCell> {\n const out: BridgeCell[] = [];\n for (const entry of entries) {\n const cell = entryToBridgeCell(entry);\n if (cell !== null) out.push(cell);\n }\n return out;\n}\n\n/**\n * Internal: build a `BridgeCell` from a single entry, returning\n * `null` if the entry is filterable (identical source/target after\n * label translation).\n *\n * @internal\n */\nfunction entryToBridgeCell(entry: BridgeEquationEntry): BridgeCell | null {\n const [fromLabel, toLabel] = entry.bridges;\n const fromScale = labelToScale(fromLabel);\n const toScale = labelToScale(toLabel);\n const source: TensorIndices = fromScale ? { scale: fromScale } : {};\n const target: TensorIndices = toScale ? { scale: toScale } : {};\n\n // Filter out entries whose source and target are both empty (the\n // 'unknown' -> 'unknown' case at HEAD). Legacy `addBridge` rejects\n // them with a TypeError; the adapter surfaces them via\n // `unsubmitted`.\n if (\n source.scale === undefined &&\n target.scale === undefined\n ) {\n return null;\n }\n\n // Equation: use formula_latex if non-empty, else a placeholder.\n const equation = entry.formula_latex && entry.formula_latex.length > 0\n ? entry.formula_latex\n : `(no LaTeX provided for BE-${entry.id})`;\n\n return {\n kind: 'bridge',\n id: `BE-${entry.id}`,\n name: entry.name,\n equation,\n confidence: statusToCellConfidence(entry.status),\n source,\n target,\n validated: entry.status === 'established',\n description: entry.notes.length > 0 ? entry.notes.slice(0, 200) : entry.name,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Rule 1 — Dimensional Consistency (ERROR tier per Decision #3)\n// ---------------------------------------------------------------------------\n\n/**\n * Fires per-entry. Returns one of:\n * - undefined (no diagnostic): entry passes Rule 1.\n * - 'error' diagnostic: dimensional_signature is structurally null,\n * or non-null but does not match the expected dimension from\n * `EXPECTED_DIMENSION_BY_BRIDGE`.\n * - 'info' diagnostic: no expected entry for this bridge ID; the\n * message states how many catalog rows the table covers, counted\n * when it is printed. We can't enforce, but we record the gap.\n *\n * @internal\n */\nfunction checkDimensionalConsistency(\n entry: BridgeEquationEntry,\n): FluxDiagnostic | undefined {\n const cellId = `BE-${entry.id}`;\n // Structural null check (Eve-R1 lesson — at HEAD this fires zero\n // times; future catalog edits that introduce a null will surface\n // immediately).\n if (entry.dimensional_signature === null) {\n return {\n severity: 'error',\n ruleName: 'dimensional-consistency',\n cellId,\n message:\n `BE-${entry.id} ('${entry.name}') has dimensional_signature: ` +\n `null. Every active catalog entry must declare a structural ` +\n `dimensional signature.`,\n };\n }\n // Field-vs-expected comparison.\n const expected = EXPECTED_DIMENSION_BY_BRIDGE.get(entry.id);\n if (expected === undefined) {\n return {\n severity: 'info',\n ruleName: 'dimensional-consistency',\n cellId,\n message:\n `BE-${entry.id} ('${entry.name}') has no entry in ` +\n `EXPECTED_DIMENSION_BY_BRIDGE (${EXPECTED_DIMENSION_BY_BRIDGE.size} of ${catalogEntries().length} catalog rows covered); ` +\n `dimensional-consistency check skipped for this entry.`,\n };\n }\n const expectedFormatted = format(expected);\n if (entry.dimensional_signature !== expectedFormatted) {\n return {\n severity: 'error',\n ruleName: 'dimensional-consistency',\n cellId,\n message:\n `BE-${entry.id} ('${entry.name}') has dimensional_signature ` +\n `'${entry.dimensional_signature}' but EXPECTED_DIMENSION_BY_BRIDGE ` +\n `says '${expectedFormatted}'. Catalog and expectation disagree.`,\n };\n }\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Public entry points\n// ---------------------------------------------------------------------------\n\n/**\n * Best-effort catalog scan: builds candidates, runs Rule 1 per\n * entry, returns a `CatalogIngestionReport`. Does NOT mutate any\n * tensor and does NOT throw.\n *\n * @public\n */\nexport function scanCatalog(\n entries: ReadonlyArray<BridgeEquationEntry>,\n): CatalogIngestionReport {\n const statuses: CatalogEntryStatus[] = [];\n const errors: FluxDiagnostic[] = [];\n const warnings: FluxDiagnostic[] = [];\n const info: FluxDiagnostic[] = [];\n const unsubmitted: number[] = [];\n const skipped: { bridgeId: number; reason: string }[] = [];\n const submitted: BridgeCell[] = [];\n\n for (const entry of entries) {\n const diagnostic = checkDimensionalConsistency(entry);\n const cell = entryToBridgeCell(entry);\n const submittable = cell !== null;\n if (!submittable) {\n unsubmitted.push(entry.id);\n skipped.push({\n bridgeId: entry.id,\n reason: `bridges tuple [${entry.bridges.join(', ')}] names no PhysicalScale (quantum, mesoscopic, classical, cosmological) on either end`,\n });\n } else submitted.push(cell);\n\n if (diagnostic) {\n switch (diagnostic.severity) {\n case 'error': errors.push(diagnostic); break;\n case 'warning': warnings.push(diagnostic); break;\n case 'info': info.push(diagnostic); break;\n }\n }\n\n statuses.push({\n bridgeId: entry.id,\n name: entry.name,\n submitted: submittable,\n ...(diagnostic ? { diagnostic } : {}),\n });\n }\n\n return {\n entries: statuses,\n errors,\n warnings,\n info,\n unsubmitted,\n skipped,\n submitted,\n };\n}\n\n/**\n * Strict catalog ingestion: two-pass collect-then-commit per\n * Decision #11. If Rule 1 reports any errors, throws\n * `CatalogIngestionError(report)` and the tensor is untouched.\n * Otherwise calls `tensor.addCell` for each filterable candidate.\n *\n * @public\n */\nexport function ingestCatalog(\n tensor: UniversalTensor,\n entries: ReadonlyArray<BridgeEquationEntry>,\n): CatalogIngestionReport {\n const report = scanCatalog(entries);\n if (report.errors.length > 0) {\n throw new CatalogIngestionError(report);\n }\n for (const cell of report.submitted) {\n tensor.addCell(cell);\n }\n return report;\n}\n\n/**\n * Bridge-level FluxReport summary, derived from a\n * `CatalogIngestionReport`. Used by consumers that want the\n * flux-rule report shape rather than the catalog-specific report.\n *\n * @public\n */\nexport function ingestionReportToFluxReport(\n report: CatalogIngestionReport,\n): FluxReport {\n const diagnostics = [\n ...report.errors,\n ...report.warnings,\n ...report.info,\n ];\n return {\n diagnostics,\n errorCount: report.errors.length,\n warningCount: report.warnings.length,\n infoCount: report.info.length,\n };\n}\n"]}