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
@@ -13,6 +13,21 @@
13
13
  */
14
14
  import { CANONICAL_GROUP_PREFACTORS } from './canonical-prefactors.js';
15
15
  import { DomainViolationError } from '../bridges/evaluation-errors.js';
16
+ import { formulaNames, formulaScope } from '../bridges/expr-parse.js';
17
+ import { conditionDomain } from '../bridges/validity.js';
18
+ /**
19
+ * The validity domain a condition states, in the catalog's condition grammar
20
+ * (`v > 0 and abs(x) < 1`; `true` for none). The predicate, the description
21
+ * and the violations are all read from that one text. `names` lists the
22
+ * hyphenated quantity names the condition reads beyond the registered ones;
23
+ * registered constants are bound. `declared` lists the constant names the
24
+ * condition may take as inputs (a relation's own sources).
25
+ *
26
+ * @public
27
+ */
28
+ export function validityDomain(condition, names = [], declared = []) {
29
+ return conditionDomain(condition, () => [...formulaNames(), ...names], formulaScope, declared);
30
+ }
16
31
  /** Composition failed: no junction quantity matched. @public */
17
32
  export class CompositionJunctionError extends Error {
18
33
  constructor(message) {
@@ -53,6 +68,20 @@ function groupBound(edge, inputs) {
53
68
  const value = inputs[group.group];
54
69
  return value !== undefined && Number.isFinite(value);
55
70
  }
71
+ /**
72
+ * The unset-coefficient gate: an edge whose coefficient is unset and whose
73
+ * group is not a finite input throws {@link CoefficientUnsetError}. This is
74
+ * the one rule; `evaluateEdge` applies it to the edge it is given, and a
75
+ * composed edge's evaluator applies it to each operand before calling it, so
76
+ * a monomial times an absent 1 never reaches a caller as a number.
77
+ *
78
+ * @internal
79
+ */
80
+ export function assertCoefficientSet(edge, inputs) {
81
+ if (edge.coefficientUnset === true && !groupBound(edge, inputs)) {
82
+ throw new CoefficientUnsetError(edge.id, edge.label);
83
+ }
84
+ }
56
85
  /**
57
86
  * Composition refused: the composed sources would contain a duplicate
58
87
  * quantity NAME across operands without a recorded disposition (v0.11
@@ -79,15 +108,16 @@ export class CompositionAliasError extends Error {
79
108
  * the composite is known to be false. The message names both edge ids AND both
80
109
  * relation types, so the refused pair is identifiable without the table.
81
110
  *
82
- * Thrown ONLY when both operands carry a `relation`. An edge with no relation
83
- * overlay composes exactly as it did before Atlas Phase 1.
111
+ * Thrown when both operands carry a `relation` and the table is silent, or
112
+ * when both carry a `regime` of different families (this layer does not state
113
+ * where a cross-family chain applies). An edge with no relation overlay and no
114
+ * regime composes exactly as it did before Atlas Phase 1.
84
115
  *
85
- * `@internal`, not `@public`, for the same reason the rest of the Atlas overlay
86
- * is: nothing atlas-related joins the published surface before ROADMAP Phase 6.
87
- * It is reachable from the `src/composition/index.ts` barrel, which is what
88
- * internal consumers and tests use. Promote it in Phase 6 together with the
89
- * overlay fields, and update `tests/api/public-surface.test.ts`'s snapshot in
90
- * the same commit — that snapshot caught this addition, which is it working.
116
+ * Internal, not public: nothing atlas-related joins the published
117
+ * surface before ROADMAP Phase 6. It is reachable from the
118
+ * `src/composition/index.ts` barrel, which is what internal consumers and
119
+ * tests use. Promoting it is a public-surface change and goes through
120
+ * `tests/api/public-surface.test.ts` like any other.
91
121
  *
92
122
  * @internal
93
123
  */
@@ -138,6 +168,12 @@ function bindAliasInputs(edge, inputs) {
138
168
  }
139
169
  return out ?? inputs;
140
170
  }
171
+ /** The key the caller gave `name` under: the name itself, else the first alias present. */
172
+ function givenKey(edge, inputs, name) {
173
+ if (Object.hasOwn(inputs, name))
174
+ return name;
175
+ return (edge.aliases?.[name] ?? []).find((alias) => Object.hasOwn(inputs, alias)) ?? name;
176
+ }
141
177
  /**
142
178
  * The domain predicate and `evaluate` read source names. This copy reads
143
179
  * aliases first, so a CLI key reaches the same formula.
@@ -151,6 +187,7 @@ export function withBoundAliases(edge) {
151
187
  domain: {
152
188
  description: edge.domain.description,
153
189
  predicate: (inputs) => edge.domain.predicate(bindAliasInputs(edge, inputs)),
190
+ violations: (inputs, keyOf = (name) => name) => edge.domain.violations(bindAliasInputs(edge, inputs), (name) => keyOf(givenKey(edge, inputs, name))),
154
191
  },
155
192
  evaluate: (inputs) => edge.evaluate(bindAliasInputs(edge, inputs)),
156
193
  };
@@ -166,11 +203,9 @@ export function withBoundAliases(edge) {
166
203
  export function evaluateEdge(edge, inputs) {
167
204
  const bound = bindAliasInputs(edge, inputs);
168
205
  if (!edge.domain.predicate(bound)) {
169
- throw new DomainViolationError(`${edge.id}: inputs violate validity domain (${edge.domain.description})`);
170
- }
171
- if (edge.coefficientUnset === true && !groupBound(edge, bound)) {
172
- throw new CoefficientUnsetError(edge.id, edge.label);
206
+ throw new DomainViolationError(edge.id, edge.domain.violations(bound, (name) => givenKey(edge, inputs, name)));
173
207
  }
208
+ assertCoefficientSet(edge, bound);
174
209
  return edge.evaluate(bound);
175
210
  }
176
211
  //# sourceMappingURL=edge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/composition/edge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/composition/edge.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Composition graph — edges (bridges and laws) + validity domains\n * (v0.8.0 T1+T2+T3, per docs/planning/v0.8.0-Design.md §3).\n *\n * A `BridgeEdge` is an edge in the composition graph: n-ary source\n * quantities → one target quantity, carrying a closed-form evaluator,\n * a first-class validity domain (G-8), a confidence grade, and a\n * literature citation. `kind: 'law'` marks diagonal-law edges (P-1) —\n * edges whose endpoints share regime attributes, serving as the\n * connective tissue composition chains pass through.\n *\n * @module composition/edge\n */\n\nimport type { Quantity } from './quantity.js';\nimport type { ExprNode } from '../dimensional/validator.js';\nimport { CANONICAL_GROUP_PREFACTORS } from './canonical-prefactors.js';\nimport type {\n Conventions,\n Counterexample,\n Regime,\n RelationContract,\n} from '../relations/types.js';\nimport { DomainViolationError, type DomainViolation } from '../bridges/evaluation-errors.js';\nimport { formulaNames, formulaScope } from '../bridges/expr-parse.js';\nimport { conditionDomain } from '../bridges/validity.js';\n\n/**\n * First-class validity domain (v0.8.0 G-8). The predicate receives the\n * same keyed inputs as `evaluate` and returns whether the edge's\n * formula applies there (e.g. weak-field, positive mass, bound orbit).\n *\n * @public\n */\nexport interface ValidityDomain {\n /** The conditions written out, read from the same text the predicate runs (a catalog relation's `holds`). */\n readonly description: string;\n /** Whether every condition holds. */\n readonly predicate: (inputs: Record<string, number>) => boolean;\n /**\n * The conditions `inputs` violate, each written with the caller's keys and\n * naming the inputs it reads; empty exactly when `predicate` holds.\n * `keyOf` maps a name the domain reads to the key the caller gave; a name it\n * does not map is its own key.\n */\n readonly violations: (\n inputs: Record<string, number>,\n keyOf?: (name: string) => string,\n ) => readonly DomainViolation[];\n}\n\n/**\n * The validity domain a condition states, in the catalog's condition grammar\n * (`v > 0 and abs(x) < 1`; `true` for none). The predicate, the description\n * and the violations are all read from that one text. `names` lists the\n * hyphenated quantity names the condition reads beyond the registered ones;\n * registered constants are bound. `declared` lists the constant names the\n * condition may take as inputs (a relation's own sources).\n *\n * @public\n */\nexport function validityDomain(\n condition: string,\n names: readonly string[] = [],\n declared: readonly string[] = [],\n): ValidityDomain {\n return conditionDomain(condition, () => [...formulaNames(), ...names], formulaScope, declared);\n}\n\n/**\n * Confidence grade — mirrors the catalog's status taxonomy. Composition\n * demotes via {@link minConfidence}; it never promotes.\n *\n * @public\n */\nexport type EdgeConfidence =\n | 'established'\n | 'speculative'\n | 'highly-speculative';\n\n/**\n * An edge in the composition graph.\n *\n * `evaluate` is keyed by source-quantity `name`s. For catalog-backed\n * edges, `beId` cross-references `BRIDGE_EQUATIONS`; diagonal-law\n * edges have `beId: null` (BE-1–10 are not individually catalogued).\n *\n * @public\n */\nexport interface BridgeEdge {\n /** Graph id, e.g. 'be-42', 'law-schwarzschild-radius'. */\n readonly id: string;\n /** Catalog cross-reference; null for diagonal laws. */\n readonly beId: number | null;\n /** Bridge (endpoints differ in regime) vs law (endpoints share regime). */\n readonly kind: 'bridge' | 'law';\n /** Human-readable label. */\n readonly label: string;\n /** Input quantities (n-ary). */\n readonly sources: readonly Quantity[];\n /**\n * Evaluator keys and the symbols a reader copies, keyed by source name.\n * `evaluate`, the domain predicate, and `evaluateEdge` copy an alias onto\n * that source name before the formula. Explain, search, map, and derive\n * read the same record.\n */\n readonly aliases?: Readonly<Record<string, readonly string[]>>;\n /** Output quantity. */\n readonly target: Quantity;\n readonly confidence: EdgeConfidence;\n readonly domain: ValidityDomain;\n /** Closed-form evaluator; keys are source-quantity names. */\n readonly evaluate: (inputs: Record<string, number>) => number;\n /**\n * OPTIONAL symbolic form of the target (v0.12 symbolic composition): an\n * `ExprNode` whose leaf symbols are EITHER this edge's source-quantity\n * NAMES (graph vocabulary, e.g. `'mass'`) or registered constant symbols\n * (`hbar`, `c`, `G`, `k_B`, `8pi`, `ln2`, …). When present, `composeSymbolic`\n * can thread it through a junction by AST substitution; a drift-guard test\n * binds it to `evaluate`. Absent on numeric-only edges (the default).\n */\n readonly symbolic?: ExprNode;\n readonly citation: string;\n /**\n * The canonical entry is dimensional and no sourced prefactor multiplies\n * the monomial. The evaluator's leading 1 is that absence. It is not a\n * recovered constant. Absent on catalog edges and on a dimensional entry\n * whose table already supplies the factor, including a sourced 1.\n */\n readonly coefficientUnset?: boolean;\n /**\n * Exponents of dimensionless counts the dimensional monomial cannot see.\n * A fully-quantitative scalar AST records them (`N` in `P = N k_B T/V`,\n * `one_minus_e_sq` in the Einstein perihelion formula). They are sources.\n * Buckingham drops them, so the audit multiplies these exponents back in.\n * Absent when the formula has no such count. A `scalar-up-to-constant`\n * stub is not one of these.\n */\n readonly formulaFactors?: Readonly<Record<string, number>>;\n /**\n * Source names the scalar formula is an even function of. The evaluator\n * takes the absolute value of each one. Buckingham still writes the\n * dimensional exponent, which is odd for `√(q²)` and for `|q|`. Explain\n * prints those names as magnitudes. Absent when no source is even.\n */\n readonly evenInputs?: readonly string[];\n /**\n * Provenance: the quantity identification the junction used, when a\n * composed edge was formed via `QUANTITY_IDENTIFICATIONS` rather than\n * a name match. Absent on primitive edges and name-matched\n * compositions. (v0.8.0 punch-list: surfaced from the previously\n * unused `findJunction` return.)\n */\n readonly identificationUsed?: {\n readonly from: string;\n readonly to: string;\n readonly rationale: string;\n readonly citation?: string;\n };\n /**\n * Provenance: alias dispositions consumed at composition (v0.11\n * Option D) — which duplicate-name collisions were resolved, and how.\n */\n readonly aliasDispositionsUsed?: ReadonlyArray<{\n readonly name: string;\n readonly treatAs: 'shared' | { readonly renameSecond: string };\n readonly rationale: string;\n readonly citation?: string;\n }>;\n\n // ── Atlas Phase 1 overlay (all OPTIONAL; an edge without them is unchanged) ──\n /** The typed relation this edge asserts, when one has been recorded. */\n readonly relation?: RelationContract;\n /**\n * Where in π-group space this edge is claimed to apply, when a regime has\n * been recorded (Atlas Phase 2).\n *\n * ADDITIVE, and it does NOT replace `domain`. The two are different claims:\n * `domain.predicate` is an opaque closure over RAW inputs that may encode\n * conditions no π-group captures — positivity, integer-ness, a branch cut —\n * while a `Regime` is declarative inequalities over DIMENSIONLESS groups,\n * traceable back to the dimension matrix. Replacing the predicate with a\n * regime would discard those conditions invisibly, because the result still\n * type-checks and still answers (design note §1).\n *\n * When both are present the validity domain is satisfied IFF\n * `predicate(rawInputs) === true` AND `regimeHolds(piGroups).ok === true`.\n * Logical AND, no precedence: neither side wins, and a `'unknown'` from\n * `regimeHolds` is a failure to confirm validity, never validity.\n *\n * A regime is stated over π-groups, so the CALLER supplies the group values.\n * Nothing in this library infers them from raw inputs — that would be a\n * silent, lossy guess at the mapping. An edge without this field behaves\n * exactly as it did before Phase 2.\n */\n readonly regime?: Regime;\n /** Sign/unit choices the edge depends on. */\n readonly conventions?: Conventions;\n /** Cases the edge does NOT cover, each with its witness. */\n readonly counterexamples?: readonly Counterexample[];\n /**\n * Provenance for a `relation` that `composeEdges` DERIVED from the\n * composition table, rather than one an author recorded: the ids of the two\n * operands, in composition order. Present only on composed edges whose BOTH\n * operands carried a `relation`; absent everywhere else, including on every\n * primitive catalog edge.\n */\n readonly relationDerivedFrom?: readonly [string, string];\n}\n\n/** Composition failed: no junction quantity matched. @public */\nexport class CompositionJunctionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CompositionJunctionError';\n }\n}\n\n/** Composition failed: junction dimensions are not exactly equal. @public */\nexport class CompositionDimensionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CompositionDimensionError';\n }\n}\n\n/**\n * The edge's coefficient has no sourced number and its group is unbound.\n *\n * `evaluateEdge` throws this. `evaluateRelation` records it as\n * `kind: 'unset'` and does not return a number.\n *\n * @public\n */\nexport class CoefficientUnsetError extends Error {\n readonly id: string;\n readonly formula: string;\n constructor(id: string, formula: string) {\n super(`evaluateEdge: ${id} coefficient is unset (${formula})`);\n this.name = 'CoefficientUnsetError';\n this.id = id;\n this.formula = formula;\n }\n}\n\n/** A group prefactor is sourced only when that group is a finite input. */\nfunction groupBound(edge: BridgeEdge, inputs: Record<string, number>): boolean {\n const group = CANONICAL_GROUP_PREFACTORS.find((row) => row.id === edge.id);\n if (group === undefined) return false;\n const value = inputs[group.group];\n return value !== undefined && Number.isFinite(value);\n}\n\n/**\n * The unset-coefficient gate: an edge whose coefficient is unset and whose\n * group is not a finite input throws {@link CoefficientUnsetError}. This is\n * the one rule; `evaluateEdge` applies it to the edge it is given, and a\n * composed edge's evaluator applies it to each operand before calling it, so\n * a monomial times an absent 1 never reaches a caller as a number.\n *\n * @internal\n */\nexport function assertCoefficientSet(edge: BridgeEdge, inputs: Record<string, number>): void {\n if (edge.coefficientUnset === true && !groupBound(edge, inputs)) {\n throw new CoefficientUnsetError(edge.id, edge.label);\n }\n}\n\n/**\n * Composition refused: the composed sources would contain a duplicate\n * quantity NAME across operands without a recorded disposition (v0.11\n * namespacing gate, Option D — pure name-collision rule per the Adam\n * vet A-1: object identity cannot distinguish wrong-physics aliasing\n * from deliberate sharing).\n *\n * @public\n */\nexport class CompositionAliasError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CompositionAliasError';\n }\n}\n\n/**\n * Composition refused: BOTH operands carry a `relation`, and the composition\n * table (`src/atlas/composition-table.ts`) returns `'no-composite-claim'` for\n * that ordered pair — this library declines to assert what the chain relates.\n *\n * Silence, not a defect in the operands: the table is a deliberate\n * under-approximation (design note `docs/planning/Atlas-Phase-1-Design.md`\n * §2.2), so a refusal here means the composite type is unrecorded, never that\n * the composite is known to be false. The message names both edge ids AND both\n * relation types, so the refused pair is identifiable without the table.\n *\n * Thrown when both operands carry a `relation` and the table is silent, or\n * when both carry a `regime` of different families (this layer does not state\n * where a cross-family chain applies). An edge with no relation overlay and no\n * regime composes exactly as it did before Atlas Phase 1.\n *\n * Internal, not public: nothing atlas-related joins the published\n * surface before ROADMAP Phase 6. It is reachable from the\n * `src/composition/index.ts` barrel, which is what internal consumers and\n * tests use. Promoting it is a public-surface change and goes through\n * `tests/api/public-surface.test.ts` like any other.\n *\n * @internal\n */\nexport class UndefinedCompositionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UndefinedCompositionError';\n }\n}\n\n/**\n * Two keys for one source disagree. The formula is not run.\n * The message names the source and every key that was set.\n * @internal\n */\nclass AliasConflictError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AliasConflictError';\n }\n}\n\n/**\n * Copy each present alias onto its source name. The caller's record is\n * not mutated. A source that is already set to the same number stays.\n * Two different numbers for one source throw {@link AliasConflictError}.\n * @internal\n */\nfunction bindAliasInputs(\n edge: BridgeEdge,\n inputs: Record<string, number>,\n): Record<string, number> {\n if (edge.aliases === undefined) return inputs;\n let out: Record<string, number> | undefined;\n for (const [quantity, keys] of Object.entries(edge.aliases)) {\n const named = Object.hasOwn(inputs, quantity);\n const present = keys.filter((key) => Object.hasOwn(inputs, key));\n if (!named && present.length === 0) continue;\n const values = [\n ...(named ? [{ key: quantity, value: inputs[quantity]! }] : []),\n ...present.map((key) => ({ key, value: inputs[key]! })),\n ];\n const first = values[0]!.value;\n if (values.some((row) => !Object.is(row.value, first))) {\n throw new AliasConflictError(\n `${edge.id}: ${values.map((row) => `${row.key}=${row.value}`).join(' and ')}; those keys name ${quantity}`,\n );\n }\n if (!named) {\n out ??= { ...inputs };\n out[quantity] = first;\n }\n }\n return out ?? inputs;\n}\n\n/** The key the caller gave `name` under: the name itself, else the first alias present. */\nfunction givenKey(edge: BridgeEdge, inputs: Readonly<Record<string, number>>, name: string): string {\n if (Object.hasOwn(inputs, name)) return name;\n return (edge.aliases?.[name] ?? []).find((alias) => Object.hasOwn(inputs, alias)) ?? name;\n}\n\n/**\n * The domain predicate and `evaluate` read source names. This copy reads\n * aliases first, so a CLI key reaches the same formula.\n * @internal\n */\nexport function withBoundAliases<E extends BridgeEdge>(edge: E): E {\n if (edge.aliases === undefined) return edge;\n return {\n ...edge,\n domain: {\n description: edge.domain.description,\n predicate: (inputs) => edge.domain.predicate(bindAliasInputs(edge, inputs)),\n violations: (inputs, keyOf = (name) => name) =>\n edge.domain.violations(bindAliasInputs(edge, inputs), (name) => keyOf(givenKey(edge, inputs, name))),\n },\n evaluate: (inputs) => edge.evaluate(bindAliasInputs(edge, inputs)),\n };\n}\n\n/**\n * Domain-checked evaluation: throws {@link DomainViolationError} when\n * `inputs` violate `edge.domain`, otherwise returns `edge.evaluate`.\n * An alias is copied onto its source name first. An unset coefficient\n * throws {@link CoefficientUnsetError} instead of a monomial times 1.\n *\n * @public\n */\nexport function evaluateEdge(\n edge: BridgeEdge,\n inputs: Record<string, number>,\n): number {\n const bound = bindAliasInputs(edge, inputs);\n if (!edge.domain.predicate(bound)) {\n throw new DomainViolationError(edge.id, edge.domain.violations(bound, (name) => givenKey(edge, inputs, name)));\n }\n assertCoefficientSet(edge, bound);\n return edge.evaluate(bound);\n}\n"]}
@@ -99,7 +99,8 @@ export interface EnumerationReport {
99
99
  * @public
100
100
  */
101
101
  export declare const REGISTERED_COMPOSITION_IDS: ReadonlySet<string>;
102
- type EnumerationOptions = ComposeOptions & {
102
+ /** Options of {@link enumerateCompositions}: the compose options plus the registered and seed id sets. @public */
103
+ export type EnumerationOptions = ComposeOptions & {
103
104
  readonly registeredIds?: ReadonlySet<string>;
104
105
  /** When set, only these edge ids are walked, and symbolic pairs are split. */
105
106
  readonly seedIds?: ReadonlySet<string>;
@@ -124,5 +125,4 @@ export declare function enumerateCompositions(edges: ReadonlyArray<BridgeEdge>,
124
125
  * @internal
125
126
  */
126
127
  export declare function enumerateCompositionsWithRefusals(edges: ReadonlyArray<BridgeEdge>, opts?: EnumerationOptions): EnumerationWithRefusals;
127
- export {};
128
128
  //# sourceMappingURL=enumerate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enumerate.d.ts","sourceRoot":"","sources":["../../src/composition/enumerate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAuBD;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC5D;AAED,kCAAkC;AAClC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACzD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACpD,gEAAgE;IAChE,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACjE;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;QACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;QAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;KACzB,CAAC,CAAC;IACH;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC;QACvC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;KAC7B,CAAC,CAAC;CACJ;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAKzD,CAAC;AAEH,KAAK,kBAAkB,GAAG,cAAc,GAAG;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,IAAI,GAAE,kBAAuB,GAC5B,iBAAiB,CAEnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,IAAI,GAAE,kBAAuB,GAC5B,uBAAuB,CAsEzB"}
1
+ {"version":3,"file":"enumerate.d.ts","sourceRoot":"","sources":["../../src/composition/enumerate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAQ5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAuBD;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC5D;AAED,kCAAkC;AAClC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACzD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACpD,gEAAgE;IAChE,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACjE;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;QACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;QAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;KACzB,CAAC,CAAC;IACH;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC;QACvC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;KAC7B,CAAC,CAAC;CACJ;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAKzD,CAAC;AAEH,kHAAkH;AAClH,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,IAAI,GAAE,kBAAuB,GAC5B,iBAAiB,CAEnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,IAAI,GAAE,kBAAuB,GAC5B,uBAAuB,CAoFzB"}
@@ -16,9 +16,10 @@
16
16
  *
17
17
  * @module composition/enumerate
18
18
  */
19
- import { CompositionAliasError, UndefinedCompositionError } from './edge.js';
19
+ import { CompositionAliasError, CompositionDimensionError, CompositionJunctionError, UndefinedCompositionError, } from './edge.js';
20
20
  import { composeEdges } from './compose.js';
21
- import { composeSymbolic } from './compose-symbolic.js';
21
+ import { composeSymbolic, SymbolicCompositionError } from './compose-symbolic.js';
22
+ import { SymbolicEvalError } from './expr-eval.js';
22
23
  /**
23
24
  * The pre-registered composed ids (the CT-* set at v0.10.0). CT-1b's
24
25
  * 3-edge chain appears pairwise as its two links.
@@ -92,6 +93,15 @@ export function enumerateCompositionsWithRefusals(edges, opts = {}) {
92
93
  message: err.message,
93
94
  });
94
95
  }
96
+ else if (!(err instanceof CompositionDimensionError) &&
97
+ !(err instanceof CompositionJunctionError) &&
98
+ !(err instanceof SymbolicEvalError)) {
99
+ // Only the composer's own refusals are a non-pair: a dimension or junction
100
+ // failure, or `substitute` declining a node kind while the composed edge's
101
+ // symbolic form is built. Anything else is the instrument breaking, and a
102
+ // broken instrument must not read as "no composition here".
103
+ throw err;
104
+ }
95
105
  // A dimension or junction failure stays a silent non-pair.
96
106
  continue;
97
107
  }
@@ -110,7 +120,12 @@ export function enumerateCompositionsWithRefusals(edges, opts = {}) {
110
120
  expr: composeSymbolic(first, second, opts).expr,
111
121
  });
112
122
  }
113
- catch {
123
+ catch (err) {
124
+ // A pair `composeSymbolic` declines (no symbolic form, no junction leaf, a
125
+ // non-homogeneous result, or a node kind `substitute` does not read) is
126
+ // not substitutable. Any other error is rethrown.
127
+ if (!(err instanceof SymbolicCompositionError) && !(err instanceof SymbolicEvalError))
128
+ throw err;
114
129
  notSubstitutable.push({ first, second });
115
130
  }
116
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"enumerate.js","sourceRoot":"","sources":["../../src/composition/enumerate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enumerate.js","sourceRoot":"","sources":["../../src/composition/enumerate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Phase-D novel-candidate enumeration (v0.10.0 T3 — Part-IX §6's\n * \"novel candidate generated for physicist review\").\n *\n * Enumerates every ordered pair of edges that `composeEdges` accepts\n * (junction by name or registered identification; exact dimension\n * functor; the same checks as hand-written compositions) and\n * partitions the results into REGISTERED (the pre-registered CT-*\n * compositions, by composed id) and NOVEL (everything else — the\n * candidates a physicist should look at).\n *\n * The enumerator PROPOSES; it never promotes. Per the Part-VI §XXVII-B\n * protocol, a novel candidate's only output path is human review —\n * `docs/research/v0.11.0-novel-candidates.md` is the current review\n * surface (v0.10.0 report superseded).\n *\n * @module composition/enumerate\n */\n\nimport type { ExprNode } from '../dimensional/validator.js';\nimport type { BridgeEdge } from './edge.js';\nimport {\n CompositionAliasError,\n CompositionDimensionError,\n CompositionJunctionError,\n UndefinedCompositionError,\n} from './edge.js';\nimport { composeEdges } from './compose.js';\nimport type { ComposeOptions } from './compose.js';\nimport { composeSymbolic, SymbolicCompositionError } from './compose-symbolic.js';\nimport { SymbolicEvalError } from './expr-eval.js';\n\n/** One successful pairwise composition found by the enumerator. @public */\nexport interface CompositionCandidate {\n readonly first: BridgeEdge;\n readonly second: BridgeEdge;\n /** The composed edge (carries demoted confidence, piped domain). */\n readonly edge: BridgeEdge;\n /** True when the composed id is NOT in the registered set. */\n readonly novel: boolean;\n}\n\n/**\n * A pair that is junction- and dimension-compatible but whose composed\n * sources would collide on a quantity name without a recorded\n * disposition (v0.11 Option D) — the enumerator surfaces these for\n * human judgment instead of silently aliasing them.\n *\n * @public\n */\nexport interface DispositionRequired {\n readonly first: BridgeEdge;\n readonly second: BridgeEdge;\n readonly composedId: string;\n readonly message: string;\n}\n\n/**\n * A pair `composeSymbolic` accepts. The expression is the substituted\n * scalar formula. A pair that only `composeEdges` accepts is not one of\n * these. Inlined on {@link EnumerationReport} so the package barrel gains\n * no name.\n */\ninterface SymbolicProofTarget {\n readonly first: BridgeEdge;\n readonly second: BridgeEdge;\n readonly expr: ExprNode;\n}\n\n/**\n * A pair `composeEdges` accepts and `composeSymbolic` refuses. Unclassified:\n * the gap note owns the reading. Not a proof target.\n */\ninterface NotSubstitutablePair {\n readonly first: BridgeEdge;\n readonly second: BridgeEdge;\n}\n\n/**\n * A pair both of whose edges carry a relation, refused by the composition table.\n *\n * This is {@link UndefinedCompositionError} only. A dimension or junction\n * failure is not one of these, and neither is {@link CompositionAliasError}.\n *\n * @internal\n */\nexport interface RelationTableRefusal {\n readonly first: BridgeEdge;\n readonly second: BridgeEdge;\n /** `${first.id}>>${second.id}`. */\n readonly composedId: string;\n readonly message: string;\n}\n\n/**\n * The report {@link enumerateCompositions} returns, plus the table refusals\n * that report does not carry.\n *\n * @internal\n */\nexport interface EnumerationWithRefusals {\n readonly report: EnumerationReport;\n readonly relationRefusals: readonly RelationTableRefusal[];\n}\n\n/** Enumeration report. @public */\nexport interface EnumerationReport {\n readonly all: ReadonlyArray<CompositionCandidate>;\n readonly registered: ReadonlyArray<CompositionCandidate>;\n readonly novel: ReadonlyArray<CompositionCandidate>;\n /** v0.11: name-colliding pairs awaiting an AliasDisposition. */\n readonly requiresDisposition: ReadonlyArray<DispositionRequired>;\n /**\n * Pairs `composeSymbolic` accepts, when a seed set was supplied.\n * Empty on the default call.\n */\n readonly proofTargets: ReadonlyArray<{\n readonly first: BridgeEdge;\n readonly second: BridgeEdge;\n readonly expr: ExprNode;\n }>;\n /**\n * Pairs only `composeEdges` accepts, when a seed set was supplied.\n * Empty on the default call. Unclassified.\n */\n readonly notSubstitutable: ReadonlyArray<{\n readonly first: BridgeEdge;\n readonly second: BridgeEdge;\n }>;\n}\n\n/**\n * The pre-registered composed ids (the CT-* set at v0.10.0). CT-1b's\n * 3-edge chain appears pairwise as its two links.\n *\n * @public\n */\nexport const REGISTERED_COMPOSITION_IDS: ReadonlySet<string> = new Set([\n 'be-42>>be-16', // CT-1\n 'law-schwarzschild-radius>>be-42-via-rs', // CT-1b link 1\n 'be-42-via-rs>>be-16', // CT-1b link 2\n 'be-12>>be-11-zurek', // CT-3\n]);\n\n/** Options of {@link enumerateCompositions}: the compose options plus the registered and seed id sets. @public */\nexport type EnumerationOptions = ComposeOptions & {\n readonly registeredIds?: ReadonlySet<string>;\n /** When set, only these edge ids are walked, and symbolic pairs are split. */\n readonly seedIds?: ReadonlySet<string>;\n};\n\n/**\n * Enumerate all valid ordered pairwise compositions over `edges`.\n *\n * A table refusal is not in this report. {@link enumerateCompositionsWithRefusals}\n * returns the same report plus that list.\n *\n * @public\n */\nexport function enumerateCompositions(\n edges: ReadonlyArray<BridgeEdge>,\n opts: EnumerationOptions = {},\n): EnumerationReport {\n return enumerateCompositionsWithRefusals(edges, opts).report;\n}\n\n/**\n * The pairs {@link enumerateCompositions} returns, plus each\n * {@link UndefinedCompositionError} on its own list.\n *\n * `report.proofTargets` is that function's list. A refused pair is not\n * moved onto it. A dimension or junction failure stays a silent non-pair:\n * absent from `relationRefusals` and from `report`.\n *\n * @internal\n */\nexport function enumerateCompositionsWithRefusals(\n edges: ReadonlyArray<BridgeEdge>,\n opts: EnumerationOptions = {},\n): EnumerationWithRefusals {\n const registeredIds = opts.registeredIds ?? REGISTERED_COMPOSITION_IDS;\n const all: CompositionCandidate[] = [];\n const requiresDisposition: DispositionRequired[] = [];\n const relationRefusals: RelationTableRefusal[] = [];\n const proofTargets: SymbolicProofTarget[] = [];\n const notSubstitutable: NotSubstitutablePair[] = [];\n const seeded = opts.seedIds !== undefined;\n const inSeed = (edge: BridgeEdge): boolean =>\n opts.seedIds === undefined || opts.seedIds.has(edge.id);\n\n for (const first of edges) {\n if (!inSeed(first)) continue;\n for (const second of edges) {\n if (first === second) continue;\n if (!inSeed(second)) continue;\n let edge: BridgeEdge;\n try {\n edge = composeEdges(first, second, opts);\n } catch (err) {\n if (err instanceof CompositionAliasError) {\n // Junction + dimensions passed; only the name collision\n // blocks it — a human disposition unlocks this pair.\n requiresDisposition.push({\n first,\n second,\n composedId: `${first.id}>>${second.id}`,\n message: err.message,\n });\n } else if (err instanceof UndefinedCompositionError) {\n relationRefusals.push({\n first,\n second,\n composedId: `${first.id}>>${second.id}`,\n message: err.message,\n });\n } else if (\n !(err instanceof CompositionDimensionError) &&\n !(err instanceof CompositionJunctionError) &&\n !(err instanceof SymbolicEvalError)\n ) {\n // Only the composer's own refusals are a non-pair: a dimension or junction\n // failure, or `substitute` declining a node kind while the composed edge's\n // symbolic form is built. Anything else is the instrument breaking, and a\n // broken instrument must not read as \"no composition here\".\n throw err;\n }\n // A dimension or junction failure stays a silent non-pair.\n continue;\n }\n all.push({\n first,\n second,\n edge,\n novel: !registeredIds.has(edge.id),\n });\n if (!seeded) continue;\n try {\n proofTargets.push({\n first,\n second,\n expr: composeSymbolic(first, second, opts).expr,\n });\n } catch (err) {\n // A pair `composeSymbolic` declines (no symbolic form, no junction leaf, a\n // non-homogeneous result, or a node kind `substitute` does not read) is\n // not substitutable. Any other error is rethrown.\n if (!(err instanceof SymbolicCompositionError) && !(err instanceof SymbolicEvalError)) throw err;\n notSubstitutable.push({ first, second });\n }\n }\n }\n\n return {\n report: {\n all,\n registered: all.filter((c) => !c.novel),\n novel: all.filter((c) => c.novel),\n requiresDisposition,\n proofTargets,\n notSubstitutable,\n },\n relationRefusals,\n };\n}\n"]}
@@ -12,12 +12,29 @@
12
12
  */
13
13
  import type { Dimension } from '../dimensional/types.js';
14
14
  import { type EvaluatorSpec } from '../bridges/evaluators.js';
15
- import { type InputContract } from '../bridges/input-contract.js';
15
+ import { type EvaluationWant, type InputContract } from '../bridges/input-contract.js';
16
16
  import { type BridgeEdge } from './edge.js';
17
+ /**
18
+ * A further number an evaluator returns beside its value (be-52's
19
+ * `precession_arcsec_per_century`), with the unit and meaning its record states.
20
+ *
21
+ * @public
22
+ */
23
+ export interface ExtraOutput {
24
+ readonly name: string;
25
+ readonly value: number;
26
+ readonly unit: string;
27
+ readonly meaning: string;
28
+ }
17
29
  /**
18
30
  * A sourced number, or an unset coefficient.
19
31
  *
20
- * `dimension` is the edge target. `formula` is the edge label.
32
+ * A value carries what it is: `name` is the quantity the relation computes
33
+ * (its target), `unit` that quantity's SI unit written from `dimension` (the
34
+ * form `parseUnit` reads back), `meaning` the relation as its record states it
35
+ * (a sign convention included), and `extras` every further output whose inputs
36
+ * were given. `upt evaluate` prints and serializes this object; it computes no
37
+ * label of its own. `formula` is the edge label.
21
38
  *
22
39
  * @public
23
40
  */
@@ -25,6 +42,10 @@ export type Evaluation = {
25
42
  readonly kind: 'value';
26
43
  readonly value: number;
27
44
  readonly dimension: Dimension;
45
+ readonly name: string;
46
+ readonly unit: string;
47
+ readonly meaning: string;
48
+ readonly extras: readonly ExtraOutput[];
28
49
  } | {
29
50
  readonly kind: 'unset';
30
51
  readonly formula: string;
@@ -38,15 +59,6 @@ export interface Evaluable {
38
59
  readonly edge?: BridgeEdge;
39
60
  readonly evaluator?: EvaluatorSpec;
40
61
  }
41
- /**
42
- * The output of a closed-form evaluator: the quantity it computes and that
43
- * quantity's dimension. An evaluator with no catalog dimension (a closed form
44
- * with no AST) names no dimension.
45
- */
46
- export declare function evaluatorOutput(spec: EvaluatorSpec): {
47
- readonly name: string;
48
- readonly dimension?: Dimension;
49
- };
50
62
  /**
51
63
  * The declared inputs of an evaluable id: the closed-form evaluator's contract
52
64
  * when it has one, else its edge's. {@link evaluateRelation} checks bindings
@@ -59,6 +71,15 @@ export declare function evaluableContract(found: Evaluable): InputContract;
59
71
  * An unknown id throws. An id with an evaluator and no edge is not unknown.
60
72
  */
61
73
  export declare function resolveEvaluable(id: string | number): Evaluable;
74
+ /**
75
+ * The one result builder: evaluate a resolved id at `bindings`. A closed-form
76
+ * evaluator is its `run`; an edge with none is checked against its contract and
77
+ * evaluated. {@link evaluateRelation} calls it with `want` `'value'`;
78
+ * `upt evaluate` calls it with `'all'`, which also requires an input only an
79
+ * extra output reads. Both get the same {@link Evaluation}.
80
+ * @internal
81
+ */
82
+ export declare function evaluateResolved(found: Evaluable, bindings: Readonly<Record<string, number>>, want: EvaluationWant): Evaluation;
62
83
  /**
63
84
  * Evaluate `id` at `bindings`.
64
85
  *
@@ -72,6 +93,9 @@ export declare function resolveEvaluable(id: string | number): Evaluable;
72
93
  * An unset coefficient returns `{ kind: 'unset', formula }` and no number.
73
94
  * A complete finite input whose closed form is not finite (a dropped factor,
74
95
  * a singularity) is the same unset result, not a missing input.
96
+ * A value carries its name, SI unit and meaning, and every extra output whose
97
+ * inputs were given (`extras`); an input only an extra output reads is not
98
+ * required.
75
99
  *
76
100
  * @public
77
101
  */
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate-relation.d.ts","sourceRoot":"","sources":["../../src/composition/evaluate-relation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM9F,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,CAO9G;AAsCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAGjE;AAYD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAY/D;AAuBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACzC,UAAU,CAcZ"}
1
+ {"version":3,"file":"evaluate-relation.d.ts","sourceRoot":"","sources":["../../src/composition/evaluate-relation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAA8B,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAMnH,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,UAAU,GAClB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;CACzC,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;CACpC;AAsCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAGjE;AAYD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAY/D;AAoCD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC1C,IAAI,EAAE,cAAc,GACnB,UAAU,CAqBZ;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACzC,UAAU,CAEZ"}
@@ -11,6 +11,7 @@
11
11
  * @module composition/evaluate-relation
12
12
  */
13
13
  import { EXPECTED_DIMENSION_BY_BRIDGE } from '../dimensional/bridge-check.js';
14
+ import { siUnitOf } from '../dimensional/algebra.js';
14
15
  import { BRIDGE_EVALUATORS } from '../bridges/evaluators.js';
15
16
  import { checkInputs, inputContract } from '../bridges/input-contract.js';
16
17
  import { catalogEdgeKey, parseBridgeId, primaryRelation } from '../bridges/catalog-load.js';
@@ -19,19 +20,6 @@ import { CANONICAL_GROUP_PREFACTORS } from './canonical-prefactors.js';
19
20
  import { CANONICAL_GRAPH } from './canonical-graph.js';
20
21
  import { CATALOG_GRAPH } from './catalog-graph.js';
21
22
  import { CoefficientUnsetError, evaluateEdge } from './edge.js';
22
- /**
23
- * The output of a closed-form evaluator: the quantity it computes and that
24
- * quantity's dimension. An evaluator with no catalog dimension (a closed form
25
- * with no AST) names no dimension.
26
- */
27
- export function evaluatorOutput(spec) {
28
- const relation = primaryRelation(spec.bridgeId);
29
- const dimension = EXPECTED_DIMENSION_BY_BRIDGE.get(spec.bridgeId);
30
- return {
31
- name: relation?.target ?? 'value',
32
- ...(dimension === undefined ? {} : { dimension }),
33
- };
34
- }
35
23
  /**
36
24
  * Names a canonical id may be bound under besides its sources: the equation's
37
25
  * governing names (a registered constant may be overridden), its formula
@@ -106,21 +94,67 @@ export function resolveEvaluable(id) {
106
94
  };
107
95
  }
108
96
  /**
109
- * The closed form's primary output, through the evaluator's `run`. A record's
110
- * `value` is the catalog signature; any other number it returns is an extra
111
- * output, named by `spec.outputs`. A non-finite value at finite inputs is an
112
- * unset result (a dropped factor, a singularity).
97
+ * The closed form through the evaluator's `run`, the one evaluation. A record's
98
+ * `value` is the catalog signature; every other number `run` returns is an
99
+ * extra output, labelled from `spec.outputs`. A non-finite value at finite
100
+ * inputs is an unset result (a dropped factor, a singularity).
113
101
  */
114
- function closedFormEvaluation(spec, edge, bindings) {
115
- const { value } = spec.run(bindings, 'value');
102
+ function closedFormEvaluation(spec, edge, bindings, want) {
103
+ const numbers = spec.run(bindings, want);
104
+ const relation = primaryRelation(spec.bridgeId);
116
105
  const dimension = edge?.target.dim ?? EXPECTED_DIMENSION_BY_BRIDGE.get(spec.bridgeId);
117
106
  if (dimension === undefined) {
118
107
  throw new Error(`evaluateRelation: be-${spec.bridgeId} has no catalog dimension`);
119
108
  }
120
- if (Number.isFinite(value))
121
- return { kind: 'value', value, dimension };
109
+ const value = numbers.value;
122
110
  // `run` refused a non-finite input, so a non-finite value here comes from the closed form.
123
- return { kind: 'unset', formula: edge?.label ?? primaryRelation(spec.bridgeId)?.label ?? spec.name };
111
+ if (!Number.isFinite(value))
112
+ return { kind: 'unset', formula: edge?.label ?? relation?.label ?? spec.name };
113
+ return {
114
+ kind: 'value',
115
+ value,
116
+ dimension,
117
+ name: relation?.target ?? edge?.target.name ?? 'value',
118
+ unit: siUnitOf(dimension),
119
+ meaning: relation?.label ?? edge?.label ?? spec.name,
120
+ extras: spec.outputs
121
+ .filter((output) => numbers[output.name] !== undefined)
122
+ .map((output) => ({ name: output.name, value: numbers[output.name], unit: output.unit, meaning: output.meaning })),
123
+ };
124
+ }
125
+ /**
126
+ * The one result builder: evaluate a resolved id at `bindings`. A closed-form
127
+ * evaluator is its `run`; an edge with none is checked against its contract and
128
+ * evaluated. {@link evaluateRelation} calls it with `want` `'value'`;
129
+ * `upt evaluate` calls it with `'all'`, which also requires an input only an
130
+ * extra output reads. Both get the same {@link Evaluation}.
131
+ * @internal
132
+ */
133
+ export function evaluateResolved(found, bindings, want) {
134
+ if (found.evaluator !== undefined)
135
+ return closedFormEvaluation(found.evaluator, found.edge, bindings, want);
136
+ const edge = found.edge;
137
+ const checked = checkInputs(evaluableContract(found), bindings, want);
138
+ try {
139
+ const value = evaluateEdge(edge, { ...checked });
140
+ // `checkInputs` refused a non-finite input, so a non-finite value comes from the formula.
141
+ if (!Number.isFinite(value))
142
+ return { kind: 'unset', formula: edge.label };
143
+ return {
144
+ kind: 'value',
145
+ value,
146
+ dimension: edge.target.dim,
147
+ name: edge.target.name,
148
+ unit: siUnitOf(edge.target.dim),
149
+ meaning: edge.label,
150
+ extras: [],
151
+ };
152
+ }
153
+ catch (error) {
154
+ if (error instanceof CoefficientUnsetError)
155
+ return { kind: 'unset', formula: error.formula };
156
+ throw error;
157
+ }
124
158
  }
125
159
  /**
126
160
  * Evaluate `id` at `bindings`.
@@ -135,26 +169,13 @@ function closedFormEvaluation(spec, edge, bindings) {
135
169
  * An unset coefficient returns `{ kind: 'unset', formula }` and no number.
136
170
  * A complete finite input whose closed form is not finite (a dropped factor,
137
171
  * a singularity) is the same unset result, not a missing input.
172
+ * A value carries its name, SI unit and meaning, and every extra output whose
173
+ * inputs were given (`extras`); an input only an extra output reads is not
174
+ * required.
138
175
  *
139
176
  * @public
140
177
  */
141
178
  export function evaluateRelation(id, bindings) {
142
- const found = resolveEvaluable(id);
143
- if (found.evaluator !== undefined)
144
- return closedFormEvaluation(found.evaluator, found.edge, bindings);
145
- const edge = found.edge;
146
- const checked = checkInputs(evaluableContract(found), bindings);
147
- try {
148
- const value = evaluateEdge(edge, { ...checked });
149
- // `checkInputs` refused a non-finite input, so a non-finite value comes from the formula.
150
- if (!Number.isFinite(value))
151
- return { kind: 'unset', formula: edge.label };
152
- return { kind: 'value', value, dimension: edge.target.dim };
153
- }
154
- catch (error) {
155
- if (error instanceof CoefficientUnsetError)
156
- return { kind: 'unset', formula: error.formula };
157
- throw error;
158
- }
179
+ return evaluateResolved(resolveEvaluable(id), bindings, 'value');
159
180
  }
160
181
  //# sourceMappingURL=evaluate-relation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate-relation.js","sourceRoot":"","sources":["../../src/composition/evaluate-relation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluate-relation.js","sourceRoot":"","sources":["../../src/composition/evaluate-relation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAsB,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,aAAa,EAA2C,MAAM,8BAA8B,CAAC;AACnH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAmB,MAAM,WAAW,CAAC;AAiDjF;;;;GAIG;AACH,SAAS,cAAc,CAAC,EAAU;IAChC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,OAAO;QACL,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7D,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;KAC7F,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,EAAU,EAAE,IAAgB;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChD,GAAG,EAAE,MAAM,CAAC,IAAI;QAChB,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,OAAgB;QACxB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC,CAAC;IACJ,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACzH,OAAO,aAAa,CAAC,EAAE,EAAE;QACvB,GAAG,WAAW;QACd,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;KACrJ,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;IACnE,OAAO,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAK,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,IAAI,CAAC,EAAmB;IAC/B,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAmB;IAClD,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IAC9F,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrF,IAAI,IAAI,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO;QACL,EAAE,EAAE,GAAG;QACP,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAC3B,IAAmB,EACnB,IAA4B,EAC5B,QAA0C,EAC1C,IAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,QAAQ,2BAA2B,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAM,CAAC;IAC7B,2FAA2F;IAC3F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5G,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK;QACL,SAAS;QACT,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,OAAO;QACtD,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;QACzB,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI;QACpD,MAAM,EAAE,IAAI,CAAC,OAAO;aACjB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;aACtD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;KACtH,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAgB,EAChB,QAA0C,EAC1C,IAAoB;IAEpB,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5G,MAAM,IAAI,GAAG,KAAK,CAAC,IAAK,CAAC;IACzB,MAAM,OAAO,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACjD,0FAA0F;QAC1F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3E,OAAO;YACL,IAAI,EAAE,OAAO;YACb,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;YAC1B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAC/B,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,qBAAqB;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,EAAmB,EACnB,QAA0C;IAE1C,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC","sourcesContent":["/**\n * One public evaluation of a catalog id or a canonical id.\n *\n * A catalog id with a closed-form evaluator is that evaluator's `run`, the\n * same call `upt evaluate` makes, so the library and the CLI check the\n * bindings, the domain and the value in one place. A canonical id is its\n * graph edge, checked against the same {@link checkInputs} contract first.\n * A formula string is not parsed. An unset coefficient is `kind: 'unset'` and\n * is not a number.\n *\n * @module composition/evaluate-relation\n */\n\nimport { EXPECTED_DIMENSION_BY_BRIDGE } from '../dimensional/bridge-check.js';\nimport { siUnitOf } from '../dimensional/algebra.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport { BRIDGE_EVALUATORS, type EvaluatorSpec } from '../bridges/evaluators.js';\nimport { checkInputs, inputContract, type EvaluationWant, type InputContract } from '../bridges/input-contract.js';\nimport { catalogEdgeKey, parseBridgeId, primaryRelation } from '../bridges/catalog-load.js';\nimport { CANONICAL_EQUATIONS } from '../canonical/registry.js';\nimport { CANONICAL_GROUP_PREFACTORS } from './canonical-prefactors.js';\nimport { CANONICAL_GRAPH } from './canonical-graph.js';\nimport { CATALOG_GRAPH } from './catalog-graph.js';\nimport { CoefficientUnsetError, evaluateEdge, type BridgeEdge } from './edge.js';\n\n/**\n * A further number an evaluator returns beside its value (be-52's\n * `precession_arcsec_per_century`), with the unit and meaning its record states.\n *\n * @public\n */\nexport interface ExtraOutput {\n readonly name: string;\n readonly value: number;\n readonly unit: string;\n readonly meaning: string;\n}\n\n/**\n * A sourced number, or an unset coefficient.\n *\n * A value carries what it is: `name` is the quantity the relation computes\n * (its target), `unit` that quantity's SI unit written from `dimension` (the\n * form `parseUnit` reads back), `meaning` the relation as its record states it\n * (a sign convention included), and `extras` every further output whose inputs\n * were given. `upt evaluate` prints and serializes this object; it computes no\n * label of its own. `formula` is the edge label.\n *\n * @public\n */\nexport type Evaluation =\n | {\n readonly kind: 'value';\n readonly value: number;\n readonly dimension: Dimension;\n readonly name: string;\n readonly unit: string;\n readonly meaning: string;\n readonly extras: readonly ExtraOutput[];\n }\n | { readonly kind: 'unset'; readonly formula: string };\n\n/**\n * An id the library can evaluate: a graph edge, a closed-form evaluator, or both.\n * The CLI and {@link evaluateRelation} both call this. Neither looks the id up again.\n */\nexport interface Evaluable {\n readonly id: string;\n readonly edge?: BridgeEdge;\n readonly evaluator?: EvaluatorSpec;\n}\n\n/**\n * Names a canonical id may be bound under besides its sources: the equation's\n * governing names (a registered constant may be overridden), its formula\n * factors, and a bound dimensionless group such as `gamma`.\n */\nfunction canonicalNames(id: string): string[] {\n const equation = CANONICAL_EQUATIONS.find((candidate) => candidate.id === id);\n return [\n ...(equation?.dimensional.governing.map((g) => g.name) ?? []),\n ...CANONICAL_GROUP_PREFACTORS.filter((group) => group.id === id).map((group) => group.group),\n ];\n}\n\n/**\n * The declared inputs of an edge with no evaluator: each source under its name\n * and aliases, required; and, optional, its formula factors, the canonical\n * equation's governing names and a bound dimensionless group. A name that\n * already spells a source binds that source, so it is not a second slot.\n */\nfunction edgeContract(id: string, edge: BridgeEdge): InputContract {\n const sourceSlots = edge.sources.map((source) => ({\n key: source.name,\n spellings: [source.name, ...(edge.aliases?.[source.name] ?? [])],\n alternates: [],\n optional: false,\n readBy: 'value' as const,\n listed: true,\n }));\n const spelled = new Set(sourceSlots.flatMap((slot) => slot.spellings));\n const optional = [...Object.keys(edge.formulaFactors ?? {}), ...canonicalNames(id)].filter((name) => !spelled.has(name));\n return inputContract(id, [\n ...sourceSlots,\n ...[...new Set(optional)].map((name) => ({ key: name, spellings: [name], alternates: [], optional: true, readBy: 'value' as const, listed: false })),\n ]);\n}\n\n/**\n * The declared inputs of an evaluable id: the closed-form evaluator's contract\n * when it has one, else its edge's. {@link evaluateRelation} checks bindings\n * against exactly this contract.\n * @internal\n */\nexport function evaluableContract(found: Evaluable): InputContract {\n if (found.evaluator !== undefined) return found.evaluator.contract;\n return edgeContract(found.id, found.edge!);\n}\n\nfunction idOf(id: string | number): { key: string; numeric: number | undefined } {\n if (typeof id === 'number') return { key: catalogEdgeKey(id), numeric: id };\n try {\n const numeric = parseBridgeId(id);\n return { key: catalogEdgeKey(numeric), numeric };\n } catch {\n return { key: id, numeric: undefined };\n }\n}\n\n/**\n * The edge and the closed-form evaluator for `id`, when either exists.\n * An unknown id throws. An id with an evaluator and no edge is not unknown.\n */\nexport function resolveEvaluable(id: string | number): Evaluable {\n const { key, numeric } = idOf(id);\n const edge = [...CATALOG_GRAPH, ...CANONICAL_GRAPH].find((candidate) => candidate.id === key);\n const evaluator = numeric === undefined ? undefined : BRIDGE_EVALUATORS.get(numeric);\n if (edge === undefined && evaluator === undefined) {\n throw new Error(`evaluateRelation: unknown id '${key}'`);\n }\n return {\n id: key,\n ...(edge === undefined ? {} : { edge }),\n ...(evaluator === undefined ? {} : { evaluator }),\n };\n}\n\n/**\n * The closed form through the evaluator's `run`, the one evaluation. A record's\n * `value` is the catalog signature; every other number `run` returns is an\n * extra output, labelled from `spec.outputs`. A non-finite value at finite\n * inputs is an unset result (a dropped factor, a singularity).\n */\nfunction closedFormEvaluation(\n spec: EvaluatorSpec,\n edge: BridgeEdge | undefined,\n bindings: Readonly<Record<string, number>>,\n want: EvaluationWant,\n): Evaluation {\n const numbers = spec.run(bindings, want);\n const relation = primaryRelation(spec.bridgeId);\n const dimension = edge?.target.dim ?? EXPECTED_DIMENSION_BY_BRIDGE.get(spec.bridgeId);\n if (dimension === undefined) {\n throw new Error(`evaluateRelation: be-${spec.bridgeId} has no catalog dimension`);\n }\n const value = numbers.value!;\n // `run` refused a non-finite input, so a non-finite value here comes from the closed form.\n if (!Number.isFinite(value)) return { kind: 'unset', formula: edge?.label ?? relation?.label ?? spec.name };\n return {\n kind: 'value',\n value,\n dimension,\n name: relation?.target ?? edge?.target.name ?? 'value',\n unit: siUnitOf(dimension),\n meaning: relation?.label ?? edge?.label ?? spec.name,\n extras: spec.outputs\n .filter((output) => numbers[output.name] !== undefined)\n .map((output) => ({ name: output.name, value: numbers[output.name]!, unit: output.unit, meaning: output.meaning })),\n };\n}\n\n/**\n * The one result builder: evaluate a resolved id at `bindings`. A closed-form\n * evaluator is its `run`; an edge with none is checked against its contract and\n * evaluated. {@link evaluateRelation} calls it with `want` `'value'`;\n * `upt evaluate` calls it with `'all'`, which also requires an input only an\n * extra output reads. Both get the same {@link Evaluation}.\n * @internal\n */\nexport function evaluateResolved(\n found: Evaluable,\n bindings: Readonly<Record<string, number>>,\n want: EvaluationWant,\n): Evaluation {\n if (found.evaluator !== undefined) return closedFormEvaluation(found.evaluator, found.edge, bindings, want);\n const edge = found.edge!;\n const checked = checkInputs(evaluableContract(found), bindings, want);\n try {\n const value = evaluateEdge(edge, { ...checked });\n // `checkInputs` refused a non-finite input, so a non-finite value comes from the formula.\n if (!Number.isFinite(value)) return { kind: 'unset', formula: edge.label };\n return {\n kind: 'value',\n value,\n dimension: edge.target.dim,\n name: edge.target.name,\n unit: siUnitOf(edge.target.dim),\n meaning: edge.label,\n extras: [],\n };\n } catch (error) {\n if (error instanceof CoefficientUnsetError) return { kind: 'unset', formula: error.formula };\n throw error;\n }\n}\n\n/**\n * Evaluate `id` at `bindings`.\n *\n * A catalog id is `be-70` or `70`. A canonical id is `CE-sound-speed`.\n * Binding keys are the inputs' keys, quantity names or aliases.\n * The bindings are checked before the domain: an unknown key throws\n * `UnknownInputError`, a non-number `InputTypeError` (a `TypeError`), a\n * `NaN` or an infinity `NonFiniteInputError`, a key given twice\n * `DuplicateInputError`, an absent input `MissingInputError`.\n * A domain failure throws `DomainViolationError`.\n * An unset coefficient returns `{ kind: 'unset', formula }` and no number.\n * A complete finite input whose closed form is not finite (a dropped factor,\n * a singularity) is the same unset result, not a missing input.\n * A value carries its name, SI unit and meaning, and every extra output whose\n * inputs were given (`extras`); an input only an extra output reads is not\n * required.\n *\n * @public\n */\nexport function evaluateRelation(\n id: string | number,\n bindings: Readonly<Record<string, number>>,\n): Evaluation {\n return evaluateResolved(resolveEvaluable(id), bindings, 'value');\n}\n"]}
@@ -29,12 +29,11 @@ import type { IdentifiabilityResult } from './identifiability.js';
29
29
  import type { RetrodictionResult } from './retrodiction.js';
30
30
  import type { Dimension } from '../dimensional/types.js';
31
31
  /**
32
- * Text form of a recovered quantity: 15 significant digits, the precision an
33
- * evaluator input is already passed at. JSON keeps the number; this is only
34
- * the printed form. An integer stays an integer (`1`, not `1.0000e+0`).
32
+ * The printed forms of a number, owned by `core/format` and re-exported here so the commands'
33
+ * imports stay as they were: every command prints a number through `formatQuantity` or `formatExact`.
35
34
  * @internal
36
35
  */
37
- export declare function formatQuantity(value: number): string;
36
+ export { formatQuantity, formatExact } from '../core/format.js';
38
37
  import type { DimensionalDeterminationResult } from '../dimensional/buckingham.js';
39
38
  /** One structural derivation of the target, with the recovered value when
40
39
  * ground-truth values were supplied. @public */
@@ -103,11 +102,8 @@ export interface QuantityExplanation {
103
102
  /** Whether the KNOWN set dimensionally fixes the target (Buckingham-π);
104
103
  * absent when the target has no resolvable dimension. */
105
104
  readonly dimensional?: DimensionalDeterminationResult;
106
- /** Derivations that refused the given values as outside their validity domain. */
107
- readonly refusals?: readonly {
108
- readonly edge: string;
109
- readonly reason: string;
110
- }[];
105
+ /** Derivations that refused the given values, each under its own kind (`RetrodictionRefusal`). */
106
+ readonly refusals?: RetrodictionResult['refusals'];
111
107
  /** Upstream gaps for an under-determined target (from the classifier). */
112
108
  readonly blockingFrontier: readonly string[];
113
109
  /** Plain-language synthesis of the above. */
@@ -1 +1 @@
1
- {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/composition/explain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/composition/explain.ts"],"names":[],"mappings":"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"}