universal-physics-tensor 0.29.0 → 0.30.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 (362) hide show
  1. package/bin/upt.mjs +9 -830
  2. package/dist/bridges/confrontation-coverage.d.ts +15 -0
  3. package/dist/bridges/confrontation-coverage.d.ts.map +1 -1
  4. package/dist/bridges/confrontation-coverage.js +6 -1
  5. package/dist/bridges/confrontation-coverage.js.map +1 -1
  6. package/dist/bridges/descriptor.d.ts +54 -0
  7. package/dist/bridges/descriptor.d.ts.map +1 -0
  8. package/dist/bridges/descriptor.js +67 -0
  9. package/dist/bridges/descriptor.js.map +1 -0
  10. package/dist/bridges/equations/_be-helpers.d.ts +1 -2
  11. package/dist/bridges/equations/_be-helpers.d.ts.map +1 -1
  12. package/dist/bridges/equations/_be-helpers.js +3 -3
  13. package/dist/bridges/equations/_be-helpers.js.map +1 -1
  14. package/dist/bridges/equations/be-20-vacuum-energy.d.ts +1 -1
  15. package/dist/bridges/equations/be-20-vacuum-energy.d.ts.map +1 -1
  16. package/dist/bridges/equations/be-20-vacuum-energy.js +5 -3
  17. package/dist/bridges/equations/be-20-vacuum-energy.js.map +1 -1
  18. package/dist/bridges/equations/be-21-kss-bound.d.ts +1 -1
  19. package/dist/bridges/equations/be-21-kss-bound.js +1 -1
  20. package/dist/bridges/equations/be-25-iit-phi.d.ts +12 -16
  21. package/dist/bridges/equations/be-25-iit-phi.d.ts.map +1 -1
  22. package/dist/bridges/equations/be-25-iit-phi.js +12 -16
  23. package/dist/bridges/equations/be-25-iit-phi.js.map +1 -1
  24. package/dist/bridges/equations/be-26-dna-tunneling.d.ts +6 -6
  25. package/dist/bridges/equations/be-26-dna-tunneling.js +6 -6
  26. package/dist/bridges/equations/be-40-composite-higgs.d.ts +9 -7
  27. package/dist/bridges/equations/be-40-composite-higgs.d.ts.map +1 -1
  28. package/dist/bridges/equations/be-40-composite-higgs.js +9 -7
  29. package/dist/bridges/equations/be-40-composite-higgs.js.map +1 -1
  30. package/dist/bridges/equations/be-50-wheeler-feynman.d.ts +0 -34
  31. package/dist/bridges/equations/be-50-wheeler-feynman.d.ts.map +1 -1
  32. package/dist/bridges/equations/be-50-wheeler-feynman.js +1 -1
  33. package/dist/bridges/equations/be-50-wheeler-feynman.js.map +1 -1
  34. package/dist/canonical/entries/_l1-build.d.ts +4 -5
  35. package/dist/canonical/entries/_l1-build.d.ts.map +1 -1
  36. package/dist/canonical/entries/_l1-build.js +3 -11
  37. package/dist/canonical/entries/_l1-build.js.map +1 -1
  38. package/dist/canonical/entries/atomic.d.ts +6 -5
  39. package/dist/canonical/entries/atomic.d.ts.map +1 -1
  40. package/dist/canonical/entries/atomic.js +61 -1
  41. package/dist/canonical/entries/atomic.js.map +1 -1
  42. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  43. package/dist/canonical/entries/dimensional-classics.js +1 -10
  44. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  45. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  46. package/dist/canonical/entries/electromagnetism.js +49 -1
  47. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  48. package/dist/canonical/entries/relativity.d.ts +0 -3
  49. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  50. package/dist/canonical/entries/relativity.js +51 -3
  51. package/dist/canonical/entries/relativity.js.map +1 -1
  52. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts +7 -4
  53. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  54. package/dist/canonical/entries/thermo-nuclear-cosmo.js +117 -1
  55. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  56. package/dist/canonical/linkage.d.ts +5 -0
  57. package/dist/canonical/linkage.d.ts.map +1 -1
  58. package/dist/canonical/linkage.js +54 -24
  59. package/dist/canonical/linkage.js.map +1 -1
  60. package/dist/canonical/registry.d.ts +6 -1
  61. package/dist/canonical/registry.d.ts.map +1 -1
  62. package/dist/canonical/registry.js +6 -5
  63. package/dist/canonical/registry.js.map +1 -1
  64. package/dist/cli/args.d.ts +23 -0
  65. package/dist/cli/args.d.ts.map +1 -0
  66. package/dist/cli/args.js +74 -0
  67. package/dist/cli/args.js.map +1 -0
  68. package/dist/cli/command.d.ts +46 -0
  69. package/dist/cli/command.d.ts.map +1 -0
  70. package/dist/cli/command.js +51 -0
  71. package/dist/cli/command.js.map +1 -0
  72. package/dist/cli/commands/_discovery-opts.d.ts +16 -0
  73. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -0
  74. package/dist/cli/commands/_discovery-opts.js +33 -0
  75. package/dist/cli/commands/_discovery-opts.js.map +1 -0
  76. package/dist/cli/commands/audit.d.ts +3 -0
  77. package/dist/cli/commands/audit.d.ts.map +1 -0
  78. package/dist/cli/commands/audit.js +71 -0
  79. package/dist/cli/commands/audit.js.map +1 -0
  80. package/dist/cli/commands/candidates.d.ts +3 -0
  81. package/dist/cli/commands/candidates.d.ts.map +1 -0
  82. package/dist/cli/commands/candidates.js +46 -0
  83. package/dist/cli/commands/candidates.js.map +1 -0
  84. package/dist/cli/commands/canonical.d.ts +3 -0
  85. package/dist/cli/commands/canonical.d.ts.map +1 -0
  86. package/dist/cli/commands/canonical.js +38 -0
  87. package/dist/cli/commands/canonical.js.map +1 -0
  88. package/dist/cli/commands/connectors.d.ts +3 -0
  89. package/dist/cli/commands/connectors.d.ts.map +1 -0
  90. package/dist/cli/commands/connectors.js +51 -0
  91. package/dist/cli/commands/connectors.js.map +1 -0
  92. package/dist/cli/commands/coverage.d.ts +3 -0
  93. package/dist/cli/commands/coverage.d.ts.map +1 -0
  94. package/dist/cli/commands/coverage.js +39 -0
  95. package/dist/cli/commands/coverage.js.map +1 -0
  96. package/dist/cli/commands/derive.d.ts +3 -0
  97. package/dist/cli/commands/derive.d.ts.map +1 -0
  98. package/dist/cli/commands/derive.js +143 -0
  99. package/dist/cli/commands/derive.js.map +1 -0
  100. package/dist/cli/commands/discover.d.ts +3 -0
  101. package/dist/cli/commands/discover.d.ts.map +1 -0
  102. package/dist/cli/commands/discover.js +137 -0
  103. package/dist/cli/commands/discover.js.map +1 -0
  104. package/dist/cli/commands/eval.d.ts +3 -0
  105. package/dist/cli/commands/eval.d.ts.map +1 -0
  106. package/dist/cli/commands/eval.js +64 -0
  107. package/dist/cli/commands/eval.js.map +1 -0
  108. package/dist/cli/commands/explain.d.ts +3 -0
  109. package/dist/cli/commands/explain.d.ts.map +1 -0
  110. package/dist/cli/commands/explain.js +81 -0
  111. package/dist/cli/commands/explain.js.map +1 -0
  112. package/dist/cli/commands/index.d.ts +21 -0
  113. package/dist/cli/commands/index.d.ts.map +1 -0
  114. package/dist/cli/commands/index.js +21 -0
  115. package/dist/cli/commands/index.js.map +1 -0
  116. package/dist/cli/commands/map.d.ts +3 -0
  117. package/dist/cli/commands/map.d.ts.map +1 -0
  118. package/dist/cli/commands/map.js +245 -0
  119. package/dist/cli/commands/map.js.map +1 -0
  120. package/dist/cli/commands/predict.d.ts +3 -0
  121. package/dist/cli/commands/predict.d.ts.map +1 -0
  122. package/dist/cli/commands/predict.js +54 -0
  123. package/dist/cli/commands/predict.js.map +1 -0
  124. package/dist/cli/commands/priority.d.ts +3 -0
  125. package/dist/cli/commands/priority.d.ts.map +1 -0
  126. package/dist/cli/commands/priority.js +63 -0
  127. package/dist/cli/commands/priority.js.map +1 -0
  128. package/dist/cli/commands/recover.d.ts +3 -0
  129. package/dist/cli/commands/recover.d.ts.map +1 -0
  130. package/dist/cli/commands/recover.js +51 -0
  131. package/dist/cli/commands/recover.js.map +1 -0
  132. package/dist/cli/commands/symbolic.d.ts +3 -0
  133. package/dist/cli/commands/symbolic.d.ts.map +1 -0
  134. package/dist/cli/commands/symbolic.js +110 -0
  135. package/dist/cli/commands/symbolic.js.map +1 -0
  136. package/dist/cli/errors.d.ts +14 -0
  137. package/dist/cli/errors.d.ts.map +1 -0
  138. package/dist/cli/errors.js +20 -0
  139. package/dist/cli/errors.js.map +1 -0
  140. package/dist/cli/graphs.d.ts +16 -0
  141. package/dist/cli/graphs.d.ts.map +1 -0
  142. package/dist/cli/graphs.js +30 -0
  143. package/dist/cli/graphs.js.map +1 -0
  144. package/dist/cli/main.d.ts +33 -0
  145. package/dist/cli/main.d.ts.map +1 -0
  146. package/dist/cli/main.js +219 -0
  147. package/dist/cli/main.js.map +1 -0
  148. package/dist/cli/output.d.ts +19 -0
  149. package/dist/cli/output.d.ts.map +1 -0
  150. package/dist/cli/output.js +57 -0
  151. package/dist/cli/output.js.map +1 -0
  152. package/dist/cli/version.d.ts +11 -0
  153. package/dist/cli/version.d.ts.map +1 -0
  154. package/dist/cli/version.js +16 -0
  155. package/dist/cli/version.js.map +1 -0
  156. package/dist/cli-api.d.ts +28 -0
  157. package/dist/cli-api.d.ts.map +1 -0
  158. package/dist/cli-api.js +31 -0
  159. package/dist/cli-api.js.map +1 -0
  160. package/dist/composition/bridge-analysis.d.ts +13 -15
  161. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  162. package/dist/composition/bridge-analysis.js +54 -39
  163. package/dist/composition/bridge-analysis.js.map +1 -1
  164. package/dist/composition/bridge-prediction.d.ts +4 -3
  165. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  166. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  167. package/dist/composition/compose-symbolic.js +12 -0
  168. package/dist/composition/compose-symbolic.js.map +1 -1
  169. package/dist/composition/discovery.d.ts.map +1 -1
  170. package/dist/composition/discovery.js +40 -12
  171. package/dist/composition/discovery.js.map +1 -1
  172. package/dist/composition/edges/_catalog-helpers.d.ts +34 -0
  173. package/dist/composition/edges/_catalog-helpers.d.ts.map +1 -0
  174. package/dist/composition/edges/_catalog-helpers.js +75 -0
  175. package/dist/composition/edges/_catalog-helpers.js.map +1 -0
  176. package/dist/composition/edges/calibration.d.ts.map +1 -1
  177. package/dist/composition/edges/calibration.js +1 -1
  178. package/dist/composition/edges/calibration.js.map +1 -1
  179. package/dist/composition/edges/catalog-condensed-matter.d.ts +64 -0
  180. package/dist/composition/edges/catalog-condensed-matter.d.ts.map +1 -0
  181. package/dist/composition/edges/catalog-condensed-matter.js +226 -0
  182. package/dist/composition/edges/catalog-condensed-matter.js.map +1 -0
  183. package/dist/composition/edges/catalog-fields.d.ts +68 -0
  184. package/dist/composition/edges/catalog-fields.d.ts.map +1 -0
  185. package/dist/composition/edges/catalog-fields.js +206 -0
  186. package/dist/composition/edges/catalog-fields.js.map +1 -0
  187. package/dist/composition/edges/catalog-full.d.ts +5 -263
  188. package/dist/composition/edges/catalog-full.d.ts.map +1 -1
  189. package/dist/composition/edges/catalog-full.js +9 -959
  190. package/dist/composition/edges/catalog-full.js.map +1 -1
  191. package/dist/composition/edges/catalog-gravitation-cosmology.d.ts +80 -0
  192. package/dist/composition/edges/catalog-gravitation-cosmology.d.ts.map +1 -0
  193. package/dist/composition/edges/catalog-gravitation-cosmology.js +245 -0
  194. package/dist/composition/edges/catalog-gravitation-cosmology.js.map +1 -0
  195. package/dist/composition/edges/catalog-quantum.d.ts +85 -0
  196. package/dist/composition/edges/catalog-quantum.d.ts.map +1 -0
  197. package/dist/composition/edges/catalog-quantum.js +252 -0
  198. package/dist/composition/edges/catalog-quantum.js.map +1 -0
  199. package/dist/composition/expr-simplify.d.ts +2 -6
  200. package/dist/composition/expr-simplify.d.ts.map +1 -1
  201. package/dist/composition/expr-simplify.js +1 -1
  202. package/dist/composition/expr-simplify.js.map +1 -1
  203. package/dist/composition/expr-subst.d.ts +2 -1
  204. package/dist/composition/expr-subst.d.ts.map +1 -1
  205. package/dist/composition/proposed-bridges.d.ts +4 -4
  206. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  207. package/dist/composition/proposed-bridges.js +1 -3
  208. package/dist/composition/proposed-bridges.js.map +1 -1
  209. package/dist/composition/quantities/_dims.d.ts +35 -0
  210. package/dist/composition/quantities/_dims.d.ts.map +1 -0
  211. package/dist/composition/quantities/_dims.js +45 -0
  212. package/dist/composition/quantities/_dims.js.map +1 -0
  213. package/dist/composition/quantities/common.d.ts +69 -0
  214. package/dist/composition/quantities/common.d.ts.map +1 -0
  215. package/dist/composition/quantities/common.js +200 -0
  216. package/dist/composition/quantities/common.js.map +1 -0
  217. package/dist/composition/quantities/condensed-matter.d.ts +63 -0
  218. package/dist/composition/quantities/condensed-matter.d.ts.map +1 -0
  219. package/dist/composition/quantities/condensed-matter.js +185 -0
  220. package/dist/composition/quantities/condensed-matter.js.map +1 -0
  221. package/dist/composition/quantities/fields.d.ts +59 -0
  222. package/dist/composition/quantities/fields.d.ts.map +1 -0
  223. package/dist/composition/quantities/fields.js +171 -0
  224. package/dist/composition/quantities/fields.js.map +1 -0
  225. package/dist/composition/quantities/gravitation-cosmology.d.ts +67 -0
  226. package/dist/composition/quantities/gravitation-cosmology.d.ts.map +1 -0
  227. package/dist/composition/quantities/gravitation-cosmology.js +199 -0
  228. package/dist/composition/quantities/gravitation-cosmology.js.map +1 -0
  229. package/dist/composition/quantities/quantum.d.ts +61 -0
  230. package/dist/composition/quantities/quantum.d.ts.map +1 -0
  231. package/dist/composition/quantities/quantum.js +178 -0
  232. package/dist/composition/quantities/quantum.js.map +1 -0
  233. package/dist/composition/quantities.d.ts +5 -263
  234. package/dist/composition/quantities.d.ts.map +1 -1
  235. package/dist/composition/quantities.js +7 -983
  236. package/dist/composition/quantities.js.map +1 -1
  237. package/dist/composition/retrodiction.d.ts.map +1 -1
  238. package/dist/composition/retrodiction.js +15 -3
  239. package/dist/composition/retrodiction.js.map +1 -1
  240. package/dist/composition/symbolic-constants.d.ts +3 -2
  241. package/dist/composition/symbolic-constants.d.ts.map +1 -1
  242. package/dist/core/tensor.d.ts +6 -0
  243. package/dist/core/tensor.d.ts.map +1 -1
  244. package/dist/core/tensor.js +6 -0
  245. package/dist/core/tensor.js.map +1 -1
  246. package/dist/diff/bridge-ast-gradient.js +1 -1
  247. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  248. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  249. package/dist/diff/bridge-gradient.js +15 -4
  250. package/dist/diff/bridge-gradient.js.map +1 -1
  251. package/dist/dimensional/algebra.d.ts +24 -0
  252. package/dist/dimensional/algebra.d.ts.map +1 -1
  253. package/dist/dimensional/algebra.js +31 -5
  254. package/dist/dimensional/algebra.js.map +1 -1
  255. package/dist/dimensional/ast-builders.d.ts +25 -0
  256. package/dist/dimensional/ast-builders.d.ts.map +1 -0
  257. package/dist/dimensional/ast-builders.js +27 -0
  258. package/dist/dimensional/ast-builders.js.map +1 -0
  259. package/dist/dimensional/ast-types.d.ts +193 -0
  260. package/dist/dimensional/ast-types.d.ts.map +1 -0
  261. package/dist/dimensional/ast-types.js +20 -0
  262. package/dist/dimensional/ast-types.js.map +1 -0
  263. package/dist/dimensional/buckingham.d.ts.map +1 -1
  264. package/dist/dimensional/buckingham.js +7 -4
  265. package/dist/dimensional/buckingham.js.map +1 -1
  266. package/dist/dimensional/connection-validators.d.ts +3 -38
  267. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  268. package/dist/dimensional/connection-validators.js.map +1 -1
  269. package/dist/dimensional/connection.d.ts.map +1 -1
  270. package/dist/dimensional/connection.js +9 -0
  271. package/dist/dimensional/connection.js.map +1 -1
  272. package/dist/dimensional/curvature-composite.d.ts +2 -1
  273. package/dist/dimensional/curvature-composite.d.ts.map +1 -1
  274. package/dist/dimensional/curvature-invariants.d.ts +2 -11
  275. package/dist/dimensional/curvature-invariants.d.ts.map +1 -1
  276. package/dist/dimensional/curvature-invariants.js.map +1 -1
  277. package/dist/dimensional/curvature.d.ts +5 -24
  278. package/dist/dimensional/curvature.d.ts.map +1 -1
  279. package/dist/dimensional/curvature.js.map +1 -1
  280. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  281. package/dist/dimensional/dimension-inference.js +11 -5
  282. package/dist/dimensional/dimension-inference.js.map +1 -1
  283. package/dist/dimensional/einstein-equation.d.ts +2 -11
  284. package/dist/dimensional/einstein-equation.d.ts.map +1 -1
  285. package/dist/dimensional/einstein-equation.js.map +1 -1
  286. package/dist/dimensional/killing-validators.d.ts +2 -19
  287. package/dist/dimensional/killing-validators.d.ts.map +1 -1
  288. package/dist/dimensional/killing-validators.js.map +1 -1
  289. package/dist/dimensional/metric-validators.d.ts +5 -39
  290. package/dist/dimensional/metric-validators.d.ts.map +1 -1
  291. package/dist/dimensional/metric-validators.js.map +1 -1
  292. package/dist/dimensional/stress-energy-validators.d.ts +2 -21
  293. package/dist/dimensional/stress-energy-validators.d.ts.map +1 -1
  294. package/dist/dimensional/stress-energy-validators.js.map +1 -1
  295. package/dist/dimensional/tensor.d.ts +2 -32
  296. package/dist/dimensional/tensor.d.ts.map +1 -1
  297. package/dist/dimensional/tensor.js.map +1 -1
  298. package/dist/dimensional/validator.d.ts +12 -58
  299. package/dist/dimensional/validator.d.ts.map +1 -1
  300. package/dist/dimensional/validator.js +12 -9
  301. package/dist/dimensional/validator.js.map +1 -1
  302. package/dist/dimensional/weyl-validators.d.ts +2 -18
  303. package/dist/dimensional/weyl-validators.d.ts.map +1 -1
  304. package/dist/dimensional/weyl-validators.js.map +1 -1
  305. package/dist/numerical/be37-covariant-eikonal.d.ts +12 -11
  306. package/dist/numerical/be37-covariant-eikonal.d.ts.map +1 -1
  307. package/dist/numerical/be37-covariant-eikonal.js +23 -8
  308. package/dist/numerical/be37-covariant-eikonal.js.map +1 -1
  309. package/dist/numerical/christoffel-flat.d.ts +10 -1
  310. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  311. package/dist/numerical/christoffel-flat.js +11 -2
  312. package/dist/numerical/christoffel-flat.js.map +1 -1
  313. package/dist/numerical/curvature-lowering-helpers.d.ts +4 -1
  314. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  315. package/dist/numerical/curvature-lowering-helpers.js +72 -14
  316. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  317. package/dist/numerical/engine-registry.d.ts.map +1 -1
  318. package/dist/numerical/engine-registry.js +11 -0
  319. package/dist/numerical/engine-registry.js.map +1 -1
  320. package/dist/numerical/float64-engine.d.ts.map +1 -1
  321. package/dist/numerical/float64-engine.js +20 -28
  322. package/dist/numerical/float64-engine.js.map +1 -1
  323. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  324. package/dist/numerical/formula-dimension.js +1 -1
  325. package/dist/numerical/formula-dimension.js.map +1 -1
  326. package/dist/numerical/formula.d.ts +0 -2
  327. package/dist/numerical/formula.d.ts.map +1 -1
  328. package/dist/numerical/formula.js +7 -3
  329. package/dist/numerical/formula.js.map +1 -1
  330. package/dist/numerical/geodesic-integrator.d.ts +6 -1
  331. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  332. package/dist/numerical/geodesic-integrator.js +14 -6
  333. package/dist/numerical/geodesic-integrator.js.map +1 -1
  334. package/dist/numerical/gl4-integrator.d.ts.map +1 -1
  335. package/dist/numerical/gl4-integrator.js +106 -43
  336. package/dist/numerical/gl4-integrator.js.map +1 -1
  337. package/dist/numerical/lowering.d.ts.map +1 -1
  338. package/dist/numerical/lowering.js +8 -5
  339. package/dist/numerical/lowering.js.map +1 -1
  340. package/dist/numerical/null-ic.d.ts +4 -3
  341. package/dist/numerical/null-ic.d.ts.map +1 -1
  342. package/dist/numerical/null-ic.js +4 -3
  343. package/dist/numerical/null-ic.js.map +1 -1
  344. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  345. package/dist/numerical/perihelion-finder.js +15 -1
  346. package/dist/numerical/perihelion-finder.js.map +1 -1
  347. package/dist/numerical/quadrature.d.ts +3 -2
  348. package/dist/numerical/quadrature.d.ts.map +1 -1
  349. package/dist/numerical/quadrature.js +8 -1
  350. package/dist/numerical/quadrature.js.map +1 -1
  351. package/dist/numerical/weyl-lowering.d.ts.map +1 -1
  352. package/dist/numerical/weyl-lowering.js +28 -2
  353. package/dist/numerical/weyl-lowering.js.map +1 -1
  354. package/package.json +3 -2
  355. package/dist/canonical/entries/l1-gravity-thermo.d.ts +0 -12
  356. package/dist/canonical/entries/l1-gravity-thermo.d.ts.map +0 -1
  357. package/dist/canonical/entries/l1-gravity-thermo.js +0 -165
  358. package/dist/canonical/entries/l1-gravity-thermo.js.map +0 -1
  359. package/dist/canonical/entries/l1-quantum-em.d.ts +0 -10
  360. package/dist/canonical/entries/l1-quantum-em.d.ts.map +0 -1
  361. package/dist/canonical/entries/l1-quantum-em.js +0 -141
  362. package/dist/canonical/entries/l1-quantum-em.js.map +0 -1
@@ -0,0 +1,137 @@
1
+ import { registerCommand } from '../command.js';
2
+ import { resolveGraph } from '../graphs.js';
3
+ import { emitJson } from '../output.js';
4
+ import { parseDiscoveryOpts } from './_discovery-opts.js';
5
+ const FLAGS = [
6
+ { name: '--source', valueStyle: 'attached' },
7
+ { name: '--max-orders', valueStyle: 'attached' },
8
+ { name: '--anchor', valueStyle: 'attached', repeatable: true },
9
+ { name: '--derive', valueStyle: 'none' },
10
+ { name: '--json', valueStyle: 'none' },
11
+ ];
12
+ const HELP = `upt discover [--source=catalog|canonical|both]
13
+ VET the link candidates through the inference suite: hypothesise
14
+ each identification a≡b and test whether it merges disconnected
15
+ physics, unlocks quantities, and stays numerically consistent.
16
+ Ranks promising / inert / contradictory.
17
+ --source=canonical runs the funnel on the standard-physics L-layer
18
+ ALONE (bridges excluded) — new candidates from established physics,
19
+ and a self-consistency check (expect 0 contradictory).
20
+ --derive emits, for each 'promising' identification, the ONE algebraic
21
+ relation it implies (monomial elimination) as an UNADJUDICATED, math-only
22
+ proposal — NOT a bridge (Part-VI §XXVII-B). Pairs with --source=canonical.
23
+ --max-orders=N tunes the magnitude-clash threshold (default 3); looser N
24
+ keeps more candidates 'promising', tighter N falsifies more as clashes.
25
+ --anchor=k=v[,k2=v2] overrides the numeric anchor (default mass=M_sun)
26
+ for the consistency/closure check. Both reshape the candidate pool that
27
+ --derive consumes.`;
28
+ const EPISTEMICS = '⚠ a REVIEW SURFACE: `promising` means "worth a physicist\'s minute", not "true".\n' +
29
+ ' Each candidate hypothesises an identification a≡b and tests its consequences.';
30
+ // ── discover --derive (identity-consequence proposals) ────────────────────
31
+ function deriveReport(api, ranked, label, out) {
32
+ const proposals = api.deriveProposedBridges(ranked);
33
+ out(`\nDerived identity-consequence PROPOSALS — UNADJUDICATED, math-only [source: ${label}]`);
34
+ out('⚠ Each is the ALGEBRAIC CONSEQUENCE of an unadjudicated identification — NOT a new');
35
+ out(' relation and NOT a bridge. No mechanism asserted. Promotion to the catalog needs');
36
+ out(' adversarial + literature review (Part-VI §XXVII-B). The enumerator proposes; humans dispose.\n');
37
+ if (!proposals.length) {
38
+ out(' no admissible proposal (need two fully-quantitative, monomial canonical targets).');
39
+ return;
40
+ }
41
+ for (const p of proposals) {
42
+ let approx = '';
43
+ try {
44
+ const vals = Object.fromEntries((p.governing || []).map((g) => [g.name, 300]));
45
+ const at = (p.governing || []).map((g) => `${g.name}=300`).join(', ');
46
+ approx = ` ≈ ${p.evaluate(vals).toExponential(2)}${at ? ` (${at})` : ''}`;
47
+ }
48
+ catch {
49
+ approx = '';
50
+ }
51
+ out(` ${p.id}`);
52
+ out(` ${p.formulaLatex} ${p.dimensionalSignature}${approx}`);
53
+ out(` from: ${p.derivedFrom.identification.a} ≟ ${p.derivedFrom.identification.b}` +
54
+ ` (${p.derivedFrom.sourceEquationIds[0]} = ${p.derivedFrom.sourceEquationIds[1]}); solved for ${p.derivedFrom.solvedFor}`);
55
+ if (p.alsoDerivableFrom && p.alsoDerivableFrom.length) {
56
+ out(` also derivable from: ${p.alsoDerivableFrom.join('; ')}`);
57
+ }
58
+ }
59
+ out('');
60
+ }
61
+ async function run(ctx) {
62
+ const { args, api, out } = ctx;
63
+ const { graph, label, source } = resolveGraph(api, args.flags);
64
+ const opts = parseDiscoveryOpts(args.flags);
65
+ const ranked = api.rankDiscoveries(graph, opts);
66
+ const isDerive = args.flags.has('derive');
67
+ if (args.flags.has('json')) {
68
+ const result = isDerive ? api.deriveProposedBridges(ranked) : ranked;
69
+ emitJson({ command: 'discover', source, options: opts, epistemics: EPISTEMICS, result }, ctx.write);
70
+ return 0;
71
+ }
72
+ if (Object.keys(opts).length) {
73
+ const bits = [];
74
+ if (opts.maxOrdersOfMagnitude !== undefined)
75
+ bits.push(`max-orders=${opts.maxOrdersOfMagnitude}`);
76
+ if (opts.groundTruth) {
77
+ bits.push(`anchor={${Object.entries(opts.groundTruth).map(([k, v]) => `${k}=${v}`).join(', ')}}`);
78
+ }
79
+ out(` [discovery options: ${bits.join('; ')}]`);
80
+ }
81
+ if (isDerive) {
82
+ deriveReport(api, ranked, label, out);
83
+ return 0;
84
+ }
85
+ const by = (v) => ranked.filter((r) => r.verdict === v);
86
+ const promising = by('promising');
87
+ const inert = by('inert');
88
+ const contra = by('contradictory');
89
+ const clash = by('magnitude-clash');
90
+ out(`\nDiscovery — link candidates VETTED through the inference suite [source: ${label}]`);
91
+ out('⚠ a REVIEW SURFACE: `promising` means "worth a physicist\'s minute", not "true".');
92
+ out(' Each candidate hypothesises an identification a≡b and tests its consequences.\n');
93
+ out(` funnel: ${ranked.length} candidates → ${promising.length} promising ` +
94
+ `· ${inert.length} inert · ${clash.length} magnitude-clash ` +
95
+ `· ${contra.length} contradictory (falsified)\n`);
96
+ if (promising.length) {
97
+ out(' PROMISING (merges disconnected physics, unlocks quantities, stays consistent):');
98
+ for (const r of promising) {
99
+ out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}] score ${r.score}`);
100
+ out(` unlocks: ${r.unlocksFromAnchor.join(', ') || '—'}`);
101
+ }
102
+ }
103
+ else {
104
+ out(' no candidate is `promising` from the default {mass} anchor.');
105
+ }
106
+ if (clash.length) {
107
+ out(`\n MAGNITUDE-CLASH (representative values differ by > N orders — a falsifier):`);
108
+ for (const r of clash) {
109
+ const basis = r.magnitudeUsedAnchor ? ' (anchor-derived)' : '';
110
+ out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ~${r.ordersApart.toFixed(1)} orders apart${basis}`);
111
+ }
112
+ }
113
+ const subsumed = inert.filter((r) => r.subsuming);
114
+ if (subsumed.length) {
115
+ out(`\n SUBSUMING (generic ≟ specialization — tautological, barred from promising):`);
116
+ for (const r of subsumed) {
117
+ out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}]`);
118
+ }
119
+ }
120
+ if (contra.length) {
121
+ out(`\n CONTRADICTORY (the identification falsifies itself numerically):`);
122
+ for (const r of contra) {
123
+ out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} disagreeing node(s): ${r.inconsistentNodes.join(', ')}`);
124
+ }
125
+ }
126
+ out('\n (magnitude gate abstains where a representative value is unknown; weak priors on dimension.)');
127
+ return 0;
128
+ }
129
+ export const command = {
130
+ name: 'discover',
131
+ aliases: ['discovery'],
132
+ flags: FLAGS,
133
+ help: HELP,
134
+ run,
135
+ };
136
+ registerCommand(command);
137
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Command } from '../command.js';
2
+ export declare const command: Command;
3
+ //# sourceMappingURL=eval.d.ts.map
@@ -0,0 +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;AAiE/E,eAAO,MAAM,OAAO,EAAE,OAMrB,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { registerCommand } from '../command.js';
2
+ import { emitJson } from '../output.js';
3
+ import { UsageError } from '../errors.js';
4
+ const FLAGS = [
5
+ { name: '--debug', valueStyle: 'none' },
6
+ { name: '--json', valueStyle: 'none' },
7
+ ];
8
+ const HELP = `upt eval "<formula>" name=value ...
9
+ Evaluate YOUR OWN scalar formula (safe — arithmetic only). Knows
10
+ pi/tau and sqrt/exp/ln/sin/...; any other name must be supplied.
11
+ e.g. upt eval "hbar*c^3/(8*pi*G*M*k_B)" hbar=1.054571817e-34 \\
12
+ c=299792458 G=6.6743e-11 M=1.989e30 k_B=1.380649e-23`;
13
+ async function run(ctx) {
14
+ const { args, api, out, err } = ctx;
15
+ const debug = args.flags.has('debug');
16
+ const isJson = args.flags.has('json');
17
+ const positionals = args.positionals;
18
+ const expr = positionals[0];
19
+ if (!expr) {
20
+ throw new UsageError('upt eval needs a formula, e.g. upt eval "a*b^2" a=2 b=3');
21
+ }
22
+ const parser = await api.getFormulaParser();
23
+ if (debug)
24
+ err(`[parser: ${await api.getFormulaParserKind()}]`);
25
+ let cf;
26
+ try {
27
+ cf = parser.parse(expr);
28
+ }
29
+ catch (e) {
30
+ throw new UsageError('parse error: ' + e.message);
31
+ }
32
+ const scope = {};
33
+ for (const a of positionals.slice(1)) {
34
+ const i = a.indexOf('=');
35
+ if (i > 0)
36
+ scope[a.slice(0, i)] = Number(a.slice(i + 1));
37
+ }
38
+ const missing = cf.variables.filter((v) => !(v in scope));
39
+ if (missing.length) {
40
+ throw new UsageError(`missing values for: ${missing.join(', ')} (free variables: ${cf.variables.join(', ') || 'none'})`);
41
+ }
42
+ let value;
43
+ try {
44
+ value = cf.evaluate(scope);
45
+ }
46
+ catch (e) {
47
+ throw new UsageError(e.message);
48
+ }
49
+ if (isJson) {
50
+ emitJson({ command: 'eval', result: { value } }, ctx.write);
51
+ return 0;
52
+ }
53
+ out(String(value));
54
+ return 0;
55
+ }
56
+ export const command = {
57
+ name: 'eval',
58
+ aliases: ['calc'],
59
+ flags: FLAGS,
60
+ help: HELP,
61
+ run,
62
+ };
63
+ registerCommand(command);
64
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Command } from '../command.js';
2
+ export declare const command: Command;
3
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAeA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAoF/E,eAAO,MAAM,OAAO,EAAE,OAMrB,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { registerCommand } from '../command.js';
2
+ import { resolveGraph } from '../graphs.js';
3
+ import { emitJson } from '../output.js';
4
+ import { UsageError } from '../errors.js';
5
+ const FLAGS = [
6
+ { name: '--source', valueStyle: 'attached' },
7
+ { name: '--json', valueStyle: 'none' },
8
+ ];
9
+ const HELP = `upt explain <quantity> [name=value | name] ...
10
+ Explain how the graph determines a quantity: the identifiability
11
+ verdict, recovered value, derivation chains, and whether the inputs
12
+ are dimensionally sufficient.
13
+ e.g. upt explain hawking-temperature mass=1.989e30`;
14
+ /**
15
+ * Two modes, never mixed: bare names (structural analysis) OR name=value
16
+ * (adds value recovery). Malformed inputs are rejected with a `UsageError`
17
+ * rather than silently coerced — `mass=abc`→dropped, `mass=`→0,
18
+ * `mass=1e500`→∞, and a bare name alongside a valued one were all silent
19
+ * wrong-physics footguns.
20
+ */
21
+ function parseKnown(args) {
22
+ const valued = args.filter((a) => a.includes('='));
23
+ if (valued.length === 0)
24
+ return [...args]; // names mode
25
+ if (valued.length !== args.length) {
26
+ const bare = args.filter((a) => !a.includes('=')).join(', ');
27
+ throw new UsageError(`upt: cannot mix bare names (${bare}) with name=value inputs. `
28
+ + 'Use all names (structural) or all name=value (with recovery). See `upt help`.');
29
+ }
30
+ const values = {};
31
+ for (const a of args) {
32
+ const eq = a.indexOf('=');
33
+ const name = a.slice(0, eq);
34
+ const raw = a.slice(eq + 1);
35
+ const num = Number(raw);
36
+ if (raw === '' || !Number.isFinite(num)) {
37
+ throw new UsageError(`upt: '${a}' is not a finite number. Expected ${name}=<number>. See \`upt help\`.`);
38
+ }
39
+ values[name] = num;
40
+ }
41
+ return values;
42
+ }
43
+ async function run(ctx) {
44
+ const { args, api, out } = ctx;
45
+ const { graph, source } = resolveGraph(api, args.flags);
46
+ const [target, ...rest] = args.positionals;
47
+ if (!target) {
48
+ throw new UsageError('upt explain needs a quantity name. See `upt help`.');
49
+ }
50
+ const known = parseKnown(rest);
51
+ const x = api.explainQuantity(graph, target, known);
52
+ if (args.flags.has('json')) {
53
+ emitJson({ command: 'explain', source, result: x }, ctx.write);
54
+ return 0;
55
+ }
56
+ out(`\n● ${target}`);
57
+ out(` ${x.summary}`);
58
+ if (x.derivations.length) {
59
+ out(' derivations:');
60
+ for (const d of x.derivations) {
61
+ const val = d.value !== undefined ? ` = ${d.value.toExponential(4)}` : '';
62
+ const chain = d.leafInputs.join(',') !== d.sources.join(',') ? ` [from leaves: ${d.leafInputs.join(', ')}]` : '';
63
+ out(` - ${d.edge} (${d.label})${val}${chain}`);
64
+ if (d.dimensionalForm)
65
+ out(` ${d.dimensionalForm.formula}`);
66
+ }
67
+ }
68
+ if (x.blockingFrontier.length) {
69
+ out(` to determine it, also supply: ${x.blockingFrontier.join(', ')}`);
70
+ }
71
+ return 0;
72
+ }
73
+ export const command = {
74
+ name: 'explain',
75
+ aliases: [],
76
+ flags: FLAGS,
77
+ help: HELP,
78
+ run,
79
+ };
80
+ registerCommand(command);
81
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Side-effect barrel: importing this module registers every ported CLI
3
+ * command (each command module calls `registerCommand` at load time).
4
+ * `main.ts` imports this once so `runCli`'s dispatch body never needs to
5
+ * change as commands are added.
6
+ */
7
+ import './priority.js';
8
+ import './audit.js';
9
+ import './coverage.js';
10
+ import './canonical.js';
11
+ import './recover.js';
12
+ import './connectors.js';
13
+ import './predict.js';
14
+ import './candidates.js';
15
+ import './explain.js';
16
+ import './symbolic.js';
17
+ import './eval.js';
18
+ import './derive.js';
19
+ import './map.js';
20
+ import './discover.js';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,eAAe,CAAC;AACvB,OAAO,YAAY,CAAC;AACpB,OAAO,eAAe,CAAC;AACvB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,WAAW,CAAC;AACnB,OAAO,aAAa,CAAC;AACrB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Side-effect barrel: importing this module registers every ported CLI
3
+ * command (each command module calls `registerCommand` at load time).
4
+ * `main.ts` imports this once so `runCli`'s dispatch body never needs to
5
+ * change as commands are added.
6
+ */
7
+ import './priority.js';
8
+ import './audit.js';
9
+ import './coverage.js';
10
+ import './canonical.js';
11
+ import './recover.js';
12
+ import './connectors.js';
13
+ import './predict.js';
14
+ import './candidates.js';
15
+ import './explain.js';
16
+ import './symbolic.js';
17
+ import './eval.js';
18
+ import './derive.js';
19
+ import './map.js';
20
+ import './discover.js';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,eAAe,CAAC;AACvB,OAAO,YAAY,CAAC;AACpB,OAAO,eAAe,CAAC;AACvB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,WAAW,CAAC;AACnB,OAAO,aAAa,CAAC;AACrB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Command } from '../command.js';
2
+ export declare const command: Command;
3
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/map.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAyP/E,eAAO,MAAM,OAAO,EAAE,OAMrB,CAAC"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * `upt map` — how the equations LINK: the text linkage map, the visual
3
+ * (mermaid/dot/svg) physics map, and the `--equation` user-junction
4
+ * injection. Transposed verbatim from bin/upt.mjs's `proposedJunctions()`/
5
+ * `analyzeEquation()`/`printEquationReport()`/`mapCmd()` (lines 387-545),
6
+ * plus `--json` and the `--json`/`--format` conflict guard.
7
+ *
8
+ * `parseEquationFlag` is REPLACED by the `either`-style `--equation` FlagSpec
9
+ * (`args.ts` already extracts `--equation=...` or `--equation "..."` into
10
+ * `flags.get('equation')`). `parseDiscoveryOpts` moved to `_discovery-opts.ts`
11
+ * — the old CLI's `proposedJunctions` fed `map`'s raw args through it
12
+ * (bin/upt.mjs line 392), so `--proposed` shares `discover`'s
13
+ * `--max-orders`/`--anchor` validation here too.
14
+ */
15
+ import { writeFileSync } from 'node:fs';
16
+ import { registerCommand } from '../command.js';
17
+ import { resolveGraph } from '../graphs.js';
18
+ import { emitJson } from '../output.js';
19
+ import { UsageError, CliError } from '../errors.js';
20
+ import { parseDiscoveryOpts } from './_discovery-opts.js';
21
+ const FLAGS = [
22
+ { name: '--source', valueStyle: 'attached' },
23
+ { name: '--format', valueStyle: 'attached' },
24
+ { name: '--out', valueStyle: 'attached' },
25
+ { name: '--max-orders', valueStyle: 'attached' },
26
+ { name: '--anchor', valueStyle: 'attached', repeatable: true },
27
+ { name: '--proposed', valueStyle: 'none' },
28
+ // optionalValue: a bare trailing --equation stores '' so the empty-check in
29
+ // run() owns the diagnostic (old-CLI fidelity: bin/upt.mjs did `a[i+1] ?? ''`
30
+ // and let mapCmd emit `upt: --equation requires "TARGET = EXPR"`, exit 2).
31
+ { name: '--equation', valueStyle: 'either', optionalValue: true },
32
+ { name: '--json', valueStyle: 'none' },
33
+ ];
34
+ const HELP = `upt map [--source=catalog|canonical|both] [--format=text|mermaid|dot|svg]
35
+ [--proposed] [--out=PATH] [--equation "TARGET = EXPR"]
36
+ Map how the equations LINK: connected components (clusters) of the
37
+ graph by shared quantities, the anchored core, the link hubs, and
38
+ the isolated tail.
39
+ --format=mermaid|dot|svg emits the VISUAL map (quantities = nodes,
40
+ equations = junctions colored by status, one subgraph per component).
41
+ text (default) is the unchanged linkage printout. svg renders the dot
42
+ layout via the optional @viz-js/viz peer (npm i @viz-js/viz; or pipe
43
+ dot through "dot -Tsvg"). --proposed overlays the unadjudicated
44
+ identity-consequence relations (gray dashed). --out writes to a file
45
+ (default stdout).
46
+ --equation "TARGET = EXPR" injects YOUR OWN equation as a violet 'user'
47
+ node and reports where it lands (which cluster / shared quantities), with
48
+ a "did you mean?" hint for names that miss the catalog vocabulary. Use
49
+ underscores for multi-word quantities (photon_energy -> photon-energy).
50
+ e.g. upt map --equation "period = 2*pi*sqrt(length/gravity)"`;
51
+ // Convert the derived identity-consequence proposals into viz junctions
52
+ // (gray-dashed, status 'proposed'). The library never imports proposed-bridges;
53
+ // the CLI does the conversion, keeping the epistemic firewall intact.
54
+ function proposedJunctions(api, graph, flags) {
55
+ const opts = parseDiscoveryOpts(flags);
56
+ const ranked = api.rankDiscoveries(graph, opts);
57
+ return api.deriveProposedBridges(ranked).map((p) => ({
58
+ id: p.id,
59
+ label: p.id,
60
+ status: 'proposed',
61
+ sources: (p.governing || []).map((g) => g.name),
62
+ target: p.target.name,
63
+ }));
64
+ }
65
+ // Build the catalog quantity name→dimension map for the chosen graph, then run
66
+ // the (testable) library analysis: parse + dimensional validation + "did you
67
+ // mean?" hints. The library owns the physics (constants' dimensions, inference);
68
+ // the CLI only formats.
69
+ async function analyzeEquation(api, equation, graph) {
70
+ const catalogDims = new Map();
71
+ for (const e of graph) {
72
+ for (const q of [...e.sources, e.target])
73
+ catalogDims.set(q.name, q.dim);
74
+ }
75
+ return api.analyzeUserEquation(equation, catalogDims);
76
+ }
77
+ // Print the dimensional verdict, where the equation landed, and any hints.
78
+ // `out` is ctx.out (text mode → stdout) or ctx.err (visual → stderr).
79
+ function printEquationReport(api, model, user, out) {
80
+ out('');
81
+ if (user.consistent === true) {
82
+ out(` ✓ dimensionally consistent: ${api.format(user.rhsDimension)}`);
83
+ }
84
+ else if (user.consistent === false) {
85
+ out(` ⚠ dimensional MISMATCH: RHS is ${api.format(user.rhsDimension)} but the target is ${api.format(user.targetDimension)}`);
86
+ }
87
+ else if (user.rhsDimension) {
88
+ out(` · RHS dimension: ${api.format(user.rhsDimension)} (target not in the catalog, so no comparison)`);
89
+ }
90
+ const L = api.equationLanding(model, 'user-equation');
91
+ if (L.isolated) {
92
+ out(' ⚠ your equation is ISOLATED — it shares no quantity with this graph.');
93
+ }
94
+ else {
95
+ out(` ● your equation joins ${L.anchored ? 'the ANCHORED cluster' : 'a cluster'} of ${L.clusterSize} via {${L.sharedQuantities.join(', ')}}`);
96
+ if (L.connectedJunctionIds.length)
97
+ out(` connects to: ${L.connectedJunctionIds.join(', ')}`);
98
+ }
99
+ for (const h of user.hints ?? []) {
100
+ if (!h.suggestions.length) {
101
+ out(` ⚠ '${h.name}' did not match a catalog quantity (run \`upt canonical\` for the vocabulary).`);
102
+ }
103
+ else if (h.byDimension) {
104
+ out(` ⚠ '${h.name}' is unknown — by its inferred dimension, did you mean: ${h.suggestions.join(', ')}?`);
105
+ }
106
+ else {
107
+ out(` ⚠ '${h.name}' did not match a catalog quantity — did you mean: ${h.suggestions.join(', ')}?`);
108
+ }
109
+ }
110
+ }
111
+ async function run(ctx) {
112
+ const { args, api, out, err, write } = ctx;
113
+ const { graph, label, source } = resolveGraph(api, args.flags);
114
+ const fmtValues = args.flags.get('format');
115
+ const fmt = fmtValues && fmtValues.length > 0 ? fmtValues[fmtValues.length - 1] : 'text';
116
+ const isJson = args.flags.has('json');
117
+ if (isJson && fmt !== 'text') {
118
+ throw new UsageError('upt: pick one output form: --json or --format');
119
+ }
120
+ // --equation injects a user-supplied "TARGET = EXPR" as a 'user' junction.
121
+ let user = null;
122
+ const equationValues = args.flags.get('equation');
123
+ const equation = equationValues && equationValues.length > 0 ? equationValues[equationValues.length - 1] : null;
124
+ if (equation != null) {
125
+ if (!equation.trim()) {
126
+ throw new UsageError('upt: --equation requires "TARGET = EXPR"');
127
+ }
128
+ try {
129
+ user = await analyzeEquation(api, equation, graph); // throws UserEquationError on malformed structure
130
+ }
131
+ catch (e) {
132
+ throw new UsageError('upt: ' + (e && e.message ? e.message : String(e)));
133
+ }
134
+ if (user.parseError) {
135
+ throw new UsageError('upt: ' + user.parseError); // dimensionally malformed RHS
136
+ }
137
+ }
138
+ const overlay = (extra) => [
139
+ ...(args.flags.has('proposed') ? proposedJunctions(api, graph, args.flags) : []),
140
+ ...extra,
141
+ ];
142
+ if (isJson) {
143
+ const linkage = api.linkageMap(graph);
144
+ let landing;
145
+ let userEquation;
146
+ if (user) {
147
+ const model = api.buildVizModel(graph, {
148
+ title: `UPT physics map — ${label}`,
149
+ extraJunctions: overlay([user.junction]),
150
+ });
151
+ landing = api.equationLanding(model, 'user-equation');
152
+ userEquation = {
153
+ equation: user.junction.label,
154
+ consistent: user.consistent,
155
+ rhsDimension: user.rhsDimension,
156
+ targetDimension: user.targetDimension,
157
+ hints: user.hints,
158
+ };
159
+ }
160
+ emitJson({
161
+ command: 'map',
162
+ source,
163
+ result: { linkage, ...(user ? { landing, userEquation } : {}) },
164
+ }, write);
165
+ return 0;
166
+ }
167
+ if (fmt === 'mermaid' || fmt === 'dot' || fmt === 'svg') {
168
+ const extraJunctions = overlay(user ? [user.junction] : []);
169
+ const model = api.buildVizModel(graph, {
170
+ title: `UPT physics map — ${label}`,
171
+ extraJunctions,
172
+ });
173
+ // svg is the dot layout rendered by the optional @viz-js/viz peer.
174
+ let src;
175
+ if (fmt === 'svg') {
176
+ try {
177
+ src = await api.renderDotToSvg(model.toDot());
178
+ }
179
+ catch (e) {
180
+ throw new CliError(e && e.message ? e.message : String(e));
181
+ }
182
+ }
183
+ else {
184
+ src = fmt === 'mermaid' ? model.toMermaid() : model.toDot();
185
+ }
186
+ const outValues = args.flags.get('out');
187
+ if (outValues && outValues.length > 0) {
188
+ const path = outValues[outValues.length - 1];
189
+ if (!path) {
190
+ throw new CliError('upt: --out= requires a non-empty PATH');
191
+ }
192
+ try {
193
+ writeFileSync(path, src);
194
+ }
195
+ catch (e) {
196
+ throw new CliError(e.message);
197
+ }
198
+ err(`upt: wrote ${fmt} (${model.junctions.length} junctions, ${model.clusters.length} clusters) to ${path}`);
199
+ }
200
+ else {
201
+ write(src);
202
+ }
203
+ // Landing report goes to stderr so stdout/--out stays pure diagram source.
204
+ if (user)
205
+ printEquationReport(api, model, user, err);
206
+ return 0;
207
+ }
208
+ if (fmt !== 'text') {
209
+ throw new CliError(`upt: unknown --format='${fmt}' (expected: text | mermaid | dot | svg)`);
210
+ }
211
+ const m = api.linkageMap(graph);
212
+ const mix = (s) => Object.entries(s)
213
+ .map(([k, v]) => `${v} ${k}`)
214
+ .join(', ');
215
+ out(`\nLinkage map — how the equations connect via shared quantities [source: ${label}]`);
216
+ out(`(${m.componentCount} components over ${graph.length} edges; ${m.compositions} compose into chains)\n`);
217
+ for (const c of m.clusters.filter((x) => x.size > 1)) {
218
+ out(` ● cluster of ${c.size}${c.anchored ? ' [ANCHORED to known physics]' : ''}`);
219
+ out(` edges: ${c.edges.join(', ')}`);
220
+ out(` status: ${mix(c.statusMix)}`);
221
+ out(` link hubs: ${c.hubs.join(', ')}\n`);
222
+ }
223
+ out(` ○ isolated (${m.isolated.length}) — share no quantity with any other edge:`);
224
+ out(` ${m.isolated.join(', ')}`);
225
+ out('\n (a structural map — shared-quantity connectivity, NOT a credibility signal)');
226
+ // --equation: where does the user's equation land in this graph?
227
+ if (user) {
228
+ const model = api.buildVizModel(graph, {
229
+ title: `UPT physics map — ${label}`,
230
+ extraJunctions: overlay([user.junction]),
231
+ });
232
+ out(`\nYour equation: ${user.junction.label}`);
233
+ printEquationReport(api, model, user, out);
234
+ }
235
+ return 0;
236
+ }
237
+ export const command = {
238
+ name: 'map',
239
+ aliases: ['linkage'],
240
+ flags: FLAGS,
241
+ help: HELP,
242
+ run,
243
+ };
244
+ registerCommand(command);
245
+ //# sourceMappingURL=map.js.map