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":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt eval` — evaluate the caller's own scalar formula (safe — arithmetic\n * only). Transposed verbatim from bin/upt.mjs's `evalCmd()` (lines\n * 290-310), plus `--json`. `--debug`/`--json` are now declared flags\n * (parsed by `args.ts`), so the positionals `evalCmd` used to filter\n * `--debug` out of by hand are already clean — the `expr`/`name=value`\n * positional-parsing contract is otherwise unchanged.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson } from '../output.js';\nimport { CliError, UsageError } from '../errors.js';\nimport { formulaParserLabel } from '../version.js';\nimport { FormulaUsageError } from '../euler-guard.js';\nimport { codataScope } from '../eval-numbers.js';\nimport { splitAssignments } from '../bindings.js';\nimport type { UnitMode } from '../../dimensional/natural-units.js';\n\nconst FLAGS: FlagSpec[] = [\n { name: '--debug', valueStyle: 'none', description: 'Print the formula parser name and version on stderr.' },\n JSON_FLAG,\n {\n name: '--show-parser',\n valueStyle: 'none',\n description: 'Print mathts. With no formula, that is the whole output and the exit code is 0.',\n },\n { name: '--natural', valueStyle: 'none', description: 'Set ħ = c = 1 (and h = 2π) when reading values.' },\n { name: '--geometrized', valueStyle: 'none', description: 'Set ħ = c = G = 1 when reading values.' },\n];\n\n/**\n * Read `name=value` bindings. A missing `=` is a usage error (exit 2) and a\n * name given twice is refused (exit 1), by the one splitter every command uses.\n * A value that is not a finite number or a known unit is a bad value\n * (exit 1), the same code `upt evaluate` uses. A value is a number, a\n * unit (`1Msun`), or an expression of constants and units (`0.6*c`, `pi/2`).\n * `T`, `temperature`, `temp`, and `T_K` speak kelvin. An energy on that\n * name is `k_B T`, using the explicit `k_B` when there is one.\n */\nfunction parseScope(\n api: CommandCtx['api'],\n args: readonly string[],\n mode: UnitMode,\n): { scope: Record<string, number>; notes: string[] } {\n const scope: Record<string, number> = {};\n const notes: string[] = [];\n const assignments = splitAssignments('eval', args).map((a) => ({ name: a.name, raw: a.raw, assignment: a.token }));\n const siblings = assignments.map((a) => ({ name: a.name, raw: a.raw }));\n for (const a of assignments) {\n try {\n const read = api.readNamedBinding(a.name, a.raw, { mode, siblings });\n scope[a.name] = read.value;\n for (const note of read.notes) if (!notes.includes(note)) notes.push(note);\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt eval: ${e.message}`);\n const msg = e instanceof api.UnitError ? e.message : (e as Error).message;\n throw new CliError(`upt eval: '${a.assignment}' is not a finite number or a known unit. ${msg}`);\n }\n }\n try {\n return { scope: api.expandSynonymValues(scope), notes };\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt eval: ${e.message}`);\n throw e;\n }\n}\n\nconst HELP = `upt eval \"<formula>\" name=value ...\n Evaluate YOUR OWN scalar formula (safe — arithmetic only). Knows the\n constants pi and tau and the functions sqrt, cbrt, exp, ln, log\n (natural, = ln), log10, log2, abs, sin, cos, tan, asin, acos, atan,\n sinh, cosh, tanh, pow, atan2. log is the NATURAL logarithm: use log10\n or log2 for base 10 or 2. A bare e is the elementary charge (the\n CODATA value). E is energy: the binding is its own argument, \\`upt eval E E=1eV\\`. Euler's number is\n exp(x), for example exp(1), never a bare e and never the name euler.\n e_charge is the same charge.\n An explicit e=<number> replaces the CODATA value. CODATA\n names are filled in when you omit them: every registered constant\n (G, c, hbar, h, k_B, e, ln2, epsilon_0, sigma_sb, b, GM_sun, Msun_iau)\n and the aliases e_charge, m_e, m_p, m_proton, N_A, F, eps0, mu0, mu_0, kB, M_sun.\n m_p and m_proton are the proton mass. N_A is the Avogadro constant.\n F is the Faraday constant, N_A times the elementary charge. A bare\n sigma is not the Stefan–Boltzmann constant; write sigma_sb. The tesla\n takes an SI prefix (12nT, 12uT); a bare T is still the tesla and Ts is\n still a terasecond. A value may be a\n number, a unit (M=1Msun, B=1T, x=1AU) or an expression of those\n constants and units (v=0.6*c, theta=pi/2). T, temperature, temp, and\n T_K are kelvin: an energy on that name is k_B T, and any other\n dimension is an error. A binding is read by the same MathTS\n parser as the formula, so write 2*pi; a bare e there is the elementary charge.\n --natural sets ħ = c = 1 (h = 2π); --geometrized also\n sets G = 1. --show-parser prints mathts and, with no\n formula, exits 0. With --json that answer is a JSON envelope.\n --debug prints the parser and its version to stderr.\n An unknown function fails and names a documented equivalent where one\n exists (lg → log10).\n e.g. upt eval \"hbar*c^3/(8*pi*G*M*k_B)\" M=1.989e30\n (hbar, c, G and k_B are registered constants; M is bound)`;\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out, err } = ctx;\n const debug = args.flags.has('debug');\n const isJson = args.flags.has('json');\n const positionals = args.positionals;\n const kind = await api.getFormulaParserKind();\n\n const expr = positionals[0];\n if (args.flags.has('show-parser') && !expr) {\n if (isJson) {\n emitJson({ command: 'eval', result: { parser: kind } }, ctx.write);\n return 0;\n }\n out(kind);\n return 0;\n }\n if (!expr) {\n throw new UsageError('upt eval needs a formula, e.g. upt eval \"a*b^2\" a=2 b=3');\n }\n\n const parser = await api.getFormulaParser();\n if (debug) err(`[parser: ${formulaParserLabel(kind)}]`);\n\n let cf;\n try {\n cf = parser.parse(expr);\n } catch (e) {\n // The parser's message carries its own `parse error:` label.\n throw new FormulaUsageError((e as Error).message, kind);\n }\n\n if (args.flags.has('geometrized') && args.flags.has('natural')) {\n throw new UsageError('upt eval: pick one unit mode: --natural (ħ = c = 1) or --geometrized (ħ = c = G = 1)');\n }\n const mode: UnitMode = args.flags.has('geometrized') ? 'geometrized' : args.flags.has('natural') ? 'natural' : 'si';\n const parsed = parseScope(api, positionals.slice(1), mode);\n const scope = { ...codataScope(mode), ...parsed.scope };\n\n const missing = cf.variables.filter((v) => !(v in scope));\n if (missing.length) {\n const energyHint = missing.includes('E')\n ? ' E is energy. The binding is its own argument: upt eval E E=1eV.'\n : '';\n throw new FormulaUsageError(\n `missing values for: ${missing.join(', ')} (free variables: ${cf.variables.join(', ') || 'none'}).${energyHint}`,\n kind,\n );\n }\n\n // A bare e is the CODATA charge. Subtracting it from a number is not\n // eccentricity, and the numeric result is indistinguishable from 1.\n // A caller who bound e chose a different quantity.\n if (!('e' in parsed.scope)) {\n const checked = api.builtinFormulaDimensionChecker().check(expr, {});\n if (!checked.ok && checked.elementaryChargeMixed === true) {\n throw new FormulaUsageError(checked.error!, kind);\n }\n }\n\n const notes: string[] = [...parsed.notes];\n if (mode === 'si') for (const note of api.constantNotes(cf.variables)) notes.push(`note: ${note}`);\n for (const note of notes) err(note);\n\n // A non-finite result (`ln(-1)`, `1/0`) is a bad value at the point: exit 1, by class.\n // An unknown function or symbol is a malformed formula: exit 2.\n let value: number;\n try {\n value = cf.evaluate(scope);\n } catch (e) {\n if (e instanceof api.FormulaValueError) throw new CliError(`upt eval: ${e.message}`);\n throw new FormulaUsageError((e as Error).message, kind);\n }\n\n if (isJson) {\n emitJson(\n {\n command: 'eval',\n result: { value, ...(notes.length === 0 ? {} : { notes }), ...(mode === 'si' ? {} : { units: mode }) },\n },\n ctx.write,\n );\n return 0;\n }\n\n out(String(value));\n return 0;\n}\n\nexport const command: Command = {\n name: 'eval',\n aliases: ['calc'],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Evaluate a scalar formula. A bare e is the elementary charge; Euler\\'s number is exp(x).',\n example: 'upt eval \"2*pi*sqrt(1/9.81)\"',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt eval` — evaluate the caller's own scalar formula (safe — arithmetic\n * only). Transposed verbatim from bin/upt.mjs's `evalCmd()` (lines\n * 290-310), plus `--json`. `--debug`/`--json` are now declared flags\n * (parsed by `args.ts`), so the positionals `evalCmd` used to filter\n * `--debug` out of by hand are already clean — the `expr`/`name=value`\n * positional-parsing contract is otherwise unchanged.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson } from '../output.js';\nimport { CliError, UsageError } from '../errors.js';\nimport { formulaParserLabel } from '../version.js';\nimport { FormulaUsageError } from '../euler-guard.js';\nimport { codataScope } from '../eval-numbers.js';\nimport { splitAssignments } from '../bindings.js';\nimport type { UnitMode } from '../../dimensional/natural-units.js';\n\nconst FLAGS: FlagSpec[] = [\n { name: '--debug', valueStyle: 'none', description: 'Print the formula parser name and version on stderr.' },\n JSON_FLAG,\n {\n name: '--show-parser',\n valueStyle: 'none',\n description: 'Print mathts. With no formula, that is the whole output and the exit code is 0.',\n },\n { name: '--natural', valueStyle: 'none', description: 'Set ħ = c = 1 (and h = 2π) when reading values.' },\n { name: '--geometrized', valueStyle: 'none', description: 'Set ħ = c = G = 1 when reading values.' },\n];\n\n/**\n * Read `name=value` bindings. A missing `=` is a usage error (exit 2) and a\n * name given twice is refused (exit 1), by the one splitter every command uses.\n * A value that is not a finite number or a known unit is a bad value\n * (exit 1), the same code `upt evaluate` uses. A value is a number, a\n * unit (`1Msun`), or an expression of constants and units (`0.6*c`, `pi/2`).\n * `T`, `temperature`, `temp`, and `T_K` speak kelvin. An energy on that\n * name is `k_B T`, using the explicit `k_B` when there is one.\n */\nfunction parseScope(\n api: CommandCtx['api'],\n args: readonly string[],\n mode: UnitMode,\n): { scope: Record<string, number>; notes: string[] } {\n const scope: Record<string, number> = {};\n const notes: string[] = [];\n const assignments = splitAssignments('eval', args).map((a) => ({ name: a.name, raw: a.raw, assignment: a.token }));\n const siblings = assignments.map((a) => ({ name: a.name, raw: a.raw }));\n for (const a of assignments) {\n try {\n const read = api.readNamedBinding(a.name, a.raw, { mode, siblings });\n scope[a.name] = read.value;\n for (const note of read.notes) if (!notes.includes(note)) notes.push(note);\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt eval: ${e.message}`);\n const msg = e instanceof api.UnitError ? e.message : (e as Error).message;\n throw new CliError(`upt eval: '${a.assignment}' is not a finite number or a known unit. ${msg}`);\n }\n }\n try {\n return { scope: api.expandSynonymValues(scope), notes };\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt eval: ${e.message}`);\n throw e;\n }\n}\n\nconst HELP = `upt eval \"<formula>\" name=value ...\n Evaluate YOUR OWN scalar formula (safe — arithmetic only). Knows the\n constants pi and tau and the functions sqrt, cbrt, exp, ln, log\n (natural, = ln), log10, log2, abs, sin, cos, tan, asin, acos, atan,\n sinh, cosh, tanh, pow, atan2. log is the NATURAL logarithm: use log10\n or log2 for base 10 or 2. A bare e is the elementary charge (the\n CODATA value). E is energy: the binding is its own argument, \\`upt eval E E=1eV\\`. Euler's number is\n exp(x), for example exp(1), never a bare e and never the name euler.\n e_charge is the same charge.\n An explicit e=<number> replaces the CODATA value. CODATA\n names are filled in when you omit them: every registered constant\n (G, c, hbar, h, k_B, e, ln2, epsilon_0, sigma_sb, b, GM_sun, Msun_iau)\n and the aliases e_charge, m_e, m_p, m_proton, N_A, F, eps0, mu0, mu_0, kB, M_sun.\n m_p and m_proton are the proton mass. N_A is the Avogadro constant.\n F is the Faraday constant, N_A times the elementary charge. A bare\n sigma is not the Stefan–Boltzmann constant; write sigma_sb. The tesla\n takes an SI prefix (12nT, 12uT); a bare T is still the tesla and Ts is\n still a terasecond. A value may be a\n number, a unit (M=1Msun, B=1T, x=1AU) or an expression of those\n constants and units (v=0.6*c, theta=pi/2). T, temperature, temp, and\n T_K are kelvin: an energy on that name is k_B T, and any other\n dimension is an error. A binding is read by the same MathTS\n parser as the formula, so write 2*pi; a bare e there is the elementary charge.\n --natural sets ħ = c = 1 (h = 2π); --geometrized also\n sets G = 1. --show-parser prints mathts and, with no\n formula, exits 0. With --json that answer is a JSON envelope.\n --debug prints the parser and its version to stderr.\n An unknown function fails and names a documented equivalent where one\n exists (lg → log10).\n e.g. upt eval \"hbar*c^3/(8*pi*G*M*k_B)\" M=1.989e30\n (hbar, c, G and k_B are registered constants; M is bound)`;\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out, err } = ctx;\n const debug = args.flags.has('debug');\n const isJson = args.flags.has('json');\n const positionals = args.positionals;\n const kind = await api.getFormulaParserKind();\n\n const expr = positionals[0];\n if (args.flags.has('show-parser') && !expr) {\n if (isJson) {\n emitJson({ command: 'eval', result: { parser: kind } }, ctx.write);\n return 0;\n }\n out(kind);\n return 0;\n }\n if (!expr) {\n throw new UsageError('upt eval needs a formula, e.g. upt eval \"a*b^2\" a=2 b=3');\n }\n\n const parser = await api.getFormulaParser();\n if (debug) err(`[parser: ${formulaParserLabel(kind)}]`);\n\n let cf;\n try {\n cf = parser.parse(expr);\n } catch (e) {\n // The parser's message carries its own `parse error:` label.\n throw new FormulaUsageError((e as Error).message, kind);\n }\n\n if (args.flags.has('geometrized') && args.flags.has('natural')) {\n throw new UsageError('upt eval: pick one unit mode: --natural (ħ = c = 1) or --geometrized (ħ = c = G = 1)');\n }\n const mode: UnitMode = args.flags.has('geometrized') ? 'geometrized' : args.flags.has('natural') ? 'natural' : 'si';\n const parsed = parseScope(api, positionals.slice(1), mode);\n const scope = { ...codataScope(mode), ...parsed.scope };\n\n const missing = cf.variables.filter((v) => !(v in scope));\n if (missing.length) {\n const energyHint = missing.includes('E')\n ? ' E is energy. The binding is its own argument: upt eval E E=1eV.'\n : '';\n throw new FormulaUsageError(\n `missing values for: ${missing.join(', ')} (free variables: ${cf.variables.join(', ') || 'none'}).${energyHint}`,\n kind,\n );\n }\n\n // A bare e is the CODATA charge. Subtracting it from a number is not\n // eccentricity, and the numeric result is indistinguishable from 1.\n // A caller who bound e chose a different quantity.\n if (!('e' in parsed.scope)) {\n const checked = api.builtinFormulaDimensionChecker().check(expr, {});\n if (!checked.ok && checked.elementaryChargeMixed === true) {\n throw new FormulaUsageError(checked.error!, kind);\n }\n }\n\n const notes: string[] = [...parsed.notes];\n if (mode === 'si') for (const note of api.constantNotes(cf.variables)) notes.push(`note: ${note}`);\n for (const note of notes) err(note);\n\n // A non-finite result (`ln(-1)`, `1/0`) is a bad value at the point: exit 1, by class.\n // An unknown function or symbol is a malformed formula: exit 2.\n let value: number;\n try {\n value = cf.evaluate(scope);\n } catch (e) {\n if (e instanceof api.FormulaValueError) throw new CliError(`upt eval: ${e.message}`);\n throw new FormulaUsageError((e as Error).message, kind);\n }\n\n if (isJson) {\n emitJson(\n {\n command: 'eval',\n result: { value, ...(notes.length === 0 ? {} : { notes }), ...(mode === 'si' ? {} : { units: mode }) },\n },\n ctx.write,\n );\n return 0;\n }\n\n out(String(value));\n return 0;\n}\n\nexport const command: Command = {\n name: 'eval',\n aliases: ['calc'],\n positionals: { max: Infinity },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Evaluate a scalar formula. A bare e is the elementary charge; Euler\\'s number is exp(x).',\n example: 'upt eval \"2*pi*sqrt(1/9.81)\"',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/evaluate.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAod/E,eAAO,MAAM,OAAO,EAAE,OASrB,CAAC"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/evaluate.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AA+e/E,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { registerCommand } from '../command.js';
2
2
  import { commandHelp, JSON_FLAG } from '../flag-help.js';
3
- import { emitJson } from '../output.js';
4
- import { coherentUnits, derivedUnitOf, siUnitOf } from '../expr-print.js';
3
+ import { emitJson, emitJsonError } from '../output.js';
4
+ import { coherentUnits, derivedUnitOf } from '../expr-print.js';
5
5
  import { splitAssignments } from '../bindings.js';
6
+ import { realFlag } from '../numeric-flag.js';
6
7
  import { UsageError } from '../errors.js';
7
8
  import { CliError } from '../errors.js';
8
9
  import { closedFormRangeLabel } from '../closed-form-range.js';
@@ -39,8 +40,8 @@ const HELP = `upt evaluate <be-NN | case-id> key=value[unit] ...
39
40
  (temperature-change, dT) and a --sigma take the interval, with no offset.
40
41
  An undeclared key exits 1 instead of being ignored. A declared
41
42
  alternate (major_axis_m for a_m) is converted exactly and said so.
42
- e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 1.456 M_⊙
43
- (ideal degenerate gas, with m_u and M_⊙ = 1.989e30 kg)
43
+ e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 2.896e30 kg (≈ 1.456 M_⊙
44
+ with M_⊙ = 1.989e30 kg; ideal degenerate gas, with m_u)
44
45
  upt evaluate be-55 C=1 → quantum Hall σ_xy = e²/h in siemens (R_H = 1/σ_xy = h/e²,
45
46
  the von Klitzing constant)
46
47
  With no bridge id, lists the evaluable bridges and their declared inputs.
@@ -101,23 +102,44 @@ function describeParameter(p) {
101
102
  return (`${p.key} [${p.unit || 'dimensionless'}] ${p.quantity} ${p.symbol}${extras.length > 0 ? ` (${extras.join('; ')})` : ''} — ${p.meaning}` +
102
103
  (alts.length > 0 ? `; ${alts.join('; ')}` : ''));
103
104
  }
105
+ /**
106
+ * The parameter a `--sigma` spelling names, through the same contract the inputs use
107
+ * (`resolveEvaluatorInputs`): the key itself, a declared alternate (`diameter_m` for `a_m`,
108
+ * whose σ is scaled by the alternate's `toKey`), or a synonym spelling of the key. `undefined`
109
+ * when the spelling names none of them.
110
+ */
111
+ function sigmaSlot(api, parameters, given) {
112
+ const direct = parameters.find((p) => p.key === given);
113
+ if (direct !== undefined)
114
+ return { key: direct.key, unit: direct.unit, factor: 1 };
115
+ for (const p of parameters) {
116
+ const alt = (p.alternates ?? []).find((a) => a.key === given);
117
+ if (alt !== undefined)
118
+ return { key: p.key, unit: p.unit, factor: alt.toKey };
119
+ }
120
+ const viaName = api.resolveQuantityName(given, new Set(parameters.map((p) => p.key)));
121
+ const synonym = viaName === null ? undefined : parameters.find((p) => p.key === viaName);
122
+ return synonym === undefined ? undefined : { key: synonym.key, unit: synonym.unit, factor: 1 };
123
+ }
104
124
  function parseUncertainty(api, spec, sigmaArgs, corrArgs, inputs) {
105
125
  const sigma = {};
106
126
  splitAssignments('evaluate --sigma', sigmaArgs, 'key=u');
107
127
  for (const a of sigmaArgs) {
108
128
  const m = /^([^=]+)=(.+)$/.exec(a);
109
129
  const given = m?.[1];
110
- const key = given === undefined ? undefined : (api.resolveQuantityName(given, new Set(Object.keys(inputs))) ?? given);
130
+ // The same spellings the inputs take: the key, a declared alternate, or a synonym.
131
+ const slot = given === undefined ? undefined : sigmaSlot(api, spec.parameters, given);
132
+ const key = slot?.key;
111
133
  if (m !== null && (key === undefined || !(key in inputs))) {
112
134
  throw new CliError(`upt evaluate: --sigma '${given}' is not one of the inputs given (${Object.keys(inputs).join(', ')})`);
113
135
  }
114
136
  // A σ is a difference: a σ in degC takes no 273.15 offset. The value is read
115
137
  // by the same binding reader as the input, so an energy on a kelvin slot is k_B T.
138
+ // A σ given under an alternate is scaled by the alternate's factor (a diameter's σ is twice the radius's).
116
139
  let u = NaN;
117
- if (m !== null && key !== undefined) {
118
- const p = spec.parameters.find((x) => x.key === key);
140
+ if (m !== null && slot !== undefined) {
119
141
  try {
120
- u = api.readNamedBinding(given, m[2], { reading: 'difference', declaredUnit: p.unit }).value;
142
+ u = api.readNamedBinding(given, m[2], { reading: 'difference', declaredUnit: slot.unit }).value * slot.factor;
121
143
  }
122
144
  catch (e) {
123
145
  if (!(e instanceof api.UnitError))
@@ -137,7 +159,8 @@ function parseUncertainty(api, spec, sigmaArgs, corrArgs, inputs) {
137
159
  const corr = new Map();
138
160
  for (const a of corrArgs) {
139
161
  const m = /^([^,=]+),([^,=]+)=(.+)$/.exec(a);
140
- const rho = m === null ? NaN : Number(m[3]);
162
+ // The grammar first (a malformed rho is usage, exit 2), the range after (a bad value, exit 1).
163
+ const rho = m === null ? NaN : realFlag('evaluate', '--corr rho', m[3]);
141
164
  if (m === null || !Number.isFinite(rho) || Math.abs(rho) > 1)
142
165
  throw new CliError(`upt evaluate: --corr '${a}' is not a,b=<rho in [-1, 1]>`);
143
166
  const [x, y] = [m[1], m[2]];
@@ -308,7 +331,23 @@ async function runCase(ctx, c, rest) {
308
331
  out(` ${l.id} — ${l.role}`);
309
332
  return code;
310
333
  }
334
+ /**
335
+ * `--json` answers a refusal in the envelope too (`emitJsonError`), with the exit code the
336
+ * refusal stands for; the text mode reports it on stderr as every command does. A defect
337
+ * (neither error class) propagates either way.
338
+ */
311
339
  async function run(ctx) {
340
+ try {
341
+ return await evaluate(ctx);
342
+ }
343
+ catch (e) {
344
+ if (ctx.args.flags.has('json') && (e instanceof UsageError || e instanceof CliError)) {
345
+ return emitJsonError('evaluate', e, ctx.write);
346
+ }
347
+ throw e;
348
+ }
349
+ }
350
+ async function evaluate(ctx) {
312
351
  const { args, api, out } = ctx;
313
352
  const [target, ...rest] = args.positionals;
314
353
  if (!target) {
@@ -361,27 +400,23 @@ async function run(ctx) {
361
400
  throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);
362
401
  }
363
402
  const spec = found.evaluator;
364
- const { inputs, resolved } = resolveInputs(api, `be-${spec.bridgeId}`, spec.parameters, rest);
365
- // The one evaluation: `run` checks the inputs (missing, unknown, type) before the domain.
366
- let result;
403
+ const key = api.catalogEdgeKey(spec.bridgeId);
404
+ const { inputs, resolved } = resolveInputs(api, key, spec.parameters, rest);
405
+ // The one evaluation, the library's result builder: `run` checks the inputs (missing, unknown,
406
+ // type) before the domain, and the result carries the output's name, unit, meaning and extras.
407
+ let evaluation;
367
408
  try {
368
- result = spec.run(inputs);
409
+ evaluation = api.evaluateResolved(found, inputs, 'all');
369
410
  }
370
411
  catch (e) {
371
- throw evaluationFailure(api, e, `be-${spec.bridgeId}`);
412
+ throw evaluationFailure(api, e, key);
372
413
  }
373
414
  const u = uncertaintyOf(ctx, spec, inputs, (i) => spec.run(i), NOT_INCLUDED);
374
415
  const relation = api.primaryRelation(id);
375
416
  const notices = relation === undefined ? [] : api.relationNotices(relation);
376
- const outputDescriptor = api.evaluatorOutput(spec);
377
- // The label is a derived SI unit read from the unit table (`V^2/Hz`); the JSON keeps the
378
- // base form `parseUnit` reads back, and the dimension itself, beside it.
379
- const outputLabel = {
380
- name: outputDescriptor.name,
381
- ...(outputDescriptor.dimension === undefined
382
- ? {}
383
- : { unit: siUnitOf(outputDescriptor.dimension), label: derivedUnitOf(outputDescriptor.dimension, coherentUnits(api.unitRows())) }),
384
- };
417
+ // The text label is a derived SI unit read from the unit table (`V^2/Hz`); the JSON is the
418
+ // library result itself, whose `unit` is the base form `parseUnit` reads back.
419
+ const label = evaluation.kind === 'unset' ? undefined : derivedUnitOf(evaluation.dimension, coherentUnits(api.unitRows()));
385
420
  const unused = api.unusedInputKeys(spec);
386
421
  if (args.flags.has('json')) {
387
422
  emitJson({
@@ -391,12 +426,7 @@ async function run(ctx) {
391
426
  inputs,
392
427
  parameters: spec.parameters,
393
428
  conversions: conversionsOf(resolved),
394
- output: {
395
- ...result,
396
- name: outputLabel.name,
397
- ...(outputLabel.unit === undefined ? {} : { unit: outputLabel.unit, dimension: outputDescriptor.dimension }),
398
- },
399
- ...(spec.outputs.length === 0 ? {} : { extraOutputs: spec.outputs.map(({ name, unit, meaning }) => ({ name, unit, meaning })) }),
429
+ output: evaluation,
400
430
  ...(unused.length === 0 ? {} : { unusedInputs: unused }),
401
431
  ...(notices.length === 0 ? {} : { notices }),
402
432
  ...(u === null ? {} : { uncertainty: u.block }),
@@ -406,16 +436,13 @@ async function run(ctx) {
406
436
  }
407
437
  out(`\n● be-${id} ${spec.name}`);
408
438
  printInputs(api.formatExact, out, spec.parameters, inputs, resolved);
409
- for (const [k, v] of Object.entries(result)) {
410
- const extra = spec.outputs.find((o) => o.name === k);
411
- const label = k === 'value'
412
- ? outputLabel.label === undefined
413
- ? outputLabel.name
414
- : `${outputLabel.name} [${outputLabel.label}]`
415
- : extra === undefined
416
- ? k
417
- : `${k} [${extra.unit}] (${extra.meaning})`;
418
- out(` ${label} = ${typeof v === 'number' ? api.formatExact(v) : JSON.stringify(v)}`);
439
+ if (evaluation.kind === 'unset') {
440
+ out(` value is unset: ${evaluation.formula} is not finite at these inputs (a dropped factor or a singularity)`);
441
+ }
442
+ else {
443
+ out(` ${evaluation.name} [${label}] = ${api.formatExact(evaluation.value)} — ${evaluation.meaning}`);
444
+ for (const extra of evaluation.extras)
445
+ out(` ${extra.name} [${extra.unit}] = ${api.formatExact(extra.value)} — ${extra.meaning}`);
419
446
  }
420
447
  for (const key of unused) {
421
448
  out(` note: ${key} is required and does not enter the value; the closed form does not use it, so changing it changes nothing`);
@@ -429,6 +456,7 @@ async function run(ctx) {
429
456
  export const command = {
430
457
  name: 'evaluate',
431
458
  aliases: [],
459
+ positionals: { max: Infinity },
432
460
  flags: FLAGS,
433
461
  help: commandHelp(HELP, FLAGS),
434
462
  summary: 'Evaluate a closed-form bridge or an applied case, with units on every input.',
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/cli/commands/evaluate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt evaluate <be-NN | case-id> key=value …` — numerically evaluate a closed-form /\n * spacetime bridge (the registered evaluators) via its registered evaluator. Closes the gap\n * where `upt explain <be-NN>` redirected to a \"evaluated directly\" capability that\n * did not exist. With no bridge id, lists the evaluable bridges + their inputs.\n * `upt evaluate case-<id> …` runs an applied case (`src/cases/`).\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson } from '../output.js';\nimport { coherentUnits, derivedUnitOf, siUnitOf } from '../expr-print.js';\nimport { splitAssignments } from '../bindings.js';\nimport { UsageError } from '../errors.js';\nimport { CliError } from '../errors.js';\nimport type { AppliedCase, CaseResult, EvaluatorParameter, PropagatedOutput } from '../../cli-api.js';\nimport { closedFormRangeLabel } from '../closed-form-range.js';\n\nconst FLAGS: FlagSpec[] = [\n {\n name: '--sigma',\n valueStyle: 'either',\n repeatable: true,\n description: 'One input uncertainty as key=u, in the input\\'s unit. A temperature uncertainty in degC or degF is a difference.',\n },\n {\n name: '--corr',\n valueStyle: 'either',\n repeatable: true,\n description: 'A pairwise correlation as a,b=rho, used with --sigma.',\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt evaluate <be-NN | case-id> key=value[unit] ...\n Numerically evaluate a closed-form / spacetime bridge (${closedFormRangeLabel()}),\n or an applied case: a whole measurement problem with its parent and\n scalar equations, observable, conditions, regime checks and a route\n to a measurement comparison. A case whose regime check fails prints\n its outputs as NOT QUALIFIED and exits 3.\n e.g. upt evaluate case-resistor-noise T_K=300 R_ohm=1kohm\n R_in_ohm=1Mohm C_in_F=20pF f_lo_Hz=0 f_hi_Hz=10kHz t_avg_s=10\n Every input is declared: its unit, its meaning, and for a length what\n it measures (a radius, a separation, a semi-major axis). A value may\n carry a unit (d_m=1um, R_ohm=1kohm, T_yr=88d, M_kg=1Msun) or an\n expression of constants and units (M_kg=1*M_sun, v=0.6*c); it is\n converted into the declared unit only when the dimensions agree, and a\n bare number is in the declared unit. The same reader accepts --sigma. An absolute temperature in degC\n adds 273.15 K, and one in degF is (degF − 32) × 5/9 + 273.15. A difference slot\n (temperature-change, dT) and a --sigma take the interval, with no offset.\n An undeclared key exits 1 instead of being ignored. A declared\n alternate (major_axis_m for a_m) is converted exactly and said so.\n e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 1.456 M_⊙\n (ideal degenerate gas, with m_u and M_⊙ = 1.989e30 kg)\n upt evaluate be-55 C=1 → quantum Hall σ_xy = e²/h in siemens (R_H = 1/σ_xy = h/e²,\n the von Klitzing constant)\n With no bridge id, lists the evaluable bridges and their declared inputs.\n --sigma key=u (repeatable) gives an input's standard uncertainty;\n --corr a,b=rho its correlation. Propagated to first order (GUM law,\n central-difference sensitivities), with a curvature check per input\n that flags where the linearization is unreliable. An input without\n --sigma is treated as exact. Not included: the evaluator's numerical\n error and model discrepancy (whether the bridge applies).\n e.g. upt evaluate be-58 T_K=300 R_ohm=1000 --sigma T_K=3 --sigma R_ohm=10\n An input outside a relation's validity domain is refused and the message\n names the condition (a weak-field formula inside 10 Schwarzschild radii,\n a negative temperature). A relation's recorded caveat, and the note of a\n registered constant it names, print beside the value.`;\n\n/**\n * An input-contract error (absent, unknown, non-number, non-finite or twice-given\n * input) as the CLI reports it: a bad value (exit 1) under the one `upt evaluate:`\n * prefix. Its message already names the id.\n */\nfunction inputErrorOrSelf(api: CommandCtx['api'], e: unknown): unknown {\n return api.isInputContractError(e) ? new CliError(`upt evaluate: ${e.message}`) : e;\n}\n\n/**\n * What `run` threw, as the CLI reports it. An input error, a domain failure, a carrier-sign\n * failure and a closed form that is not finite at the inputs are each a bad value: exit 1\n * (documented contract), under the one `upt evaluate:` prefix, with the bridge or case named.\n */\nfunction evaluationFailure(api: CommandCtx['api'], e: unknown, label: string): unknown {\n if (api.isInputContractError(e)) return inputErrorOrSelf(api, e);\n if (e instanceof api.FormulaError) return new CliError(`upt evaluate: ${label}: ${e.message}`);\n if (e instanceof Error) return new CliError(`upt evaluate: ${e.message}`);\n return e;\n}\n\n/** Unit and geometry trouble is a bad value (exit 1); a missing `=` is a usage error (exit 2); a key twice is refused. */\nfunction resolveInputs(api: CommandCtx['api'], label: string, parameters: readonly EvaluatorParameter[], args: readonly string[]) {\n splitAssignments('evaluate', args, 'key=value (e.g. mu_e=2)');\n try {\n return api.resolveEvaluatorInputs(parameters, args, label);\n } catch (e) {\n if (e instanceof api.UnitError || e instanceof api.SynonymDisagreementError) {\n throw new CliError(`upt evaluate: ${label}: ${e.message}`);\n }\n throw inputErrorOrSelf(api, e);\n }\n}\n\n/** `d_m [m] plate separation d (geometry: separation) — the gap …` */\nfunction describeParameter(p: EvaluatorParameter): string {\n const extras = [\n ...(p.geometry === undefined ? [] : [`geometry: ${p.geometry}`]),\n ...(p.temperature === undefined ? [] : ['an absolute temperature; degC adds 273.15; degF is (degF − 32)×5/9 + 273.15']),\n ...(p.optional === true ? ['optional'] : []),\n ];\n const alts = (p.alternates ?? []).map((a) => `or give ${a.key}, ${a.meaning}`);\n return (\n `${p.key} [${p.unit || 'dimensionless'}] ${p.quantity} ${p.symbol}${extras.length > 0 ? ` (${extras.join('; ')})` : ''} — ${p.meaning}` +\n (alts.length > 0 ? `; ${alts.join('; ')}` : '')\n );\n}\n\nfunction parseUncertainty(\n api: CommandCtx['api'],\n spec: { readonly parameters: readonly EvaluatorParameter[] },\n sigmaArgs: readonly string[],\n corrArgs: readonly string[],\n inputs: Readonly<Record<string, number>>,\n): { sigma: Record<string, number>; corr: Map<string, number> } {\n const sigma: Record<string, number> = {};\n splitAssignments('evaluate --sigma', sigmaArgs, 'key=u');\n for (const a of sigmaArgs) {\n const m = /^([^=]+)=(.+)$/.exec(a);\n const given = m?.[1];\n const key = given === undefined ? undefined : (api.resolveQuantityName(given, new Set(Object.keys(inputs))) ?? given);\n if (m !== null && (key === undefined || !(key in inputs))) {\n throw new CliError(`upt evaluate: --sigma '${given}' is not one of the inputs given (${Object.keys(inputs).join(', ')})`);\n }\n // A σ is a difference: a σ in degC takes no 273.15 offset. The value is read\n // by the same binding reader as the input, so an energy on a kelvin slot is k_B T.\n let u = NaN;\n if (m !== null && key !== undefined) {\n const p = spec.parameters.find((x) => x.key === key)!;\n try {\n u = api.readNamedBinding(given!, m[2]!, { reading: 'difference', declaredUnit: p.unit }).value;\n } catch (e) {\n if (!(e instanceof api.UnitError)) throw e;\n if (!(e instanceof api.BindingNumberError)) throw new CliError(`upt evaluate: --sigma '${a}': ${e.message}`);\n }\n }\n if (m === null || key === undefined || !Number.isFinite(u) || u < 0) {\n throw new CliError(`upt evaluate: --sigma '${a}' is not key=<finite u ≥ 0>`);\n }\n // Two spellings of one input (`T_K`, `temperature`) are one key here.\n if (key in sigma) throw new CliError(`upt evaluate --sigma: '${key}' is given twice ('${a}'); give one value per name`);\n sigma[key] = u;\n }\n const corr = new Map<string, number>();\n for (const a of corrArgs) {\n const m = /^([^,=]+),([^,=]+)=(.+)$/.exec(a);\n const rho = m === null ? NaN : Number(m[3]);\n if (m === null || !Number.isFinite(rho) || Math.abs(rho) > 1) throw new CliError(`upt evaluate: --corr '${a}' is not a,b=<rho in [-1, 1]>`);\n const [x, y] = [m[1]!, m[2]!];\n if (x === y) throw new CliError(`upt evaluate: --corr '${a}' correlates an input with itself`);\n for (const k of [x, y]) {\n if (!(k in sigma)) throw new CliError(`upt evaluate: --corr names '${k}', which has no --sigma`);\n }\n corr.set(`${x},${y}`, rho);\n }\n if (!api.correlationIsPositiveSemidefinite(Object.keys(sigma), corr)) {\n throw new CliError('upt evaluate: the --corr values are not a valid correlation matrix (not positive semidefinite)');\n }\n return { sigma, corr };\n}\n\nconst NOT_INCLUDED = \"the evaluator's numerical error; model discrepancy (whether the bridge applies at all)\";\n\nconst CASE_NOT_INCLUDED =\n \"the case's numerical error; model discrepancy beyond the regime checks; the regime checks are evaluated at the given inputs, not at ±u\";\n\ninterface Uncertainty {\n readonly block: Record<string, unknown>;\n readonly propagated: Record<string, PropagatedOutput>;\n readonly exactInputs: string[];\n readonly notIncluded: string;\n}\n\nfunction uncertaintyOf(\n ctx: CommandCtx,\n spec: { readonly parameters: readonly EvaluatorParameter[] },\n inputs: Readonly<Record<string, number>>,\n f: (inputs: Record<string, number>) => Record<string, unknown>,\n notIncluded: string,\n): Uncertainty | null {\n const sigmaArgs = ctx.args.flags.get('sigma') ?? [];\n const corrArgs = ctx.args.flags.get('corr') ?? [];\n if (sigmaArgs.length === 0 && corrArgs.length > 0) throw new CliError('upt evaluate: --corr needs --sigma for both inputs');\n if (sigmaArgs.length === 0) return null;\n const { sigma, corr } = parseUncertainty(ctx.api, spec, sigmaArgs, corrArgs, inputs);\n const propagated = ctx.api.propagateEvaluatorUncertainty(f, inputs, sigma, corr);\n const exactInputs = Object.keys(inputs).filter((k) => !(k in sigma));\n return {\n block: {\n method: 'first-order propagation (GUM law), central-difference sensitivities, curvature check at ±u per input',\n sigma,\n correlations: Object.fromEntries(corr),\n outputs: propagated,\n exactInputs,\n notIncluded,\n },\n propagated,\n exactInputs,\n notIncluded,\n };\n}\n\n/** The one number formatter, as every command reads it: through `ctx.api`. */\ntype Fmt = CommandCtx['api']['formatExact'];\n\n/**\n * The value is echoed exactly; σ, the relative %, a sensitivity, a contribution and the\n * curvature ratio are statistics (the sensitivity is a central difference whose trailing\n * digits are noise), so they print at three significant digits.\n */\nfunction printUncertainty(api: CommandCtx['api'], out: CommandCtx['out'], u: Uncertainty): void {\n const g = (x: number | null): string => (x === null ? 'unavailable' : api.formatQuantity(x, 3));\n out(' uncertainty (first-order, GUM law; a sensitivity is not an uncertainty, the contribution is c·u):');\n for (const [name, p] of Object.entries(u.propagated)) {\n out(` ${name} = ${api.formatExact(p.value)} ± ${g(p.u)} (1σ${p.relative === null ? '' : `; relative ${g(p.relative * 100)}%`})`);\n for (const [k, c] of Object.entries(p.contributions)) {\n out(\n ` from ${k}: c = ${g(c.sensitivity)}, c·u = ${g(c.contribution)}` +\n (c.curvatureRatio === null ? '' : `, curvature/linear at ±u = ${g(c.curvatureRatio)}`) +\n (c.note === undefined ? '' : ` — ${c.note}`),\n );\n }\n if (p.unreliable.length > 0) {\n out(` LINEARIZATION UNRELIABLE for ${p.unreliable.join(', ')}: the first-order σ above does not describe what ±u does to it`);\n }\n }\n const corr = Object.entries((u.block as { correlations: Record<string, number> }).correlations);\n out(` correlations: ${corr.length === 0 ? 'none given (inputs independent)' : corr.map(([k, r]) => `${k} = ${r}`).join(', ')}`);\n if (u.exactInputs.length > 0) out(` treated as exact (no --sigma): ${u.exactInputs.join(', ')} — a choice, not a measurement`);\n out(` not included: ${u.notIncluded}`);\n}\n\ntype Resolved = ReturnType<typeof resolveInputs>['resolved'];\n\nconst conversionsOf = (resolved: Resolved) =>\n resolved\n .filter((r) => r.note !== undefined)\n .map((r) => ({ key: r.key, given: r.given, value: r.value, unit: r.unit, ...(r.via === undefined ? {} : { via: r.via }), note: r.note }));\n\nfunction printInputs(fmt: Fmt, out: CommandCtx['out'], parameters: readonly EvaluatorParameter[], inputs: Readonly<Record<string, number>>, resolved: Resolved): void {\n out(' inputs: ' + Object.entries(inputs).map(([k, v]) => `${k}=${fmt(v)}`).join(', '));\n for (const p of parameters) {\n const r = resolved.find((x) => x.key === p.key);\n out(` ${describeParameter(p)}${r?.note === undefined ? '' : `\\n converted: ${r.note}`}`);\n }\n}\n\nconst withUnit = (fmt: Fmt, v: number | null, unit: string): string =>\n v === null ? 'undefined here (its premise fails, or it needs an optional input not given)' : `${fmt(v)}${unit === '' ? '' : ` ${unit}`}`;\n\n/** A violated regime check is a check that ran and failed: exit 3. */\nasync function runCase(ctx: CommandCtx, c: AppliedCase, rest: readonly string[]): Promise<number> {\n const { args, api, out } = ctx;\n const { inputs, resolved } = resolveInputs(api, c.id, c.parameters, rest);\n let result: CaseResult;\n try {\n result = api.runAppliedCase(c.id, inputs);\n } catch (e) {\n throw evaluationFailure(api, e, c.id);\n }\n const u = uncertaintyOf(ctx, c, inputs, (i) => ({ ...api.runAppliedCase(c.id, i).outputs }), CASE_NOT_INCLUDED);\n const failed = result.checks.filter((k) => !k.holds).map((k) => k.id);\n const code = failed.length === 0 ? 0 : 3;\n const regimeLine = c.regimeAt?.(inputs, result.outputs) ?? '';\n\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: {\n caseId: c.id,\n title: c.title,\n qualified: failed.length === 0,\n failedChecks: failed,\n inputs,\n parameters: c.parameters,\n conversions: conversionsOf(resolved),\n governing: c.governing,\n observable: c.observable,\n outputs: c.outputs.map((o) => ({ ...o, value: result.outputs[o.key] ?? null })),\n checks: result.checks,\n ...(c.comparison === undefined ? {} : { comparison: c.comparison }),\n conditions: c.conditions,\n unchecked: result.unchecked,\n notIncluded: c.notIncluded,\n measurement: c.measurement,\n links: c.links,\n ...(regimeLine === '' ? {} : { regimeAt: regimeLine }),\n ...(u === null ? {} : { uncertainty: u.block }),\n },\n },\n ctx.write,\n );\n return code;\n }\n\n out(`\\n● ${c.id} ${c.title}`);\n out(' parent equations (what the scalar result simplifies; not evaluated as the answer):');\n for (const e of c.governing.parent) out(` ${e}`);\n out(' scalar simplification evaluated:');\n for (const e of c.governing.scalar) out(` ${e}`);\n out(` kept and dropped: ${c.governing.distinction}`);\n printInputs(api.formatExact, out, c.parameters, inputs, resolved);\n out(' conditions (boundary, initial, equilibrium):');\n for (const s of c.conditions) out(` - ${s}`);\n out(' outputs:');\n for (const o of c.outputs) out(` ${o.key} = ${withUnit(api.formatExact, result.outputs[o.key] ?? null, o.unit)} — ${o.meaning}`);\n const obs = c.outputs.find((o) => o.key === c.observable)!;\n out(` observable: ${obs.key} = ${withUnit(api.formatExact, result.outputs[obs.key] ?? null, obs.unit)}`);\n out(' regime checks (at the given inputs):');\n if (regimeLine !== '') out(` regime coordinates: ${regimeLine}`);\n for (const k of result.checks) {\n out(` ${k.holds ? 'holds ' : 'VIOLATED'} ${k.id}: ${k.quantity} = ${api.formatExact(k.value)} ${k.op} ${k.bound} — ${k.premise} (${k.threshold})`);\n }\n if (c.comparison !== undefined) {\n const d = result.outputs[c.comparison.deviationKey] ?? null;\n out(\n ` comparison (reported beside the checks, not one of them): ${c.comparison.valueKey} / ${c.comparison.referenceKey} − 1 = ` +\n `${d === null ? 'undefined here' : api.formatExact(d)} — against ${c.comparison.reference}; ${c.comparison.method}`,\n );\n }\n if (result.unchecked.length > 0) {\n out(' stated, not checked:');\n for (const s of result.unchecked) out(` - ${s}`);\n }\n out(\n failed.length === 0\n ? ' QUALIFIED: every regime check holds at these inputs.'\n : ` NOT QUALIFIED: ${failed.join(', ')} violated — the outputs above are outside the stated regime and are not a ` +\n 'qualified prediction at these inputs.',\n );\n if (u !== null) printUncertainty(api, out, u);\n out(' not included in the model:');\n for (const s of c.notIncluded) out(` - ${s}`);\n out(' compare with a measurement:');\n for (const s of c.measurement) out(` - ${s}`);\n out(' rests on:');\n for (const l of c.links) out(` ${l.id} — ${l.role}`);\n return code;\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const [target, ...rest] = args.positionals;\n\n if (!target) {\n const specs = [...api.BRIDGE_EVALUATORS.values()];\n const cases = [...api.APPLIED_CASES.values()];\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: [\n ...specs.map((s) => ({ bridgeId: s.bridgeId, name: s.name, inputKeys: s.inputKeys, parameters: s.parameters })),\n ...cases.map((c) => ({ caseId: c.id, name: c.title, inputKeys: c.parameters.map((p) => p.key), parameters: c.parameters })),\n ],\n },\n ctx.write,\n );\n return 0;\n }\n out('\\nEvaluable bridges (upt evaluate <be-NN> key=value[unit] ...)');\n for (const s of specs) {\n out(` be-${s.bridgeId} ${s.name}`);\n for (const p of s.parameters) out(` ${describeParameter(p)}`);\n }\n out('\\nApplied cases (upt evaluate <case-id> key=value[unit] ...; a violated regime check exits 3)');\n for (const c of cases) {\n out(` ${c.id} ${c.title}`);\n for (const p of c.parameters) out(` ${describeParameter(p)}`);\n out(` e.g. upt evaluate ${c.id} ${c.examples.valid.args.join(' ')}`);\n }\n out('\\n A value may carry a unit (d_m=1um, T_K=25degC, R_ohm=1kohm); a bare number is in the declared unit.');\n return 0;\n }\n\n const appliedCase = api.APPLIED_CASES.get(target.toLowerCase());\n if (appliedCase !== undefined) return runCase(ctx, appliedCase, rest);\n\n let id: number;\n try {\n id = api.parseBridgeId(target);\n } catch {\n throw new UsageError(\n `upt evaluate: '${target}' is not a bridge id (be-<id>) or a case (${[...api.APPLIED_CASES.keys()].join(', ')}). See \\`upt help\\`.`,\n );\n }\n let found: ReturnType<typeof api.resolveEvaluable>;\n try {\n found = api.resolveEvaluable(id);\n } catch {\n throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);\n }\n if (found.evaluator === undefined) {\n throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);\n }\n const spec = found.evaluator;\n const { inputs, resolved } = resolveInputs(api, `be-${spec.bridgeId}`, spec.parameters, rest);\n\n // The one evaluation: `run` checks the inputs (missing, unknown, type) before the domain.\n let result: Record<string, number>;\n try {\n result = spec.run(inputs);\n } catch (e) {\n throw evaluationFailure(api, e, `be-${spec.bridgeId}`);\n }\n\n const u = uncertaintyOf(ctx, spec, inputs, (i) => spec.run(i), NOT_INCLUDED);\n const relation = api.primaryRelation(id);\n const notices = relation === undefined ? [] : api.relationNotices(relation);\n\n const outputDescriptor = api.evaluatorOutput(spec);\n // The label is a derived SI unit read from the unit table (`V^2/Hz`); the JSON keeps the\n // base form `parseUnit` reads back, and the dimension itself, beside it.\n const outputLabel = {\n name: outputDescriptor.name,\n ...(outputDescriptor.dimension === undefined\n ? {}\n : { unit: siUnitOf(outputDescriptor.dimension), label: derivedUnitOf(outputDescriptor.dimension, coherentUnits(api.unitRows())) }),\n };\n const unused = api.unusedInputKeys(spec);\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: {\n bridgeId: id,\n inputs,\n parameters: spec.parameters,\n conversions: conversionsOf(resolved),\n output: {\n ...result,\n name: outputLabel.name,\n ...(outputLabel.unit === undefined ? {} : { unit: outputLabel.unit, dimension: outputDescriptor.dimension }),\n },\n ...(spec.outputs.length === 0 ? {} : { extraOutputs: spec.outputs.map(({ name, unit, meaning }) => ({ name, unit, meaning })) }),\n ...(unused.length === 0 ? {} : { unusedInputs: unused }),\n ...(notices.length === 0 ? {} : { notices }),\n ...(u === null ? {} : { uncertainty: u.block }),\n },\n },\n ctx.write,\n );\n return 0;\n }\n out(`\\n● be-${id} ${spec.name}`);\n printInputs(api.formatExact, out, spec.parameters, inputs, resolved);\n for (const [k, v] of Object.entries(result)) {\n const extra = spec.outputs.find((o) => o.name === k);\n const label =\n k === 'value'\n ? outputLabel.label === undefined\n ? outputLabel.name\n : `${outputLabel.name} [${outputLabel.label}]`\n : extra === undefined\n ? k\n : `${k} [${extra.unit}] (${extra.meaning})`;\n out(` ${label} = ${typeof v === 'number' ? api.formatExact(v) : JSON.stringify(v)}`);\n }\n for (const key of unused) {\n out(` note: ${key} is required and does not enter the value; the closed form does not use it, so changing it changes nothing`);\n }\n for (const notice of notices) out(` ${notice}`);\n if (u !== null) printUncertainty(api, out, u);\n return 0;\n}\n\nexport const command: Command = {\n name: 'evaluate',\n aliases: [],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Evaluate a closed-form bridge or an applied case, with units on every input.',\n example: 'upt evaluate be-63 mu_e=2',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/cli/commands/evaluate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt evaluate <be-NN | case-id> key=value …` — numerically evaluate a closed-form /\n * spacetime bridge (the registered evaluators) via its registered evaluator. Closes the gap\n * where `upt explain <be-NN>` redirected to a \"evaluated directly\" capability that\n * did not exist. With no bridge id, lists the evaluable bridges + their inputs.\n * `upt evaluate case-<id> …` runs an applied case (`src/cases/`).\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson, emitJsonError } from '../output.js';\nimport { coherentUnits, derivedUnitOf } from '../expr-print.js';\nimport { splitAssignments } from '../bindings.js';\nimport { realFlag } from '../numeric-flag.js';\nimport { UsageError } from '../errors.js';\nimport { CliError } from '../errors.js';\nimport type { AppliedCase, CaseResult, EvaluatorParameter, PropagatedOutput } from '../../cli-api.js';\nimport { closedFormRangeLabel } from '../closed-form-range.js';\n\nconst FLAGS: FlagSpec[] = [\n {\n name: '--sigma',\n valueStyle: 'either',\n repeatable: true,\n description: 'One input uncertainty as key=u, in the input\\'s unit. A temperature uncertainty in degC or degF is a difference.',\n },\n {\n name: '--corr',\n valueStyle: 'either',\n repeatable: true,\n description: 'A pairwise correlation as a,b=rho, used with --sigma.',\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt evaluate <be-NN | case-id> key=value[unit] ...\n Numerically evaluate a closed-form / spacetime bridge (${closedFormRangeLabel()}),\n or an applied case: a whole measurement problem with its parent and\n scalar equations, observable, conditions, regime checks and a route\n to a measurement comparison. A case whose regime check fails prints\n its outputs as NOT QUALIFIED and exits 3.\n e.g. upt evaluate case-resistor-noise T_K=300 R_ohm=1kohm\n R_in_ohm=1Mohm C_in_F=20pF f_lo_Hz=0 f_hi_Hz=10kHz t_avg_s=10\n Every input is declared: its unit, its meaning, and for a length what\n it measures (a radius, a separation, a semi-major axis). A value may\n carry a unit (d_m=1um, R_ohm=1kohm, T_yr=88d, M_kg=1Msun) or an\n expression of constants and units (M_kg=1*M_sun, v=0.6*c); it is\n converted into the declared unit only when the dimensions agree, and a\n bare number is in the declared unit. The same reader accepts --sigma. An absolute temperature in degC\n adds 273.15 K, and one in degF is (degF − 32) × 5/9 + 273.15. A difference slot\n (temperature-change, dT) and a --sigma take the interval, with no offset.\n An undeclared key exits 1 instead of being ignored. A declared\n alternate (major_axis_m for a_m) is converted exactly and said so.\n e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 2.896e30 kg (≈ 1.456 M_⊙\n with M_⊙ = 1.989e30 kg; ideal degenerate gas, with m_u)\n upt evaluate be-55 C=1 → quantum Hall σ_xy = e²/h in siemens (R_H = 1/σ_xy = h/e²,\n the von Klitzing constant)\n With no bridge id, lists the evaluable bridges and their declared inputs.\n --sigma key=u (repeatable) gives an input's standard uncertainty;\n --corr a,b=rho its correlation. Propagated to first order (GUM law,\n central-difference sensitivities), with a curvature check per input\n that flags where the linearization is unreliable. An input without\n --sigma is treated as exact. Not included: the evaluator's numerical\n error and model discrepancy (whether the bridge applies).\n e.g. upt evaluate be-58 T_K=300 R_ohm=1000 --sigma T_K=3 --sigma R_ohm=10\n An input outside a relation's validity domain is refused and the message\n names the condition (a weak-field formula inside 10 Schwarzschild radii,\n a negative temperature). A relation's recorded caveat, and the note of a\n registered constant it names, print beside the value.`;\n\n/**\n * An input-contract error (absent, unknown, non-number, non-finite or twice-given\n * input) as the CLI reports it: a bad value (exit 1) under the one `upt evaluate:`\n * prefix. Its message already names the id.\n */\nfunction inputErrorOrSelf(api: CommandCtx['api'], e: unknown): unknown {\n return api.isInputContractError(e) ? new CliError(`upt evaluate: ${e.message}`) : e;\n}\n\n/**\n * What `run` threw, as the CLI reports it. An input error, a domain failure, a carrier-sign\n * failure and a closed form that is not finite at the inputs are each a bad value: exit 1\n * (documented contract), under the one `upt evaluate:` prefix, with the bridge or case named.\n */\nfunction evaluationFailure(api: CommandCtx['api'], e: unknown, label: string): unknown {\n if (api.isInputContractError(e)) return inputErrorOrSelf(api, e);\n if (e instanceof api.FormulaError) return new CliError(`upt evaluate: ${label}: ${e.message}`);\n if (e instanceof Error) return new CliError(`upt evaluate: ${e.message}`);\n return e;\n}\n\n/** Unit and geometry trouble is a bad value (exit 1); a missing `=` is a usage error (exit 2); a key twice is refused. */\nfunction resolveInputs(api: CommandCtx['api'], label: string, parameters: readonly EvaluatorParameter[], args: readonly string[]) {\n splitAssignments('evaluate', args, 'key=value (e.g. mu_e=2)');\n try {\n return api.resolveEvaluatorInputs(parameters, args, label);\n } catch (e) {\n if (e instanceof api.UnitError || e instanceof api.SynonymDisagreementError) {\n throw new CliError(`upt evaluate: ${label}: ${e.message}`);\n }\n throw inputErrorOrSelf(api, e);\n }\n}\n\n/** `d_m [m] plate separation d (geometry: separation) — the gap …` */\nfunction describeParameter(p: EvaluatorParameter): string {\n const extras = [\n ...(p.geometry === undefined ? [] : [`geometry: ${p.geometry}`]),\n ...(p.temperature === undefined ? [] : ['an absolute temperature; degC adds 273.15; degF is (degF − 32)×5/9 + 273.15']),\n ...(p.optional === true ? ['optional'] : []),\n ];\n const alts = (p.alternates ?? []).map((a) => `or give ${a.key}, ${a.meaning}`);\n return (\n `${p.key} [${p.unit || 'dimensionless'}] ${p.quantity} ${p.symbol}${extras.length > 0 ? ` (${extras.join('; ')})` : ''} — ${p.meaning}` +\n (alts.length > 0 ? `; ${alts.join('; ')}` : '')\n );\n}\n\n/**\n * The parameter a `--sigma` spelling names, through the same contract the inputs use\n * (`resolveEvaluatorInputs`): the key itself, a declared alternate (`diameter_m` for `a_m`,\n * whose σ is scaled by the alternate's `toKey`), or a synonym spelling of the key. `undefined`\n * when the spelling names none of them.\n */\nfunction sigmaSlot(\n api: CommandCtx['api'],\n parameters: readonly EvaluatorParameter[],\n given: string,\n): { key: string; unit: string; factor: number } | undefined {\n const direct = parameters.find((p) => p.key === given);\n if (direct !== undefined) return { key: direct.key, unit: direct.unit, factor: 1 };\n for (const p of parameters) {\n const alt = (p.alternates ?? []).find((a) => a.key === given);\n if (alt !== undefined) return { key: p.key, unit: p.unit, factor: alt.toKey };\n }\n const viaName = api.resolveQuantityName(given, new Set(parameters.map((p) => p.key)));\n const synonym = viaName === null ? undefined : parameters.find((p) => p.key === viaName);\n return synonym === undefined ? undefined : { key: synonym.key, unit: synonym.unit, factor: 1 };\n}\n\nfunction parseUncertainty(\n api: CommandCtx['api'],\n spec: { readonly parameters: readonly EvaluatorParameter[] },\n sigmaArgs: readonly string[],\n corrArgs: readonly string[],\n inputs: Readonly<Record<string, number>>,\n): { sigma: Record<string, number>; corr: Map<string, number> } {\n const sigma: Record<string, number> = {};\n splitAssignments('evaluate --sigma', sigmaArgs, 'key=u');\n for (const a of sigmaArgs) {\n const m = /^([^=]+)=(.+)$/.exec(a);\n const given = m?.[1];\n // The same spellings the inputs take: the key, a declared alternate, or a synonym.\n const slot = given === undefined ? undefined : sigmaSlot(api, spec.parameters, given);\n const key = slot?.key;\n if (m !== null && (key === undefined || !(key in inputs))) {\n throw new CliError(`upt evaluate: --sigma '${given}' is not one of the inputs given (${Object.keys(inputs).join(', ')})`);\n }\n // A σ is a difference: a σ in degC takes no 273.15 offset. The value is read\n // by the same binding reader as the input, so an energy on a kelvin slot is k_B T.\n // A σ given under an alternate is scaled by the alternate's factor (a diameter's σ is twice the radius's).\n let u = NaN;\n if (m !== null && slot !== undefined) {\n try {\n u = api.readNamedBinding(given!, m[2]!, { reading: 'difference', declaredUnit: slot.unit }).value * slot.factor;\n } catch (e) {\n if (!(e instanceof api.UnitError)) throw e;\n if (!(e instanceof api.BindingNumberError)) throw new CliError(`upt evaluate: --sigma '${a}': ${e.message}`);\n }\n }\n if (m === null || key === undefined || !Number.isFinite(u) || u < 0) {\n throw new CliError(`upt evaluate: --sigma '${a}' is not key=<finite u ≥ 0>`);\n }\n // Two spellings of one input (`T_K`, `temperature`) are one key here.\n if (key in sigma) throw new CliError(`upt evaluate --sigma: '${key}' is given twice ('${a}'); give one value per name`);\n sigma[key] = u;\n }\n const corr = new Map<string, number>();\n for (const a of corrArgs) {\n const m = /^([^,=]+),([^,=]+)=(.+)$/.exec(a);\n // The grammar first (a malformed rho is usage, exit 2), the range after (a bad value, exit 1).\n const rho = m === null ? NaN : realFlag('evaluate', '--corr rho', m[3]!);\n if (m === null || !Number.isFinite(rho) || Math.abs(rho) > 1) throw new CliError(`upt evaluate: --corr '${a}' is not a,b=<rho in [-1, 1]>`);\n const [x, y] = [m[1]!, m[2]!];\n if (x === y) throw new CliError(`upt evaluate: --corr '${a}' correlates an input with itself`);\n for (const k of [x, y]) {\n if (!(k in sigma)) throw new CliError(`upt evaluate: --corr names '${k}', which has no --sigma`);\n }\n corr.set(`${x},${y}`, rho);\n }\n if (!api.correlationIsPositiveSemidefinite(Object.keys(sigma), corr)) {\n throw new CliError('upt evaluate: the --corr values are not a valid correlation matrix (not positive semidefinite)');\n }\n return { sigma, corr };\n}\n\nconst NOT_INCLUDED = \"the evaluator's numerical error; model discrepancy (whether the bridge applies at all)\";\n\nconst CASE_NOT_INCLUDED =\n \"the case's numerical error; model discrepancy beyond the regime checks; the regime checks are evaluated at the given inputs, not at ±u\";\n\ninterface Uncertainty {\n readonly block: Record<string, unknown>;\n readonly propagated: Record<string, PropagatedOutput>;\n readonly exactInputs: string[];\n readonly notIncluded: string;\n}\n\nfunction uncertaintyOf(\n ctx: CommandCtx,\n spec: { readonly parameters: readonly EvaluatorParameter[] },\n inputs: Readonly<Record<string, number>>,\n f: (inputs: Record<string, number>) => Record<string, unknown>,\n notIncluded: string,\n): Uncertainty | null {\n const sigmaArgs = ctx.args.flags.get('sigma') ?? [];\n const corrArgs = ctx.args.flags.get('corr') ?? [];\n if (sigmaArgs.length === 0 && corrArgs.length > 0) throw new CliError('upt evaluate: --corr needs --sigma for both inputs');\n if (sigmaArgs.length === 0) return null;\n const { sigma, corr } = parseUncertainty(ctx.api, spec, sigmaArgs, corrArgs, inputs);\n const propagated = ctx.api.propagateEvaluatorUncertainty(f, inputs, sigma, corr);\n const exactInputs = Object.keys(inputs).filter((k) => !(k in sigma));\n return {\n block: {\n method: 'first-order propagation (GUM law), central-difference sensitivities, curvature check at ±u per input',\n sigma,\n correlations: Object.fromEntries(corr),\n outputs: propagated,\n exactInputs,\n notIncluded,\n },\n propagated,\n exactInputs,\n notIncluded,\n };\n}\n\n/** The one number formatter, as every command reads it: through `ctx.api`. */\ntype Fmt = CommandCtx['api']['formatExact'];\n\n/**\n * The value is echoed exactly; σ, the relative %, a sensitivity, a contribution and the\n * curvature ratio are statistics (the sensitivity is a central difference whose trailing\n * digits are noise), so they print at three significant digits.\n */\nfunction printUncertainty(api: CommandCtx['api'], out: CommandCtx['out'], u: Uncertainty): void {\n const g = (x: number | null): string => (x === null ? 'unavailable' : api.formatQuantity(x, 3));\n out(' uncertainty (first-order, GUM law; a sensitivity is not an uncertainty, the contribution is c·u):');\n for (const [name, p] of Object.entries(u.propagated)) {\n out(` ${name} = ${api.formatExact(p.value)} ± ${g(p.u)} (1σ${p.relative === null ? '' : `; relative ${g(p.relative * 100)}%`})`);\n for (const [k, c] of Object.entries(p.contributions)) {\n out(\n ` from ${k}: c = ${g(c.sensitivity)}, c·u = ${g(c.contribution)}` +\n (c.curvatureRatio === null ? '' : `, curvature/linear at ±u = ${g(c.curvatureRatio)}`) +\n (c.note === undefined ? '' : ` — ${c.note}`),\n );\n }\n if (p.unreliable.length > 0) {\n out(` LINEARIZATION UNRELIABLE for ${p.unreliable.join(', ')}: the first-order σ above does not describe what ±u does to it`);\n }\n }\n const corr = Object.entries((u.block as { correlations: Record<string, number> }).correlations);\n out(` correlations: ${corr.length === 0 ? 'none given (inputs independent)' : corr.map(([k, r]) => `${k} = ${r}`).join(', ')}`);\n if (u.exactInputs.length > 0) out(` treated as exact (no --sigma): ${u.exactInputs.join(', ')} — a choice, not a measurement`);\n out(` not included: ${u.notIncluded}`);\n}\n\ntype Resolved = ReturnType<typeof resolveInputs>['resolved'];\n\nconst conversionsOf = (resolved: Resolved) =>\n resolved\n .filter((r) => r.note !== undefined)\n .map((r) => ({ key: r.key, given: r.given, value: r.value, unit: r.unit, ...(r.via === undefined ? {} : { via: r.via }), note: r.note }));\n\nfunction printInputs(fmt: Fmt, out: CommandCtx['out'], parameters: readonly EvaluatorParameter[], inputs: Readonly<Record<string, number>>, resolved: Resolved): void {\n out(' inputs: ' + Object.entries(inputs).map(([k, v]) => `${k}=${fmt(v)}`).join(', '));\n for (const p of parameters) {\n const r = resolved.find((x) => x.key === p.key);\n out(` ${describeParameter(p)}${r?.note === undefined ? '' : `\\n converted: ${r.note}`}`);\n }\n}\n\nconst withUnit = (fmt: Fmt, v: number | null, unit: string): string =>\n v === null ? 'undefined here (its premise fails, or it needs an optional input not given)' : `${fmt(v)}${unit === '' ? '' : ` ${unit}`}`;\n\n/** A violated regime check is a check that ran and failed: exit 3. */\nasync function runCase(ctx: CommandCtx, c: AppliedCase, rest: readonly string[]): Promise<number> {\n const { args, api, out } = ctx;\n const { inputs, resolved } = resolveInputs(api, c.id, c.parameters, rest);\n let result: CaseResult;\n try {\n result = api.runAppliedCase(c.id, inputs);\n } catch (e) {\n throw evaluationFailure(api, e, c.id);\n }\n const u = uncertaintyOf(ctx, c, inputs, (i) => ({ ...api.runAppliedCase(c.id, i).outputs }), CASE_NOT_INCLUDED);\n const failed = result.checks.filter((k) => !k.holds).map((k) => k.id);\n const code = failed.length === 0 ? 0 : 3;\n const regimeLine = c.regimeAt?.(inputs, result.outputs) ?? '';\n\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: {\n caseId: c.id,\n title: c.title,\n qualified: failed.length === 0,\n failedChecks: failed,\n inputs,\n parameters: c.parameters,\n conversions: conversionsOf(resolved),\n governing: c.governing,\n observable: c.observable,\n outputs: c.outputs.map((o) => ({ ...o, value: result.outputs[o.key] ?? null })),\n checks: result.checks,\n ...(c.comparison === undefined ? {} : { comparison: c.comparison }),\n conditions: c.conditions,\n unchecked: result.unchecked,\n notIncluded: c.notIncluded,\n measurement: c.measurement,\n links: c.links,\n ...(regimeLine === '' ? {} : { regimeAt: regimeLine }),\n ...(u === null ? {} : { uncertainty: u.block }),\n },\n },\n ctx.write,\n );\n return code;\n }\n\n out(`\\n● ${c.id} ${c.title}`);\n out(' parent equations (what the scalar result simplifies; not evaluated as the answer):');\n for (const e of c.governing.parent) out(` ${e}`);\n out(' scalar simplification evaluated:');\n for (const e of c.governing.scalar) out(` ${e}`);\n out(` kept and dropped: ${c.governing.distinction}`);\n printInputs(api.formatExact, out, c.parameters, inputs, resolved);\n out(' conditions (boundary, initial, equilibrium):');\n for (const s of c.conditions) out(` - ${s}`);\n out(' outputs:');\n for (const o of c.outputs) out(` ${o.key} = ${withUnit(api.formatExact, result.outputs[o.key] ?? null, o.unit)} — ${o.meaning}`);\n const obs = c.outputs.find((o) => o.key === c.observable)!;\n out(` observable: ${obs.key} = ${withUnit(api.formatExact, result.outputs[obs.key] ?? null, obs.unit)}`);\n out(' regime checks (at the given inputs):');\n if (regimeLine !== '') out(` regime coordinates: ${regimeLine}`);\n for (const k of result.checks) {\n out(` ${k.holds ? 'holds ' : 'VIOLATED'} ${k.id}: ${k.quantity} = ${api.formatExact(k.value)} ${k.op} ${k.bound} — ${k.premise} (${k.threshold})`);\n }\n if (c.comparison !== undefined) {\n const d = result.outputs[c.comparison.deviationKey] ?? null;\n out(\n ` comparison (reported beside the checks, not one of them): ${c.comparison.valueKey} / ${c.comparison.referenceKey} − 1 = ` +\n `${d === null ? 'undefined here' : api.formatExact(d)} — against ${c.comparison.reference}; ${c.comparison.method}`,\n );\n }\n if (result.unchecked.length > 0) {\n out(' stated, not checked:');\n for (const s of result.unchecked) out(` - ${s}`);\n }\n out(\n failed.length === 0\n ? ' QUALIFIED: every regime check holds at these inputs.'\n : ` NOT QUALIFIED: ${failed.join(', ')} violated — the outputs above are outside the stated regime and are not a ` +\n 'qualified prediction at these inputs.',\n );\n if (u !== null) printUncertainty(api, out, u);\n out(' not included in the model:');\n for (const s of c.notIncluded) out(` - ${s}`);\n out(' compare with a measurement:');\n for (const s of c.measurement) out(` - ${s}`);\n out(' rests on:');\n for (const l of c.links) out(` ${l.id} — ${l.role}`);\n return code;\n}\n\n/**\n * `--json` answers a refusal in the envelope too (`emitJsonError`), with the exit code the\n * refusal stands for; the text mode reports it on stderr as every command does. A defect\n * (neither error class) propagates either way.\n */\nasync function run(ctx: CommandCtx): Promise<number> {\n try {\n return await evaluate(ctx);\n } catch (e) {\n if (ctx.args.flags.has('json') && (e instanceof UsageError || e instanceof CliError)) {\n return emitJsonError('evaluate', e, ctx.write);\n }\n throw e;\n }\n}\n\nasync function evaluate(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const [target, ...rest] = args.positionals;\n\n if (!target) {\n const specs = [...api.BRIDGE_EVALUATORS.values()];\n const cases = [...api.APPLIED_CASES.values()];\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: [\n ...specs.map((s) => ({ bridgeId: s.bridgeId, name: s.name, inputKeys: s.inputKeys, parameters: s.parameters })),\n ...cases.map((c) => ({ caseId: c.id, name: c.title, inputKeys: c.parameters.map((p) => p.key), parameters: c.parameters })),\n ],\n },\n ctx.write,\n );\n return 0;\n }\n out('\\nEvaluable bridges (upt evaluate <be-NN> key=value[unit] ...)');\n for (const s of specs) {\n out(` be-${s.bridgeId} ${s.name}`);\n for (const p of s.parameters) out(` ${describeParameter(p)}`);\n }\n out('\\nApplied cases (upt evaluate <case-id> key=value[unit] ...; a violated regime check exits 3)');\n for (const c of cases) {\n out(` ${c.id} ${c.title}`);\n for (const p of c.parameters) out(` ${describeParameter(p)}`);\n out(` e.g. upt evaluate ${c.id} ${c.examples.valid.args.join(' ')}`);\n }\n out('\\n A value may carry a unit (d_m=1um, T_K=25degC, R_ohm=1kohm); a bare number is in the declared unit.');\n return 0;\n }\n\n const appliedCase = api.APPLIED_CASES.get(target.toLowerCase());\n if (appliedCase !== undefined) return runCase(ctx, appliedCase, rest);\n\n let id: number;\n try {\n id = api.parseBridgeId(target);\n } catch {\n throw new UsageError(\n `upt evaluate: '${target}' is not a bridge id (be-<id>) or a case (${[...api.APPLIED_CASES.keys()].join(', ')}). See \\`upt help\\`.`,\n );\n }\n let found: ReturnType<typeof api.resolveEvaluable>;\n try {\n found = api.resolveEvaluable(id);\n } catch {\n throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);\n }\n if (found.evaluator === undefined) {\n throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);\n }\n const spec = found.evaluator;\n const key = api.catalogEdgeKey(spec.bridgeId);\n const { inputs, resolved } = resolveInputs(api, key, spec.parameters, rest);\n\n // The one evaluation, the library's result builder: `run` checks the inputs (missing, unknown,\n // type) before the domain, and the result carries the output's name, unit, meaning and extras.\n let evaluation: ReturnType<typeof api.evaluateResolved>;\n try {\n evaluation = api.evaluateResolved(found, inputs, 'all');\n } catch (e) {\n throw evaluationFailure(api, e, key);\n }\n\n const u = uncertaintyOf(ctx, spec, inputs, (i) => spec.run(i), NOT_INCLUDED);\n const relation = api.primaryRelation(id);\n const notices = relation === undefined ? [] : api.relationNotices(relation);\n\n // The text label is a derived SI unit read from the unit table (`V^2/Hz`); the JSON is the\n // library result itself, whose `unit` is the base form `parseUnit` reads back.\n const label = evaluation.kind === 'unset' ? undefined : derivedUnitOf(evaluation.dimension, coherentUnits(api.unitRows()));\n const unused = api.unusedInputKeys(spec);\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: {\n bridgeId: id,\n inputs,\n parameters: spec.parameters,\n conversions: conversionsOf(resolved),\n output: evaluation,\n ...(unused.length === 0 ? {} : { unusedInputs: unused }),\n ...(notices.length === 0 ? {} : { notices }),\n ...(u === null ? {} : { uncertainty: u.block }),\n },\n },\n ctx.write,\n );\n return 0;\n }\n out(`\\n● be-${id} ${spec.name}`);\n printInputs(api.formatExact, out, spec.parameters, inputs, resolved);\n if (evaluation.kind === 'unset') {\n out(` value is unset: ${evaluation.formula} is not finite at these inputs (a dropped factor or a singularity)`);\n } else {\n out(` ${evaluation.name} [${label}] = ${api.formatExact(evaluation.value)} — ${evaluation.meaning}`);\n for (const extra of evaluation.extras) out(` ${extra.name} [${extra.unit}] = ${api.formatExact(extra.value)} — ${extra.meaning}`);\n }\n for (const key of unused) {\n out(` note: ${key} is required and does not enter the value; the closed form does not use it, so changing it changes nothing`);\n }\n for (const notice of notices) out(` ${notice}`);\n if (u !== null) printUncertainty(api, out, u);\n return 0;\n}\n\nexport const command: Command = {\n name: 'evaluate',\n aliases: [],\n positionals: { max: Infinity },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Evaluate a closed-form bridge or an applied case, with units on every input.',\n example: 'upt evaluate be-63 mu_e=2',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAeA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAqW/E,eAAO,MAAM,OAAO,EAAE,OASrB,CAAC"}
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAeA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AA6Y/E,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
@@ -43,7 +43,7 @@ const HELP = `upt explain <quantity> [name=value | name] ...
43
43
  * `mass=1e500`→∞, and a bare name alongside a valued one were all silent
44
44
  * wrong-physics footguns.
45
45
  */
46
- function parseKnown(api, args) {
46
+ function parseKnown(api, args, dimensions) {
47
47
  const valued = args.filter((a) => a.includes('='));
48
48
  if (valued.length === 0)
49
49
  return { known: [...args], notes: [] }; // names mode
@@ -74,6 +74,17 @@ function parseKnown(api, args) {
74
74
  throw new CliError(`upt explain: '${a.assignment}' is not a finite number. Expected ${a.name}=<number or unit>.`);
75
75
  }
76
76
  values[a.name] = read.value;
77
+ // A dimensioned value must be the quantity's dimension (issues #542, #537):
78
+ // `nu=500nm` used to keep the 5e-7 scale and drop the length, so a metre
79
+ // was read as a hertz. A bare number is already in the quantity's unit.
80
+ // The message is the same sentence `bindingInUnit` gives `upt evaluate`,
81
+ // with the quantity's own dimension where evaluate states a declared unit.
82
+ const resolved = api.resolveQuantityName(a.name, dimensions.inputNames, dimensions.aliases);
83
+ const quantityDim = resolved === null ? undefined : dimensions.dims.get(resolved);
84
+ if (read.dimensioned && quantityDim !== undefined && !api.dimensionsEqual(read.dimension, quantityDim)) {
85
+ throw new CliError(`upt explain: '${a.assignment}': '${a.raw.trim()}' is ${api.format(read.dimension)}, ` +
86
+ `but this input is ${api.format(quantityDim)} (${resolved})`);
87
+ }
77
88
  // Unit-convention notes were already on the binding and explain did not
78
89
  // print them. The temperature reading adds a note; the reader returns that
79
90
  // one on its own field.
@@ -114,7 +125,7 @@ function bridgeRedirect(api, target) {
114
125
  }
115
126
  /** A canonical equation and the catalog bridge it restates, when those two target names differ. */
116
127
  function restatementPartner(api, target) {
117
- const norm = (s) => s.replaceAll('_', '-').toLowerCase();
128
+ const norm = (s) => api.foldName(s).toLowerCase();
118
129
  const want = norm(target);
119
130
  for (const eq of api.CANONICAL_EQUATIONS) {
120
131
  if (eq.restatesBridge === undefined)
@@ -256,7 +267,16 @@ async function run(ctx) {
256
267
  searchLine);
257
268
  }
258
269
  const aliases = api.aliasesForTarget(graph, resolvedTarget);
259
- const parsed = parseKnown(api, rest);
270
+ // The dimension of each graph quantity, from the nodes the edges already
271
+ // carry (projected from `data/quantities.json`): the check
272
+ // `parseKnown` makes for a dimensioned binding, in the terms this graph uses.
273
+ const dims = new Map();
274
+ for (const e of graph) {
275
+ dims.set(e.target.name, e.target.dim);
276
+ for (const s of e.sources)
277
+ dims.set(s.name, s.dim);
278
+ }
279
+ const parsed = parseKnown(api, rest, { inputNames, aliases, dims });
260
280
  for (const note of parsed.notes)
261
281
  ctx.err(note);
262
282
  if (!Array.isArray(parsed.known)) {
@@ -334,6 +354,7 @@ async function run(ctx) {
334
354
  export const command = {
335
355
  name: 'explain',
336
356
  aliases: [],
357
+ positionals: { max: Infinity },
337
358
  flags: FLAGS,
338
359
  help: commandHelp(HELP, FLAGS),
339
360
  summary: 'Show how the graph determines a quantity, or say that it does not cover that name.',