universal-physics-tensor 9.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1109) hide show
  1. package/README.md +21 -17
  2. package/bin/upt.mjs +13 -1
  3. package/data/atlas/atlas.json +79 -68
  4. package/data/atlas/atlas.jsonld +1 -1
  5. package/data/atlas/diffusion.json +24 -23
  6. package/data/atlas/oscillators.json +21 -16
  7. package/data/atlas/waves.json +36 -31
  8. package/data/atlas/witness-results.json +11 -11
  9. package/data/bridge-catalog.json +1192 -1636
  10. package/data/bridge-catalog.schema.json +390 -135
  11. package/data/quantities.json +53 -19
  12. package/data/schemas/atlas-record.v0.json +184 -46
  13. package/data/units.json +33 -4
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +35 -18
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/association.js.map +1 -1
  18. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
  19. package/dist/atlas/benchmark/backend-shapes.js +5 -1
  20. package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
  21. package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
  22. package/dist/atlas/benchmark/baselines.js +8 -0
  23. package/dist/atlas/benchmark/baselines.js.map +1 -1
  24. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +12 -3
  25. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  26. package/dist/atlas/benchmark/hybrid-retrieval.js +30 -21
  27. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  28. package/dist/atlas/benchmark/leakage.js.map +1 -1
  29. package/dist/atlas/benchmark/loader.js +2 -2
  30. package/dist/atlas/benchmark/loader.js.map +1 -1
  31. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
  32. package/dist/atlas/benchmark/run-atlas.js +14 -2
  33. package/dist/atlas/benchmark/run-atlas.js.map +1 -1
  34. package/dist/atlas/benchmark/stats.d.ts +3 -3
  35. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  36. package/dist/atlas/benchmark/stats.js +16 -8
  37. package/dist/atlas/benchmark/stats.js.map +1 -1
  38. package/dist/atlas/benchmark/study.js.map +1 -1
  39. package/dist/atlas/benchmark/types.js.map +1 -1
  40. package/dist/atlas/bridge-record.d.ts +4 -4
  41. package/dist/atlas/bridge-record.d.ts.map +1 -1
  42. package/dist/atlas/bridge-record.js +6 -6
  43. package/dist/atlas/bridge-record.js.map +1 -1
  44. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  45. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  46. package/dist/atlas/catalog-formal-ref.js +52 -5
  47. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  48. package/dist/atlas/chain-pipeline.d.ts +0 -11
  49. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  50. package/dist/atlas/chain-pipeline.js +12 -24
  51. package/dist/atlas/chain-pipeline.js.map +1 -1
  52. package/dist/atlas/composition-table.js.map +1 -1
  53. package/dist/atlas/conventions.js.map +1 -1
  54. package/dist/atlas/coverage.d.ts +2 -2
  55. package/dist/atlas/coverage.js.map +1 -1
  56. package/dist/atlas/derivation.js.map +1 -1
  57. package/dist/atlas/derive-evidence.d.ts +6 -4
  58. package/dist/atlas/derive-evidence.d.ts.map +1 -1
  59. package/dist/atlas/derive-evidence.js +7 -2
  60. package/dist/atlas/derive-evidence.js.map +1 -1
  61. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  62. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  63. package/dist/atlas/diffusion/bridges-closure.js +8 -17
  64. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  65. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  66. package/dist/atlas/diffusion/bridges.js +27 -42
  67. package/dist/atlas/diffusion/bridges.js.map +1 -1
  68. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  69. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  70. package/dist/atlas/diffusion/dimensions.js +8 -16
  71. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  72. package/dist/atlas/diffusion/index.d.ts +1 -1
  73. package/dist/atlas/diffusion/index.d.ts.map +1 -1
  74. package/dist/atlas/diffusion/index.js.map +1 -1
  75. package/dist/atlas/diffusion/models.d.ts +3 -3
  76. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  77. package/dist/atlas/diffusion/models.js +5 -10
  78. package/dist/atlas/diffusion/models.js.map +1 -1
  79. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  80. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  81. package/dist/atlas/diffusion/numerics.js +38 -24
  82. package/dist/atlas/diffusion/numerics.js.map +1 -1
  83. package/dist/atlas/error-algebra.d.ts +6 -0
  84. package/dist/atlas/error-algebra.d.ts.map +1 -1
  85. package/dist/atlas/error-algebra.js +26 -0
  86. package/dist/atlas/error-algebra.js.map +1 -1
  87. package/dist/atlas/export.d.ts +18 -2
  88. package/dist/atlas/export.d.ts.map +1 -1
  89. package/dist/atlas/export.js +9 -3
  90. package/dist/atlas/export.js.map +1 -1
  91. package/dist/atlas/families.d.ts +19 -2
  92. package/dist/atlas/families.d.ts.map +1 -1
  93. package/dist/atlas/families.js +26 -3
  94. package/dist/atlas/families.js.map +1 -1
  95. package/dist/atlas/family.d.ts +27 -0
  96. package/dist/atlas/family.d.ts.map +1 -0
  97. package/dist/atlas/family.js +12 -0
  98. package/dist/atlas/family.js.map +1 -0
  99. package/dist/atlas/index.d.ts +3 -2
  100. package/dist/atlas/index.d.ts.map +1 -1
  101. package/dist/atlas/index.js +2 -1
  102. package/dist/atlas/index.js.map +1 -1
  103. package/dist/atlas/link-prediction.d.ts +107 -4
  104. package/dist/atlas/link-prediction.d.ts.map +1 -1
  105. package/dist/atlas/link-prediction.js +212 -66
  106. package/dist/atlas/link-prediction.js.map +1 -1
  107. package/dist/atlas/model.js.map +1 -1
  108. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  109. package/dist/atlas/oscillators/bridges-coarse.js +7 -12
  110. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  111. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  112. package/dist/atlas/oscillators/bridges-exact.js +6 -10
  113. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  114. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  115. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  116. package/dist/atlas/oscillators/bridges-limits.js +23 -36
  117. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  118. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  119. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  120. package/dist/atlas/oscillators/dimensions.js +9 -21
  121. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  122. package/dist/atlas/oscillators/index.d.ts +1 -16
  123. package/dist/atlas/oscillators/index.d.ts.map +1 -1
  124. package/dist/atlas/oscillators/index.js.map +1 -1
  125. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  126. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  127. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  128. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  129. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  130. package/dist/atlas/oscillators/models.js +2 -6
  131. package/dist/atlas/oscillators/models.js.map +1 -1
  132. package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
  133. package/dist/atlas/oscillators/norm-transport.js.map +1 -1
  134. package/dist/atlas/oscillators/norms.js.map +1 -1
  135. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  136. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  137. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  138. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  139. package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
  140. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  141. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  142. package/dist/atlas/oscillators/phase-translation.js +3 -4
  143. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  144. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  145. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  146. package/dist/atlas/oscillators/position-translation.js +123 -12
  147. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  148. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  149. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  150. package/dist/atlas/oscillators/rejections.js +0 -7
  151. package/dist/atlas/oscillators/rejections.js.map +1 -1
  152. package/dist/atlas/path-bound.js.map +1 -1
  153. package/dist/atlas/physjs-entries.generated.d.ts +25 -24
  154. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  155. package/dist/atlas/physjs-entries.generated.js +25 -24
  156. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  157. package/dist/atlas/physjs-ref.d.ts +107 -70
  158. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  159. package/dist/atlas/physjs-ref.js +184 -101
  160. package/dist/atlas/physjs-ref.js.map +1 -1
  161. package/dist/atlas/physjs-reviewed.d.ts +31 -0
  162. package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
  163. package/dist/atlas/physjs-reviewed.js +194 -0
  164. package/dist/atlas/physjs-reviewed.js.map +1 -0
  165. package/dist/atlas/poster/associations.js.map +1 -1
  166. package/dist/atlas/poster/derivations.js.map +1 -1
  167. package/dist/atlas/poster/statements.d.ts +0 -19
  168. package/dist/atlas/poster/statements.d.ts.map +1 -1
  169. package/dist/atlas/poster/statements.js +1 -1
  170. package/dist/atlas/poster/statements.js.map +1 -1
  171. package/dist/atlas/proof-target.d.ts +1 -1
  172. package/dist/atlas/proof-target.js +1 -1
  173. package/dist/atlas/proof-target.js.map +1 -1
  174. package/dist/atlas/public.d.ts +2 -1
  175. package/dist/atlas/public.d.ts.map +1 -1
  176. package/dist/atlas/public.js +2 -1
  177. package/dist/atlas/public.js.map +1 -1
  178. package/dist/atlas/regime.d.ts +1 -1
  179. package/dist/atlas/regime.d.ts.map +1 -1
  180. package/dist/atlas/regime.js +1 -1
  181. package/dist/atlas/regime.js.map +1 -1
  182. package/dist/atlas/serialize.d.ts +18 -12
  183. package/dist/atlas/serialize.d.ts.map +1 -1
  184. package/dist/atlas/serialize.js +28 -18
  185. package/dist/atlas/serialize.js.map +1 -1
  186. package/dist/atlas/statement.js.map +1 -1
  187. package/dist/atlas/text-overlap.d.ts +23 -0
  188. package/dist/atlas/text-overlap.d.ts.map +1 -0
  189. package/dist/atlas/text-overlap.js +41 -0
  190. package/dist/atlas/text-overlap.js.map +1 -0
  191. package/dist/atlas/translation-registry.js.map +1 -1
  192. package/dist/atlas/translation.js.map +1 -1
  193. package/dist/atlas/types.d.ts +9 -2
  194. package/dist/atlas/types.d.ts.map +1 -1
  195. package/dist/atlas/types.js +1 -1
  196. package/dist/atlas/types.js.map +1 -1
  197. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  198. package/dist/atlas/waves/bridges-closure.js +2 -9
  199. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  200. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  201. package/dist/atlas/waves/bridges.js +32 -52
  202. package/dist/atlas/waves/bridges.js.map +1 -1
  203. package/dist/atlas/waves/index.d.ts +1 -1
  204. package/dist/atlas/waves/index.d.ts.map +1 -1
  205. package/dist/atlas/waves/index.js.map +1 -1
  206. package/dist/atlas/waves/models.d.ts +5 -6
  207. package/dist/atlas/waves/models.d.ts.map +1 -1
  208. package/dist/atlas/waves/models.js +7 -13
  209. package/dist/atlas/waves/models.js.map +1 -1
  210. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  211. package/dist/atlas/waves/numerics.js +10 -3
  212. package/dist/atlas/waves/numerics.js.map +1 -1
  213. package/dist/atlas/witness-artifact.js.map +1 -1
  214. package/dist/atlas/witness-dominance.d.ts +4 -3
  215. package/dist/atlas/witness-dominance.d.ts.map +1 -1
  216. package/dist/atlas/witness-dominance.js +15 -5
  217. package/dist/atlas/witness-dominance.js.map +1 -1
  218. package/dist/atlas/witness-numeric.d.ts +38 -4
  219. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  220. package/dist/atlas/witness-numeric.js +80 -2
  221. package/dist/atlas/witness-numeric.js.map +1 -1
  222. package/dist/atlas/witness-result.d.ts +7 -1
  223. package/dist/atlas/witness-result.d.ts.map +1 -1
  224. package/dist/atlas/witness-result.js.map +1 -1
  225. package/dist/atlas/witness-specs.d.ts.map +1 -1
  226. package/dist/atlas/witness-specs.js +19 -0
  227. package/dist/atlas/witness-specs.js.map +1 -1
  228. package/dist/atlas/witness-symbolic.d.ts +75 -3
  229. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  230. package/dist/atlas/witness-symbolic.js +116 -10
  231. package/dist/atlas/witness-symbolic.js.map +1 -1
  232. package/dist/atlas/witnesses/quantum-support.js.map +1 -1
  233. package/dist/bridges/caller-table.d.ts +1 -1
  234. package/dist/bridges/caller-table.d.ts.map +1 -1
  235. package/dist/bridges/caller-table.js.map +1 -1
  236. package/dist/bridges/carrier-sign.d.ts.map +1 -1
  237. package/dist/bridges/carrier-sign.js +8 -3
  238. package/dist/bridges/carrier-sign.js.map +1 -1
  239. package/dist/bridges/catalog-adapter.d.ts +12 -3
  240. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  241. package/dist/bridges/catalog-adapter.js +17 -9
  242. package/dist/bridges/catalog-adapter.js.map +1 -1
  243. package/dist/bridges/catalog-load.d.ts +12 -2
  244. package/dist/bridges/catalog-load.d.ts.map +1 -1
  245. package/dist/bridges/catalog-load.js +181 -13
  246. package/dist/bridges/catalog-load.js.map +1 -1
  247. package/dist/bridges/catalog-types.d.ts +74 -26
  248. package/dist/bridges/catalog-types.d.ts.map +1 -1
  249. package/dist/bridges/catalog-types.js +11 -1
  250. package/dist/bridges/catalog-types.js.map +1 -1
  251. package/dist/bridges/coefficient-statement.js +1 -5
  252. package/dist/bridges/coefficient-statement.js.map +1 -1
  253. package/dist/bridges/confrontation-coverage.js.map +1 -1
  254. package/dist/bridges/confrontations.d.ts +1 -1
  255. package/dist/bridges/confrontations.d.ts.map +1 -1
  256. package/dist/bridges/confrontations.js +1 -1
  257. package/dist/bridges/confrontations.js.map +1 -1
  258. package/dist/bridges/evaluation-errors.d.ts +46 -3
  259. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  260. package/dist/bridges/evaluation-errors.js +40 -4
  261. package/dist/bridges/evaluation-errors.js.map +1 -1
  262. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  263. package/dist/bridges/evaluator-inputs.js +7 -5
  264. package/dist/bridges/evaluator-inputs.js.map +1 -1
  265. package/dist/bridges/evaluators.d.ts +17 -2
  266. package/dist/bridges/evaluators.d.ts.map +1 -1
  267. package/dist/bridges/evaluators.js +76 -28
  268. package/dist/bridges/evaluators.js.map +1 -1
  269. package/dist/bridges/expr-parse.d.ts +38 -4
  270. package/dist/bridges/expr-parse.d.ts.map +1 -1
  271. package/dist/bridges/expr-parse.js +101 -12
  272. package/dist/bridges/expr-parse.js.map +1 -1
  273. package/dist/bridges/holds.d.ts +40 -4
  274. package/dist/bridges/holds.d.ts.map +1 -1
  275. package/dist/bridges/holds.js +128 -19
  276. package/dist/bridges/holds.js.map +1 -1
  277. package/dist/bridges/index.d.ts +15 -14
  278. package/dist/bridges/index.d.ts.map +1 -1
  279. package/dist/bridges/index.js +14 -15
  280. package/dist/bridges/index.js.map +1 -1
  281. package/dist/bridges/input-contract.js.map +1 -1
  282. package/dist/bridges/membership.d.ts +5 -3
  283. package/dist/bridges/membership.d.ts.map +1 -1
  284. package/dist/bridges/membership.js +5 -6
  285. package/dist/bridges/membership.js.map +1 -1
  286. package/dist/bridges/notices.d.ts.map +1 -1
  287. package/dist/bridges/notices.js +5 -5
  288. package/dist/bridges/notices.js.map +1 -1
  289. package/dist/bridges/observations/types.js.map +1 -1
  290. package/dist/bridges/rejected.d.ts +11 -17
  291. package/dist/bridges/rejected.d.ts.map +1 -1
  292. package/dist/bridges/rejected.js +13 -68
  293. package/dist/bridges/rejected.js.map +1 -1
  294. package/dist/bridges/relation-eval.d.ts +6 -7
  295. package/dist/bridges/relation-eval.d.ts.map +1 -1
  296. package/dist/bridges/relation-eval.js +20 -50
  297. package/dist/bridges/relation-eval.js.map +1 -1
  298. package/dist/bridges/rhs-registry.js.map +1 -1
  299. package/dist/bridges/sensitivity.d.ts +11 -3
  300. package/dist/bridges/sensitivity.d.ts.map +1 -1
  301. package/dist/bridges/sensitivity.js +27 -13
  302. package/dist/bridges/sensitivity.js.map +1 -1
  303. package/dist/bridges/tensor-index.js.map +1 -1
  304. package/dist/bridges/types.d.ts +1 -7
  305. package/dist/bridges/types.d.ts.map +1 -1
  306. package/dist/bridges/types.js +1 -4
  307. package/dist/bridges/types.js.map +1 -1
  308. package/dist/bridges/validity.d.ts +33 -0
  309. package/dist/bridges/validity.d.ts.map +1 -0
  310. package/dist/bridges/validity.js +67 -0
  311. package/dist/bridges/validity.js.map +1 -0
  312. package/dist/canonical/canonical-equation.js.map +1 -1
  313. package/dist/canonical/dimensional-fields.js.map +1 -1
  314. package/dist/canonical/entries/_l1-build.js.map +1 -1
  315. package/dist/canonical/entries/atomic.js +1 -3
  316. package/dist/canonical/entries/atomic.js.map +1 -1
  317. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  318. package/dist/canonical/entries/condensed-matter.js +8 -9
  319. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  320. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  321. package/dist/canonical/entries/dimensional-classics.js +5 -6
  322. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  323. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  324. package/dist/canonical/entries/electromagnetism.js +6 -12
  325. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  326. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  327. package/dist/canonical/entries/fluids-waves.js +3 -7
  328. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  329. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  330. package/dist/canonical/entries/mechanics.js +4 -6
  331. package/dist/canonical/entries/mechanics.js.map +1 -1
  332. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  333. package/dist/canonical/entries/nonmonomial.js +38 -39
  334. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  335. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  336. package/dist/canonical/entries/relativity.js +6 -6
  337. package/dist/canonical/entries/relativity.js.map +1 -1
  338. package/dist/canonical/entries/statistical-mechanics.js +5 -5
  339. package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
  340. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  341. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  342. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  343. package/dist/canonical/fixed-points.d.ts +94 -0
  344. package/dist/canonical/fixed-points.d.ts.map +1 -0
  345. package/dist/canonical/fixed-points.js +81 -0
  346. package/dist/canonical/fixed-points.js.map +1 -0
  347. package/dist/canonical/linkage.d.ts +29 -4
  348. package/dist/canonical/linkage.d.ts.map +1 -1
  349. package/dist/canonical/linkage.js +47 -64
  350. package/dist/canonical/linkage.js.map +1 -1
  351. package/dist/canonical/normal-form.d.ts +0 -8
  352. package/dist/canonical/normal-form.d.ts.map +1 -1
  353. package/dist/canonical/normal-form.js +22 -23
  354. package/dist/canonical/normal-form.js.map +1 -1
  355. package/dist/canonical/registry.js.map +1 -1
  356. package/dist/canonical/residual.js.map +1 -1
  357. package/dist/canonical/seed-l-layer.d.ts +7 -1
  358. package/dist/canonical/seed-l-layer.d.ts.map +1 -1
  359. package/dist/canonical/seed-l-layer.js +7 -1
  360. package/dist/canonical/seed-l-layer.js.map +1 -1
  361. package/dist/canonical/structural.d.ts +42 -21
  362. package/dist/canonical/structural.d.ts.map +1 -1
  363. package/dist/canonical/structural.js +64 -23
  364. package/dist/canonical/structural.js.map +1 -1
  365. package/dist/cases/brownian-sphere.d.ts +3 -3
  366. package/dist/cases/brownian-sphere.d.ts.map +1 -1
  367. package/dist/cases/brownian-sphere.js +10 -9
  368. package/dist/cases/brownian-sphere.js.map +1 -1
  369. package/dist/cases/damped-resonator.d.ts.map +1 -1
  370. package/dist/cases/damped-resonator.js +8 -11
  371. package/dist/cases/damped-resonator.js.map +1 -1
  372. package/dist/cases/index.js.map +1 -1
  373. package/dist/cases/kepler-rv.d.ts +1 -1
  374. package/dist/cases/kepler-rv.d.ts.map +1 -1
  375. package/dist/cases/kepler-rv.js +3 -2
  376. package/dist/cases/kepler-rv.js.map +1 -1
  377. package/dist/cases/lumped-cooling.d.ts +8 -3
  378. package/dist/cases/lumped-cooling.d.ts.map +1 -1
  379. package/dist/cases/lumped-cooling.js +22 -24
  380. package/dist/cases/lumped-cooling.js.map +1 -1
  381. package/dist/cases/quadrature.d.ts +7 -9
  382. package/dist/cases/quadrature.d.ts.map +1 -1
  383. package/dist/cases/quadrature.js +28 -32
  384. package/dist/cases/quadrature.js.map +1 -1
  385. package/dist/cases/resistor-noise.js +7 -7
  386. package/dist/cases/resistor-noise.js.map +1 -1
  387. package/dist/cases/skin-depth.d.ts +0 -4
  388. package/dist/cases/skin-depth.d.ts.map +1 -1
  389. package/dist/cases/skin-depth.js +3 -7
  390. package/dist/cases/skin-depth.js.map +1 -1
  391. package/dist/cases/types.js.map +1 -1
  392. package/dist/cli/args.d.ts +30 -3
  393. package/dist/cli/args.d.ts.map +1 -1
  394. package/dist/cli/args.js +47 -9
  395. package/dist/cli/args.js.map +1 -1
  396. package/dist/cli/bindings.d.ts +13 -0
  397. package/dist/cli/bindings.d.ts.map +1 -0
  398. package/dist/cli/bindings.js +33 -0
  399. package/dist/cli/bindings.js.map +1 -0
  400. package/dist/cli/closed-form-range.js.map +1 -1
  401. package/dist/cli/command.d.ts +8 -1
  402. package/dist/cli/command.d.ts.map +1 -1
  403. package/dist/cli/command.js.map +1 -1
  404. package/dist/cli/commands/_atlas-map.d.ts +2 -11
  405. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  406. package/dist/cli/commands/_atlas-map.js +50 -35
  407. package/dist/cli/commands/_atlas-map.js.map +1 -1
  408. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  409. package/dist/cli/commands/_atlas-route.js +6 -2
  410. package/dist/cli/commands/_atlas-route.js.map +1 -1
  411. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  412. package/dist/cli/commands/_discovery-opts.js +48 -14
  413. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  414. package/dist/cli/commands/atlas.d.ts.map +1 -1
  415. package/dist/cli/commands/atlas.js +9 -8
  416. package/dist/cli/commands/atlas.js.map +1 -1
  417. package/dist/cli/commands/audit.d.ts.map +1 -1
  418. package/dist/cli/commands/audit.js +20 -20
  419. package/dist/cli/commands/audit.js.map +1 -1
  420. package/dist/cli/commands/axes.d.ts.map +1 -1
  421. package/dist/cli/commands/axes.js +20 -1
  422. package/dist/cli/commands/axes.js.map +1 -1
  423. package/dist/cli/commands/candidates.d.ts.map +1 -1
  424. package/dist/cli/commands/candidates.js +16 -8
  425. package/dist/cli/commands/candidates.js.map +1 -1
  426. package/dist/cli/commands/canonical.js.map +1 -1
  427. package/dist/cli/commands/chain.js +1 -1
  428. package/dist/cli/commands/chain.js.map +1 -1
  429. package/dist/cli/commands/confront.d.ts.map +1 -1
  430. package/dist/cli/commands/confront.js +22 -20
  431. package/dist/cli/commands/confront.js.map +1 -1
  432. package/dist/cli/commands/connectors.js.map +1 -1
  433. package/dist/cli/commands/coverage.js.map +1 -1
  434. package/dist/cli/commands/derive.d.ts.map +1 -1
  435. package/dist/cli/commands/derive.js +60 -35
  436. package/dist/cli/commands/derive.js.map +1 -1
  437. package/dist/cli/commands/discover.d.ts.map +1 -1
  438. package/dist/cli/commands/discover.js +20 -10
  439. package/dist/cli/commands/discover.js.map +1 -1
  440. package/dist/cli/commands/eval.d.ts.map +1 -1
  441. package/dist/cli/commands/eval.js +14 -10
  442. package/dist/cli/commands/eval.js.map +1 -1
  443. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  444. package/dist/cli/commands/evaluate.js +108 -58
  445. package/dist/cli/commands/evaluate.js.map +1 -1
  446. package/dist/cli/commands/explain.d.ts.map +1 -1
  447. package/dist/cli/commands/explain.js +16 -8
  448. package/dist/cli/commands/explain.js.map +1 -1
  449. package/dist/cli/commands/frontier.js.map +1 -1
  450. package/dist/cli/commands/ground.d.ts.map +1 -1
  451. package/dist/cli/commands/ground.js +41 -10
  452. package/dist/cli/commands/ground.js.map +1 -1
  453. package/dist/cli/commands/index.js.map +1 -1
  454. package/dist/cli/commands/map.d.ts.map +1 -1
  455. package/dist/cli/commands/map.js +155 -92
  456. package/dist/cli/commands/map.js.map +1 -1
  457. package/dist/cli/commands/metric.d.ts.map +1 -1
  458. package/dist/cli/commands/metric.js +58 -20
  459. package/dist/cli/commands/metric.js.map +1 -1
  460. package/dist/cli/commands/path.d.ts +10 -0
  461. package/dist/cli/commands/path.d.ts.map +1 -1
  462. package/dist/cli/commands/path.js +29 -7
  463. package/dist/cli/commands/path.js.map +1 -1
  464. package/dist/cli/commands/predict.js.map +1 -1
  465. package/dist/cli/commands/priority.js.map +1 -1
  466. package/dist/cli/commands/probe.d.ts.map +1 -1
  467. package/dist/cli/commands/probe.js +105 -38
  468. package/dist/cli/commands/probe.js.map +1 -1
  469. package/dist/cli/commands/recover.js +1 -1
  470. package/dist/cli/commands/recover.js.map +1 -1
  471. package/dist/cli/commands/regime.d.ts +5 -4
  472. package/dist/cli/commands/regime.d.ts.map +1 -1
  473. package/dist/cli/commands/regime.js +25 -26
  474. package/dist/cli/commands/regime.js.map +1 -1
  475. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  476. package/dist/cli/commands/retrieve.js +23 -14
  477. package/dist/cli/commands/retrieve.js.map +1 -1
  478. package/dist/cli/commands/search.d.ts.map +1 -1
  479. package/dist/cli/commands/search.js +9 -4
  480. package/dist/cli/commands/search.js.map +1 -1
  481. package/dist/cli/commands/symbolic.js +31 -36
  482. package/dist/cli/commands/symbolic.js.map +1 -1
  483. package/dist/cli/commands/testplan.d.ts.map +1 -1
  484. package/dist/cli/commands/testplan.js +5 -3
  485. package/dist/cli/commands/testplan.js.map +1 -1
  486. package/dist/cli/conventions.js.map +1 -1
  487. package/dist/cli/determination.js.map +1 -1
  488. package/dist/cli/errors.js.map +1 -1
  489. package/dist/cli/euler-guard.js.map +1 -1
  490. package/dist/cli/eval-numbers.js.map +1 -1
  491. package/dist/cli/expr-print.d.ts +28 -3
  492. package/dist/cli/expr-print.d.ts.map +1 -1
  493. package/dist/cli/expr-print.js +42 -22
  494. package/dist/cli/expr-print.js.map +1 -1
  495. package/dist/cli/flag-help.js.map +1 -1
  496. package/dist/cli/graphs.js.map +1 -1
  497. package/dist/cli/library-defaults.d.ts +19 -0
  498. package/dist/cli/library-defaults.d.ts.map +1 -0
  499. package/dist/cli/library-defaults.js +22 -0
  500. package/dist/cli/library-defaults.js.map +1 -0
  501. package/dist/cli/main.d.ts +7 -0
  502. package/dist/cli/main.d.ts.map +1 -1
  503. package/dist/cli/main.js +25 -6
  504. package/dist/cli/main.js.map +1 -1
  505. package/dist/cli/map-evidence.js.map +1 -1
  506. package/dist/cli/numeric-flag.d.ts +12 -0
  507. package/dist/cli/numeric-flag.d.ts.map +1 -0
  508. package/dist/cli/numeric-flag.js +44 -0
  509. package/dist/cli/numeric-flag.js.map +1 -0
  510. package/dist/cli/output.d.ts +23 -6
  511. package/dist/cli/output.d.ts.map +1 -1
  512. package/dist/cli/output.js +15 -0
  513. package/dist/cli/output.js.map +1 -1
  514. package/dist/cli/published-url.js.map +1 -1
  515. package/dist/cli/record-reach.d.ts +6 -0
  516. package/dist/cli/record-reach.d.ts.map +1 -1
  517. package/dist/cli/record-reach.js +17 -11
  518. package/dist/cli/record-reach.js.map +1 -1
  519. package/dist/cli/record-tables.d.ts.map +1 -1
  520. package/dist/cli/record-tables.js +7 -6
  521. package/dist/cli/record-tables.js.map +1 -1
  522. package/dist/cli/record.d.ts +1 -5
  523. package/dist/cli/record.d.ts.map +1 -1
  524. package/dist/cli/record.js +40 -20
  525. package/dist/cli/record.js.map +1 -1
  526. package/dist/cli/search-index.d.ts +5 -0
  527. package/dist/cli/search-index.d.ts.map +1 -1
  528. package/dist/cli/search-index.js +19 -7
  529. package/dist/cli/search-index.js.map +1 -1
  530. package/dist/cli/statuses.d.ts +0 -2
  531. package/dist/cli/statuses.d.ts.map +1 -1
  532. package/dist/cli/statuses.js +0 -7
  533. package/dist/cli/statuses.js.map +1 -1
  534. package/dist/cli/stored-results.d.ts +7 -0
  535. package/dist/cli/stored-results.d.ts.map +1 -0
  536. package/dist/cli/stored-results.js +23 -0
  537. package/dist/cli/stored-results.js.map +1 -0
  538. package/dist/cli/top-level-help.js.map +1 -1
  539. package/dist/cli/version.d.ts.map +1 -1
  540. package/dist/cli/version.js +7 -5
  541. package/dist/cli/version.js.map +1 -1
  542. package/dist/cli-api.d.ts +49 -14
  543. package/dist/cli-api.d.ts.map +1 -1
  544. package/dist/cli-api.js +42 -17
  545. package/dist/cli-api.js.map +1 -1
  546. package/dist/composition/adjudication.js.map +1 -1
  547. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  548. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  549. package/dist/composition/algebraic-equivalence.js +115 -0
  550. package/dist/composition/algebraic-equivalence.js.map +1 -0
  551. package/dist/composition/aliases.js.map +1 -1
  552. package/dist/composition/audit-coverage.d.ts +2 -0
  553. package/dist/composition/audit-coverage.d.ts.map +1 -1
  554. package/dist/composition/audit-coverage.js.map +1 -1
  555. package/dist/composition/axes.d.ts +6 -0
  556. package/dist/composition/axes.d.ts.map +1 -1
  557. package/dist/composition/axes.js +18 -6
  558. package/dist/composition/axes.js.map +1 -1
  559. package/dist/composition/axis-audit.d.ts +47 -20
  560. package/dist/composition/axis-audit.d.ts.map +1 -1
  561. package/dist/composition/axis-audit.js +82 -9
  562. package/dist/composition/axis-audit.js.map +1 -1
  563. package/dist/composition/bridge-analysis.d.ts +14 -15
  564. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  565. package/dist/composition/bridge-analysis.js +148 -91
  566. package/dist/composition/bridge-analysis.js.map +1 -1
  567. package/dist/composition/bridge-prediction.d.ts +5 -1
  568. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  569. package/dist/composition/bridge-prediction.js +12 -16
  570. package/dist/composition/bridge-prediction.js.map +1 -1
  571. package/dist/composition/buckingham-filter.js.map +1 -1
  572. package/dist/composition/canonical-compare.d.ts +40 -0
  573. package/dist/composition/canonical-compare.d.ts.map +1 -1
  574. package/dist/composition/canonical-compare.js +134 -26
  575. package/dist/composition/canonical-compare.js.map +1 -1
  576. package/dist/composition/canonical-graph.d.ts +9 -10
  577. package/dist/composition/canonical-graph.d.ts.map +1 -1
  578. package/dist/composition/canonical-graph.js +33 -102
  579. package/dist/composition/canonical-graph.js.map +1 -1
  580. package/dist/composition/canonical-json.js +2 -2
  581. package/dist/composition/canonical-json.js.map +1 -1
  582. package/dist/composition/canonical-prefactors.js.map +1 -1
  583. package/dist/composition/catalog-graph.d.ts.map +1 -1
  584. package/dist/composition/catalog-graph.js +8 -25
  585. package/dist/composition/catalog-graph.js.map +1 -1
  586. package/dist/composition/chain-candidate.d.ts +10 -0
  587. package/dist/composition/chain-candidate.d.ts.map +1 -1
  588. package/dist/composition/chain-candidate.js +11 -2
  589. package/dist/composition/chain-candidate.js.map +1 -1
  590. package/dist/composition/chain-match.d.ts +6 -3
  591. package/dist/composition/chain-match.d.ts.map +1 -1
  592. package/dist/composition/chain-match.js +4 -1
  593. package/dist/composition/chain-match.js.map +1 -1
  594. package/dist/composition/chain-regime.js.map +1 -1
  595. package/dist/composition/chain-result.d.ts.map +1 -1
  596. package/dist/composition/chain-result.js +2 -14
  597. package/dist/composition/chain-result.js.map +1 -1
  598. package/dist/composition/compose-surface.js.map +1 -1
  599. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  600. package/dist/composition/compose-symbolic.js +3 -2
  601. package/dist/composition/compose-symbolic.js.map +1 -1
  602. package/dist/composition/compose.d.ts.map +1 -1
  603. package/dist/composition/compose.js +166 -41
  604. package/dist/composition/compose.js.map +1 -1
  605. package/dist/composition/composition-recovery.d.ts.map +1 -1
  606. package/dist/composition/composition-recovery.js +4 -7
  607. package/dist/composition/composition-recovery.js.map +1 -1
  608. package/dist/composition/consequence.d.ts.map +1 -1
  609. package/dist/composition/consequence.js +15 -6
  610. package/dist/composition/consequence.js.map +1 -1
  611. package/dist/composition/consistency.js.map +1 -1
  612. package/dist/composition/descriptor.d.ts +1 -1
  613. package/dist/composition/descriptor.d.ts.map +1 -1
  614. package/dist/composition/descriptor.js.map +1 -1
  615. package/dist/composition/dimension-adjacency.js.map +1 -1
  616. package/dist/composition/discovery.d.ts +77 -11
  617. package/dist/composition/discovery.d.ts.map +1 -1
  618. package/dist/composition/discovery.js +194 -80
  619. package/dist/composition/discovery.js.map +1 -1
  620. package/dist/composition/edge.d.ts +40 -10
  621. package/dist/composition/edge.d.ts.map +1 -1
  622. package/dist/composition/edge.js +47 -12
  623. package/dist/composition/edge.js.map +1 -1
  624. package/dist/composition/enumerate.d.ts +2 -2
  625. package/dist/composition/enumerate.d.ts.map +1 -1
  626. package/dist/composition/enumerate.js +18 -3
  627. package/dist/composition/enumerate.js.map +1 -1
  628. package/dist/composition/evaluate-relation.d.ts +35 -11
  629. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  630. package/dist/composition/evaluate-relation.js +60 -39
  631. package/dist/composition/evaluate-relation.js.map +1 -1
  632. package/dist/composition/explain.d.ts +5 -9
  633. package/dist/composition/explain.d.ts.map +1 -1
  634. package/dist/composition/explain.js +38 -18
  635. package/dist/composition/explain.js.map +1 -1
  636. package/dist/composition/expr-eval.d.ts.map +1 -1
  637. package/dist/composition/expr-eval.js +2 -11
  638. package/dist/composition/expr-eval.js.map +1 -1
  639. package/dist/composition/expr-simplify.d.ts +16 -0
  640. package/dist/composition/expr-simplify.d.ts.map +1 -1
  641. package/dist/composition/expr-simplify.js +24 -59
  642. package/dist/composition/expr-simplify.js.map +1 -1
  643. package/dist/composition/expr-subst.js.map +1 -1
  644. package/dist/composition/formula-shape.d.ts +28 -0
  645. package/dist/composition/formula-shape.d.ts.map +1 -1
  646. package/dist/composition/formula-shape.js +96 -2
  647. package/dist/composition/formula-shape.js.map +1 -1
  648. package/dist/composition/frontier-account.d.ts +3 -2
  649. package/dist/composition/frontier-account.d.ts.map +1 -1
  650. package/dist/composition/frontier-account.js +7 -3
  651. package/dist/composition/frontier-account.js.map +1 -1
  652. package/dist/composition/graph-structure.d.ts +98 -0
  653. package/dist/composition/graph-structure.d.ts.map +1 -0
  654. package/dist/composition/graph-structure.js +167 -0
  655. package/dist/composition/graph-structure.js.map +1 -0
  656. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  657. package/dist/composition/graph-viz-svg.js +1 -1
  658. package/dist/composition/graph-viz-svg.js.map +1 -1
  659. package/dist/composition/graph-viz.d.ts.map +1 -1
  660. package/dist/composition/graph-viz.js +8 -37
  661. package/dist/composition/graph-viz.js.map +1 -1
  662. package/dist/composition/grounding.js.map +1 -1
  663. package/dist/composition/identifiability.d.ts +91 -4
  664. package/dist/composition/identifiability.d.ts.map +1 -1
  665. package/dist/composition/identifiability.js +363 -6
  666. package/dist/composition/identifiability.js.map +1 -1
  667. package/dist/composition/index.d.ts +14 -8
  668. package/dist/composition/index.d.ts.map +1 -1
  669. package/dist/composition/index.js +7 -5
  670. package/dist/composition/index.js.map +1 -1
  671. package/dist/composition/mathts-quiet.d.ts +29 -0
  672. package/dist/composition/mathts-quiet.d.ts.map +1 -0
  673. package/dist/composition/mathts-quiet.js +57 -0
  674. package/dist/composition/mathts-quiet.js.map +1 -0
  675. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  676. package/dist/composition/mathts-scalar-symbols.js +20 -35
  677. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  678. package/dist/composition/not-composable-seeds.d.ts +3 -1
  679. package/dist/composition/not-composable-seeds.d.ts.map +1 -1
  680. package/dist/composition/not-composable-seeds.js +2 -0
  681. package/dist/composition/not-composable-seeds.js.map +1 -1
  682. package/dist/composition/probe/backend-protocol.js.map +1 -1
  683. package/dist/composition/probe/candidate-store.js.map +1 -1
  684. package/dist/composition/probe/corpus.d.ts +4 -2
  685. package/dist/composition/probe/corpus.d.ts.map +1 -1
  686. package/dist/composition/probe/corpus.js +20 -9
  687. package/dist/composition/probe/corpus.js.map +1 -1
  688. package/dist/composition/probe/dataset.d.ts +17 -0
  689. package/dist/composition/probe/dataset.d.ts.map +1 -1
  690. package/dist/composition/probe/dataset.js +95 -50
  691. package/dist/composition/probe/dataset.js.map +1 -1
  692. package/dist/composition/probe/experiment-design.d.ts +5 -1
  693. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  694. package/dist/composition/probe/experiment-design.js +44 -24
  695. package/dist/composition/probe/experiment-design.js.map +1 -1
  696. package/dist/composition/probe/expression-gaps.js.map +1 -1
  697. package/dist/composition/probe/falsify.d.ts +14 -3
  698. package/dist/composition/probe/falsify.d.ts.map +1 -1
  699. package/dist/composition/probe/falsify.js +16 -27
  700. package/dist/composition/probe/falsify.js.map +1 -1
  701. package/dist/composition/probe/fingerprint.js.map +1 -1
  702. package/dist/composition/probe/fit.d.ts +7 -1
  703. package/dist/composition/probe/fit.d.ts.map +1 -1
  704. package/dist/composition/probe/fit.js +48 -23
  705. package/dist/composition/probe/fit.js.map +1 -1
  706. package/dist/composition/probe/frontier.d.ts.map +1 -1
  707. package/dist/composition/probe/frontier.js +33 -15
  708. package/dist/composition/probe/frontier.js.map +1 -1
  709. package/dist/composition/probe/generator.d.ts +27 -1
  710. package/dist/composition/probe/generator.d.ts.map +1 -1
  711. package/dist/composition/probe/generator.js +53 -30
  712. package/dist/composition/probe/generator.js.map +1 -1
  713. package/dist/composition/probe/index.d.ts +18 -2
  714. package/dist/composition/probe/index.d.ts.map +1 -1
  715. package/dist/composition/probe/index.js +10 -2
  716. package/dist/composition/probe/index.js.map +1 -1
  717. package/dist/composition/probe/limits.d.ts +24 -1
  718. package/dist/composition/probe/limits.d.ts.map +1 -1
  719. package/dist/composition/probe/limits.js +53 -11
  720. package/dist/composition/probe/limits.js.map +1 -1
  721. package/dist/composition/probe/metadata.js.map +1 -1
  722. package/dist/composition/probe/pipeline.d.ts +5 -0
  723. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  724. package/dist/composition/probe/pipeline.js +22 -9
  725. package/dist/composition/probe/pipeline.js.map +1 -1
  726. package/dist/composition/probe/power-law.d.ts +121 -0
  727. package/dist/composition/probe/power-law.d.ts.map +1 -0
  728. package/dist/composition/probe/power-law.js +255 -0
  729. package/dist/composition/probe/power-law.js.map +1 -0
  730. package/dist/composition/probe/problem.d.ts +12 -1
  731. package/dist/composition/probe/problem.d.ts.map +1 -1
  732. package/dist/composition/probe/problem.js +242 -48
  733. package/dist/composition/probe/problem.js.map +1 -1
  734. package/dist/composition/probe/report.js +1 -1
  735. package/dist/composition/probe/report.js.map +1 -1
  736. package/dist/composition/probe/residual.d.ts +6 -1
  737. package/dist/composition/probe/residual.d.ts.map +1 -1
  738. package/dist/composition/probe/residual.js +9 -7
  739. package/dist/composition/probe/residual.js.map +1 -1
  740. package/dist/composition/probe/run-manifest.js +2 -2
  741. package/dist/composition/probe/run-manifest.js.map +1 -1
  742. package/dist/composition/probe/scoring.d.ts +2 -1
  743. package/dist/composition/probe/scoring.d.ts.map +1 -1
  744. package/dist/composition/probe/scoring.js +21 -7
  745. package/dist/composition/probe/scoring.js.map +1 -1
  746. package/dist/composition/probe/search-budget.js.map +1 -1
  747. package/dist/composition/probe/serialize.js.map +1 -1
  748. package/dist/composition/probe/structure.d.ts +82 -17
  749. package/dist/composition/probe/structure.d.ts.map +1 -1
  750. package/dist/composition/probe/structure.js +129 -55
  751. package/dist/composition/probe/structure.js.map +1 -1
  752. package/dist/composition/probe/study.d.ts +35 -12
  753. package/dist/composition/probe/study.d.ts.map +1 -1
  754. package/dist/composition/probe/study.js +241 -184
  755. package/dist/composition/probe/study.js.map +1 -1
  756. package/dist/composition/probe/t-tail.d.ts +17 -0
  757. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  758. package/dist/composition/probe/t-tail.js +32 -0
  759. package/dist/composition/probe/t-tail.js.map +1 -0
  760. package/dist/composition/probe/types.d.ts +6 -1
  761. package/dist/composition/probe/types.d.ts.map +1 -1
  762. package/dist/composition/probe/types.js +2 -0
  763. package/dist/composition/probe/types.js.map +1 -1
  764. package/dist/composition/proposed-bridges.d.ts +51 -13
  765. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  766. package/dist/composition/proposed-bridges.js +110 -58
  767. package/dist/composition/proposed-bridges.js.map +1 -1
  768. package/dist/composition/quantities.d.ts +0 -4
  769. package/dist/composition/quantities.d.ts.map +1 -1
  770. package/dist/composition/quantities.js +5 -5
  771. package/dist/composition/quantities.js.map +1 -1
  772. package/dist/composition/quantity-clusters.d.ts +48 -0
  773. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  774. package/dist/composition/quantity-clusters.js +98 -0
  775. package/dist/composition/quantity-clusters.js.map +1 -0
  776. package/dist/composition/quantity.d.ts +18 -2
  777. package/dist/composition/quantity.d.ts.map +1 -1
  778. package/dist/composition/quantity.js +35 -6
  779. package/dist/composition/quantity.js.map +1 -1
  780. package/dist/composition/rational-exponent.d.ts +40 -0
  781. package/dist/composition/rational-exponent.d.ts.map +1 -0
  782. package/dist/composition/rational-exponent.js +65 -0
  783. package/dist/composition/rational-exponent.js.map +1 -0
  784. package/dist/composition/representative-values.d.ts +22 -0
  785. package/dist/composition/representative-values.d.ts.map +1 -1
  786. package/dist/composition/representative-values.js +23 -0
  787. package/dist/composition/representative-values.js.map +1 -1
  788. package/dist/composition/retrodiction.d.ts +16 -6
  789. package/dist/composition/retrodiction.d.ts.map +1 -1
  790. package/dist/composition/retrodiction.js +36 -10
  791. package/dist/composition/retrodiction.js.map +1 -1
  792. package/dist/composition/uncertainty.js.map +1 -1
  793. package/dist/composition/user-equation.d.ts.map +1 -1
  794. package/dist/composition/user-equation.js +2 -2
  795. package/dist/composition/user-equation.js.map +1 -1
  796. package/dist/core/assignment.d.ts +19 -0
  797. package/dist/core/assignment.d.ts.map +1 -0
  798. package/dist/core/assignment.js +19 -0
  799. package/dist/core/assignment.js.map +1 -0
  800. package/dist/core/axes-registry.d.ts +8 -5
  801. package/dist/core/axes-registry.d.ts.map +1 -1
  802. package/dist/core/axes-registry.js.map +1 -1
  803. package/dist/core/cell.js.map +1 -1
  804. package/dist/core/compare.d.ts +32 -0
  805. package/dist/core/compare.d.ts.map +1 -0
  806. package/dist/core/compare.js +46 -0
  807. package/dist/core/compare.js.map +1 -0
  808. package/dist/core/constants.d.ts +35 -35
  809. package/dist/core/constants.d.ts.map +1 -1
  810. package/dist/core/constants.js +52 -37
  811. package/dist/core/constants.js.map +1 -1
  812. package/dist/core/data-file.d.ts +7 -0
  813. package/dist/core/data-file.d.ts.map +1 -1
  814. package/dist/core/data-file.js +17 -0
  815. package/dist/core/data-file.js.map +1 -1
  816. package/dist/core/flux-rules.js +1 -1
  817. package/dist/core/flux-rules.js.map +1 -1
  818. package/dist/core/format.d.ts +36 -0
  819. package/dist/core/format.d.ts.map +1 -0
  820. package/dist/core/format.js +39 -0
  821. package/dist/core/format.js.map +1 -0
  822. package/dist/core/hash.d.ts +14 -0
  823. package/dist/core/hash.d.ts.map +1 -0
  824. package/dist/core/hash.js +17 -0
  825. package/dist/core/hash.js.map +1 -0
  826. package/dist/core/json-schema.d.ts +3 -1
  827. package/dist/core/json-schema.d.ts.map +1 -1
  828. package/dist/core/json-schema.js +41 -16
  829. package/dist/core/json-schema.js.map +1 -1
  830. package/dist/core/labeled-tensor.d.ts +6 -1
  831. package/dist/core/labeled-tensor.d.ts.map +1 -1
  832. package/dist/core/labeled-tensor.js +18 -16
  833. package/dist/core/labeled-tensor.js.map +1 -1
  834. package/dist/core/mathts-read.d.ts +25 -0
  835. package/dist/core/mathts-read.d.ts.map +1 -0
  836. package/dist/core/mathts-read.js +51 -0
  837. package/dist/core/mathts-read.js.map +1 -0
  838. package/dist/core/regime-registry.d.ts +6 -2
  839. package/dist/core/regime-registry.d.ts.map +1 -1
  840. package/dist/core/regime-registry.js.map +1 -1
  841. package/dist/core/regime-rule-install.js.map +1 -1
  842. package/dist/core/regimes-builtins.js.map +1 -1
  843. package/dist/core/tensor.d.ts +7 -4
  844. package/dist/core/tensor.d.ts.map +1 -1
  845. package/dist/core/tensor.js +64 -8
  846. package/dist/core/tensor.js.map +1 -1
  847. package/dist/core/types.d.ts +5 -5
  848. package/dist/core/types.js.map +1 -1
  849. package/dist/core/universal-index.js.map +1 -1
  850. package/dist/diff/bridge-ast-gradient.d.ts +4 -5
  851. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  852. package/dist/diff/bridge-ast-gradient.js +10 -6
  853. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  854. package/dist/diff/bridge-gradient.d.ts +43 -86
  855. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  856. package/dist/diff/bridge-gradient.js +40 -109
  857. package/dist/diff/bridge-gradient.js.map +1 -1
  858. package/dist/diff/bridge-specs.d.ts +16 -5
  859. package/dist/diff/bridge-specs.d.ts.map +1 -1
  860. package/dist/diff/bridge-specs.js +19 -4
  861. package/dist/diff/bridge-specs.js.map +1 -1
  862. package/dist/dimensional/algebra.d.ts +18 -0
  863. package/dist/dimensional/algebra.d.ts.map +1 -1
  864. package/dist/dimensional/algebra.js +41 -1
  865. package/dist/dimensional/algebra.js.map +1 -1
  866. package/dist/dimensional/ast-builders.d.ts +12 -4
  867. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  868. package/dist/dimensional/ast-builders.js +17 -5
  869. package/dist/dimensional/ast-builders.js.map +1 -1
  870. package/dist/dimensional/ast-leaves.d.ts +81 -0
  871. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  872. package/dist/dimensional/ast-leaves.js +146 -0
  873. package/dist/dimensional/ast-leaves.js.map +1 -0
  874. package/dist/dimensional/ast-types.js.map +1 -1
  875. package/dist/dimensional/bridge-check.js.map +1 -1
  876. package/dist/dimensional/buckingham.d.ts.map +1 -1
  877. package/dist/dimensional/buckingham.js +15 -27
  878. package/dist/dimensional/buckingham.js.map +1 -1
  879. package/dist/dimensional/connection-validators.d.ts +2 -1
  880. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  881. package/dist/dimensional/connection-validators.js.map +1 -1
  882. package/dist/dimensional/connection.js.map +1 -1
  883. package/dist/dimensional/constant-rows.d.ts.map +1 -1
  884. package/dist/dimensional/constant-rows.js +17 -13
  885. package/dist/dimensional/constant-rows.js.map +1 -1
  886. package/dist/dimensional/constants.d.ts +5 -6
  887. package/dist/dimensional/constants.d.ts.map +1 -1
  888. package/dist/dimensional/constants.js +5 -6
  889. package/dist/dimensional/constants.js.map +1 -1
  890. package/dist/dimensional/curvature-composite.js.map +1 -1
  891. package/dist/dimensional/curvature-invariants.js.map +1 -1
  892. package/dist/dimensional/curvature.js.map +1 -1
  893. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  894. package/dist/dimensional/dimension-inference.js +1 -2
  895. package/dist/dimensional/dimension-inference.js.map +1 -1
  896. package/dist/dimensional/dimension-spec.d.ts +13 -7
  897. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  898. package/dist/dimensional/dimension-spec.js +49 -23
  899. package/dist/dimensional/dimension-spec.js.map +1 -1
  900. package/dist/dimensional/einstein-equation.js.map +1 -1
  901. package/dist/dimensional/errors.d.ts +4 -2
  902. package/dist/dimensional/errors.d.ts.map +1 -1
  903. package/dist/dimensional/errors.js +3 -17
  904. package/dist/dimensional/errors.js.map +1 -1
  905. package/dist/dimensional/exact-scale.d.ts +0 -17
  906. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  907. package/dist/dimensional/exact-scale.js +8 -8
  908. package/dist/dimensional/exact-scale.js.map +1 -1
  909. package/dist/dimensional/field-equation-helpers.js.map +1 -1
  910. package/dist/dimensional/formula-names.js.map +1 -1
  911. package/dist/dimensional/fresh-label.js.map +1 -1
  912. package/dist/dimensional/friedmann-equation.d.ts +3 -3
  913. package/dist/dimensional/friedmann-equation.js +3 -3
  914. package/dist/dimensional/friedmann-equation.js.map +1 -1
  915. package/dist/dimensional/gauge-field.d.ts +2 -3
  916. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  917. package/dist/dimensional/gauge-field.js +2 -3
  918. package/dist/dimensional/gauge-field.js.map +1 -1
  919. package/dist/dimensional/hyphen-names.d.ts +12 -2
  920. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  921. package/dist/dimensional/hyphen-names.js +45 -12
  922. package/dist/dimensional/hyphen-names.js.map +1 -1
  923. package/dist/dimensional/killing-validators.js.map +1 -1
  924. package/dist/dimensional/klein-gordon-equation.js.map +1 -1
  925. package/dist/dimensional/metric-validators.d.ts +2 -1
  926. package/dist/dimensional/metric-validators.d.ts.map +1 -1
  927. package/dist/dimensional/metric-validators.js.map +1 -1
  928. package/dist/dimensional/metric.d.ts.map +1 -1
  929. package/dist/dimensional/metric.js +0 -1
  930. package/dist/dimensional/metric.js.map +1 -1
  931. package/dist/dimensional/natural-units.js.map +1 -1
  932. package/dist/dimensional/quantity-registry.d.ts +13 -0
  933. package/dist/dimensional/quantity-registry.d.ts.map +1 -1
  934. package/dist/dimensional/quantity-registry.js +14 -6
  935. package/dist/dimensional/quantity-registry.js.map +1 -1
  936. package/dist/dimensional/rg-flow.js.map +1 -1
  937. package/dist/dimensional/stress-energy-validators.js.map +1 -1
  938. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  939. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  940. package/dist/dimensional/symbolic-constants.js +20 -3
  941. package/dist/dimensional/symbolic-constants.js.map +1 -1
  942. package/dist/dimensional/tensor-trace.js.map +1 -1
  943. package/dist/dimensional/tensor.js.map +1 -1
  944. package/dist/dimensional/types.d.ts +36 -0
  945. package/dist/dimensional/types.d.ts.map +1 -1
  946. package/dist/dimensional/types.js +45 -7
  947. package/dist/dimensional/types.js.map +1 -1
  948. package/dist/dimensional/unit-convention.d.ts +0 -2
  949. package/dist/dimensional/unit-convention.d.ts.map +1 -1
  950. package/dist/dimensional/unit-convention.js +2 -2
  951. package/dist/dimensional/unit-convention.js.map +1 -1
  952. package/dist/dimensional/unit-data.d.ts.map +1 -1
  953. package/dist/dimensional/unit-data.js +11 -7
  954. package/dist/dimensional/unit-data.js.map +1 -1
  955. package/dist/dimensional/units.d.ts.map +1 -1
  956. package/dist/dimensional/units.js +38 -20
  957. package/dist/dimensional/units.js.map +1 -1
  958. package/dist/dimensional/validator-registry.js.map +1 -1
  959. package/dist/dimensional/validator.d.ts +0 -16
  960. package/dist/dimensional/validator.d.ts.map +1 -1
  961. package/dist/dimensional/validator.js +65 -29
  962. package/dist/dimensional/validator.js.map +1 -1
  963. package/dist/dimensional/weyl-validators.js.map +1 -1
  964. package/dist/index.d.ts +59 -8
  965. package/dist/index.d.ts.map +1 -1
  966. package/dist/index.js +22 -24
  967. package/dist/index.js.map +1 -1
  968. package/dist/numerical/bianchi-residual.js.map +1 -1
  969. package/dist/numerical/binding-value.d.ts +11 -6
  970. package/dist/numerical/binding-value.d.ts.map +1 -1
  971. package/dist/numerical/binding-value.js +126 -122
  972. package/dist/numerical/binding-value.js.map +1 -1
  973. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  974. package/dist/numerical/christoffel-flat.js +3 -2
  975. package/dist/numerical/christoffel-flat.js.map +1 -1
  976. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  977. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  978. package/dist/numerical/covariant-eikonal.js +36 -13
  979. package/dist/numerical/covariant-eikonal.js.map +1 -1
  980. package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
  981. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  982. package/dist/numerical/curvature-lowering-helpers.js +9 -5
  983. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  984. package/dist/numerical/derivative-lowering.js.map +1 -1
  985. package/dist/numerical/einstein-equation.js.map +1 -1
  986. package/dist/numerical/engine-registry.js.map +1 -1
  987. package/dist/numerical/errors.d.ts +7 -3
  988. package/dist/numerical/errors.d.ts.map +1 -1
  989. package/dist/numerical/errors.js +5 -8
  990. package/dist/numerical/errors.js.map +1 -1
  991. package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -1
  992. package/dist/numerical/evaluator-uncertainty.js +19 -2
  993. package/dist/numerical/evaluator-uncertainty.js.map +1 -1
  994. package/dist/numerical/finite-difference.d.ts +22 -0
  995. package/dist/numerical/finite-difference.d.ts.map +1 -0
  996. package/dist/numerical/finite-difference.js +27 -0
  997. package/dist/numerical/finite-difference.js.map +1 -0
  998. package/dist/numerical/formula-contract.d.ts +63 -7
  999. package/dist/numerical/formula-contract.d.ts.map +1 -1
  1000. package/dist/numerical/formula-contract.js +61 -42
  1001. package/dist/numerical/formula-contract.js.map +1 -1
  1002. package/dist/numerical/formula-dimension.d.ts +8 -7
  1003. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  1004. package/dist/numerical/formula-dimension.js +58 -36
  1005. package/dist/numerical/formula-dimension.js.map +1 -1
  1006. package/dist/numerical/formula-mathts.d.ts.map +1 -1
  1007. package/dist/numerical/formula-mathts.js +5 -2
  1008. package/dist/numerical/formula-mathts.js.map +1 -1
  1009. package/dist/numerical/formula-registry.d.ts +13 -3
  1010. package/dist/numerical/formula-registry.d.ts.map +1 -1
  1011. package/dist/numerical/formula-registry.js +7 -2
  1012. package/dist/numerical/formula-registry.js.map +1 -1
  1013. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  1014. package/dist/numerical/geodesic-integrator.js +22 -14
  1015. package/dist/numerical/geodesic-integrator.js.map +1 -1
  1016. package/dist/numerical/geometrized.d.ts.map +1 -1
  1017. package/dist/numerical/geometrized.js +0 -1
  1018. package/dist/numerical/geometrized.js.map +1 -1
  1019. package/dist/numerical/gl4-integrator.d.ts +28 -27
  1020. package/dist/numerical/gl4-integrator.d.ts.map +1 -1
  1021. package/dist/numerical/gl4-integrator.js +41 -42
  1022. package/dist/numerical/gl4-integrator.js.map +1 -1
  1023. package/dist/numerical/grid-field.js.map +1 -1
  1024. package/dist/numerical/index.js.map +1 -1
  1025. package/dist/numerical/input-validation.d.ts +3 -6
  1026. package/dist/numerical/input-validation.d.ts.map +1 -1
  1027. package/dist/numerical/input-validation.js +4 -8
  1028. package/dist/numerical/input-validation.js.map +1 -1
  1029. package/dist/numerical/killing.d.ts +8 -5
  1030. package/dist/numerical/killing.d.ts.map +1 -1
  1031. package/dist/numerical/killing.js.map +1 -1
  1032. package/dist/numerical/klein-gordon.js.map +1 -1
  1033. package/dist/numerical/kretschmann.js.map +1 -1
  1034. package/dist/numerical/lowering-utils.js.map +1 -1
  1035. package/dist/numerical/lowering.d.ts.map +1 -1
  1036. package/dist/numerical/lowering.js +7 -17
  1037. package/dist/numerical/lowering.js.map +1 -1
  1038. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  1039. package/dist/numerical/mathts-engine.js +16 -25
  1040. package/dist/numerical/mathts-engine.js.map +1 -1
  1041. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  1042. package/dist/numerical/metric-inverse.js +83 -46
  1043. package/dist/numerical/metric-inverse.js.map +1 -1
  1044. package/dist/numerical/null-ic.js.map +1 -1
  1045. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  1046. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  1047. package/dist/numerical/null-ray-integrator.js +12 -12
  1048. package/dist/numerical/null-ray-integrator.js.map +1 -1
  1049. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  1050. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  1051. package/dist/numerical/pderiv.d.ts.map +1 -1
  1052. package/dist/numerical/pderiv.js +9 -2
  1053. package/dist/numerical/pderiv.js.map +1 -1
  1054. package/dist/numerical/perihelion-finder.d.ts +0 -36
  1055. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  1056. package/dist/numerical/perihelion-finder.js +41 -87
  1057. package/dist/numerical/perihelion-finder.js.map +1 -1
  1058. package/dist/numerical/quadrature.d.ts +5 -2
  1059. package/dist/numerical/quadrature.d.ts.map +1 -1
  1060. package/dist/numerical/quadrature.js +19 -4
  1061. package/dist/numerical/quadrature.js.map +1 -1
  1062. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  1063. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  1064. package/dist/numerical/rk4-trajectory.js +37 -0
  1065. package/dist/numerical/rk4-trajectory.js.map +1 -0
  1066. package/dist/numerical/schwarzschild.d.ts +14 -0
  1067. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  1068. package/dist/numerical/schwarzschild.js +17 -0
  1069. package/dist/numerical/schwarzschild.js.map +1 -0
  1070. package/dist/numerical/spacetime-metrics.d.ts +25 -19
  1071. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  1072. package/dist/numerical/spacetime-metrics.js +180 -286
  1073. package/dist/numerical/spacetime-metrics.js.map +1 -1
  1074. package/dist/numerical/statistics.d.ts +24 -0
  1075. package/dist/numerical/statistics.d.ts.map +1 -0
  1076. package/dist/numerical/statistics.js +52 -0
  1077. package/dist/numerical/statistics.js.map +1 -0
  1078. package/dist/numerical/strides.js.map +1 -1
  1079. package/dist/numerical/tensor-engine.d.ts +30 -5
  1080. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  1081. package/dist/numerical/tensor-engine.js +12 -0
  1082. package/dist/numerical/tensor-engine.js.map +1 -1
  1083. package/dist/numerical/types.js.map +1 -1
  1084. package/dist/numerical/weyl-lowering.js.map +1 -1
  1085. package/dist/relations/category.js.map +1 -1
  1086. package/dist/relations/composition-table.d.ts +4 -4
  1087. package/dist/relations/composition-table.js +4 -4
  1088. package/dist/relations/composition-table.js.map +1 -1
  1089. package/dist/relations/conventions.js.map +1 -1
  1090. package/dist/relations/domain-regimes.js.map +1 -1
  1091. package/dist/relations/regime-registration.js.map +1 -1
  1092. package/dist/relations/regime-vocabularies.js.map +1 -1
  1093. package/dist/relations/regime.d.ts +28 -8
  1094. package/dist/relations/regime.d.ts.map +1 -1
  1095. package/dist/relations/regime.js +44 -15
  1096. package/dist/relations/regime.js.map +1 -1
  1097. package/dist/relations/types.d.ts +18 -5
  1098. package/dist/relations/types.d.ts.map +1 -1
  1099. package/dist/relations/types.js +5 -3
  1100. package/dist/relations/types.js.map +1 -1
  1101. package/package.json +16 -20
  1102. package/dist/bridges/registry.d.ts +0 -60
  1103. package/dist/bridges/registry.d.ts.map +0 -1
  1104. package/dist/bridges/registry.js +0 -87
  1105. package/dist/bridges/registry.js.map +0 -1
  1106. package/dist/cli/poster-source.d.ts +0 -154
  1107. package/dist/cli/poster-source.d.ts.map +0 -1
  1108. package/dist/cli/poster-source.js +0 -184
  1109. package/dist/cli/poster-source.js.map +0 -1
@@ -21,15 +21,21 @@
21
21
  * wins on a bare token, so `ms` stays a millisecond, `mm` a millimetre,
22
22
  * `mK` a millikelvin, and `Ts` a terasecond. Inside a larger expression the
23
23
  * prefixed reading competes with a heterogeneous product (`mK` is millikelvin
24
- * or metre·kelvin; `ms` is millisecond or metre·second). A homogeneous power
25
- * does not compete (`mm` is a millimetre, not metre·metre). `parseUnit` names
24
+ * or metre·kelvin; `ms` is millisecond or metre·second). A split that puts
25
+ * a prefix letter's own unit twice in a row is never a reading, because a
26
+ * power is written `m2` or `m^2`: `mm` is a millimetre, not metre·metre,
27
+ * and `mmin` is metre·minute or millimetre·inch, not metre·metre·inch.
28
+ * A unit that is not a prefix letter still juxtaposes with itself (`NN` is
29
+ * N·N). `parseUnit` names
26
30
  * every remaining reading and refuses. `convertValue` keeps the one reading
27
31
  * whose dimension is the declared unit. A token that is not one factor is a
28
32
  * product when exactly one split exists: `m2K` is `m^2·K`, `Vs` is `V·s`,
29
33
  * and `cm^2/Vs` is `cm^2/(V·s)`. Zero splits are an unknown unit. Two or more
30
34
  * splits name each reading and are refused (`mAs` is milliampere·second or
31
35
  * metre·ampere·second). An unknown token that ends in a digit stays unknown
32
- * when it is not that product.
36
+ * when it is not that product. A numerator that is the single token `1` is
37
+ * the dimensionless unit, so `1/s` is a reciprocal second and `1/m^3` a
38
+ * number density; `1` is not a symbol anywhere else.
33
39
  * The table is data: `data/units.json`, loaded and validated by
34
40
  * `unit-data.ts`. Every row, prefix, refused spelling, prefix letter, affine
35
41
  * scale and spelling note is a row there, with the reason as its `comment`;
@@ -148,7 +154,7 @@ function tryOneFactor(token) {
148
154
  exp = Number(caret[2]);
149
155
  }
150
156
  else {
151
- const uni = /^(.*?)([¹²³])$/.exec(token);
157
+ const uni = /^(.*?)(⁻?[¹²³])$/.exec(token);
152
158
  const superExp = uni === null ? undefined : SUPERSCRIPT[uni[2]];
153
159
  if (uni !== null && superExp !== undefined && uni[1].length > 0) {
154
160
  base = uni[1];
@@ -185,17 +191,18 @@ function attachedUnit(symbol) {
185
191
  return null;
186
192
  }
187
193
  /**
188
- * A product of the same unprefixed unit the prefix attaches to (`mm` = m·m,
189
- * `mm2` = m·m²). Powers are written `m2` / `m^2`, so this reading does not
190
- * compete with the prefix.
194
+ * `X·X` where `XX` is X's own prefix spelling (`m·m` beside `mm`, `d·d`
195
+ * beside `dd`): not a split, because a power is written `X2` or `X^2`. A
196
+ * run of a unit that is not also a prefix letter (`N·N`) stays a product.
191
197
  */
192
- function homogeneousPower(single, product) {
193
- const unit = attachedUnit(single.base);
194
- if (unit === null)
195
- return false;
196
- return product.every((factor) => factor.base === unit && attachedUnit(factor.base) === null);
198
+ function prefixRun(last, next) {
199
+ return last.base === next.base && attachedUnit(last.base + next.base) === last.base;
197
200
  }
198
- /** Every way to split `token` into one or more factors. A one-factor token is included. */
201
+ /**
202
+ * Every way to split `token` into one or more factors. A one-factor token is
203
+ * included. A split that puts a prefix letter's own unit twice in a row
204
+ * (`m·m`, `m·m²`, `m·m·in`) is not a way, inside any split.
205
+ */
199
206
  function segmentations(token) {
200
207
  const ways = Array.from({ length: token.length + 1 }, () => []);
201
208
  ways[0].push([]);
@@ -206,8 +213,11 @@ function segmentations(token) {
206
213
  const factor = tryOneFactor(token.slice(i, j));
207
214
  if (factor === null)
208
215
  continue;
209
- for (const prev of ways[i])
216
+ for (const prev of ways[i]) {
217
+ if (prev.length > 0 && prefixRun(prev[prev.length - 1], factor))
218
+ continue;
210
219
  ways[j].push([...prev, factor]);
220
+ }
211
221
  }
212
222
  }
213
223
  const unique = new Map();
@@ -218,7 +228,8 @@ function segmentations(token) {
218
228
  /**
219
229
  * Ways to read one token. A bare expression keeps a one-factor reading and
220
230
  * does not also split it. Inside a compound, a prefixed factor also competes
221
- * with each heterogeneous product. A homogeneous power does not.
231
+ * with each heterogeneous product; `segmentations` has already dropped the
232
+ * homogeneous runs.
222
233
  */
223
234
  function tokenWays(token, compete, side) {
224
235
  const refused = REFUSED_UNITS.get(token);
@@ -235,11 +246,10 @@ function tokenWays(token, compete, side) {
235
246
  const products = segmentations(token)
236
247
  .filter((way) => way.length > 1)
237
248
  .filter(() => !prefixWins);
238
- const extra = single === null ? products : products.filter((way) => !homogeneousPower(single, way));
239
249
  const ways = [];
240
250
  if (single !== null)
241
251
  ways.push([single]);
242
- for (const way of extra)
252
+ for (const way of products)
243
253
  ways.push(way);
244
254
  const unique = new Map();
245
255
  for (const way of ways)
@@ -267,7 +277,8 @@ function formatSide(tokens) {
267
277
  return tokens.map((factors) => formatReading(factors)).join('·');
268
278
  }
269
279
  function formatExpression(num, den) {
270
- const numerator = formatSide(num);
280
+ // An empty numerator over a denominator is the dimensionless 1: `1/s`.
281
+ const numerator = num.length === 0 ? '1' : formatSide(num);
271
282
  if (den.length === 0)
272
283
  return numerator;
273
284
  const denominator = formatSide(den);
@@ -319,10 +330,17 @@ function unitReadings(text) {
319
330
  /deg\s+[CFcf]|°\s*[CFcf]/.test(t)) {
320
331
  throw new UnitRefusedError('an affine temperature cannot be part of a compound unit; give K');
321
332
  }
333
+ // An operator with nothing on one side (`m/`, `m//s`, `m*`, `*m`, `m/*s`) is not a unit
334
+ // text; it was read as if the empty factor were 1 (Tom's second round). A leading `/`
335
+ // (`/s`) stays the dimensionless numerator.
336
+ if (/[*·/]\s*$|^\s*[*·]|[*·/]\s*[*·/]/.test(t))
337
+ throw new UnknownUnitError(t);
322
338
  // A chain is one denominator: `km/s/Mpc` is km/(s·Mpc), the way the Hubble constant is written.
323
339
  const sides = solidusSides(t);
324
340
  const compete = /[*·/\s]/.test(t);
325
- const numerator = sideTokens(sides.numerator);
341
+ const numeratorTokens = sideTokens(sides.numerator);
342
+ // A numerator that is the single token `1` is the dimensionless unit: `1/s`, `1/m^3`.
343
+ const numerator = numeratorTokens.length === 1 && numeratorTokens[0] === '1' ? [] : numeratorTokens;
326
344
  const denominator = sides.denominator === '' ? [] : sideTokens(sides.denominator);
327
345
  // `/s` is a dimensionless numerator over seconds. A bare `/` is not a unit.
328
346
  if (numerator.length === 0 && denominator.length === 0)
@@ -342,7 +360,7 @@ function unitReadings(text) {
342
360
  }
343
361
  return [...unique.values()];
344
362
  }
345
- const SUPERSCRIPT = { '¹': 1, '²': 2, '³': 3 };
363
+ const SUPERSCRIPT = { '¹': 1, '²': 2, '³': 3, '⁻¹': -1, '⁻²': -2, '⁻³': -3 };
346
364
  /**
347
365
  * Spellings that convert correctly and still mean something else to a reader:
348
366
  * the `spellingNotes` of `data/units.json` for each symbol in `given`, in file
@@ -1 +1 @@
1
- {"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/dimensional/units.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,GAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAuC,MAAM,gBAAgB,CAAC;AAahF,qFAAqF;AACrF,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,0DAA0D;AAC1D,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IACxB,MAAM;IAA3B,YAAqB,MAAc;QACjC,KAAK,CAAC,iBAAiB,MAAM,GAAG,CAAC,CAAC;sBADf,MAAM;QAEzB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC1B,IAAI;IAAmB,QAAQ;IAApD,YAAqB,IAAY,EAAW,QAA2B;QACrE,KAAK,CAAC,IAAI,IAAI,mBAAmB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBADvC,IAAI;wBAAmB,QAAQ;QAElD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,CAAC,GAAG,CAAC,CAAqB,EAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACzG,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,0GAA0G;AAC1G,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAE9B,wFAAwF;AACxF,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC;AAExC;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,SAAS,CAAC,iBAAiB,CAAC;AAExD,+BAA+B;AAC/B,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC;AAM7C;;;;GAIG;AACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAA8B,CAAC;AAExD,uEAAuE;AACvE,SAAS,YAAY,CAAC,GAAc;IAClC,OAAO,SAAS,CAAC,gBAAgB,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAa,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAErG;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB,EAAE,OAA2B;IACtF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAE,CAAC;IACjE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IAClD,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,mBAAmB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;IACrI,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvD,IAAI,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE;QAAE,OAAO,eAAe,MAAM,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,MAAM,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;IACnH,OAAO,aAAa,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;AACpG,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;AAQpC,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9G,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,SAAS;QAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAUD,0FAA0F;AAC1F,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACjB,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;QACjE,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;YACf,GAAG,GAAG,QAAQ,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC5E,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACjB,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,aAAa,CAAC,OAAiC;IACtD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9G,CAAC;AAED,yFAAyF;AACzF,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,SAAS;QAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,MAAqB,EAAE,OAAiC;IAChF,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAC/F,CAAC;AAED,2FAA2F;AAC3F,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,IAAI,GAAwB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,MAAM,KAAK,IAAI;gBAAE,SAAS;YAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,CAAE;gBAAE,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAE;QAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAa,EAAE,OAAgB,EAAE,IAAiC;IACnF,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,qFAAqF;IACrF,qFAAqF;IACrF,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,MAAM,KAAK,IAAI,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC/G,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC;SAClC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;SAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACpG,MAAM,IAAI,GAAsB,EAAE,CAAC;IACnC,IAAI,MAAM,KAAK,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAI,KAAgC;IACpD,IAAI,GAAG,GAAU,CAAC,EAAE,CAAC,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAU,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,GAAG;YAAE,KAAK,MAAM,IAAI,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5E,GAAG,GAAG,IAAI,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAUD,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,UAAU,CAAC,MAA6C;IAC/D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,gBAAgB,CACvB,GAA0C,EAC1C,GAA0C;IAE1C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,WAAW,EAAE,CAAC;AACrG,CAAC;AAED,SAAS,UAAU,CACjB,MAA6C,EAC7C,IAAY;IAEZ,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,IAAI,GAAG,GAAG,aAAa,CAAC;IACxB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;YAC5B,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,OAAO,CAAC,KAAiB,EAAE,GAAc,EAAE,KAAa,EAAE,MAAc,EAAE,MAA0B;IAC3G,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;QAC3B,KAAK;QACL,GAAG;QACH,KAAK;QACL,MAAM;QACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,IACE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAClF,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,EACjC,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,iEAAiE,CAAC,CAAC;IAChG,CAAC;IACD,gGAAgG;IAChG,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAClF,4EAA4E;IAC5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,WAAW,GAAqC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5G,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACzF,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAC;AACtB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACjG,CAAC;AAKD,sGAAsG;AACtG,SAAS,WAAW,CAAC,SAAqB,EAAE,IAAiB,EAAE,WAA+B;IAC5F,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7G,OAAO,GAAG,KAAK,SAAS,IAAI,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzG,CAAC;AAED,MAAM,QAAQ,GAAG,iEAAiE,CAAC;AACnF,MAAM,gBAAgB,GAAG,6DAA6D,CAAC;AAEvF;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAE,CAAC;QACxC,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE;YAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACrG,CAAC;IACD,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACnB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IACtC,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC;AAaD,SAAS,aAAa,CAAC,GAAW,EAAE,KAAa;IAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,IAAI,GAAG,0BAA0B,CAAC,CAAC;IACpF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,WAAW,GAAuB,UAAU;IAC3F,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC9F,CAAC;IACD,IAAI,IAAiB,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACvE,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAaD;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,MAAc,EAAE,WAAW,GAAuB,UAAU;IACpG,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,IAAI,SAAS,CAAC,IAAI,GAAG,yCAAyC,CAAC,CAAC;IAC5F,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC3G,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,MAAM,IAAI,CAAC,CAAC;IACnG,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,eAAe,GAAG,CAAC,CAAC;IAC/H,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IACzB,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACvG,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;QAChC,KAAK;QACL,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC7B,CAAC;AAED,mHAAmH;AACnH,MAAM,UAAU,QAAQ;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU;IAMxB,OAAO;QACL,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAU,CAAC,CAAC,CAAC;QACpI,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAU,CAAC,CAAC;QAC1F,cAAc,EAAE,aAAa,CAAC,gBAAgB,CAAC;QAC/C,YAAY,EAAE,SAAS,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/dimensional/units.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,GAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAuC,MAAM,gBAAgB,CAAC;AAahF,qFAAqF;AACrF,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,0DAA0D;AAC1D,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IACxB,MAAM;IAA3B,YAAqB,MAAc;QACjC,KAAK,CAAC,iBAAiB,MAAM,GAAG,CAAC,CAAC;sBADf,MAAM;QAEzB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC1B,IAAI;IAAmB,QAAQ;IAApD,YAAqB,IAAY,EAAW,QAA2B;QACrE,KAAK,CAAC,IAAI,IAAI,mBAAmB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBADvC,IAAI;wBAAmB,QAAQ;QAElD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,CAAC,GAAG,CAAC,CAAqB,EAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACzG,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,0GAA0G;AAC1G,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAE9B,wFAAwF;AACxF,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC;AAExC;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,SAAS,CAAC,iBAAiB,CAAC;AAExD,+BAA+B;AAC/B,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC;AAM7C;;;;GAIG;AACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAA8B,CAAC;AAExD,uEAAuE;AACvE,SAAS,YAAY,CAAC,GAAc;IAClC,OAAO,SAAS,CAAC,gBAAgB,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAa,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAErG;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB,EAAE,OAA2B;IACtF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAE,CAAC;IACjE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IAClD,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,mBAAmB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;IACrI,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvD,IAAI,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE;QAAE,OAAO,eAAe,MAAM,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,MAAM,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;IACnH,OAAO,aAAa,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;AACpG,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;AAQpC,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9G,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,SAAS;QAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAUD,0FAA0F;AAC1F,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACjB,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;QACjE,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;YACf,GAAG,GAAG,QAAQ,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC5E,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACjB,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,aAAa,CAAC,OAAiC;IACtD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9G,CAAC;AAED,yFAAyF;AACzF,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,SAAS;QAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,IAAmB,EAAE,IAAmB;IACzD,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC;AACtF,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,IAAI,GAAwB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,MAAM,KAAK,IAAI;gBAAE,SAAS;YAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,CAAE,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,EAAE,MAAM,CAAC;oBAAE,SAAS;gBAC3E,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAE;QAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,KAAa,EAAE,OAAgB,EAAE,IAAiC;IACnF,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,qFAAqF;IACrF,qFAAqF;IACrF,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,MAAM,KAAK,IAAI,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC/G,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC;SAClC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;SAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAsB,EAAE,CAAC;IACnC,IAAI,MAAM,KAAK,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAI,KAAgC;IACpD,IAAI,GAAG,GAAU,CAAC,EAAE,CAAC,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAU,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,GAAG;YAAE,KAAK,MAAM,IAAI,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5E,GAAG,GAAG,IAAI,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAUD,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,UAAU,CAAC,MAA6C;IAC/D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,gBAAgB,CACvB,GAA0C,EAC1C,GAA0C;IAE1C,uEAAuE;IACvE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,WAAW,EAAE,CAAC;AACrG,CAAC;AAED,SAAS,UAAU,CACjB,MAA6C,EAC7C,IAAY;IAEZ,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,IAAI,GAAG,GAAG,aAAa,CAAC;IACxB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;YAC5B,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,OAAO,CAAC,KAAiB,EAAE,GAAc,EAAE,KAAa,EAAE,MAAc,EAAE,MAA0B;IAC3G,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;QAC3B,KAAK;QACL,GAAG;QACH,KAAK;QACL,MAAM;QACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,IACE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAClF,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,EACjC,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,iEAAiE,CAAC,CAAC;IAChG,CAAC;IACD,wFAAwF;IACxF,sFAAsF;IACtF,4CAA4C;IAC5C,IAAI,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9E,gGAAgG;IAChG,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,sFAAsF;IACtF,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;IACpG,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAClF,4EAA4E;IAC5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,WAAW,GAAqC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AAE/G;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5G,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACzF,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAC;AACtB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACjG,CAAC;AAKD,sGAAsG;AACtG,SAAS,WAAW,CAAC,SAAqB,EAAE,IAAiB,EAAE,WAA+B;IAC5F,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7G,OAAO,GAAG,KAAK,SAAS,IAAI,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzG,CAAC;AAED,MAAM,QAAQ,GAAG,iEAAiE,CAAC;AACnF,MAAM,gBAAgB,GAAG,6DAA6D,CAAC;AAEvF;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAE,CAAC;QACxC,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE;YAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACrG,CAAC;IACD,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACnB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IACtC,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC;AAaD,SAAS,aAAa,CAAC,GAAW,EAAE,KAAa;IAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,IAAI,GAAG,0BAA0B,CAAC,CAAC;IACpF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,WAAW,GAAuB,UAAU;IAC3F,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC9F,CAAC;IACD,IAAI,IAAiB,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACvE,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAaD;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,MAAc,EAAE,WAAW,GAAuB,UAAU;IACpG,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,IAAI,SAAS,CAAC,IAAI,GAAG,yCAAyC,CAAC,CAAC;IAC5F,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC3G,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,MAAM,IAAI,CAAC,CAAC;IACnG,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,eAAe,GAAG,CAAC,CAAC;IAC/H,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IACzB,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACvG,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;QAChC,KAAK;QACL,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC7B,CAAC;AAED,mHAAmH;AACnH,MAAM,UAAU,QAAQ;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU;IAMxB,OAAO;QACL,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAU,CAAC,CAAC,CAAC;QACpI,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAU,CAAC,CAAC;QAC1F,cAAc,EAAE,aAAa,CAAC,gBAAgB,CAAC;QAC/C,YAAY,EAAE,SAAS,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Unit parsing for numeric inputs: `1um`, `25degC`, `1 kohm`, `3.8e-16 kg/m^3`.\n *\n * A unit is a product of factors, each `symbol[^n]`, joined by `*`, `·` or a\n * space; everything after a single `/` is the denominator (`W/(m*K)` and\n * `W/m*K` both mean W·m⁻¹·K⁻¹). An exact symbol is matched before a prefixed\n * one, so `min` is a minute, `Pa` a pascal and `mm` a millimetre.\n *\n * An affine temperature (`degC`, `°C`, `degF`, `°F`) is accepted only alone.\n * The kelvin value is `value × scale + offset` for an absolute reading and\n * `value × scale` for a difference. Rankine is proportional (`°R × 5/9`), not\n * affine. The caller decides which reading, from the quantity's role.\n *\n * An exact symbol wins over a prefix: `T` is the tesla and `Ts` is a\n * terasecond; `G` is the gauss and `GPa` is a gigapascal; `P` is the poise\n * and `PV` is still a petavolt. A glued positive exponent is that power when\n * the letters are already a unit, so `K2` and `K²` are `K^2`.\n *\n * A token with no separator is one factor when the whole token is an exact\n * unit or a prefix plus a unit, with an optional exponent. That reading\n * wins on a bare token, so `ms` stays a millisecond, `mm` a millimetre,\n * `mK` a millikelvin, and `Ts` a terasecond. Inside a larger expression the\n * prefixed reading competes with a heterogeneous product (`mK` is millikelvin\n * or metre·kelvin; `ms` is millisecond or metre·second). A split that puts\n * a prefix letter's own unit twice in a row is never a reading, because a\n * power is written `m2` or `m^2`: `mm` is a millimetre, not metre·metre,\n * and `mmin` is metre·minute or millimetre·inch, not metre·metre·inch.\n * A unit that is not a prefix letter still juxtaposes with itself (`NN` is\n * N·N). `parseUnit` names\n * every remaining reading and refuses. `convertValue` keeps the one reading\n * whose dimension is the declared unit. A token that is not one factor is a\n * product when exactly one split exists: `m2K` is `m^2·K`, `Vs` is `V·s`,\n * and `cm^2/Vs` is `cm^2/(V·s)`. Zero splits are an unknown unit. Two or more\n * splits name each reading and are refused (`mAs` is milliampere·second or\n * metre·ampere·second). An unknown token that ends in a digit stays unknown\n * when it is not that product. A numerator that is the single token `1` is\n * the dimensionless unit, so `1/s` is a reciprocal second and `1/m^3` a\n * number density; `1` is not a symbol anywhere else.\n * The table is data: `data/units.json`, loaded and validated by\n * `unit-data.ts`. Every row, prefix, refused spelling, prefix letter, affine\n * scale and spelling note is a row there, with the reason as its `comment`;\n * this module holds the grammar. `myr` is a milliyear because `m` is the SI\n * prefix, and `eV` takes one, so `GeV` is 10⁹ eV in joules.\n *\n * @module dimensional/units\n */\nimport { equals, format, multiply, power } from './algebra.js';\nimport type { Dimension } from './types.js';\nimport {\n addScales,\n decimalScale,\n divideScales,\n multiplyScales,\n powerScale,\n ratioScale,\n scaleToNumber,\n solidusSides,\n UNIT_SCALE,\n type ExactScale,\n} from './exact-scale.js';\nimport { UNIT_DATA, type AffineRow as UnitDataAffineRow } from './unit-data.js';\n\n/** An affine temperature scale: a lone `degC` or `degF`. @public */\nexport type AffineTemperature = 'celsius' | 'fahrenheit';\n\n/** A unit, as a scale to SI base units and a dimension. @public */\nexport interface ParsedUnit {\n readonly scale: number;\n readonly dim: Dimension;\n /** Set only for a lone affine temperature, which needs a reading. */\n readonly affine?: AffineTemperature;\n}\n\n/** Thrown for any input that does not parse as a value with a known unit. @public */\nexport class UnitError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UnitError';\n }\n}\n\n/** A symbol no table row and no prefix spells. @public */\nexport class UnknownUnitError extends UnitError {\n constructor(readonly symbol: string) {\n super(`unknown unit '${symbol}'`);\n this.name = 'UnknownUnitError';\n }\n}\n\n/**\n * A unit the reader recognizes and refuses: a logarithmic or ratio unit, an\n * ambiguous name such as `ton`, or an affine temperature inside a compound.\n * @public\n */\nexport class UnitRefusedError extends UnitError {\n constructor(message: string) {\n super(message);\n this.name = 'UnitRefusedError';\n }\n}\n\n/** A unit expression with more than one dimensionally distinct reading. @public */\nexport class AmbiguousUnitError extends UnitError {\n constructor(readonly text: string, readonly readings: readonly string[]) {\n super(`'${text}' is ambiguous: ${readings.join(' or ')}`);\n this.name = 'AmbiguousUnitError';\n }\n}\n\nconst D = (p: Partial<Dimension>): Dimension => ({ L: 0, M: 0, T: 0, I: 0, Theta: 0, N: 0, J: 0, ...p });\nconst DIMENSIONLESS = D({});\n\n/** symbol → exact scale to SI base, dimension, prefixability, cycle count. Rows are `data/units.json`. */\nconst UNITS = UNIT_DATA.units;\n\n/** Units that are a ratio or a log scale, and the reason each is not a plain factor. */\nconst REFUSED_UNITS = UNIT_DATA.refused;\n\n/**\n * Letters that are both an SI prefix and a unit of their own. Such a token\n * reads as the prefix reading and not as the unit times the rest: `Gyr` is a\n * gigayear. The file's `prefixLetterUnits.comment` says why `m` is not one.\n */\nconst PREFIX_LETTER_UNITS = UNIT_DATA.prefixLetterUnits;\n\n/** Kelvin at 0 °C, exactly. */\nconst CELSIUS_OFFSET_K = UNIT_DATA.iceKelvin;\n\ninterface AffineRow extends UnitDataAffineRow {\n readonly id: AffineTemperature;\n}\n\n/**\n * Lone spellings. A compound that contains one is refused. The schema's `id`\n * enum is {@link AffineTemperature}, held equal by a test: the public type\n * promises callers these ids, so a new affine scale is an API change.\n */\nconst AFFINE = UNIT_DATA.affine as readonly AffineRow[];\n\n/** Kelvin at a reading of zero, exactly: 273.15 − icePoint × scale. */\nfunction affineOffset(row: AffineRow): ExactScale {\n return addScales(CELSIUS_OFFSET_K, multiplyScales(ratioScale(-1, 1), row.icePoint, row.scale));\n}\n\nconst fractionText = (s: ExactScale): string => (s.den === 1n ? String(s.num) : `${s.num}/${s.den}`);\n\n/**\n * How a reading on an affine scale becomes kelvin, from the row's scale and\n * ice point: `absolute: (degF − 32) × 5/9 + 273.15`, `a difference: × 5/9, no offset`.\n * @internal\n */\nexport function affineReadingNote(affine: AffineTemperature, reading: TemperatureReading): string {\n const row = AFFINE.find((candidate) => candidate.id === affine)!;\n const unitScale = row.scale.num === row.scale.den;\n if (reading === 'difference') return unitScale ? 'a difference: no offset' : `a difference: × ${fractionText(row.scale)}, no offset`;\n const kelvin = String(scaleToNumber(CELSIUS_OFFSET_K));\n if (unitScale && row.icePoint.num === 0n) return `absolute: + ${kelvin}`;\n const shifted = row.icePoint.num === 0n ? row.symbols[0]! : `(${row.symbols[0]!} − ${fractionText(row.icePoint)})`;\n return `absolute: ${unitScale ? shifted : `${shifted} × ${fractionText(row.scale)}`} + ${kelvin}`;\n}\n\nfunction affineRow(text: string): AffineRow | undefined {\n return AFFINE.find((candidate) => candidate.symbols.includes(text));\n}\n\nconst PREFIXES = UNIT_DATA.prefixes;\n\ninterface SymbolReading {\n readonly scale: ExactScale;\n readonly dim: Dimension;\n readonly cycles: number;\n}\n\nfunction trySymbol(sym: string): SymbolReading | null {\n const exact = UNITS.get(sym);\n if (exact !== undefined) return { scale: exact.scale, dim: exact.dim, cycles: exact.cycles === true ? 1 : 0 };\n for (const [p, f] of PREFIXES) {\n if (!sym.startsWith(p) || sym.length === p.length) continue;\n const base = UNITS.get(sym.slice(p.length));\n if (base !== undefined && base.prefixable) {\n return { scale: multiplyScales(f, base.scale), dim: base.dim, cycles: base.cycles === true ? 1 : 0 };\n }\n }\n return null;\n}\n\ninterface FactorReading {\n readonly base: string;\n readonly exp: number;\n readonly scale: ExactScale;\n readonly dim: Dimension;\n readonly cycles: number;\n}\n\n/** One factor, or null when `token` is not exactly one unit with an optional exponent. */\nfunction tryOneFactor(token: string): FactorReading | null {\n let base = token;\n let exp = 1;\n const caret = /^(.+)\\^([+-]?\\d+)$/.exec(token);\n if (caret !== null) {\n base = caret[1]!;\n exp = Number(caret[2]);\n } else {\n const uni = /^(.*?)(⁻?[¹²³])$/.exec(token);\n const superExp = uni === null ? undefined : SUPERSCRIPT[uni[2]!];\n if (uni !== null && superExp !== undefined && uni[1]!.length > 0) {\n base = uni[1]!;\n exp = superExp;\n } else {\n const glued = /^(.*?)([1-9]\\d*)$/.exec(token);\n if (glued !== null && glued[1]!.length > 0 && trySymbol(glued[1]!) !== null) {\n base = glued[1]!;\n exp = Number(glued[2]);\n }\n }\n }\n const parsed = trySymbol(base);\n if (parsed === null || !Number.isFinite(exp)) return null;\n return { base, exp, scale: parsed.scale, dim: parsed.dim, cycles: parsed.cycles };\n}\n\nfunction formatReading(factors: readonly FactorReading[]): string {\n return factors.map((factor) => (factor.exp === 1 ? factor.base : `${factor.base}^${factor.exp}`)).join('·');\n}\n\n/** The unprefixed unit a prefix spelling attaches to, or null when `symbol` is exact. */\nfunction attachedUnit(symbol: string): string | null {\n if (UNITS.has(symbol)) return null;\n for (const [prefix] of PREFIXES) {\n if (!symbol.startsWith(prefix) || symbol.length === prefix.length) continue;\n const base = symbol.slice(prefix.length);\n const unitRow = UNITS.get(base);\n if (unitRow !== undefined && unitRow.prefixable) return base;\n }\n return null;\n}\n\n/**\n * `X·X` where `XX` is X's own prefix spelling (`m·m` beside `mm`, `d·d`\n * beside `dd`): not a split, because a power is written `X2` or `X^2`. A\n * run of a unit that is not also a prefix letter (`N·N`) stays a product.\n */\nfunction prefixRun(last: FactorReading, next: FactorReading): boolean {\n return last.base === next.base && attachedUnit(last.base + next.base) === last.base;\n}\n\n/**\n * Every way to split `token` into one or more factors. A one-factor token is\n * included. A split that puts a prefix letter's own unit twice in a row\n * (`m·m`, `m·m²`, `m·m·in`) is not a way, inside any split.\n */\nfunction segmentations(token: string): FactorReading[][] {\n const ways: FactorReading[][][] = Array.from({ length: token.length + 1 }, () => []);\n ways[0]!.push([]);\n for (let i = 0; i < token.length; i++) {\n if (ways[i]!.length === 0) continue;\n for (let j = i + 1; j <= token.length; j++) {\n const factor = tryOneFactor(token.slice(i, j));\n if (factor === null) continue;\n for (const prev of ways[i]!) {\n if (prev.length > 0 && prefixRun(prev[prev.length - 1]!, factor)) continue;\n ways[j]!.push([...prev, factor]);\n }\n }\n }\n const unique = new Map<string, FactorReading[]>();\n for (const way of ways[token.length]!) unique.set(formatReading(way), way);\n return [...unique.values()];\n}\n\n/**\n * Ways to read one token. A bare expression keeps a one-factor reading and\n * does not also split it. Inside a compound, a prefixed factor also competes\n * with each heterogeneous product; `segmentations` has already dropped the\n * homogeneous runs.\n */\nfunction tokenWays(token: string, compete: boolean, side: 'numerator' | 'denominator'): FactorReading[][] {\n const refused = REFUSED_UNITS.get(token);\n if (refused !== undefined) throw new UnitRefusedError(refused);\n const single = tryOneFactor(token);\n if (single !== null && !compete) return [[single]];\n // A prefixed numerator token is the prefix reading: `mN/m` is millinewton per metre.\n // A denominator keeps the product readings (`W/mK`), and a target dimension chooses.\n if (single !== null && side === 'numerator') return [[single]];\n const prefixWins = single !== null && PREFIX_LETTER_UNITS.has(token[0]!) && attachedUnit(single.base) !== null;\n const products = segmentations(token)\n .filter((way) => way.length > 1)\n .filter(() => !prefixWins);\n const ways: FactorReading[][] = [];\n if (single !== null) ways.push([single]);\n for (const way of products) ways.push(way);\n const unique = new Map<string, FactorReading[]>();\n for (const way of ways) unique.set(formatReading(way), way);\n const list = [...unique.values()];\n if (list.length === 0) throw new UnknownUnitError(token);\n return list;\n}\n\nfunction cartesian<T>(lists: readonly (readonly T[])[]): T[][] {\n let acc: T[][] = [[]];\n for (const list of lists) {\n const next: T[][] = [];\n for (const prev of acc) for (const item of list) next.push([...prev, item]);\n acc = next;\n }\n return acc;\n}\n\n/** One reading of a unit expression, with its exact scale. @internal */\nexport interface UnitReading extends ParsedUnit {\n readonly label: string;\n readonly exact: ExactScale;\n /** Net power of cycle-counting units (Hz, rpm): 1 for a lone `kHz`, 0 for `1/s`. */\n readonly cycles: number;\n}\n\nfunction sideTokens(text: string): string[] {\n return text.split(/[*·\\s]+|(?<=[A-Za-zµμΩ])\\.(?=[A-Za-zµμΩ])/).filter((part) => part.length > 0);\n}\n\nfunction formatSide(tokens: readonly (readonly FactorReading[])[]): string {\n return tokens.map((factors) => formatReading(factors)).join('·');\n}\n\nfunction formatExpression(\n num: readonly (readonly FactorReading[])[],\n den: readonly (readonly FactorReading[])[],\n): string {\n // An empty numerator over a denominator is the dimensionless 1: `1/s`.\n const numerator = num.length === 0 ? '1' : formatSide(num);\n if (den.length === 0) return numerator;\n const denominator = formatSide(den);\n return denominator.includes('·') ? `${numerator}/(${denominator})` : `${numerator}/${denominator}`;\n}\n\nfunction accumulate(\n tokens: readonly (readonly FactorReading[])[],\n sign: 1 | -1,\n): { scale: ExactScale; dim: Dimension; cycles: number } {\n let scale = UNIT_SCALE;\n let dim = DIMENSIONLESS;\n let cycles = 0;\n for (const factors of tokens) {\n for (const factor of factors) {\n const n = sign * factor.exp;\n scale = multiplyScales(scale, powerScale(factor.scale, n));\n dim = multiply(dim, power(factor.dim, n));\n cycles += factor.cycles * n;\n }\n }\n return { scale, dim, cycles };\n}\n\nfunction reading(exact: ExactScale, dim: Dimension, label: string, cycles: number, affine?: AffineTemperature): UnitReading {\n return {\n scale: scaleToNumber(exact),\n exact,\n dim,\n label,\n cycles,\n ...(affine === undefined ? {} : { affine }),\n };\n}\n\n/**\n * Every dimensionally distinct reading of one unit expression.\n *\n * The unit grammar is not the formula grammar, and the difference is\n * deliberate: a unit symbol is not an identifier (a prefix, a glued product\n * or a glued power lives inside one token: `mN`, `m2K`, `Vs`, `K²`, `°C`,\n * `%`), and everything after the first `/` is the denominator, the\n * single-solidus convention of ISO 80000-1 (`W/m*K` is W·m⁻¹·K⁻¹), where the\n * formula grammar would read `(W/m)·K`.\n * @internal\n */\nfunction unitReadings(text: string): UnitReading[] {\n const t = text.trim();\n if (t === '' || t === '1') return [reading(UNIT_SCALE, DIMENSIONLESS, '1', 0)];\n const affine = affineRow(t);\n if (affine !== undefined) return [reading(affine.scale, D({ Theta: 1 }), t, 0, affine.id)];\n if (\n AFFINE.some((candidate) => candidate.symbols.some((symbol) => t.includes(symbol))) ||\n /deg\\s+[CFcf]|°\\s*[CFcf]/.test(t)\n ) {\n throw new UnitRefusedError('an affine temperature cannot be part of a compound unit; give K');\n }\n // An operator with nothing on one side (`m/`, `m//s`, `m*`, `*m`, `m/*s`) is not a unit\n // text; it was read as if the empty factor were 1 (Tom's second round). A leading `/`\n // (`/s`) stays the dimensionless numerator.\n if (/[*·/]\\s*$|^\\s*[*·]|[*·/]\\s*[*·/]/.test(t)) throw new UnknownUnitError(t);\n // A chain is one denominator: `km/s/Mpc` is km/(s·Mpc), the way the Hubble constant is written.\n const sides = solidusSides(t);\n const compete = /[*·/\\s]/.test(t);\n const numeratorTokens = sideTokens(sides.numerator);\n // A numerator that is the single token `1` is the dimensionless unit: `1/s`, `1/m^3`.\n const numerator = numeratorTokens.length === 1 && numeratorTokens[0] === '1' ? [] : numeratorTokens;\n const denominator = sides.denominator === '' ? [] : sideTokens(sides.denominator);\n // `/s` is a dimensionless numerator over seconds. A bare `/` is not a unit.\n if (numerator.length === 0 && denominator.length === 0) throw new UnknownUnitError(t);\n const numWays = numerator.map((token) => tokenWays(token, compete, 'numerator'));\n const denWays = denominator.map((token) => tokenWays(token, compete, 'denominator'));\n const numCombos = numerator.length === 0 ? [[]] : cartesian(numWays);\n const denCombos = denominator.length === 0 ? [[]] : cartesian(denWays);\n const unique = new Map<string, UnitReading>();\n for (const num of numCombos) {\n for (const den of denCombos) {\n const n = accumulate(num, 1);\n const d = accumulate(den, -1);\n const label = formatExpression(num, den);\n unique.set(label, reading(multiplyScales(n.scale, d.scale), multiply(n.dim, d.dim), label, n.cycles + d.cycles));\n }\n }\n return [...unique.values()];\n}\n\nconst SUPERSCRIPT: Readonly<Record<string, number>> = { '¹': 1, '²': 2, '³': 3, '⁻¹': -1, '⁻²': -2, '⁻³': -3 };\n\n/**\n * Spellings that convert correctly and still mean something else to a reader:\n * the `spellingNotes` of `data/units.json` for each symbol in `given`, in file\n * order. `myr` is a milliyear, bare `G` is the gauss, bare `A` the ampere.\n * @internal\n */\nexport function unitConventionNotes(given: string): string[] {\n const symbols = new Set(given.split(/[*·/\\s^0-9()+-]+/).filter((s) => s.length > 0));\n return [...UNIT_DATA.spellingNotes].filter(([spelling]) => symbols.has(spelling)).map(([, note]) => note);\n}\n\n/** The one reading of a unit expression; more than one is refused. @internal */\nexport function readUnit(text: string): UnitReading {\n const t = text.trim();\n const readings = unitReadings(t);\n if (readings.length !== 1) throw new AmbiguousUnitError(t, readings.map((r) => r.label));\n return readings[0]!;\n}\n\n/** Parse a unit expression; the empty string is dimensionless. @public */\nexport function parseUnit(text: string): ParsedUnit {\n const r = readUnit(text);\n return { scale: r.scale, dim: r.dim, ...(r.affine !== undefined ? { affine: r.affine } : {}) };\n}\n\n/** How a temperature value is read: as a point on the scale, or as a difference. @public */\nexport type TemperatureReading = 'absolute' | 'difference';\n\n/** The SI magnitude of `magnitude` in `unit`, exactly. An absolute affine reading adds its offset. */\nfunction siMagnitude(magnitude: ExactScale, unit: UnitReading, temperature: TemperatureReading): ExactScale {\n const scaled = multiplyScales(magnitude, unit.exact);\n const row = unit.affine === undefined ? undefined : AFFINE.find((candidate) => candidate.id === unit.affine);\n return row !== undefined && temperature === 'absolute' ? addScales(scaled, affineOffset(row)) : scaled;\n}\n\nconst FRACTION = /^\\s*([+-]?(?:\\d+\\.?\\d*|\\.\\d+))\\s*\\/\\s*((?:\\d+\\.?\\d*|\\.\\d+))\\s*$/;\nconst NUMBER_THEN_REST = /^\\s*([+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?)\\s*(.*?)\\s*$/;\n\n/**\n * `raw` split into an exact decimal magnitude and the unit text after it, or\n * null when `raw` is not a number followed by an optional unit. A plain\n * fraction (`1/3`) is a number. Text that begins with an operator (`*h`,\n * `·c`) is an expression, not a unit.\n * @internal\n */\nfunction splitQuantityLiteral(raw: string): { readonly magnitude: ExactScale; readonly unit: string } | null {\n const fraction = FRACTION.exec(raw);\n if (fraction !== null) {\n const den = decimalScale(fraction[2]!)!;\n if (den.num !== 0n) return { magnitude: divideScales(decimalScale(fraction[1]!)!, den), unit: '' };\n }\n const m = NUMBER_THEN_REST.exec(raw);\n if (m === null) return null;\n const unit = m[2]!;\n if (unit.startsWith('*') || unit.startsWith('·')) return null;\n const magnitude = decimalScale(m[1]!);\n return magnitude === null ? null : { magnitude, unit };\n}\n\n/** A number with a unit, read exactly and rounded once. @internal */\nexport interface QuantityLiteral {\n /** SI value; a bare number is unchanged. */\n readonly value: number;\n readonly dim: Dimension;\n /** The unit text as given; `''` for a bare number. */\n readonly unit: string;\n readonly cycles: number;\n readonly affine?: AffineTemperature;\n}\n\nfunction finiteLiteral(raw: string, value: number): number {\n if (!Number.isFinite(value)) throw new UnitError(`'${raw}' is not a finite number`);\n return value;\n}\n\n/**\n * Read `raw` as one number with an optional unit, in SI. Null when `raw` is\n * not that form or names a unit no row spells, so the caller can read it as\n * an expression. A refused unit and an ambiguous one throw. The value may be\n * non-finite (`1e999`); the caller owns that refusal and its error class.\n * @internal\n */\nexport function readQuantityLiteral(raw: string, temperature: TemperatureReading = 'absolute'): QuantityLiteral | null {\n const literal = splitQuantityLiteral(raw);\n if (literal === null) return null;\n if (literal.unit === '') {\n return { value: scaleToNumber(literal.magnitude), dim: DIMENSIONLESS, unit: '', cycles: 0 };\n }\n let unit: UnitReading;\n try {\n unit = readUnit(literal.unit);\n } catch (error) {\n if (error instanceof UnknownUnitError) return null;\n throw error;\n }\n return {\n value: scaleToNumber(siMagnitude(literal.magnitude, unit, temperature)),\n dim: unit.dim,\n unit: literal.unit,\n cycles: unit.cycles,\n ...(unit.affine === undefined ? {} : { affine: unit.affine }),\n };\n}\n\n/** A value converted into a declared unit. @public */\nexport interface ConvertedValue {\n readonly value: number;\n /** The unit the user gave; `''` for a bare number. */\n readonly given: string;\n /** Net power of cycle-counting units in `given` (1 for `Hz` or `rpm`); absent when 0. */\n readonly cycles?: number;\n /** Set when `given` is a lone affine temperature. */\n readonly affine?: AffineTemperature;\n}\n\n/**\n * Convert `raw` (`<number>[unit]`) into `target` (a unit expression). A bare\n * number is taken to be in `target` already. The dimensions must agree.\n *\n * The magnitude, the unit scales and the target scale are multiplied as\n * exact rationals and rounded once, so `1 g/cm^3` in `kg/m^3` is 1000.\n *\n * @returns the value in `target`, and the unit the user gave (`''` for none).\n * @public\n */\nexport function convertValue(raw: string, target: string, temperature: TemperatureReading = 'absolute'): ConvertedValue {\n const literal = splitQuantityLiteral(raw);\n if (literal === null) throw new UnitError(`'${raw}' is not a number with an optional unit`);\n if (literal.unit === '') return { value: finiteLiteral(raw, scaleToNumber(literal.magnitude)), given: '' };\n const given = literal.unit;\n const readings = unitReadings(given);\n const to = readUnit(target);\n if (to.affine !== undefined) throw new UnitError(`a declared unit cannot be affine ('${target}')`);\n const matched = readings.filter((candidate) => equals(candidate.dim, to.dim));\n if (matched.length !== 1) {\n if (readings.length > 1) throw new AmbiguousUnitError(given, readings.map((r) => r.label));\n const from = readings[0];\n if (from === undefined) throw new UnknownUnitError(given);\n throw new UnitError(`'${given}' is ${format(from.dim)}, but this input is ${format(to.dim)} (${target || 'dimensionless'})`);\n }\n const from = matched[0]!;\n const value = scaleToNumber(divideScales(siMagnitude(literal.magnitude, from, temperature), to.exact));\n return {\n value: finiteLiteral(raw, value),\n given,\n ...(from.cycles === 0 ? {} : { cycles: from.cycles }),\n ...(from.affine === undefined ? {} : { affine: from.affine }),\n };\n}\n\n/** The dimension of a declared unit expression. @internal */\nexport function unitDimension(unit: string): Dimension {\n return parseUnit(unit).dim;\n}\n\n/** The symbols the unit table spells, with their exact scales, for the agreement test against MathTS. @internal */\nexport function unitRows(): ReadonlyMap<string, { readonly scale: ExactScale; readonly dim: Dimension; readonly prefixable: boolean }> {\n return UNITS;\n}\n\n/**\n * The tables conversion reads, for the CLI record's fingerprint (`src/cli/record-tables.ts`):\n * each row's scale, dimension, prefixability and `cycles` flag (which multiplies an angular\n * input by 2π), the prefixes, the Celsius offset, and the SHA-256 of `data/units.json`, so a\n * refused spelling, a prefix letter, an affine row or a note that changes changes the fingerprint too.\n * @internal\n */\nexport function unitTables(): {\n units: ReadonlyMap<string, readonly [number, Dimension, boolean, boolean]>;\n prefixes: ReadonlyMap<string, number>;\n celsiusOffsetK: number;\n sourceSha256: string;\n} {\n return {\n units: new Map([...UNITS].map(([symbol, r]) => [symbol, [scaleToNumber(r.scale), r.dim, r.prefixable, r.cycles === true] as const])),\n prefixes: new Map([...PREFIXES].map(([prefix, f]) => [prefix, scaleToNumber(f)] as const)),\n celsiusOffsetK: scaleToNumber(CELSIUS_OFFSET_K),\n sourceSha256: UNIT_DATA.sha256,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validator-registry.js","sourceRoot":"","sources":["../../src/dimensional/validator-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator-registry.js","sourceRoot":"","sources":["../../src/dimensional/validator-registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Validator registry for curvature- and GR-object node kinds.\n *\n * Extracted from `validator.ts`'s `infer()` switch in v0.6.1 Phase 2.\n * Eleven `infer()` arms — `riemann-tensor`, `ricci-tensor`, `einstein-\n * tensor`, `bianchi-residual`, `killing-vector`, `conserved-charge`,\n * `stress-energy`, `cosmological-constant`, `einstein-equation`,\n * `weyl-tensor`, `kretschmann-scalar` — all follow the same shape\n * (call a `validateX(...)` function, then either propagate the\n * returned `freeIndices` into the parent context or skip the merge\n * for scalar kinds). Capturing that shape in a registry eliminates\n * 11×~10 LOC of boilerplate in `validator.ts` and makes the per-arm\n * pattern explicit at the registry-definition site.\n *\n * **Three patterns**, per the Adam+Eve adversarial review of the\n * v0.6.1 Design (S2): a naive `propagateFreeIndices: boolean` flag is\n * insufficient — three arms (`ricci-tensor`, `einstein-tensor`,\n * `bianchi-residual`) pass a riemann-child closure into their\n * validator, while the other eight do not. The pattern tag captures\n * this asymmetry exhaustively:\n *\n * - **Pattern A** — `validateX(node)`, propagate freeIndices.\n * Used by: `riemann-tensor`, `killing-vector`, `stress-energy`,\n * `einstein-equation`, `weyl-tensor`.\n *\n * - **Pattern B** — `validateX(node, riemannCallback)`, propagate\n * freeIndices. Used by: `ricci-tensor`, `einstein-tensor`,\n * `bianchi-residual`. The callback re-validates an embedded\n * Riemann sub-node so its signature checks fire while only the\n * outer (post-contraction) free indices propagate to the parent.\n *\n * - **Pattern C** — `validateX(node)`, freeIndices is empty (scalar\n * result); skip the merge loop entirely. Used by:\n * `conserved-charge`, `cosmological-constant`, `kretschmann-scalar`.\n *\n * The discriminated union type below makes adding a new GR-object\n * node-kind a compile-time decision: the new entry must explicitly\n * declare its pattern, or TypeScript will fail to typecheck the\n * registry. This guards against the v0.5.0 ricci-slot-bug shape\n * (silent miscompute when a new arm follows the \"wrong\" pattern by\n * default).\n *\n * @module dimensional/validator-registry\n */\n\nimport type { Dimension } from './types.js';\nimport { validateRiemannTensor } from './connection-validators.js';\nimport {\n validateRicciTensor,\n validateEinsteinTensor,\n validateBianchiResidual,\n type RiemannChildCallback,\n} from './curvature.js';\nimport { validateKillingVector, validateConservedCharge } from './killing-validators.js';\nimport { validateStressEnergyTensor, validateCosmologicalConstant } from './stress-energy-validators.js';\nimport { validateEinsteinFieldEquation } from './einstein-equation.js';\nimport { validateWeylTensor } from './weyl-validators.js';\nimport { validateKretschmannScalar } from './curvature-invariants.js';\n\n/** Shape of every `validateX` result the registry dispatches over. */\ntype ValidatorResult = {\n readonly dim: Dimension;\n readonly freeIndices: Map<string, { upper: number; lower: number }>;\n};\n\n/**\n * The canonical riemann-child callback used by all pattern-B\n * validators. Re-validates an embedded Riemann sub-node so its\n * structural checks fire, and forwards the result as\n * `{dim, freeIndices}` (without the result's `violations` list,\n * because pattern-B validators handle merging themselves).\n *\n * Uses the `RiemannChildCallback` type re-exported from\n * `curvature.ts` (v0.7.1 Phase 4 Task 4.2 — consolidates the\n * three identical inline callback shapes across the pattern-B\n * validators into a single named alias).\n */\nconst riemannChildCallback: RiemannChildCallback = (riemannChild) => {\n const rr = validateRiemannTensor(riemannChild);\n return { dim: rr.dim, freeIndices: rr.freeIndices };\n};\n\n/**\n * The set of node-kinds dispatched through this registry. Keep in\n * sync with the `case` labels in `validator.ts`'s `infer()` switch —\n * a TypeScript exhaustiveness check below enforces the contract.\n */\ntype RegistryKind =\n | 'riemann-tensor'\n | 'ricci-tensor'\n | 'einstein-tensor'\n | 'bianchi-residual'\n | 'killing-vector'\n | 'conserved-charge'\n | 'stress-energy'\n | 'cosmological-constant'\n | 'einstein-equation'\n | 'weyl-tensor'\n | 'kretschmann-scalar';\n\n/** Discriminated-union entry per node-kind. */\ntype ValidatorEntry =\n | { pattern: 'A'; validator: (node: never) => ValidatorResult }\n | { pattern: 'B'; validator: (node: never, cb: RiemannChildCallback) => ValidatorResult }\n | { pattern: 'C'; validator: (node: never) => ValidatorResult };\n\n/**\n * The registry. Indexed by `node.kind` for the 11 curvature/GR\n * arms; misses are handled by the caller (validator.ts's `infer()`\n * has a `default` arm for unknown kinds).\n */\nconst VALIDATOR_REGISTRY: { [K in RegistryKind]: ValidatorEntry } = {\n // Pattern A — single-arg validator, propagate freeIndices.\n 'riemann-tensor': { pattern: 'A', validator: validateRiemannTensor as (node: never) => ValidatorResult },\n 'killing-vector': { pattern: 'A', validator: validateKillingVector as (node: never) => ValidatorResult },\n 'stress-energy': { pattern: 'A', validator: validateStressEnergyTensor as (node: never) => ValidatorResult },\n 'einstein-equation': { pattern: 'A', validator: validateEinsteinFieldEquation as (node: never) => ValidatorResult },\n 'weyl-tensor': { pattern: 'A', validator: validateWeylTensor as (node: never) => ValidatorResult },\n\n // Pattern B — two-arg validator with riemann-child callback, propagate freeIndices.\n 'ricci-tensor': { pattern: 'B', validator: validateRicciTensor as (node: never, cb: RiemannChildCallback) => ValidatorResult },\n 'einstein-tensor': { pattern: 'B', validator: validateEinsteinTensor as (node: never, cb: RiemannChildCallback) => ValidatorResult },\n 'bianchi-residual': { pattern: 'B', validator: validateBianchiResidual as (node: never, cb: RiemannChildCallback) => ValidatorResult },\n\n // Pattern C — single-arg validator, scalar (skip freeIndices merge).\n 'conserved-charge': { pattern: 'C', validator: validateConservedCharge as (node: never) => ValidatorResult },\n 'cosmological-constant': { pattern: 'C', validator: validateCosmologicalConstant as (node: never) => ValidatorResult },\n 'kretschmann-scalar': { pattern: 'C', validator: validateKretschmannScalar as (node: never) => ValidatorResult },\n};\n\n/**\n * Look up the registry entry for a node-kind, returning `undefined`\n * for kinds not covered by this registry (the caller falls through\n * to its own switch arms or the default exhaustiveness guard).\n */\nexport function lookupValidatorEntry(kind: string): ValidatorEntry | undefined {\n return (VALIDATOR_REGISTRY as Record<string, ValidatorEntry>)[kind];\n}\n\n/**\n * Apply the registry-dispatched validator to a node. The caller\n * (validator.ts's `infer()`) is responsible for merging the returned\n * `freeIndices` into its context.\n *\n * Returns the validator's full result so the caller can decide\n * whether to merge or skip per the pattern tag. (Pattern C's result\n * still has a `freeIndices` field — empty Map — for shape uniformity;\n * the merge loop is a no-op rather than a missing field.)\n */\nexport function dispatchValidator(\n entry: ValidatorEntry,\n node: unknown,\n): ValidatorResult {\n switch (entry.pattern) {\n case 'A':\n return entry.validator(node as never);\n case 'B':\n return entry.validator(node as never, riemannChildCallback);\n case 'C':\n return entry.validator(node as never);\n default: {\n // Exhaustiveness guard\n const _exhaustive: never = entry;\n void _exhaustive;\n throw new Error(`validator-registry: unknown pattern in entry`);\n }\n }\n}\n\n/**\n * Returns true if the entry's pattern propagates freeIndices to the\n * parent context. Patterns A and B propagate; pattern C skips\n * (scalar result).\n */\nexport function shouldPropagateFreeIndices(entry: ValidatorEntry): boolean {\n return entry.pattern === 'A' || entry.pattern === 'B';\n}\n"]}
@@ -38,22 +38,6 @@ export interface ValidationResult {
38
38
  }>;
39
39
  violations: Violation[];
40
40
  }
41
- /**
42
- * Per-bridge dimensional self-check report. Each `src/bridges/equations/`
43
- * module exports a `validate*Dimensions(): DimensionValidationReport` helper
44
- * that runs `validateEquation(LHS, RHS)` and returns LHS/RHS inferred dims
45
- * alongside the homogeneity verdict. Lifted here so the 9+ bridge modules
46
- * import a single shared shape rather than redeclaring it byte-for-byte.
47
- *
48
- * Source: simplifier F2 (Wave G), confidence 88. The interface satisfies
49
- * Karpathy's three extraction criteria — single semantic meaning, ≥9
50
- * consumers, future encodings will use it.
51
- */
52
- export interface DimensionValidationReport {
53
- ok: boolean;
54
- lhsDim: Dimension | null;
55
- rhsDim: Dimension | null;
56
- }
57
41
  /**
58
42
  * Validate a single scalar/tensor `ExprNode`: infer its dimension and collect
59
43
  * any consistency violations. `ok` is true iff a dimension was inferred and no
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/dimensional/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,SAAS,EAEV,MAAM,YAAY,CAAC;AAqBpB,OAAO,KAAK,EACV,QAAQ,EAIR,gBAAgB,EAejB,MAAM,gBAAgB,CAAC;AAwBxB,YAAY,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,cAAc,EACd,UAAU,EACV,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,cAAc,EACd,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,SAAS;IACxB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb;8EAC0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,iBAAiB,EAAE,SAAS,GAAG,IAAI,CAAC;IACpC;;qDAEiD;IACjD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B;AAiqBD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CASzD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,gBAAgB,GACvB,SAAS,EAAE,CAUb;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,gBAAgB,CA8C/E"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/dimensional/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,SAAS,EAEV,MAAM,YAAY,CAAC;AAqBpB,OAAO,KAAK,EACV,QAAQ,EAIR,gBAAgB,EAejB,MAAM,gBAAgB,CAAC;AAwBxB,YAAY,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,cAAc,EACd,UAAU,EACV,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,cAAc,EACd,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,SAAS;IACxB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb;8EAC0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,iBAAiB,EAAE,SAAS,GAAG,IAAI,CAAC;IACpC;;qDAEiD;IACjD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAusBD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CASzD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,gBAAgB,GACvB,SAAS,EAAE,CAUb;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,gBAAgB,CA8C/E"}
@@ -61,11 +61,9 @@ function formatFreeIndices(m) {
61
61
  }
62
62
  /**
63
63
  * Merge every `{label → counts}` entry from `source` into `target`,
64
- * overwriting any existing entry for the same label. v0.7.1 Phase 4
65
- * Task 4.3 — consolidates the eight `for (const [label, counts] of …)
66
- * target.set(label, counts)` instances across the `infer()` switch arms
67
- * into a single helper (callsites at lines 465, 527, 549, 563, 571, 581,
68
- * 591, 624 in pre-extraction validator.ts).
64
+ * overwriting any existing entry for the same label. One helper for the
65
+ * `for (const [label, counts] of …) target.set(label, counts)` loop that
66
+ * the `infer()` switch arms each used to carry.
69
67
  *
70
68
  * The semantics are an "overwrite-style" merge — child results are
71
69
  * authoritative when their labels collide with the parent context.
@@ -157,8 +155,7 @@ function resolveChildForContraction(node, parentCtx) {
157
155
  * `resolveChildForContraction` but returns role-aware result so the
158
156
  * pderiv validator can pass through `of.role` (Design §13 Q1).
159
157
  */
160
- function resolveChildForPartialDerivative(node, parentCtx) {
161
- const typed = node;
158
+ function resolveChildForPartialDerivative(typed, parentCtx) {
162
159
  if (typed.kind === 'tensor-symbol') {
163
160
  const result = validateTensorSymbol(typed);
164
161
  return { dim: result.dim, freeIndices: result.freeIndices, role: typed.role };
@@ -188,11 +185,34 @@ function resolveChildForPartialDerivative(node, parentCtx) {
188
185
  * Recursive dimension inference. On any sub-expression error we record a
189
186
  * violation, return `null`, and let parent ops propagate the null up.
190
187
  */
188
+ /** A decimal literal: an optional sign, digits with an optional fraction, an optional exponent. */
189
+ const DECIMAL_LITERAL = /^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/;
190
+ /** The scalar operators an `op` node may carry; anything else is a violation, not a sum. */
191
+ const SCALAR_OPS = new Set(['^', '*', '/', '+', '-']);
192
+ /** The `TranscendentalFn` union, as a runtime set for a node built from JSON. */
193
+ const TRANSCENDENTAL_FNS = new Set(['exp', 'ln', 'log2', 'log10', 'sin', 'cos', 'tan', 'sinh', 'cosh', 'tanh']);
194
+ /**
195
+ * A literal exponent: a symbol whose name is a decimal literal and whose
196
+ * dimension is dimensionless. The name is the number; the dimension says it
197
+ * is a number and not a quantity that happens to be spelled with digits.
198
+ */
199
+ function isLiteralExponent(node) {
200
+ return DECIMAL_LITERAL.test(node.name) && equals(node.dim, DIMENSIONLESS);
201
+ }
191
202
  function infer(node, ctx) {
192
203
  switch (node.kind) {
193
204
  case 'symbol':
194
205
  return node.dim;
195
206
  case 'op': {
207
+ if (!SCALAR_OPS.has(node.op)) {
208
+ ctx.violations.push({
209
+ location: ctx.path,
210
+ expected: DIMENSIONLESS,
211
+ actual: DIMENSIONLESS,
212
+ note: `unknown operator '${String(node.op)}'; the operators are ^ * / + -`,
213
+ });
214
+ return null;
215
+ }
196
216
  if (node.op === '^') {
197
217
  // a^n — base is an arbitrary expression. A numeric-literal exponent
198
218
  // works on any base (power(baseDim, n)). A non-literal (input-dependent)
@@ -217,13 +237,24 @@ function infer(node, ctx) {
217
237
  if (baseProbe.freeIndices.size > 0) {
218
238
  throw new TensorInScalarOpError('^');
219
239
  }
220
- // Classify the exponent. A numeric-literal symbol keeps the existing
221
- // behavior — it supports a DIMENSIONFUL base (e.g. c^3, r_s = …/c^2).
222
- const isLiteralExp = !!expNode &&
223
- expNode.kind === 'symbol' &&
224
- Number.isFinite(Number(expNode.name));
225
- if (isLiteralExp) {
226
- return power(baseDim, Number(expNode.name));
240
+ // Classify the exponent. A numeric-literal symbol supports a
241
+ // DIMENSIONFUL base (e.g. c^3, r_s = …/c^2). A literal is a decimal
242
+ // literal (`2`, `-1`, `0.5`, `1e-3`) carried by a DIMENSIONLESS
243
+ // symbol: `''`, `' '` and `'0x2'` are not literals, and a `2` that
244
+ // carries a dimension is a dimensioned exponent, which no base takes.
245
+ if (expNode !== undefined && expNode.kind === 'symbol' && isLiteralExponent(expNode)) {
246
+ const n = Number(expNode.name);
247
+ // `1e400` reads as Infinity and `1e-400` as 0: neither is the exponent written.
248
+ if (!Number.isFinite(n) || (n === 0 && !/^[+-]?0*\.?0*(?:[eE][+-]?\d+)?$/.test(expNode.name))) {
249
+ ctx.violations.push({
250
+ location: ctx.path,
251
+ expected: DIMENSIONLESS,
252
+ actual: DIMENSIONLESS,
253
+ note: `exponent '${expNode.name}' is not representable as a finite number`,
254
+ });
255
+ return null;
256
+ }
257
+ return power(baseDim, n);
227
258
  }
228
259
  // Non-literal (input-dependent) exponent. SOUND only when the base is
229
260
  // DIMENSIONLESS: dimensionless^(dimensionless) = dimensionless, so the
@@ -258,7 +289,7 @@ function infer(node, ctx) {
258
289
  if (expNode) {
259
290
  const probeCtx = { path: joinPath(ctx.path, 'args[1]'), violations: [], freeIndices: new Map() };
260
291
  const probed = infer(expNode, probeCtx);
261
- if (probed !== null && probed !== undefined && okFromViolations(probeCtx.violations)) {
292
+ if (probed !== null && okFromViolations(probeCtx.violations)) {
262
293
  actualDim = probed;
263
294
  }
264
295
  }
@@ -474,6 +505,15 @@ function infer(node, ctx) {
474
505
  return divide(divide(fnProbe.dim, phiProbe.dim), muProbe.dim);
475
506
  }
476
507
  case 'transcendental': {
508
+ if (!TRANSCENDENTAL_FNS.has(node.fn)) {
509
+ ctx.violations.push({
510
+ location: ctx.path,
511
+ expected: DIMENSIONLESS,
512
+ actual: DIMENSIONLESS,
513
+ note: `unknown transcendental function '${String(node.fn)}'; the functions are ${[...TRANSCENDENTAL_FNS].join(', ')}`,
514
+ });
515
+ return null;
516
+ }
477
517
  // exp/ln/logₙ/sin/cos/tan/sinh/cosh/tanh of a DIMENSIONLESS argument is
478
518
  // DIMENSIONLESS (the function's Taylor series only sums across like
479
519
  // dimensions when its argument is dimensionless). A dimensionful argument
@@ -545,17 +585,12 @@ function infer(node, ctx) {
545
585
  // shared ctx.freeIndices accumulator. This is what makes
546
586
  // (A·B)·C-style nested products correct: the inner product's dummy
547
587
  // indices stay scoped to the inner call.
548
- try {
549
- const result = computeContraction(node.args, (child) => resolveChildForContraction(child, ctx));
550
- mergeFreeIndices(ctx.freeIndices, result.freeIndices);
551
- return result.dim;
552
- }
553
- catch (err) {
554
- // Errors from the contraction (IndexLabelCollisionError,
555
- // VarianceMismatchError) are part of the public surface — propagate
556
- // them so callers / tests can catch by type.
557
- throw err;
558
- }
588
+ // Errors from the contraction (IndexLabelCollisionError,
589
+ // VarianceMismatchError) are part of the public surface and propagate
590
+ // so callers / tests can catch by type.
591
+ const result = computeContraction(node.args, (child) => resolveChildForContraction(child, ctx));
592
+ mergeFreeIndices(ctx.freeIndices, result.freeIndices);
593
+ return result.dim;
559
594
  }
560
595
  case 'metric-tensor': {
561
596
  const { dim, freeIndices } = validateMetricTensor(node);
@@ -642,7 +677,8 @@ function okFromViolations(violations) {
642
677
  function isDimensionlessZeroLiteral(node) {
643
678
  if (node === undefined || node.kind !== 'symbol' || node.name.trim() === '')
644
679
  return false;
645
- if (Number(node.name) !== 0)
680
+ // A decimal literal zero only: `0x0`, `0b0` and a blank are not the written identity.
681
+ if (!DECIMAL_LITERAL.test(node.name) || Number(node.name) !== 0)
646
682
  return false;
647
683
  const d = node.dim;
648
684
  return d.L === 0 && d.M === 0 && d.T === 0 && d.I === 0 && d.Theta === 0 && d.N === 0 && d.J === 0;
@@ -656,8 +692,8 @@ export function validate(expr) {
656
692
  const ctx = { path: '', violations: [], freeIndices: new Map() };
657
693
  const dim = infer(expr, ctx);
658
694
  return {
659
- ok: okFromViolations(ctx.violations) && dim !== null && dim !== undefined,
660
- inferredDimension: dim ?? null,
695
+ ok: okFromViolations(ctx.violations) && dim !== null,
696
+ inferredDimension: dim,
661
697
  freeIndices: ctx.freeIndices,
662
698
  violations: ctx.violations,
663
699
  };