universal-physics-tensor 10.0.0 → 12.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 (835) hide show
  1. package/README.md +39 -36
  2. package/bin/upt.mjs +13 -1
  3. package/data/applied-cases.json +1892 -0
  4. package/data/applied-cases.schema.json +194 -0
  5. package/data/atlas/atlas.json +25 -25
  6. package/data/atlas/atlas.jsonld +1 -1
  7. package/data/atlas/diffusion.json +6 -6
  8. package/data/atlas/oscillators.json +7 -7
  9. package/data/atlas/waves.json +14 -14
  10. package/data/atlas/witness-results.json +11 -11
  11. package/data/bridge-catalog.json +389 -230
  12. package/data/bridge-catalog.schema.json +45 -7
  13. package/data/units.json +6 -25
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +21 -15
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
  18. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  19. package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
  20. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  21. package/dist/atlas/benchmark/loader.js +2 -2
  22. package/dist/atlas/benchmark/loader.js.map +1 -1
  23. package/dist/atlas/benchmark/stats.d.ts +2 -2
  24. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  25. package/dist/atlas/benchmark/stats.js +9 -15
  26. package/dist/atlas/benchmark/stats.js.map +1 -1
  27. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  28. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  29. package/dist/atlas/catalog-formal-ref.js +52 -5
  30. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  31. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  32. package/dist/atlas/chain-pipeline.js +7 -8
  33. package/dist/atlas/chain-pipeline.js.map +1 -1
  34. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  35. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  36. package/dist/atlas/diffusion/bridges-closure.js +8 -12
  37. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  38. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  39. package/dist/atlas/diffusion/bridges.js +27 -39
  40. package/dist/atlas/diffusion/bridges.js.map +1 -1
  41. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  42. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  43. package/dist/atlas/diffusion/dimensions.js +8 -16
  44. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  45. package/dist/atlas/diffusion/models.d.ts +3 -3
  46. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  47. package/dist/atlas/diffusion/models.js +5 -10
  48. package/dist/atlas/diffusion/models.js.map +1 -1
  49. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  50. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  51. package/dist/atlas/diffusion/numerics.js +38 -24
  52. package/dist/atlas/diffusion/numerics.js.map +1 -1
  53. package/dist/atlas/link-prediction.d.ts +106 -3
  54. package/dist/atlas/link-prediction.d.ts.map +1 -1
  55. package/dist/atlas/link-prediction.js +212 -66
  56. package/dist/atlas/link-prediction.js.map +1 -1
  57. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  58. package/dist/atlas/oscillators/bridges-coarse.js +7 -11
  59. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  60. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  61. package/dist/atlas/oscillators/bridges-exact.js +6 -7
  62. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  63. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  64. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  65. package/dist/atlas/oscillators/bridges-limits.js +23 -34
  66. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  67. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  68. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  69. package/dist/atlas/oscillators/dimensions.js +9 -21
  70. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  71. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  72. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  73. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  74. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  75. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  76. package/dist/atlas/oscillators/models.js +2 -6
  77. package/dist/atlas/oscillators/models.js.map +1 -1
  78. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  79. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  80. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  81. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  82. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  83. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  84. package/dist/atlas/oscillators/phase-translation.js +3 -4
  85. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  86. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  87. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  88. package/dist/atlas/oscillators/position-translation.js +123 -12
  89. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  90. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  91. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  92. package/dist/atlas/oscillators/rejections.js +0 -7
  93. package/dist/atlas/oscillators/rejections.js.map +1 -1
  94. package/dist/atlas/physjs-entries.generated.d.ts +35 -25
  95. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  96. package/dist/atlas/physjs-entries.generated.js +37 -25
  97. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  98. package/dist/atlas/physjs-ref.d.ts +34 -31
  99. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  100. package/dist/atlas/physjs-ref.js +55 -53
  101. package/dist/atlas/physjs-ref.js.map +1 -1
  102. package/dist/atlas/physjs-reviewed.d.ts +1 -1
  103. package/dist/atlas/physjs-reviewed.js +15 -15
  104. package/dist/atlas/physjs-reviewed.js.map +1 -1
  105. package/dist/atlas/poster/statements.d.ts +0 -19
  106. package/dist/atlas/poster/statements.d.ts.map +1 -1
  107. package/dist/atlas/poster/statements.js +1 -1
  108. package/dist/atlas/poster/statements.js.map +1 -1
  109. package/dist/atlas/proof-target.d.ts +1 -1
  110. package/dist/atlas/proof-target.js +1 -1
  111. package/dist/atlas/proof-target.js.map +1 -1
  112. package/dist/atlas/regime.d.ts +1 -1
  113. package/dist/atlas/regime.d.ts.map +1 -1
  114. package/dist/atlas/regime.js +1 -1
  115. package/dist/atlas/regime.js.map +1 -1
  116. package/dist/atlas/text-overlap.d.ts +23 -0
  117. package/dist/atlas/text-overlap.d.ts.map +1 -0
  118. package/dist/atlas/text-overlap.js +41 -0
  119. package/dist/atlas/text-overlap.js.map +1 -0
  120. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  121. package/dist/atlas/waves/bridges-closure.js +2 -6
  122. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  123. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  124. package/dist/atlas/waves/bridges.js +32 -48
  125. package/dist/atlas/waves/bridges.js.map +1 -1
  126. package/dist/atlas/waves/models.d.ts +5 -6
  127. package/dist/atlas/waves/models.d.ts.map +1 -1
  128. package/dist/atlas/waves/models.js +7 -13
  129. package/dist/atlas/waves/models.js.map +1 -1
  130. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  131. package/dist/atlas/waves/numerics.js +10 -3
  132. package/dist/atlas/waves/numerics.js.map +1 -1
  133. package/dist/atlas/witness-numeric.d.ts +30 -0
  134. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  135. package/dist/atlas/witness-numeric.js +53 -0
  136. package/dist/atlas/witness-numeric.js.map +1 -1
  137. package/dist/atlas/witness-specs.d.ts.map +1 -1
  138. package/dist/atlas/witness-specs.js +19 -0
  139. package/dist/atlas/witness-specs.js.map +1 -1
  140. package/dist/atlas/witness-symbolic.d.ts +75 -3
  141. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  142. package/dist/atlas/witness-symbolic.js +116 -10
  143. package/dist/atlas/witness-symbolic.js.map +1 -1
  144. package/dist/bridges/catalog-load.d.ts.map +1 -1
  145. package/dist/bridges/catalog-load.js +13 -8
  146. package/dist/bridges/catalog-load.js.map +1 -1
  147. package/dist/bridges/catalog-types.d.ts +26 -2
  148. package/dist/bridges/catalog-types.d.ts.map +1 -1
  149. package/dist/bridges/catalog-types.js +11 -1
  150. package/dist/bridges/catalog-types.js.map +1 -1
  151. package/dist/bridges/evaluation-errors.d.ts +31 -1
  152. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  153. package/dist/bridges/evaluation-errors.js +20 -2
  154. package/dist/bridges/evaluation-errors.js.map +1 -1
  155. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  156. package/dist/bridges/evaluator-inputs.js +7 -5
  157. package/dist/bridges/evaluator-inputs.js.map +1 -1
  158. package/dist/bridges/evaluators.d.ts.map +1 -1
  159. package/dist/bridges/evaluators.js +27 -12
  160. package/dist/bridges/evaluators.js.map +1 -1
  161. package/dist/bridges/expr-parse.d.ts +11 -0
  162. package/dist/bridges/expr-parse.d.ts.map +1 -1
  163. package/dist/bridges/expr-parse.js +14 -5
  164. package/dist/bridges/expr-parse.js.map +1 -1
  165. package/dist/bridges/holds.d.ts +35 -3
  166. package/dist/bridges/holds.d.ts.map +1 -1
  167. package/dist/bridges/holds.js +117 -23
  168. package/dist/bridges/holds.js.map +1 -1
  169. package/dist/bridges/notices.d.ts.map +1 -1
  170. package/dist/bridges/notices.js +5 -5
  171. package/dist/bridges/notices.js.map +1 -1
  172. package/dist/bridges/relation-eval.d.ts +4 -4
  173. package/dist/bridges/relation-eval.d.ts.map +1 -1
  174. package/dist/bridges/relation-eval.js +15 -16
  175. package/dist/bridges/relation-eval.js.map +1 -1
  176. package/dist/bridges/sensitivity.d.ts.map +1 -1
  177. package/dist/bridges/sensitivity.js +3 -3
  178. package/dist/bridges/sensitivity.js.map +1 -1
  179. package/dist/bridges/validity.d.ts +33 -0
  180. package/dist/bridges/validity.d.ts.map +1 -0
  181. package/dist/bridges/validity.js +67 -0
  182. package/dist/bridges/validity.js.map +1 -0
  183. package/dist/canonical/entries/atomic.js +1 -3
  184. package/dist/canonical/entries/atomic.js.map +1 -1
  185. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  186. package/dist/canonical/entries/condensed-matter.js +4 -5
  187. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  188. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  189. package/dist/canonical/entries/dimensional-classics.js +3 -4
  190. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  191. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  192. package/dist/canonical/entries/electromagnetism.js +4 -10
  193. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  194. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  195. package/dist/canonical/entries/fluids-waves.js +3 -7
  196. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  197. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  198. package/dist/canonical/entries/mechanics.js +4 -6
  199. package/dist/canonical/entries/mechanics.js.map +1 -1
  200. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  201. package/dist/canonical/entries/nonmonomial.js +9 -17
  202. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  203. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  204. package/dist/canonical/entries/relativity.js +6 -6
  205. package/dist/canonical/entries/relativity.js.map +1 -1
  206. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  207. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  208. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  209. package/dist/canonical/fixed-points.d.ts +94 -0
  210. package/dist/canonical/fixed-points.d.ts.map +1 -0
  211. package/dist/canonical/fixed-points.js +81 -0
  212. package/dist/canonical/fixed-points.js.map +1 -0
  213. package/dist/canonical/linkage.d.ts.map +1 -1
  214. package/dist/canonical/linkage.js +25 -44
  215. package/dist/canonical/linkage.js.map +1 -1
  216. package/dist/canonical/normal-form.d.ts.map +1 -1
  217. package/dist/canonical/normal-form.js +5 -11
  218. package/dist/canonical/normal-form.js.map +1 -1
  219. package/dist/canonical/structural.d.ts +21 -21
  220. package/dist/canonical/structural.d.ts.map +1 -1
  221. package/dist/canonical/structural.js +40 -19
  222. package/dist/canonical/structural.js.map +1 -1
  223. package/dist/cases/catalog-checks.d.ts +10 -0
  224. package/dist/cases/catalog-checks.d.ts.map +1 -0
  225. package/dist/cases/catalog-checks.js +241 -0
  226. package/dist/cases/catalog-checks.js.map +1 -0
  227. package/dist/cases/catalog.d.ts +83 -0
  228. package/dist/cases/catalog.d.ts.map +1 -0
  229. package/dist/cases/catalog.js +118 -0
  230. package/dist/cases/catalog.js.map +1 -0
  231. package/dist/cases/engine.d.ts +13 -0
  232. package/dist/cases/engine.d.ts.map +1 -0
  233. package/dist/cases/engine.js +179 -0
  234. package/dist/cases/engine.js.map +1 -0
  235. package/dist/cases/index.d.ts.map +1 -1
  236. package/dist/cases/index.js +5 -7
  237. package/dist/cases/index.js.map +1 -1
  238. package/dist/cases/methods.d.ts +215 -0
  239. package/dist/cases/methods.d.ts.map +1 -0
  240. package/dist/cases/methods.js +743 -0
  241. package/dist/cases/methods.js.map +1 -0
  242. package/dist/cases/quadrature.d.ts +7 -9
  243. package/dist/cases/quadrature.d.ts.map +1 -1
  244. package/dist/cases/quadrature.js +28 -32
  245. package/dist/cases/quadrature.js.map +1 -1
  246. package/dist/cases/types.d.ts +12 -0
  247. package/dist/cases/types.d.ts.map +1 -1
  248. package/dist/cases/types.js.map +1 -1
  249. package/dist/cli/args.d.ts +25 -1
  250. package/dist/cli/args.d.ts.map +1 -1
  251. package/dist/cli/args.js +30 -8
  252. package/dist/cli/args.js.map +1 -1
  253. package/dist/cli/bindings.d.ts.map +1 -1
  254. package/dist/cli/bindings.js +5 -4
  255. package/dist/cli/bindings.js.map +1 -1
  256. package/dist/cli/command.d.ts +11 -1
  257. package/dist/cli/command.d.ts.map +1 -1
  258. package/dist/cli/command.js.map +1 -1
  259. package/dist/cli/commands/_atlas-map.d.ts +0 -9
  260. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  261. package/dist/cli/commands/_atlas-map.js +8 -18
  262. package/dist/cli/commands/_atlas-map.js.map +1 -1
  263. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  264. package/dist/cli/commands/_atlas-route.js +6 -2
  265. package/dist/cli/commands/_atlas-route.js.map +1 -1
  266. package/dist/cli/commands/_discovery-opts.d.ts +1 -0
  267. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  268. package/dist/cli/commands/_discovery-opts.js +9 -9
  269. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  270. package/dist/cli/commands/atlas.d.ts.map +1 -1
  271. package/dist/cli/commands/atlas.js +8 -5
  272. package/dist/cli/commands/atlas.js.map +1 -1
  273. package/dist/cli/commands/audit.d.ts.map +1 -1
  274. package/dist/cli/commands/audit.js +8 -1
  275. package/dist/cli/commands/audit.js.map +1 -1
  276. package/dist/cli/commands/axes.d.ts.map +1 -1
  277. package/dist/cli/commands/axes.js +20 -1
  278. package/dist/cli/commands/axes.js.map +1 -1
  279. package/dist/cli/commands/confront.d.ts.map +1 -1
  280. package/dist/cli/commands/confront.js +8 -14
  281. package/dist/cli/commands/confront.js.map +1 -1
  282. package/dist/cli/commands/derive.d.ts.map +1 -1
  283. package/dist/cli/commands/derive.js +22 -22
  284. package/dist/cli/commands/derive.js.map +1 -1
  285. package/dist/cli/commands/discover.d.ts.map +1 -1
  286. package/dist/cli/commands/discover.js +122 -73
  287. package/dist/cli/commands/discover.js.map +1 -1
  288. package/dist/cli/commands/eval.d.ts.map +1 -1
  289. package/dist/cli/commands/eval.js +1 -0
  290. package/dist/cli/commands/eval.js.map +1 -1
  291. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  292. package/dist/cli/commands/evaluate.js +67 -39
  293. package/dist/cli/commands/evaluate.js.map +1 -1
  294. package/dist/cli/commands/explain.d.ts.map +1 -1
  295. package/dist/cli/commands/explain.js +24 -3
  296. package/dist/cli/commands/explain.js.map +1 -1
  297. package/dist/cli/commands/ground.d.ts.map +1 -1
  298. package/dist/cli/commands/ground.js +7 -1
  299. package/dist/cli/commands/ground.js.map +1 -1
  300. package/dist/cli/commands/map.d.ts.map +1 -1
  301. package/dist/cli/commands/map.js +84 -11
  302. package/dist/cli/commands/map.js.map +1 -1
  303. package/dist/cli/commands/metric.d.ts.map +1 -1
  304. package/dist/cli/commands/metric.js +12 -9
  305. package/dist/cli/commands/metric.js.map +1 -1
  306. package/dist/cli/commands/path.d.ts +10 -0
  307. package/dist/cli/commands/path.d.ts.map +1 -1
  308. package/dist/cli/commands/path.js +25 -3
  309. package/dist/cli/commands/path.js.map +1 -1
  310. package/dist/cli/commands/probe.d.ts.map +1 -1
  311. package/dist/cli/commands/probe.js +59 -16
  312. package/dist/cli/commands/probe.js.map +1 -1
  313. package/dist/cli/commands/regime.d.ts.map +1 -1
  314. package/dist/cli/commands/regime.js +1 -0
  315. package/dist/cli/commands/regime.js.map +1 -1
  316. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  317. package/dist/cli/commands/retrieve.js +1 -0
  318. package/dist/cli/commands/retrieve.js.map +1 -1
  319. package/dist/cli/commands/search.d.ts.map +1 -1
  320. package/dist/cli/commands/search.js +1 -0
  321. package/dist/cli/commands/search.js.map +1 -1
  322. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  323. package/dist/cli/commands/symbolic.js +19 -28
  324. package/dist/cli/commands/symbolic.js.map +1 -1
  325. package/dist/cli/commands/testplan.d.ts.map +1 -1
  326. package/dist/cli/commands/testplan.js +4 -2
  327. package/dist/cli/commands/testplan.js.map +1 -1
  328. package/dist/cli/determination.d.ts +1 -0
  329. package/dist/cli/determination.d.ts.map +1 -1
  330. package/dist/cli/determination.js.map +1 -1
  331. package/dist/cli/expr-print.d.ts +0 -2
  332. package/dist/cli/expr-print.d.ts.map +1 -1
  333. package/dist/cli/expr-print.js +7 -31
  334. package/dist/cli/expr-print.js.map +1 -1
  335. package/dist/cli/flag-help.d.ts +1 -0
  336. package/dist/cli/flag-help.d.ts.map +1 -1
  337. package/dist/cli/flag-help.js +1 -0
  338. package/dist/cli/flag-help.js.map +1 -1
  339. package/dist/cli/graphs.d.ts +2 -0
  340. package/dist/cli/graphs.d.ts.map +1 -1
  341. package/dist/cli/graphs.js +1 -0
  342. package/dist/cli/graphs.js.map +1 -1
  343. package/dist/cli/main.d.ts +8 -0
  344. package/dist/cli/main.d.ts.map +1 -1
  345. package/dist/cli/main.js +19 -3
  346. package/dist/cli/main.js.map +1 -1
  347. package/dist/cli/numeric-flag.d.ts +12 -0
  348. package/dist/cli/numeric-flag.d.ts.map +1 -0
  349. package/dist/cli/numeric-flag.js +44 -0
  350. package/dist/cli/numeric-flag.js.map +1 -0
  351. package/dist/cli/output.d.ts +28 -0
  352. package/dist/cli/output.d.ts.map +1 -1
  353. package/dist/cli/output.js +23 -0
  354. package/dist/cli/output.js.map +1 -1
  355. package/dist/cli/record-reach.js +2 -2
  356. package/dist/cli/record-reach.js.map +1 -1
  357. package/dist/cli/record-tables.d.ts.map +1 -1
  358. package/dist/cli/record-tables.js +6 -5
  359. package/dist/cli/record-tables.js.map +1 -1
  360. package/dist/cli/record.d.ts +1 -5
  361. package/dist/cli/record.d.ts.map +1 -1
  362. package/dist/cli/record.js +9 -8
  363. package/dist/cli/record.js.map +1 -1
  364. package/dist/cli/search-index.d.ts.map +1 -1
  365. package/dist/cli/search-index.js +7 -6
  366. package/dist/cli/search-index.js.map +1 -1
  367. package/dist/cli/statuses.d.ts +0 -2
  368. package/dist/cli/statuses.d.ts.map +1 -1
  369. package/dist/cli/statuses.js +12 -9
  370. package/dist/cli/statuses.js.map +1 -1
  371. package/dist/cli/stored-results.d.ts +7 -0
  372. package/dist/cli/stored-results.d.ts.map +1 -0
  373. package/dist/cli/stored-results.js +23 -0
  374. package/dist/cli/stored-results.js.map +1 -0
  375. package/dist/cli/version.d.ts +1 -0
  376. package/dist/cli/version.d.ts.map +1 -1
  377. package/dist/cli/version.js +8 -5
  378. package/dist/cli/version.js.map +1 -1
  379. package/dist/cli-api.d.ts +36 -5
  380. package/dist/cli-api.d.ts.map +1 -1
  381. package/dist/cli-api.js +30 -4
  382. package/dist/cli-api.js.map +1 -1
  383. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  384. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  385. package/dist/composition/algebraic-equivalence.js +115 -0
  386. package/dist/composition/algebraic-equivalence.js.map +1 -0
  387. package/dist/composition/axes.d.ts +0 -6
  388. package/dist/composition/axes.d.ts.map +1 -1
  389. package/dist/composition/axes.js +6 -6
  390. package/dist/composition/axes.js.map +1 -1
  391. package/dist/composition/axis-audit.d.ts +47 -20
  392. package/dist/composition/axis-audit.d.ts.map +1 -1
  393. package/dist/composition/axis-audit.js +82 -9
  394. package/dist/composition/axis-audit.js.map +1 -1
  395. package/dist/composition/bridge-analysis.d.ts +17 -0
  396. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  397. package/dist/composition/bridge-analysis.js +102 -55
  398. package/dist/composition/bridge-analysis.js.map +1 -1
  399. package/dist/composition/canonical-compare.d.ts +40 -0
  400. package/dist/composition/canonical-compare.d.ts.map +1 -1
  401. package/dist/composition/canonical-compare.js +122 -24
  402. package/dist/composition/canonical-compare.js.map +1 -1
  403. package/dist/composition/canonical-graph.d.ts +3 -3
  404. package/dist/composition/canonical-graph.d.ts.map +1 -1
  405. package/dist/composition/canonical-graph.js +11 -38
  406. package/dist/composition/canonical-graph.js.map +1 -1
  407. package/dist/composition/canonical-json.js +2 -2
  408. package/dist/composition/canonical-json.js.map +1 -1
  409. package/dist/composition/catalog-graph.d.ts.map +1 -1
  410. package/dist/composition/catalog-graph.js +2 -5
  411. package/dist/composition/catalog-graph.js.map +1 -1
  412. package/dist/composition/chain-candidate.d.ts +8 -0
  413. package/dist/composition/chain-candidate.d.ts.map +1 -1
  414. package/dist/composition/chain-candidate.js +9 -2
  415. package/dist/composition/chain-candidate.js.map +1 -1
  416. package/dist/composition/chain-match.d.ts +6 -3
  417. package/dist/composition/chain-match.d.ts.map +1 -1
  418. package/dist/composition/chain-match.js +4 -1
  419. package/dist/composition/chain-match.js.map +1 -1
  420. package/dist/composition/chain-result.d.ts.map +1 -1
  421. package/dist/composition/chain-result.js +2 -14
  422. package/dist/composition/chain-result.js.map +1 -1
  423. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  424. package/dist/composition/compose-symbolic.js +3 -2
  425. package/dist/composition/compose-symbolic.js.map +1 -1
  426. package/dist/composition/compose.d.ts.map +1 -1
  427. package/dist/composition/compose.js +13 -5
  428. package/dist/composition/compose.js.map +1 -1
  429. package/dist/composition/composition-recovery.d.ts.map +1 -1
  430. package/dist/composition/composition-recovery.js +4 -7
  431. package/dist/composition/composition-recovery.js.map +1 -1
  432. package/dist/composition/consequence.d.ts +15 -5
  433. package/dist/composition/consequence.d.ts.map +1 -1
  434. package/dist/composition/consequence.js +6 -4
  435. package/dist/composition/consequence.js.map +1 -1
  436. package/dist/composition/discovery.d.ts +129 -9
  437. package/dist/composition/discovery.d.ts.map +1 -1
  438. package/dist/composition/discovery.js +171 -67
  439. package/dist/composition/discovery.js.map +1 -1
  440. package/dist/composition/edge.d.ts +21 -2
  441. package/dist/composition/edge.d.ts.map +1 -1
  442. package/dist/composition/edge.js +23 -1
  443. package/dist/composition/edge.js.map +1 -1
  444. package/dist/composition/enumerate.d.ts.map +1 -1
  445. package/dist/composition/enumerate.js +18 -3
  446. package/dist/composition/enumerate.js.map +1 -1
  447. package/dist/composition/evaluate-relation.d.ts +35 -11
  448. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  449. package/dist/composition/evaluate-relation.js +60 -39
  450. package/dist/composition/evaluate-relation.js.map +1 -1
  451. package/dist/composition/explain.d.ts +3 -12
  452. package/dist/composition/explain.d.ts.map +1 -1
  453. package/dist/composition/explain.js +7 -20
  454. package/dist/composition/explain.js.map +1 -1
  455. package/dist/composition/expr-eval.d.ts +1 -1
  456. package/dist/composition/expr-eval.d.ts.map +1 -1
  457. package/dist/composition/expr-eval.js +6 -15
  458. package/dist/composition/expr-eval.js.map +1 -1
  459. package/dist/composition/expr-simplify.d.ts +26 -14
  460. package/dist/composition/expr-simplify.d.ts.map +1 -1
  461. package/dist/composition/expr-simplify.js +64 -72
  462. package/dist/composition/expr-simplify.js.map +1 -1
  463. package/dist/composition/formula-shape.d.ts +23 -4
  464. package/dist/composition/formula-shape.d.ts.map +1 -1
  465. package/dist/composition/formula-shape.js +57 -17
  466. package/dist/composition/formula-shape.js.map +1 -1
  467. package/dist/composition/graph-structure.d.ts +98 -0
  468. package/dist/composition/graph-structure.d.ts.map +1 -0
  469. package/dist/composition/graph-structure.js +167 -0
  470. package/dist/composition/graph-structure.js.map +1 -0
  471. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  472. package/dist/composition/graph-viz-svg.js +1 -1
  473. package/dist/composition/graph-viz-svg.js.map +1 -1
  474. package/dist/composition/graph-viz.d.ts.map +1 -1
  475. package/dist/composition/graph-viz.js +8 -37
  476. package/dist/composition/graph-viz.js.map +1 -1
  477. package/dist/composition/grounding.d.ts.map +1 -1
  478. package/dist/composition/grounding.js +19 -7
  479. package/dist/composition/grounding.js.map +1 -1
  480. package/dist/composition/identifiability.d.ts +91 -4
  481. package/dist/composition/identifiability.d.ts.map +1 -1
  482. package/dist/composition/identifiability.js +363 -6
  483. package/dist/composition/identifiability.js.map +1 -1
  484. package/dist/composition/index.d.ts +8 -4
  485. package/dist/composition/index.d.ts.map +1 -1
  486. package/dist/composition/index.js +3 -2
  487. package/dist/composition/index.js.map +1 -1
  488. package/dist/composition/mathts-quiet.d.ts +7 -8
  489. package/dist/composition/mathts-quiet.d.ts.map +1 -1
  490. package/dist/composition/mathts-quiet.js +7 -16
  491. package/dist/composition/mathts-quiet.js.map +1 -1
  492. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  493. package/dist/composition/mathts-scalar-symbols.js +2 -1
  494. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  495. package/dist/composition/own-equation-magnitude.d.ts +95 -0
  496. package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
  497. package/dist/composition/own-equation-magnitude.js +270 -0
  498. package/dist/composition/own-equation-magnitude.js.map +1 -0
  499. package/dist/composition/probe/backend-protocol.d.ts +3 -0
  500. package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
  501. package/dist/composition/probe/backend-protocol.js.map +1 -1
  502. package/dist/composition/probe/candidate-store.d.ts +1 -0
  503. package/dist/composition/probe/candidate-store.d.ts.map +1 -1
  504. package/dist/composition/probe/candidate-store.js +1 -0
  505. package/dist/composition/probe/candidate-store.js.map +1 -1
  506. package/dist/composition/probe/corpus.d.ts +8 -4
  507. package/dist/composition/probe/corpus.d.ts.map +1 -1
  508. package/dist/composition/probe/corpus.js +23 -12
  509. package/dist/composition/probe/corpus.js.map +1 -1
  510. package/dist/composition/probe/dataset.d.ts +18 -0
  511. package/dist/composition/probe/dataset.d.ts.map +1 -1
  512. package/dist/composition/probe/dataset.js +95 -50
  513. package/dist/composition/probe/dataset.js.map +1 -1
  514. package/dist/composition/probe/experiment-design.d.ts +7 -1
  515. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  516. package/dist/composition/probe/experiment-design.js +44 -24
  517. package/dist/composition/probe/experiment-design.js.map +1 -1
  518. package/dist/composition/probe/falsify.d.ts +2 -0
  519. package/dist/composition/probe/falsify.d.ts.map +1 -1
  520. package/dist/composition/probe/falsify.js +2 -0
  521. package/dist/composition/probe/falsify.js.map +1 -1
  522. package/dist/composition/probe/fit.d.ts +7 -0
  523. package/dist/composition/probe/fit.d.ts.map +1 -1
  524. package/dist/composition/probe/fit.js +46 -22
  525. package/dist/composition/probe/fit.js.map +1 -1
  526. package/dist/composition/probe/frontier.d.ts.map +1 -1
  527. package/dist/composition/probe/frontier.js +33 -15
  528. package/dist/composition/probe/frontier.js.map +1 -1
  529. package/dist/composition/probe/generator.d.ts +30 -1
  530. package/dist/composition/probe/generator.d.ts.map +1 -1
  531. package/dist/composition/probe/generator.js +58 -36
  532. package/dist/composition/probe/generator.js.map +1 -1
  533. package/dist/composition/probe/index.d.ts +14 -0
  534. package/dist/composition/probe/index.d.ts.map +1 -1
  535. package/dist/composition/probe/index.js +6 -0
  536. package/dist/composition/probe/index.js.map +1 -1
  537. package/dist/composition/probe/limits.d.ts +25 -1
  538. package/dist/composition/probe/limits.d.ts.map +1 -1
  539. package/dist/composition/probe/limits.js +53 -11
  540. package/dist/composition/probe/limits.js.map +1 -1
  541. package/dist/composition/probe/pipeline.d.ts +5 -0
  542. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  543. package/dist/composition/probe/pipeline.js +73 -24
  544. package/dist/composition/probe/pipeline.js.map +1 -1
  545. package/dist/composition/probe/power-law.d.ts +121 -0
  546. package/dist/composition/probe/power-law.d.ts.map +1 -0
  547. package/dist/composition/probe/power-law.js +251 -0
  548. package/dist/composition/probe/power-law.js.map +1 -0
  549. package/dist/composition/probe/problem.d.ts +8 -4
  550. package/dist/composition/probe/problem.d.ts.map +1 -1
  551. package/dist/composition/probe/problem.js +177 -49
  552. package/dist/composition/probe/problem.js.map +1 -1
  553. package/dist/composition/probe/report.js +1 -1
  554. package/dist/composition/probe/report.js.map +1 -1
  555. package/dist/composition/probe/residual.d.ts +7 -1
  556. package/dist/composition/probe/residual.d.ts.map +1 -1
  557. package/dist/composition/probe/residual.js +10 -7
  558. package/dist/composition/probe/residual.js.map +1 -1
  559. package/dist/composition/probe/run-manifest.d.ts +1 -0
  560. package/dist/composition/probe/run-manifest.d.ts.map +1 -1
  561. package/dist/composition/probe/run-manifest.js.map +1 -1
  562. package/dist/composition/probe/scalar-search.d.ts +50 -0
  563. package/dist/composition/probe/scalar-search.d.ts.map +1 -0
  564. package/dist/composition/probe/scalar-search.js +169 -0
  565. package/dist/composition/probe/scalar-search.js.map +1 -0
  566. package/dist/composition/probe/scoring.d.ts +1 -0
  567. package/dist/composition/probe/scoring.d.ts.map +1 -1
  568. package/dist/composition/probe/scoring.js.map +1 -1
  569. package/dist/composition/probe/structure.d.ts +82 -17
  570. package/dist/composition/probe/structure.d.ts.map +1 -1
  571. package/dist/composition/probe/structure.js +129 -55
  572. package/dist/composition/probe/structure.js.map +1 -1
  573. package/dist/composition/probe/study.d.ts +31 -9
  574. package/dist/composition/probe/study.d.ts.map +1 -1
  575. package/dist/composition/probe/study.js +235 -184
  576. package/dist/composition/probe/study.js.map +1 -1
  577. package/dist/composition/probe/t-tail.d.ts +16 -0
  578. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  579. package/dist/composition/probe/t-tail.js +29 -0
  580. package/dist/composition/probe/t-tail.js.map +1 -0
  581. package/dist/composition/probe/types.d.ts +3 -0
  582. package/dist/composition/probe/types.d.ts.map +1 -1
  583. package/dist/composition/probe/types.js.map +1 -1
  584. package/dist/composition/proposed-bridges.d.ts +52 -12
  585. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  586. package/dist/composition/proposed-bridges.js +107 -60
  587. package/dist/composition/proposed-bridges.js.map +1 -1
  588. package/dist/composition/quantity-clusters.d.ts +48 -0
  589. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  590. package/dist/composition/quantity-clusters.js +98 -0
  591. package/dist/composition/quantity-clusters.js.map +1 -0
  592. package/dist/composition/rational-exponent.d.ts +40 -0
  593. package/dist/composition/rational-exponent.d.ts.map +1 -0
  594. package/dist/composition/rational-exponent.js +65 -0
  595. package/dist/composition/rational-exponent.js.map +1 -0
  596. package/dist/composition/representative-values.d.ts +22 -0
  597. package/dist/composition/representative-values.d.ts.map +1 -1
  598. package/dist/composition/representative-values.js +29 -0
  599. package/dist/composition/representative-values.js.map +1 -1
  600. package/dist/composition/retrodiction.d.ts +15 -0
  601. package/dist/composition/retrodiction.d.ts.map +1 -1
  602. package/dist/composition/retrodiction.js +12 -4
  603. package/dist/composition/retrodiction.js.map +1 -1
  604. package/dist/composition/user-equation.d.ts +1 -0
  605. package/dist/composition/user-equation.d.ts.map +1 -1
  606. package/dist/composition/user-equation.js +3 -2
  607. package/dist/composition/user-equation.js.map +1 -1
  608. package/dist/core/assignment.d.ts +19 -0
  609. package/dist/core/assignment.d.ts.map +1 -0
  610. package/dist/core/assignment.js +19 -0
  611. package/dist/core/assignment.js.map +1 -0
  612. package/dist/core/compare.d.ts +32 -0
  613. package/dist/core/compare.d.ts.map +1 -0
  614. package/dist/core/compare.js +46 -0
  615. package/dist/core/compare.js.map +1 -0
  616. package/dist/core/constants.d.ts +42 -41
  617. package/dist/core/constants.d.ts.map +1 -1
  618. package/dist/core/constants.js +71 -51
  619. package/dist/core/constants.js.map +1 -1
  620. package/dist/core/data-file.d.ts +7 -0
  621. package/dist/core/data-file.d.ts.map +1 -1
  622. package/dist/core/data-file.js +17 -0
  623. package/dist/core/data-file.js.map +1 -1
  624. package/dist/core/format.d.ts +36 -0
  625. package/dist/core/format.d.ts.map +1 -0
  626. package/dist/core/format.js +39 -0
  627. package/dist/core/format.js.map +1 -0
  628. package/dist/core/hash.d.ts +14 -0
  629. package/dist/core/hash.d.ts.map +1 -0
  630. package/dist/core/hash.js +17 -0
  631. package/dist/core/hash.js.map +1 -0
  632. package/dist/core/json-schema.d.ts +2 -0
  633. package/dist/core/json-schema.d.ts.map +1 -1
  634. package/dist/core/json-schema.js +14 -13
  635. package/dist/core/json-schema.js.map +1 -1
  636. package/dist/core/labeled-tensor.d.ts.map +1 -1
  637. package/dist/core/labeled-tensor.js +0 -8
  638. package/dist/core/labeled-tensor.js.map +1 -1
  639. package/dist/core/mathts-read.d.ts +25 -0
  640. package/dist/core/mathts-read.d.ts.map +1 -0
  641. package/dist/core/mathts-read.js +51 -0
  642. package/dist/core/mathts-read.js.map +1 -0
  643. package/dist/core/tensor.d.ts.map +1 -1
  644. package/dist/core/tensor.js +24 -0
  645. package/dist/core/tensor.js.map +1 -1
  646. package/dist/core/types.d.ts +5 -5
  647. package/dist/diff/bridge-ast-gradient.d.ts +27 -23
  648. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  649. package/dist/diff/bridge-ast-gradient.js +75 -173
  650. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  651. package/dist/diff/bridge-gradient.d.ts +19 -6
  652. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  653. package/dist/diff/bridge-gradient.js +19 -11
  654. package/dist/diff/bridge-gradient.js.map +1 -1
  655. package/dist/diff/bridge-specs.d.ts.map +1 -1
  656. package/dist/diff/bridge-specs.js +3 -0
  657. package/dist/diff/bridge-specs.js.map +1 -1
  658. package/dist/dimensional/algebra.d.ts +18 -0
  659. package/dist/dimensional/algebra.d.ts.map +1 -1
  660. package/dist/dimensional/algebra.js +41 -1
  661. package/dist/dimensional/algebra.js.map +1 -1
  662. package/dist/dimensional/ast-builders.d.ts +7 -0
  663. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  664. package/dist/dimensional/ast-builders.js +11 -0
  665. package/dist/dimensional/ast-builders.js.map +1 -1
  666. package/dist/dimensional/ast-leaves.d.ts +81 -0
  667. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  668. package/dist/dimensional/ast-leaves.js +146 -0
  669. package/dist/dimensional/ast-leaves.js.map +1 -0
  670. package/dist/dimensional/ast-types.d.ts +15 -0
  671. package/dist/dimensional/ast-types.d.ts.map +1 -1
  672. package/dist/dimensional/ast-types.js.map +1 -1
  673. package/dist/dimensional/buckingham.d.ts.map +1 -1
  674. package/dist/dimensional/buckingham.js +15 -27
  675. package/dist/dimensional/buckingham.js.map +1 -1
  676. package/dist/dimensional/constant-rows.js +9 -9
  677. package/dist/dimensional/constant-rows.js.map +1 -1
  678. package/dist/dimensional/curvature-composite.d.ts +1 -1
  679. package/dist/dimensional/curvature-composite.js.map +1 -1
  680. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  681. package/dist/dimensional/dimension-inference.js +1 -2
  682. package/dist/dimensional/dimension-inference.js.map +1 -1
  683. package/dist/dimensional/errors.d.ts +1 -1
  684. package/dist/dimensional/errors.d.ts.map +1 -1
  685. package/dist/dimensional/errors.js +1 -15
  686. package/dist/dimensional/errors.js.map +1 -1
  687. package/dist/dimensional/exact-scale.d.ts +24 -11
  688. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  689. package/dist/dimensional/exact-scale.js +122 -130
  690. package/dist/dimensional/exact-scale.js.map +1 -1
  691. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  692. package/dist/dimensional/gauge-field.js +2 -2
  693. package/dist/dimensional/gauge-field.js.map +1 -1
  694. package/dist/dimensional/hyphen-names.d.ts +12 -2
  695. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  696. package/dist/dimensional/hyphen-names.js +44 -19
  697. package/dist/dimensional/hyphen-names.js.map +1 -1
  698. package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
  699. package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
  700. package/dist/dimensional/mathts-unit-delegation.js +187 -0
  701. package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
  702. package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
  703. package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
  704. package/dist/dimensional/mathts-unit-wrapper.js +190 -0
  705. package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
  706. package/dist/dimensional/metric.d.ts.map +1 -1
  707. package/dist/dimensional/metric.js +0 -1
  708. package/dist/dimensional/metric.js.map +1 -1
  709. package/dist/dimensional/scalar-lowering.d.ts +21 -0
  710. package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
  711. package/dist/dimensional/scalar-lowering.js +45 -0
  712. package/dist/dimensional/scalar-lowering.js.map +1 -0
  713. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  714. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  715. package/dist/dimensional/symbolic-constants.js +13 -1
  716. package/dist/dimensional/symbolic-constants.js.map +1 -1
  717. package/dist/dimensional/types.d.ts +36 -0
  718. package/dist/dimensional/types.d.ts.map +1 -1
  719. package/dist/dimensional/types.js +45 -7
  720. package/dist/dimensional/types.js.map +1 -1
  721. package/dist/dimensional/unit-data.d.ts +5 -1
  722. package/dist/dimensional/unit-data.d.ts.map +1 -1
  723. package/dist/dimensional/unit-data.js +30 -6
  724. package/dist/dimensional/unit-data.js.map +1 -1
  725. package/dist/dimensional/units.d.ts +2 -0
  726. package/dist/dimensional/units.d.ts.map +1 -1
  727. package/dist/dimensional/units.js +59 -3
  728. package/dist/dimensional/units.js.map +1 -1
  729. package/dist/dimensional/validator.d.ts +2 -0
  730. package/dist/dimensional/validator.d.ts.map +1 -1
  731. package/dist/dimensional/validator.js.map +1 -1
  732. package/dist/index.d.ts +9 -3
  733. package/dist/index.d.ts.map +1 -1
  734. package/dist/index.js +10 -4
  735. package/dist/index.js.map +1 -1
  736. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  737. package/dist/numerical/christoffel-flat.js +3 -2
  738. package/dist/numerical/christoffel-flat.js.map +1 -1
  739. package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
  740. package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
  741. package/dist/numerical/connection-lowering-helpers.js +11 -15
  742. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  743. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  744. package/dist/numerical/covariant-eikonal.js +34 -11
  745. package/dist/numerical/covariant-eikonal.js.map +1 -1
  746. package/dist/numerical/curvature-lowering-helpers.js +3 -2
  747. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  748. package/dist/numerical/errors.d.ts.map +1 -1
  749. package/dist/numerical/errors.js +0 -3
  750. package/dist/numerical/errors.js.map +1 -1
  751. package/dist/numerical/finite-difference.d.ts +22 -0
  752. package/dist/numerical/finite-difference.d.ts.map +1 -0
  753. package/dist/numerical/finite-difference.js +27 -0
  754. package/dist/numerical/finite-difference.js.map +1 -0
  755. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  756. package/dist/numerical/geodesic-integrator.js +22 -14
  757. package/dist/numerical/geodesic-integrator.js.map +1 -1
  758. package/dist/numerical/geometrized.d.ts.map +1 -1
  759. package/dist/numerical/geometrized.js +0 -1
  760. package/dist/numerical/geometrized.js.map +1 -1
  761. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  762. package/dist/numerical/mathts-engine.js +10 -24
  763. package/dist/numerical/mathts-engine.js.map +1 -1
  764. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  765. package/dist/numerical/metric-inverse.js +83 -46
  766. package/dist/numerical/metric-inverse.js.map +1 -1
  767. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  768. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  769. package/dist/numerical/null-ray-integrator.js +12 -12
  770. package/dist/numerical/null-ray-integrator.js.map +1 -1
  771. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  772. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  773. package/dist/numerical/pderiv.d.ts.map +1 -1
  774. package/dist/numerical/pderiv.js +2 -6
  775. package/dist/numerical/pderiv.js.map +1 -1
  776. package/dist/numerical/perihelion-finder.d.ts +0 -36
  777. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  778. package/dist/numerical/perihelion-finder.js +41 -87
  779. package/dist/numerical/perihelion-finder.js.map +1 -1
  780. package/dist/numerical/quadrature.d.ts.map +1 -1
  781. package/dist/numerical/quadrature.js +11 -13
  782. package/dist/numerical/quadrature.js.map +1 -1
  783. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  784. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  785. package/dist/numerical/rk4-trajectory.js +37 -0
  786. package/dist/numerical/rk4-trajectory.js.map +1 -0
  787. package/dist/numerical/schwarzschild.d.ts +14 -0
  788. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  789. package/dist/numerical/schwarzschild.js +17 -0
  790. package/dist/numerical/schwarzschild.js.map +1 -0
  791. package/dist/numerical/spacetime-metrics.d.ts +12 -0
  792. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  793. package/dist/numerical/spacetime-metrics.js +72 -56
  794. package/dist/numerical/spacetime-metrics.js.map +1 -1
  795. package/dist/numerical/statistics.d.ts +24 -0
  796. package/dist/numerical/statistics.d.ts.map +1 -0
  797. package/dist/numerical/statistics.js +52 -0
  798. package/dist/numerical/statistics.js.map +1 -0
  799. package/dist/numerical/strides.d.ts +3 -2
  800. package/dist/numerical/strides.d.ts.map +1 -1
  801. package/dist/numerical/strides.js +3 -10
  802. package/dist/numerical/strides.js.map +1 -1
  803. package/dist/numerical/tensor-engine.d.ts +21 -0
  804. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  805. package/dist/numerical/tensor-engine.js +12 -0
  806. package/dist/numerical/tensor-engine.js.map +1 -1
  807. package/dist/relations/regime.d.ts +10 -0
  808. package/dist/relations/regime.d.ts.map +1 -1
  809. package/dist/relations/regime.js +18 -1
  810. package/dist/relations/regime.js.map +1 -1
  811. package/package.json +9 -12
  812. package/dist/cases/brownian-sphere.d.ts +0 -68
  813. package/dist/cases/brownian-sphere.d.ts.map +0 -1
  814. package/dist/cases/brownian-sphere.js +0 -354
  815. package/dist/cases/brownian-sphere.js.map +0 -1
  816. package/dist/cases/damped-resonator.d.ts +0 -23
  817. package/dist/cases/damped-resonator.d.ts.map +0 -1
  818. package/dist/cases/damped-resonator.js +0 -224
  819. package/dist/cases/damped-resonator.js.map +0 -1
  820. package/dist/cases/kepler-rv.d.ts +0 -13
  821. package/dist/cases/kepler-rv.d.ts.map +0 -1
  822. package/dist/cases/kepler-rv.js +0 -172
  823. package/dist/cases/kepler-rv.js.map +0 -1
  824. package/dist/cases/lumped-cooling.d.ts +0 -46
  825. package/dist/cases/lumped-cooling.d.ts.map +0 -1
  826. package/dist/cases/lumped-cooling.js +0 -261
  827. package/dist/cases/lumped-cooling.js.map +0 -1
  828. package/dist/cases/resistor-noise.d.ts +0 -14
  829. package/dist/cases/resistor-noise.d.ts.map +0 -1
  830. package/dist/cases/resistor-noise.js +0 -215
  831. package/dist/cases/resistor-noise.js.map +0 -1
  832. package/dist/cases/skin-depth.d.ts +0 -21
  833. package/dist/cases/skin-depth.d.ts.map +0 -1
  834. package/dist/cases/skin-depth.js +0 -174
  835. package/dist/cases/skin-depth.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/composition/explain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * \"Explain this quantity\" — the unified entry point over the three\n * bridge-inference primitives (docs/planning/Bridge-Inference-Epistemics-\n * Note.md). Given a target quantity and a set of knowns (names, or\n * name→value), it composes:\n *\n * 1. the identifiability classifier — CAN the graph compute the target\n * from the knowns, and via how many derivations? Independence is\n * counted by catalog bridge (`beId`): two routes that restate one bridge\n * agree by algebra, and the summary says so.\n * 2. the retrodiction harness — when values are supplied, RECOVER the\n * value via each derivation and (for over-determined targets) check\n * they agree;\n * 3. the Buckingham-π enumerator — is the known set even DIMENSIONALLY\n * sufficient to fix the target up to a constant, independent of the\n * graph's encoded edges?\n *\n * The three answer complementary questions, so the explanation is richer\n * than any one alone: the graph may compute a target whose dimensional\n * closure relies on constants baked into the evaluator (e.g. r_s = 2GM/c²\n * — mass alone is not dimensionally sufficient), and the classifier +\n * Buckingham layer make that explicit together.\n *\n * @module composition/explain\n */\n\nimport type { BridgeEdge } from './edge.js';\nimport type { QuantityIdentification } from './compose.js';\nimport { QUANTITY_IDENTIFICATIONS } from './compose.js';\nimport type { IdentifiabilityResult } from './identifiability.js';\nimport { classifyIdentifiability, forwardClosure } from './identifiability.js';\nimport type { RetrodictionResult } from './retrodiction.js';\nimport { retrodictNode } from './retrodiction.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport { CANONICAL_GROUP_PREFACTORS } from './canonical-prefactors.js';\nimport { canonicalById } from '../canonical/registry.js';\n\n/**\n * Text form of a recovered quantity: `digits` significant digits (15 by default, the precision an\n * evaluator input is already passed at; a statistic such as a residual in σ asks for 3). JSON keeps\n * the number; this is only the printed form. An integer stays an integer (`1`, not `1.0000e+0`).\n * Every command prints a number through this function or through {@link formatExact}.\n * @internal\n */\nexport function formatQuantity(value: number, digits = 15): string {\n return String(Number(value.toPrecision(digits)));\n}\n\n/**\n * Text form of a computed value that a reader may need to reproduce bit for bit: the shortest\n * decimal that round-trips to the same double (`upt evaluate`'s outputs). A recovered or compared\n * quantity prints through {@link formatQuantity} instead.\n * @internal\n */\nexport function formatExact(value: number): string {\n return String(value);\n}\nimport type { DimensionalDeterminationResult } from '../dimensional/buckingham.js';\nimport { dimensionallyDetermines } from '../dimensional/buckingham.js';\nimport { collapseSynonymGovernors } from './aliases.js';\nimport { formulaShape } from './formula-shape.js';\n\n/** One structural derivation of the target, with the recovered value when\n * ground-truth values were supplied. @public */\nexport interface DerivationExplanation {\n readonly edge: string;\n /**\n * The catalog bridge the last edge encodes (`BridgeEdge.beId`), `null` for a\n * law or an uncatalogued edge. Two routes with the same `beId` are one\n * bridge restated, so their agreement is algebra, not a check.\n */\n readonly beId: number | null;\n readonly label: string;\n /** The edge's immediate (last-hop) source quantities. */\n readonly sources: readonly string[];\n /**\n * The LEAF inputs this derivation ultimately depends on — its immediate\n * sources traced back through every intermediate to the known set. The\n * full-chain (leaf-to-target) view, vs `sources` (last-hop). A subset of\n * the known set.\n */\n readonly leafInputs: readonly string[];\n /**\n * The target as a dimensionless-constant-times-monomial in the LEAF\n * inputs, when those leaves dimensionally fix it (Buckingham-π over the\n * full chain). Absent when the leaves rely on dimensionful constants\n * baked into the evaluators (the common case for the bridge graph).\n */\n readonly dimensionalForm?: {\n readonly monomial: Readonly<Record<string, number>>;\n /** e.g. `period ∝ length^1·gravity^-1` (up to a dimensionless constant). */\n readonly formula: string;\n };\n /** Value recovered via this derivation (only when values were given). */\n readonly value?: number;\n}\n\n/** Options for {@link explainQuantity}. @public */\nexport interface ExplainOptions {\n readonly identifications?: readonly QuantityIdentification[];\n /** Consistency tolerance forwarded to the retrodiction harness. */\n readonly tolerance?: number;\n /**\n * Dimensions for known names that are not graph quantities (e.g. raw\n * constants `G`, `c`, `hbar`) — lets the Buckingham layer test a known\n * set richer than the graph's nodes.\n */\n readonly extraDimensions?: Readonly<Record<string, Dimension>>;\n}\n\n/** The unified explanation of one quantity. @public */\nexport interface QuantityExplanation {\n readonly target: string;\n readonly known: readonly string[];\n /** Structural verdict (under/exactly/over-determined or given). */\n readonly identifiability: IdentifiabilityResult;\n /** One entry per independent derivation the classifier found. */\n readonly derivations: readonly DerivationExplanation[];\n /** Retrodiction result, present when ≥2 derivations fired on values. */\n readonly consistency?: RetrodictionResult;\n /** Agreed recovered value (consistent or single), when values supplied. */\n readonly recoveredValue?: number;\n /**\n * Where the numeric factor came from. `unset` is not the same as a\n * missing `recoveredValue`: the inputs were read and the factor has\n * no source. `group` means a bound dimensionless group supplied it.\n */\n readonly coefficient?: 'sourced' | 'group' | 'unset';\n /** Whether the KNOWN set dimensionally fixes the target (Buckingham-π);\n * absent when the target has no resolvable dimension. */\n readonly dimensional?: DimensionalDeterminationResult;\n /** Derivations that refused the given values, each under its own kind (`RetrodictionRefusal`). */\n readonly refusals?: RetrodictionResult['refusals'];\n /** Upstream gaps for an under-determined target (from the classifier). */\n readonly blockingFrontier: readonly string[];\n /** Plain-language synthesis of the above. */\n readonly summary: string;\n}\n\n/**\n * A Buckingham monomial is the encoded formula only when scaling each known\n * input scales the recovered value by that exponent. A monomial such as\n * `n^(-1/3)` or `∝ 1` can share the target's dimension and still not be the\n * formula, because the formula carries constants the monomial did not use.\n * Samples that the domain refuses leave the monomial in place: this check\n * does not invent a second domain.\n */\nfunction encodedMatchesMonomial(\n edges: readonly BridgeEdge[],\n target: string,\n knownNames: readonly string[],\n monomial: Readonly<Record<string, number>>,\n identifications: readonly QuantityIdentification[],\n): boolean {\n if (knownNames.length === 0) return true;\n const base: Record<string, number> = {};\n knownNames.forEach((name, i) => {\n base[name] = 1.7 + 0.3 * i;\n });\n const read = (values: Record<string, number>): number | undefined => {\n const retro = retrodictNode(edges, values, target, { identifications });\n const hit = retro.predictions.find((prediction) => Number.isFinite(prediction.value) && prediction.value !== 0);\n return hit?.value;\n };\n const origin = read(base);\n if (origin === undefined) return true;\n for (const name of knownNames) {\n const current = base[name];\n if (current === undefined) return true;\n const next = read({ ...base, [name]: current * 4 });\n if (next === undefined) return true;\n const exponent = monomial[name] ?? 0;\n // A known name the evaluator does not read (G declared beside a law that\n // already bakes G in) does not move the value. That is not a mismatch.\n const unchanged = Math.abs(next - origin) / Math.max(Math.abs(origin), 1e-300) < 1e-9;\n if (unchanged && Math.abs(exponent) > 1e-9) continue;\n const expected = origin * Math.pow(4, exponent);\n const scale = Math.max(Math.abs(expected), Math.abs(next), 1e-300);\n if (Math.abs(next - expected) / scale > 1e-6) return false;\n }\n return true;\n}\n\nfunction buildDimMap(\n edges: readonly BridgeEdge[],\n extra?: Readonly<Record<string, Dimension>>,\n): Map<string, Dimension> {\n const m = new Map<string, Dimension>();\n for (const e of edges) {\n for (const s of e.sources) if (!m.has(s.name)) m.set(s.name, s.dim);\n if (!m.has(e.target.name)) m.set(e.target.name, e.target.dim);\n }\n if (extra) for (const [k, v] of Object.entries(extra)) m.set(k, v);\n return m;\n}\n\n/**\n * Trace `startSources` back through every intermediate to the leaf inputs\n * — names in `known`, or terminals that no determinable edge produces.\n * Never expands the target (a self-loop would be circular). The union over\n * alternative sub-derivations of an over-determined intermediate.\n */\nfunction traceLeaves(\n edges: readonly BridgeEdge[],\n known: ReadonlySet<string>,\n determinable: ReadonlySet<string>,\n startSources: readonly string[],\n idents: readonly QuantityIdentification[],\n target: string,\n): string[] {\n const leaves = new Set<string>();\n const visited = new Set<string>([target]); // never expand the target itself\n const stack = [...startSources];\n while (stack.length) {\n const q = stack.pop()!;\n if (known.has(q)) {\n leaves.add(q);\n continue;\n }\n if (visited.has(q)) continue;\n visited.add(q);\n let expanded = false;\n for (const e of edges) {\n if (e.target.name !== q) continue;\n if (!e.sources.every((s) => determinable.has(s.name))) continue;\n for (const s of e.sources) stack.push(s.name);\n expanded = true;\n }\n if (!expanded) {\n for (const id of idents) {\n if (id.to === q && determinable.has(id.from)) {\n stack.push(id.from);\n expanded = true;\n }\n }\n }\n if (!expanded) leaves.add(q); // a terminal we cannot expand\n }\n return [...leaves].sort();\n}\n\n/** An even integer power is already an even function of a signed input. */\nfunction evenIntegerPower(exp: number): boolean {\n return Number.isInteger(exp) && Math.abs(exp) % 2 === 0;\n}\n\n/**\n * Buckingham's exponent of an even input is the exponent of its magnitude.\n * `√(q²)` and `|q|` come out as `q^1` and `q^-1`. Those odd powers are\n * printed as `|q|`, so a dimensionless constant can produce the positive\n * value. An even integer power (`q^2`, `q^-2`) is already even.\n */\nfunction formatMonomial(m: Readonly<Record<string, number>>, even?: ReadonlySet<string>): string {\n const parts = Object.entries(m)\n .filter(([, e]) => e !== 0)\n .map(([n, e]) => {\n const token = even?.has(n) === true && !evenIntegerPower(e) ? `|${n}|` : n;\n return e === 1 ? token : `${token}^${e}`;\n });\n return parts.join('·') || '1';\n}\n\n/**\n * Names every fired edge treats as a magnitude. A name that is signed on\n * any fired edge stays signed: one odd formula does not borrow another's\n * absolute value.\n */\nfunction magnitudeNames(edges: readonly BridgeEdge[]): ReadonlySet<string> {\n const even = new Set<string>();\n const signed = new Set<string>();\n for (const edge of edges) {\n const marked = new Set(edge.evenInputs ?? []);\n for (const source of edge.sources) {\n if (marked.has(source.name)) even.add(source.name);\n else signed.add(source.name);\n }\n }\n for (const name of signed) even.delete(name);\n return even;\n}\n\nfunction factorsOn(edge: BridgeEdge | undefined): Readonly<Record<string, number>> {\n return edge?.formulaFactors ?? {};\n}\n\nfunction collectFactors(edges: readonly BridgeEdge[]): Record<string, number> {\n const out: Record<string, number> = {};\n for (const edge of edges) {\n for (const [name, exp] of Object.entries(factorsOn(edge))) out[name] = exp;\n }\n return out;\n}\n\n/**\n * Buckingham cannot see a dimensionless count, so the printed monomial\n * omits it. Put the recorded exponent back for each count the inputs name.\n */\nfunction monomialWithFactors(\n monomial: Readonly<Record<string, number>>,\n factors: Readonly<Record<string, number>>,\n present: ReadonlySet<string>,\n): Record<string, number> {\n const merged: Record<string, number> = { ...monomial };\n for (const [name, exp] of Object.entries(factors)) {\n if (present.has(name) && exp !== 0) merged[name] = exp;\n }\n return merged;\n}\n\n\nfunction buildSummary(\n target: string,\n id: IdentifiabilityResult,\n derivations: readonly DerivationExplanation[],\n consistency: RetrodictionResult | undefined,\n recoveredValue: number | undefined,\n dimensional: DimensionalDeterminationResult | undefined,\n knownNames: readonly string[],\n formulaIsSum: boolean,\n encodedMatchesMonomial: boolean,\n unsetSentence: string | undefined,\n even: ReadonlySet<string>,\n /** The identification that determines the target when no edge does. */\n viaIdentification: QuantityIdentification | undefined,\n): string {\n const known = knownNames.length\n ? `{${knownNames.join(', ')}}`\n : '{} (no inputs)';\n const ids = derivations.map((d) => d.edge).join(', ');\n let s: string;\n\n switch (id.verdict) {\n case 'given':\n s = `'${target}' is a supplied input.`;\n if (derivations.length) {\n s += ` ${derivations.length} graph derivation(s) (${ids}) can cross-check it`;\n s += consistency\n ? consistency.outcome === 'consistent'\n ? `, and they are consistent (relative spread ${consistency.relativeSpread.toExponential(1)}).`\n : ` — and they are INCONSISTENT (relative spread ${consistency.relativeSpread.toExponential(1)}).`\n : '.';\n }\n break;\n case 'under-determined':\n s = `'${target}' is in the graph, but cannot be determined from ${known}: the graph has no derivation path.`;\n if (id.blockingFrontier.length) {\n s += ` Knowing one of {${id.blockingFrontier.join(', ')}} would unblock it.`;\n }\n break;\n case 'exactly-determined': {\n // No edge derives a target the identification alone determines; the\n // sentence then names the identification, not an undefined edge\n // (9.0.0 audit §4 C11).\n const first = derivations[0];\n s =\n first !== undefined\n ? `'${target}' is determined from ${known} via ${first.edge} (${first.label}).`\n : viaIdentification !== undefined\n ? `'${target}' is determined from ${known} by the identification ${viaIdentification.from} ≡ ${viaIdentification.to} (${viaIdentification.rationale}).`\n : `'${target}' is determined from ${known}.`;\n if (recoveredValue !== undefined) {\n s += ` Recovered value: ${formatQuantity(recoveredValue)}.`;\n }\n break;\n }\n case 'over-determined':\n default: {\n // Independence is counted by BRIDGE, not by edge: be-42 and be-42-via-rs\n // are one bridge written in M and in r_s, and agree by algebra.\n const bridges = [...new Set(derivations.map((d) => (d.beId === null ? d.edge : `BE-${d.beId}`)))];\n const oneBridge = bridges.length === 1 && derivations.length > 1;\n if (bridges.length === derivations.length) {\n s = `'${target}' is over-determined from ${known}: ${derivations.length} independent derivations (${ids}).`;\n } else if (oneBridge) {\n s = `'${target}' is over-determined from ${known}: ${derivations.length} derivation routes (${ids}) restate ONE bridge (${bridges[0]}).`;\n } else {\n s = `'${target}' is over-determined from ${known}: ${derivations.length} derivation routes (${ids}) over ${bridges.length} distinct bridges (${bridges.join(', ')}).`;\n }\n if (consistency) {\n const spread = consistency.relativeSpread.toExponential(1);\n if (consistency.outcome === 'consistent') {\n s += oneBridge\n ? ` They agree (relative spread ${spread}) — agreement by construction, not an independent check.`\n : ` They agree (relative spread ${spread}) — a passing consistency check.`;\n } else {\n s += oneBridge\n ? ` They DISAGREE (relative spread ${spread}) — two forms of one bridge disagree: an encoding error.`\n : ` They DISAGREE (relative spread ${spread}) — a falsification.`;\n }\n } else if (oneBridge) {\n s += ` The routes restate one bridge, so they carry no independent constraint.`;\n } else {\n s += ` The ${id.surplusConstraints} surplus derivation(s) are falsifiable consistency constraints (supply values to check them).`;\n }\n if (recoveredValue !== undefined) {\n s += ` Recovered value: ${formatQuantity(recoveredValue)}.`;\n }\n break;\n }\n }\n\n if (dimensional?.determined && dimensional.monomial && formulaIsSum) {\n s += ` The encoded formula adds dimensionful terms, so it is not a proportionality.`;\n } else if (dimensional?.determined && dimensional.monomial && !encodedMatchesMonomial) {\n s += ` Dimensionally, those inputs alone do not fix it — the encoded formula carries dimensionful constants.`;\n } else if (dimensional?.determined && dimensional.monomial) {\n s += ` Dimensionally, ${known} fix it up to a dimensionless constant: ${target} ∝ ${formatMonomial(dimensional.monomial, even)}.`;\n } else if (dimensional?.outsideGoverningSpan && knownNames.length) {\n s += ` Dimensionally, those inputs alone do not fix it — the encoded formula carries dimensionful constants.`;\n } else if (dimensional && !dimensional.determined && knownNames.length) {\n s += ` Dimensionally, those inputs alone do not fix a unique monomial.`;\n }\n // The unset factor is a fact about the edge, whatever the inputs span: it is said whether or\n // not a ∝ line could be printed (a baked constant removes the ∝ line, not the unset factor).\n if (unsetSentence !== undefined) s += ` ${unsetSentence}`;\n return s;\n}\n\n/**\n * Explain a quantity: synthesize the identifiability verdict, the\n * recovered value + consistency (when values are supplied), and the\n * dimensional sufficiency of the known set into one report.\n *\n * `known` may be a list of names (structural + dimensional analysis only)\n * or a `name → value` map (adds value recovery and the over-determined\n * consistency check).\n *\n * @public\n */\nexport function explainQuantity(\n edges: readonly BridgeEdge[],\n target: string,\n known: readonly string[] | Readonly<Record<string, number>>,\n opts: ExplainOptions = {},\n): QuantityExplanation {\n const identifications = opts.identifications ?? QUANTITY_IDENTIFICATIONS;\n const hasValues = !Array.isArray(known);\n const values = hasValues ? (known as Record<string, number>) : null;\n const rawNames = hasValues\n ? Object.keys(values!)\n : [...new Set(known as string[])];\n const sourceNames = new Set<string>();\n for (const e of edges) {\n if (e.target.name !== target) continue;\n for (const s of e.sources) sourceNames.add(s.name);\n }\n // A copied synonym is the same quantity. Buckingham and the printed\n // known set see one name. The value map still carries both spellings\n // so the edge source evaluates.\n const knownNames = collapseSynonymGovernors(rawNames, sourceNames, values);\n\n const identifiability = classifyIdentifiability(edges, knownNames, target, {\n identifications,\n });\n\n const byId = new Map(edges.map((e) => [e.id, e] as const));\n\n let consistency: RetrodictionResult | undefined;\n let refusals: RetrodictionResult['refusals'];\n let recoveredValue: number | undefined;\n const valueByEdge = new Map<string, number>();\n if (values) {\n const references =\n target in values ? { [target]: values[target] } : undefined;\n const retro = retrodictNode(edges, values, target, {\n identifications,\n tolerance: opts.tolerance,\n references,\n });\n refusals = retro.refusals;\n for (const p of retro.predictions) valueByEdge.set(p.edge, p.value);\n if (retro.predictions.length >= 2) consistency = retro;\n if (\n (retro.outcome === 'consistent' || retro.outcome === 'single') &&\n retro.predictions.length > 0\n ) {\n recoveredValue =\n retro.predictions.reduce((a, p) => a + p.value, 0) /\n retro.predictions.length;\n }\n }\n\n const dimMap = buildDimMap(edges, opts.extraDimensions);\n const knownSet = new Set(knownNames);\n const determinable = forwardClosure(edges, knownNames, identifications);\n\n const derivations: DerivationExplanation[] = identifiability.derivations.map(\n (eid) => {\n const e = byId.get(eid);\n const sources = e ? e.sources.map((s) => s.name) : [];\n // Full-chain: trace the immediate sources back to the leaf inputs.\n const leafInputs = e\n ? traceLeaves(\n edges,\n knownSet,\n determinable,\n sources,\n identifications,\n target,\n )\n : [];\n // Dimensional form in terms of those leaves, when they fix the target.\n let dimensionalForm: DerivationExplanation['dimensionalForm'];\n const targetDimForChain = dimMap.get(target);\n if (targetDimForChain && leafInputs.length) {\n const factors = factorsOn(e);\n const governing = leafInputs\n .filter((n) => n !== target && dimMap.has(n) && factors[n] === undefined)\n .map((n) => ({ name: n, dim: dimMap.get(n)! }));\n const det = dimensionallyDetermines(\n { name: target, dim: targetDimForChain },\n governing,\n );\n const symbolic = e?.symbolic;\n const sum = symbolic !== undefined && formulaShape(symbolic) === 'dimensional-sum';\n const leaves = leafInputs.filter((name) => name !== target);\n const missingCount = Object.keys(factors).some((name) => !leaves.includes(name));\n const merged =\n det.determined && det.monomial !== undefined\n ? monomialWithFactors(det.monomial, factors, new Set(leaves))\n : undefined;\n const agrees =\n merged !== undefined &&\n encodedMatchesMonomial(edges, target, leaves, merged, identifications);\n if (!sum && !missingCount && merged !== undefined && agrees) {\n dimensionalForm = {\n monomial: merged,\n formula: `${target} ∝ ${formatMonomial(merged, new Set(e?.evenInputs ?? []))}`,\n };\n }\n }\n return {\n edge: eid,\n beId: e?.beId ?? null,\n label: e?.label ?? eid,\n sources,\n leafInputs,\n ...(dimensionalForm ? { dimensionalForm } : {}),\n ...(valueByEdge.has(eid) ? { value: valueByEdge.get(eid) } : {}),\n };\n },\n );\n\n // Dimensional sufficiency of the KNOWN set, independent of the graph.\n // A dimensionless count is stripped before Buckingham (it is a π-group and\n // would make the monomial non-unique) and written back into the monomial\n // the summary prints. An edge whose other sources are known, but whose\n // count is not, does not get to claim the count-free monomial.\n const firedEdges = identifiability.derivations\n .map((id) => byId.get(id))\n .filter((edge): edge is BridgeEdge => edge !== undefined);\n const firedFactors = collectFactors(firedEdges);\n const boundGroupExponents: Record<string, number> = {};\n if (values) {\n for (const edge of firedEdges) {\n const group = CANONICAL_GROUP_PREFACTORS.find((p) => p.id === edge.id);\n if (group !== undefined && Number.isFinite(values[group.group])) {\n boundGroupExponents[group.group] = group.exponent;\n }\n }\n }\n const blockedByCount = edges.filter((edge) => {\n if (edge.target.name !== target) return false;\n const factors = factorsOn(edge);\n const names = Object.keys(factors);\n if (names.length === 0 || names.every((name) => knownSet.has(name))) return false;\n return edge.sources\n .filter((source) => factors[source.name] === undefined)\n .every((source) => knownSet.has(source.name) || determinable.has(source.name));\n });\n let dimensional: DimensionalDeterminationResult | undefined;\n const targetDim = dimMap.get(target);\n if (targetDim) {\n const strip = new Set<string>([\n ...Object.keys(firedFactors),\n ...blockedByCount.flatMap((edge) => Object.keys(factorsOn(edge))),\n ]);\n const governing = knownNames\n .filter((n) => n !== target && dimMap.has(n) && !strip.has(n))\n .map((n) => ({ name: n, dim: dimMap.get(n)! }));\n const det = dimensionallyDetermines({ name: target, dim: targetDim }, governing);\n const hideCountFree = blockedByCount.length > 0 && firedEdges.length === 0;\n if (hideCountFree) {\n dimensional = {\n ...det,\n determined: false,\n monomial: undefined,\n reason: 'a dimensionless count in the formula is not among the inputs',\n };\n } else if (det.determined && det.monomial !== undefined) {\n dimensional = {\n ...det,\n monomial: monomialWithFactors(\n det.monomial,\n { ...firedFactors, ...boundGroupExponents },\n knownSet,\n ),\n };\n } else {\n dimensional = det;\n }\n }\n\n const formulaIsSum = identifiability.derivations.some((eid) => {\n const symbolic = byId.get(eid)?.symbolic;\n return symbolic !== undefined && formulaShape(symbolic) === 'dimensional-sum';\n });\n const encodedAgrees =\n dimensional?.determined === true && dimensional.monomial !== undefined\n ? encodedMatchesMonomial(edges, target, knownNames, dimensional.monomial, identifications)\n : true;\n\n const unsetEdge = derivations\n .map((d) => byId.get(d.edge))\n .find((e) => e?.coefficientUnset === true);\n const groupBound =\n unsetEdge !== undefined &&\n CANONICAL_GROUP_PREFACTORS.some(\n (p) => p.id === unsetEdge.id && values !== null && Number.isFinite(values[p.group]),\n );\n const unsetSentence =\n unsetEdge === undefined || groupBound\n ? undefined\n : 'The factor is unset.' +\n (canonicalById(unsetEdge.id)?.unsetFactorNote !== undefined ? ` ${canonicalById(unsetEdge.id)!.unsetFactorNote}` : '');\n\n const coefficient: QuantityExplanation['coefficient'] =\n unsetEdge !== undefined && !groupBound\n ? 'unset'\n : groupBound\n ? 'group'\n : recoveredValue !== undefined\n ? 'sourced'\n : undefined;\n\n // A target with no derivation that is still determinable is reached by an\n // identification whose `from` the known set determines.\n const viaIdentification =\n identifiability.verdict === 'exactly-determined' && derivations.length === 0\n ? identifications.find((ident) => ident.to === target && determinable.has(ident.from))\n : undefined;\n\n const summary = buildSummary(\n target,\n identifiability,\n derivations,\n consistency,\n recoveredValue,\n dimensional,\n knownNames,\n formulaIsSum,\n encodedAgrees,\n unsetSentence,\n magnitudeNames(firedEdges),\n viaIdentification,\n );\n // A refusal of the point (a validity domain, opposite carrier signs, a formula with no\n // finite value there) is a bad value and is named with the edge's own reason. An unset\n // coefficient is not: `unsetSentence` already says it in words (AGENTS law 4).\n const domainRefusals = (refusals ?? []).filter((r) => r.kind !== 'coefficient-unset');\n const refusalSentence =\n domainRefusals.length === 0 || recoveredValue !== undefined\n ? ''\n : ` No recovered value: ${domainRefusals.map((r) => r.reason).join('; ')}.`;\n\n return {\n target,\n known: knownNames,\n identifiability,\n derivations,\n ...(consistency ? { consistency } : {}),\n ...(recoveredValue !== undefined ? { recoveredValue } : {}),\n ...(coefficient !== undefined ? { coefficient } : {}),\n ...(dimensional ? { dimensional } : {}),\n ...(refusals !== undefined ? { refusals } : {}),\n blockingFrontier: identifiability.blockingFrontier,\n summary: summary + refusalSentence,\n };\n}\n"]}
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/composition/explain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * \"Explain this quantity\" — the unified entry point over the three\n * bridge-inference primitives (docs/planning/Bridge-Inference-Epistemics-\n * Note.md). Given a target quantity and a set of knowns (names, or\n * name→value), it composes:\n *\n * 1. the identifiability classifier — CAN the graph compute the target\n * from the knowns, and via how many derivations? Independence is\n * counted by catalog bridge (`beId`): two routes that restate one bridge\n * agree by algebra, and the summary says so.\n * 2. the retrodiction harness — when values are supplied, RECOVER the\n * value via each derivation and (for over-determined targets) check\n * they agree;\n * 3. the Buckingham-π enumerator — is the known set even DIMENSIONALLY\n * sufficient to fix the target up to a constant, independent of the\n * graph's encoded edges?\n *\n * The three answer complementary questions, so the explanation is richer\n * than any one alone: the graph may compute a target whose dimensional\n * closure relies on constants baked into the evaluator (e.g. r_s = 2GM/c²\n * — mass alone is not dimensionally sufficient), and the classifier +\n * Buckingham layer make that explicit together.\n *\n * @module composition/explain\n */\n\nimport type { BridgeEdge } from './edge.js';\nimport type { QuantityIdentification } from './compose.js';\nimport { QUANTITY_IDENTIFICATIONS } from './compose.js';\nimport type { IdentifiabilityResult } from './identifiability.js';\nimport { classifyIdentifiability, forwardClosure } from './identifiability.js';\nimport { fixedPoint } from '../canonical/fixed-points.js';\nimport type { RetrodictionResult } from './retrodiction.js';\nimport { retrodictNode } from './retrodiction.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport { CANONICAL_GROUP_PREFACTORS } from './canonical-prefactors.js';\nimport { canonicalById } from '../canonical/registry.js';\n\nimport { formatQuantity } from '../core/format.js';\n/**\n * The printed forms of a number, owned by `core/format` and re-exported here so the commands'\n * imports stay as they were: every command prints a number through `formatQuantity` or `formatExact`.\n * @internal\n */\nexport { formatQuantity, formatExact } from '../core/format.js';\nimport type { DimensionalDeterminationResult } from '../dimensional/buckingham.js';\nimport { dimensionallyDetermines } from '../dimensional/buckingham.js';\nimport { collapseSynonymGovernors } from './aliases.js';\nimport { formulaShape } from './formula-shape.js';\n\n/** One structural derivation of the target, with the recovered value when\n * ground-truth values were supplied. @public */\nexport interface DerivationExplanation {\n readonly edge: string;\n /**\n * The catalog bridge the last edge encodes (`BridgeEdge.beId`), `null` for a\n * law or an uncatalogued edge. Two routes with the same `beId` are one\n * bridge restated, so their agreement is algebra, not a check.\n */\n readonly beId: number | null;\n readonly label: string;\n /** The edge's immediate (last-hop) source quantities. */\n readonly sources: readonly string[];\n /**\n * The LEAF inputs this derivation ultimately depends on — its immediate\n * sources traced back through every intermediate to the known set. The\n * full-chain (leaf-to-target) view, vs `sources` (last-hop). A subset of\n * the known set.\n */\n readonly leafInputs: readonly string[];\n /**\n * The target as a dimensionless-constant-times-monomial in the LEAF\n * inputs, when those leaves dimensionally fix it (Buckingham-π over the\n * full chain). Absent when the leaves rely on dimensionful constants\n * baked into the evaluators (the common case for the bridge graph).\n */\n readonly dimensionalForm?: {\n readonly monomial: Readonly<Record<string, number>>;\n /** e.g. `period ∝ length^1·gravity^-1` (up to a dimensionless constant). */\n readonly formula: string;\n };\n /** Value recovered via this derivation (only when values were given). */\n readonly value?: number;\n}\n\n/** Options for {@link explainQuantity}. @public */\nexport interface ExplainOptions {\n readonly identifications?: readonly QuantityIdentification[];\n /** Consistency tolerance forwarded to the retrodiction harness. */\n readonly tolerance?: number;\n /**\n * Dimensions for known names that are not graph quantities (e.g. raw\n * constants `G`, `c`, `hbar`) — lets the Buckingham layer test a known\n * set richer than the graph's nodes.\n */\n readonly extraDimensions?: Readonly<Record<string, Dimension>>;\n}\n\n/** The unified explanation of one quantity. @public */\nexport interface QuantityExplanation {\n readonly target: string;\n readonly known: readonly string[];\n /** Structural verdict (under/exactly/over-determined or given). */\n readonly identifiability: IdentifiabilityResult;\n /** One entry per independent derivation the classifier found. */\n readonly derivations: readonly DerivationExplanation[];\n /** Retrodiction result, present when ≥2 derivations fired on values. */\n readonly consistency?: RetrodictionResult;\n /** Agreed recovered value (consistent or single), when values supplied. */\n readonly recoveredValue?: number;\n /**\n * Where the numeric factor came from. `unset` is not the same as a\n * missing `recoveredValue`: the inputs were read and the factor has\n * no source. `group` means a bound dimensionless group supplied it.\n */\n readonly coefficient?: 'sourced' | 'group' | 'unset';\n /** Whether the KNOWN set dimensionally fixes the target (Buckingham-π);\n * absent when the target has no resolvable dimension. */\n readonly dimensional?: DimensionalDeterminationResult;\n /** Derivations that refused the given values, each under its own kind (`RetrodictionRefusal`). */\n readonly refusals?: RetrodictionResult['refusals'];\n /** Upstream gaps for an under-determined target (from the classifier). */\n readonly blockingFrontier: readonly string[];\n /** Plain-language synthesis of the above. */\n readonly summary: string;\n}\n\n/**\n * A Buckingham monomial is the encoded formula only when scaling each known\n * input scales the recovered value by that exponent. A monomial such as\n * `n^(-1/3)` or `∝ 1` can share the target's dimension and still not be the\n * formula, because the formula carries constants the monomial did not use.\n * Samples that the domain refuses leave the monomial in place: this check\n * does not invent a second domain.\n */\nfunction encodedMatchesMonomial(\n edges: readonly BridgeEdge[],\n target: string,\n knownNames: readonly string[],\n monomial: Readonly<Record<string, number>>,\n identifications: readonly QuantityIdentification[],\n): boolean {\n if (knownNames.length === 0) return true;\n // Known i takes 1.7 + 0.3 i: this check's own scheme, stated here; each is then scaled by 4.\n const base = fixedPoint(knownNames, 1, { base: 1.7, step: 0.3 });\n const read = (values: Record<string, number>): number | undefined => {\n const retro = retrodictNode(edges, values, target, { identifications });\n const hit = retro.predictions.find((prediction) => Number.isFinite(prediction.value) && prediction.value !== 0);\n return hit?.value;\n };\n const origin = read(base);\n if (origin === undefined) return true;\n for (const name of knownNames) {\n const current = base[name];\n if (current === undefined) return true;\n const next = read({ ...base, [name]: current * 4 });\n if (next === undefined) return true;\n const exponent = monomial[name] ?? 0;\n // A known name the evaluator does not read (G declared beside a law that\n // already bakes G in) does not move the value. That is not a mismatch.\n const unchanged = Math.abs(next - origin) / Math.max(Math.abs(origin), 1e-300) < 1e-9;\n if (unchanged && Math.abs(exponent) > 1e-9) continue;\n const expected = origin * Math.pow(4, exponent);\n const scale = Math.max(Math.abs(expected), Math.abs(next), 1e-300);\n if (Math.abs(next - expected) / scale > 1e-6) return false;\n }\n return true;\n}\n\nfunction buildDimMap(\n edges: readonly BridgeEdge[],\n extra?: Readonly<Record<string, Dimension>>,\n): Map<string, Dimension> {\n const m = new Map<string, Dimension>();\n for (const e of edges) {\n for (const s of e.sources) if (!m.has(s.name)) m.set(s.name, s.dim);\n if (!m.has(e.target.name)) m.set(e.target.name, e.target.dim);\n }\n if (extra) for (const [k, v] of Object.entries(extra)) m.set(k, v);\n return m;\n}\n\n/**\n * Trace `startSources` back through every intermediate to the leaf inputs\n * — names in `known`, or terminals that no determinable edge produces.\n * Never expands the target (a self-loop would be circular). The union over\n * alternative sub-derivations of an over-determined intermediate.\n */\nfunction traceLeaves(\n edges: readonly BridgeEdge[],\n known: ReadonlySet<string>,\n determinable: ReadonlySet<string>,\n startSources: readonly string[],\n idents: readonly QuantityIdentification[],\n target: string,\n): string[] {\n const leaves = new Set<string>();\n const visited = new Set<string>([target]); // never expand the target itself\n const stack = [...startSources];\n while (stack.length) {\n const q = stack.pop()!;\n if (known.has(q)) {\n leaves.add(q);\n continue;\n }\n if (visited.has(q)) continue;\n visited.add(q);\n let expanded = false;\n for (const e of edges) {\n if (e.target.name !== q) continue;\n if (!e.sources.every((s) => determinable.has(s.name))) continue;\n for (const s of e.sources) stack.push(s.name);\n expanded = true;\n }\n if (!expanded) {\n for (const id of idents) {\n if (id.to === q && determinable.has(id.from)) {\n stack.push(id.from);\n expanded = true;\n }\n }\n }\n if (!expanded) leaves.add(q); // a terminal we cannot expand\n }\n return [...leaves].sort();\n}\n\n/** An even integer power is already an even function of a signed input. */\nfunction evenIntegerPower(exp: number): boolean {\n return Number.isInteger(exp) && Math.abs(exp) % 2 === 0;\n}\n\n/**\n * Buckingham's exponent of an even input is the exponent of its magnitude.\n * `√(q²)` and `|q|` come out as `q^1` and `q^-1`. Those odd powers are\n * printed as `|q|`, so a dimensionless constant can produce the positive\n * value. An even integer power (`q^2`, `q^-2`) is already even.\n */\nfunction formatMonomial(m: Readonly<Record<string, number>>, even?: ReadonlySet<string>): string {\n const parts = Object.entries(m)\n .filter(([, e]) => e !== 0)\n .map(([n, e]) => {\n const token = even?.has(n) === true && !evenIntegerPower(e) ? `|${n}|` : n;\n return e === 1 ? token : `${token}^${e}`;\n });\n return parts.join('·') || '1';\n}\n\n/**\n * Names every fired edge treats as a magnitude. A name that is signed on\n * any fired edge stays signed: one odd formula does not borrow another's\n * absolute value.\n */\nfunction magnitudeNames(edges: readonly BridgeEdge[]): ReadonlySet<string> {\n const even = new Set<string>();\n const signed = new Set<string>();\n for (const edge of edges) {\n const marked = new Set(edge.evenInputs ?? []);\n for (const source of edge.sources) {\n if (marked.has(source.name)) even.add(source.name);\n else signed.add(source.name);\n }\n }\n for (const name of signed) even.delete(name);\n return even;\n}\n\nfunction factorsOn(edge: BridgeEdge | undefined): Readonly<Record<string, number>> {\n return edge?.formulaFactors ?? {};\n}\n\nfunction collectFactors(edges: readonly BridgeEdge[]): Record<string, number> {\n const out: Record<string, number> = {};\n for (const edge of edges) {\n for (const [name, exp] of Object.entries(factorsOn(edge))) out[name] = exp;\n }\n return out;\n}\n\n/**\n * Buckingham cannot see a dimensionless count, so the printed monomial\n * omits it. Put the recorded exponent back for each count the inputs name.\n */\nfunction monomialWithFactors(\n monomial: Readonly<Record<string, number>>,\n factors: Readonly<Record<string, number>>,\n present: ReadonlySet<string>,\n): Record<string, number> {\n const merged: Record<string, number> = { ...monomial };\n for (const [name, exp] of Object.entries(factors)) {\n if (present.has(name) && exp !== 0) merged[name] = exp;\n }\n return merged;\n}\n\n\nfunction buildSummary(\n target: string,\n id: IdentifiabilityResult,\n derivations: readonly DerivationExplanation[],\n consistency: RetrodictionResult | undefined,\n recoveredValue: number | undefined,\n dimensional: DimensionalDeterminationResult | undefined,\n knownNames: readonly string[],\n formulaIsSum: boolean,\n encodedMatchesMonomial: boolean,\n unsetSentence: string | undefined,\n even: ReadonlySet<string>,\n /** The identification that determines the target when no edge does. */\n viaIdentification: QuantityIdentification | undefined,\n): string {\n const known = knownNames.length\n ? `{${knownNames.join(', ')}}`\n : '{} (no inputs)';\n const ids = derivations.map((d) => d.edge).join(', ');\n let s: string;\n\n switch (id.verdict) {\n case 'given':\n s = `'${target}' is a supplied input.`;\n if (derivations.length) {\n s += ` ${derivations.length} graph derivation(s) (${ids}) can cross-check it`;\n s += consistency\n ? consistency.outcome === 'consistent'\n ? `, and they are consistent (relative spread ${consistency.relativeSpread.toExponential(1)}).`\n : ` — and they are INCONSISTENT (relative spread ${consistency.relativeSpread.toExponential(1)}).`\n : '.';\n }\n break;\n case 'under-determined':\n s = `'${target}' is in the graph, but cannot be determined from ${known}: the graph has no derivation path.`;\n if (id.blockingFrontier.length) {\n s += ` Knowing one of {${id.blockingFrontier.join(', ')}} would unblock it.`;\n }\n break;\n case 'exactly-determined': {\n // No edge derives a target the identification alone determines; the\n // sentence then names the identification, not an undefined edge\n // (9.0.0 audit §4 C11).\n const first = derivations[0];\n s =\n first !== undefined\n ? `'${target}' is determined from ${known} via ${first.edge} (${first.label}).`\n : viaIdentification !== undefined\n ? `'${target}' is determined from ${known} by the identification ${viaIdentification.from} ≡ ${viaIdentification.to} (${viaIdentification.rationale}).`\n : `'${target}' is determined from ${known}.`;\n if (recoveredValue !== undefined) {\n s += ` Recovered value: ${formatQuantity(recoveredValue)}.`;\n }\n break;\n }\n case 'over-determined':\n default: {\n // Independence is counted by BRIDGE, not by edge: be-42 and be-42-via-rs\n // are one bridge written in M and in r_s, and agree by algebra.\n const bridges = [...new Set(derivations.map((d) => (d.beId === null ? d.edge : `BE-${d.beId}`)))];\n const oneBridge = bridges.length === 1 && derivations.length > 1;\n if (bridges.length === derivations.length) {\n s = `'${target}' is over-determined from ${known}: ${derivations.length} independent derivations (${ids}).`;\n } else if (oneBridge) {\n s = `'${target}' is over-determined from ${known}: ${derivations.length} derivation routes (${ids}) restate ONE bridge (${bridges[0]}).`;\n } else {\n s = `'${target}' is over-determined from ${known}: ${derivations.length} derivation routes (${ids}) over ${bridges.length} distinct bridges (${bridges.join(', ')}).`;\n }\n if (consistency) {\n const spread = consistency.relativeSpread.toExponential(1);\n if (consistency.outcome === 'consistent') {\n s += oneBridge\n ? ` They agree (relative spread ${spread}) — agreement by construction, not an independent check.`\n : ` They agree (relative spread ${spread}) — a passing consistency check.`;\n } else {\n s += oneBridge\n ? ` They DISAGREE (relative spread ${spread}) — two forms of one bridge disagree: an encoding error.`\n : ` They DISAGREE (relative spread ${spread}) — a falsification.`;\n }\n } else if (oneBridge) {\n s += ` The routes restate one bridge, so they carry no independent constraint.`;\n } else {\n s += ` The ${id.surplusConstraints} surplus derivation(s) are falsifiable consistency constraints (supply values to check them).`;\n }\n if (recoveredValue !== undefined) {\n s += ` Recovered value: ${formatQuantity(recoveredValue)}.`;\n }\n break;\n }\n }\n\n if (dimensional?.determined && dimensional.monomial && formulaIsSum) {\n s += ` The encoded formula adds dimensionful terms, so it is not a proportionality.`;\n } else if (dimensional?.determined && dimensional.monomial && !encodedMatchesMonomial) {\n s += ` Dimensionally, those inputs alone do not fix it — the encoded formula carries dimensionful constants.`;\n } else if (dimensional?.determined && dimensional.monomial) {\n s += ` Dimensionally, ${known} fix it up to a dimensionless constant: ${target} ∝ ${formatMonomial(dimensional.monomial, even)}.`;\n } else if (dimensional?.outsideGoverningSpan && knownNames.length) {\n s += ` Dimensionally, those inputs alone do not fix it — the encoded formula carries dimensionful constants.`;\n } else if (dimensional && !dimensional.determined && knownNames.length) {\n s += ` Dimensionally, those inputs alone do not fix a unique monomial.`;\n }\n // The unset factor is a fact about the edge, whatever the inputs span: it is said whether or\n // not a ∝ line could be printed (a baked constant removes the ∝ line, not the unset factor).\n if (unsetSentence !== undefined) s += ` ${unsetSentence}`;\n return s;\n}\n\n/**\n * Explain a quantity: synthesize the identifiability verdict, the\n * recovered value + consistency (when values are supplied), and the\n * dimensional sufficiency of the known set into one report.\n *\n * `known` may be a list of names (structural + dimensional analysis only)\n * or a `name → value` map (adds value recovery and the over-determined\n * consistency check).\n *\n * @public\n */\nexport function explainQuantity(\n edges: readonly BridgeEdge[],\n target: string,\n known: readonly string[] | Readonly<Record<string, number>>,\n opts: ExplainOptions = {},\n): QuantityExplanation {\n const identifications = opts.identifications ?? QUANTITY_IDENTIFICATIONS;\n const hasValues = !Array.isArray(known);\n const values = hasValues ? (known as Record<string, number>) : null;\n const rawNames = hasValues\n ? Object.keys(values!)\n : [...new Set(known as string[])];\n const sourceNames = new Set<string>();\n for (const e of edges) {\n if (e.target.name !== target) continue;\n for (const s of e.sources) sourceNames.add(s.name);\n }\n // A copied synonym is the same quantity. Buckingham and the printed\n // known set see one name. The value map still carries both spellings\n // so the edge source evaluates.\n const knownNames = collapseSynonymGovernors(rawNames, sourceNames, values);\n\n const identifiability = classifyIdentifiability(edges, knownNames, target, {\n identifications,\n });\n\n const byId = new Map(edges.map((e) => [e.id, e] as const));\n\n let consistency: RetrodictionResult | undefined;\n let refusals: RetrodictionResult['refusals'];\n let recoveredValue: number | undefined;\n const valueByEdge = new Map<string, number>();\n if (values) {\n const references =\n target in values ? { [target]: values[target] } : undefined;\n const retro = retrodictNode(edges, values, target, {\n identifications,\n tolerance: opts.tolerance,\n references,\n });\n refusals = retro.refusals;\n for (const p of retro.predictions) valueByEdge.set(p.edge, p.value);\n if (retro.predictions.length >= 2) consistency = retro;\n if (\n (retro.outcome === 'consistent' || retro.outcome === 'single') &&\n retro.predictions.length > 0\n ) {\n recoveredValue =\n retro.predictions.reduce((a, p) => a + p.value, 0) /\n retro.predictions.length;\n }\n }\n\n const dimMap = buildDimMap(edges, opts.extraDimensions);\n const knownSet = new Set(knownNames);\n const determinable = forwardClosure(edges, knownNames, identifications);\n\n const derivations: DerivationExplanation[] = identifiability.derivations.map(\n (eid) => {\n const e = byId.get(eid);\n const sources = e ? e.sources.map((s) => s.name) : [];\n // Full-chain: trace the immediate sources back to the leaf inputs.\n const leafInputs = e\n ? traceLeaves(\n edges,\n knownSet,\n determinable,\n sources,\n identifications,\n target,\n )\n : [];\n // Dimensional form in terms of those leaves, when they fix the target.\n let dimensionalForm: DerivationExplanation['dimensionalForm'];\n const targetDimForChain = dimMap.get(target);\n if (targetDimForChain && leafInputs.length) {\n const factors = factorsOn(e);\n const governing = leafInputs\n .filter((n) => n !== target && dimMap.has(n) && factors[n] === undefined)\n .map((n) => ({ name: n, dim: dimMap.get(n)! }));\n const det = dimensionallyDetermines(\n { name: target, dim: targetDimForChain },\n governing,\n );\n const symbolic = e?.symbolic;\n const sum = symbolic !== undefined && formulaShape(symbolic) === 'dimensional-sum';\n const leaves = leafInputs.filter((name) => name !== target);\n const missingCount = Object.keys(factors).some((name) => !leaves.includes(name));\n const merged =\n det.determined && det.monomial !== undefined\n ? monomialWithFactors(det.monomial, factors, new Set(leaves))\n : undefined;\n const agrees =\n merged !== undefined &&\n encodedMatchesMonomial(edges, target, leaves, merged, identifications);\n if (!sum && !missingCount && merged !== undefined && agrees) {\n dimensionalForm = {\n monomial: merged,\n formula: `${target} ∝ ${formatMonomial(merged, new Set(e?.evenInputs ?? []))}`,\n };\n }\n }\n return {\n edge: eid,\n beId: e?.beId ?? null,\n label: e?.label ?? eid,\n sources,\n leafInputs,\n ...(dimensionalForm ? { dimensionalForm } : {}),\n ...(valueByEdge.has(eid) ? { value: valueByEdge.get(eid) } : {}),\n };\n },\n );\n\n // Dimensional sufficiency of the KNOWN set, independent of the graph.\n // A dimensionless count is stripped before Buckingham (it is a π-group and\n // would make the monomial non-unique) and written back into the monomial\n // the summary prints. An edge whose other sources are known, but whose\n // count is not, does not get to claim the count-free monomial.\n const firedEdges = identifiability.derivations\n .map((id) => byId.get(id))\n .filter((edge): edge is BridgeEdge => edge !== undefined);\n const firedFactors = collectFactors(firedEdges);\n const boundGroupExponents: Record<string, number> = {};\n if (values) {\n for (const edge of firedEdges) {\n const group = CANONICAL_GROUP_PREFACTORS.find((p) => p.id === edge.id);\n if (group !== undefined && Number.isFinite(values[group.group])) {\n boundGroupExponents[group.group] = group.exponent;\n }\n }\n }\n const blockedByCount = edges.filter((edge) => {\n if (edge.target.name !== target) return false;\n const factors = factorsOn(edge);\n const names = Object.keys(factors);\n if (names.length === 0 || names.every((name) => knownSet.has(name))) return false;\n return edge.sources\n .filter((source) => factors[source.name] === undefined)\n .every((source) => knownSet.has(source.name) || determinable.has(source.name));\n });\n let dimensional: DimensionalDeterminationResult | undefined;\n const targetDim = dimMap.get(target);\n if (targetDim) {\n const strip = new Set<string>([\n ...Object.keys(firedFactors),\n ...blockedByCount.flatMap((edge) => Object.keys(factorsOn(edge))),\n ]);\n const governing = knownNames\n .filter((n) => n !== target && dimMap.has(n) && !strip.has(n))\n .map((n) => ({ name: n, dim: dimMap.get(n)! }));\n const det = dimensionallyDetermines({ name: target, dim: targetDim }, governing);\n const hideCountFree = blockedByCount.length > 0 && firedEdges.length === 0;\n if (hideCountFree) {\n dimensional = {\n ...det,\n determined: false,\n monomial: undefined,\n reason: 'a dimensionless count in the formula is not among the inputs',\n };\n } else if (det.determined && det.monomial !== undefined) {\n dimensional = {\n ...det,\n monomial: monomialWithFactors(\n det.monomial,\n { ...firedFactors, ...boundGroupExponents },\n knownSet,\n ),\n };\n } else {\n dimensional = det;\n }\n }\n\n const formulaIsSum = identifiability.derivations.some((eid) => {\n const symbolic = byId.get(eid)?.symbolic;\n return symbolic !== undefined && formulaShape(symbolic) === 'dimensional-sum';\n });\n const encodedAgrees =\n dimensional?.determined === true && dimensional.monomial !== undefined\n ? encodedMatchesMonomial(edges, target, knownNames, dimensional.monomial, identifications)\n : true;\n\n const unsetEdge = derivations\n .map((d) => byId.get(d.edge))\n .find((e) => e?.coefficientUnset === true);\n const groupBound =\n unsetEdge !== undefined &&\n CANONICAL_GROUP_PREFACTORS.some(\n (p) => p.id === unsetEdge.id && values !== null && Number.isFinite(values[p.group]),\n );\n const unsetSentence =\n unsetEdge === undefined || groupBound\n ? undefined\n : 'The factor is unset.' +\n (canonicalById(unsetEdge.id)?.unsetFactorNote !== undefined ? ` ${canonicalById(unsetEdge.id)!.unsetFactorNote}` : '');\n\n const coefficient: QuantityExplanation['coefficient'] =\n unsetEdge !== undefined && !groupBound\n ? 'unset'\n : groupBound\n ? 'group'\n : recoveredValue !== undefined\n ? 'sourced'\n : undefined;\n\n // A target with no derivation that is still determinable is reached by an\n // identification whose `from` the known set determines.\n const viaIdentification =\n identifiability.verdict === 'exactly-determined' && derivations.length === 0\n ? identifications.find((ident) => ident.to === target && determinable.has(ident.from))\n : undefined;\n\n const summary = buildSummary(\n target,\n identifiability,\n derivations,\n consistency,\n recoveredValue,\n dimensional,\n knownNames,\n formulaIsSum,\n encodedAgrees,\n unsetSentence,\n magnitudeNames(firedEdges),\n viaIdentification,\n );\n // A refusal of the point (a validity domain, opposite carrier signs, a formula with no\n // finite value there) is a bad value and is named with the edge's own reason. An unset\n // coefficient is not: `unsetSentence` already says it in words (AGENTS law 4).\n const domainRefusals = (refusals ?? []).filter((r) => r.kind !== 'coefficient-unset');\n const refusalSentence =\n domainRefusals.length === 0 || recoveredValue !== undefined\n ? ''\n : ` No recovered value: ${domainRefusals.map((r) => r.reason).join('; ')}.`;\n\n return {\n target,\n known: knownNames,\n identifiability,\n derivations,\n ...(consistency ? { consistency } : {}),\n ...(recoveredValue !== undefined ? { recoveredValue } : {}),\n ...(coefficient !== undefined ? { coefficient } : {}),\n ...(dimensional ? { dimensional } : {}),\n ...(refusals !== undefined ? { refusals } : {}),\n blockingFrontier: identifiability.blockingFrontier,\n summary: summary + refusalSentence,\n };\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  * DIFFERENT AST — so this is the missing primitive that makes a bridge's
8
8
  * `symbolic` form executable.
9
9
  *
10
- * The tree is lowered with `createScalarBuilder` and evaluated with
10
+ * The tree is lowered with `toScalarNode` (`dimensional/scalar-lowering`, which writes a one-argument `-` as a negation) and evaluated with
11
11
  * `evaluateScalar`. This module does not print a formula and does not parse
12
12
  * one. Leaf resolution order (Adam A-1, A-5): caller `values` win, then the
13
13
  * `CONSTANTS` registry, then a spelled-out multiple of π, then a base-10
@@ -1 +1 @@
1
- {"version":3,"file":"expr-eval.d.ts","sourceRoot":"","sources":["../../src/composition/expr-eval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAI5D;yCACyC;AACzC,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAuDD;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,QAAQ,EACd,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GAC5C,MAAM,CAOR"}
1
+ {"version":3,"file":"expr-eval.d.ts","sourceRoot":"","sources":["../../src/composition/expr-eval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAM5D;yCACyC;AACzC,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AA6CD;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,QAAQ,EACd,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GAC5C,MAAM,CAOR"}
@@ -7,7 +7,7 @@
7
7
  * DIFFERENT AST — so this is the missing primitive that makes a bridge's
8
8
  * `symbolic` form executable.
9
9
  *
10
- * The tree is lowered with `createScalarBuilder` and evaluated with
10
+ * The tree is lowered with `toScalarNode` (`dimensional/scalar-lowering`, which writes a one-argument `-` as a negation) and evaluated with
11
11
  * `evaluateScalar`. This module does not print a formula and does not parse
12
12
  * one. Leaf resolution order (Adam A-1, A-5): caller `values` win, then the
13
13
  * `CONSTANTS` registry, then a spelled-out multiple of π, then a base-10
@@ -19,10 +19,12 @@
19
19
  *
20
20
  * @module composition/expr-eval
21
21
  */
22
- import { createScalarBuilder, ScalarBuildError } from '@danielsimonjr/mathts-expression';
22
+ import { ScalarBuildError } from '@danielsimonjr/mathts-expression';
23
23
  import { evaluateScalar, ScalarEvalError } from '@danielsimonjr/mathts-functions';
24
+ import { forEachScalarLeaf } from '../dimensional/ast-leaves.js';
24
25
  import { CONSTANTS, piMultipleValue } from '../dimensional/symbolic-constants.js';
25
26
  import { FORMULA_NAMED } from '../dimensional/formula-names.js';
27
+ import { toScalarNode } from '../dimensional/scalar-lowering.js';
26
28
  /** A scalar `ExprNode` could not be evaluated (unsupported arm / unresolved
27
29
  * leaf / non-finite result). @public */
28
30
  export class SymbolicEvalError extends Error {
@@ -31,20 +33,9 @@ export class SymbolicEvalError extends Error {
31
33
  this.name = 'SymbolicEvalError';
32
34
  }
33
35
  }
34
- const builder = createScalarBuilder();
35
36
  /** Symbol names on the scalar arms. Other kinds are left for the builder to reject. */
36
37
  function symbolNames(node, out) {
37
- if (node.kind === 'symbol') {
38
- out.add(node.name);
39
- return;
40
- }
41
- if (node.kind === 'op') {
42
- for (const arg of node.args)
43
- symbolNames(arg, out);
44
- return;
45
- }
46
- if (node.kind === 'transcendental' || node.kind === 'abs')
47
- symbolNames(node.arg, out);
38
+ forEachScalarLeaf(node, (leaf) => out.add(leaf.name), { transcendental: true, abs: true });
48
39
  }
49
40
  /**
50
41
  * Caller bindings, then registered constants and spelled-out π multiples
@@ -89,7 +80,7 @@ function asSymbolic(err) {
89
80
  */
90
81
  export function evalExpr(node, values = {}) {
91
82
  try {
92
- const lowered = builder.from(node);
83
+ const lowered = toScalarNode(node);
93
84
  return evaluateScalar(lowered, scopeFor(node, values));
94
85
  }
95
86
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"expr-eval.js","sourceRoot":"","sources":["../../src/composition/expr-eval.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Scalar `ExprNode` value evaluator (v0.12 symbolic composition).\n *\n * Numerically evaluates a SCALAR `ExprNode` (the `symbol` / `op` /\n * `transcendental` / `abs` arms) given leaf values. The dimensional validator infers\n * dimensions but never computes values, and the formula parser evaluates a\n * DIFFERENT AST — so this is the missing primitive that makes a bridge's\n * `symbolic` form executable.\n *\n * The tree is lowered with `createScalarBuilder` and evaluated with\n * `evaluateScalar`. This module does not print a formula and does not parse\n * one. Leaf resolution order (Adam A-1, A-5): caller `values` win, then the\n * `CONSTANTS` registry, then a spelled-out multiple of π, then a base-10\n * numeric-literal symbol (`'2'`, `'3'`), which MathTS resolves. An unresolved\n * or non-finite operator result throws. Tensor / integral / derivative arms\n * are out of scope and throw.\n *\n * INTERNAL — not on the public surface.\n *\n * @module composition/expr-eval\n */\n\nimport { createScalarBuilder, ScalarBuildError } from '@danielsimonjr/mathts-expression';\nimport { evaluateScalar, ScalarEvalError } from '@danielsimonjr/mathts-functions';\nimport type { ExprNode } from '../dimensional/validator.js';\nimport { CONSTANTS, piMultipleValue } from '../dimensional/symbolic-constants.js';\nimport { FORMULA_NAMED } from '../dimensional/formula-names.js';\n\n/** A scalar `ExprNode` could not be evaluated (unsupported arm / unresolved\n * leaf / non-finite result). @public */\nexport class SymbolicEvalError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SymbolicEvalError';\n }\n}\n\nconst builder = createScalarBuilder();\n\n/** Symbol names on the scalar arms. Other kinds are left for the builder to reject. */\nfunction symbolNames(node: ExprNode, out: Set<string>): void {\n if (node.kind === 'symbol') {\n out.add(node.name);\n return;\n }\n if (node.kind === 'op') {\n for (const arg of node.args) symbolNames(arg, out);\n return;\n }\n if (node.kind === 'transcendental' || node.kind === 'abs') symbolNames(node.arg, out);\n}\n\n/**\n * Caller bindings, then registered constants and spelled-out π multiples\n * that the caller did not set. Numeric-literal names stay unset so MathTS\n * reads them.\n */\nfunction scopeFor(\n node: ExprNode,\n values: Readonly<Record<string, number>>,\n): Record<string, number> {\n const scope: Record<string, number> = { ...values };\n const names = new Set<string>();\n symbolNames(node, names);\n for (const name of names) {\n if (Object.prototype.hasOwnProperty.call(scope, name)) continue;\n const constant = CONSTANTS[name];\n if (constant !== undefined) {\n scope[name] = constant.value;\n continue;\n }\n const named = FORMULA_NAMED.find((row) => row.name === name);\n if (named !== undefined) {\n scope[name] = named.value;\n continue;\n }\n const pi = piMultipleValue(name);\n if (pi !== undefined) scope[name] = pi;\n }\n return scope;\n}\n\nfunction asSymbolic(err: unknown): Error {\n if (err instanceof ScalarEvalError || err instanceof ScalarBuildError) {\n // MathTS names its own function first (`evaluateScalar:`); the message is kept whole, not rewritten.\n return new SymbolicEvalError(`evalExpr: ${err.message}`);\n }\n return err instanceof Error ? err : new SymbolicEvalError(String(err));\n}\n\n/**\n * Evaluate a scalar `ExprNode` to a number. See module docs for the leaf\n * resolution order and scope.\n *\n * @internal\n */\nexport function evalExpr(\n node: ExprNode,\n values: Readonly<Record<string, number>> = {},\n): number {\n try {\n const lowered = builder.from(node);\n return evaluateScalar(lowered, scopeFor(node, values));\n } catch (err) {\n throw asSymbolic(err);\n }\n}\n"]}
1
+ {"version":3,"file":"expr-eval.js","sourceRoot":"","sources":["../../src/composition/expr-eval.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Scalar `ExprNode` value evaluator (v0.12 symbolic composition).\n *\n * Numerically evaluates a SCALAR `ExprNode` (the `symbol` / `op` /\n * `transcendental` / `abs` arms) given leaf values. The dimensional validator infers\n * dimensions but never computes values, and the formula parser evaluates a\n * DIFFERENT AST — so this is the missing primitive that makes a bridge's\n * `symbolic` form executable.\n *\n * The tree is lowered with `toScalarNode` (`dimensional/scalar-lowering`, which writes a one-argument `-` as a negation) and evaluated with\n * `evaluateScalar`. This module does not print a formula and does not parse\n * one. Leaf resolution order (Adam A-1, A-5): caller `values` win, then the\n * `CONSTANTS` registry, then a spelled-out multiple of π, then a base-10\n * numeric-literal symbol (`'2'`, `'3'`), which MathTS resolves. An unresolved\n * or non-finite operator result throws. Tensor / integral / derivative arms\n * are out of scope and throw.\n *\n * INTERNAL — not on the public surface.\n *\n * @module composition/expr-eval\n */\n\nimport { ScalarBuildError } from '@danielsimonjr/mathts-expression';\nimport { evaluateScalar, ScalarEvalError } from '@danielsimonjr/mathts-functions';\nimport type { ExprNode } from '../dimensional/validator.js';\nimport { forEachScalarLeaf } from '../dimensional/ast-leaves.js';\nimport { CONSTANTS, piMultipleValue } from '../dimensional/symbolic-constants.js';\nimport { FORMULA_NAMED } from '../dimensional/formula-names.js';\nimport { toScalarNode } from '../dimensional/scalar-lowering.js';\n\n/** A scalar `ExprNode` could not be evaluated (unsupported arm / unresolved\n * leaf / non-finite result). @public */\nexport class SymbolicEvalError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SymbolicEvalError';\n }\n}\n\n/** Symbol names on the scalar arms. Other kinds are left for the builder to reject. */\nfunction symbolNames(node: ExprNode, out: Set<string>): void {\n forEachScalarLeaf(node, (leaf) => out.add(leaf.name), { transcendental: true, abs: true });\n}\n\n/**\n * Caller bindings, then registered constants and spelled-out π multiples\n * that the caller did not set. Numeric-literal names stay unset so MathTS\n * reads them.\n */\nfunction scopeFor(\n node: ExprNode,\n values: Readonly<Record<string, number>>,\n): Record<string, number> {\n const scope: Record<string, number> = { ...values };\n const names = new Set<string>();\n symbolNames(node, names);\n for (const name of names) {\n if (Object.prototype.hasOwnProperty.call(scope, name)) continue;\n const constant = CONSTANTS[name];\n if (constant !== undefined) {\n scope[name] = constant.value;\n continue;\n }\n const named = FORMULA_NAMED.find((row) => row.name === name);\n if (named !== undefined) {\n scope[name] = named.value;\n continue;\n }\n const pi = piMultipleValue(name);\n if (pi !== undefined) scope[name] = pi;\n }\n return scope;\n}\n\nfunction asSymbolic(err: unknown): Error {\n if (err instanceof ScalarEvalError || err instanceof ScalarBuildError) {\n // MathTS names its own function first (`evaluateScalar:`); the message is kept whole, not rewritten.\n return new SymbolicEvalError(`evalExpr: ${err.message}`);\n }\n return err instanceof Error ? err : new SymbolicEvalError(String(err));\n}\n\n/**\n * Evaluate a scalar `ExprNode` to a number. See module docs for the leaf\n * resolution order and scope.\n *\n * @internal\n */\nexport function evalExpr(\n node: ExprNode,\n values: Readonly<Record<string, number>> = {},\n): number {\n try {\n const lowered = toScalarNode(node);\n return evaluateScalar(lowered, scopeFor(node, values));\n } catch (err) {\n throw asSymbolic(err);\n }\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Symbolic simplification of a scalar `ExprNode` via MathTS (v0.12 — optional
3
- * supplement to symbolic composition).
2
+ * Symbolic simplification of a scalar `ExprNode` through MathTS, a supplement
3
+ * to symbolic composition.
4
4
  *
5
5
  * Composing two bridges' symbolic forms leaves an UNSIMPLIFIED AST — CT-1 is
6
6
  * `k_B·(ℏc³/8πG·mass·k_B)·ln2`, with `k_B` uncancelled. This folds it to the
7
7
  * canonical `ℏc³·ln2/(8πG·mass)` using `@danielsimonjr/mathts-functions`'
8
- * `simplify` (the same OPTIONAL peer the Path-A formula parser loads).
8
+ * `simplify`, a required dependency.
9
9
  *
10
10
  * Pipeline (Adam+Eve-vetted — docs/planning/v0.12.0-Symbolic-Simplification-
11
11
  * Design.md): GENSYM every non-exponent leaf to a mathjs-safe identifier
@@ -19,7 +19,7 @@
19
19
  * 3. numeric — `evalExpr` agrees over ≥2 finite synthesized probes at
20
20
  * rel tol 1e-9 (Adam CRITICAL-2 / EVE-C).
21
21
  * A representable result that DISAGREES dimensionally/numerically THROWS (a
22
- * bug to surface); anything we cannot represent / verify / load degrades to a
22
+ * bug to surface); anything we cannot represent or verify degrades to a
23
23
  * graceful no-op (return the original, `simplified:false`).
24
24
  *
25
25
  * INTERNAL — surfaced via `upt symbolic --simplify`.
@@ -27,7 +27,23 @@
27
27
  * @module composition/expr-simplify
28
28
  */
29
29
  import type { ExprNode } from '../dimensional/validator.js';
30
+ import type { Dimension } from '../dimensional/types.js';
30
31
  import type { Observable } from './compose-symbolic.js';
32
+ /** The leaf a gensym stands for: its name and dimension. @internal */
33
+ export interface LeafMeta {
34
+ readonly name: string;
35
+ readonly dim: Dimension;
36
+ }
37
+ /**
38
+ * Render a scalar ExprNode to a mathjs-safe, fully-parenthesized string,
39
+ * gensym'ing each non-literal leaf by NAME (so repeats share an identifier
40
+ * and can cancel). Throws on a non-scalar arm and on a non-literal exponent;
41
+ * `algebraic-equivalence.ts` renders both sides of a quotient through one
42
+ * gensym table with it.
43
+ *
44
+ * @internal
45
+ */
46
+ export declare function renderGensym(expr: ExprNode, gensymOf: Map<string, string>, meta: Map<string, LeafMeta>): string;
31
47
  /** The result of attempting to simplify an expression. */
32
48
  interface SimplifyResult {
33
49
  readonly expr: ExprNode;
@@ -35,22 +51,18 @@ interface SimplifyResult {
35
51
  readonly simplified: boolean;
36
52
  }
37
53
  /**
38
- * Whether the optional MathTS simplifier peer is installed AND passes its
39
- * smoke test.
40
- *
41
- * {@link simplifyExpr} returns `simplified: false` both when the peer is absent
42
- * and when it is present but could not reduce the expression, so a caller that
43
- * must report WHY nothing happened (the atlas witness runner's `peer-absent`
44
- * versus `not-simplified`) needs this separate signal. Shares the same cached
45
- * detection, so it costs nothing after the first call.
54
+ * Whether the MathTS simplifier is usable. MathTS is a required dependency, so
55
+ * the answer is true; a simplifier that fails its smoke test throws instead.
56
+ * The atlas witness runner reads it to choose between the simplifier and its
57
+ * `peer-absent` path, which a caller still reaches by passing `null`.
46
58
  *
47
59
  * @internal
48
60
  */
49
61
  export declare function isSimplifierAvailable(): Promise<boolean>;
50
62
  /**
51
63
  * Simplify a scalar `ExprNode` via MathTS, guarded. Returns the original
52
- * unchanged (`simplified:false`) when the peer is absent or the result cannot
53
- * be represented/verified; THROWS {@link SimplificationError} only when a
64
+ * unchanged (`simplified:false`) when the result cannot be represented or
65
+ * verified; THROWS {@link SimplificationError} only when a
54
66
  * representable result disagrees dimensionally/numerically. See module docs.
55
67
  *
56
68
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"expr-simplify.d.ts","sourceRoot":"","sources":["../../src/composition/expr-simplify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAO5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAwOxD,0DAA0D;AAC1D,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE9D;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAgE1E;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAI7E"}
1
+ {"version":3,"file":"expr-simplify.d.ts","sourceRoot":"","sources":["../../src/composition/expr-simplify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAyExD,sEAAsE;AACtE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;CACzB;AAID;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAC1B,MAAM,CAwBR;AA6GD,0DAA0D;AAC1D,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG9D;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CA+D1E;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAI7E"}