universal-physics-tensor 10.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (835) hide show
  1. package/README.md +39 -36
  2. package/bin/upt.mjs +13 -1
  3. package/data/applied-cases.json +1892 -0
  4. package/data/applied-cases.schema.json +194 -0
  5. package/data/atlas/atlas.json +25 -25
  6. package/data/atlas/atlas.jsonld +1 -1
  7. package/data/atlas/diffusion.json +6 -6
  8. package/data/atlas/oscillators.json +7 -7
  9. package/data/atlas/waves.json +14 -14
  10. package/data/atlas/witness-results.json +11 -11
  11. package/data/bridge-catalog.json +389 -230
  12. package/data/bridge-catalog.schema.json +45 -7
  13. package/data/units.json +6 -25
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +21 -15
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
  18. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  19. package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
  20. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  21. package/dist/atlas/benchmark/loader.js +2 -2
  22. package/dist/atlas/benchmark/loader.js.map +1 -1
  23. package/dist/atlas/benchmark/stats.d.ts +2 -2
  24. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  25. package/dist/atlas/benchmark/stats.js +9 -15
  26. package/dist/atlas/benchmark/stats.js.map +1 -1
  27. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  28. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  29. package/dist/atlas/catalog-formal-ref.js +52 -5
  30. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  31. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  32. package/dist/atlas/chain-pipeline.js +7 -8
  33. package/dist/atlas/chain-pipeline.js.map +1 -1
  34. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  35. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  36. package/dist/atlas/diffusion/bridges-closure.js +8 -12
  37. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  38. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  39. package/dist/atlas/diffusion/bridges.js +27 -39
  40. package/dist/atlas/diffusion/bridges.js.map +1 -1
  41. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  42. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  43. package/dist/atlas/diffusion/dimensions.js +8 -16
  44. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  45. package/dist/atlas/diffusion/models.d.ts +3 -3
  46. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  47. package/dist/atlas/diffusion/models.js +5 -10
  48. package/dist/atlas/diffusion/models.js.map +1 -1
  49. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  50. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  51. package/dist/atlas/diffusion/numerics.js +38 -24
  52. package/dist/atlas/diffusion/numerics.js.map +1 -1
  53. package/dist/atlas/link-prediction.d.ts +106 -3
  54. package/dist/atlas/link-prediction.d.ts.map +1 -1
  55. package/dist/atlas/link-prediction.js +212 -66
  56. package/dist/atlas/link-prediction.js.map +1 -1
  57. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  58. package/dist/atlas/oscillators/bridges-coarse.js +7 -11
  59. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  60. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  61. package/dist/atlas/oscillators/bridges-exact.js +6 -7
  62. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  63. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  64. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  65. package/dist/atlas/oscillators/bridges-limits.js +23 -34
  66. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  67. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  68. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  69. package/dist/atlas/oscillators/dimensions.js +9 -21
  70. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  71. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  72. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  73. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  74. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  75. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  76. package/dist/atlas/oscillators/models.js +2 -6
  77. package/dist/atlas/oscillators/models.js.map +1 -1
  78. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  79. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  80. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  81. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  82. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  83. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  84. package/dist/atlas/oscillators/phase-translation.js +3 -4
  85. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  86. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  87. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  88. package/dist/atlas/oscillators/position-translation.js +123 -12
  89. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  90. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  91. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  92. package/dist/atlas/oscillators/rejections.js +0 -7
  93. package/dist/atlas/oscillators/rejections.js.map +1 -1
  94. package/dist/atlas/physjs-entries.generated.d.ts +35 -25
  95. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  96. package/dist/atlas/physjs-entries.generated.js +37 -25
  97. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  98. package/dist/atlas/physjs-ref.d.ts +34 -31
  99. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  100. package/dist/atlas/physjs-ref.js +55 -53
  101. package/dist/atlas/physjs-ref.js.map +1 -1
  102. package/dist/atlas/physjs-reviewed.d.ts +1 -1
  103. package/dist/atlas/physjs-reviewed.js +15 -15
  104. package/dist/atlas/physjs-reviewed.js.map +1 -1
  105. package/dist/atlas/poster/statements.d.ts +0 -19
  106. package/dist/atlas/poster/statements.d.ts.map +1 -1
  107. package/dist/atlas/poster/statements.js +1 -1
  108. package/dist/atlas/poster/statements.js.map +1 -1
  109. package/dist/atlas/proof-target.d.ts +1 -1
  110. package/dist/atlas/proof-target.js +1 -1
  111. package/dist/atlas/proof-target.js.map +1 -1
  112. package/dist/atlas/regime.d.ts +1 -1
  113. package/dist/atlas/regime.d.ts.map +1 -1
  114. package/dist/atlas/regime.js +1 -1
  115. package/dist/atlas/regime.js.map +1 -1
  116. package/dist/atlas/text-overlap.d.ts +23 -0
  117. package/dist/atlas/text-overlap.d.ts.map +1 -0
  118. package/dist/atlas/text-overlap.js +41 -0
  119. package/dist/atlas/text-overlap.js.map +1 -0
  120. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  121. package/dist/atlas/waves/bridges-closure.js +2 -6
  122. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  123. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  124. package/dist/atlas/waves/bridges.js +32 -48
  125. package/dist/atlas/waves/bridges.js.map +1 -1
  126. package/dist/atlas/waves/models.d.ts +5 -6
  127. package/dist/atlas/waves/models.d.ts.map +1 -1
  128. package/dist/atlas/waves/models.js +7 -13
  129. package/dist/atlas/waves/models.js.map +1 -1
  130. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  131. package/dist/atlas/waves/numerics.js +10 -3
  132. package/dist/atlas/waves/numerics.js.map +1 -1
  133. package/dist/atlas/witness-numeric.d.ts +30 -0
  134. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  135. package/dist/atlas/witness-numeric.js +53 -0
  136. package/dist/atlas/witness-numeric.js.map +1 -1
  137. package/dist/atlas/witness-specs.d.ts.map +1 -1
  138. package/dist/atlas/witness-specs.js +19 -0
  139. package/dist/atlas/witness-specs.js.map +1 -1
  140. package/dist/atlas/witness-symbolic.d.ts +75 -3
  141. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  142. package/dist/atlas/witness-symbolic.js +116 -10
  143. package/dist/atlas/witness-symbolic.js.map +1 -1
  144. package/dist/bridges/catalog-load.d.ts.map +1 -1
  145. package/dist/bridges/catalog-load.js +13 -8
  146. package/dist/bridges/catalog-load.js.map +1 -1
  147. package/dist/bridges/catalog-types.d.ts +26 -2
  148. package/dist/bridges/catalog-types.d.ts.map +1 -1
  149. package/dist/bridges/catalog-types.js +11 -1
  150. package/dist/bridges/catalog-types.js.map +1 -1
  151. package/dist/bridges/evaluation-errors.d.ts +31 -1
  152. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  153. package/dist/bridges/evaluation-errors.js +20 -2
  154. package/dist/bridges/evaluation-errors.js.map +1 -1
  155. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  156. package/dist/bridges/evaluator-inputs.js +7 -5
  157. package/dist/bridges/evaluator-inputs.js.map +1 -1
  158. package/dist/bridges/evaluators.d.ts.map +1 -1
  159. package/dist/bridges/evaluators.js +27 -12
  160. package/dist/bridges/evaluators.js.map +1 -1
  161. package/dist/bridges/expr-parse.d.ts +11 -0
  162. package/dist/bridges/expr-parse.d.ts.map +1 -1
  163. package/dist/bridges/expr-parse.js +14 -5
  164. package/dist/bridges/expr-parse.js.map +1 -1
  165. package/dist/bridges/holds.d.ts +35 -3
  166. package/dist/bridges/holds.d.ts.map +1 -1
  167. package/dist/bridges/holds.js +117 -23
  168. package/dist/bridges/holds.js.map +1 -1
  169. package/dist/bridges/notices.d.ts.map +1 -1
  170. package/dist/bridges/notices.js +5 -5
  171. package/dist/bridges/notices.js.map +1 -1
  172. package/dist/bridges/relation-eval.d.ts +4 -4
  173. package/dist/bridges/relation-eval.d.ts.map +1 -1
  174. package/dist/bridges/relation-eval.js +15 -16
  175. package/dist/bridges/relation-eval.js.map +1 -1
  176. package/dist/bridges/sensitivity.d.ts.map +1 -1
  177. package/dist/bridges/sensitivity.js +3 -3
  178. package/dist/bridges/sensitivity.js.map +1 -1
  179. package/dist/bridges/validity.d.ts +33 -0
  180. package/dist/bridges/validity.d.ts.map +1 -0
  181. package/dist/bridges/validity.js +67 -0
  182. package/dist/bridges/validity.js.map +1 -0
  183. package/dist/canonical/entries/atomic.js +1 -3
  184. package/dist/canonical/entries/atomic.js.map +1 -1
  185. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  186. package/dist/canonical/entries/condensed-matter.js +4 -5
  187. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  188. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  189. package/dist/canonical/entries/dimensional-classics.js +3 -4
  190. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  191. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  192. package/dist/canonical/entries/electromagnetism.js +4 -10
  193. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  194. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  195. package/dist/canonical/entries/fluids-waves.js +3 -7
  196. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  197. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  198. package/dist/canonical/entries/mechanics.js +4 -6
  199. package/dist/canonical/entries/mechanics.js.map +1 -1
  200. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  201. package/dist/canonical/entries/nonmonomial.js +9 -17
  202. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  203. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  204. package/dist/canonical/entries/relativity.js +6 -6
  205. package/dist/canonical/entries/relativity.js.map +1 -1
  206. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  207. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  208. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  209. package/dist/canonical/fixed-points.d.ts +94 -0
  210. package/dist/canonical/fixed-points.d.ts.map +1 -0
  211. package/dist/canonical/fixed-points.js +81 -0
  212. package/dist/canonical/fixed-points.js.map +1 -0
  213. package/dist/canonical/linkage.d.ts.map +1 -1
  214. package/dist/canonical/linkage.js +25 -44
  215. package/dist/canonical/linkage.js.map +1 -1
  216. package/dist/canonical/normal-form.d.ts.map +1 -1
  217. package/dist/canonical/normal-form.js +5 -11
  218. package/dist/canonical/normal-form.js.map +1 -1
  219. package/dist/canonical/structural.d.ts +21 -21
  220. package/dist/canonical/structural.d.ts.map +1 -1
  221. package/dist/canonical/structural.js +40 -19
  222. package/dist/canonical/structural.js.map +1 -1
  223. package/dist/cases/catalog-checks.d.ts +10 -0
  224. package/dist/cases/catalog-checks.d.ts.map +1 -0
  225. package/dist/cases/catalog-checks.js +241 -0
  226. package/dist/cases/catalog-checks.js.map +1 -0
  227. package/dist/cases/catalog.d.ts +83 -0
  228. package/dist/cases/catalog.d.ts.map +1 -0
  229. package/dist/cases/catalog.js +118 -0
  230. package/dist/cases/catalog.js.map +1 -0
  231. package/dist/cases/engine.d.ts +13 -0
  232. package/dist/cases/engine.d.ts.map +1 -0
  233. package/dist/cases/engine.js +179 -0
  234. package/dist/cases/engine.js.map +1 -0
  235. package/dist/cases/index.d.ts.map +1 -1
  236. package/dist/cases/index.js +5 -7
  237. package/dist/cases/index.js.map +1 -1
  238. package/dist/cases/methods.d.ts +215 -0
  239. package/dist/cases/methods.d.ts.map +1 -0
  240. package/dist/cases/methods.js +743 -0
  241. package/dist/cases/methods.js.map +1 -0
  242. package/dist/cases/quadrature.d.ts +7 -9
  243. package/dist/cases/quadrature.d.ts.map +1 -1
  244. package/dist/cases/quadrature.js +28 -32
  245. package/dist/cases/quadrature.js.map +1 -1
  246. package/dist/cases/types.d.ts +12 -0
  247. package/dist/cases/types.d.ts.map +1 -1
  248. package/dist/cases/types.js.map +1 -1
  249. package/dist/cli/args.d.ts +25 -1
  250. package/dist/cli/args.d.ts.map +1 -1
  251. package/dist/cli/args.js +30 -8
  252. package/dist/cli/args.js.map +1 -1
  253. package/dist/cli/bindings.d.ts.map +1 -1
  254. package/dist/cli/bindings.js +5 -4
  255. package/dist/cli/bindings.js.map +1 -1
  256. package/dist/cli/command.d.ts +11 -1
  257. package/dist/cli/command.d.ts.map +1 -1
  258. package/dist/cli/command.js.map +1 -1
  259. package/dist/cli/commands/_atlas-map.d.ts +0 -9
  260. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  261. package/dist/cli/commands/_atlas-map.js +8 -18
  262. package/dist/cli/commands/_atlas-map.js.map +1 -1
  263. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  264. package/dist/cli/commands/_atlas-route.js +6 -2
  265. package/dist/cli/commands/_atlas-route.js.map +1 -1
  266. package/dist/cli/commands/_discovery-opts.d.ts +1 -0
  267. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  268. package/dist/cli/commands/_discovery-opts.js +9 -9
  269. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  270. package/dist/cli/commands/atlas.d.ts.map +1 -1
  271. package/dist/cli/commands/atlas.js +8 -5
  272. package/dist/cli/commands/atlas.js.map +1 -1
  273. package/dist/cli/commands/audit.d.ts.map +1 -1
  274. package/dist/cli/commands/audit.js +8 -1
  275. package/dist/cli/commands/audit.js.map +1 -1
  276. package/dist/cli/commands/axes.d.ts.map +1 -1
  277. package/dist/cli/commands/axes.js +20 -1
  278. package/dist/cli/commands/axes.js.map +1 -1
  279. package/dist/cli/commands/confront.d.ts.map +1 -1
  280. package/dist/cli/commands/confront.js +8 -14
  281. package/dist/cli/commands/confront.js.map +1 -1
  282. package/dist/cli/commands/derive.d.ts.map +1 -1
  283. package/dist/cli/commands/derive.js +22 -22
  284. package/dist/cli/commands/derive.js.map +1 -1
  285. package/dist/cli/commands/discover.d.ts.map +1 -1
  286. package/dist/cli/commands/discover.js +122 -73
  287. package/dist/cli/commands/discover.js.map +1 -1
  288. package/dist/cli/commands/eval.d.ts.map +1 -1
  289. package/dist/cli/commands/eval.js +1 -0
  290. package/dist/cli/commands/eval.js.map +1 -1
  291. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  292. package/dist/cli/commands/evaluate.js +67 -39
  293. package/dist/cli/commands/evaluate.js.map +1 -1
  294. package/dist/cli/commands/explain.d.ts.map +1 -1
  295. package/dist/cli/commands/explain.js +24 -3
  296. package/dist/cli/commands/explain.js.map +1 -1
  297. package/dist/cli/commands/ground.d.ts.map +1 -1
  298. package/dist/cli/commands/ground.js +7 -1
  299. package/dist/cli/commands/ground.js.map +1 -1
  300. package/dist/cli/commands/map.d.ts.map +1 -1
  301. package/dist/cli/commands/map.js +84 -11
  302. package/dist/cli/commands/map.js.map +1 -1
  303. package/dist/cli/commands/metric.d.ts.map +1 -1
  304. package/dist/cli/commands/metric.js +12 -9
  305. package/dist/cli/commands/metric.js.map +1 -1
  306. package/dist/cli/commands/path.d.ts +10 -0
  307. package/dist/cli/commands/path.d.ts.map +1 -1
  308. package/dist/cli/commands/path.js +25 -3
  309. package/dist/cli/commands/path.js.map +1 -1
  310. package/dist/cli/commands/probe.d.ts.map +1 -1
  311. package/dist/cli/commands/probe.js +59 -16
  312. package/dist/cli/commands/probe.js.map +1 -1
  313. package/dist/cli/commands/regime.d.ts.map +1 -1
  314. package/dist/cli/commands/regime.js +1 -0
  315. package/dist/cli/commands/regime.js.map +1 -1
  316. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  317. package/dist/cli/commands/retrieve.js +1 -0
  318. package/dist/cli/commands/retrieve.js.map +1 -1
  319. package/dist/cli/commands/search.d.ts.map +1 -1
  320. package/dist/cli/commands/search.js +1 -0
  321. package/dist/cli/commands/search.js.map +1 -1
  322. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  323. package/dist/cli/commands/symbolic.js +19 -28
  324. package/dist/cli/commands/symbolic.js.map +1 -1
  325. package/dist/cli/commands/testplan.d.ts.map +1 -1
  326. package/dist/cli/commands/testplan.js +4 -2
  327. package/dist/cli/commands/testplan.js.map +1 -1
  328. package/dist/cli/determination.d.ts +1 -0
  329. package/dist/cli/determination.d.ts.map +1 -1
  330. package/dist/cli/determination.js.map +1 -1
  331. package/dist/cli/expr-print.d.ts +0 -2
  332. package/dist/cli/expr-print.d.ts.map +1 -1
  333. package/dist/cli/expr-print.js +7 -31
  334. package/dist/cli/expr-print.js.map +1 -1
  335. package/dist/cli/flag-help.d.ts +1 -0
  336. package/dist/cli/flag-help.d.ts.map +1 -1
  337. package/dist/cli/flag-help.js +1 -0
  338. package/dist/cli/flag-help.js.map +1 -1
  339. package/dist/cli/graphs.d.ts +2 -0
  340. package/dist/cli/graphs.d.ts.map +1 -1
  341. package/dist/cli/graphs.js +1 -0
  342. package/dist/cli/graphs.js.map +1 -1
  343. package/dist/cli/main.d.ts +8 -0
  344. package/dist/cli/main.d.ts.map +1 -1
  345. package/dist/cli/main.js +19 -3
  346. package/dist/cli/main.js.map +1 -1
  347. package/dist/cli/numeric-flag.d.ts +12 -0
  348. package/dist/cli/numeric-flag.d.ts.map +1 -0
  349. package/dist/cli/numeric-flag.js +44 -0
  350. package/dist/cli/numeric-flag.js.map +1 -0
  351. package/dist/cli/output.d.ts +28 -0
  352. package/dist/cli/output.d.ts.map +1 -1
  353. package/dist/cli/output.js +23 -0
  354. package/dist/cli/output.js.map +1 -1
  355. package/dist/cli/record-reach.js +2 -2
  356. package/dist/cli/record-reach.js.map +1 -1
  357. package/dist/cli/record-tables.d.ts.map +1 -1
  358. package/dist/cli/record-tables.js +6 -5
  359. package/dist/cli/record-tables.js.map +1 -1
  360. package/dist/cli/record.d.ts +1 -5
  361. package/dist/cli/record.d.ts.map +1 -1
  362. package/dist/cli/record.js +9 -8
  363. package/dist/cli/record.js.map +1 -1
  364. package/dist/cli/search-index.d.ts.map +1 -1
  365. package/dist/cli/search-index.js +7 -6
  366. package/dist/cli/search-index.js.map +1 -1
  367. package/dist/cli/statuses.d.ts +0 -2
  368. package/dist/cli/statuses.d.ts.map +1 -1
  369. package/dist/cli/statuses.js +12 -9
  370. package/dist/cli/statuses.js.map +1 -1
  371. package/dist/cli/stored-results.d.ts +7 -0
  372. package/dist/cli/stored-results.d.ts.map +1 -0
  373. package/dist/cli/stored-results.js +23 -0
  374. package/dist/cli/stored-results.js.map +1 -0
  375. package/dist/cli/version.d.ts +1 -0
  376. package/dist/cli/version.d.ts.map +1 -1
  377. package/dist/cli/version.js +8 -5
  378. package/dist/cli/version.js.map +1 -1
  379. package/dist/cli-api.d.ts +36 -5
  380. package/dist/cli-api.d.ts.map +1 -1
  381. package/dist/cli-api.js +30 -4
  382. package/dist/cli-api.js.map +1 -1
  383. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  384. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  385. package/dist/composition/algebraic-equivalence.js +115 -0
  386. package/dist/composition/algebraic-equivalence.js.map +1 -0
  387. package/dist/composition/axes.d.ts +0 -6
  388. package/dist/composition/axes.d.ts.map +1 -1
  389. package/dist/composition/axes.js +6 -6
  390. package/dist/composition/axes.js.map +1 -1
  391. package/dist/composition/axis-audit.d.ts +47 -20
  392. package/dist/composition/axis-audit.d.ts.map +1 -1
  393. package/dist/composition/axis-audit.js +82 -9
  394. package/dist/composition/axis-audit.js.map +1 -1
  395. package/dist/composition/bridge-analysis.d.ts +17 -0
  396. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  397. package/dist/composition/bridge-analysis.js +102 -55
  398. package/dist/composition/bridge-analysis.js.map +1 -1
  399. package/dist/composition/canonical-compare.d.ts +40 -0
  400. package/dist/composition/canonical-compare.d.ts.map +1 -1
  401. package/dist/composition/canonical-compare.js +122 -24
  402. package/dist/composition/canonical-compare.js.map +1 -1
  403. package/dist/composition/canonical-graph.d.ts +3 -3
  404. package/dist/composition/canonical-graph.d.ts.map +1 -1
  405. package/dist/composition/canonical-graph.js +11 -38
  406. package/dist/composition/canonical-graph.js.map +1 -1
  407. package/dist/composition/canonical-json.js +2 -2
  408. package/dist/composition/canonical-json.js.map +1 -1
  409. package/dist/composition/catalog-graph.d.ts.map +1 -1
  410. package/dist/composition/catalog-graph.js +2 -5
  411. package/dist/composition/catalog-graph.js.map +1 -1
  412. package/dist/composition/chain-candidate.d.ts +8 -0
  413. package/dist/composition/chain-candidate.d.ts.map +1 -1
  414. package/dist/composition/chain-candidate.js +9 -2
  415. package/dist/composition/chain-candidate.js.map +1 -1
  416. package/dist/composition/chain-match.d.ts +6 -3
  417. package/dist/composition/chain-match.d.ts.map +1 -1
  418. package/dist/composition/chain-match.js +4 -1
  419. package/dist/composition/chain-match.js.map +1 -1
  420. package/dist/composition/chain-result.d.ts.map +1 -1
  421. package/dist/composition/chain-result.js +2 -14
  422. package/dist/composition/chain-result.js.map +1 -1
  423. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  424. package/dist/composition/compose-symbolic.js +3 -2
  425. package/dist/composition/compose-symbolic.js.map +1 -1
  426. package/dist/composition/compose.d.ts.map +1 -1
  427. package/dist/composition/compose.js +13 -5
  428. package/dist/composition/compose.js.map +1 -1
  429. package/dist/composition/composition-recovery.d.ts.map +1 -1
  430. package/dist/composition/composition-recovery.js +4 -7
  431. package/dist/composition/composition-recovery.js.map +1 -1
  432. package/dist/composition/consequence.d.ts +15 -5
  433. package/dist/composition/consequence.d.ts.map +1 -1
  434. package/dist/composition/consequence.js +6 -4
  435. package/dist/composition/consequence.js.map +1 -1
  436. package/dist/composition/discovery.d.ts +129 -9
  437. package/dist/composition/discovery.d.ts.map +1 -1
  438. package/dist/composition/discovery.js +171 -67
  439. package/dist/composition/discovery.js.map +1 -1
  440. package/dist/composition/edge.d.ts +21 -2
  441. package/dist/composition/edge.d.ts.map +1 -1
  442. package/dist/composition/edge.js +23 -1
  443. package/dist/composition/edge.js.map +1 -1
  444. package/dist/composition/enumerate.d.ts.map +1 -1
  445. package/dist/composition/enumerate.js +18 -3
  446. package/dist/composition/enumerate.js.map +1 -1
  447. package/dist/composition/evaluate-relation.d.ts +35 -11
  448. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  449. package/dist/composition/evaluate-relation.js +60 -39
  450. package/dist/composition/evaluate-relation.js.map +1 -1
  451. package/dist/composition/explain.d.ts +3 -12
  452. package/dist/composition/explain.d.ts.map +1 -1
  453. package/dist/composition/explain.js +7 -20
  454. package/dist/composition/explain.js.map +1 -1
  455. package/dist/composition/expr-eval.d.ts +1 -1
  456. package/dist/composition/expr-eval.d.ts.map +1 -1
  457. package/dist/composition/expr-eval.js +6 -15
  458. package/dist/composition/expr-eval.js.map +1 -1
  459. package/dist/composition/expr-simplify.d.ts +26 -14
  460. package/dist/composition/expr-simplify.d.ts.map +1 -1
  461. package/dist/composition/expr-simplify.js +64 -72
  462. package/dist/composition/expr-simplify.js.map +1 -1
  463. package/dist/composition/formula-shape.d.ts +23 -4
  464. package/dist/composition/formula-shape.d.ts.map +1 -1
  465. package/dist/composition/formula-shape.js +57 -17
  466. package/dist/composition/formula-shape.js.map +1 -1
  467. package/dist/composition/graph-structure.d.ts +98 -0
  468. package/dist/composition/graph-structure.d.ts.map +1 -0
  469. package/dist/composition/graph-structure.js +167 -0
  470. package/dist/composition/graph-structure.js.map +1 -0
  471. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  472. package/dist/composition/graph-viz-svg.js +1 -1
  473. package/dist/composition/graph-viz-svg.js.map +1 -1
  474. package/dist/composition/graph-viz.d.ts.map +1 -1
  475. package/dist/composition/graph-viz.js +8 -37
  476. package/dist/composition/graph-viz.js.map +1 -1
  477. package/dist/composition/grounding.d.ts.map +1 -1
  478. package/dist/composition/grounding.js +19 -7
  479. package/dist/composition/grounding.js.map +1 -1
  480. package/dist/composition/identifiability.d.ts +91 -4
  481. package/dist/composition/identifiability.d.ts.map +1 -1
  482. package/dist/composition/identifiability.js +363 -6
  483. package/dist/composition/identifiability.js.map +1 -1
  484. package/dist/composition/index.d.ts +8 -4
  485. package/dist/composition/index.d.ts.map +1 -1
  486. package/dist/composition/index.js +3 -2
  487. package/dist/composition/index.js.map +1 -1
  488. package/dist/composition/mathts-quiet.d.ts +7 -8
  489. package/dist/composition/mathts-quiet.d.ts.map +1 -1
  490. package/dist/composition/mathts-quiet.js +7 -16
  491. package/dist/composition/mathts-quiet.js.map +1 -1
  492. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  493. package/dist/composition/mathts-scalar-symbols.js +2 -1
  494. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  495. package/dist/composition/own-equation-magnitude.d.ts +95 -0
  496. package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
  497. package/dist/composition/own-equation-magnitude.js +270 -0
  498. package/dist/composition/own-equation-magnitude.js.map +1 -0
  499. package/dist/composition/probe/backend-protocol.d.ts +3 -0
  500. package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
  501. package/dist/composition/probe/backend-protocol.js.map +1 -1
  502. package/dist/composition/probe/candidate-store.d.ts +1 -0
  503. package/dist/composition/probe/candidate-store.d.ts.map +1 -1
  504. package/dist/composition/probe/candidate-store.js +1 -0
  505. package/dist/composition/probe/candidate-store.js.map +1 -1
  506. package/dist/composition/probe/corpus.d.ts +8 -4
  507. package/dist/composition/probe/corpus.d.ts.map +1 -1
  508. package/dist/composition/probe/corpus.js +23 -12
  509. package/dist/composition/probe/corpus.js.map +1 -1
  510. package/dist/composition/probe/dataset.d.ts +18 -0
  511. package/dist/composition/probe/dataset.d.ts.map +1 -1
  512. package/dist/composition/probe/dataset.js +95 -50
  513. package/dist/composition/probe/dataset.js.map +1 -1
  514. package/dist/composition/probe/experiment-design.d.ts +7 -1
  515. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  516. package/dist/composition/probe/experiment-design.js +44 -24
  517. package/dist/composition/probe/experiment-design.js.map +1 -1
  518. package/dist/composition/probe/falsify.d.ts +2 -0
  519. package/dist/composition/probe/falsify.d.ts.map +1 -1
  520. package/dist/composition/probe/falsify.js +2 -0
  521. package/dist/composition/probe/falsify.js.map +1 -1
  522. package/dist/composition/probe/fit.d.ts +7 -0
  523. package/dist/composition/probe/fit.d.ts.map +1 -1
  524. package/dist/composition/probe/fit.js +46 -22
  525. package/dist/composition/probe/fit.js.map +1 -1
  526. package/dist/composition/probe/frontier.d.ts.map +1 -1
  527. package/dist/composition/probe/frontier.js +33 -15
  528. package/dist/composition/probe/frontier.js.map +1 -1
  529. package/dist/composition/probe/generator.d.ts +30 -1
  530. package/dist/composition/probe/generator.d.ts.map +1 -1
  531. package/dist/composition/probe/generator.js +58 -36
  532. package/dist/composition/probe/generator.js.map +1 -1
  533. package/dist/composition/probe/index.d.ts +14 -0
  534. package/dist/composition/probe/index.d.ts.map +1 -1
  535. package/dist/composition/probe/index.js +6 -0
  536. package/dist/composition/probe/index.js.map +1 -1
  537. package/dist/composition/probe/limits.d.ts +25 -1
  538. package/dist/composition/probe/limits.d.ts.map +1 -1
  539. package/dist/composition/probe/limits.js +53 -11
  540. package/dist/composition/probe/limits.js.map +1 -1
  541. package/dist/composition/probe/pipeline.d.ts +5 -0
  542. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  543. package/dist/composition/probe/pipeline.js +73 -24
  544. package/dist/composition/probe/pipeline.js.map +1 -1
  545. package/dist/composition/probe/power-law.d.ts +121 -0
  546. package/dist/composition/probe/power-law.d.ts.map +1 -0
  547. package/dist/composition/probe/power-law.js +251 -0
  548. package/dist/composition/probe/power-law.js.map +1 -0
  549. package/dist/composition/probe/problem.d.ts +8 -4
  550. package/dist/composition/probe/problem.d.ts.map +1 -1
  551. package/dist/composition/probe/problem.js +177 -49
  552. package/dist/composition/probe/problem.js.map +1 -1
  553. package/dist/composition/probe/report.js +1 -1
  554. package/dist/composition/probe/report.js.map +1 -1
  555. package/dist/composition/probe/residual.d.ts +7 -1
  556. package/dist/composition/probe/residual.d.ts.map +1 -1
  557. package/dist/composition/probe/residual.js +10 -7
  558. package/dist/composition/probe/residual.js.map +1 -1
  559. package/dist/composition/probe/run-manifest.d.ts +1 -0
  560. package/dist/composition/probe/run-manifest.d.ts.map +1 -1
  561. package/dist/composition/probe/run-manifest.js.map +1 -1
  562. package/dist/composition/probe/scalar-search.d.ts +50 -0
  563. package/dist/composition/probe/scalar-search.d.ts.map +1 -0
  564. package/dist/composition/probe/scalar-search.js +169 -0
  565. package/dist/composition/probe/scalar-search.js.map +1 -0
  566. package/dist/composition/probe/scoring.d.ts +1 -0
  567. package/dist/composition/probe/scoring.d.ts.map +1 -1
  568. package/dist/composition/probe/scoring.js.map +1 -1
  569. package/dist/composition/probe/structure.d.ts +82 -17
  570. package/dist/composition/probe/structure.d.ts.map +1 -1
  571. package/dist/composition/probe/structure.js +129 -55
  572. package/dist/composition/probe/structure.js.map +1 -1
  573. package/dist/composition/probe/study.d.ts +31 -9
  574. package/dist/composition/probe/study.d.ts.map +1 -1
  575. package/dist/composition/probe/study.js +235 -184
  576. package/dist/composition/probe/study.js.map +1 -1
  577. package/dist/composition/probe/t-tail.d.ts +16 -0
  578. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  579. package/dist/composition/probe/t-tail.js +29 -0
  580. package/dist/composition/probe/t-tail.js.map +1 -0
  581. package/dist/composition/probe/types.d.ts +3 -0
  582. package/dist/composition/probe/types.d.ts.map +1 -1
  583. package/dist/composition/probe/types.js.map +1 -1
  584. package/dist/composition/proposed-bridges.d.ts +52 -12
  585. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  586. package/dist/composition/proposed-bridges.js +107 -60
  587. package/dist/composition/proposed-bridges.js.map +1 -1
  588. package/dist/composition/quantity-clusters.d.ts +48 -0
  589. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  590. package/dist/composition/quantity-clusters.js +98 -0
  591. package/dist/composition/quantity-clusters.js.map +1 -0
  592. package/dist/composition/rational-exponent.d.ts +40 -0
  593. package/dist/composition/rational-exponent.d.ts.map +1 -0
  594. package/dist/composition/rational-exponent.js +65 -0
  595. package/dist/composition/rational-exponent.js.map +1 -0
  596. package/dist/composition/representative-values.d.ts +22 -0
  597. package/dist/composition/representative-values.d.ts.map +1 -1
  598. package/dist/composition/representative-values.js +29 -0
  599. package/dist/composition/representative-values.js.map +1 -1
  600. package/dist/composition/retrodiction.d.ts +15 -0
  601. package/dist/composition/retrodiction.d.ts.map +1 -1
  602. package/dist/composition/retrodiction.js +12 -4
  603. package/dist/composition/retrodiction.js.map +1 -1
  604. package/dist/composition/user-equation.d.ts +1 -0
  605. package/dist/composition/user-equation.d.ts.map +1 -1
  606. package/dist/composition/user-equation.js +3 -2
  607. package/dist/composition/user-equation.js.map +1 -1
  608. package/dist/core/assignment.d.ts +19 -0
  609. package/dist/core/assignment.d.ts.map +1 -0
  610. package/dist/core/assignment.js +19 -0
  611. package/dist/core/assignment.js.map +1 -0
  612. package/dist/core/compare.d.ts +32 -0
  613. package/dist/core/compare.d.ts.map +1 -0
  614. package/dist/core/compare.js +46 -0
  615. package/dist/core/compare.js.map +1 -0
  616. package/dist/core/constants.d.ts +42 -41
  617. package/dist/core/constants.d.ts.map +1 -1
  618. package/dist/core/constants.js +71 -51
  619. package/dist/core/constants.js.map +1 -1
  620. package/dist/core/data-file.d.ts +7 -0
  621. package/dist/core/data-file.d.ts.map +1 -1
  622. package/dist/core/data-file.js +17 -0
  623. package/dist/core/data-file.js.map +1 -1
  624. package/dist/core/format.d.ts +36 -0
  625. package/dist/core/format.d.ts.map +1 -0
  626. package/dist/core/format.js +39 -0
  627. package/dist/core/format.js.map +1 -0
  628. package/dist/core/hash.d.ts +14 -0
  629. package/dist/core/hash.d.ts.map +1 -0
  630. package/dist/core/hash.js +17 -0
  631. package/dist/core/hash.js.map +1 -0
  632. package/dist/core/json-schema.d.ts +2 -0
  633. package/dist/core/json-schema.d.ts.map +1 -1
  634. package/dist/core/json-schema.js +14 -13
  635. package/dist/core/json-schema.js.map +1 -1
  636. package/dist/core/labeled-tensor.d.ts.map +1 -1
  637. package/dist/core/labeled-tensor.js +0 -8
  638. package/dist/core/labeled-tensor.js.map +1 -1
  639. package/dist/core/mathts-read.d.ts +25 -0
  640. package/dist/core/mathts-read.d.ts.map +1 -0
  641. package/dist/core/mathts-read.js +51 -0
  642. package/dist/core/mathts-read.js.map +1 -0
  643. package/dist/core/tensor.d.ts.map +1 -1
  644. package/dist/core/tensor.js +24 -0
  645. package/dist/core/tensor.js.map +1 -1
  646. package/dist/core/types.d.ts +5 -5
  647. package/dist/diff/bridge-ast-gradient.d.ts +27 -23
  648. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  649. package/dist/diff/bridge-ast-gradient.js +75 -173
  650. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  651. package/dist/diff/bridge-gradient.d.ts +19 -6
  652. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  653. package/dist/diff/bridge-gradient.js +19 -11
  654. package/dist/diff/bridge-gradient.js.map +1 -1
  655. package/dist/diff/bridge-specs.d.ts.map +1 -1
  656. package/dist/diff/bridge-specs.js +3 -0
  657. package/dist/diff/bridge-specs.js.map +1 -1
  658. package/dist/dimensional/algebra.d.ts +18 -0
  659. package/dist/dimensional/algebra.d.ts.map +1 -1
  660. package/dist/dimensional/algebra.js +41 -1
  661. package/dist/dimensional/algebra.js.map +1 -1
  662. package/dist/dimensional/ast-builders.d.ts +7 -0
  663. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  664. package/dist/dimensional/ast-builders.js +11 -0
  665. package/dist/dimensional/ast-builders.js.map +1 -1
  666. package/dist/dimensional/ast-leaves.d.ts +81 -0
  667. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  668. package/dist/dimensional/ast-leaves.js +146 -0
  669. package/dist/dimensional/ast-leaves.js.map +1 -0
  670. package/dist/dimensional/ast-types.d.ts +15 -0
  671. package/dist/dimensional/ast-types.d.ts.map +1 -1
  672. package/dist/dimensional/ast-types.js.map +1 -1
  673. package/dist/dimensional/buckingham.d.ts.map +1 -1
  674. package/dist/dimensional/buckingham.js +15 -27
  675. package/dist/dimensional/buckingham.js.map +1 -1
  676. package/dist/dimensional/constant-rows.js +9 -9
  677. package/dist/dimensional/constant-rows.js.map +1 -1
  678. package/dist/dimensional/curvature-composite.d.ts +1 -1
  679. package/dist/dimensional/curvature-composite.js.map +1 -1
  680. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  681. package/dist/dimensional/dimension-inference.js +1 -2
  682. package/dist/dimensional/dimension-inference.js.map +1 -1
  683. package/dist/dimensional/errors.d.ts +1 -1
  684. package/dist/dimensional/errors.d.ts.map +1 -1
  685. package/dist/dimensional/errors.js +1 -15
  686. package/dist/dimensional/errors.js.map +1 -1
  687. package/dist/dimensional/exact-scale.d.ts +24 -11
  688. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  689. package/dist/dimensional/exact-scale.js +122 -130
  690. package/dist/dimensional/exact-scale.js.map +1 -1
  691. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  692. package/dist/dimensional/gauge-field.js +2 -2
  693. package/dist/dimensional/gauge-field.js.map +1 -1
  694. package/dist/dimensional/hyphen-names.d.ts +12 -2
  695. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  696. package/dist/dimensional/hyphen-names.js +44 -19
  697. package/dist/dimensional/hyphen-names.js.map +1 -1
  698. package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
  699. package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
  700. package/dist/dimensional/mathts-unit-delegation.js +187 -0
  701. package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
  702. package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
  703. package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
  704. package/dist/dimensional/mathts-unit-wrapper.js +190 -0
  705. package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
  706. package/dist/dimensional/metric.d.ts.map +1 -1
  707. package/dist/dimensional/metric.js +0 -1
  708. package/dist/dimensional/metric.js.map +1 -1
  709. package/dist/dimensional/scalar-lowering.d.ts +21 -0
  710. package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
  711. package/dist/dimensional/scalar-lowering.js +45 -0
  712. package/dist/dimensional/scalar-lowering.js.map +1 -0
  713. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  714. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  715. package/dist/dimensional/symbolic-constants.js +13 -1
  716. package/dist/dimensional/symbolic-constants.js.map +1 -1
  717. package/dist/dimensional/types.d.ts +36 -0
  718. package/dist/dimensional/types.d.ts.map +1 -1
  719. package/dist/dimensional/types.js +45 -7
  720. package/dist/dimensional/types.js.map +1 -1
  721. package/dist/dimensional/unit-data.d.ts +5 -1
  722. package/dist/dimensional/unit-data.d.ts.map +1 -1
  723. package/dist/dimensional/unit-data.js +30 -6
  724. package/dist/dimensional/unit-data.js.map +1 -1
  725. package/dist/dimensional/units.d.ts +2 -0
  726. package/dist/dimensional/units.d.ts.map +1 -1
  727. package/dist/dimensional/units.js +59 -3
  728. package/dist/dimensional/units.js.map +1 -1
  729. package/dist/dimensional/validator.d.ts +2 -0
  730. package/dist/dimensional/validator.d.ts.map +1 -1
  731. package/dist/dimensional/validator.js.map +1 -1
  732. package/dist/index.d.ts +9 -3
  733. package/dist/index.d.ts.map +1 -1
  734. package/dist/index.js +10 -4
  735. package/dist/index.js.map +1 -1
  736. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  737. package/dist/numerical/christoffel-flat.js +3 -2
  738. package/dist/numerical/christoffel-flat.js.map +1 -1
  739. package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
  740. package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
  741. package/dist/numerical/connection-lowering-helpers.js +11 -15
  742. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  743. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  744. package/dist/numerical/covariant-eikonal.js +34 -11
  745. package/dist/numerical/covariant-eikonal.js.map +1 -1
  746. package/dist/numerical/curvature-lowering-helpers.js +3 -2
  747. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  748. package/dist/numerical/errors.d.ts.map +1 -1
  749. package/dist/numerical/errors.js +0 -3
  750. package/dist/numerical/errors.js.map +1 -1
  751. package/dist/numerical/finite-difference.d.ts +22 -0
  752. package/dist/numerical/finite-difference.d.ts.map +1 -0
  753. package/dist/numerical/finite-difference.js +27 -0
  754. package/dist/numerical/finite-difference.js.map +1 -0
  755. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  756. package/dist/numerical/geodesic-integrator.js +22 -14
  757. package/dist/numerical/geodesic-integrator.js.map +1 -1
  758. package/dist/numerical/geometrized.d.ts.map +1 -1
  759. package/dist/numerical/geometrized.js +0 -1
  760. package/dist/numerical/geometrized.js.map +1 -1
  761. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  762. package/dist/numerical/mathts-engine.js +10 -24
  763. package/dist/numerical/mathts-engine.js.map +1 -1
  764. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  765. package/dist/numerical/metric-inverse.js +83 -46
  766. package/dist/numerical/metric-inverse.js.map +1 -1
  767. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  768. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  769. package/dist/numerical/null-ray-integrator.js +12 -12
  770. package/dist/numerical/null-ray-integrator.js.map +1 -1
  771. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  772. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  773. package/dist/numerical/pderiv.d.ts.map +1 -1
  774. package/dist/numerical/pderiv.js +2 -6
  775. package/dist/numerical/pderiv.js.map +1 -1
  776. package/dist/numerical/perihelion-finder.d.ts +0 -36
  777. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  778. package/dist/numerical/perihelion-finder.js +41 -87
  779. package/dist/numerical/perihelion-finder.js.map +1 -1
  780. package/dist/numerical/quadrature.d.ts.map +1 -1
  781. package/dist/numerical/quadrature.js +11 -13
  782. package/dist/numerical/quadrature.js.map +1 -1
  783. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  784. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  785. package/dist/numerical/rk4-trajectory.js +37 -0
  786. package/dist/numerical/rk4-trajectory.js.map +1 -0
  787. package/dist/numerical/schwarzschild.d.ts +14 -0
  788. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  789. package/dist/numerical/schwarzschild.js +17 -0
  790. package/dist/numerical/schwarzschild.js.map +1 -0
  791. package/dist/numerical/spacetime-metrics.d.ts +12 -0
  792. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  793. package/dist/numerical/spacetime-metrics.js +72 -56
  794. package/dist/numerical/spacetime-metrics.js.map +1 -1
  795. package/dist/numerical/statistics.d.ts +24 -0
  796. package/dist/numerical/statistics.d.ts.map +1 -0
  797. package/dist/numerical/statistics.js +52 -0
  798. package/dist/numerical/statistics.js.map +1 -0
  799. package/dist/numerical/strides.d.ts +3 -2
  800. package/dist/numerical/strides.d.ts.map +1 -1
  801. package/dist/numerical/strides.js +3 -10
  802. package/dist/numerical/strides.js.map +1 -1
  803. package/dist/numerical/tensor-engine.d.ts +21 -0
  804. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  805. package/dist/numerical/tensor-engine.js +12 -0
  806. package/dist/numerical/tensor-engine.js.map +1 -1
  807. package/dist/relations/regime.d.ts +10 -0
  808. package/dist/relations/regime.d.ts.map +1 -1
  809. package/dist/relations/regime.js +18 -1
  810. package/dist/relations/regime.js.map +1 -1
  811. package/package.json +9 -12
  812. package/dist/cases/brownian-sphere.d.ts +0 -68
  813. package/dist/cases/brownian-sphere.d.ts.map +0 -1
  814. package/dist/cases/brownian-sphere.js +0 -354
  815. package/dist/cases/brownian-sphere.js.map +0 -1
  816. package/dist/cases/damped-resonator.d.ts +0 -23
  817. package/dist/cases/damped-resonator.d.ts.map +0 -1
  818. package/dist/cases/damped-resonator.js +0 -224
  819. package/dist/cases/damped-resonator.js.map +0 -1
  820. package/dist/cases/kepler-rv.d.ts +0 -13
  821. package/dist/cases/kepler-rv.d.ts.map +0 -1
  822. package/dist/cases/kepler-rv.js +0 -172
  823. package/dist/cases/kepler-rv.js.map +0 -1
  824. package/dist/cases/lumped-cooling.d.ts +0 -46
  825. package/dist/cases/lumped-cooling.d.ts.map +0 -1
  826. package/dist/cases/lumped-cooling.js +0 -261
  827. package/dist/cases/lumped-cooling.js.map +0 -1
  828. package/dist/cases/resistor-noise.d.ts +0 -14
  829. package/dist/cases/resistor-noise.d.ts.map +0 -1
  830. package/dist/cases/resistor-noise.js +0 -215
  831. package/dist/cases/resistor-noise.js.map +0 -1
  832. package/dist/cases/skin-depth.d.ts +0 -21
  833. package/dist/cases/skin-depth.d.ts.map +0 -1
  834. package/dist/cases/skin-depth.js +0 -174
  835. package/dist/cases/skin-depth.js.map +0 -1
@@ -11,7 +11,6 @@ export class UPTError extends Error {
11
11
  super(message, options);
12
12
  this.name = 'UPTError';
13
13
  // Restore prototype chain (needed for instanceof after ES5 transpilation).
14
- Object.setPrototypeOf(this, UPTError.prototype);
15
14
  }
16
15
  }
17
16
  /**
@@ -27,7 +26,6 @@ export class DimensionMismatchError extends UPTError {
27
26
  this.name = 'DimensionMismatchError';
28
27
  this.expected = expected;
29
28
  this.actual = actual;
30
- Object.setPrototypeOf(this, DimensionMismatchError.prototype);
31
29
  }
32
30
  }
33
31
  /**
@@ -50,7 +48,6 @@ export class DuplicateIndexLabelError extends UPTError {
50
48
  this.name = 'DuplicateIndexLabelError';
51
49
  this.tensorName = tensorName;
52
50
  this.label = label;
53
- Object.setPrototypeOf(this, DuplicateIndexLabelError.prototype);
54
51
  }
55
52
  }
56
53
  /**
@@ -78,7 +75,6 @@ export class IndexLabelCollisionError extends UPTError {
78
75
  this.label = label;
79
76
  this.totalCount = totalCount;
80
77
  this.sources = sources;
81
- Object.setPrototypeOf(this, IndexLabelCollisionError.prototype);
82
78
  }
83
79
  }
84
80
  /**
@@ -99,7 +95,6 @@ export class VarianceMismatchError extends UPTError {
99
95
  this.name = 'VarianceMismatchError';
100
96
  this.label = label;
101
97
  this.variance = variance;
102
- Object.setPrototypeOf(this, VarianceMismatchError.prototype);
103
98
  }
104
99
  }
105
100
  /**
@@ -115,7 +110,6 @@ export class TensorInScalarOpError extends UPTError {
115
110
  `non-empty freeIndices. Use 'tensor-product' for tensor multiplication.`);
116
111
  this.name = 'TensorInScalarOpError';
117
112
  this.op = op;
118
- Object.setPrototypeOf(this, TensorInScalarOpError.prototype);
119
113
  }
120
114
  }
121
115
  /**
@@ -128,7 +122,6 @@ export class FreeIndexMismatchError extends UPTError {
128
122
  constructor(message) {
129
123
  super(message);
130
124
  this.name = 'FreeIndexMismatchError';
131
- Object.setPrototypeOf(this, FreeIndexMismatchError.prototype);
132
125
  }
133
126
  }
134
127
  /**
@@ -142,7 +135,6 @@ export class TensorProductChildInferenceError extends UPTError {
142
135
  constructor(message) {
143
136
  super(message);
144
137
  this.name = 'TensorProductChildInferenceError';
145
- Object.setPrototypeOf(this, TensorProductChildInferenceError.prototype);
146
138
  }
147
139
  }
148
140
  /**
@@ -160,7 +152,6 @@ export class InvalidMetricRankError extends UPTError {
160
152
  this.name = 'InvalidMetricRankError';
161
153
  this.tensorName = tensorName;
162
154
  this.actualRank = actualRank;
163
- Object.setPrototypeOf(this, InvalidMetricRankError.prototype);
164
155
  }
165
156
  }
166
157
  /**
@@ -177,7 +168,6 @@ export class MetricSignatureError extends UPTError {
177
168
  this.name = 'MetricSignatureError';
178
169
  this.tensorName = tensorName;
179
170
  this.reason = reason;
180
- Object.setPrototypeOf(this, MetricSignatureError.prototype);
181
171
  }
182
172
  }
183
173
  /**
@@ -191,7 +181,6 @@ export class InvalidKroneckerRankError extends UPTError {
191
181
  `(exactly one upper + one lower index). Per Part-VIII §VIII.3.`);
192
182
  this.name = 'InvalidKroneckerRankError';
193
183
  this.actualRank = actualRank;
194
- Object.setPrototypeOf(this, InvalidKroneckerRankError.prototype);
195
184
  }
196
185
  }
197
186
  /**
@@ -207,7 +196,6 @@ export class KroneckerVarianceError extends UPTError {
207
196
  `Per Part-VIII §VIII.3.`);
208
197
  this.name = 'KroneckerVarianceError';
209
198
  this.bothVariance = bothVariance;
210
- Object.setPrototypeOf(this, KroneckerVarianceError.prototype);
211
199
  }
212
200
  }
213
201
  /**
@@ -224,7 +212,6 @@ export class PartialDerivativeIndexVarianceError extends UPTError {
224
212
  `be 'lower'. Per Part-VIII §VIII.4.`);
225
213
  this.name = 'PartialDerivativeIndexVarianceError';
226
214
  this.label = label;
227
- Object.setPrototypeOf(this, PartialDerivativeIndexVarianceError.prototype);
228
215
  }
229
216
  }
230
217
  /**
@@ -238,7 +225,7 @@ export class PartialDerivativeIndexVarianceError extends UPTError {
238
225
  * a dimensional → numerical import cycle; re-exported from numerical/index.ts
239
226
  * for the public API surface per v0.4.0-Implementation-Plan Task 13.
240
227
  *
241
- * Uses `Object.setPrototypeOf` for correct `instanceof` after ES5 transpilation.
228
+ * A plain `class extends Error` under the ES2022 target: `instanceof` holds without a prototype reset.
242
229
  *
243
230
  * @public
244
231
  */
@@ -248,7 +235,6 @@ export class DuplicateCoordinateWarning extends Error {
248
235
  `'${conflictingIndex}' of the operand; result will silently misbehave. ` +
249
236
  `Rename the operand's free index or pick a different wrt label.`);
250
237
  this.name = 'DuplicateCoordinateWarning';
251
- Object.setPrototypeOf(this, DuplicateCoordinateWarning.prototype);
252
238
  }
253
239
  }
254
240
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/dimensional/errors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * UPT error hierarchy. All UPT-source errors subclass UPTError so\n * downstream consumers (mathjs, threejs, TensorJS) can discriminate\n * with `err instanceof UPTError`.\n *\n * @module dimensional/errors\n */\n\nimport { Dimension } from './types.js';\n\n/** Base class for all UPT-source errors. */\nexport class UPTError extends Error {\n constructor(message: string, options?: { readonly cause?: unknown }) {\n super(message, options);\n this.name = 'UPTError';\n // Restore prototype chain (needed for instanceof after ES5 transpilation).\n Object.setPrototypeOf(this, UPTError.prototype);\n }\n}\n\n/**\n * Thrown by add/sub and equation-level checks when dimensions disagree.\n * (Moved from src/dimensional/algebra.ts as part of the v0.2.0 UPTError\n * refactor. Behavior unchanged.)\n */\nexport class DimensionMismatchError extends UPTError {\n public readonly expected: Dimension;\n public readonly actual: Dimension;\n constructor(message: string, expected: Dimension, actual: Dimension) {\n super(message);\n this.name = 'DimensionMismatchError';\n this.expected = expected;\n this.actual = actual;\n Object.setPrototypeOf(this, DimensionMismatchError.prototype);\n }\n}\n\n/**\n * Thrown when a tensor-symbol's indices list contains the same label\n * more than once (e.g., T^μ_μ_μ). Per Part-VII §VII.4.\n *\n * NOTE: this error fires on DECLARATION-TIME duplicates within a single\n * tensor-symbol's indices list. Those indices are *free*, not \"dummy\"\n * (a dummy index in tensor calculus is one that is summed over). The\n * earlier name `RepeatedDummyLabelError` was a misnomer; that deprecated\n * alias was removed in v0.4.5.\n */\nexport class DuplicateIndexLabelError extends UPTError {\n public readonly tensorName: string;\n public readonly label: string;\n constructor(tensorName: string, label: string) {\n super(\n `Tensor '${tensorName}' has repeated index label '${label}'. ` +\n `A label may appear at most twice (once upper, once lower) within ` +\n `a single tensor-symbol's indices list.`,\n );\n this.name = 'DuplicateIndexLabelError';\n this.tensorName = tensorName;\n this.label = label;\n Object.setPrototypeOf(this, DuplicateIndexLabelError.prototype);\n }\n}\n\n/**\n * Thrown when an index label appears more than twice across a\n * tensor-product's operands. Einstein contraction requires exactly two\n * occurrences (one upper + one lower) per dummy label. Per Part-VII §VII.4.\n */\nexport class IndexLabelCollisionError extends UPTError {\n public readonly label: string;\n public readonly totalCount: number;\n /**\n * Tensor names that contributed occurrences of the colliding label,\n * if the caller has them available. May be undefined for callers that\n * don't track per-operand provenance.\n */\n public readonly sources?: ReadonlyArray<string>;\n constructor(\n label: string,\n totalCount: number,\n sources?: ReadonlyArray<string>,\n ) {\n const sourceClause =\n sources && sources.length > 0\n ? ` (sources: ${sources.join(', ')})`\n : '';\n super(\n `Index label '${label}' appears ${totalCount} times across the ` +\n `tensor-product operands${sourceClause} (max allowed: 2 for Einstein ` +\n `contraction). Rename one of the offending indices.`,\n );\n this.name = 'IndexLabelCollisionError';\n this.label = label;\n this.totalCount = totalCount;\n this.sources = sources;\n Object.setPrototypeOf(this, IndexLabelCollisionError.prototype);\n }\n}\n\n/**\n * Thrown when an index label appears twice in a tensor-product but both\n * occurrences share the same variance (both upper or both lower). v0.2.0\n * has no metric tensor available to raise/lower indices, so such a\n * contraction is rejected at validation time. Per Part-VII §VII.4.\n */\nexport class VarianceMismatchError extends UPTError {\n public readonly label: string;\n public readonly variance: 'upper' | 'lower';\n constructor(label: string, variance: 'upper' | 'lower') {\n super(\n `Index label '${label}' appears twice but both with variance '${variance}'. ` +\n `Einstein contraction requires one upper and one lower. ` +\n `If this is intentional, use raise(operand, gInverse, '${label}') or ` +\n `lower(operand, g, '${label}') to traverse variance via the metric ` +\n `before contracting.`,\n );\n this.name = 'VarianceMismatchError';\n this.label = label;\n this.variance = variance;\n Object.setPrototypeOf(this, VarianceMismatchError.prototype);\n }\n}\n\n/**\n * Thrown by `op '*'` / `'/'` / `'^'` when an operand carries non-empty\n * freeIndices. Scalar operators in v0.2.0 are strict: any tensor-valued\n * operand must instead pass through `tensor-product`. Per Part-VII §VII.5\n * (op-tensor boundary rules).\n */\nexport class TensorInScalarOpError extends UPTError {\n public readonly op: string;\n constructor(op: string) {\n super(\n `Operator '${op}' is scalar-only; received a tensor argument with ` +\n `non-empty freeIndices. Use 'tensor-product' for tensor multiplication.`,\n );\n this.name = 'TensorInScalarOpError';\n this.op = op;\n Object.setPrototypeOf(this, TensorInScalarOpError.prototype);\n }\n}\n\n/**\n * Thrown by `op '+'` / `'-'` when the operand freeIndices maps differ.\n * Addition / subtraction across tensors requires identical free-index\n * signatures (same labels, same per-label upper/lower counts). Per\n * Part-VII §VII.5.\n */\nexport class FreeIndexMismatchError extends UPTError {\n constructor(message: string) {\n super(message);\n this.name = 'FreeIndexMismatchError';\n Object.setPrototypeOf(this, FreeIndexMismatchError.prototype);\n }\n}\n\n/**\n * Thrown by the validator's tensor-product child resolver when a non-tensor\n * operand to a `tensor-product` fails dimension inference. Subclassing\n * UPTError (rather than throwing a plain `Error`) preserves the §14.7\n * forward-compat invariant that downstream consumers can discriminate\n * UPT-source errors with `err instanceof UPTError`.\n */\nexport class TensorProductChildInferenceError extends UPTError {\n constructor(message: string) {\n super(message);\n this.name = 'TensorProductChildInferenceError';\n Object.setPrototypeOf(this, TensorProductChildInferenceError.prototype);\n }\n}\n\n/**\n * Thrown when a `metric-tensor` node has rank other than 2. Per\n * Part-VIII §VIII.2 (metric-tensor-rank-2-only TENSOR-RULE). The metric\n * is fundamentally a rank-2 object in v0.3.0; higher-rank generalizations\n * are out of scope.\n */\nexport class InvalidMetricRankError extends UPTError {\n public readonly tensorName: string;\n public readonly actualRank: number;\n constructor(tensorName: string, actualRank: number) {\n super(\n `Metric tensor '${tensorName}' has rank ${actualRank}, but a ` +\n `metric must be rank-2 (exactly two indices). Per Part-VIII §VIII.2.`,\n );\n this.name = 'InvalidMetricRankError';\n this.tensorName = tensorName;\n this.actualRank = actualRank;\n Object.setPrototypeOf(this, InvalidMetricRankError.prototype);\n }\n}\n\n/**\n * Thrown when a `metric-tensor` has mixed-variance indices, an empty\n * signature, an invalid signature string, or other structural problem\n * orthogonal to rank. Per Part-VIII §VIII.2 and §VIII.5 (raise/lower\n * variance requirements).\n */\nexport class MetricSignatureError extends UPTError {\n public readonly tensorName: string;\n public readonly reason: string;\n constructor(tensorName: string, reason: string) {\n super(\n `Metric tensor '${tensorName}': ${reason}. Per Part-VIII §VIII.2.`,\n );\n this.name = 'MetricSignatureError';\n this.tensorName = tensorName;\n this.reason = reason;\n Object.setPrototypeOf(this, MetricSignatureError.prototype);\n }\n}\n\n/**\n * Thrown when a `kronecker-delta` node has rank other than 2.\n * Per Part-VIII §VIII.3.\n */\nexport class InvalidKroneckerRankError extends UPTError {\n public readonly actualRank: number;\n constructor(actualRank: number) {\n super(\n `Kronecker delta has rank ${actualRank}, but must be rank-2 ` +\n `(exactly one upper + one lower index). Per Part-VIII §VIII.3.`,\n );\n this.name = 'InvalidKroneckerRankError';\n this.actualRank = actualRank;\n Object.setPrototypeOf(this, InvalidKroneckerRankError.prototype);\n }\n}\n\n/**\n * Thrown when a `kronecker-delta`'s two indices share the same variance\n * (both upper or both lower). Per Part-VIII §VIII.3, the canonical\n * δ^μ_ν requires mixed variance.\n */\nexport class KroneckerVarianceError extends UPTError {\n public readonly bothVariance: 'upper' | 'lower';\n constructor(bothVariance: 'upper' | 'lower') {\n super(\n `Kronecker delta indices both have variance '${bothVariance}'; ` +\n `must be one upper + one lower (canonical δ^μ_ν form). ` +\n `Per Part-VIII §VIII.3.`,\n );\n this.name = 'KroneckerVarianceError';\n this.bothVariance = bothVariance;\n Object.setPrototypeOf(this, KroneckerVarianceError.prototype);\n }\n}\n\n/**\n * Thrown when a `tensor-partial-derivative` node's `wrtIndex.variance`\n * is `'upper'`. The differentiation operator ∂/∂x^μ is fundamentally\n * covariant (lower) regardless of the variance of the coordinate. Per\n * Part-VIII §VIII.4 (pderiv-wrtIndex-always-lower TENSOR-RULE).\n */\nexport class PartialDerivativeIndexVarianceError extends UPTError {\n public readonly label: string;\n constructor(label: string) {\n super(\n `Partial-derivative index '${label}' has variance 'upper', but ` +\n `∂_μ is fundamentally covariant — wrtIndex.variance must always ` +\n `be 'lower'. Per Part-VIII §VIII.4.`,\n );\n this.name = 'PartialDerivativeIndexVarianceError';\n this.label = label;\n Object.setPrototypeOf(this, PartialDerivativeIndexVarianceError.prototype);\n }\n}\n\n/**\n * Emitted (not thrown) via `process.emitWarning` when a covariant-derivative's\n * `wrt` coordinate label collides with an existing free index of the operand\n * and the env var `UPT_ALLOW_COORD_SHADOW=1` has opted in to downgraded\n * handling. By default the collision throws `MetricSignatureError` (soundness\n * over friendliness — silent wrong results are the worst failure mode).\n *\n * Lives here (dimensional/errors.ts) rather than numerical/index.ts to avoid\n * a dimensional → numerical import cycle; re-exported from numerical/index.ts\n * for the public API surface per v0.4.0-Implementation-Plan Task 13.\n *\n * Uses `Object.setPrototypeOf` for correct `instanceof` after ES5 transpilation.\n *\n * @public\n */\nexport class DuplicateCoordinateWarning extends Error {\n constructor(coord: string, conflictingIndex: string) {\n super(\n `Covariant-derivative wrt='${coord}' collides with existing free index ` +\n `'${conflictingIndex}' of the operand; result will silently misbehave. ` +\n `Rename the operand's free index or pick a different wrt label.`,\n );\n this.name = 'DuplicateCoordinateWarning';\n Object.setPrototypeOf(this, DuplicateCoordinateWarning.prototype);\n }\n}\n"]}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/dimensional/errors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * UPT error hierarchy. All UPT-source errors subclass UPTError so\n * downstream consumers (mathjs, threejs, TensorJS) can discriminate\n * with `err instanceof UPTError`.\n *\n * @module dimensional/errors\n */\n\nimport { Dimension } from './types.js';\n\n/** Base class for all UPT-source errors. */\nexport class UPTError extends Error {\n constructor(message: string, options?: { readonly cause?: unknown }) {\n super(message, options);\n this.name = 'UPTError';\n // Restore prototype chain (needed for instanceof after ES5 transpilation).\n }\n}\n\n/**\n * Thrown by add/sub and equation-level checks when dimensions disagree.\n * (Moved from src/dimensional/algebra.ts as part of the v0.2.0 UPTError\n * refactor. Behavior unchanged.)\n */\nexport class DimensionMismatchError extends UPTError {\n public readonly expected: Dimension;\n public readonly actual: Dimension;\n constructor(message: string, expected: Dimension, actual: Dimension) {\n super(message);\n this.name = 'DimensionMismatchError';\n this.expected = expected;\n this.actual = actual;\n }\n}\n\n/**\n * Thrown when a tensor-symbol's indices list contains the same label\n * more than once (e.g., T^μ_μ_μ). Per Part-VII §VII.4.\n *\n * NOTE: this error fires on DECLARATION-TIME duplicates within a single\n * tensor-symbol's indices list. Those indices are *free*, not \"dummy\"\n * (a dummy index in tensor calculus is one that is summed over). The\n * earlier name `RepeatedDummyLabelError` was a misnomer; that deprecated\n * alias was removed in v0.4.5.\n */\nexport class DuplicateIndexLabelError extends UPTError {\n public readonly tensorName: string;\n public readonly label: string;\n constructor(tensorName: string, label: string) {\n super(\n `Tensor '${tensorName}' has repeated index label '${label}'. ` +\n `A label may appear at most twice (once upper, once lower) within ` +\n `a single tensor-symbol's indices list.`,\n );\n this.name = 'DuplicateIndexLabelError';\n this.tensorName = tensorName;\n this.label = label;\n }\n}\n\n/**\n * Thrown when an index label appears more than twice across a\n * tensor-product's operands. Einstein contraction requires exactly two\n * occurrences (one upper + one lower) per dummy label. Per Part-VII §VII.4.\n */\nexport class IndexLabelCollisionError extends UPTError {\n public readonly label: string;\n public readonly totalCount: number;\n /**\n * Tensor names that contributed occurrences of the colliding label,\n * if the caller has them available. May be undefined for callers that\n * don't track per-operand provenance.\n */\n public readonly sources?: ReadonlyArray<string>;\n constructor(\n label: string,\n totalCount: number,\n sources?: ReadonlyArray<string>,\n ) {\n const sourceClause =\n sources && sources.length > 0\n ? ` (sources: ${sources.join(', ')})`\n : '';\n super(\n `Index label '${label}' appears ${totalCount} times across the ` +\n `tensor-product operands${sourceClause} (max allowed: 2 for Einstein ` +\n `contraction). Rename one of the offending indices.`,\n );\n this.name = 'IndexLabelCollisionError';\n this.label = label;\n this.totalCount = totalCount;\n this.sources = sources;\n }\n}\n\n/**\n * Thrown when an index label appears twice in a tensor-product but both\n * occurrences share the same variance (both upper or both lower). v0.2.0\n * has no metric tensor available to raise/lower indices, so such a\n * contraction is rejected at validation time. Per Part-VII §VII.4.\n */\nexport class VarianceMismatchError extends UPTError {\n public readonly label: string;\n public readonly variance: 'upper' | 'lower';\n constructor(label: string, variance: 'upper' | 'lower') {\n super(\n `Index label '${label}' appears twice but both with variance '${variance}'. ` +\n `Einstein contraction requires one upper and one lower. ` +\n `If this is intentional, use raise(operand, gInverse, '${label}') or ` +\n `lower(operand, g, '${label}') to traverse variance via the metric ` +\n `before contracting.`,\n );\n this.name = 'VarianceMismatchError';\n this.label = label;\n this.variance = variance;\n }\n}\n\n/**\n * Thrown by `op '*'` / `'/'` / `'^'` when an operand carries non-empty\n * freeIndices. Scalar operators in v0.2.0 are strict: any tensor-valued\n * operand must instead pass through `tensor-product`. Per Part-VII §VII.5\n * (op-tensor boundary rules).\n */\nexport class TensorInScalarOpError extends UPTError {\n public readonly op: string;\n constructor(op: string) {\n super(\n `Operator '${op}' is scalar-only; received a tensor argument with ` +\n `non-empty freeIndices. Use 'tensor-product' for tensor multiplication.`,\n );\n this.name = 'TensorInScalarOpError';\n this.op = op;\n }\n}\n\n/**\n * Thrown by `op '+'` / `'-'` when the operand freeIndices maps differ.\n * Addition / subtraction across tensors requires identical free-index\n * signatures (same labels, same per-label upper/lower counts). Per\n * Part-VII §VII.5.\n */\nexport class FreeIndexMismatchError extends UPTError {\n constructor(message: string) {\n super(message);\n this.name = 'FreeIndexMismatchError';\n }\n}\n\n/**\n * Thrown by the validator's tensor-product child resolver when a non-tensor\n * operand to a `tensor-product` fails dimension inference. Subclassing\n * UPTError (rather than throwing a plain `Error`) preserves the §14.7\n * forward-compat invariant that downstream consumers can discriminate\n * UPT-source errors with `err instanceof UPTError`.\n */\nexport class TensorProductChildInferenceError extends UPTError {\n constructor(message: string) {\n super(message);\n this.name = 'TensorProductChildInferenceError';\n }\n}\n\n/**\n * Thrown when a `metric-tensor` node has rank other than 2. Per\n * Part-VIII §VIII.2 (metric-tensor-rank-2-only TENSOR-RULE). The metric\n * is fundamentally a rank-2 object in v0.3.0; higher-rank generalizations\n * are out of scope.\n */\nexport class InvalidMetricRankError extends UPTError {\n public readonly tensorName: string;\n public readonly actualRank: number;\n constructor(tensorName: string, actualRank: number) {\n super(\n `Metric tensor '${tensorName}' has rank ${actualRank}, but a ` +\n `metric must be rank-2 (exactly two indices). Per Part-VIII §VIII.2.`,\n );\n this.name = 'InvalidMetricRankError';\n this.tensorName = tensorName;\n this.actualRank = actualRank;\n }\n}\n\n/**\n * Thrown when a `metric-tensor` has mixed-variance indices, an empty\n * signature, an invalid signature string, or other structural problem\n * orthogonal to rank. Per Part-VIII §VIII.2 and §VIII.5 (raise/lower\n * variance requirements).\n */\nexport class MetricSignatureError extends UPTError {\n public readonly tensorName: string;\n public readonly reason: string;\n constructor(tensorName: string, reason: string) {\n super(\n `Metric tensor '${tensorName}': ${reason}. Per Part-VIII §VIII.2.`,\n );\n this.name = 'MetricSignatureError';\n this.tensorName = tensorName;\n this.reason = reason;\n }\n}\n\n/**\n * Thrown when a `kronecker-delta` node has rank other than 2.\n * Per Part-VIII §VIII.3.\n */\nexport class InvalidKroneckerRankError extends UPTError {\n public readonly actualRank: number;\n constructor(actualRank: number) {\n super(\n `Kronecker delta has rank ${actualRank}, but must be rank-2 ` +\n `(exactly one upper + one lower index). Per Part-VIII §VIII.3.`,\n );\n this.name = 'InvalidKroneckerRankError';\n this.actualRank = actualRank;\n }\n}\n\n/**\n * Thrown when a `kronecker-delta`'s two indices share the same variance\n * (both upper or both lower). Per Part-VIII §VIII.3, the canonical\n * δ^μ_ν requires mixed variance.\n */\nexport class KroneckerVarianceError extends UPTError {\n public readonly bothVariance: 'upper' | 'lower';\n constructor(bothVariance: 'upper' | 'lower') {\n super(\n `Kronecker delta indices both have variance '${bothVariance}'; ` +\n `must be one upper + one lower (canonical δ^μ_ν form). ` +\n `Per Part-VIII §VIII.3.`,\n );\n this.name = 'KroneckerVarianceError';\n this.bothVariance = bothVariance;\n }\n}\n\n/**\n * Thrown when a `tensor-partial-derivative` node's `wrtIndex.variance`\n * is `'upper'`. The differentiation operator ∂/∂x^μ is fundamentally\n * covariant (lower) regardless of the variance of the coordinate. Per\n * Part-VIII §VIII.4 (pderiv-wrtIndex-always-lower TENSOR-RULE).\n */\nexport class PartialDerivativeIndexVarianceError extends UPTError {\n public readonly label: string;\n constructor(label: string) {\n super(\n `Partial-derivative index '${label}' has variance 'upper', but ` +\n `∂_μ is fundamentally covariant — wrtIndex.variance must always ` +\n `be 'lower'. Per Part-VIII §VIII.4.`,\n );\n this.name = 'PartialDerivativeIndexVarianceError';\n this.label = label;\n }\n}\n\n/**\n * Emitted (not thrown) via `process.emitWarning` when a covariant-derivative's\n * `wrt` coordinate label collides with an existing free index of the operand\n * and the env var `UPT_ALLOW_COORD_SHADOW=1` has opted in to downgraded\n * handling. By default the collision throws `MetricSignatureError` (soundness\n * over friendliness — silent wrong results are the worst failure mode).\n *\n * Lives here (dimensional/errors.ts) rather than numerical/index.ts to avoid\n * a dimensional → numerical import cycle; re-exported from numerical/index.ts\n * for the public API surface per v0.4.0-Implementation-Plan Task 13.\n *\n * A plain `class extends Error` under the ES2022 target: `instanceof` holds without a prototype reset.\n *\n * @public\n */\nexport class DuplicateCoordinateWarning extends Error {\n constructor(coord: string, conflictingIndex: string) {\n super(\n `Covariant-derivative wrt='${coord}' collides with existing free index ` +\n `'${conflictingIndex}' of the operand; result will silently misbehave. ` +\n `Rename the operand's free index or pick a different wrt label.`,\n );\n this.name = 'DuplicateCoordinateWarning';\n }\n}\n"]}
@@ -12,9 +12,15 @@
12
12
  * through its shortest round-trip decimal (`String(x)`), which is the
13
13
  * literal a constant was written with.
14
14
  *
15
+ * The arithmetic is MathTS's (`@danielsimonjr/mathts-core`); the UPT
16
+ * {@link ExactScale} shape and function names are the thin layer over it, and
17
+ * a scale expression (`data/units.json`) reads through MathTS
18
+ * `readScaleExpression` under this module's UPT-facing signature.
19
+ *
15
20
  * @module dimensional/exact-scale
16
21
  * @internal
17
22
  */
23
+ import { type ExactScale as CoreExactScale } from '@danielsimonjr/mathts-core';
18
24
  /** `num / den × irrational`, with `den > 0` and the fraction in lowest terms. @internal */
19
25
  export interface ExactScale {
20
26
  readonly num: bigint;
@@ -22,6 +28,10 @@ export interface ExactScale {
22
28
  /** The factor no rational states (π, ln 2). 1 for a rational scale. */
23
29
  readonly irrational: number;
24
30
  }
31
+ /** UPT {@link ExactScale} to the MathTS core shape. @internal */
32
+ export declare function coreExactScaleFromUpt(s: ExactScale): CoreExactScale;
33
+ /** MathTS core exact scale to UPT {@link ExactScale}. @internal */
34
+ export declare function uptExactScaleFromCore(s: CoreExactScale): ExactScale;
25
35
  /** The scale 1. @internal */
26
36
  export declare const UNIT_SCALE: ExactScale;
27
37
  /**
@@ -42,7 +52,7 @@ export declare function multiplyScales(...factors: readonly ExactScale[]): Exact
42
52
  export declare function divideScales(a: ExactScale, b: ExactScale): ExactScale;
43
53
  /**
44
54
  * `a ^ n`. An integer power stays exact. A fractional power has no exact
45
- * rational in general, so it becomes one floating factor.
55
+ * rational in general and throws.
46
56
  * @internal
47
57
  */
48
58
  export declare function powerScale(a: ExactScale, n: number): ExactScale;
@@ -51,13 +61,13 @@ export declare function addScales(a: ExactScale, b: ExactScale): ExactScale;
51
61
  /** The scale as a double: the rational rounded once, times the irrational factor. @internal */
52
62
  export declare function scaleToNumber(s: ExactScale): number;
53
63
  /**
54
- * The two sides of a unit text or a scale expression under the single-solidus
55
- * convention of ISO 80000-1: everything after the first `/` is the
56
- * denominator, so a chain is one denominator (`km/s/Mpc` is km/(s·Mpc), and
57
- * `W/m*K` is W/(m·K), not (W/m)·K). The denominator comes back as one
58
- * `*`-joined product, each `/`-part's outer parentheses dropped. `units.ts`
59
- * and {@link readScaleExpression} both split here, so a unit text and a scale
60
- * expression in `data/units.json` read a `/` the same way.
64
+ * The two sides of a unit text under the single-solidus convention of
65
+ * ISO 80000-1: everything after the first `/` is the denominator, so a chain
66
+ * is one denominator (`km/s/Mpc` is km/(s·Mpc), and `W/m*K` is W/(m·K), not
67
+ * (W/m)·K). The denominator comes back as one `*`-joined product, each
68
+ * `/`-part's outer parentheses dropped. `units.ts` splits here, so a unit text
69
+ * reads a `/` the same way a scale expression does. MathTS states the same
70
+ * rule inside its `readScaleExpression` and does not export the split.
61
71
  * @internal
62
72
  */
63
73
  export declare function solidusSides(text: string): {
@@ -70,9 +80,12 @@ export declare function solidusSides(text: string): {
70
80
  * each a decimal literal or a name with an optional integer power
71
81
  * (`4.1868*453.59237/1.8`, `pi/180`, `lbf/inch^2`). A `/` follows the unit
72
82
  * grammar ({@link solidusSides}): `a/b*c` is a/(b·c). `resolve` gives a name
73
- * its scale and returns undefined for a name it does not know, which throws
74
- * here. A decimal literal is read digit for digit, so the result is the
75
- * rational the text states.
83
+ * its scale and returns undefined for a name it does not know, which throws.
84
+ * A decimal literal is read digit for digit, so the result is the rational the
85
+ * text states.
86
+ *
87
+ * MathTS's `readScaleExpression` is the reader; this is the UPT-facing
88
+ * signature over it, the one adapter between its exact scale and UPT's.
76
89
  * @internal
77
90
  */
78
91
  export declare function readScaleExpression(text: string, resolve: (name: string) => ExactScale | undefined): ExactScale;
@@ -1 +1 @@
1
- {"version":3,"file":"exact-scale.d.ts","sourceRoot":"","sources":["../../src/dimensional/exact-scale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,2FAA2F;AAC3F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAmBD,6BAA6B;AAC7B,eAAO,MAAM,UAAU,EAAE,UAAgD,CAAC;AAI1E;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAW5D;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAG7C;AAED,sCAAsC;AACtC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAEjF;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAGrD;AAED,6BAA6B;AAC7B,wBAAgB,cAAc,CAAC,GAAG,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,CAU5E;AAED,yBAAyB;AACzB,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAGrE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAO/D;AAED,+FAA+F;AAC/F,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAGlE;AAwDD,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAGnD;AAID;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CASvG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,GAAG,UAAU,CAiB/G"}
1
+ {"version":3,"file":"exact-scale.d.ts","sourceRoot":"","sources":["../../src/dimensional/exact-scale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAYL,KAAK,UAAU,IAAI,cAAc,EAClC,MAAM,4BAA4B,CAAC;AAKpC,2FAA2F;AAC3F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AA+BD,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,UAAU,GAAG,cAAc,CAEnE;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,cAAc,GAAG,UAAU,CAEnE;AAgDD,6BAA6B;AAC7B,eAAO,MAAM,UAAU,EAAE,UAAgD,CAAC;AAE1E;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAG5D;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAG7C;AAED,sCAAsC;AACtC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAEjF;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAGrD;AAED,6BAA6B;AAC7B,wBAAgB,cAAc,CAAC,GAAG,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,CAG5E;AAED,yBAAyB;AACzB,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAErE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAG/D;AAED,+FAA+F;AAC/F,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAIlE;AAED,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAEnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CASvG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,GAAG,UAAU,CAO/G"}
@@ -12,15 +12,21 @@
12
12
  * through its shortest round-trip decimal (`String(x)`), which is the
13
13
  * literal a constant was written with.
14
14
  *
15
+ * The arithmetic is MathTS's (`@danielsimonjr/mathts-core`); the UPT
16
+ * {@link ExactScale} shape and function names are the thin layer over it, and
17
+ * a scale expression (`data/units.json`) reads through MathTS
18
+ * `readScaleExpression` under this module's UPT-facing signature.
19
+ *
15
20
  * @module dimensional/exact-scale
16
21
  * @internal
17
22
  */
18
- function gcd(a, b) {
19
- let x = a < 0n ? -a : a;
20
- let y = b < 0n ? -b : b;
21
- while (y !== 0n)
22
- [x, y] = [y, x % y];
23
- return x;
23
+ import { addExactScales, decimalExactScale, divideExactScales, exactScaleOf, exactScaleToNumber, LN2_EXACT_SCALE, multiplyExactScales, PI_EXACT_SCALE, powerExactScale, ratioExactScale, readScaleExpression as mathtsReadScaleExpression, } from '@danielsimonjr/mathts-core';
24
+ import { gcd } from '@danielsimonjr/mathts-functions';
25
+ import { bigintFrom } from '../core/mathts-read.js';
26
+ /** The bigint gcd, MathTS `gcd` on its `bigint, bigint` signature, read back as the bigint it is. */
27
+ function bigGcd(a, b) {
28
+ const g = bigintFrom('gcd', gcd(a, b));
29
+ return g < 0n ? -g : g;
24
30
  }
25
31
  function make(num, den, irrational) {
26
32
  if (den === 0n)
@@ -29,42 +35,104 @@ function make(num, den, irrational) {
29
35
  num = -num;
30
36
  den = -den;
31
37
  }
32
- const g = gcd(num, den);
38
+ const g = bigGcd(num, den);
33
39
  return g > 1n ? { num: num / g, den: den / g, irrational } : { num, den, irrational };
34
40
  }
41
+ function irrationalFactor(irrationals) {
42
+ let factor = 1;
43
+ const pi = irrationals.pi ?? 0;
44
+ const ln2 = irrationals.ln2 ?? 0;
45
+ if (pi !== 0)
46
+ factor *= Math.PI ** pi;
47
+ if (ln2 !== 0)
48
+ factor *= Math.LN2 ** ln2;
49
+ return factor;
50
+ }
51
+ function fromCore(s) {
52
+ return make(s.num, s.den, irrationalFactor(s.irrationals));
53
+ }
54
+ /** UPT {@link ExactScale} to the MathTS core shape. @internal */
55
+ export function coreExactScaleFromUpt(s) {
56
+ return toCore(s);
57
+ }
58
+ /** MathTS core exact scale to UPT {@link ExactScale}. @internal */
59
+ export function uptExactScaleFromCore(s) {
60
+ return fromCore(s);
61
+ }
62
+ /** When `x / base` is a nonzero integer, that integer; otherwise null. */
63
+ function integerMultiple(x, base) {
64
+ if (!Number.isFinite(x) || !Number.isFinite(base) || base === 0 || x === 0)
65
+ return null;
66
+ const q = x / base;
67
+ if (!Number.isFinite(q))
68
+ return null;
69
+ const n = Math.trunc(q);
70
+ if (n === 0 || q !== n)
71
+ return null;
72
+ if (Math.abs(n * base - x) > Math.max(1e-12, Math.abs(x) * 1e-14))
73
+ return null;
74
+ return BigInt(n);
75
+ }
76
+ /**
77
+ * When `x` is `base` raised to a small integer power (π⁻¹ for a parsec-scale,
78
+ * ln 2 for a bit), that integer; otherwise null. The factor is compared
79
+ * exactly: `irrationalFactor` built it as `base ** n`, so the same expression
80
+ * reads it back.
81
+ */
82
+ function irrationalExponent(x, base) {
83
+ if (!Number.isFinite(x) || x <= 0 || !Number.isFinite(base) || base <= 0)
84
+ return null;
85
+ for (let n = -8; n <= 8; n++) {
86
+ if (x === base ** n)
87
+ return n;
88
+ }
89
+ return null;
90
+ }
91
+ function toCore(s) {
92
+ let core = ratioExactScale(s.num, s.den);
93
+ const ir = s.irrational;
94
+ if (ir === 1)
95
+ return core;
96
+ const piPower = irrationalExponent(ir, Math.PI);
97
+ if (piPower !== null)
98
+ return multiplyExactScales(core, powerExactScale(PI_EXACT_SCALE, piPower));
99
+ const ln2Power = irrationalExponent(ir, Math.LN2);
100
+ if (ln2Power !== null)
101
+ return multiplyExactScales(core, powerExactScale(LN2_EXACT_SCALE, ln2Power));
102
+ const piMultiple = integerMultiple(ir, Math.PI);
103
+ if (piMultiple !== null) {
104
+ if (piMultiple !== 1n)
105
+ core = multiplyExactScales(core, ratioExactScale(piMultiple, 1n));
106
+ return multiplyExactScales(core, PI_EXACT_SCALE);
107
+ }
108
+ const ln2Multiple = integerMultiple(ir, Math.LN2);
109
+ if (ln2Multiple !== null) {
110
+ if (ln2Multiple !== 1n)
111
+ core = multiplyExactScales(core, ratioExactScale(ln2Multiple, 1n));
112
+ return multiplyExactScales(core, LN2_EXACT_SCALE);
113
+ }
114
+ return multiplyExactScales(core, exactScaleOf(ir));
115
+ }
35
116
  /** The scale 1. @internal */
36
117
  export const UNIT_SCALE = { num: 1n, den: 1n, irrational: 1 };
37
- const DECIMAL = /^([+-]?)(\d*)(?:\.(\d*))?(?:[eE]([+-]?\d+))?$/;
38
118
  /**
39
119
  * The exact value of a decimal literal (`72`, `0.45359237`, `1.602176634e-19`),
40
120
  * or null when `text` is not one.
41
121
  * @internal
42
122
  */
43
123
  export function decimalScale(text) {
44
- const m = DECIMAL.exec(text.trim());
45
- if (m === null)
46
- return null;
47
- const whole = m[2] ?? '';
48
- const fraction = m[3] ?? '';
49
- if (whole === '' && fraction === '')
50
- return null;
51
- const exponent = Number(m[4] ?? '0') - fraction.length;
52
- if (!Number.isSafeInteger(exponent) || Math.abs(exponent) > 10_000)
53
- return null;
54
- let num = BigInt(whole + fraction);
55
- if (m[1] === '-')
56
- num = -num;
57
- return exponent >= 0 ? make(num * 10n ** BigInt(exponent), 1n, 1) : make(num, 10n ** BigInt(-exponent), 1);
124
+ const scaled = decimalExactScale(text.trim());
125
+ return scaled === null ? null : fromCore(scaled);
58
126
  }
59
127
  /** The exact scale a finite JavaScript number was written as. @internal */
60
128
  export function scaleOf(x) {
61
129
  if (!Number.isFinite(x))
62
130
  throw new RangeError(`exact scale: ${x} is not finite`);
63
- return decimalScale(String(x));
131
+ return fromCore(exactScaleOf(x));
64
132
  }
65
133
  /** `num / den`, exactly. @internal */
66
134
  export function ratioScale(num, den) {
67
- return make(BigInt(num), BigInt(den), 1);
135
+ return fromCore(ratioExactScale(num, den));
68
136
  }
69
137
  /** A factor no rational states, such as π or ln 2. @internal */
70
138
  export function irrationalScale(x) {
@@ -74,108 +142,43 @@ export function irrationalScale(x) {
74
142
  }
75
143
  /** `a × b × …`. @internal */
76
144
  export function multiplyScales(...factors) {
77
- let num = 1n;
78
- let den = 1n;
79
- let irrational = 1;
80
- for (const f of factors) {
81
- num *= f.num;
82
- den *= f.den;
83
- irrational *= f.irrational;
84
- }
85
- return make(num, den, irrational);
145
+ if (factors.length === 0)
146
+ return UNIT_SCALE;
147
+ return fromCore(multiplyExactScales(...factors.map(toCore)));
86
148
  }
87
149
  /** `a / b`. @internal */
88
150
  export function divideScales(a, b) {
89
- if (b.num === 0n)
90
- throw new RangeError('exact scale: division by zero');
91
- return make(a.num * b.den, a.den * b.num, a.irrational / b.irrational);
151
+ return fromCore(divideExactScales(toCore(a), toCore(b)));
92
152
  }
93
153
  /**
94
154
  * `a ^ n`. An integer power stays exact. A fractional power has no exact
95
- * rational in general, so it becomes one floating factor.
155
+ * rational in general and throws.
96
156
  * @internal
97
157
  */
98
158
  export function powerScale(a, n) {
99
- if (Number.isInteger(n)) {
100
- const k = BigInt(Math.abs(n));
101
- const up = make(a.num ** k, a.den ** k, a.irrational ** Math.abs(n));
102
- return n >= 0 ? up : divideScales(UNIT_SCALE, up);
103
- }
104
- return irrationalScale(scaleToNumber(a) ** n);
159
+ if (!Number.isInteger(n))
160
+ throw new RangeError(`exact scale: power ${n} is not an integer`);
161
+ return fromCore(powerExactScale(toCore(a), n));
105
162
  }
106
163
  /** `a + b`: exact when both are rational multiples of the same irrational factor. @internal */
107
164
  export function addScales(a, b) {
108
- if (a.irrational === b.irrational)
109
- return make(a.num * b.den + b.num * a.den, a.den * b.den, a.irrational);
110
- return irrationalScale(scaleToNumber(a) + scaleToNumber(b));
111
- }
112
- /** The fewest significant digits kept before the sticky digit; far beyond a double's 17. */
113
- const MIN_DIGITS = 40;
114
- /** Decimal places of `1 / den` when it terminates (`den` = 2^a·5^b): max(a, b). Null otherwise. */
115
- function terminatingPlaces(den) {
116
- let d = den;
117
- let twos = 0;
118
- let fives = 0;
119
- while (d % 2n === 0n) {
120
- d /= 2n;
121
- twos++;
122
- }
123
- while (d % 5n === 0n) {
124
- d /= 5n;
125
- fives++;
126
- }
127
- return d === 1n ? Math.max(twos, fives) : null;
128
- }
129
- /**
130
- * The rational `num / den` (`den > 0`), reduced, rounded once to the nearest double.
131
- *
132
- * A terminating quotient (`den` = 2^a·5^b) is written out exactly, every digit,
133
- * and parsed: a tie between two doubles is a dyadic rational, so it always
134
- * lands here and rounds half to even. Any other quotient is not a tie, and it
135
- * is at least `1 / (den·2^54)` of its magnitude away from every tie; truncating
136
- * it to `max(40, digits(den) + 20)` significant digits stays closer than that,
137
- * and a sticky `1` puts the string strictly inside the truncation interval, so
138
- * the string rounds the way the quotient does for any denominator.
139
- */
140
- function rationalToNumber(num, den) {
141
- if (num === 0n)
142
- return 0;
143
- const negative = num < 0n;
144
- const g = gcd(num, den);
145
- const a = (negative ? -num : num) / g;
146
- den /= g;
147
- const places = terminatingPlaces(den);
148
- if (places !== null) {
149
- const value = Number(`${(a * 10n ** BigInt(places)) / den}e-${places}`);
150
- return negative ? -value : value;
151
- }
152
- const digits = Math.max(MIN_DIGITS, den.toString().length + 20);
153
- const shift = digits - (a.toString().length - den.toString().length);
154
- let q;
155
- if (shift >= 0) {
156
- q = (a * 10n ** BigInt(shift)) / den;
157
- }
158
- else {
159
- q = a / (den * 10n ** BigInt(-shift));
160
- }
161
- // Not terminating, so the remainder is never zero: the sticky digit is always due.
162
- const value = Number(`${q.toString()}1e${-(shift + 1)}`);
163
- return negative ? -value : value;
165
+ const sum = addExactScales(toCore(a), toCore(b));
166
+ if (sum === null)
167
+ throw new RangeError('exact scale: unlike irrational factors');
168
+ return fromCore(sum);
164
169
  }
165
170
  /** The scale as a double: the rational rounded once, times the irrational factor. @internal */
166
171
  export function scaleToNumber(s) {
167
- const rational = rationalToNumber(s.num, s.den);
168
- return s.irrational === 1 ? rational : rational * s.irrational;
172
+ return exactScaleToNumber(toCore(s));
169
173
  }
170
- const FACTOR = /^([^*/^\s]+)(?:\^([+-]?\d+))?$/;
171
174
  /**
172
- * The two sides of a unit text or a scale expression under the single-solidus
173
- * convention of ISO 80000-1: everything after the first `/` is the
174
- * denominator, so a chain is one denominator (`km/s/Mpc` is km/(s·Mpc), and
175
- * `W/m*K` is W/(m·K), not (W/m)·K). The denominator comes back as one
176
- * `*`-joined product, each `/`-part's outer parentheses dropped. `units.ts`
177
- * and {@link readScaleExpression} both split here, so a unit text and a scale
178
- * expression in `data/units.json` read a `/` the same way.
175
+ * The two sides of a unit text under the single-solidus convention of
176
+ * ISO 80000-1: everything after the first `/` is the denominator, so a chain
177
+ * is one denominator (`km/s/Mpc` is km/(s·Mpc), and `W/m*K` is W/(m·K), not
178
+ * (W/m)·K). The denominator comes back as one `*`-joined product, each
179
+ * `/`-part's outer parentheses dropped. `units.ts` splits here, so a unit text
180
+ * reads a `/` the same way a scale expression does. MathTS states the same
181
+ * rule inside its `readScaleExpression` and does not export the split.
179
182
  * @internal
180
183
  */
181
184
  export function solidusSides(text) {
@@ -194,29 +197,18 @@ export function solidusSides(text) {
194
197
  * each a decimal literal or a name with an optional integer power
195
198
  * (`4.1868*453.59237/1.8`, `pi/180`, `lbf/inch^2`). A `/` follows the unit
196
199
  * grammar ({@link solidusSides}): `a/b*c` is a/(b·c). `resolve` gives a name
197
- * its scale and returns undefined for a name it does not know, which throws
198
- * here. A decimal literal is read digit for digit, so the result is the
199
- * rational the text states.
200
+ * its scale and returns undefined for a name it does not know, which throws.
201
+ * A decimal literal is read digit for digit, so the result is the rational the
202
+ * text states.
203
+ *
204
+ * MathTS's `readScaleExpression` is the reader; this is the UPT-facing
205
+ * signature over it, the one adapter between its exact scale and UPT's.
200
206
  * @internal
201
207
  */
202
208
  export function readScaleExpression(text, resolve) {
203
- const product = (side) => {
204
- let scale = UNIT_SCALE;
205
- for (const part of side.split('*')) {
206
- const m = FACTOR.exec(part);
207
- if (m === null)
208
- throw new RangeError(`exact scale: '${text}' is not a product of factors`);
209
- const atom = m[1];
210
- const base = decimalScale(atom) ?? resolve(atom);
211
- if (base === undefined)
212
- throw new RangeError(`exact scale: '${text}' names '${atom}', which is not a known scale`);
213
- scale = multiplyScales(scale, m[2] === undefined ? base : powerScale(base, Number(m[2])));
214
- }
215
- return scale;
216
- };
217
- const trimmed = text.trim();
218
- const { numerator, denominator } = solidusSides(trimmed);
219
- const top = product(numerator);
220
- return trimmed.includes('/') ? divideScales(top, product(denominator)) : top;
209
+ return uptExactScaleFromCore(mathtsReadScaleExpression(text.trim(), (name) => {
210
+ const scale = resolve(name);
211
+ return scale === undefined ? undefined : coreExactScaleFromUpt(scale);
212
+ }));
221
213
  }
222
214
  //# sourceMappingURL=exact-scale.js.map