universal-physics-tensor 10.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (720) hide show
  1. package/README.md +4 -3
  2. package/bin/upt.mjs +13 -1
  3. package/data/atlas/atlas.json +25 -25
  4. package/data/atlas/atlas.jsonld +1 -1
  5. package/data/atlas/diffusion.json +6 -6
  6. package/data/atlas/oscillators.json +7 -7
  7. package/data/atlas/waves.json +14 -14
  8. package/data/atlas/witness-results.json +11 -11
  9. package/data/bridge-catalog.json +371 -228
  10. package/data/bridge-catalog.schema.json +45 -7
  11. package/dist/atlas/applicability.d.ts.map +1 -1
  12. package/dist/atlas/applicability.js +21 -15
  13. package/dist/atlas/applicability.js.map +1 -1
  14. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
  15. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  16. package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
  17. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  18. package/dist/atlas/benchmark/loader.js +2 -2
  19. package/dist/atlas/benchmark/loader.js.map +1 -1
  20. package/dist/atlas/benchmark/stats.d.ts +2 -2
  21. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  22. package/dist/atlas/benchmark/stats.js +15 -7
  23. package/dist/atlas/benchmark/stats.js.map +1 -1
  24. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  25. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  26. package/dist/atlas/catalog-formal-ref.js +52 -5
  27. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  28. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  29. package/dist/atlas/chain-pipeline.js +7 -8
  30. package/dist/atlas/chain-pipeline.js.map +1 -1
  31. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  32. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  33. package/dist/atlas/diffusion/bridges-closure.js +8 -12
  34. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  35. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  36. package/dist/atlas/diffusion/bridges.js +27 -39
  37. package/dist/atlas/diffusion/bridges.js.map +1 -1
  38. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  39. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  40. package/dist/atlas/diffusion/dimensions.js +8 -16
  41. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  42. package/dist/atlas/diffusion/models.d.ts +3 -3
  43. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  44. package/dist/atlas/diffusion/models.js +5 -10
  45. package/dist/atlas/diffusion/models.js.map +1 -1
  46. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  47. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  48. package/dist/atlas/diffusion/numerics.js +38 -24
  49. package/dist/atlas/diffusion/numerics.js.map +1 -1
  50. package/dist/atlas/link-prediction.d.ts +106 -3
  51. package/dist/atlas/link-prediction.d.ts.map +1 -1
  52. package/dist/atlas/link-prediction.js +212 -66
  53. package/dist/atlas/link-prediction.js.map +1 -1
  54. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  55. package/dist/atlas/oscillators/bridges-coarse.js +7 -11
  56. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  57. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  58. package/dist/atlas/oscillators/bridges-exact.js +6 -7
  59. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  60. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  61. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  62. package/dist/atlas/oscillators/bridges-limits.js +23 -34
  63. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  64. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  65. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  66. package/dist/atlas/oscillators/dimensions.js +9 -21
  67. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  68. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  69. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  70. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  71. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  72. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  73. package/dist/atlas/oscillators/models.js +2 -6
  74. package/dist/atlas/oscillators/models.js.map +1 -1
  75. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  76. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  77. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  78. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  79. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  80. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  81. package/dist/atlas/oscillators/phase-translation.js +3 -4
  82. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  83. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  84. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  85. package/dist/atlas/oscillators/position-translation.js +123 -12
  86. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  87. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  88. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  89. package/dist/atlas/oscillators/rejections.js +0 -7
  90. package/dist/atlas/oscillators/rejections.js.map +1 -1
  91. package/dist/atlas/physjs-entries.generated.d.ts +25 -24
  92. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  93. package/dist/atlas/physjs-entries.generated.js +25 -24
  94. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  95. package/dist/atlas/physjs-ref.d.ts +34 -31
  96. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  97. package/dist/atlas/physjs-ref.js +55 -53
  98. package/dist/atlas/physjs-ref.js.map +1 -1
  99. package/dist/atlas/physjs-reviewed.d.ts +1 -1
  100. package/dist/atlas/physjs-reviewed.js +15 -15
  101. package/dist/atlas/physjs-reviewed.js.map +1 -1
  102. package/dist/atlas/poster/statements.d.ts +0 -19
  103. package/dist/atlas/poster/statements.d.ts.map +1 -1
  104. package/dist/atlas/poster/statements.js +1 -1
  105. package/dist/atlas/poster/statements.js.map +1 -1
  106. package/dist/atlas/proof-target.d.ts +1 -1
  107. package/dist/atlas/proof-target.js +1 -1
  108. package/dist/atlas/proof-target.js.map +1 -1
  109. package/dist/atlas/regime.d.ts +1 -1
  110. package/dist/atlas/regime.d.ts.map +1 -1
  111. package/dist/atlas/regime.js +1 -1
  112. package/dist/atlas/regime.js.map +1 -1
  113. package/dist/atlas/text-overlap.d.ts +23 -0
  114. package/dist/atlas/text-overlap.d.ts.map +1 -0
  115. package/dist/atlas/text-overlap.js +41 -0
  116. package/dist/atlas/text-overlap.js.map +1 -0
  117. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  118. package/dist/atlas/waves/bridges-closure.js +2 -6
  119. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  120. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  121. package/dist/atlas/waves/bridges.js +32 -48
  122. package/dist/atlas/waves/bridges.js.map +1 -1
  123. package/dist/atlas/waves/models.d.ts +5 -6
  124. package/dist/atlas/waves/models.d.ts.map +1 -1
  125. package/dist/atlas/waves/models.js +7 -13
  126. package/dist/atlas/waves/models.js.map +1 -1
  127. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  128. package/dist/atlas/waves/numerics.js +10 -3
  129. package/dist/atlas/waves/numerics.js.map +1 -1
  130. package/dist/atlas/witness-numeric.d.ts +30 -0
  131. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  132. package/dist/atlas/witness-numeric.js +53 -0
  133. package/dist/atlas/witness-numeric.js.map +1 -1
  134. package/dist/atlas/witness-specs.d.ts.map +1 -1
  135. package/dist/atlas/witness-specs.js +19 -0
  136. package/dist/atlas/witness-specs.js.map +1 -1
  137. package/dist/atlas/witness-symbolic.d.ts +75 -3
  138. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  139. package/dist/atlas/witness-symbolic.js +116 -10
  140. package/dist/atlas/witness-symbolic.js.map +1 -1
  141. package/dist/bridges/catalog-load.d.ts.map +1 -1
  142. package/dist/bridges/catalog-load.js +13 -8
  143. package/dist/bridges/catalog-load.js.map +1 -1
  144. package/dist/bridges/catalog-types.d.ts +26 -2
  145. package/dist/bridges/catalog-types.d.ts.map +1 -1
  146. package/dist/bridges/catalog-types.js +11 -1
  147. package/dist/bridges/catalog-types.js.map +1 -1
  148. package/dist/bridges/evaluation-errors.d.ts +31 -1
  149. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  150. package/dist/bridges/evaluation-errors.js +20 -2
  151. package/dist/bridges/evaluation-errors.js.map +1 -1
  152. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  153. package/dist/bridges/evaluator-inputs.js +7 -5
  154. package/dist/bridges/evaluator-inputs.js.map +1 -1
  155. package/dist/bridges/evaluators.d.ts.map +1 -1
  156. package/dist/bridges/evaluators.js +27 -12
  157. package/dist/bridges/evaluators.js.map +1 -1
  158. package/dist/bridges/expr-parse.d.ts +11 -0
  159. package/dist/bridges/expr-parse.d.ts.map +1 -1
  160. package/dist/bridges/expr-parse.js +14 -5
  161. package/dist/bridges/expr-parse.js.map +1 -1
  162. package/dist/bridges/holds.d.ts +35 -3
  163. package/dist/bridges/holds.d.ts.map +1 -1
  164. package/dist/bridges/holds.js +117 -23
  165. package/dist/bridges/holds.js.map +1 -1
  166. package/dist/bridges/notices.d.ts.map +1 -1
  167. package/dist/bridges/notices.js +5 -5
  168. package/dist/bridges/notices.js.map +1 -1
  169. package/dist/bridges/relation-eval.d.ts +4 -4
  170. package/dist/bridges/relation-eval.d.ts.map +1 -1
  171. package/dist/bridges/relation-eval.js +15 -16
  172. package/dist/bridges/relation-eval.js.map +1 -1
  173. package/dist/bridges/sensitivity.d.ts.map +1 -1
  174. package/dist/bridges/sensitivity.js +3 -3
  175. package/dist/bridges/sensitivity.js.map +1 -1
  176. package/dist/bridges/validity.d.ts +33 -0
  177. package/dist/bridges/validity.d.ts.map +1 -0
  178. package/dist/bridges/validity.js +67 -0
  179. package/dist/bridges/validity.js.map +1 -0
  180. package/dist/canonical/entries/atomic.js +1 -3
  181. package/dist/canonical/entries/atomic.js.map +1 -1
  182. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  183. package/dist/canonical/entries/condensed-matter.js +4 -5
  184. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  185. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  186. package/dist/canonical/entries/dimensional-classics.js +3 -4
  187. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  188. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  189. package/dist/canonical/entries/electromagnetism.js +4 -10
  190. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  191. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  192. package/dist/canonical/entries/fluids-waves.js +3 -7
  193. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  194. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  195. package/dist/canonical/entries/mechanics.js +4 -6
  196. package/dist/canonical/entries/mechanics.js.map +1 -1
  197. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  198. package/dist/canonical/entries/nonmonomial.js +9 -17
  199. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  200. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  201. package/dist/canonical/entries/relativity.js +6 -6
  202. package/dist/canonical/entries/relativity.js.map +1 -1
  203. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  204. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  205. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  206. package/dist/canonical/fixed-points.d.ts +94 -0
  207. package/dist/canonical/fixed-points.d.ts.map +1 -0
  208. package/dist/canonical/fixed-points.js +81 -0
  209. package/dist/canonical/fixed-points.js.map +1 -0
  210. package/dist/canonical/linkage.d.ts.map +1 -1
  211. package/dist/canonical/linkage.js +25 -44
  212. package/dist/canonical/linkage.js.map +1 -1
  213. package/dist/canonical/normal-form.d.ts.map +1 -1
  214. package/dist/canonical/normal-form.js +5 -11
  215. package/dist/canonical/normal-form.js.map +1 -1
  216. package/dist/canonical/structural.d.ts +21 -21
  217. package/dist/canonical/structural.d.ts.map +1 -1
  218. package/dist/canonical/structural.js +40 -19
  219. package/dist/canonical/structural.js.map +1 -1
  220. package/dist/cases/brownian-sphere.d.ts +3 -3
  221. package/dist/cases/brownian-sphere.d.ts.map +1 -1
  222. package/dist/cases/brownian-sphere.js +6 -5
  223. package/dist/cases/brownian-sphere.js.map +1 -1
  224. package/dist/cases/damped-resonator.d.ts.map +1 -1
  225. package/dist/cases/damped-resonator.js +6 -9
  226. package/dist/cases/damped-resonator.js.map +1 -1
  227. package/dist/cases/kepler-rv.d.ts +1 -1
  228. package/dist/cases/kepler-rv.d.ts.map +1 -1
  229. package/dist/cases/kepler-rv.js +3 -2
  230. package/dist/cases/kepler-rv.js.map +1 -1
  231. package/dist/cases/lumped-cooling.d.ts +8 -3
  232. package/dist/cases/lumped-cooling.d.ts.map +1 -1
  233. package/dist/cases/lumped-cooling.js +21 -23
  234. package/dist/cases/lumped-cooling.js.map +1 -1
  235. package/dist/cases/quadrature.d.ts +7 -9
  236. package/dist/cases/quadrature.d.ts.map +1 -1
  237. package/dist/cases/quadrature.js +28 -32
  238. package/dist/cases/quadrature.js.map +1 -1
  239. package/dist/cases/resistor-noise.js +4 -4
  240. package/dist/cases/resistor-noise.js.map +1 -1
  241. package/dist/cases/skin-depth.d.ts +0 -4
  242. package/dist/cases/skin-depth.d.ts.map +1 -1
  243. package/dist/cases/skin-depth.js +3 -7
  244. package/dist/cases/skin-depth.js.map +1 -1
  245. package/dist/cli/args.d.ts +23 -1
  246. package/dist/cli/args.d.ts.map +1 -1
  247. package/dist/cli/args.js +30 -8
  248. package/dist/cli/args.js.map +1 -1
  249. package/dist/cli/bindings.d.ts.map +1 -1
  250. package/dist/cli/bindings.js +5 -4
  251. package/dist/cli/bindings.js.map +1 -1
  252. package/dist/cli/command.d.ts +8 -1
  253. package/dist/cli/command.d.ts.map +1 -1
  254. package/dist/cli/command.js.map +1 -1
  255. package/dist/cli/commands/_atlas-map.d.ts +0 -9
  256. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  257. package/dist/cli/commands/_atlas-map.js +8 -18
  258. package/dist/cli/commands/_atlas-map.js.map +1 -1
  259. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  260. package/dist/cli/commands/_atlas-route.js +6 -2
  261. package/dist/cli/commands/_atlas-route.js.map +1 -1
  262. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  263. package/dist/cli/commands/_discovery-opts.js +8 -9
  264. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  265. package/dist/cli/commands/atlas.d.ts.map +1 -1
  266. package/dist/cli/commands/atlas.js +8 -5
  267. package/dist/cli/commands/atlas.js.map +1 -1
  268. package/dist/cli/commands/audit.d.ts.map +1 -1
  269. package/dist/cli/commands/audit.js +8 -1
  270. package/dist/cli/commands/audit.js.map +1 -1
  271. package/dist/cli/commands/axes.d.ts.map +1 -1
  272. package/dist/cli/commands/axes.js +20 -1
  273. package/dist/cli/commands/axes.js.map +1 -1
  274. package/dist/cli/commands/confront.d.ts.map +1 -1
  275. package/dist/cli/commands/confront.js +8 -14
  276. package/dist/cli/commands/confront.js.map +1 -1
  277. package/dist/cli/commands/derive.d.ts.map +1 -1
  278. package/dist/cli/commands/derive.js +22 -22
  279. package/dist/cli/commands/derive.js.map +1 -1
  280. package/dist/cli/commands/discover.d.ts.map +1 -1
  281. package/dist/cli/commands/discover.js +6 -2
  282. package/dist/cli/commands/discover.js.map +1 -1
  283. package/dist/cli/commands/eval.d.ts.map +1 -1
  284. package/dist/cli/commands/eval.js +1 -0
  285. package/dist/cli/commands/eval.js.map +1 -1
  286. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  287. package/dist/cli/commands/evaluate.js +65 -37
  288. package/dist/cli/commands/evaluate.js.map +1 -1
  289. package/dist/cli/commands/explain.d.ts.map +1 -1
  290. package/dist/cli/commands/explain.js +2 -1
  291. package/dist/cli/commands/explain.js.map +1 -1
  292. package/dist/cli/commands/ground.d.ts.map +1 -1
  293. package/dist/cli/commands/ground.js +1 -0
  294. package/dist/cli/commands/ground.js.map +1 -1
  295. package/dist/cli/commands/map.d.ts.map +1 -1
  296. package/dist/cli/commands/map.js +75 -5
  297. package/dist/cli/commands/map.js.map +1 -1
  298. package/dist/cli/commands/metric.d.ts.map +1 -1
  299. package/dist/cli/commands/metric.js +12 -9
  300. package/dist/cli/commands/metric.js.map +1 -1
  301. package/dist/cli/commands/path.d.ts +10 -0
  302. package/dist/cli/commands/path.d.ts.map +1 -1
  303. package/dist/cli/commands/path.js +25 -3
  304. package/dist/cli/commands/path.js.map +1 -1
  305. package/dist/cli/commands/probe.d.ts.map +1 -1
  306. package/dist/cli/commands/probe.js +59 -16
  307. package/dist/cli/commands/probe.js.map +1 -1
  308. package/dist/cli/commands/regime.d.ts.map +1 -1
  309. package/dist/cli/commands/regime.js +1 -0
  310. package/dist/cli/commands/regime.js.map +1 -1
  311. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  312. package/dist/cli/commands/retrieve.js +1 -0
  313. package/dist/cli/commands/retrieve.js.map +1 -1
  314. package/dist/cli/commands/search.d.ts.map +1 -1
  315. package/dist/cli/commands/search.js +1 -0
  316. package/dist/cli/commands/search.js.map +1 -1
  317. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  318. package/dist/cli/commands/symbolic.js +19 -28
  319. package/dist/cli/commands/symbolic.js.map +1 -1
  320. package/dist/cli/commands/testplan.d.ts.map +1 -1
  321. package/dist/cli/commands/testplan.js +4 -2
  322. package/dist/cli/commands/testplan.js.map +1 -1
  323. package/dist/cli/expr-print.d.ts +0 -2
  324. package/dist/cli/expr-print.d.ts.map +1 -1
  325. package/dist/cli/expr-print.js +7 -31
  326. package/dist/cli/expr-print.js.map +1 -1
  327. package/dist/cli/main.d.ts +7 -0
  328. package/dist/cli/main.d.ts.map +1 -1
  329. package/dist/cli/main.js +18 -3
  330. package/dist/cli/main.js.map +1 -1
  331. package/dist/cli/numeric-flag.d.ts +12 -0
  332. package/dist/cli/numeric-flag.d.ts.map +1 -0
  333. package/dist/cli/numeric-flag.js +44 -0
  334. package/dist/cli/numeric-flag.js.map +1 -0
  335. package/dist/cli/output.d.ts +20 -0
  336. package/dist/cli/output.d.ts.map +1 -1
  337. package/dist/cli/output.js +15 -0
  338. package/dist/cli/output.js.map +1 -1
  339. package/dist/cli/record-reach.js +2 -2
  340. package/dist/cli/record-reach.js.map +1 -1
  341. package/dist/cli/record-tables.d.ts.map +1 -1
  342. package/dist/cli/record-tables.js +6 -5
  343. package/dist/cli/record-tables.js.map +1 -1
  344. package/dist/cli/record.d.ts +1 -5
  345. package/dist/cli/record.d.ts.map +1 -1
  346. package/dist/cli/record.js +9 -8
  347. package/dist/cli/record.js.map +1 -1
  348. package/dist/cli/search-index.d.ts.map +1 -1
  349. package/dist/cli/search-index.js +7 -6
  350. package/dist/cli/search-index.js.map +1 -1
  351. package/dist/cli/statuses.d.ts +0 -2
  352. package/dist/cli/statuses.d.ts.map +1 -1
  353. package/dist/cli/statuses.js +0 -7
  354. package/dist/cli/statuses.js.map +1 -1
  355. package/dist/cli/stored-results.d.ts +7 -0
  356. package/dist/cli/stored-results.d.ts.map +1 -0
  357. package/dist/cli/stored-results.js +23 -0
  358. package/dist/cli/stored-results.js.map +1 -0
  359. package/dist/cli/version.d.ts.map +1 -1
  360. package/dist/cli/version.js +7 -5
  361. package/dist/cli/version.js.map +1 -1
  362. package/dist/cli-api.d.ts +34 -5
  363. package/dist/cli-api.d.ts.map +1 -1
  364. package/dist/cli-api.js +28 -4
  365. package/dist/cli-api.js.map +1 -1
  366. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  367. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  368. package/dist/composition/algebraic-equivalence.js +115 -0
  369. package/dist/composition/algebraic-equivalence.js.map +1 -0
  370. package/dist/composition/axes.d.ts +0 -6
  371. package/dist/composition/axes.d.ts.map +1 -1
  372. package/dist/composition/axes.js +6 -6
  373. package/dist/composition/axes.js.map +1 -1
  374. package/dist/composition/axis-audit.d.ts +47 -20
  375. package/dist/composition/axis-audit.d.ts.map +1 -1
  376. package/dist/composition/axis-audit.js +82 -9
  377. package/dist/composition/axis-audit.js.map +1 -1
  378. package/dist/composition/bridge-analysis.d.ts +17 -0
  379. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  380. package/dist/composition/bridge-analysis.js +102 -55
  381. package/dist/composition/bridge-analysis.js.map +1 -1
  382. package/dist/composition/canonical-compare.d.ts +40 -0
  383. package/dist/composition/canonical-compare.d.ts.map +1 -1
  384. package/dist/composition/canonical-compare.js +122 -24
  385. package/dist/composition/canonical-compare.js.map +1 -1
  386. package/dist/composition/canonical-graph.d.ts +1 -1
  387. package/dist/composition/canonical-graph.d.ts.map +1 -1
  388. package/dist/composition/canonical-graph.js +9 -36
  389. package/dist/composition/canonical-graph.js.map +1 -1
  390. package/dist/composition/canonical-json.js +2 -2
  391. package/dist/composition/canonical-json.js.map +1 -1
  392. package/dist/composition/catalog-graph.d.ts.map +1 -1
  393. package/dist/composition/catalog-graph.js +2 -5
  394. package/dist/composition/catalog-graph.js.map +1 -1
  395. package/dist/composition/chain-candidate.d.ts +8 -0
  396. package/dist/composition/chain-candidate.d.ts.map +1 -1
  397. package/dist/composition/chain-candidate.js +9 -2
  398. package/dist/composition/chain-candidate.js.map +1 -1
  399. package/dist/composition/chain-match.d.ts +6 -3
  400. package/dist/composition/chain-match.d.ts.map +1 -1
  401. package/dist/composition/chain-match.js +4 -1
  402. package/dist/composition/chain-match.js.map +1 -1
  403. package/dist/composition/chain-result.d.ts.map +1 -1
  404. package/dist/composition/chain-result.js +2 -14
  405. package/dist/composition/chain-result.js.map +1 -1
  406. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  407. package/dist/composition/compose-symbolic.js +3 -2
  408. package/dist/composition/compose-symbolic.js.map +1 -1
  409. package/dist/composition/compose.d.ts.map +1 -1
  410. package/dist/composition/compose.js +13 -5
  411. package/dist/composition/compose.js.map +1 -1
  412. package/dist/composition/composition-recovery.d.ts.map +1 -1
  413. package/dist/composition/composition-recovery.js +4 -7
  414. package/dist/composition/composition-recovery.js.map +1 -1
  415. package/dist/composition/discovery.d.ts +56 -0
  416. package/dist/composition/discovery.d.ts.map +1 -1
  417. package/dist/composition/discovery.js +114 -60
  418. package/dist/composition/discovery.js.map +1 -1
  419. package/dist/composition/edge.d.ts +21 -2
  420. package/dist/composition/edge.d.ts.map +1 -1
  421. package/dist/composition/edge.js +23 -1
  422. package/dist/composition/edge.js.map +1 -1
  423. package/dist/composition/enumerate.d.ts.map +1 -1
  424. package/dist/composition/enumerate.js +18 -3
  425. package/dist/composition/enumerate.js.map +1 -1
  426. package/dist/composition/evaluate-relation.d.ts +35 -11
  427. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  428. package/dist/composition/evaluate-relation.js +60 -39
  429. package/dist/composition/evaluate-relation.js.map +1 -1
  430. package/dist/composition/explain.d.ts +3 -12
  431. package/dist/composition/explain.d.ts.map +1 -1
  432. package/dist/composition/explain.js +7 -20
  433. package/dist/composition/explain.js.map +1 -1
  434. package/dist/composition/expr-eval.d.ts.map +1 -1
  435. package/dist/composition/expr-eval.js +2 -11
  436. package/dist/composition/expr-eval.js.map +1 -1
  437. package/dist/composition/expr-simplify.d.ts +16 -0
  438. package/dist/composition/expr-simplify.d.ts.map +1 -1
  439. package/dist/composition/expr-simplify.js +15 -20
  440. package/dist/composition/expr-simplify.js.map +1 -1
  441. package/dist/composition/formula-shape.d.ts +23 -4
  442. package/dist/composition/formula-shape.d.ts.map +1 -1
  443. package/dist/composition/formula-shape.js +57 -17
  444. package/dist/composition/formula-shape.js.map +1 -1
  445. package/dist/composition/graph-structure.d.ts +98 -0
  446. package/dist/composition/graph-structure.d.ts.map +1 -0
  447. package/dist/composition/graph-structure.js +167 -0
  448. package/dist/composition/graph-structure.js.map +1 -0
  449. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  450. package/dist/composition/graph-viz-svg.js +1 -1
  451. package/dist/composition/graph-viz-svg.js.map +1 -1
  452. package/dist/composition/graph-viz.d.ts.map +1 -1
  453. package/dist/composition/graph-viz.js +8 -37
  454. package/dist/composition/graph-viz.js.map +1 -1
  455. package/dist/composition/identifiability.d.ts +91 -4
  456. package/dist/composition/identifiability.d.ts.map +1 -1
  457. package/dist/composition/identifiability.js +363 -6
  458. package/dist/composition/identifiability.js.map +1 -1
  459. package/dist/composition/index.d.ts +8 -4
  460. package/dist/composition/index.d.ts.map +1 -1
  461. package/dist/composition/index.js +3 -2
  462. package/dist/composition/index.js.map +1 -1
  463. package/dist/composition/mathts-quiet.d.ts +4 -3
  464. package/dist/composition/mathts-quiet.d.ts.map +1 -1
  465. package/dist/composition/mathts-quiet.js +4 -3
  466. package/dist/composition/mathts-quiet.js.map +1 -1
  467. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  468. package/dist/composition/mathts-scalar-symbols.js +2 -1
  469. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  470. package/dist/composition/probe/corpus.d.ts +4 -2
  471. package/dist/composition/probe/corpus.d.ts.map +1 -1
  472. package/dist/composition/probe/corpus.js +20 -9
  473. package/dist/composition/probe/corpus.js.map +1 -1
  474. package/dist/composition/probe/dataset.d.ts +17 -0
  475. package/dist/composition/probe/dataset.d.ts.map +1 -1
  476. package/dist/composition/probe/dataset.js +95 -50
  477. package/dist/composition/probe/dataset.js.map +1 -1
  478. package/dist/composition/probe/experiment-design.d.ts +5 -1
  479. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  480. package/dist/composition/probe/experiment-design.js +44 -24
  481. package/dist/composition/probe/experiment-design.js.map +1 -1
  482. package/dist/composition/probe/falsify.d.ts.map +1 -1
  483. package/dist/composition/probe/falsify.js +2 -0
  484. package/dist/composition/probe/falsify.js.map +1 -1
  485. package/dist/composition/probe/fit.d.ts +6 -0
  486. package/dist/composition/probe/fit.d.ts.map +1 -1
  487. package/dist/composition/probe/fit.js +46 -22
  488. package/dist/composition/probe/fit.js.map +1 -1
  489. package/dist/composition/probe/frontier.d.ts.map +1 -1
  490. package/dist/composition/probe/frontier.js +33 -15
  491. package/dist/composition/probe/frontier.js.map +1 -1
  492. package/dist/composition/probe/generator.d.ts +27 -1
  493. package/dist/composition/probe/generator.d.ts.map +1 -1
  494. package/dist/composition/probe/generator.js +53 -30
  495. package/dist/composition/probe/generator.js.map +1 -1
  496. package/dist/composition/probe/index.d.ts +14 -0
  497. package/dist/composition/probe/index.d.ts.map +1 -1
  498. package/dist/composition/probe/index.js +6 -0
  499. package/dist/composition/probe/index.js.map +1 -1
  500. package/dist/composition/probe/limits.d.ts +24 -1
  501. package/dist/composition/probe/limits.d.ts.map +1 -1
  502. package/dist/composition/probe/limits.js +53 -11
  503. package/dist/composition/probe/limits.js.map +1 -1
  504. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  505. package/dist/composition/probe/pipeline.js +10 -4
  506. package/dist/composition/probe/pipeline.js.map +1 -1
  507. package/dist/composition/probe/power-law.d.ts +121 -0
  508. package/dist/composition/probe/power-law.d.ts.map +1 -0
  509. package/dist/composition/probe/power-law.js +255 -0
  510. package/dist/composition/probe/power-law.js.map +1 -0
  511. package/dist/composition/probe/problem.d.ts +7 -4
  512. package/dist/composition/probe/problem.d.ts.map +1 -1
  513. package/dist/composition/probe/problem.js +177 -49
  514. package/dist/composition/probe/problem.js.map +1 -1
  515. package/dist/composition/probe/report.js +1 -1
  516. package/dist/composition/probe/report.js.map +1 -1
  517. package/dist/composition/probe/residual.d.ts +6 -1
  518. package/dist/composition/probe/residual.d.ts.map +1 -1
  519. package/dist/composition/probe/residual.js +9 -7
  520. package/dist/composition/probe/residual.js.map +1 -1
  521. package/dist/composition/probe/structure.d.ts +82 -17
  522. package/dist/composition/probe/structure.d.ts.map +1 -1
  523. package/dist/composition/probe/structure.js +129 -55
  524. package/dist/composition/probe/structure.js.map +1 -1
  525. package/dist/composition/probe/study.d.ts +31 -9
  526. package/dist/composition/probe/study.d.ts.map +1 -1
  527. package/dist/composition/probe/study.js +236 -181
  528. package/dist/composition/probe/study.js.map +1 -1
  529. package/dist/composition/probe/t-tail.d.ts +17 -0
  530. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  531. package/dist/composition/probe/t-tail.js +32 -0
  532. package/dist/composition/probe/t-tail.js.map +1 -0
  533. package/dist/composition/probe/types.d.ts +3 -0
  534. package/dist/composition/probe/types.d.ts.map +1 -1
  535. package/dist/composition/probe/types.js.map +1 -1
  536. package/dist/composition/proposed-bridges.d.ts +41 -10
  537. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  538. package/dist/composition/proposed-bridges.js +100 -55
  539. package/dist/composition/proposed-bridges.js.map +1 -1
  540. package/dist/composition/quantity-clusters.d.ts +48 -0
  541. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  542. package/dist/composition/quantity-clusters.js +98 -0
  543. package/dist/composition/quantity-clusters.js.map +1 -0
  544. package/dist/composition/rational-exponent.d.ts +40 -0
  545. package/dist/composition/rational-exponent.d.ts.map +1 -0
  546. package/dist/composition/rational-exponent.js +65 -0
  547. package/dist/composition/rational-exponent.js.map +1 -0
  548. package/dist/composition/representative-values.d.ts +22 -0
  549. package/dist/composition/representative-values.d.ts.map +1 -1
  550. package/dist/composition/representative-values.js +23 -0
  551. package/dist/composition/representative-values.js.map +1 -1
  552. package/dist/composition/retrodiction.d.ts.map +1 -1
  553. package/dist/composition/retrodiction.js +2 -1
  554. package/dist/composition/retrodiction.js.map +1 -1
  555. package/dist/composition/user-equation.d.ts.map +1 -1
  556. package/dist/composition/user-equation.js +2 -2
  557. package/dist/composition/user-equation.js.map +1 -1
  558. package/dist/core/assignment.d.ts +19 -0
  559. package/dist/core/assignment.d.ts.map +1 -0
  560. package/dist/core/assignment.js +19 -0
  561. package/dist/core/assignment.js.map +1 -0
  562. package/dist/core/compare.d.ts +32 -0
  563. package/dist/core/compare.d.ts.map +1 -0
  564. package/dist/core/compare.js +46 -0
  565. package/dist/core/compare.js.map +1 -0
  566. package/dist/core/constants.d.ts +30 -30
  567. package/dist/core/constants.d.ts.map +1 -1
  568. package/dist/core/constants.js +47 -30
  569. package/dist/core/constants.js.map +1 -1
  570. package/dist/core/data-file.d.ts +7 -0
  571. package/dist/core/data-file.d.ts.map +1 -1
  572. package/dist/core/data-file.js +17 -0
  573. package/dist/core/data-file.js.map +1 -1
  574. package/dist/core/format.d.ts +36 -0
  575. package/dist/core/format.d.ts.map +1 -0
  576. package/dist/core/format.js +39 -0
  577. package/dist/core/format.js.map +1 -0
  578. package/dist/core/hash.d.ts +14 -0
  579. package/dist/core/hash.d.ts.map +1 -0
  580. package/dist/core/hash.js +17 -0
  581. package/dist/core/hash.js.map +1 -0
  582. package/dist/core/json-schema.d.ts +2 -0
  583. package/dist/core/json-schema.d.ts.map +1 -1
  584. package/dist/core/json-schema.js +14 -13
  585. package/dist/core/json-schema.js.map +1 -1
  586. package/dist/core/labeled-tensor.d.ts.map +1 -1
  587. package/dist/core/labeled-tensor.js +0 -8
  588. package/dist/core/labeled-tensor.js.map +1 -1
  589. package/dist/core/mathts-read.d.ts +25 -0
  590. package/dist/core/mathts-read.d.ts.map +1 -0
  591. package/dist/core/mathts-read.js +51 -0
  592. package/dist/core/mathts-read.js.map +1 -0
  593. package/dist/core/tensor.d.ts.map +1 -1
  594. package/dist/core/tensor.js +24 -0
  595. package/dist/core/tensor.js.map +1 -1
  596. package/dist/core/types.d.ts +5 -5
  597. package/dist/diff/bridge-gradient.d.ts +19 -6
  598. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  599. package/dist/diff/bridge-gradient.js +19 -11
  600. package/dist/diff/bridge-gradient.js.map +1 -1
  601. package/dist/diff/bridge-specs.d.ts.map +1 -1
  602. package/dist/diff/bridge-specs.js +3 -0
  603. package/dist/diff/bridge-specs.js.map +1 -1
  604. package/dist/dimensional/algebra.d.ts +18 -0
  605. package/dist/dimensional/algebra.d.ts.map +1 -1
  606. package/dist/dimensional/algebra.js +41 -1
  607. package/dist/dimensional/algebra.js.map +1 -1
  608. package/dist/dimensional/ast-builders.d.ts +7 -0
  609. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  610. package/dist/dimensional/ast-builders.js +11 -0
  611. package/dist/dimensional/ast-builders.js.map +1 -1
  612. package/dist/dimensional/ast-leaves.d.ts +81 -0
  613. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  614. package/dist/dimensional/ast-leaves.js +146 -0
  615. package/dist/dimensional/ast-leaves.js.map +1 -0
  616. package/dist/dimensional/buckingham.d.ts.map +1 -1
  617. package/dist/dimensional/buckingham.js +15 -27
  618. package/dist/dimensional/buckingham.js.map +1 -1
  619. package/dist/dimensional/constant-rows.js +9 -9
  620. package/dist/dimensional/constant-rows.js.map +1 -1
  621. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  622. package/dist/dimensional/dimension-inference.js +1 -2
  623. package/dist/dimensional/dimension-inference.js.map +1 -1
  624. package/dist/dimensional/errors.d.ts +1 -1
  625. package/dist/dimensional/errors.d.ts.map +1 -1
  626. package/dist/dimensional/errors.js +1 -15
  627. package/dist/dimensional/errors.js.map +1 -1
  628. package/dist/dimensional/exact-scale.d.ts +0 -17
  629. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  630. package/dist/dimensional/exact-scale.js +8 -8
  631. package/dist/dimensional/exact-scale.js.map +1 -1
  632. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  633. package/dist/dimensional/gauge-field.js +2 -2
  634. package/dist/dimensional/gauge-field.js.map +1 -1
  635. package/dist/dimensional/hyphen-names.d.ts +12 -2
  636. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  637. package/dist/dimensional/hyphen-names.js +44 -19
  638. package/dist/dimensional/hyphen-names.js.map +1 -1
  639. package/dist/dimensional/metric.d.ts.map +1 -1
  640. package/dist/dimensional/metric.js +0 -1
  641. package/dist/dimensional/metric.js.map +1 -1
  642. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  643. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  644. package/dist/dimensional/symbolic-constants.js +13 -1
  645. package/dist/dimensional/symbolic-constants.js.map +1 -1
  646. package/dist/dimensional/types.d.ts +36 -0
  647. package/dist/dimensional/types.d.ts.map +1 -1
  648. package/dist/dimensional/types.js +45 -7
  649. package/dist/dimensional/types.js.map +1 -1
  650. package/dist/dimensional/unit-data.js +2 -2
  651. package/dist/dimensional/unit-data.js.map +1 -1
  652. package/dist/index.d.ts +9 -3
  653. package/dist/index.d.ts.map +1 -1
  654. package/dist/index.js +10 -4
  655. package/dist/index.js.map +1 -1
  656. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  657. package/dist/numerical/christoffel-flat.js +3 -2
  658. package/dist/numerical/christoffel-flat.js.map +1 -1
  659. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  660. package/dist/numerical/covariant-eikonal.js +34 -11
  661. package/dist/numerical/covariant-eikonal.js.map +1 -1
  662. package/dist/numerical/curvature-lowering-helpers.js +3 -2
  663. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  664. package/dist/numerical/errors.d.ts.map +1 -1
  665. package/dist/numerical/errors.js +0 -3
  666. package/dist/numerical/errors.js.map +1 -1
  667. package/dist/numerical/finite-difference.d.ts +22 -0
  668. package/dist/numerical/finite-difference.d.ts.map +1 -0
  669. package/dist/numerical/finite-difference.js +27 -0
  670. package/dist/numerical/finite-difference.js.map +1 -0
  671. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  672. package/dist/numerical/geodesic-integrator.js +22 -14
  673. package/dist/numerical/geodesic-integrator.js.map +1 -1
  674. package/dist/numerical/geometrized.d.ts.map +1 -1
  675. package/dist/numerical/geometrized.js +0 -1
  676. package/dist/numerical/geometrized.js.map +1 -1
  677. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  678. package/dist/numerical/mathts-engine.js +10 -24
  679. package/dist/numerical/mathts-engine.js.map +1 -1
  680. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  681. package/dist/numerical/metric-inverse.js +83 -46
  682. package/dist/numerical/metric-inverse.js.map +1 -1
  683. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  684. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  685. package/dist/numerical/null-ray-integrator.js +12 -12
  686. package/dist/numerical/null-ray-integrator.js.map +1 -1
  687. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  688. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  689. package/dist/numerical/perihelion-finder.d.ts +0 -36
  690. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  691. package/dist/numerical/perihelion-finder.js +41 -87
  692. package/dist/numerical/perihelion-finder.js.map +1 -1
  693. package/dist/numerical/quadrature.d.ts.map +1 -1
  694. package/dist/numerical/quadrature.js +8 -10
  695. package/dist/numerical/quadrature.js.map +1 -1
  696. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  697. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  698. package/dist/numerical/rk4-trajectory.js +37 -0
  699. package/dist/numerical/rk4-trajectory.js.map +1 -0
  700. package/dist/numerical/schwarzschild.d.ts +14 -0
  701. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  702. package/dist/numerical/schwarzschild.js +17 -0
  703. package/dist/numerical/schwarzschild.js.map +1 -0
  704. package/dist/numerical/spacetime-metrics.d.ts +12 -0
  705. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  706. package/dist/numerical/spacetime-metrics.js +72 -56
  707. package/dist/numerical/spacetime-metrics.js.map +1 -1
  708. package/dist/numerical/statistics.d.ts +24 -0
  709. package/dist/numerical/statistics.d.ts.map +1 -0
  710. package/dist/numerical/statistics.js +52 -0
  711. package/dist/numerical/statistics.js.map +1 -0
  712. package/dist/numerical/tensor-engine.d.ts +21 -0
  713. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  714. package/dist/numerical/tensor-engine.js +12 -0
  715. package/dist/numerical/tensor-engine.js.map +1 -1
  716. package/dist/relations/regime.d.ts +10 -0
  717. package/dist/relations/regime.d.ts.map +1 -1
  718. package/dist/relations/regime.js +18 -1
  719. package/dist/relations/regime.js.map +1 -1
  720. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt discover` — vet the link candidates through the inference suite, and\n * (with `--derive`) emit the algebraic identity-consequence proposals.\n * Transposed verbatim from bin/upt.mjs's `parseDiscoveryOpts()`/`discoverCmd()`/\n * `deriveCmd()` (lines 592-713), plus `--json`. `parseDiscoveryOpts` itself\n * moved to `_discovery-opts.ts` so `map`'s `--proposed` overlay can share it.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph, groundTruthAnchor, groundTruthLine } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { parseDiscoveryOpts } from './_discovery-opts.js';\nimport type { VettedCandidate } from '../../composition/discovery.js';\nimport type { AnnotatedCandidate } from '../../composition/adjudication.js';\nimport type { AdjudicationVerdict } from '../../bridges/catalog-types.js';\nimport { DISCOVER_MAX_ORDERS_DEFAULT } from '../library-defaults.js';\nimport { adjudicationSourceUrls } from '../published-url.js';\nimport type { ConsequenceSignal, ConsequenceEvidence } from '../../composition/consequence.js';\n\n/** `annotated` (adjudication layer) composed with the consequence layer —\n * both are `VettedCandidate & {...}` intersections, so a candidate carries\n * both `adjudication?` and `consequence?` after composition. */\ntype FullyAnnotatedCandidate = AnnotatedCandidate & {\n readonly consequence?: {\n readonly signal: ConsequenceSignal;\n readonly evidence: readonly ConsequenceEvidence[];\n };\n};\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph to read: catalog, canonical, or both. canonical excludes bridges.'),\n {\n name: '--max-orders',\n valueStyle: 'attached',\n description: 'Magnitude-clash threshold. A larger value keeps more pairs promising.',\n defaultValue: DISCOVER_MAX_ORDERS_DEFAULT,\n },\n {\n name: '--anchor',\n valueStyle: 'attached',\n repeatable: true,\n description: 'Override a numeric anchor as k=v or k=v,k2=v2.',\n defaultValue: 'mass=M_sun',\n },\n {\n name: '--derive',\n valueStyle: 'none',\n description: 'For each promising identification, print the one algebraic relation it implies. That relation is not a bridge.',\n },\n {\n name: '--show-adjudicated',\n valueStyle: 'none',\n description: 'List candidates a physicist has already adjudicated, with the recorded verdict.',\n },\n {\n name: '--require-falsifier',\n valueStyle: 'none',\n description: 'Hide promising rows that no independent falsifier ran on and survived.',\n },\n JSON_FLAG,\n];\n\nconst ADJUDICATION_URLS = adjudicationSourceUrls().join('\\n ');\n\nconst HELP = `upt discover [--source=catalog|canonical|both]\n VET the link candidates through the inference suite: hypothesise\n each identification a≡b and test whether it merges disconnected\n physics, unlocks quantities, and stays numerically consistent.\n Ranks promising / inert / contradictory.\n --source=canonical runs the funnel on the standard-physics L-layer\n ALONE (bridges excluded) — new candidates from established physics,\n and a self-consistency check (expect 0 contradictory).\n --derive emits, for each 'promising' identification, the ONE algebraic\n relation it implies (monomial elimination) as an UNADJUDICATED, math-only\n proposal — NOT a bridge (Part-VI §XXVII-B). Pairs with --source=canonical.\n --max-orders=N tunes the magnitude-clash threshold (default ${DISCOVER_MAX_ORDERS_DEFAULT}); looser N\n keeps more candidates 'promising', tighter N falsifies more as clashes.\n --anchor=k=v[,k2=v2] overrides the numeric anchor (default mass=M_sun)\n for the consistency/closure check. Both reshape the candidate pool that\n --derive consumes. T, temperature, temp, and T_K on an anchor are\n kelvin: an energy is k_B T, and any other dimension is an error.\n Candidates a physicist has already adjudicated\n (${ADJUDICATION_URLS})\n fold out of the PROMISING list by default (decoy/entailed verdicts only —\n review memory, not a re-litigation prompt); --show-adjudicated lists them\n again with their recorded verdict.\n Each PROMISING row states its readiness dimension by dimension —\n structure, kind, which independent falsifiers (magnitude, axis,\n consequence) ran and survived or abstained — and what would make it\n testable: the identity premise, the missing magnitudes and regimes,\n and the observation that would test it. An abstention is a missing\n test, never a pass. --require-falsifier hides promising rows that no\n independent falsifier ran on and survived, counts them, and lists the\n encoded bridges that already carry a falsifier (a confrontation, a\n counterexample, or a regime inequality).`;\n\nconst EPISTEMICS =\n '⚠ a REVIEW SURFACE: `promising` means \"worth a physicist\\'s minute\", not \"true\".\\n' +\n ' Each candidate hypothesises an identification a≡b and tests its consequences.';\n\nconst DERIVE_EPISTEMICS =\n '⚠ Each is the ALGEBRAIC CONSEQUENCE of an unadjudicated identification — NOT a new\\n' +\n ' relation and NOT a bridge. No mechanism asserted. Promotion to the catalog needs\\n' +\n ' adversarial + literature review (Part-VI §XXVII-B). The enumerator proposes; humans dispose.';\n\n// ── discover --derive (identity-consequence proposals) ────────────────────\n\n/**\n * Sample values for GENERIC quantities, which the representative-value table\n * leaves out on purpose. A proposal is evaluated only when every free input\n * has a sourced sample: this command once put 300 into every input, a Hubble\n * rate of 300 s⁻¹ among them (persona finding D5).\n */\nconst GENERIC_SAMPLES: Readonly<Record<string, { value: number; source: string }>> = {\n temperature: { value: 300, source: 'room temperature, 300 K' },\n};\nfunction deriveReport(\n api: CommandCtx['api'],\n ranked: readonly VettedCandidate[],\n label: string,\n anchorLine: string,\n out: (line?: string) => void\n): void {\n const proposals = api.deriveProposedBridges(ranked);\n out(`\\nDerived identity-consequence PROPOSALS — UNADJUDICATED, math-only [source: ${label}]`);\n out(` ${anchorLine}`);\n out(DERIVE_EPISTEMICS + '\\n');\n if (!proposals.length) {\n out(' no admissible proposal (need two fully-quantitative, monomial canonical targets).');\n return;\n }\n for (const p of proposals) {\n let approx = '';\n const governing = p.governing || [];\n const sampleOf = (name: string) => api.REPRESENTATIVE_VALUES[name] ?? GENERIC_SAMPLES[name];\n const missing = governing.filter((g) => sampleOf(g.name) === undefined).map((g) => g.name);\n if (missing.length > 0) {\n approx = ` (no sourced sample value for ${missing.join(', ')}; not evaluated)`;\n } else {\n try {\n const vals = Object.fromEntries(governing.map((g) => [g.name, sampleOf(g.name)!.value]));\n const at = governing\n .map((g) => `${g.name}=${sampleOf(g.name)!.value} [${sampleOf(g.name)!.source}]`)\n .join(', ');\n approx = ` ≈ ${api.formatQuantity(p.evaluate(vals))}${at ? ` (${at})` : ''}`;\n } catch (e) {\n // A proposal that cannot be evaluated at its samples says so and why; it is not shown as\n // though it had no sample. Only an `Error` is a refusal of the formula: anything else is a defect.\n if (!(e instanceof Error)) throw e;\n approx = ` (not evaluated at the sample values: ${e.message})`;\n }\n }\n out(` ${p.id}`);\n out(` ${p.formulaLatex} ${p.dimensionalSignature}${approx}`);\n out(\n ` from: ${p.derivedFrom.identification.a} ≟ ${p.derivedFrom.identification.b}` +\n ` (${p.derivedFrom.sourceEquationIds[0]} = ${p.derivedFrom.sourceEquationIds[1]}); solved for ${p.derivedFrom.solvedFor}`\n );\n if (p.alsoDerivableFrom && p.alsoDerivableFrom.length) {\n out(` also derivable from: ${p.alsoDerivableFrom.join('; ')}`);\n }\n const c = api.describeDerivedClaim(p);\n out(\n c.relation === 'known-law'\n ? ` status: known law — re-derives ${c.canonicalMatch.id}; the identification ${c.premise} is still unadjudicated`\n : ` status: conditional identity — holds only if ${c.premise} (unadjudicated); untested`,\n );\n out(` meaning: ${c.symbol.meaning}`);\n out(\n ` assumptions carried: ${c.assumptions.map((a) => `${a.equation}: ${a.assumptions.join(', ') || 'none stated'}`).join('; ')}`,\n );\n const governingSet = `{${p.governing.map((g) => g.name).join(', ')}}`;\n out(\n ` canonical match: ${c.canonicalMatch.id ?? 'none'} — ${c.canonicalMatch.sameTarget} registry equation(s) target ` +\n `${p.target.name}, ${c.canonicalMatch.sameTargetAndGoverning} with governing ${governingSet}; ` +\n 'scope: this registry only, not physics at large',\n );\n }\n out('');\n}\n\n/** Verdicts that fold a candidate out of the printed PROMISING list by\n * default — review memory, not news. `deferred`/`genuine` stay listed\n * (see the module-level docstring on `AdjudicationVerdict`). */\nfunction foldsOut(verdict: AdjudicationVerdict): boolean {\n return verdict === 'decoy' || verdict === 'entailed';\n}\n\n/** Tally an annotated candidate set's recorded verdicts, for `--json`'s\n * `adjudicationSummary` (over ALL candidates, every funnel bucket). */\nfunction summarizeAdjudications(\n candidates: readonly AnnotatedCandidate[]\n): { total: number; genuine: number; decoy: number; entailed: number; deferred: number } {\n const summary = { total: 0, genuine: 0, decoy: 0, entailed: 0, deferred: 0 };\n for (const c of candidates) {\n if (!c.adjudication) continue;\n summary.total++;\n summary[c.adjudication.verdict]++;\n }\n return summary;\n}\n\n/** The reconciling line printed under PROMISING when some of it carries a\n * recorded verdict — so the folded/shorter list never looks inconsistent\n * against the funnel line's raw promising count. */\nfunction adjudicationSummaryLine(promising: readonly AnnotatedCandidate[], promisingCount: number): string {\n const adjudicated = promising.filter((r) => r.adjudication);\n const counts = { genuine: 0, decoy: 0, entailed: 0, deferred: 0 };\n let folded = 0;\n for (const r of adjudicated) {\n const v = r.adjudication!.verdict;\n counts[v]++;\n if (foldsOut(v)) folded++;\n }\n const parts = (['decoy', 'entailed', 'deferred', 'genuine'] as const)\n .filter((v) => counts[v] > 0)\n .map((v) => `${counts[v]} ${v}`);\n const total = adjudicated.length;\n const verb = total === 1 ? 'carries' : 'carry';\n const noun = total === 1 ? 'a recorded verdict' : 'recorded verdicts';\n const foldNote = folded === total ? '— folded' : folded === 0 ? '— shown below' : `— ${folded} folded`;\n return ` adjudicated: ${total} of the ${promisingCount} promising ${verb} ${noun} (${parts.join(', ')}) ${foldNote}; --show-adjudicated to list`;\n}\n\ninterface Readiness {\n promising: number;\n mechanismTested: number;\n dataTested: number;\n withoutMagnitudeEvidence: number;\n axisUnresolved: number;\n entailedConsequence: number;\n}\n\n/** Encoded bridges that already carry a falsifier. Not discovery rows. */\nfunction encodedFalsifiers(api: CommandCtx['api']): readonly string[] {\n const lines: string[] = [];\n for (const id of [...api.CONFRONTATIONS.keys()].sort((a, b) => a - b)) {\n lines.push(`be-${id} (confrontation)`);\n }\n for (const f of api.ATLAS_FAMILIES) {\n for (const b of f.bridges) {\n const cx = b.counterexamples.length;\n const ineq = b.regime.inequalities.length;\n if (cx === 0 && ineq === 0) continue;\n const bits = [\n cx > 0 ? `${cx} counterexample${cx === 1 ? '' : 's'}` : '',\n ineq > 0 ? `${ineq} regime inequalit${ineq === 1 ? 'y' : 'ies'}` : '',\n ].filter((s) => s !== '');\n lines.push(`${b.id} (${bits.join(', ')})`);\n }\n }\n return lines;\n}\n\n/** How far the `promising` set is from evidence, counted from candidate fields. */\nfunction readinessOf(api: CommandCtx['api'], candidates: readonly FullyAnnotatedCandidate[]): Readiness {\n const p = candidates.filter((c) => c.verdict === 'promising');\n const g = p.map((c) => api.describeGrounding(c, c.consequence?.signal));\n return {\n promising: p.length,\n mechanismTested: g.filter((x) => x.mechanismTested).length,\n dataTested: g.filter((x) => x.dataTested).length,\n withoutMagnitudeEvidence: p.filter((c) => !c.magnitudeChecked || c.magnitudeAnchorInvariant === true).length,\n axisUnresolved: p.filter((c) => !c.axisChecked).length,\n entailedConsequence: p.filter((c) => c.consequence?.signal === 'entailed').length,\n };\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const { graph, label, source } = resolveGraph(api, args.flags);\n const opts = parseDiscoveryOpts(api, args.flags);\n const anchor = groundTruthAnchor(api, opts);\n const ranked = api.rankDiscoveries(graph, opts);\n const isDerive = args.flags.has('derive');\n const annotated = isDerive ? ([] as AnnotatedCandidate[]) : api.annotateAdjudications(ranked);\n const withConsequence: readonly FullyAnnotatedCandidate[] = isDerive\n ? []\n : api.annotateConsequences(annotated);\n const showAdjudicated = args.flags.has('show-adjudicated');\n\n if (args.flags.has('json')) {\n const requireFalsifier = args.flags.has('require-falsifier');\n const mapped = isDerive\n ? api.deriveProposedBridges(ranked).map((p) => ({ ...p, claim: api.describeDerivedClaim(p) }))\n : withConsequence.map((c) => ({\n ...c,\n grounding: api.describeGrounding(c, c.consequence?.signal),\n readiness: api.describeReadiness(c, c.consequence?.signal),\n }));\n const result =\n requireFalsifier && !isDerive\n ? mapped.filter(\n (c) =>\n !('readiness' in c) ||\n c.verdict !== 'promising' ||\n c.readiness.falsifiers.survived.length > 0,\n )\n : mapped;\n const envelope = {\n command: 'discover',\n source,\n anchor: { groundTruth: anchor },\n options: { ...opts },\n epistemics: isDerive ? DERIVE_EPISTEMICS : EPISTEMICS,\n result,\n ...(requireFalsifier && !isDerive ? { encodedFalsifiers: encodedFalsifiers(api) } : {}),\n ...(isDerive\n ? {}\n : {\n readiness: readinessOf(api, withConsequence),\n adjudicationSummary: summarizeAdjudications(withConsequence),\n }),\n };\n emitJson(envelope, ctx.write);\n return 0;\n }\n\n if (Object.keys(opts).length) {\n const bits: string[] = [];\n if (opts.maxOrdersOfMagnitude !== undefined) bits.push(`max-orders=${opts.maxOrdersOfMagnitude}`);\n if (opts.groundTruth) {\n bits.push(`anchor={${Object.entries(opts.groundTruth).map(([k, v]) => `${k}=${v}`).join(', ')}}`);\n }\n out(` [discovery options: ${bits.join('; ')}]`);\n }\n\n if (isDerive) {\n deriveReport(api, ranked, label, groundTruthLine(anchor), out);\n return 0;\n }\n\n const by = (v: string) => withConsequence.filter((r) => r.verdict === v);\n // Q1: within PROMISING, spend the physicist's first minute on consequence-\n // bearing / magnitude-backed rows before inconclusive + no-magnitude coincidences.\n const consRank = (s: ConsequenceSignal | undefined): number =>\n s === 'entailed' ? 0 : s === 'novel-consequence' ? 1 : 2;\n const promising = [...by('promising')].sort((a, b) => {\n const ca = consRank(a.consequence?.signal);\n const cb = consRank(b.consequence?.signal);\n if (ca !== cb) return ca - cb;\n const magA = a.magnitudeChecked && a.magnitudeAnchorInvariant !== true ? 0 : 1;\n const magB = b.magnitudeChecked && b.magnitudeAnchorInvariant !== true ? 0 : 1;\n if (magA !== magB) return magA - magB;\n return b.score - a.score || a.a.localeCompare(b.a) || a.b.localeCompare(b.b);\n });\n const inert = by('inert');\n const contra = by('contradictory');\n const clash = by('magnitude-clash');\n const axisClash = by('axis-clash');\n out(`\\nDiscovery — link candidates VETTED through the inference suite [source: ${label}]`);\n out(` ${groundTruthLine(anchor)}`);\n out('⚠ a REVIEW SURFACE: `promising` means \"worth a physicist\\'s minute\", not \"true\".');\n out(' Each candidate hypothesises an identification a≡b and tests its consequences.\\n');\n out(\n ` funnel: ${withConsequence.length} candidates → ${promising.length} promising ` +\n `· ${inert.length} inert · ${clash.length} magnitude-clash ` +\n `· ${contra.length} contradictory (numerically falsified) · ${axisClash.length} axis-clash`\n );\n const rd = readinessOf(api, withConsequence);\n out(\n ` readiness of the ${rd.promising} promising: ${rd.mechanismTested} mechanism-tested · ` +\n `${rd.dataTested} data-tested · ${rd.withoutMagnitudeEvidence} without magnitude evidence · ` +\n `${rd.axisUnresolved} with axis unresolved · ${rd.entailedConsequence} with an entailed consequence`,\n );\n out(' promising ≠ evidence: promotion to a bridge needs a mechanism and a falsifiable prediction.\\n');\n const requireFalsifier = args.flags.has('require-falsifier');\n const untested = (r: FullyAnnotatedCandidate) =>\n api.describeReadiness(r, r.consequence?.signal).falsifiers.survived.length === 0;\n if (requireFalsifier) {\n out(\n ` --require-falsifier: ${promising.filter(untested).length} of the ${promising.length} promising hidden — ` +\n 'no independent falsifier ran and survived (connectivity alone is not evidence)\\n',\n );\n const encoded = encodedFalsifiers(api);\n out(` encoded falsifiers already on the records (${encoded.length}; these are not discovery rows):`);\n for (const line of encoded) out(` ${line}`);\n out('');\n }\n if (promising.length) {\n out(' PROMISING (merges disconnected physics, unlocks quantities, stays consistent):');\n for (const r of promising) {\n if (r.adjudication && foldsOut(r.adjudication.verdict) && !showAdjudicated) continue;\n if (requireFalsifier && untested(r)) continue;\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}] score ${r.score}`);\n out(` unlocks: ${r.unlocksFromAnchor.join(', ') || '—'}`);\n if (r.consequence) {\n out(` [consequence: ${r.consequence.signal}]`);\n }\n const g = api.describeGrounding(r, r.consequence?.signal);\n out(\n ` [grounding — passed: ${g.passed.join(', ') || '—'}` +\n ` · gaps: ${g.gaps.join(', ') || '—'} · ceiling: no mechanism/data test]`,\n );\n const rd = api.describeReadiness(r, r.consequence?.signal);\n const f = rd.falsifiers;\n out(\n ` [readiness — structure: ${rd.structure.mergesComponents ? 'merges components' : 'no merge'}, ` +\n `unlocks ${rd.structure.unlocks} · kind: ${rd.kind} · independent falsifiers survived: ` +\n `${f.survived.join(', ') || 'none'}${f.abstained.length ? ` (abstained: ${f.abstained.join(', ')})` : ''}` +\n ' · mechanism: none · data: none]',\n );\n const needs = [\n ...(rd.needs.magnitudeFor.length ? [`needs a representative magnitude for: ${rd.needs.magnitudeFor.join(', ')}`] : []),\n ...rd.needs.regimeFor.map((u) => `needs a stated ${u.axis} regime for: ${u.endpoints.join(', ')}`),\n ...(rd.needs.derivableConsequence ? ['needs a consequence that re-derives a known law'] : []),\n ];\n out(` [to make it testable — premise: ${rd.needs.premise}${needs.map((n) => ` · ${n}`).join('')}]`);\n out(` [observation: ${rd.observation}]`);\n if (r.adjudication) {\n out(` [adjudicated: ${r.adjudication.verdict} — ${r.adjudication.grounds}]`);\n }\n }\n if (promising.some((r) => r.adjudication)) {\n out(adjudicationSummaryLine(promising, promising.length));\n }\n } else {\n out(' no candidate is `promising` from the anchor above.');\n }\n if (clash.length) {\n out(`\\n MAGNITUDE-CLASH (representative values differ by > N orders — a falsifier):`);\n for (const r of clash) {\n const basis = r.magnitudeUsedAnchor ? ' (anchor-derived)' : '';\n // A magnitude estimate is a statistic: three digits, marked approximate.\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ~${api.formatQuantity(r.ordersApart!, 3)} orders apart${basis}`);\n }\n }\n const subsumed = inert.filter((r) => r.subsuming);\n if (subsumed.length) {\n out(`\\n SUBSUMING (generic ≟ specialization — tautological, barred from promising):`);\n for (const r of subsumed) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}]`);\n }\n }\n if (contra.length) {\n out(`\\n CONTRADICTORY (the identification falsifies itself numerically):`);\n for (const r of contra) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} disagreeing node(s): ${r.inconsistentNodes.join(', ')}`);\n }\n }\n if (axisClash.length) {\n out(`\\n AXIS-CLASH (stated scale/force labels differ: a regime-label prior, not a physical test):`);\n for (const r of axisClash) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ${r.axisClashes.join('; ')}`);\n }\n }\n out('\\n (magnitude gate abstains where a representative value is unknown; weak priors on dimension.)');\n out(` (inspect one candidate: upt ground --source=${source} <a> <b>, with the same --anchor/--max-orders)`);\n return 0;\n}\n\nexport const command: Command = {\n name: 'discover',\n aliases: ['discovery'],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Vet quantity identifications and rank them promising, inert, or contradictory.',\n example: 'upt discover --source=canonical',\n group: 'discovery',\n run,\n};\n\nregisterCommand(command);\n"]}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt discover` — vet the link candidates through the inference suite, and\n * (with `--derive`) emit the algebraic identity-consequence proposals.\n * Transposed verbatim from bin/upt.mjs's `parseDiscoveryOpts()`/`discoverCmd()`/\n * `deriveCmd()` (lines 592-713), plus `--json`. `parseDiscoveryOpts` itself\n * moved to `_discovery-opts.ts` so `map`'s `--proposed` overlay can share it.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph, groundTruthAnchor, groundTruthLine } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { parseDiscoveryOpts } from './_discovery-opts.js';\nimport type { VettedCandidate } from '../../composition/discovery.js';\nimport type { AnnotatedCandidate } from '../../composition/adjudication.js';\nimport type { AdjudicationVerdict } from '../../bridges/catalog-types.js';\nimport { DISCOVER_MAX_ORDERS_DEFAULT } from '../library-defaults.js';\nimport { adjudicationSourceUrls } from '../published-url.js';\nimport type { ConsequenceSignal, ConsequenceEvidence } from '../../composition/consequence.js';\n\n/** `annotated` (adjudication layer) composed with the consequence layer —\n * both are `VettedCandidate & {...}` intersections, so a candidate carries\n * both `adjudication?` and `consequence?` after composition. */\ntype FullyAnnotatedCandidate = AnnotatedCandidate & {\n readonly consequence?: {\n readonly signal: ConsequenceSignal;\n readonly evidence: readonly ConsequenceEvidence[];\n };\n};\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph to read: catalog, canonical, or both. canonical excludes bridges.'),\n {\n name: '--max-orders',\n valueStyle: 'attached',\n description: 'Magnitude-clash threshold. A larger value keeps more pairs promising.',\n defaultValue: DISCOVER_MAX_ORDERS_DEFAULT,\n },\n {\n name: '--anchor',\n valueStyle: 'attached',\n repeatable: true,\n description: 'Override a numeric anchor as k=v or k=v,k2=v2.',\n defaultValue: 'mass=M_sun',\n },\n {\n name: '--derive',\n valueStyle: 'none',\n description: 'For each promising identification, print the one algebraic relation it implies. That relation is not a bridge.',\n },\n {\n name: '--show-adjudicated',\n valueStyle: 'none',\n description: 'List candidates a physicist has already adjudicated, with the recorded verdict.',\n },\n {\n name: '--require-falsifier',\n valueStyle: 'none',\n description: 'Hide promising rows that no independent falsifier ran on and survived.',\n },\n JSON_FLAG,\n];\n\nconst ADJUDICATION_URLS = adjudicationSourceUrls().join('\\n ');\n\nconst HELP = `upt discover [--source=catalog|canonical|both]\n VET the link candidates through the inference suite: hypothesise\n each identification a≡b and test whether it merges disconnected\n physics, unlocks quantities, and stays numerically consistent.\n Ranks promising / inert / contradictory.\n --source=canonical runs the funnel on the standard-physics L-layer\n ALONE (bridges excluded) — new candidates from established physics,\n and a self-consistency check (expect 0 contradictory).\n --derive emits, for each 'promising' identification, the ONE algebraic\n relation it implies (monomial elimination) as an UNADJUDICATED, math-only\n proposal — NOT a bridge (Part-VI §XXVII-B). Pairs with --source=canonical.\n --max-orders=N tunes the magnitude-clash threshold (default ${DISCOVER_MAX_ORDERS_DEFAULT}); looser N\n keeps more candidates 'promising', tighter N falsifies more as clashes.\n --anchor=k=v[,k2=v2] overrides the numeric anchor (default mass=M_sun)\n for the consistency/closure check. Both reshape the candidate pool that\n --derive consumes. T, temperature, temp, and T_K on an anchor are\n kelvin: an energy is k_B T, and any other dimension is an error.\n Candidates a physicist has already adjudicated\n (${ADJUDICATION_URLS})\n fold out of the PROMISING list by default (decoy/entailed verdicts only —\n review memory, not a re-litigation prompt); --show-adjudicated lists them\n again with their recorded verdict.\n Each PROMISING row states its readiness dimension by dimension —\n structure, kind, which independent falsifiers (magnitude, axis,\n consequence) ran and survived or abstained — and what would make it\n testable: the identity premise, the missing magnitudes and regimes,\n and the observation that would test it. An abstention is a missing\n test, never a pass. --require-falsifier hides promising rows that no\n independent falsifier ran on and survived, counts them, and lists the\n encoded bridges that already carry a falsifier (a confrontation, a\n counterexample, or a regime inequality).`;\n\nconst EPISTEMICS =\n '⚠ a REVIEW SURFACE: `promising` means \"worth a physicist\\'s minute\", not \"true\".\\n' +\n ' Each candidate hypothesises an identification a≡b and tests its consequences.';\n\nconst DERIVE_EPISTEMICS =\n '⚠ Each is the ALGEBRAIC CONSEQUENCE of an unadjudicated identification — NOT a new\\n' +\n ' relation and NOT a bridge. No mechanism asserted. Promotion to the catalog needs\\n' +\n ' adversarial + literature review (Part-VI §XXVII-B). The enumerator proposes; humans dispose.';\n\n// ── discover --derive (identity-consequence proposals) ────────────────────\n\n/**\n * Sample values for GENERIC quantities, which the representative-value table\n * leaves out on purpose. A proposal is evaluated only when every free input\n * has a sourced sample: this command once put 300 into every input, a Hubble\n * rate of 300 s⁻¹ among them (persona finding D5).\n */\nconst GENERIC_SAMPLES: Readonly<Record<string, { value: number; source: string }>> = {\n temperature: { value: 300, source: 'room temperature, 300 K' },\n};\nfunction deriveReport(\n api: CommandCtx['api'],\n ranked: readonly VettedCandidate[],\n label: string,\n anchorLine: string,\n out: (line?: string) => void\n): void {\n const proposals = api.deriveProposedBridges(ranked);\n out(`\\nDerived identity-consequence PROPOSALS — UNADJUDICATED, math-only [source: ${label}]`);\n out(` ${anchorLine}`);\n out(DERIVE_EPISTEMICS + '\\n');\n if (!proposals.length) {\n out(' no admissible proposal (need two fully-quantitative, monomial canonical targets).');\n return;\n }\n for (const p of proposals) {\n let approx = '';\n const governing = p.governing || [];\n const sampleOf = (name: string) => api.REPRESENTATIVE_VALUES[name] ?? GENERIC_SAMPLES[name];\n const missing = governing.filter((g) => sampleOf(g.name) === undefined).map((g) => g.name);\n if (missing.length > 0) {\n approx = ` (no sourced sample value for ${missing.join(', ')}; not evaluated)`;\n } else {\n try {\n const vals = Object.fromEntries(governing.map((g) => [g.name, sampleOf(g.name)!.value]));\n const at = governing\n .map((g) => `${g.name}=${sampleOf(g.name)!.value} [${sampleOf(g.name)!.source}]`)\n .join(', ');\n approx = ` ≈ ${api.formatQuantity(p.evaluate(vals))}${at ? ` (${at})` : ''}`;\n } catch (e) {\n // A proposal that cannot be evaluated at its samples says so and why; it is not shown as\n // though it had no sample. Only an `Error` is a refusal of the formula: anything else is a defect.\n if (!(e instanceof Error)) throw e;\n approx = ` (not evaluated at the sample values: ${e.message})`;\n }\n }\n out(` ${p.id}`);\n out(` ${p.formulaLatex} ${p.dimensionalSignature}${approx}`);\n out(\n ` from: ${p.derivedFrom.identification.a} ≟ ${p.derivedFrom.identification.b}` +\n ` (${p.derivedFrom.sourceEquationIds[0]} = ${p.derivedFrom.sourceEquationIds[1]}); solved for ${p.derivedFrom.solvedFor}`\n );\n if (p.alsoDerivableFrom && p.alsoDerivableFrom.length) {\n out(` also derivable from: ${p.alsoDerivableFrom.join('; ')}`);\n }\n const c = api.describeDerivedClaim(p);\n out(\n c.relation === 'known-law'\n ? ` status: known law — re-derives ${c.canonicalMatch.id}; the identification ${c.premise} is still unadjudicated`\n : ` status: conditional identity — holds only if ${c.premise} (unadjudicated); untested`,\n );\n out(` meaning: ${c.symbol.meaning}`);\n out(\n ` assumptions carried: ${c.assumptions.map((a) => `${a.equation}: ${a.assumptions.join(', ') || 'none stated'}`).join('; ')}`,\n );\n const governingSet = `{${p.governing.map((g) => g.name).join(', ')}}`;\n out(\n ` canonical match: ${c.canonicalMatch.id ?? 'none'} — ${c.canonicalMatch.sameTarget} registry equation(s) target ` +\n `${p.target.name}, ${c.canonicalMatch.sameTargetAndGoverning} with governing ${governingSet}; ` +\n 'scope: this registry only, not physics at large',\n );\n }\n out('');\n}\n\n/** Verdicts that fold a candidate out of the printed PROMISING list by\n * default — review memory, not news. `deferred`/`genuine` stay listed\n * (see the module-level docstring on `AdjudicationVerdict`). */\nfunction foldsOut(verdict: AdjudicationVerdict): boolean {\n return verdict === 'decoy' || verdict === 'entailed';\n}\n\n/** Tally an annotated candidate set's recorded verdicts, for `--json`'s\n * `adjudicationSummary` (over ALL candidates, every funnel bucket). */\nfunction summarizeAdjudications(\n candidates: readonly AnnotatedCandidate[]\n): { total: number; genuine: number; decoy: number; entailed: number; deferred: number } {\n const summary = { total: 0, genuine: 0, decoy: 0, entailed: 0, deferred: 0 };\n for (const c of candidates) {\n if (!c.adjudication) continue;\n summary.total++;\n summary[c.adjudication.verdict]++;\n }\n return summary;\n}\n\n/** The reconciling line printed under PROMISING when some of it carries a\n * recorded verdict — so the folded/shorter list never looks inconsistent\n * against the funnel line's raw promising count. */\nfunction adjudicationSummaryLine(promising: readonly AnnotatedCandidate[], promisingCount: number): string {\n const adjudicated = promising.filter((r) => r.adjudication);\n const counts = { genuine: 0, decoy: 0, entailed: 0, deferred: 0 };\n let folded = 0;\n for (const r of adjudicated) {\n const v = r.adjudication!.verdict;\n counts[v]++;\n if (foldsOut(v)) folded++;\n }\n const parts = (['decoy', 'entailed', 'deferred', 'genuine'] as const)\n .filter((v) => counts[v] > 0)\n .map((v) => `${counts[v]} ${v}`);\n const total = adjudicated.length;\n const verb = total === 1 ? 'carries' : 'carry';\n const noun = total === 1 ? 'a recorded verdict' : 'recorded verdicts';\n const foldNote = folded === total ? '— folded' : folded === 0 ? '— shown below' : `— ${folded} folded`;\n return ` adjudicated: ${total} of the ${promisingCount} promising ${verb} ${noun} (${parts.join(', ')}) ${foldNote}; --show-adjudicated to list`;\n}\n\ninterface Readiness {\n promising: number;\n mechanismTested: number;\n dataTested: number;\n withoutMagnitudeEvidence: number;\n axisUnresolved: number;\n entailedConsequence: number;\n}\n\n/** Encoded bridges that already carry a falsifier. Not discovery rows. */\nfunction encodedFalsifiers(api: CommandCtx['api']): readonly string[] {\n const lines: string[] = [];\n for (const id of [...api.CONFRONTATIONS.keys()].sort((a, b) => a - b)) {\n lines.push(`be-${id} (confrontation)`);\n }\n for (const f of api.ATLAS_FAMILIES) {\n for (const b of f.bridges) {\n const cx = b.counterexamples.length;\n const ineq = b.regime.inequalities.length;\n if (cx === 0 && ineq === 0) continue;\n const bits = [\n cx > 0 ? `${cx} counterexample${cx === 1 ? '' : 's'}` : '',\n ineq > 0 ? `${ineq} regime inequalit${ineq === 1 ? 'y' : 'ies'}` : '',\n ].filter((s) => s !== '');\n lines.push(`${b.id} (${bits.join(', ')})`);\n }\n }\n return lines;\n}\n\n/** How far the `promising` set is from evidence, counted from candidate fields. */\nfunction readinessOf(api: CommandCtx['api'], candidates: readonly FullyAnnotatedCandidate[]): Readiness {\n const p = candidates.filter((c) => c.verdict === 'promising');\n const g = p.map((c) => api.describeGrounding(c, c.consequence?.signal));\n return {\n promising: p.length,\n mechanismTested: g.filter((x) => x.mechanismTested).length,\n dataTested: g.filter((x) => x.dataTested).length,\n withoutMagnitudeEvidence: p.filter((c) => !c.magnitudeChecked || c.magnitudeAnchorInvariant === true).length,\n axisUnresolved: p.filter((c) => !c.axisChecked).length,\n entailedConsequence: p.filter((c) => c.consequence?.signal === 'entailed').length,\n };\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const { graph, label, source } = resolveGraph(api, args.flags);\n const opts = parseDiscoveryOpts(api, args.flags);\n const anchor = groundTruthAnchor(api, opts);\n const ranked = api.rankDiscoveries(graph, opts);\n const isDerive = args.flags.has('derive');\n const annotated = isDerive ? ([] as AnnotatedCandidate[]) : api.annotateAdjudications(ranked);\n const withConsequence: readonly FullyAnnotatedCandidate[] = isDerive\n ? []\n : api.annotateConsequences(annotated);\n const showAdjudicated = args.flags.has('show-adjudicated');\n\n if (args.flags.has('json')) {\n const requireFalsifier = args.flags.has('require-falsifier');\n const mapped = isDerive\n ? api.deriveProposedBridges(ranked).map((p) => ({ ...p, claim: api.describeDerivedClaim(p) }))\n : withConsequence.map((c) => ({\n ...c,\n grounding: api.describeGrounding(c, c.consequence?.signal),\n readiness: api.describeReadiness(c, c.consequence?.signal),\n }));\n const result =\n requireFalsifier && !isDerive\n ? mapped.filter(\n (c) =>\n !('readiness' in c) ||\n c.verdict !== 'promising' ||\n c.readiness.falsifiers.survived.length > 0,\n )\n : mapped;\n const envelope = {\n command: 'discover',\n source,\n anchor: { groundTruth: anchor },\n options: { ...opts },\n epistemics: isDerive ? DERIVE_EPISTEMICS : EPISTEMICS,\n result,\n ...(requireFalsifier && !isDerive ? { encodedFalsifiers: encodedFalsifiers(api) } : {}),\n ...(isDerive\n ? {}\n : {\n readiness: readinessOf(api, withConsequence),\n adjudicationSummary: summarizeAdjudications(withConsequence),\n }),\n };\n emitJson(envelope, ctx.write);\n return 0;\n }\n\n if (Object.keys(opts).length) {\n const bits: string[] = [];\n if (opts.maxOrdersOfMagnitude !== undefined) bits.push(`max-orders=${opts.maxOrdersOfMagnitude}`);\n if (opts.groundTruth) {\n bits.push(`anchor={${Object.entries(opts.groundTruth).map(([k, v]) => `${k}=${v}`).join(', ')}}`);\n }\n out(` [discovery options: ${bits.join('; ')}]`);\n }\n\n if (isDerive) {\n deriveReport(api, ranked, label, groundTruthLine(anchor), out);\n return 0;\n }\n\n const by = (v: string) => withConsequence.filter((r) => r.verdict === v);\n // Q1: within PROMISING, spend the physicist's first minute on consequence-\n // bearing / magnitude-backed rows before inconclusive + no-magnitude coincidences.\n const consRank = (s: ConsequenceSignal | undefined): number =>\n s === 'entailed' ? 0 : s === 'novel-consequence' ? 1 : 2;\n const promising = [...by('promising')].sort((a, b) => {\n const ca = consRank(a.consequence?.signal);\n const cb = consRank(b.consequence?.signal);\n if (ca !== cb) return ca - cb;\n const magA = a.magnitudeChecked && a.magnitudeAnchorInvariant !== true ? 0 : 1;\n const magB = b.magnitudeChecked && b.magnitudeAnchorInvariant !== true ? 0 : 1;\n if (magA !== magB) return magA - magB;\n return b.score - a.score || a.a.localeCompare(b.a) || a.b.localeCompare(b.b);\n });\n const inert = by('inert');\n const contra = by('contradictory');\n const clash = by('magnitude-clash');\n const axisClash = by('axis-clash');\n out(`\\nDiscovery — link candidates VETTED through the inference suite [source: ${label}]`);\n out(` ${groundTruthLine(anchor)}`);\n out('⚠ a REVIEW SURFACE: `promising` means \"worth a physicist\\'s minute\", not \"true\".');\n out(' Each candidate hypothesises an identification a≡b and tests its consequences.\\n');\n out(\n ` funnel: ${withConsequence.length} candidates → ${promising.length} promising ` +\n `· ${inert.length} inert · ${clash.length} magnitude-clash ` +\n `· ${contra.length} contradictory (numerically falsified) · ${axisClash.length} axis-clash`\n );\n const rd = readinessOf(api, withConsequence);\n out(\n ` readiness of the ${rd.promising} promising: ${rd.mechanismTested} mechanism-tested · ` +\n `${rd.dataTested} data-tested · ${rd.withoutMagnitudeEvidence} without magnitude evidence · ` +\n `${rd.axisUnresolved} with axis unresolved · ${rd.entailedConsequence} with an entailed consequence`,\n );\n out(' promising ≠ evidence: promotion to a bridge needs a mechanism and a falsifiable prediction.\\n');\n const requireFalsifier = args.flags.has('require-falsifier');\n const untested = (r: FullyAnnotatedCandidate) =>\n api.describeReadiness(r, r.consequence?.signal).falsifiers.survived.length === 0;\n if (requireFalsifier) {\n out(\n ` --require-falsifier: ${promising.filter(untested).length} of the ${promising.length} promising hidden — ` +\n 'no independent falsifier ran and survived (connectivity alone is not evidence)\\n',\n );\n const encoded = encodedFalsifiers(api);\n out(` encoded falsifiers already on the records (${encoded.length}; these are not discovery rows):`);\n for (const line of encoded) out(` ${line}`);\n out('');\n }\n if (promising.length) {\n out(' PROMISING (merges disconnected physics, unlocks quantities, stays consistent):');\n for (const r of promising) {\n if (r.adjudication && foldsOut(r.adjudication.verdict) && !showAdjudicated) continue;\n if (requireFalsifier && untested(r)) continue;\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}] score ${r.score}`);\n out(` unlocks: ${r.unlocksFromAnchor.join(', ') || '—'}`);\n if (r.consequence) {\n out(` [consequence: ${r.consequence.signal}]`);\n }\n const g = api.describeGrounding(r, r.consequence?.signal);\n out(\n ` [grounding — passed: ${g.passed.join(', ') || '—'}` +\n ` · gaps: ${g.gaps.join(', ') || '—'} · ceiling: no mechanism/data test]`,\n );\n const rd = api.describeReadiness(r, r.consequence?.signal);\n const f = rd.falsifiers;\n out(\n ` [readiness — structure: ${rd.structure.mergesComponents ? 'merges components' : 'no merge'}, ` +\n `unlocks ${rd.structure.unlocks} · kind: ${rd.kind} · independent falsifiers survived: ` +\n `${f.survived.join(', ') || 'none'}${f.abstained.length ? ` (abstained: ${f.abstained.join(', ')})` : ''}` +\n ' · mechanism: none · data: none]',\n );\n const needs = [\n ...(rd.needs.magnitudeFor.length ? [`needs a representative magnitude for: ${rd.needs.magnitudeFor.join(', ')}`] : []),\n ...rd.needs.regimeFor.map((u) => `needs a stated ${u.axis} regime for: ${u.endpoints.join(', ')}`),\n ...(rd.needs.derivableConsequence ? ['needs a consequence that re-derives a known law'] : []),\n ];\n out(` [to make it testable — premise: ${rd.needs.premise}${needs.map((n) => ` · ${n}`).join('')}]`);\n out(` [observation: ${rd.observation}]`);\n if (r.adjudication) {\n out(` [adjudicated: ${r.adjudication.verdict} — ${r.adjudication.grounds}]`);\n }\n }\n if (promising.some((r) => r.adjudication)) {\n out(adjudicationSummaryLine(promising, promising.length));\n }\n } else {\n out(' no candidate is `promising` from the anchor above.');\n }\n if (clash.length) {\n out(\n `\\n MAGNITUDE-CLASH (representative values differ by > N orders — a falsifier; p is the falsifier's strength ` +\n `at the values' stated σ, 2Φ(−orders/√(σa²+σb²)), not a credibility score):`,\n );\n for (const r of clash) {\n const basis = r.magnitudeUsedAnchor ? ' (anchor-derived)' : '';\n // A p that underflows a double is not zero: it is below the smallest normal double.\n const p = r.magnitudeP;\n const strength =\n p === undefined || p === null ? '' : p === 0 ? ', p < 1e-300' : `, p = ${api.formatQuantity(p, 3)}`;\n // A magnitude estimate is a statistic: three digits, marked approximate.\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ~${api.formatQuantity(r.ordersApart!, 3)} orders apart${strength}${basis}`);\n }\n }\n const subsumed = inert.filter((r) => r.subsuming);\n if (subsumed.length) {\n out(`\\n SUBSUMING (generic ≟ specialization — tautological, barred from promising):`);\n for (const r of subsumed) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}]`);\n }\n }\n if (contra.length) {\n out(`\\n CONTRADICTORY (the identification falsifies itself numerically):`);\n for (const r of contra) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} disagreeing node(s): ${r.inconsistentNodes.join(', ')}`);\n }\n }\n if (axisClash.length) {\n out(`\\n AXIS-CLASH (stated scale/force labels differ: a regime-label prior, not a physical test):`);\n for (const r of axisClash) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ${r.axisClashes.join('; ')}`);\n }\n }\n out('\\n (magnitude gate abstains where a representative value is unknown; weak priors on dimension.)');\n out(` (inspect one candidate: upt ground --source=${source} <a> <b>, with the same --anchor/--max-orders)`);\n return 0;\n}\n\nexport const command: Command = {\n name: 'discover',\n aliases: ['discovery'],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Vet quantity identifications and rank them promising, inert, or contradictory.',\n example: 'upt discover --source=canonical',\n group: 'discovery',\n run,\n};\n\nregisterCommand(command);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAmL/E,eAAO,MAAM,OAAO,EAAE,OASrB,CAAC"}
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAmL/E,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
@@ -167,6 +167,7 @@ async function run(ctx) {
167
167
  export const command = {
168
168
  name: 'eval',
169
169
  aliases: ['calc'],
170
+ positionals: { max: Infinity },
170
171
  flags: FLAGS,
171
172
  help: commandHelp(HELP, FLAGS),
172
173
  summary: 'Evaluate a scalar formula. A bare e is the elementary charge; Euler\'s number is exp(x).',
@@ -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';
@@ -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.',