universal-physics-tensor 8.0.0 → 10.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 (916) hide show
  1. package/README.md +26 -21
  2. package/data/atlas/atlas.json +75 -64
  3. package/data/atlas/atlas.jsonld +1 -1
  4. package/data/atlas/diffusion.json +23 -22
  5. package/data/atlas/oscillators.json +21 -16
  6. package/data/atlas/waves.json +33 -28
  7. package/data/bridge-catalog.json +1356 -1791
  8. package/data/bridge-catalog.schema.json +789 -46
  9. package/data/quantities.json +280 -234
  10. package/data/quantities.schema.json +52 -0
  11. package/data/schemas/atlas-record.v0.json +184 -46
  12. package/data/units.json +1178 -0
  13. package/data/units.schema.json +124 -0
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +14 -3
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/association.d.ts +1 -1
  18. package/dist/atlas/association.js.map +1 -1
  19. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
  20. package/dist/atlas/benchmark/backend-shapes.js +5 -1
  21. package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
  22. package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
  23. package/dist/atlas/benchmark/baselines.js +8 -0
  24. package/dist/atlas/benchmark/baselines.js.map +1 -1
  25. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +3 -2
  26. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  27. package/dist/atlas/benchmark/hybrid-retrieval.js +16 -12
  28. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  29. package/dist/atlas/benchmark/leakage.js.map +1 -1
  30. package/dist/atlas/benchmark/loader.js.map +1 -1
  31. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
  32. package/dist/atlas/benchmark/run-atlas.js +14 -2
  33. package/dist/atlas/benchmark/run-atlas.js.map +1 -1
  34. package/dist/atlas/benchmark/stats.d.ts +1 -1
  35. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  36. package/dist/atlas/benchmark/stats.js +1 -1
  37. package/dist/atlas/benchmark/stats.js.map +1 -1
  38. package/dist/atlas/benchmark/study.js.map +1 -1
  39. package/dist/atlas/benchmark/types.js.map +1 -1
  40. package/dist/atlas/bridge-record.d.ts +4 -4
  41. package/dist/atlas/bridge-record.d.ts.map +1 -1
  42. package/dist/atlas/bridge-record.js +6 -6
  43. package/dist/atlas/bridge-record.js.map +1 -1
  44. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  45. package/dist/atlas/chain-pipeline.d.ts +0 -11
  46. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  47. package/dist/atlas/chain-pipeline.js +5 -16
  48. package/dist/atlas/chain-pipeline.js.map +1 -1
  49. package/dist/atlas/composition-table.js.map +1 -1
  50. package/dist/atlas/conventions.js.map +1 -1
  51. package/dist/atlas/coverage.d.ts +2 -2
  52. package/dist/atlas/coverage.js.map +1 -1
  53. package/dist/atlas/derivation.js.map +1 -1
  54. package/dist/atlas/derive-evidence.d.ts +6 -4
  55. package/dist/atlas/derive-evidence.d.ts.map +1 -1
  56. package/dist/atlas/derive-evidence.js +7 -2
  57. package/dist/atlas/derive-evidence.js.map +1 -1
  58. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  59. package/dist/atlas/diffusion/bridges-closure.js +0 -5
  60. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  61. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  62. package/dist/atlas/diffusion/bridges.js +0 -3
  63. package/dist/atlas/diffusion/bridges.js.map +1 -1
  64. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  65. package/dist/atlas/diffusion/index.d.ts +1 -1
  66. package/dist/atlas/diffusion/index.d.ts.map +1 -1
  67. package/dist/atlas/diffusion/index.js.map +1 -1
  68. package/dist/atlas/diffusion/models.js.map +1 -1
  69. package/dist/atlas/diffusion/numerics.js.map +1 -1
  70. package/dist/atlas/error-algebra.d.ts +6 -0
  71. package/dist/atlas/error-algebra.d.ts.map +1 -1
  72. package/dist/atlas/error-algebra.js +26 -0
  73. package/dist/atlas/error-algebra.js.map +1 -1
  74. package/dist/atlas/export.d.ts +18 -2
  75. package/dist/atlas/export.d.ts.map +1 -1
  76. package/dist/atlas/export.js +9 -3
  77. package/dist/atlas/export.js.map +1 -1
  78. package/dist/atlas/families.d.ts +19 -2
  79. package/dist/atlas/families.d.ts.map +1 -1
  80. package/dist/atlas/families.js +26 -3
  81. package/dist/atlas/families.js.map +1 -1
  82. package/dist/atlas/family.d.ts +27 -0
  83. package/dist/atlas/family.d.ts.map +1 -0
  84. package/dist/atlas/family.js +12 -0
  85. package/dist/atlas/family.js.map +1 -0
  86. package/dist/atlas/index.d.ts +3 -2
  87. package/dist/atlas/index.d.ts.map +1 -1
  88. package/dist/atlas/index.js +2 -1
  89. package/dist/atlas/index.js.map +1 -1
  90. package/dist/atlas/link-prediction.d.ts +1 -1
  91. package/dist/atlas/link-prediction.d.ts.map +1 -1
  92. package/dist/atlas/link-prediction.js.map +1 -1
  93. package/dist/atlas/model.js.map +1 -1
  94. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  95. package/dist/atlas/oscillators/bridges-coarse.js +0 -1
  96. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  97. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  98. package/dist/atlas/oscillators/bridges-exact.js +0 -3
  99. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  100. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  101. package/dist/atlas/oscillators/bridges-limits.js +0 -2
  102. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  103. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  104. package/dist/atlas/oscillators/index.d.ts +1 -16
  105. package/dist/atlas/oscillators/index.d.ts.map +1 -1
  106. package/dist/atlas/oscillators/index.js.map +1 -1
  107. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  108. package/dist/atlas/oscillators/models.js.map +1 -1
  109. package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
  110. package/dist/atlas/oscillators/norm-transport.js.map +1 -1
  111. package/dist/atlas/oscillators/norms.js.map +1 -1
  112. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  113. package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
  114. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  115. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  116. package/dist/atlas/oscillators/rejections.js.map +1 -1
  117. package/dist/atlas/path-bound.js.map +1 -1
  118. package/dist/atlas/physjs-entries.generated.d.ts +1601 -220
  119. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  120. package/dist/atlas/physjs-entries.generated.js +1854 -345
  121. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  122. package/dist/atlas/physjs-ref.d.ts +151 -117
  123. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  124. package/dist/atlas/physjs-ref.js +244 -211
  125. package/dist/atlas/physjs-ref.js.map +1 -1
  126. package/dist/atlas/physjs-reviewed.d.ts +31 -0
  127. package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
  128. package/dist/atlas/physjs-reviewed.js +194 -0
  129. package/dist/atlas/physjs-reviewed.js.map +1 -0
  130. package/dist/atlas/poster/associations.js.map +1 -1
  131. package/dist/atlas/poster/derivations.js.map +1 -1
  132. package/dist/atlas/poster/statements.js.map +1 -1
  133. package/dist/atlas/proof-target.d.ts +16 -8
  134. package/dist/atlas/proof-target.d.ts.map +1 -1
  135. package/dist/atlas/proof-target.js +34 -31
  136. package/dist/atlas/proof-target.js.map +1 -1
  137. package/dist/atlas/public.d.ts +2 -1
  138. package/dist/atlas/public.d.ts.map +1 -1
  139. package/dist/atlas/public.js +2 -1
  140. package/dist/atlas/public.js.map +1 -1
  141. package/dist/atlas/regime.js.map +1 -1
  142. package/dist/atlas/serialize.d.ts +18 -12
  143. package/dist/atlas/serialize.d.ts.map +1 -1
  144. package/dist/atlas/serialize.js +28 -18
  145. package/dist/atlas/serialize.js.map +1 -1
  146. package/dist/atlas/statement.js.map +1 -1
  147. package/dist/atlas/translation-registry.js.map +1 -1
  148. package/dist/atlas/translation.js.map +1 -1
  149. package/dist/atlas/types.d.ts +9 -2
  150. package/dist/atlas/types.d.ts.map +1 -1
  151. package/dist/atlas/types.js +1 -1
  152. package/dist/atlas/types.js.map +1 -1
  153. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  154. package/dist/atlas/waves/bridges-closure.js +0 -3
  155. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  156. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  157. package/dist/atlas/waves/bridges.js +0 -4
  158. package/dist/atlas/waves/bridges.js.map +1 -1
  159. package/dist/atlas/waves/index.d.ts +1 -1
  160. package/dist/atlas/waves/index.d.ts.map +1 -1
  161. package/dist/atlas/waves/index.js.map +1 -1
  162. package/dist/atlas/waves/models.js.map +1 -1
  163. package/dist/atlas/waves/numerics.js.map +1 -1
  164. package/dist/atlas/witness-artifact.js.map +1 -1
  165. package/dist/atlas/witness-dominance.d.ts +4 -3
  166. package/dist/atlas/witness-dominance.d.ts.map +1 -1
  167. package/dist/atlas/witness-dominance.js +15 -5
  168. package/dist/atlas/witness-dominance.js.map +1 -1
  169. package/dist/atlas/witness-numeric.d.ts +8 -4
  170. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  171. package/dist/atlas/witness-numeric.js +27 -2
  172. package/dist/atlas/witness-numeric.js.map +1 -1
  173. package/dist/atlas/witness-result.d.ts +7 -1
  174. package/dist/atlas/witness-result.d.ts.map +1 -1
  175. package/dist/atlas/witness-result.js.map +1 -1
  176. package/dist/atlas/witness-specs.js.map +1 -1
  177. package/dist/atlas/witness-symbolic.js.map +1 -1
  178. package/dist/atlas/witnesses/quantum-support.js.map +1 -1
  179. package/dist/bridges/caller-table.d.ts +1 -1
  180. package/dist/bridges/caller-table.d.ts.map +1 -1
  181. package/dist/bridges/caller-table.js.map +1 -1
  182. package/dist/bridges/carrier-sign.d.ts.map +1 -1
  183. package/dist/bridges/carrier-sign.js +8 -3
  184. package/dist/bridges/carrier-sign.js.map +1 -1
  185. package/dist/bridges/catalog-adapter.d.ts +12 -3
  186. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  187. package/dist/bridges/catalog-adapter.js +22 -14
  188. package/dist/bridges/catalog-adapter.js.map +1 -1
  189. package/dist/bridges/catalog-load.d.ts +19 -2
  190. package/dist/bridges/catalog-load.d.ts.map +1 -1
  191. package/dist/bridges/catalog-load.js +233 -14
  192. package/dist/bridges/catalog-load.js.map +1 -1
  193. package/dist/bridges/catalog-types.d.ts +96 -27
  194. package/dist/bridges/catalog-types.d.ts.map +1 -1
  195. package/dist/bridges/catalog-types.js.map +1 -1
  196. package/dist/bridges/coefficient-statement.js +1 -5
  197. package/dist/bridges/coefficient-statement.js.map +1 -1
  198. package/dist/bridges/confrontation-coverage.js.map +1 -1
  199. package/dist/bridges/confrontations.d.ts +1 -1
  200. package/dist/bridges/confrontations.d.ts.map +1 -1
  201. package/dist/bridges/confrontations.js +1 -1
  202. package/dist/bridges/confrontations.js.map +1 -1
  203. package/dist/bridges/evaluation-errors.d.ts +89 -0
  204. package/dist/bridges/evaluation-errors.d.ts.map +1 -0
  205. package/dist/bridges/evaluation-errors.js +136 -0
  206. package/dist/bridges/evaluation-errors.js.map +1 -0
  207. package/dist/bridges/evaluator-inputs.d.ts +5 -3
  208. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  209. package/dist/bridges/evaluator-inputs.js +24 -24
  210. package/dist/bridges/evaluator-inputs.js.map +1 -1
  211. package/dist/bridges/evaluators.d.ts +48 -8
  212. package/dist/bridges/evaluators.d.ts.map +1 -1
  213. package/dist/bridges/evaluators.js +173 -38
  214. package/dist/bridges/evaluators.js.map +1 -1
  215. package/dist/bridges/expr-parse.d.ts +38 -7
  216. package/dist/bridges/expr-parse.d.ts.map +1 -1
  217. package/dist/bridges/expr-parse.js +129 -156
  218. package/dist/bridges/expr-parse.js.map +1 -1
  219. package/dist/bridges/holds.d.ts +16 -8
  220. package/dist/bridges/holds.d.ts.map +1 -1
  221. package/dist/bridges/holds.js +130 -236
  222. package/dist/bridges/holds.js.map +1 -1
  223. package/dist/bridges/index.d.ts +15 -14
  224. package/dist/bridges/index.d.ts.map +1 -1
  225. package/dist/bridges/index.js +14 -15
  226. package/dist/bridges/index.js.map +1 -1
  227. package/dist/bridges/input-contract.d.ts +65 -0
  228. package/dist/bridges/input-contract.d.ts.map +1 -0
  229. package/dist/bridges/input-contract.js +97 -0
  230. package/dist/bridges/input-contract.js.map +1 -0
  231. package/dist/bridges/membership.d.ts +5 -3
  232. package/dist/bridges/membership.d.ts.map +1 -1
  233. package/dist/bridges/membership.js +5 -6
  234. package/dist/bridges/membership.js.map +1 -1
  235. package/dist/bridges/notices.d.ts +11 -0
  236. package/dist/bridges/notices.d.ts.map +1 -0
  237. package/dist/bridges/notices.js +22 -0
  238. package/dist/bridges/notices.js.map +1 -0
  239. package/dist/bridges/observations/types.js.map +1 -1
  240. package/dist/bridges/rejected.d.ts +11 -17
  241. package/dist/bridges/rejected.d.ts.map +1 -1
  242. package/dist/bridges/rejected.js +13 -68
  243. package/dist/bridges/rejected.js.map +1 -1
  244. package/dist/bridges/relation-eval.d.ts +5 -6
  245. package/dist/bridges/relation-eval.d.ts.map +1 -1
  246. package/dist/bridges/relation-eval.js +9 -38
  247. package/dist/bridges/relation-eval.js.map +1 -1
  248. package/dist/bridges/rhs-registry.js.map +1 -1
  249. package/dist/bridges/sensitivity.d.ts +11 -3
  250. package/dist/bridges/sensitivity.d.ts.map +1 -1
  251. package/dist/bridges/sensitivity.js +24 -10
  252. package/dist/bridges/sensitivity.js.map +1 -1
  253. package/dist/bridges/tensor-index.js.map +1 -1
  254. package/dist/bridges/types.d.ts +1 -7
  255. package/dist/bridges/types.d.ts.map +1 -1
  256. package/dist/bridges/types.js +1 -4
  257. package/dist/bridges/types.js.map +1 -1
  258. package/dist/canonical/canonical-equation.d.ts +31 -0
  259. package/dist/canonical/canonical-equation.d.ts.map +1 -1
  260. package/dist/canonical/canonical-equation.js.map +1 -1
  261. package/dist/canonical/dimensional-fields.js.map +1 -1
  262. package/dist/canonical/entries/_l1-build.js.map +1 -1
  263. package/dist/canonical/entries/atomic.d.ts.map +1 -1
  264. package/dist/canonical/entries/atomic.js +11 -1
  265. package/dist/canonical/entries/atomic.js.map +1 -1
  266. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  267. package/dist/canonical/entries/condensed-matter.js +7 -4
  268. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  269. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  270. package/dist/canonical/entries/dimensional-classics.js +50 -2
  271. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  272. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  273. package/dist/canonical/entries/electromagnetism.js +32 -2
  274. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  275. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  276. package/dist/canonical/entries/fluids-waves.js +34 -0
  277. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  278. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  279. package/dist/canonical/entries/mechanics.js +24 -0
  280. package/dist/canonical/entries/mechanics.js.map +1 -1
  281. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  282. package/dist/canonical/entries/nonmonomial.js +42 -24
  283. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  284. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  285. package/dist/canonical/entries/relativity.js +6 -0
  286. package/dist/canonical/entries/relativity.js.map +1 -1
  287. package/dist/canonical/entries/statistical-mechanics.d.ts.map +1 -1
  288. package/dist/canonical/entries/statistical-mechanics.js +24 -5
  289. package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
  290. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  291. package/dist/canonical/entries/thermo-nuclear-cosmo.js +15 -0
  292. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  293. package/dist/canonical/linkage.d.ts +29 -4
  294. package/dist/canonical/linkage.d.ts.map +1 -1
  295. package/dist/canonical/linkage.js +31 -29
  296. package/dist/canonical/linkage.js.map +1 -1
  297. package/dist/canonical/normal-form.d.ts +0 -8
  298. package/dist/canonical/normal-form.d.ts.map +1 -1
  299. package/dist/canonical/normal-form.js +17 -12
  300. package/dist/canonical/normal-form.js.map +1 -1
  301. package/dist/canonical/registry.js.map +1 -1
  302. package/dist/canonical/residual.js.map +1 -1
  303. package/dist/canonical/seed-l-layer.d.ts +7 -1
  304. package/dist/canonical/seed-l-layer.d.ts.map +1 -1
  305. package/dist/canonical/seed-l-layer.js +7 -1
  306. package/dist/canonical/seed-l-layer.js.map +1 -1
  307. package/dist/canonical/structural.d.ts +21 -0
  308. package/dist/canonical/structural.d.ts.map +1 -1
  309. package/dist/canonical/structural.js +24 -4
  310. package/dist/canonical/structural.js.map +1 -1
  311. package/dist/cases/brownian-sphere.js +4 -4
  312. package/dist/cases/brownian-sphere.js.map +1 -1
  313. package/dist/cases/damped-resonator.js +2 -2
  314. package/dist/cases/damped-resonator.js.map +1 -1
  315. package/dist/cases/index.d.ts +9 -2
  316. package/dist/cases/index.d.ts.map +1 -1
  317. package/dist/cases/index.js +26 -7
  318. package/dist/cases/index.js.map +1 -1
  319. package/dist/cases/kepler-rv.js +6 -6
  320. package/dist/cases/kepler-rv.js.map +1 -1
  321. package/dist/cases/lumped-cooling.js +1 -1
  322. package/dist/cases/lumped-cooling.js.map +1 -1
  323. package/dist/cases/quadrature.js.map +1 -1
  324. package/dist/cases/resistor-noise.js +3 -3
  325. package/dist/cases/resistor-noise.js.map +1 -1
  326. package/dist/cases/skin-depth.js.map +1 -1
  327. package/dist/cases/types.js.map +1 -1
  328. package/dist/cli/args.d.ts +7 -2
  329. package/dist/cli/args.d.ts.map +1 -1
  330. package/dist/cli/args.js +18 -2
  331. package/dist/cli/args.js.map +1 -1
  332. package/dist/cli/bindings.d.ts +13 -0
  333. package/dist/cli/bindings.d.ts.map +1 -0
  334. package/dist/cli/bindings.js +32 -0
  335. package/dist/cli/bindings.js.map +1 -0
  336. package/dist/cli/closed-form-range.js.map +1 -1
  337. package/dist/cli/command.js.map +1 -1
  338. package/dist/cli/commands/_atlas-map.d.ts +3 -3
  339. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  340. package/dist/cli/commands/_atlas-map.js +43 -18
  341. package/dist/cli/commands/_atlas-map.js.map +1 -1
  342. package/dist/cli/commands/_atlas-route.js.map +1 -1
  343. package/dist/cli/commands/_discovery-opts.d.ts +2 -1
  344. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  345. package/dist/cli/commands/_discovery-opts.js +48 -18
  346. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  347. package/dist/cli/commands/atlas.d.ts.map +1 -1
  348. package/dist/cli/commands/atlas.js +7 -12
  349. package/dist/cli/commands/atlas.js.map +1 -1
  350. package/dist/cli/commands/audit.d.ts.map +1 -1
  351. package/dist/cli/commands/audit.js +13 -21
  352. package/dist/cli/commands/audit.js.map +1 -1
  353. package/dist/cli/commands/axes.js.map +1 -1
  354. package/dist/cli/commands/candidates.d.ts.map +1 -1
  355. package/dist/cli/commands/candidates.js +16 -8
  356. package/dist/cli/commands/candidates.js.map +1 -1
  357. package/dist/cli/commands/canonical.js.map +1 -1
  358. package/dist/cli/commands/chain.js +1 -1
  359. package/dist/cli/commands/chain.js.map +1 -1
  360. package/dist/cli/commands/confront.d.ts.map +1 -1
  361. package/dist/cli/commands/confront.js +22 -14
  362. package/dist/cli/commands/confront.js.map +1 -1
  363. package/dist/cli/commands/connectors.d.ts.map +1 -1
  364. package/dist/cli/commands/connectors.js +8 -9
  365. package/dist/cli/commands/connectors.js.map +1 -1
  366. package/dist/cli/commands/coverage.js.map +1 -1
  367. package/dist/cli/commands/derive.d.ts.map +1 -1
  368. package/dist/cli/commands/derive.js +50 -26
  369. package/dist/cli/commands/derive.js.map +1 -1
  370. package/dist/cli/commands/discover.d.ts.map +1 -1
  371. package/dist/cli/commands/discover.js +18 -13
  372. package/dist/cli/commands/discover.js.map +1 -1
  373. package/dist/cli/commands/eval.d.ts.map +1 -1
  374. package/dist/cli/commands/eval.js +29 -26
  375. package/dist/cli/commands/eval.js.map +1 -1
  376. package/dist/cli/commands/evaluate.d.ts +1 -35
  377. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  378. package/dist/cli/commands/evaluate.js +99 -208
  379. package/dist/cli/commands/evaluate.js.map +1 -1
  380. package/dist/cli/commands/explain.d.ts.map +1 -1
  381. package/dist/cli/commands/explain.js +57 -45
  382. package/dist/cli/commands/explain.js.map +1 -1
  383. package/dist/cli/commands/frontier.js.map +1 -1
  384. package/dist/cli/commands/ground.d.ts.map +1 -1
  385. package/dist/cli/commands/ground.js +41 -11
  386. package/dist/cli/commands/ground.js.map +1 -1
  387. package/dist/cli/commands/index.js.map +1 -1
  388. package/dist/cli/commands/map.d.ts.map +1 -1
  389. package/dist/cli/commands/map.js +84 -92
  390. package/dist/cli/commands/map.js.map +1 -1
  391. package/dist/cli/commands/metric.d.ts.map +1 -1
  392. package/dist/cli/commands/metric.js +53 -15
  393. package/dist/cli/commands/metric.js.map +1 -1
  394. package/dist/cli/commands/path.js +4 -4
  395. package/dist/cli/commands/path.js.map +1 -1
  396. package/dist/cli/commands/predict.js.map +1 -1
  397. package/dist/cli/commands/priority.js.map +1 -1
  398. package/dist/cli/commands/probe.d.ts.map +1 -1
  399. package/dist/cli/commands/probe.js +50 -26
  400. package/dist/cli/commands/probe.js.map +1 -1
  401. package/dist/cli/commands/recover.js +1 -1
  402. package/dist/cli/commands/recover.js.map +1 -1
  403. package/dist/cli/commands/regime.d.ts +5 -4
  404. package/dist/cli/commands/regime.d.ts.map +1 -1
  405. package/dist/cli/commands/regime.js +25 -27
  406. package/dist/cli/commands/regime.js.map +1 -1
  407. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  408. package/dist/cli/commands/retrieve.js +22 -14
  409. package/dist/cli/commands/retrieve.js.map +1 -1
  410. package/dist/cli/commands/search.d.ts.map +1 -1
  411. package/dist/cli/commands/search.js +8 -4
  412. package/dist/cli/commands/search.js.map +1 -1
  413. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  414. package/dist/cli/commands/symbolic.js +14 -7
  415. package/dist/cli/commands/symbolic.js.map +1 -1
  416. package/dist/cli/commands/testplan.js +4 -4
  417. package/dist/cli/commands/testplan.js.map +1 -1
  418. package/dist/cli/conventions.d.ts +6 -7
  419. package/dist/cli/conventions.d.ts.map +1 -1
  420. package/dist/cli/conventions.js +19 -28
  421. package/dist/cli/conventions.js.map +1 -1
  422. package/dist/cli/determination.js.map +1 -1
  423. package/dist/cli/errors.js.map +1 -1
  424. package/dist/cli/euler-guard.d.ts +13 -2
  425. package/dist/cli/euler-guard.d.ts.map +1 -1
  426. package/dist/cli/euler-guard.js +17 -3
  427. package/dist/cli/euler-guard.js.map +1 -1
  428. package/dist/cli/eval-numbers.d.ts +4 -9
  429. package/dist/cli/eval-numbers.d.ts.map +1 -1
  430. package/dist/cli/eval-numbers.js +11 -41
  431. package/dist/cli/eval-numbers.js.map +1 -1
  432. package/dist/cli/expr-print.d.ts +29 -2
  433. package/dist/cli/expr-print.d.ts.map +1 -1
  434. package/dist/cli/expr-print.js +46 -2
  435. package/dist/cli/expr-print.js.map +1 -1
  436. package/dist/cli/flag-help.js.map +1 -1
  437. package/dist/cli/graphs.js.map +1 -1
  438. package/dist/cli/library-defaults.d.ts +19 -0
  439. package/dist/cli/library-defaults.d.ts.map +1 -0
  440. package/dist/cli/library-defaults.js +22 -0
  441. package/dist/cli/library-defaults.js.map +1 -0
  442. package/dist/cli/main.js +7 -3
  443. package/dist/cli/main.js.map +1 -1
  444. package/dist/cli/map-evidence.js.map +1 -1
  445. package/dist/cli/output.d.ts +3 -6
  446. package/dist/cli/output.d.ts.map +1 -1
  447. package/dist/cli/output.js.map +1 -1
  448. package/dist/cli/published-url.d.ts +2 -0
  449. package/dist/cli/published-url.d.ts.map +1 -1
  450. package/dist/cli/published-url.js +5 -0
  451. package/dist/cli/published-url.js.map +1 -1
  452. package/dist/cli/record-reach.d.ts +6 -0
  453. package/dist/cli/record-reach.d.ts.map +1 -1
  454. package/dist/cli/record-reach.js +16 -10
  455. package/dist/cli/record-reach.js.map +1 -1
  456. package/dist/cli/record-tables.d.ts +2 -1
  457. package/dist/cli/record-tables.d.ts.map +1 -1
  458. package/dist/cli/record-tables.js +8 -3
  459. package/dist/cli/record-tables.js.map +1 -1
  460. package/dist/cli/record.d.ts.map +1 -1
  461. package/dist/cli/record.js +31 -12
  462. package/dist/cli/record.js.map +1 -1
  463. package/dist/cli/search-index.d.ts +5 -0
  464. package/dist/cli/search-index.d.ts.map +1 -1
  465. package/dist/cli/search-index.js +12 -1
  466. package/dist/cli/search-index.js.map +1 -1
  467. package/dist/cli/statuses.js.map +1 -1
  468. package/dist/cli/top-level-help.js.map +1 -1
  469. package/dist/cli/version.js.map +1 -1
  470. package/dist/cli-api.d.ts +57 -18
  471. package/dist/cli-api.d.ts.map +1 -1
  472. package/dist/cli-api.js +49 -21
  473. package/dist/cli-api.js.map +1 -1
  474. package/dist/composition/adjudication.d.ts +8 -30
  475. package/dist/composition/adjudication.d.ts.map +1 -1
  476. package/dist/composition/adjudication.js +15 -67
  477. package/dist/composition/adjudication.js.map +1 -1
  478. package/dist/composition/aliases.d.ts +1 -1
  479. package/dist/composition/aliases.d.ts.map +1 -1
  480. package/dist/composition/aliases.js +10 -20
  481. package/dist/composition/aliases.js.map +1 -1
  482. package/dist/composition/audit-coverage.d.ts +2 -0
  483. package/dist/composition/audit-coverage.d.ts.map +1 -1
  484. package/dist/composition/audit-coverage.js.map +1 -1
  485. package/dist/composition/axes.d.ts +12 -0
  486. package/dist/composition/axes.d.ts.map +1 -1
  487. package/dist/composition/axes.js +18 -6
  488. package/dist/composition/axes.js.map +1 -1
  489. package/dist/composition/axis-audit.js.map +1 -1
  490. package/dist/composition/bridge-analysis.d.ts +0 -14
  491. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  492. package/dist/composition/bridge-analysis.js +66 -57
  493. package/dist/composition/bridge-analysis.js.map +1 -1
  494. package/dist/composition/bridge-prediction.d.ts +5 -1
  495. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  496. package/dist/composition/bridge-prediction.js +12 -16
  497. package/dist/composition/bridge-prediction.js.map +1 -1
  498. package/dist/composition/buckingham-filter.js.map +1 -1
  499. package/dist/composition/canonical-compare.d.ts.map +1 -1
  500. package/dist/composition/canonical-compare.js +12 -2
  501. package/dist/composition/canonical-compare.js.map +1 -1
  502. package/dist/composition/canonical-graph.d.ts +15 -18
  503. package/dist/composition/canonical-graph.d.ts.map +1 -1
  504. package/dist/composition/canonical-graph.js +59 -85
  505. package/dist/composition/canonical-graph.js.map +1 -1
  506. package/dist/composition/canonical-json.js.map +1 -1
  507. package/dist/composition/canonical-prefactors.d.ts +10 -29
  508. package/dist/composition/canonical-prefactors.d.ts.map +1 -1
  509. package/dist/composition/canonical-prefactors.js +15 -202
  510. package/dist/composition/canonical-prefactors.js.map +1 -1
  511. package/dist/composition/catalog-graph.d.ts.map +1 -1
  512. package/dist/composition/catalog-graph.js +6 -20
  513. package/dist/composition/catalog-graph.js.map +1 -1
  514. package/dist/composition/chain-candidate.d.ts +2 -0
  515. package/dist/composition/chain-candidate.d.ts.map +1 -1
  516. package/dist/composition/chain-candidate.js +2 -0
  517. package/dist/composition/chain-candidate.js.map +1 -1
  518. package/dist/composition/chain-match.js.map +1 -1
  519. package/dist/composition/chain-regime.js.map +1 -1
  520. package/dist/composition/chain-result.js.map +1 -1
  521. package/dist/composition/compose-surface.js.map +1 -1
  522. package/dist/composition/compose-symbolic.js.map +1 -1
  523. package/dist/composition/compose.d.ts.map +1 -1
  524. package/dist/composition/compose.js +154 -36
  525. package/dist/composition/compose.js.map +1 -1
  526. package/dist/composition/composition-recovery.js.map +1 -1
  527. package/dist/composition/consequence.d.ts.map +1 -1
  528. package/dist/composition/consequence.js +15 -6
  529. package/dist/composition/consequence.js.map +1 -1
  530. package/dist/composition/consistency.js.map +1 -1
  531. package/dist/composition/descriptor.d.ts +1 -1
  532. package/dist/composition/descriptor.d.ts.map +1 -1
  533. package/dist/composition/descriptor.js.map +1 -1
  534. package/dist/composition/dimension-adjacency.js.map +1 -1
  535. package/dist/composition/discovery.d.ts +67 -7
  536. package/dist/composition/discovery.d.ts.map +1 -1
  537. package/dist/composition/discovery.js +83 -23
  538. package/dist/composition/discovery.js.map +1 -1
  539. package/dist/composition/edge.d.ts +19 -22
  540. package/dist/composition/edge.d.ts.map +1 -1
  541. package/dist/composition/edge.js +25 -28
  542. package/dist/composition/edge.js.map +1 -1
  543. package/dist/composition/enumerate.d.ts +2 -2
  544. package/dist/composition/enumerate.d.ts.map +1 -1
  545. package/dist/composition/enumerate.js.map +1 -1
  546. package/dist/composition/evaluate-relation.d.ts +29 -5
  547. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  548. package/dist/composition/evaluate-relation.js +100 -72
  549. package/dist/composition/evaluate-relation.js.map +1 -1
  550. package/dist/composition/explain.d.ts +14 -4
  551. package/dist/composition/explain.d.ts.map +1 -1
  552. package/dist/composition/explain.js +53 -19
  553. package/dist/composition/explain.js.map +1 -1
  554. package/dist/composition/expr-eval.d.ts.map +1 -1
  555. package/dist/composition/expr-eval.js +2 -1
  556. package/dist/composition/expr-eval.js.map +1 -1
  557. package/dist/composition/expr-simplify.d.ts.map +1 -1
  558. package/dist/composition/expr-simplify.js +9 -39
  559. package/dist/composition/expr-simplify.js.map +1 -1
  560. package/dist/composition/expr-subst.js.map +1 -1
  561. package/dist/composition/formula-shape.d.ts +9 -0
  562. package/dist/composition/formula-shape.d.ts.map +1 -1
  563. package/dist/composition/formula-shape.js +54 -0
  564. package/dist/composition/formula-shape.js.map +1 -1
  565. package/dist/composition/frontier-account.d.ts +3 -2
  566. package/dist/composition/frontier-account.d.ts.map +1 -1
  567. package/dist/composition/frontier-account.js +7 -3
  568. package/dist/composition/frontier-account.js.map +1 -1
  569. package/dist/composition/graph-viz-svg.js.map +1 -1
  570. package/dist/composition/graph-viz.js.map +1 -1
  571. package/dist/composition/grounding.js.map +1 -1
  572. package/dist/composition/identifiability.js.map +1 -1
  573. package/dist/composition/index.d.ts +9 -5
  574. package/dist/composition/index.d.ts.map +1 -1
  575. package/dist/composition/index.js +7 -4
  576. package/dist/composition/index.js.map +1 -1
  577. package/dist/composition/mathts-quiet.d.ts +28 -0
  578. package/dist/composition/mathts-quiet.d.ts.map +1 -0
  579. package/dist/composition/mathts-quiet.js +56 -0
  580. package/dist/composition/mathts-quiet.js.map +1 -0
  581. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  582. package/dist/composition/mathts-scalar-symbols.js +18 -34
  583. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  584. package/dist/composition/not-composable-seeds.d.ts +3 -1
  585. package/dist/composition/not-composable-seeds.d.ts.map +1 -1
  586. package/dist/composition/not-composable-seeds.js +2 -0
  587. package/dist/composition/not-composable-seeds.js.map +1 -1
  588. package/dist/composition/probe/backend-protocol.js.map +1 -1
  589. package/dist/composition/probe/candidate-store.js.map +1 -1
  590. package/dist/composition/probe/corpus.js.map +1 -1
  591. package/dist/composition/probe/dataset.js.map +1 -1
  592. package/dist/composition/probe/experiment-design.js.map +1 -1
  593. package/dist/composition/probe/expression-gaps.js.map +1 -1
  594. package/dist/composition/probe/falsify.d.ts +14 -3
  595. package/dist/composition/probe/falsify.d.ts.map +1 -1
  596. package/dist/composition/probe/falsify.js +14 -27
  597. package/dist/composition/probe/falsify.js.map +1 -1
  598. package/dist/composition/probe/fingerprint.js.map +1 -1
  599. package/dist/composition/probe/fit.d.ts +1 -1
  600. package/dist/composition/probe/fit.d.ts.map +1 -1
  601. package/dist/composition/probe/fit.js +2 -1
  602. package/dist/composition/probe/fit.js.map +1 -1
  603. package/dist/composition/probe/frontier.js.map +1 -1
  604. package/dist/composition/probe/generator.js.map +1 -1
  605. package/dist/composition/probe/index.d.ts +4 -2
  606. package/dist/composition/probe/index.d.ts.map +1 -1
  607. package/dist/composition/probe/index.js +4 -2
  608. package/dist/composition/probe/index.js.map +1 -1
  609. package/dist/composition/probe/limits.js.map +1 -1
  610. package/dist/composition/probe/metadata.js.map +1 -1
  611. package/dist/composition/probe/pipeline.d.ts +5 -0
  612. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  613. package/dist/composition/probe/pipeline.js +13 -6
  614. package/dist/composition/probe/pipeline.js.map +1 -1
  615. package/dist/composition/probe/problem.d.ts +8 -0
  616. package/dist/composition/probe/problem.d.ts.map +1 -1
  617. package/dist/composition/probe/problem.js +78 -12
  618. package/dist/composition/probe/problem.js.map +1 -1
  619. package/dist/composition/probe/report.js.map +1 -1
  620. package/dist/composition/probe/residual.js.map +1 -1
  621. package/dist/composition/probe/run-manifest.js +2 -2
  622. package/dist/composition/probe/run-manifest.js.map +1 -1
  623. package/dist/composition/probe/scoring.d.ts +2 -1
  624. package/dist/composition/probe/scoring.d.ts.map +1 -1
  625. package/dist/composition/probe/scoring.js +21 -7
  626. package/dist/composition/probe/scoring.js.map +1 -1
  627. package/dist/composition/probe/search-budget.js.map +1 -1
  628. package/dist/composition/probe/serialize.js.map +1 -1
  629. package/dist/composition/probe/structure.js.map +1 -1
  630. package/dist/composition/probe/study.d.ts +4 -3
  631. package/dist/composition/probe/study.d.ts.map +1 -1
  632. package/dist/composition/probe/study.js +5 -3
  633. package/dist/composition/probe/study.js.map +1 -1
  634. package/dist/composition/probe/types.d.ts +3 -1
  635. package/dist/composition/probe/types.d.ts.map +1 -1
  636. package/dist/composition/probe/types.js +2 -0
  637. package/dist/composition/probe/types.js.map +1 -1
  638. package/dist/composition/proposed-bridges.d.ts +11 -4
  639. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  640. package/dist/composition/proposed-bridges.js +14 -6
  641. package/dist/composition/proposed-bridges.js.map +1 -1
  642. package/dist/composition/quantities.d.ts +0 -4
  643. package/dist/composition/quantities.d.ts.map +1 -1
  644. package/dist/composition/quantities.js +5 -5
  645. package/dist/composition/quantities.js.map +1 -1
  646. package/dist/composition/quantity.d.ts +18 -2
  647. package/dist/composition/quantity.d.ts.map +1 -1
  648. package/dist/composition/quantity.js +35 -6
  649. package/dist/composition/quantity.js.map +1 -1
  650. package/dist/composition/representative-values.js.map +1 -1
  651. package/dist/composition/retrodiction.d.ts +18 -0
  652. package/dist/composition/retrodiction.d.ts.map +1 -1
  653. package/dist/composition/retrodiction.js +37 -7
  654. package/dist/composition/retrodiction.js.map +1 -1
  655. package/dist/composition/uncertainty.js.map +1 -1
  656. package/dist/composition/user-equation.d.ts +11 -7
  657. package/dist/composition/user-equation.d.ts.map +1 -1
  658. package/dist/composition/user-equation.js +24 -26
  659. package/dist/composition/user-equation.js.map +1 -1
  660. package/dist/core/axes-registry.d.ts +8 -5
  661. package/dist/core/axes-registry.d.ts.map +1 -1
  662. package/dist/core/axes-registry.js.map +1 -1
  663. package/dist/core/cell.js.map +1 -1
  664. package/dist/core/constants.d.ts +35 -12
  665. package/dist/core/constants.d.ts.map +1 -1
  666. package/dist/core/constants.js +46 -15
  667. package/dist/core/constants.js.map +1 -1
  668. package/dist/core/data-file.d.ts +27 -0
  669. package/dist/core/data-file.d.ts.map +1 -0
  670. package/dist/core/data-file.js +48 -0
  671. package/dist/core/data-file.js.map +1 -0
  672. package/dist/core/flux-rules.js +1 -1
  673. package/dist/core/flux-rules.js.map +1 -1
  674. package/dist/core/json-schema.d.ts +27 -0
  675. package/dist/core/json-schema.d.ts.map +1 -0
  676. package/dist/core/json-schema.js +177 -0
  677. package/dist/core/json-schema.js.map +1 -0
  678. package/dist/core/labeled-tensor.d.ts +6 -1
  679. package/dist/core/labeled-tensor.d.ts.map +1 -1
  680. package/dist/core/labeled-tensor.js +18 -8
  681. package/dist/core/labeled-tensor.js.map +1 -1
  682. package/dist/core/regime-registry.d.ts +6 -2
  683. package/dist/core/regime-registry.d.ts.map +1 -1
  684. package/dist/core/regime-registry.js.map +1 -1
  685. package/dist/core/regime-rule-install.js.map +1 -1
  686. package/dist/core/regimes-builtins.js.map +1 -1
  687. package/dist/core/tensor.d.ts +7 -4
  688. package/dist/core/tensor.d.ts.map +1 -1
  689. package/dist/core/tensor.js +40 -8
  690. package/dist/core/tensor.js.map +1 -1
  691. package/dist/core/types.d.ts +3 -2
  692. package/dist/core/types.d.ts.map +1 -1
  693. package/dist/core/types.js +16 -14
  694. package/dist/core/types.js.map +1 -1
  695. package/dist/core/universal-index.js.map +1 -1
  696. package/dist/diff/bridge-ast-gradient.d.ts +4 -5
  697. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  698. package/dist/diff/bridge-ast-gradient.js +16 -23
  699. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  700. package/dist/diff/bridge-gradient.d.ts +24 -80
  701. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  702. package/dist/diff/bridge-gradient.js +21 -98
  703. package/dist/diff/bridge-gradient.js.map +1 -1
  704. package/dist/diff/bridge-specs.d.ts +18 -6
  705. package/dist/diff/bridge-specs.d.ts.map +1 -1
  706. package/dist/diff/bridge-specs.js +17 -5
  707. package/dist/diff/bridge-specs.js.map +1 -1
  708. package/dist/dimensional/algebra.js.map +1 -1
  709. package/dist/dimensional/ast-builders.d.ts +5 -4
  710. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  711. package/dist/dimensional/ast-builders.js +6 -5
  712. package/dist/dimensional/ast-builders.js.map +1 -1
  713. package/dist/dimensional/ast-types.js.map +1 -1
  714. package/dist/dimensional/bridge-check.d.ts.map +1 -1
  715. package/dist/dimensional/bridge-check.js +3 -5
  716. package/dist/dimensional/bridge-check.js.map +1 -1
  717. package/dist/dimensional/buckingham.js.map +1 -1
  718. package/dist/dimensional/connection-validators.d.ts +2 -1
  719. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  720. package/dist/dimensional/connection-validators.js.map +1 -1
  721. package/dist/dimensional/connection.js.map +1 -1
  722. package/dist/dimensional/constant-rows.d.ts +54 -0
  723. package/dist/dimensional/constant-rows.d.ts.map +1 -0
  724. package/dist/dimensional/constant-rows.js +115 -0
  725. package/dist/dimensional/constant-rows.js.map +1 -0
  726. package/dist/dimensional/constants.d.ts +7 -17
  727. package/dist/dimensional/constants.d.ts.map +1 -1
  728. package/dist/dimensional/constants.js +12 -21
  729. package/dist/dimensional/constants.js.map +1 -1
  730. package/dist/dimensional/curvature-composite.js.map +1 -1
  731. package/dist/dimensional/curvature-invariants.js.map +1 -1
  732. package/dist/dimensional/curvature.js.map +1 -1
  733. package/dist/dimensional/dimension-inference.js.map +1 -1
  734. package/dist/dimensional/dimension-spec.d.ts +21 -6
  735. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  736. package/dist/dimensional/dimension-spec.js +150 -160
  737. package/dist/dimensional/dimension-spec.js.map +1 -1
  738. package/dist/dimensional/einstein-equation.js.map +1 -1
  739. package/dist/dimensional/errors.d.ts +3 -1
  740. package/dist/dimensional/errors.d.ts.map +1 -1
  741. package/dist/dimensional/errors.js +2 -2
  742. package/dist/dimensional/errors.js.map +1 -1
  743. package/dist/dimensional/exact-scale.d.ts +79 -0
  744. package/dist/dimensional/exact-scale.d.ts.map +1 -0
  745. package/dist/dimensional/exact-scale.js +222 -0
  746. package/dist/dimensional/exact-scale.js.map +1 -0
  747. package/dist/dimensional/field-equation-helpers.js.map +1 -1
  748. package/dist/dimensional/formula-names.d.ts +13 -12
  749. package/dist/dimensional/formula-names.d.ts.map +1 -1
  750. package/dist/dimensional/formula-names.js +28 -51
  751. package/dist/dimensional/formula-names.js.map +1 -1
  752. package/dist/dimensional/fresh-label.js.map +1 -1
  753. package/dist/dimensional/friedmann-equation.d.ts +3 -3
  754. package/dist/dimensional/friedmann-equation.js +3 -3
  755. package/dist/dimensional/friedmann-equation.js.map +1 -1
  756. package/dist/dimensional/gauge-field.d.ts +2 -3
  757. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  758. package/dist/dimensional/gauge-field.js +0 -1
  759. package/dist/dimensional/gauge-field.js.map +1 -1
  760. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  761. package/dist/dimensional/hyphen-names.js +8 -0
  762. package/dist/dimensional/hyphen-names.js.map +1 -1
  763. package/dist/dimensional/killing-validators.js.map +1 -1
  764. package/dist/dimensional/klein-gordon-equation.js.map +1 -1
  765. package/dist/dimensional/metric-validators.d.ts +2 -1
  766. package/dist/dimensional/metric-validators.d.ts.map +1 -1
  767. package/dist/dimensional/metric-validators.js.map +1 -1
  768. package/dist/dimensional/metric.js.map +1 -1
  769. package/dist/dimensional/natural-units.js.map +1 -1
  770. package/dist/dimensional/quantity-registry.d.ts +23 -1
  771. package/dist/dimensional/quantity-registry.d.ts.map +1 -1
  772. package/dist/dimensional/quantity-registry.js +55 -18
  773. package/dist/dimensional/quantity-registry.js.map +1 -1
  774. package/dist/dimensional/rg-flow.js.map +1 -1
  775. package/dist/dimensional/stress-energy-validators.js.map +1 -1
  776. package/dist/dimensional/symbolic-constants.d.ts +63 -19
  777. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  778. package/dist/dimensional/symbolic-constants.js +114 -92
  779. package/dist/dimensional/symbolic-constants.js.map +1 -1
  780. package/dist/dimensional/tensor-trace.js.map +1 -1
  781. package/dist/dimensional/tensor.js.map +1 -1
  782. package/dist/dimensional/types.js.map +1 -1
  783. package/dist/dimensional/unit-convention.d.ts +0 -2
  784. package/dist/dimensional/unit-convention.d.ts.map +1 -1
  785. package/dist/dimensional/unit-convention.js +2 -2
  786. package/dist/dimensional/unit-convention.js.map +1 -1
  787. package/dist/dimensional/unit-data.d.ts +70 -0
  788. package/dist/dimensional/unit-data.d.ts.map +1 -0
  789. package/dist/dimensional/unit-data.js +139 -0
  790. package/dist/dimensional/unit-data.js.map +1 -0
  791. package/dist/dimensional/units.d.ts +87 -24
  792. package/dist/dimensional/units.d.ts.map +1 -1
  793. package/dist/dimensional/units.js +290 -295
  794. package/dist/dimensional/units.js.map +1 -1
  795. package/dist/dimensional/validator-registry.js.map +1 -1
  796. package/dist/dimensional/validator.d.ts +0 -16
  797. package/dist/dimensional/validator.d.ts.map +1 -1
  798. package/dist/dimensional/validator.js +65 -29
  799. package/dist/dimensional/validator.js.map +1 -1
  800. package/dist/dimensional/weyl-validators.js.map +1 -1
  801. package/dist/index.d.ts +65 -18
  802. package/dist/index.d.ts.map +1 -1
  803. package/dist/index.js +19 -24
  804. package/dist/index.js.map +1 -1
  805. package/dist/numerical/bianchi-residual.js.map +1 -1
  806. package/dist/numerical/binding-value.d.ts +32 -7
  807. package/dist/numerical/binding-value.d.ts.map +1 -1
  808. package/dist/numerical/binding-value.js +218 -209
  809. package/dist/numerical/binding-value.js.map +1 -1
  810. package/dist/numerical/christoffel-flat.js.map +1 -1
  811. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  812. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  813. package/dist/numerical/covariant-eikonal.js +2 -2
  814. package/dist/numerical/covariant-eikonal.js.map +1 -1
  815. package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
  816. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  817. package/dist/numerical/curvature-lowering-helpers.js +6 -3
  818. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  819. package/dist/numerical/derivative-lowering.js.map +1 -1
  820. package/dist/numerical/einstein-equation.js.map +1 -1
  821. package/dist/numerical/engine-registry.js.map +1 -1
  822. package/dist/numerical/errors.d.ts +7 -3
  823. package/dist/numerical/errors.d.ts.map +1 -1
  824. package/dist/numerical/errors.js +5 -5
  825. package/dist/numerical/errors.js.map +1 -1
  826. package/dist/numerical/evaluator-uncertainty.d.ts +34 -0
  827. package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -0
  828. package/dist/numerical/evaluator-uncertainty.js +134 -0
  829. package/dist/numerical/evaluator-uncertainty.js.map +1 -0
  830. package/dist/numerical/formula-contract.d.ts +67 -7
  831. package/dist/numerical/formula-contract.d.ts.map +1 -1
  832. package/dist/numerical/formula-contract.js +68 -42
  833. package/dist/numerical/formula-contract.js.map +1 -1
  834. package/dist/numerical/formula-dimension.d.ts +17 -7
  835. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  836. package/dist/numerical/formula-dimension.js +120 -44
  837. package/dist/numerical/formula-dimension.js.map +1 -1
  838. package/dist/numerical/formula-mathts.d.ts.map +1 -1
  839. package/dist/numerical/formula-mathts.js +10 -3
  840. package/dist/numerical/formula-mathts.js.map +1 -1
  841. package/dist/numerical/formula-registry.d.ts +13 -3
  842. package/dist/numerical/formula-registry.d.ts.map +1 -1
  843. package/dist/numerical/formula-registry.js +7 -2
  844. package/dist/numerical/formula-registry.js.map +1 -1
  845. package/dist/numerical/geodesic-integrator.js.map +1 -1
  846. package/dist/numerical/geometrized.js.map +1 -1
  847. package/dist/numerical/gl4-integrator.d.ts +28 -27
  848. package/dist/numerical/gl4-integrator.d.ts.map +1 -1
  849. package/dist/numerical/gl4-integrator.js +44 -45
  850. package/dist/numerical/gl4-integrator.js.map +1 -1
  851. package/dist/numerical/grid-field.js.map +1 -1
  852. package/dist/numerical/index.js.map +1 -1
  853. package/dist/numerical/input-validation.d.ts +3 -6
  854. package/dist/numerical/input-validation.d.ts.map +1 -1
  855. package/dist/numerical/input-validation.js +4 -8
  856. package/dist/numerical/input-validation.js.map +1 -1
  857. package/dist/numerical/killing.d.ts +8 -5
  858. package/dist/numerical/killing.d.ts.map +1 -1
  859. package/dist/numerical/killing.js.map +1 -1
  860. package/dist/numerical/klein-gordon.js.map +1 -1
  861. package/dist/numerical/kretschmann.js.map +1 -1
  862. package/dist/numerical/lowering-utils.js.map +1 -1
  863. package/dist/numerical/lowering.d.ts.map +1 -1
  864. package/dist/numerical/lowering.js +7 -17
  865. package/dist/numerical/lowering.js.map +1 -1
  866. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  867. package/dist/numerical/mathts-engine.js +11 -6
  868. package/dist/numerical/mathts-engine.js.map +1 -1
  869. package/dist/numerical/metric-inverse.js.map +1 -1
  870. package/dist/numerical/null-ic.js.map +1 -1
  871. package/dist/numerical/null-ray-integrator.js +4 -4
  872. package/dist/numerical/null-ray-integrator.js.map +1 -1
  873. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  874. package/dist/numerical/pderiv.d.ts.map +1 -1
  875. package/dist/numerical/pderiv.js +9 -2
  876. package/dist/numerical/pderiv.js.map +1 -1
  877. package/dist/numerical/perihelion-finder.js.map +1 -1
  878. package/dist/numerical/quadrature.d.ts +5 -2
  879. package/dist/numerical/quadrature.d.ts.map +1 -1
  880. package/dist/numerical/quadrature.js +20 -3
  881. package/dist/numerical/quadrature.js.map +1 -1
  882. package/dist/numerical/spacetime-metrics.d.ts +17 -19
  883. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  884. package/dist/numerical/spacetime-metrics.js +158 -250
  885. package/dist/numerical/spacetime-metrics.js.map +1 -1
  886. package/dist/numerical/strides.js.map +1 -1
  887. package/dist/numerical/tensor-engine.d.ts +9 -5
  888. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  889. package/dist/numerical/tensor-engine.js.map +1 -1
  890. package/dist/numerical/types.js.map +1 -1
  891. package/dist/numerical/weyl-lowering.js.map +1 -1
  892. package/dist/relations/category.js.map +1 -1
  893. package/dist/relations/composition-table.d.ts +4 -4
  894. package/dist/relations/composition-table.js +4 -4
  895. package/dist/relations/composition-table.js.map +1 -1
  896. package/dist/relations/conventions.js.map +1 -1
  897. package/dist/relations/domain-regimes.js.map +1 -1
  898. package/dist/relations/regime-registration.js.map +1 -1
  899. package/dist/relations/regime-vocabularies.js.map +1 -1
  900. package/dist/relations/regime.d.ts +18 -8
  901. package/dist/relations/regime.d.ts.map +1 -1
  902. package/dist/relations/regime.js +26 -14
  903. package/dist/relations/regime.js.map +1 -1
  904. package/dist/relations/types.d.ts +26 -6
  905. package/dist/relations/types.d.ts.map +1 -1
  906. package/dist/relations/types.js +15 -3
  907. package/dist/relations/types.js.map +1 -1
  908. package/package.json +10 -14
  909. package/dist/bridges/registry.d.ts +0 -60
  910. package/dist/bridges/registry.d.ts.map +0 -1
  911. package/dist/bridges/registry.js +0 -87
  912. package/dist/bridges/registry.js.map +0 -1
  913. package/dist/cli/poster-source.d.ts +0 -154
  914. package/dist/cli/poster-source.d.ts.map +0 -1
  915. package/dist/cli/poster-source.js +0 -184
  916. package/dist/cli/poster-source.js.map +0 -1
@@ -4,45 +4,36 @@
4
4
  * @module cli/conventions
5
5
  * @internal
6
6
  */
7
- const COMPTON_PAIR = new Set(['CE-compton-wavelength', 'CE-compton-wavelength-full']);
7
+ import { canonicalById } from '../canonical/registry.js';
8
8
  /**
9
- * A factor or form difference is a failed check, except the Compton pair:
10
- * both entries answer to `compton-wavelength` and differ by 2π, so a formula
11
- * that agrees with one of them has matched that convention. The other
12
- * difference is still printed. A formula that matches neither still fails.
9
+ * A factor or form difference is a failed check, except within a convention
10
+ * group: entries that share `conventionGroup` are one law under different
11
+ * conventions (the two Compton wavelengths differ by 2π), so a formula that
12
+ * agrees with one of them has matched that convention. The other difference
13
+ * is still printed. A formula that matches none of a group still fails.
13
14
  * @internal
14
15
  */
15
16
  export function canonicalCheckFailed(comparisons) {
16
17
  const hard = comparisons.filter((c) => c.kind === 'factor' || c.kind === 'form');
17
18
  if (hard.length === 0)
18
19
  return false;
19
- const agreed = comparisons.some((c) => COMPTON_PAIR.has(c.id) && c.kind === 'agrees');
20
- return !(agreed && hard.every((c) => COMPTON_PAIR.has(c.id)));
20
+ const agreedGroups = new Set(comparisons.filter((c) => c.kind === 'agrees').map((c) => canonicalById(c.id)?.conventionGroup).filter((g) => g !== undefined));
21
+ return !hard.every((c) => {
22
+ const group = canonicalById(c.id)?.conventionGroup;
23
+ return group !== undefined && agreedGroups.has(group);
24
+ });
21
25
  }
22
- /** One line per convention a listed comparison is ambiguous about. @internal */
26
+ /** One line per convention note the listed entries carry; a note two entries share prints once. @internal */
23
27
  export function conventionLines(ids) {
24
- const has = new Set(ids);
25
28
  const lines = [];
26
- if (has.has('CE-compton-wavelength') || has.has('CE-compton-wavelength-full')) {
27
- lines.push('convention: CE-compton-wavelength is the reduced wavelength λ̄ = ħ/(m c), prefactor checked. ' +
28
- 'CE-compton-wavelength-full is λ = h/(m c). The Compton-shift entry uses h/(m c) (1−cos θ). h does not alias ħ.');
29
- }
30
- if (has.has('CE-rydberg-energy')) {
31
- lines.push('convention: the Rydberg latex is E_R = m_e e^4 / (32 π² ε0² ħ²), which is m e^4 / (8 ε0² h²). The prefactor is in the scalar AST.');
32
- }
33
- if (has.has('CE-gravitational-potential-energy')) {
34
- lines.push('convention: gravitational potential energy is U = −G m1 m2/r. The minus is in the scalar AST; a positive formula differs by the factor −1.');
35
- }
36
- if (has.has('CE-hooke-law')) {
37
- lines.push("convention: Hooke's law is F = −kx. The minus is in the scalar AST; a positive formula differs by the factor −1.");
38
- }
39
- if (has.has('CE-einstein-field-eq')) {
40
- lines.push('convention: the Einstein-equation metric node is mostly-plus (−,+,+,+), the same signature as upt metric. ' +
41
- 'The 8π is in the scalar AST, so a comparison checks it.');
29
+ for (const id of ids) {
30
+ const note = canonicalById(id)?.conventionNote;
31
+ if (note === undefined)
32
+ continue;
33
+ const line = `convention: ${note}`;
34
+ if (!lines.includes(line))
35
+ lines.push(line);
42
36
  }
43
37
  return lines;
44
38
  }
45
- /** Printed beside be-65. The number is the coded formula; the 5 is convention-dependent. */
46
- export const JEANS_FORMULA_NOTE = 'formula: M_J = (5 k_B T / (G μ m_u))^{3/2} · (3/(4π ρ))^{1/2}. ' +
47
- 'The leading 5 is convention-dependent; the number above is this formula, not a checked universal prefactor.';
48
39
  //# sourceMappingURL=conventions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conventions.js","sourceRoot":"","sources":["../../src/cli/conventions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,uBAAuB,EAAE,4BAA4B,CAAC,CAAC,CAAC;AAEtF;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAsE;IAEtE,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACjF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACtF,OAAO,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAAC,GAAsB;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,IAAI,CACR,+FAA+F;YAC7F,gHAAgH,CACnH,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CACR,mIAAmI,CACpI,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CACR,4IAA4I,CAC7I,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,kHAAkH,CACnH,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CACR,4GAA4G;YAC1G,yDAAyD,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,kBAAkB,GAC7B,iEAAiE;IACjE,6GAA6G,CAAC"}
1
+ {"version":3,"file":"conventions.js","sourceRoot":"","sources":["../../src/cli/conventions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAsE;IAEtE,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACjF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAC/H,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC;QACnD,OAAO,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,eAAe,CAAC,GAAsB;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC;QAC/C,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,MAAM,IAAI,GAAG,eAAe,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/**\n * Convention lines the CLI prints beside a comparison.\n *\n * @module cli/conventions\n * @internal\n */\n\nimport { canonicalById } from '../canonical/registry.js';\n\n/**\n * A factor or form difference is a failed check, except within a convention\n * group: entries that share `conventionGroup` are one law under different\n * conventions (the two Compton wavelengths differ by 2π), so a formula that\n * agrees with one of them has matched that convention. The other difference\n * is still printed. A formula that matches none of a group still fails.\n * @internal\n */\nexport function canonicalCheckFailed(\n comparisons: readonly { readonly id: string; readonly kind: string }[],\n): boolean {\n const hard = comparisons.filter((c) => c.kind === 'factor' || c.kind === 'form');\n if (hard.length === 0) return false;\n const agreedGroups = new Set(\n comparisons.filter((c) => c.kind === 'agrees').map((c) => canonicalById(c.id)?.conventionGroup).filter((g) => g !== undefined),\n );\n return !hard.every((c) => {\n const group = canonicalById(c.id)?.conventionGroup;\n return group !== undefined && agreedGroups.has(group);\n });\n}\n\n/** One line per convention note the listed entries carry; a note two entries share prints once. @internal */\nexport function conventionLines(ids: readonly string[]): string[] {\n const lines: string[] = [];\n for (const id of ids) {\n const note = canonicalById(id)?.conventionNote;\n if (note === undefined) continue;\n const line = `convention: ${note}`;\n if (!lines.includes(line)) lines.push(line);\n }\n return lines;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"determination.js","sourceRoot":"","sources":["../../src/cli/determination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAsBhD,+CAA+C;AAC/C,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACrE,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAC3F,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS;YACzB,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,cAAc,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACpE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"determination.js","sourceRoot":"","sources":["../../src/cli/determination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAsBhD,+CAA+C;AAC/C,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACrE,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAC3F,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS;YACzB,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,cAAc,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACpE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACzD,CAAC","sourcesContent":["/**\n * One exit for a result the user asked to have determined.\n *\n * Derive and map used to decide separately, and both treated \"not\n * established\" as success. A canonical agreement is a check that passed.\n * A check that ran and failed, a non-unique monomial, and a catalog\n * target whose dimension was computed through an unresolved name are\n * exit 3. A target that was not a bound catalog name, with no comparison,\n * stays exit 0.\n *\n * @module cli/determination\n * @internal\n */\n\nimport { EXIT_CHECK_FAILED } from './errors.js';\n\ninterface DeterminationInput {\n /** The user named a bound catalog target, or asked derive for a monomial. */\n readonly asked: boolean;\n /** A canonical comparison agreed, including when some other name has no catalog dimension. */\n readonly agrees: boolean;\n /** A check ran on resolved names and failed, or a canonical comparison is a mismatch. */\n readonly checkFailed: boolean;\n /** The governing set does not determine one monomial. */\n readonly notUnique: boolean;\n /** Names filled in rather than resolved. Empty when the command did not look any up. */\n readonly unresolved: readonly string[];\n}\n\nexport interface Determination {\n readonly exit: 0 | typeof EXIT_CHECK_FAILED;\n readonly report: 'established' | 'nothing-checked' | 'check-failed' | 'not-established';\n /** Why a determination was not established. Empty otherwise. */\n readonly gap: string;\n}\n\n/** The exit derive and map share. @internal */\nexport function classifyDetermination(input: DeterminationInput): Determination {\n if (input.agrees) return { exit: 0, report: 'established', gap: '' };\n if (input.checkFailed) return { exit: EXIT_CHECK_FAILED, report: 'check-failed', gap: '' };\n const unresolved = [...new Set(input.unresolved)];\n if (input.asked && (input.notUnique || unresolved.length > 0)) {\n const gap = input.notUnique\n ? 'the monomial is not unique'\n : `unresolved ${unresolved.map((n) => `'${n}'`).join(', ')}`;\n return { exit: EXIT_CHECK_FAILED, report: 'not-established', gap };\n }\n if (input.asked) return { exit: 0, report: 'established', gap: '' };\n return { exit: 0, report: 'nothing-checked', gap: '' };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/cli/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,yFAAyF;AACzF,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,uGAAuG;AACvG,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/cli/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,yFAAyF;AACzF,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,uGAAuG;AACvG,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC","sourcesContent":["/**\n * Typed error classes and exit codes for the UPT CLI.\n *\n * `UsageError` signals a malformed invocation (bad flags, missing values,\n * unknown flags) — callers map it to exit code 2. `CliError` signals a\n * runtime failure within an otherwise well-formed invocation — exit code 1.\n * `EXIT_CHECK_FAILED` (3) is returned, not thrown: the command ran, and its\n * check came out negative.\n */\n\n/** A malformed invocation: bad flags, missing values, unknown flags. The CLI exits 2. */\nexport class UsageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UsageError';\n }\n}\n\n/** A runtime failure inside a well-formed invocation, such as an unknown model id. The CLI exits 1. */\nexport class CliError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CliError';\n }\n}\n\n/**\n * Exit code of a command that ran and whose CHECK came out negative: a\n * dimension mismatch, a formula that differs from the canonical one, a regime\n * or horizon violated on a path (persona finding F2; 0.47.0). Such a command\n * used to exit 0, so a script could not tell a failed check from a passed one.\n * A path or regime UNKNOWN, where a coordinate was not supplied, is not a\n * failure and exits 0. A map equation whose catalog target was compared using\n * an unresolved name exits 3 and does not quote that placeholder dimension,\n * unless a canonical comparison agreed. A derive that is not a unique monomial\n * exits 3. An unbound map target, where nothing was compared, stays 0.\n */\nexport const EXIT_CHECK_FAILED = 3;\n"]}
@@ -4,6 +4,17 @@
4
4
  * @module cli/euler-guard
5
5
  * @internal
6
6
  */
7
- /** Name the active parser on a formula error a script can read. @internal */
8
- export declare function withParser(message: string, kind: 'mathts' | 'builtin'): string;
7
+ import { UsageError } from './errors.js';
8
+ /**
9
+ * A usage error from the formula parser or its evaluation, tagged once with
10
+ * the parser that read it. The tag is added here, at construction, so a
11
+ * message is never inspected for an earlier tag: each throw site builds it
12
+ * from the parser's own message.
13
+ * @internal
14
+ */
15
+ export declare class FormulaUsageError extends UsageError {
16
+ readonly detail: string;
17
+ readonly parser: 'mathts' | 'builtin';
18
+ constructor(detail: string, parser: 'mathts' | 'builtin');
19
+ }
9
20
  //# sourceMappingURL=euler-guard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"euler-guard.d.ts","sourceRoot":"","sources":["../../src/cli/euler-guard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAE9E"}
1
+ {"version":3,"file":"euler-guard.d.ts","sourceRoot":"","sources":["../../src/cli/euler-guard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAE7C,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS;IAFvC,YACW,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,GAAG,SAAS,EAItC;CACF"}
@@ -4,8 +4,22 @@
4
4
  * @module cli/euler-guard
5
5
  * @internal
6
6
  */
7
- /** Name the active parser on a formula error a script can read. @internal */
8
- export function withParser(message, kind) {
9
- return message.includes('(formula parser:') ? message : `${message} (formula parser: ${kind})`;
7
+ import { UsageError } from './errors.js';
8
+ /**
9
+ * A usage error from the formula parser or its evaluation, tagged once with
10
+ * the parser that read it. The tag is added here, at construction, so a
11
+ * message is never inspected for an earlier tag: each throw site builds it
12
+ * from the parser's own message.
13
+ * @internal
14
+ */
15
+ export class FormulaUsageError extends UsageError {
16
+ detail;
17
+ parser;
18
+ constructor(detail, parser) {
19
+ super(`${detail} (formula parser: ${parser})`);
20
+ this.detail = detail;
21
+ this.parser = parser;
22
+ this.name = 'FormulaUsageError';
23
+ }
10
24
  }
11
25
  //# sourceMappingURL=euler-guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"euler-guard.js","sourceRoot":"","sources":["../../src/cli/euler-guard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,6EAA6E;AAC7E,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,IAA0B;IACpE,OAAO,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,qBAAqB,IAAI,GAAG,CAAC;AACjG,CAAC"}
1
+ {"version":3,"file":"euler-guard.js","sourceRoot":"","sources":["../../src/cli/euler-guard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAEpC,MAAM;IACN,MAAM;IAFjB,YACW,MAAc,EACd,MAA4B;QAErC,KAAK,CAAC,GAAG,MAAM,qBAAqB,MAAM,GAAG,CAAC,CAAC;sBAHtC,MAAM;sBACN,MAAM;QAGf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF","sourcesContent":["/**\n * Name the active formula parser on an error a script can read.\n *\n * @module cli/euler-guard\n * @internal\n */\nimport { UsageError } from './errors.js';\n\n/**\n * A usage error from the formula parser or its evaluation, tagged once with\n * the parser that read it. The tag is added here, at construction, so a\n * message is never inspected for an earlier tag: each throw site builds it\n * from the parser's own message.\n * @internal\n */\nexport class FormulaUsageError extends UsageError {\n constructor(\n readonly detail: string,\n readonly parser: 'mathts' | 'builtin',\n ) {\n super(`${detail} (formula parser: ${parser})`);\n this.name = 'FormulaUsageError';\n }\n}\n\n"]}
@@ -8,16 +8,11 @@
8
8
  * @module cli/eval-numbers
9
9
  * @internal
10
10
  */
11
- import type { UnitMode } from '../dimensional/natural-units.js';
12
- /** ħ in eval is the exact quotient H_SI/(2π). */
13
- export declare const HBAR_TRUNCATION_NOTE: string;
11
+ import { type UnitMode } from '../dimensional/natural-units.js';
14
12
  /**
15
- * Registered constants an eval may omit, taken from {@link CONSTANTS} so a
16
- * new registry leaf is a formula name without a second list. Aliases below
17
- * are spellings that are not registry keys. `m_p` and `m_proton` are the
18
- * proton mass, `N_A` is the Avogadro constant, and `F` is the Faraday
19
- * constant `N_A * e`. Bare `sigma` is not an alias of `sigma_sb`. Explicit
20
- * `name=` wins over these.
13
+ * Registered constants an eval may omit: every spelling of the constant
14
+ * registry, plus `pi` and `tau`. A hyphenated spelling is not an identifier
15
+ * the parser can read and is left out. Explicit `name=` wins over these.
21
16
  *
22
17
  * `2pi`, `4pi` and `8pi` are in the scope. The MathTS parser reads those
23
18
  * spellings as n·pi before the scope is consulted. The scope values match
@@ -1 +1 @@
1
- {"version":3,"file":"eval-numbers.d.ts","sourceRoot":"","sources":["../../src/cli/eval-numbers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAEhE,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,QAEiE,CAAC;AAEnG;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BlE"}
1
+ {"version":3,"file":"eval-numbers.d.ts","sourceRoot":"","sources":["../../src/cli/eval-numbers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE1F;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQlE"}
@@ -8,20 +8,12 @@
8
8
  * @module cli/eval-numbers
9
9
  * @internal
10
10
  */
11
- import { E_SI, FARADAY_SI, M_E_SI, M_PROTON_SI, M_SUN_SI, N_A_SI } from '../core/constants.js';
12
- import { CONSTANT_SPELLINGS } from '../dimensional/dimension-spec.js';
13
- import { MU0_SI } from '../dimensional/formula-names.js';
14
- import { CONSTANTS } from '../dimensional/symbolic-constants.js';
15
- /** ħ in eval is the exact quotient H_SI/(2π). */
16
- export const HBAR_TRUNCATION_NOTE = 'note: hbar is HBAR_SI = H_SI/(2π), the exact reduced Planck constant. ' +
17
- 'The CODATA display 1.054571817e-34 is that quotient truncated (relative difference 6.127e-10).';
11
+ import { constantScope } from '../dimensional/symbolic-constants.js';
12
+ import { naturalConstantOverrides } from '../dimensional/natural-units.js';
18
13
  /**
19
- * Registered constants an eval may omit, taken from {@link CONSTANTS} so a
20
- * new registry leaf is a formula name without a second list. Aliases below
21
- * are spellings that are not registry keys. `m_p` and `m_proton` are the
22
- * proton mass, `N_A` is the Avogadro constant, and `F` is the Faraday
23
- * constant `N_A * e`. Bare `sigma` is not an alias of `sigma_sb`. Explicit
24
- * `name=` wins over these.
14
+ * Registered constants an eval may omit: every spelling of the constant
15
+ * registry, plus `pi` and `tau`. A hyphenated spelling is not an identifier
16
+ * the parser can read and is left out. Explicit `name=` wins over these.
25
17
  *
26
18
  * `2pi`, `4pi` and `8pi` are in the scope. The MathTS parser reads those
27
19
  * spellings as n·pi before the scope is consulted. The scope values match
@@ -30,35 +22,13 @@ export const HBAR_TRUNCATION_NOTE = 'note: hbar is HBAR_SI = H_SI/(2π), the exa
30
22
  */
31
23
  export function codataScope(mode) {
32
24
  const scope = {};
33
- for (const [name, c] of Object.entries(CONSTANTS))
34
- scope[name] = c.value;
35
- scope.e_charge = E_SI;
36
- scope.m_e = M_E_SI;
37
- scope.m_p = M_PROTON_SI;
38
- scope.m_proton = M_PROTON_SI;
39
- scope.N_A = N_A_SI;
40
- scope.F = FARADAY_SI;
41
- scope.M_sun = M_SUN_SI;
42
- for (const { names } of CONSTANT_SPELLINGS) {
43
- const canonical = names[0];
44
- const fromRegistry = CONSTANTS[canonical]?.value;
45
- const value = fromRegistry ?? (canonical === 'mu_0' ? MU0_SI : undefined);
46
- if (value === undefined)
47
- continue;
48
- for (const alias of names) {
49
- if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(alias))
50
- continue;
51
- if (scope[alias] === undefined)
52
- scope[alias] = value;
53
- }
25
+ for (const [name, value] of Object.entries(constantScope())) {
26
+ // A hyphenated spelling (`wien-constant`) is not a formula identifier; `8pi` is read as 8·pi.
27
+ if (!name.includes('-'))
28
+ scope[name] = value;
54
29
  }
55
- if (mode !== 'si') {
56
- scope.c = 1;
57
- scope.hbar = 1;
58
- scope.h = 2 * Math.PI;
59
- }
60
- if (mode === 'geometrized')
61
- scope.G = 1;
30
+ if (mode !== 'si')
31
+ Object.assign(scope, naturalConstantOverrides(mode));
62
32
  return scope;
63
33
  }
64
34
  //# sourceMappingURL=eval-numbers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eval-numbers.js","sourceRoot":"","sources":["../../src/cli/eval-numbers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAGjE,iDAAiD;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAC/B,wEAAwE;IACxE,gGAAgG,CAAC;AAEnG;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACzE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;IACnB,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC;IACxB,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC;IAC7B,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;IACnB,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IACrB,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;IACvB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,kBAAkB,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAC5B,MAAM,YAAY,GAAI,SAA2D,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;QACpG,MAAM,KAAK,GAAG,YAAY,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,SAAS;YACtD,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACvD,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACZ,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACf,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,IAAI,KAAK,aAAa;QAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"eval-numbers.js","sourceRoot":"","sources":["../../src/cli/eval-numbers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAiB,MAAM,iCAAiC,CAAC;AAE1F;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC;QAC5D,8FAA8F;QAC9F,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC/C,CAAC;IACD,IAAI,IAAI,KAAK,IAAI;QAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/**\n * Numbers `upt eval` understands: a bare numeral, a numeral with a unit, and\n * the CODATA names a script should not have to paste.\n *\n * Bare `e` is the elementary charge, taken from the constant registry.\n * Euler's number is `exp(x)`. `E` is energy and is not filled in.\n *\n * @module cli/eval-numbers\n * @internal\n */\n\nimport { constantScope } from '../dimensional/symbolic-constants.js';\nimport { naturalConstantOverrides, type UnitMode } from '../dimensional/natural-units.js';\n\n/**\n * Registered constants an eval may omit: every spelling of the constant\n * registry, plus `pi` and `tau`. A hyphenated spelling is not an identifier\n * the parser can read and is left out. Explicit `name=` wins over these.\n *\n * `2pi`, `4pi` and `8pi` are in the scope. The MathTS parser reads those\n * spellings as n·pi before the scope is consulted. The scope values match\n * that reading.\n * @internal\n */\nexport function codataScope(mode: UnitMode): Record<string, number> {\n const scope: Record<string, number> = {};\n for (const [name, value] of Object.entries(constantScope())) {\n // A hyphenated spelling (`wien-constant`) is not a formula identifier; `8pi` is read as 8·pi.\n if (!name.includes('-')) scope[name] = value;\n }\n if (mode !== 'si') Object.assign(scope, naturalConstantOverrides(mode));\n return scope;\n}\n\n"]}
@@ -17,9 +17,36 @@ export declare const printEval: (n: ExprNode) => string | null;
17
17
  export declare function latexName(name: string): string;
18
18
  /** The AST in LaTeX; `null` for a node other than `symbol` or `op`. */
19
19
  export declare function printLatex(n: ExprNode): string | null;
20
+ /** One coherent SI unit of the table: a scale of exactly 1 and a dimension. */
21
+ export interface CoherentUnit {
22
+ readonly name: string;
23
+ readonly dim: Dimension;
24
+ }
20
25
  /**
21
- * A dimension as SI base units, numerator before one `/` (`m^3/(kg*s^2)`), a bare denominator as
22
- * negative powers (`s^-1`), and `1` when dimensionless: the forms `parseUnit` reads back.
26
+ * The coherent named SI units of a unit table (`unitRows()`): scale exactly 1,
27
+ * not dimensionless, the first spelling the table gives for each dimension
28
+ * (`ohm` before `Ω`). The seven base units are added so a label can mix them.
29
+ * A cycle-counting unit (`Hz`, `rpm`; the table's `cycles` flag) is never a
30
+ * label: a 1/s output may be an angular frequency, and `Hz` would say it
31
+ * counts cycles. Such an output reads `1/s`, which is its dimension.
23
32
  */
33
+ export declare function coherentUnits(rows: ReadonlyMap<string, {
34
+ readonly scale: {
35
+ readonly num: bigint;
36
+ readonly den: bigint;
37
+ readonly irrational: number;
38
+ };
39
+ readonly dim: Dimension;
40
+ readonly cycles?: true;
41
+ }>): CoherentUnit[];
42
+ /**
43
+ * A dimension's label: the one coherent named unit whose dimension it is (`Pa`, `J`, `V`,
44
+ * `ohm`, `T`), else the SI base form (`m/s`, `kg^2*m^4/(s^5*A^2)`). A product of two
45
+ * named units is never chosen: a search over pairs once labelled a velocity `W/N` and a
46
+ * voltage-noise density `J*ohm`, readings that are dimensionally right and physically
47
+ * unreadable. Presentation only: the dimension is the fact, the label is a reading of it.
48
+ */
49
+ export declare function derivedUnitOf(dim: Dimension, units: readonly CoherentUnit[]): string;
50
+ /** The SI base-unit form of a dimension (`m/s`, `kg*m^2/(s^3*A)`), `1` when dimensionless. */
24
51
  export declare function siUnitOf(dim: Dimension): string;
25
52
  //# sourceMappingURL=expr-print.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expr-print.d.ts","sourceRoot":"","sources":["../../src/cli/expr-print.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAUzD,6DAA6D;AAC7D,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKvD,CAAC;AAkCF,eAAO,MAAM,YAAY,MAAO,QAAQ,KAAG,MAAM,GAAG,IAA8B,CAAC;AACnF,eAAO,MAAM,SAAS,MAAO,QAAQ,KAAG,MAAM,GAAG,IAA2B,CAAC;AAe7E,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CA4BrD;AAYD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAQ/C"}
1
+ {"version":3,"file":"expr-print.d.ts","sourceRoot":"","sources":["../../src/cli/expr-print.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAUzD,6DAA6D;AAC7D,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKvD,CAAC;AAkCF,eAAO,MAAM,YAAY,MAAO,QAAQ,KAAG,MAAM,GAAG,IAA8B,CAAC;AACnF,eAAO,MAAM,SAAS,MAAO,QAAQ,KAAG,MAAM,GAAG,IAA2B,CAAC;AAe7E,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CA4BrD;AAoBD,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,CACf,MAAM,EACN;IAAE,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAE,CACjJ,GACA,YAAY,EAAE,CAgBhB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAKpF;AAED,8FAA8F;AAC9F,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAQ/C"}
@@ -104,10 +104,54 @@ const SI_BASE = [
104
104
  ['N', 'mol'],
105
105
  ['J', 'cd'],
106
106
  ];
107
+ const DIM_KEYS = ['L', 'M', 'T', 'I', 'Theta', 'N', 'J'];
108
+ const dimEqual = (a, b) => DIM_KEYS.every((k) => (a[k] ?? 0) === (b[k] ?? 0));
109
+ const dimPow = (a, n) => Object.fromEntries(DIM_KEYS.map((k) => [k, (a[k] ?? 0) * n]));
110
+ const dimMul = (a, b) => Object.fromEntries(DIM_KEYS.map((k) => [k, (a[k] ?? 0) + (b[k] ?? 0)]));
111
+ const isDimensionless = (d) => DIM_KEYS.every((k) => (d[k] ?? 0) === 0);
107
112
  /**
108
- * A dimension as SI base units, numerator before one `/` (`m^3/(kg*s^2)`), a bare denominator as
109
- * negative powers (`s^-1`), and `1` when dimensionless: the forms `parseUnit` reads back.
113
+ * The coherent named SI units of a unit table (`unitRows()`): scale exactly 1,
114
+ * not dimensionless, the first spelling the table gives for each dimension
115
+ * (`ohm` before `Ω`). The seven base units are added so a label can mix them.
116
+ * A cycle-counting unit (`Hz`, `rpm`; the table's `cycles` flag) is never a
117
+ * label: a 1/s output may be an angular frequency, and `Hz` would say it
118
+ * counts cycles. Such an output reads `1/s`, which is its dimension.
110
119
  */
120
+ export function coherentUnits(rows) {
121
+ const out = [];
122
+ const seen = [];
123
+ const add = (name, dim) => {
124
+ if (isDimensionless(dim) || seen.some((d) => dimEqual(d, dim)))
125
+ return;
126
+ seen.push(dim);
127
+ out.push({ name, dim });
128
+ };
129
+ for (const [name, row] of rows) {
130
+ if (row.cycles === true)
131
+ continue;
132
+ if (row.scale.num === 1n && row.scale.den === 1n && row.scale.irrational === 1)
133
+ add(name, row.dim);
134
+ }
135
+ for (const [k, u] of SI_BASE) {
136
+ add(u, Object.fromEntries(DIM_KEYS.map((key) => [key, key === k ? 1 : 0])));
137
+ }
138
+ return out;
139
+ }
140
+ /**
141
+ * A dimension's label: the one coherent named unit whose dimension it is (`Pa`, `J`, `V`,
142
+ * `ohm`, `T`), else the SI base form (`m/s`, `kg^2*m^4/(s^5*A^2)`). A product of two
143
+ * named units is never chosen: a search over pairs once labelled a velocity `W/N` and a
144
+ * voltage-noise density `J*ohm`, readings that are dimensionally right and physically
145
+ * unreadable. Presentation only: the dimension is the fact, the label is a reading of it.
146
+ */
147
+ export function derivedUnitOf(dim, units) {
148
+ if (isDimensionless(dim))
149
+ return '1';
150
+ const base = new Set(SI_BASE.map(([, u]) => u));
151
+ const named = units.find((u) => !base.has(u.name) && dimEqual(u.dim, dim));
152
+ return named === undefined ? siUnitOf(dim) : named.name;
153
+ }
154
+ /** The SI base-unit form of a dimension (`m/s`, `kg*m^2/(s^3*A)`), `1` when dimensionless. */
111
155
  export function siUnitOf(dim) {
112
156
  const factor = (u, e) => (e === 1 ? u : `${u}^${e}`);
113
157
  const num = SI_BASE.filter(([k]) => dim[k] > 0).map(([k, u]) => factor(u, dim[k]));
@@ -1 +1 @@
1
- {"version":3,"file":"expr-print.js","sourceRoot":"","sources":["../../src/cli/expr-print.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expr-print.js","sourceRoot":"","sources":["../../src/cli/expr-print.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The three printed forms of a scalar composed AST (`upt symbolic`, audit F12 and I10):\n *\n * - DISPLAY: plain text for the reader, `·` for a product.\n * - EVAL: a formula `upt eval` parses, every named factor spelled so it evaluates (`8pi` → `(8*pi)`).\n * - LATEX: `\\frac` for every division, `\\cdot` for a product, braces for every exponent.\n *\n * Only `symbol` and `op` nodes are printed; any other node gives `null`, never a guess.\n */\nimport type { ExprNode } from '../dimensional/validator.js';\nimport type { Dimension } from '../dimensional/types.js';\n\ninterface PrintStyle {\n readonly times: string;\n readonly divide: string;\n readonly symbol: (name: string) => string;\n}\n\nconst DISPLAY: PrintStyle = { times: '·', divide: ' / ', symbol: (name) => name };\n\n/** Named numeric stubs spelled so `upt eval` parses them. */\nexport const EVAL_STUBS: Readonly<Record<string, string>> = {\n '8pi': '(8*pi)',\n '4pi': '(4*pi)',\n '2pi': '(2*pi)',\n ln2: 'ln(2)',\n};\nconst EVAL: PrintStyle = { times: '*', divide: '/', symbol: (name) => EVAL_STUBS[name] ?? name };\n\n/**\n * Precedence-aware printing. Every divisor that is not a bare power is\n * grouped, so `a / (b·c)` never prints as `a / b·c` (audit F12); a quotient\n * inside a product or as a dividend is grouped too, for the reader.\n */\nfunction printInfix(n: ExprNode, style: PrintStyle): string | null {\n if (n.kind === 'symbol') return style.symbol(n.name);\n if (n.kind !== 'op') return null;\n const parts: string[] = [];\n for (let i = 0; i < n.args.length; i++) {\n const a = n.args[i]!;\n const s = printInfix(a, style);\n if (s === null) return null;\n const aOp = a.kind === 'op' ? a.op : null;\n const group =\n aOp !== null &&\n (n.op === '^'\n ? true\n : n.op === '/'\n ? i === 0\n ? aOp === '+' || aOp === '-' || aOp === '/'\n : aOp !== '^'\n : n.op === '*'\n ? aOp === '+' || aOp === '-' || aOp === '/'\n : n.op === '-' && i > 0 && (aOp === '+' || aOp === '-'));\n parts.push(group ? `(${s})` : s);\n }\n const sep = n.op === '*' ? style.times : n.op === '/' ? style.divide : n.op === '^' ? '^' : ` ${n.op} `;\n return parts.join(sep);\n}\n\nexport const printDisplay = (n: ExprNode): string | null => printInfix(n, DISPLAY);\nexport const printEval = (n: ExprNode): string | null => printInfix(n, EVAL);\n\n/** LaTeX for the constant and stub names; any other name is spelled by {@link latexName}. */\nconst LATEX_NAMES: Readonly<Record<string, string>> = {\n hbar: '\\\\hbar',\n k_B: 'k_{\\\\mathrm{B}}',\n '8pi': '8\\\\pi',\n '4pi': '4\\\\pi',\n '2pi': '2\\\\pi',\n ln2: '\\\\ln 2',\n pi: '\\\\pi',\n epsilon_0: '\\\\varepsilon_{0}',\n sigma_sb: '\\\\sigma_{\\\\mathrm{SB}}',\n};\n\n/** A name in LaTeX: one letter or a number as is, a hyphenated name as text, otherwise upright. */\nexport function latexName(name: string): string {\n const known = LATEX_NAMES[name];\n if (known !== undefined) return known;\n if (/^[A-Za-z]$/.test(name) || Number.isFinite(Number(name))) return name;\n return name.includes('-') ? `\\\\text{${name}}` : `\\\\mathrm{${name.replace(/_/g, '\\\\_')}}`;\n}\n\n/** The AST in LaTeX; `null` for a node other than `symbol` or `op`. */\nexport function printLatex(n: ExprNode): string | null {\n if (n.kind === 'symbol') return latexName(n.name);\n if (n.kind !== 'op') return null;\n const args: string[] = [];\n for (const a of n.args) {\n const s = printLatex(a);\n if (s === null) return null;\n args.push(s);\n }\n const isOp = (a: ExprNode, ...ops: string[]): boolean => a.kind === 'op' && ops.includes(a.op);\n const paren = (s: string): string => `\\\\left(${s}\\\\right)`;\n switch (n.op) {\n case '/':\n return args.slice(1).reduce((num, den) => `\\\\frac{${num}}{${den}}`, args[0]!);\n case '*':\n return args.map((s, i) => (isOp(n.args[i]!, '+', '-') ? paren(s) : s)).join(' \\\\cdot ');\n case '^': {\n // The validator's arity guard makes `^` binary; a base that is not a symbol is grouped.\n const base = n.args[0]!.kind === 'symbol' ? args[0]! : paren(args[0]!);\n return `{${base}}^{${args[1]}}`;\n }\n case '+':\n return args.join(' + ');\n case '-':\n return args.length === 1\n ? `-${isOp(n.args[0]!, '+', '-') ? paren(args[0]!) : args[0]}`\n : args.map((s, i) => (i > 0 && isOp(n.args[i]!, '+', '-') ? paren(s) : s)).join(' - ');\n }\n}\n\nconst SI_BASE: readonly (readonly [keyof Dimension, string])[] = [\n ['M', 'kg'],\n ['L', 'm'],\n ['T', 's'],\n ['I', 'A'],\n ['Theta', 'K'],\n ['N', 'mol'],\n ['J', 'cd'],\n];\n\nconst DIM_KEYS: readonly (keyof Dimension)[] = ['L', 'M', 'T', 'I', 'Theta', 'N', 'J'];\nconst dimEqual = (a: Dimension, b: Dimension): boolean => DIM_KEYS.every((k) => (a[k] ?? 0) === (b[k] ?? 0));\nconst dimPow = (a: Dimension, n: number): Dimension =>\n Object.fromEntries(DIM_KEYS.map((k) => [k, (a[k] ?? 0) * n])) as unknown as Dimension;\nconst dimMul = (a: Dimension, b: Dimension): Dimension =>\n Object.fromEntries(DIM_KEYS.map((k) => [k, (a[k] ?? 0) + (b[k] ?? 0)])) as unknown as Dimension;\nconst isDimensionless = (d: Dimension): boolean => DIM_KEYS.every((k) => (d[k] ?? 0) === 0);\n\n/** One coherent SI unit of the table: a scale of exactly 1 and a dimension. */\nexport interface CoherentUnit {\n readonly name: string;\n readonly dim: Dimension;\n}\n\n/**\n * The coherent named SI units of a unit table (`unitRows()`): scale exactly 1,\n * not dimensionless, the first spelling the table gives for each dimension\n * (`ohm` before `Ω`). The seven base units are added so a label can mix them.\n * A cycle-counting unit (`Hz`, `rpm`; the table's `cycles` flag) is never a\n * label: a 1/s output may be an angular frequency, and `Hz` would say it\n * counts cycles. Such an output reads `1/s`, which is its dimension.\n */\nexport function coherentUnits(\n rows: ReadonlyMap<\n string,\n { readonly scale: { readonly num: bigint; readonly den: bigint; readonly irrational: number }; readonly dim: Dimension; readonly cycles?: true }\n >,\n): CoherentUnit[] {\n const out: CoherentUnit[] = [];\n const seen: Dimension[] = [];\n const add = (name: string, dim: Dimension): void => {\n if (isDimensionless(dim) || seen.some((d) => dimEqual(d, dim))) return;\n seen.push(dim);\n out.push({ name, dim });\n };\n for (const [name, row] of rows) {\n if (row.cycles === true) continue;\n if (row.scale.num === 1n && row.scale.den === 1n && row.scale.irrational === 1) add(name, row.dim);\n }\n for (const [k, u] of SI_BASE) {\n add(u, Object.fromEntries(DIM_KEYS.map((key) => [key, key === k ? 1 : 0])) as unknown as Dimension);\n }\n return out;\n}\n\n/**\n * A dimension's label: the one coherent named unit whose dimension it is (`Pa`, `J`, `V`,\n * `ohm`, `T`), else the SI base form (`m/s`, `kg^2*m^4/(s^5*A^2)`). A product of two\n * named units is never chosen: a search over pairs once labelled a velocity `W/N` and a\n * voltage-noise density `J*ohm`, readings that are dimensionally right and physically\n * unreadable. Presentation only: the dimension is the fact, the label is a reading of it.\n */\nexport function derivedUnitOf(dim: Dimension, units: readonly CoherentUnit[]): string {\n if (isDimensionless(dim)) return '1';\n const base = new Set(SI_BASE.map(([, u]) => u));\n const named = units.find((u) => !base.has(u.name) && dimEqual(u.dim, dim));\n return named === undefined ? siUnitOf(dim) : named.name;\n}\n\n/** The SI base-unit form of a dimension (`m/s`, `kg*m^2/(s^3*A)`), `1` when dimensionless. */\nexport function siUnitOf(dim: Dimension): string {\n const factor = (u: string, e: number): string => (e === 1 ? u : `${u}^${e}`);\n const num = SI_BASE.filter(([k]) => dim[k] > 0).map(([k, u]) => factor(u, dim[k]));\n const den = SI_BASE.filter(([k]) => dim[k] < 0).map(([k, u]) => factor(u, -dim[k]));\n if (num.length === 0 && den.length === 0) return '1';\n if (num.length === 0) return SI_BASE.filter(([k]) => dim[k] < 0).map(([k, u]) => factor(u, dim[k])).join('*');\n if (den.length === 0) return num.join('*');\n return `${num.join('*')}/${den.length === 1 ? den[0] : `(${den.join('*')})`}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"flag-help.js","sourceRoot":"","sources":["../../src/cli/flag-help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flag-help.js","sourceRoot":"","sources":["../../src/cli/flag-help.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Flag text for `upt help` and for `docs/CLI.md`.\n *\n * The parser reads `FlagSpec` (`args.ts`). This module renders the same\n * objects. A command's help string is `commandHelp(prose, flags)`, so the\n * Flags section cannot list a different set than the parser accepts.\n */\n\nimport type { FlagSpec } from './args.js';\n\n/** `--json` on a data-bearing command. The same object is the global option. */\nexport const JSON_FLAG: FlagSpec = {\n name: '--json',\n valueStyle: 'none',\n description: 'Write a JSON envelope to stdout instead of the text report.',\n};\n\n/**\n * `--source=VALUE` for a graph command.\n * `detail` is the sentence; `defaultValue` is what the command uses when the flag is absent.\n */\nexport function sourceFlag(defaultValue: string, detail: string): FlagSpec {\n return {\n name: '--source',\n valueStyle: 'attached',\n description: detail,\n defaultValue,\n };\n}\n\n/** Dispatcher options. `main.ts` accepts these before the command name. */\nexport const GLOBAL_FLAGS: readonly FlagSpec[] = [\n {\n name: '--help',\n valueStyle: 'none',\n description:\n 'Show this command list, or `upt help <command>` for one command. `-h` is the same. `upt <command> --help` prints that command.',\n },\n {\n name: '--version',\n valueStyle: 'none',\n description: 'Print the package version as one semver line and exit. `-v` and `upt version` are the same. Neither takes --json.',\n },\n JSON_FLAG,\n {\n name: '--record',\n valueStyle: 'attached',\n description:\n 'Run the following command unchanged and append one JSONL entry to FILE: arguments, stdout, stderr, exit code, versions, and hashes. A failed run is recorded too.',\n },\n {\n name: '--replay',\n valueStyle: 'attached',\n description:\n 'Re-run every entry of FILE and report reproduced, differs, or not replayable. Takes no command. `--json` after it selects the JSON report. Exit 0 when every entry is reproduced and unchanged, 3 when any differs, 1 otherwise.',\n },\n {\n name: '--show-record',\n valueStyle: 'attached',\n description: 'Print FILE as a transcript and run nothing. Takes no command. `--json` after it selects the JSON report.',\n },\n];\n\nexport const BUILTIN_VERBS: readonly {\n name: string;\n summary: string;\n example: string;\n group: 'utilities';\n}[] = [\n {\n name: 'help',\n summary: 'Show every command, or one command\\'s usage and flags. `upt help statuses` defines the status words.',\n example: 'upt help eval',\n group: 'utilities',\n },\n {\n name: 'version',\n summary: 'Print the installed package version as one semver line.',\n example: 'upt version',\n group: 'utilities',\n },\n];\n\nexport function flagHeading(flag: FlagSpec): string {\n const repeat = flag.repeatable ? ' (repeatable)' : '';\n switch (flag.valueStyle) {\n case 'none':\n return `${flag.name}${repeat}`;\n case 'attached':\n return `${flag.name}=VALUE${repeat}`;\n case 'next':\n return `${flag.name} VALUE${repeat}`;\n case 'either':\n return `${flag.name}=VALUE${repeat} (or ${flag.name} VALUE)`;\n default: {\n const _never: never = flag.valueStyle;\n return _never;\n }\n }\n}\n\n/** The Flags block a command's help string ends with. Empty when the command takes no flags. */\nexport function renderFlagCatalog(flags: readonly FlagSpec[], heading = 'Flags:'): string {\n if (flags.length === 0) return '';\n const lines = [heading];\n for (const flag of flags) {\n if (flag.description === undefined || flag.description.trim() === '') {\n throw new Error(`flag ${flag.name} has no description`);\n }\n lines.push(` ${flagHeading(flag)}`);\n const def = flag.defaultValue === undefined ? '' : ` Default: ${flag.defaultValue}.`;\n lines.push(` ${flag.description}${def}`);\n }\n return lines.join('\\n');\n}\n\n/** Prose plus the flag catalog. The catalog is the spec; the prose is the narrative. */\nexport function commandHelp(prose: string, flags: readonly FlagSpec[]): string {\n const catalog = renderFlagCatalog(flags);\n return catalog === '' ? prose : `${prose}\\n${catalog}`;\n}\n\n/**\n * Flags whose description is missing from `help`.\n * A command that forgot `commandHelp` fails here. A description that is present does not.\n */\nexport function undocumentedFlags(help: string, flags: readonly FlagSpec[]): string[] {\n return flags.filter((flag) => flag.description === undefined || !help.includes(flag.description)).map((flag) => flag.name);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"graphs.js","sourceRoot":"","sources":["../../src/cli/graphs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,MAAM,UAAU,YAAY,CAC1B,GAAsB,EACtB,KAA0B;IAE1B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS;YACZ,OAAO;gBACL,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC;gBAC7B,KAAK,EAAE,YAAY,GAAG,CAAC,gBAAgB,CAAC,MAAM,UAAU;gBACxD,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,eAAe,CAAC;gBAC/B,KAAK,EAAE,wDAAwD;gBAC/D,MAAM,EAAE,WAAW;aACpB,CAAC;QACJ,KAAK,MAAM;YACT,OAAO;gBACL,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,eAAe,CAAC;gBACrD,KAAK,EAAE,qBAAqB;gBAC5B,MAAM,EAAE,MAAM;aACf,CAAC;QACJ;YACE,MAAM,IAAI,QAAQ,CAAC,0BAA0B,GAAG,0CAA0C,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAaD,8GAA8G;AAC9G,MAAM,UAAU,iBAAiB,CAC/B,GAAsB,EACtB,IAAiE;IAEjE,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QACxD,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5D,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,UAAU,CAAC,KAA4B;IACrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,aAAa,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC/G,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAC,CAA0C;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,OAAO,WAAW,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;AAC7G,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAC,CAAmC;IAC1D,OAAO,2DAA2D,CAAC,CAAC,gBAAgB,0CAA0C,CAAC,CAAC,KAAK,gBAAgB,CAAC;AACxJ,CAAC"}
1
+ {"version":3,"file":"graphs.js","sourceRoot":"","sources":["../../src/cli/graphs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,MAAM,UAAU,YAAY,CAC1B,GAAsB,EACtB,KAA0B;IAE1B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS;YACZ,OAAO;gBACL,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC;gBAC7B,KAAK,EAAE,YAAY,GAAG,CAAC,gBAAgB,CAAC,MAAM,UAAU;gBACxD,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,eAAe,CAAC;gBAC/B,KAAK,EAAE,wDAAwD;gBAC/D,MAAM,EAAE,WAAW;aACpB,CAAC;QACJ,KAAK,MAAM;YACT,OAAO;gBACL,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,eAAe,CAAC;gBACrD,KAAK,EAAE,qBAAqB;gBAC5B,MAAM,EAAE,MAAM;aACf,CAAC;QACJ;YACE,MAAM,IAAI,QAAQ,CAAC,0BAA0B,GAAG,0CAA0C,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAaD,8GAA8G;AAC9G,MAAM,UAAU,iBAAiB,CAC/B,GAAsB,EACtB,IAAiE;IAEjE,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QACxD,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5D,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,UAAU,CAAC,KAA4B;IACrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,aAAa,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC/G,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAC,CAA0C;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,OAAO,WAAW,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;AAC7G,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAC,CAAmC;IAC1D,OAAO,2DAA2D,CAAC,CAAC,gBAAgB,0CAA0C,CAAC,CAAC,KAAK,gBAAgB,CAAC;AACxJ,CAAC","sourcesContent":["/**\n * Shared `--source=catalog|canonical|both` graph resolution — replaces\n * `bin/upt.mjs`'s `resolveGraph` (lines 53-67). Every analysis command\n * (`discover` / `candidates` / `map` / ...) that accepts `--source` calls\n * this once to get the graph + a human-readable label for its banner.\n */\n\nimport type { BridgeEdge } from '../composition/edge.js';\nimport type { ParsedArgs } from './args.js';\nimport type { CommandCtx } from './command.js';\nimport { CliError } from './errors.js';\n\nexport type SourceName = 'catalog' | 'canonical' | 'both';\n\nexport function resolveGraph(\n api: CommandCtx['api'],\n flags: ParsedArgs['flags']\n): { graph: BridgeEdge[]; label: string; source: SourceName } {\n const values = flags.get('source');\n const src = values && values.length > 0 ? values[values.length - 1] : 'catalog';\n\n switch (src) {\n case 'catalog':\n return {\n graph: [...api.CATALOG_GRAPH],\n label: `catalog (${api.BRIDGE_EQUATIONS.length}-bridge)`,\n source: 'catalog',\n };\n case 'canonical':\n return {\n graph: [...api.CANONICAL_GRAPH],\n label: 'canonical (standard-physics L-layer, bridges excluded)',\n source: 'canonical',\n };\n case 'both':\n return {\n graph: [...api.CATALOG_GRAPH, ...api.CANONICAL_GRAPH],\n label: 'catalog + canonical',\n source: 'both',\n };\n default:\n throw new CliError(`upt: unknown --source='${src}' (expected: catalog | canonical | both)`);\n }\n}\n\n/**\n * What a result is anchored to (audit I3), printed beside the source in text and carried as the\n * envelope's `anchor` in `--json`. Two different anchors exist and are never merged:\n * `groundTruth` is the discovery funnel's known values (`--anchor=k=v`, default one solar mass);\n * `core` is the set of established-confidence edges that \"anchored\" means in a linkage view.\n */\nexport interface AnchorScope {\n readonly groundTruth?: { readonly values: Readonly<Record<string, number>>; readonly isDefault: boolean };\n readonly core?: { readonly establishedEdges: number; readonly edges: number };\n}\n\n/** The discovery ground truth a result is relative to: the `--anchor` values when given, else the default. */\nexport function groundTruthAnchor(\n api: CommandCtx['api'],\n opts: { readonly groundTruth?: Readonly<Record<string, number>> },\n): NonNullable<AnchorScope['groundTruth']> {\n return opts.groundTruth === undefined\n ? { values: { ...api.ANCHOR_DEFAULT }, isDefault: true }\n : { values: { ...opts.groundTruth }, isDefault: false };\n}\n\n/** The established core of `graph`: its established-confidence edge count beside its edge count. */\nexport function coreAnchor(graph: readonly BridgeEdge[]): NonNullable<AnchorScope['core']> {\n return { establishedEdges: graph.filter((e) => e.confidence === 'established').length, edges: graph.length };\n}\n\n/** The text line naming the ground-truth anchor and whether it is the default. */\nexport function groundTruthLine(a: NonNullable<AnchorScope['groundTruth']>): string {\n const values = Object.entries(a.values).map(([k, v]) => `${k}=${v}`).join(', ');\n return `anchor: ${values}${a.isDefault ? ' (the default; --anchor=k=v replaces it)' : ' (from --anchor)'}`;\n}\n\n/** The text line stating what \"anchored\" means for a graph's established core. */\nexport function coreLine(a: NonNullable<AnchorScope['core']>): string {\n return `anchored core: the clusters holding at least one of the ${a.establishedEdges} established-confidence edge(s) of the ${a.edges} in this graph`;\n}"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The defaults and limits a command's help states, read from the library constants that hold
3
+ * them. A flag's help once said "default 5000" while the library held 5000 in its own table:
4
+ * two copies of one number, free to part. A command cannot import a library value, so the
5
+ * values it prints come through this module, as `closed-form-range.ts` does for the evaluators.
6
+ *
7
+ * @module cli/library-defaults
8
+ */
9
+ /** `upt discover --max-orders`, as the help prints it. @internal */
10
+ export declare const DISCOVER_MAX_ORDERS_DEFAULT: string;
11
+ /** `upt probe --budget-ms`, as the help prints it. @internal */
12
+ export declare const PROBE_BUDGET_MS_DEFAULT: string;
13
+ /** `upt probe --holdout-tol`, as the help prints it. @internal */
14
+ export declare const PROBE_HOLDOUT_TOL_DEFAULT: string;
15
+ /** `upt probe study --alpha` when the file states none, as the help prints it. @internal */
16
+ export declare const PROBE_STUDY_ALPHA_DEFAULT: string;
17
+ /** The most powers a study file's `correction` may list in all. @internal */
18
+ export declare const PROBE_CORRECTION_TERMS_MAX = 6;
19
+ //# sourceMappingURL=library-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library-defaults.d.ts","sourceRoot":"","sources":["../../src/cli/library-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,oEAAoE;AACpE,eAAO,MAAM,2BAA2B,QAA0C,CAAC;AAEnF,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,QAA+C,CAAC;AAEpF,kEAAkE;AAClE,eAAO,MAAM,yBAAyB,QAA8B,CAAC;AAErE,4FAA4F;AAC5F,eAAO,MAAM,yBAAyB,QAAwB,CAAC;AAE/D,6EAA6E;AAC7E,eAAO,MAAM,0BAA0B,IAAuB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The defaults and limits a command's help states, read from the library constants that hold
3
+ * them. A flag's help once said "default 5000" while the library held 5000 in its own table:
4
+ * two copies of one number, free to part. A command cannot import a library value, so the
5
+ * values it prints come through this module, as `closed-form-range.ts` does for the evaluators.
6
+ *
7
+ * @module cli/library-defaults
8
+ */
9
+ import { DEFAULT_MAX_ORDERS_OF_MAGNITUDE } from '../composition/discovery.js';
10
+ import { DEFAULT_HOLDOUT_TOL, DEFAULT_SEARCH_BUDGET } from '../composition/probe/types.js';
11
+ import { DEFAULT_ALPHA, MAX_CORRECTION_TERMS } from '../composition/probe/study.js';
12
+ /** `upt discover --max-orders`, as the help prints it. @internal */
13
+ export const DISCOVER_MAX_ORDERS_DEFAULT = String(DEFAULT_MAX_ORDERS_OF_MAGNITUDE);
14
+ /** `upt probe --budget-ms`, as the help prints it. @internal */
15
+ export const PROBE_BUDGET_MS_DEFAULT = String(DEFAULT_SEARCH_BUDGET.maxWallClockMs);
16
+ /** `upt probe --holdout-tol`, as the help prints it. @internal */
17
+ export const PROBE_HOLDOUT_TOL_DEFAULT = String(DEFAULT_HOLDOUT_TOL);
18
+ /** `upt probe study --alpha` when the file states none, as the help prints it. @internal */
19
+ export const PROBE_STUDY_ALPHA_DEFAULT = String(DEFAULT_ALPHA);
20
+ /** The most powers a study file's `correction` may list in all. @internal */
21
+ export const PROBE_CORRECTION_TERMS_MAX = MAX_CORRECTION_TERMS;
22
+ //# sourceMappingURL=library-defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library-defaults.js","sourceRoot":"","sources":["../../src/cli/library-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAEpF,oEAAoE;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAEnF,gEAAgE;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;AAEpF,kEAAkE;AAClE,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAErE,4FAA4F;AAC5F,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAE/D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC","sourcesContent":["/**\n * The defaults and limits a command's help states, read from the library constants that hold\n * them. A flag's help once said \"default 5000\" while the library held 5000 in its own table:\n * two copies of one number, free to part. A command cannot import a library value, so the\n * values it prints come through this module, as `closed-form-range.ts` does for the evaluators.\n *\n * @module cli/library-defaults\n */\n\nimport { DEFAULT_MAX_ORDERS_OF_MAGNITUDE } from '../composition/discovery.js';\nimport { DEFAULT_HOLDOUT_TOL, DEFAULT_SEARCH_BUDGET } from '../composition/probe/types.js';\nimport { DEFAULT_ALPHA, MAX_CORRECTION_TERMS } from '../composition/probe/study.js';\n\n/** `upt discover --max-orders`, as the help prints it. @internal */\nexport const DISCOVER_MAX_ORDERS_DEFAULT = String(DEFAULT_MAX_ORDERS_OF_MAGNITUDE);\n\n/** `upt probe --budget-ms`, as the help prints it. @internal */\nexport const PROBE_BUDGET_MS_DEFAULT = String(DEFAULT_SEARCH_BUDGET.maxWallClockMs);\n\n/** `upt probe --holdout-tol`, as the help prints it. @internal */\nexport const PROBE_HOLDOUT_TOL_DEFAULT = String(DEFAULT_HOLDOUT_TOL);\n\n/** `upt probe study --alpha` when the file states none, as the help prints it. @internal */\nexport const PROBE_STUDY_ALPHA_DEFAULT = String(DEFAULT_ALPHA);\n\n/** The most powers a study file's `correction` may list in all. @internal */\nexport const PROBE_CORRECTION_TERMS_MAX = MAX_CORRECTION_TERMS;\n"]}
package/dist/cli/main.js CHANGED
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import * as api from '../cli-api.js';
17
17
  import { UsageError, CliError } from './errors.js';
18
- import { parseArgs } from './args.js';
18
+ import { optionTokens, parseArgs } from './args.js';
19
19
  import { packageVersion } from './version.js';
20
20
  import { glossaryText } from './statuses.js';
21
21
  import { listCommandNames, resolveCommand } from './command.js';
@@ -143,7 +143,8 @@ async function dispatch(argv, io) {
143
143
  if (cmd === 'help' || cmd === '--help' || cmd === '-h') {
144
144
  if (rest.length > 1)
145
145
  throw new UsageError('upt help takes at most one command name');
146
- const target = rest[0];
146
+ // `upt help -h` and `upt help --help` ask for the command list, as `upt help` does.
147
+ const target = rest[0] === '--help' || rest[0] === '-h' ? undefined : rest[0];
147
148
  if (target === 'statuses') {
148
149
  out(glossaryText());
149
150
  return 0;
@@ -175,7 +176,10 @@ async function dispatch(argv, io) {
175
176
  err(unknownCommandMessage(cmd));
176
177
  return 2;
177
178
  }
178
- if (rest.includes('--help')) {
179
+ // `-h` is `--help` on every command, as the global help says. A token after a
180
+ // bare `--` is a positional, so it is not read as the help request.
181
+ const options = optionTokens(rest);
182
+ if (options.includes('--help') || options.includes('-h')) {
179
183
  out(command.help);
180
184
  return 0;
181
185
  }