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
@@ -20,7 +20,7 @@ export declare const CONFRONTATION_RIGOR: ReadonlyMap<number, RigorTier>;
20
20
  export declare function confrontationRigor(bridgeId: number): RigorTier;
21
21
  /** Count of confrontations by rigor tier. @public */
22
22
  export declare function rigorDistribution(): Record<RigorTier, number>;
23
- /** Catalog id → confrontation. @public */
23
+ /** Catalog id → confrontation. One per id: the loader refuses a second. @public */
24
24
  export declare const CONFRONTATIONS: ReadonlyMap<number, ConfrontationEntry>;
25
25
  /** Every confrontation, in catalog order. @public */
26
26
  export declare function listConfrontations(): ConfrontationEntry[];
@@ -1 +1 @@
1
- {"version":3,"file":"confrontations.d.ts","sourceRoot":"","sources":["../../src/bridges/confrontations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGrF,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,GAAG,IAAI,oBAAoB,CAAC;CAC7B;AAED,wCAAwC;AACxC,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAI3D,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAE9D,CAAC;AAEF,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAE9D;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAI7D;AAED,0CAA0C;AAC1C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAUlE,CAAC;AAEF,qDAAqD;AACrD,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAEzD;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEnF"}
1
+ {"version":3,"file":"confrontations.d.ts","sourceRoot":"","sources":["../../src/bridges/confrontations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGrF,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,GAAG,IAAI,oBAAoB,CAAC;CAC7B;AAED,wCAAwC;AACxC,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAI3D,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAE9D,CAAC;AAEF,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAE9D;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAI7D;AAED,mFAAmF;AACnF,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAUlE,CAAC;AAEF,qDAAqD;AACrD,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAEzD;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEnF"}
@@ -19,7 +19,7 @@ export function rigorDistribution() {
19
19
  counts[tier] += 1;
20
20
  return counts;
21
21
  }
22
- /** Catalog id → confrontation. @public */
22
+ /** Catalog id → confrontation. One per id: the loader refuses a second. @public */
23
23
  export const CONFRONTATIONS = new Map(ROWS.map((row) => [
24
24
  row.catalogId,
25
25
  {
@@ -1 +1 @@
1
- {"version":3,"file":"confrontations.js","sourceRoot":"","sources":["../../src/bridges/confrontations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAa1D,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;AAErC,iEAAiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAmC,IAAI,GAAG,CACxE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAC;AAEF,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC;AACtD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAA8B,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAClF,KAAK,MAAM,IAAI,IAAI,mBAAmB,CAAC,MAAM,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,cAAc,GAA4C,IAAI,GAAG,CAC5E,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;IAChB,GAAG,CAAC,SAAS;IACb;QACE,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAA0C;KAC1D;CACF,CAAC,CACH,CAAC;AAEF,qDAAqD;AACrD,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"confrontations.js","sourceRoot":"","sources":["../../src/bridges/confrontations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAa1D,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;AAErC,iEAAiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAmC,IAAI,GAAG,CACxE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAC;AAEF,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC;AACtD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAA8B,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAClF,KAAK,MAAM,IAAI,IAAI,mBAAmB,CAAC,MAAM,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAA4C,IAAI,GAAG,CAC5E,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;IAChB,GAAG,CAAC,SAAS;IACb;QACE,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO;KACvB;CACF,CAAC,CACH,CAAC;AAEF,qDAAqD;AACrD,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;AAC7C,CAAC","sourcesContent":["/**\n * Confrontations projected from the catalog. The outcome is the recorded\n * comparison. Residual arithmetic stays in `observations/types.ts`.\n *\n * @module bridges/confrontations\n */\n\nimport type { ConfrontationOutcome, ObservationKind } from './observations/types.js';\nimport { catalogConfrontations } from './catalog-load.js';\n\n/** One registered confrontation. @public */\nexport interface ConfrontationEntry {\n readonly bridgeId: number;\n readonly title: string;\n readonly kind: ObservationKind;\n run(): ConfrontationOutcome;\n}\n\n/** Rigor of a confrontation. @public */\nexport type RigorTier = 'stringent' | 'moderate' | 'loose';\n\nconst ROWS = catalogConfrontations();\n\n/** Author-recorded rigor, projected from the catalog. @public */\nexport const CONFRONTATION_RIGOR: ReadonlyMap<number, RigorTier> = new Map(\n ROWS.map((row) => [row.catalogId, row.rigor]),\n);\n\n/** The rigor tier of a confronted catalog id (`loose` when none is recorded). @public */\nexport function confrontationRigor(bridgeId: number): RigorTier {\n return CONFRONTATION_RIGOR.get(bridgeId) ?? 'loose';\n}\n\n/** Count of confrontations by rigor tier. @public */\nexport function rigorDistribution(): Record<RigorTier, number> {\n const counts: Record<RigorTier, number> = { stringent: 0, moderate: 0, loose: 0 };\n for (const tier of CONFRONTATION_RIGOR.values()) counts[tier] += 1;\n return counts;\n}\n\n/** Catalog id → confrontation. One per id: the loader refuses a second. @public */\nexport const CONFRONTATIONS: ReadonlyMap<number, ConfrontationEntry> = new Map(\n ROWS.map((row) => [\n row.catalogId,\n {\n bridgeId: row.catalogId,\n title: row.title,\n kind: row.kind,\n run: () => row.outcome,\n },\n ]),\n);\n\n/** Every confrontation, in catalog order. @public */\nexport function listConfrontations(): ConfrontationEntry[] {\n return [...CONFRONTATIONS.values()];\n}\n\n/** Run one confrontation, or `undefined` when the id has none. @public */\nexport function runConfrontation(bridgeId: number): ConfrontationOutcome | undefined {\n return CONFRONTATIONS.get(bridgeId)?.run();\n}\n"]}
@@ -44,6 +44,19 @@ export declare class NonFiniteInputError extends Error {
44
44
  /** The id evaluated, the key, and the value that was given. */
45
45
  constructor(id: string, key: string, value: number);
46
46
  }
47
+ /**
48
+ * A binding names π, a registered physical constant or a formula overlay
49
+ * (`G`, `k_B`, `m_p`, …). A constant is never an input: the value would
50
+ * silently replace the constant in the formula. A relation's own declared
51
+ * source may carry such a name (a named default the caller overrides); any
52
+ * other key with that name is refused before the formula is evaluated.
53
+ * @public
54
+ */
55
+ export declare class ConstantInputError extends Error {
56
+ readonly key: string;
57
+ /** The key that was given. */
58
+ constructor(key: string);
59
+ }
47
60
  /** One input is given twice, under two of its spellings (its key, an alias, or an alternate). @public */
48
61
  export declare class DuplicateInputError extends Error {
49
62
  readonly id: string | undefined;
@@ -54,13 +67,39 @@ export declare class DuplicateInputError extends Error {
54
67
  }
55
68
  /**
56
69
  * True for an error the input contract throws: an absent, unknown, non-number,
57
- * non-finite or twice-given input. A caller that reports input errors one way
70
+ * non-finite, twice-given or constant-named input. A caller that reports input errors one way
58
71
  * and domain errors another asks this, not the message.
59
72
  * @internal
60
73
  */
61
- export declare function isInputContractError(error: unknown): error is MissingInputError | UnknownInputError | InputTypeError | NonFiniteInputError | DuplicateInputError;
74
+ export declare function isInputContractError(error: unknown): error is MissingInputError | UnknownInputError | InputTypeError | NonFiniteInputError | DuplicateInputError | ConstantInputError;
75
+ /**
76
+ * One input a violated condition reads: the key the caller gave it under, the
77
+ * name the relation reads it by, and its value. @public
78
+ */
79
+ export interface DomainInput {
80
+ readonly key: string;
81
+ readonly quantity: string;
82
+ readonly value: number;
83
+ }
84
+ /**
85
+ * One violated condition of a validity domain. `condition` is the conjunct of
86
+ * the record's `holds` that failed, written with the caller's keys
87
+ * (`T_K >= 0`); `key` and `value` are the first input it reads, and `inputs`
88
+ * every input it reads. A condition that reads no input (a constant check) has
89
+ * `key` `''` and `value` `NaN`. A later range-per-kind change generates the
90
+ * same objects. @public
91
+ */
92
+ export interface DomainViolation {
93
+ readonly condition: string;
94
+ readonly key: string;
95
+ readonly value: number;
96
+ readonly inputs: readonly DomainInput[];
97
+ }
62
98
  /**
63
99
  * Evaluation refused: the inputs fall outside the relation's validity domain.
100
+ * The error lists only the conditions that failed, each with the input keys it
101
+ * reads and their values; the message is rendered from them, so it cannot name
102
+ * a condition the check did not run.
64
103
  *
65
104
  * Honest deviation from design D-3's "domain-incompatible at compose
66
105
  * time": domain predicates are opaque functions, so incompatibility is
@@ -71,6 +110,10 @@ export declare function isInputContractError(error: unknown): error is MissingIn
71
110
  * @public
72
111
  */
73
112
  export declare class DomainViolationError extends Error {
74
- constructor(message: string);
113
+ readonly id: string;
114
+ readonly violations: readonly DomainViolation[];
115
+ readonly context?: string | undefined;
116
+ /** The id evaluated, every violated condition, and, for a composed edge, where in the composition it failed. */
117
+ constructor(id: string, violations: readonly DomainViolation[], context?: string | undefined);
75
118
  }
76
119
  //# sourceMappingURL=evaluation-errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluation-errors.d.ts","sourceRoot":"","sources":["../../src/bridges/evaluation-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4EAA4E;AAC5E,qBAAa,iBAAkB,SAAQ,KAAK;IAGxC,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE;IAJpC,iEAAiE;IACjE,YACW,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,SAAS,MAAM,EAAE,EAInC;CACF;AAID,+EAA+E;AAC/E,qBAAa,iBAAkB,SAAQ,KAAK;IAGxC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE;IAJpC,0GAA0G;IAC1G,YACW,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,MAAM,EAAE,EAInC;CACF;AAED,wFAAwF;AACxF,qBAAa,cAAe,SAAQ,SAAS;IAGzC,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM;IAJtB,yEAAyE;IACzE,YACW,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EAIrB;CACF;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAG1C,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM;IAJxB,+DAA+D;IAC/D,YACW,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAIvB;CACF;AAED,yGAAyG;AACzG,qBAAa,mBAAoB,SAAQ,KAAK;IAG1C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAJ/C,sHAAsH;IACtH,YACW,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAQ9C;CACF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,iBAAiB,GAAG,iBAAiB,GAAG,cAAc,GAAG,mBAAmB,GAAG,mBAAmB,CAQ7G;AAED;;;;;;;;;;GAUG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF"}
1
+ {"version":3,"file":"evaluation-errors.d.ts","sourceRoot":"","sources":["../../src/bridges/evaluation-errors.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,23 @@ export class NonFiniteInputError extends Error {
69
69
  this.name = 'NonFiniteInputError';
70
70
  }
71
71
  }
72
+ /**
73
+ * A binding names π, a registered physical constant or a formula overlay
74
+ * (`G`, `k_B`, `m_p`, …). A constant is never an input: the value would
75
+ * silently replace the constant in the formula. A relation's own declared
76
+ * source may carry such a name (a named default the caller overrides); any
77
+ * other key with that name is refused before the formula is evaluated.
78
+ * @public
79
+ */
80
+ export class ConstantInputError extends Error {
81
+ key;
82
+ /** The key that was given. */
83
+ constructor(key) {
84
+ super(`'${key}' names a registered constant and is not an input`);
85
+ this.key = key;
86
+ this.name = 'ConstantInputError';
87
+ }
88
+ }
72
89
  /** One input is given twice, under two of its spellings (its key, an alias, or an alternate). @public */
73
90
  export class DuplicateInputError extends Error {
74
91
  id;
@@ -87,7 +104,7 @@ export class DuplicateInputError extends Error {
87
104
  }
88
105
  /**
89
106
  * True for an error the input contract throws: an absent, unknown, non-number,
90
- * non-finite or twice-given input. A caller that reports input errors one way
107
+ * non-finite, twice-given or constant-named input. A caller that reports input errors one way
91
108
  * and domain errors another asks this, not the message.
92
109
  * @internal
93
110
  */
@@ -96,10 +113,21 @@ export function isInputContractError(error) {
96
113
  error instanceof UnknownInputError ||
97
114
  error instanceof InputTypeError ||
98
115
  error instanceof NonFiniteInputError ||
99
- error instanceof DuplicateInputError);
116
+ error instanceof DuplicateInputError ||
117
+ error instanceof ConstantInputError);
118
+ }
119
+ /** `T_K = -1 violates T_K >= 0`; two inputs: `T_c_K = 5, T_h_K = 3 violate T_c_K <= T_h_K`. */
120
+ function describeViolation(violation) {
121
+ if (violation.inputs.length === 0)
122
+ return `${violation.condition} fails`;
123
+ const given = violation.inputs.map((input) => `${input.key} = ${input.value}`).join(', ');
124
+ return `${given} ${violation.inputs.length === 1 ? 'violates' : 'violate'} ${violation.condition}`;
100
125
  }
101
126
  /**
102
127
  * Evaluation refused: the inputs fall outside the relation's validity domain.
128
+ * The error lists only the conditions that failed, each with the input keys it
129
+ * reads and their values; the message is rendered from them, so it cannot name
130
+ * a condition the check did not run.
103
131
  *
104
132
  * Honest deviation from design D-3's "domain-incompatible at compose
105
133
  * time": domain predicates are opaque functions, so incompatibility is
@@ -110,8 +138,16 @@ export function isInputContractError(error) {
110
138
  * @public
111
139
  */
112
140
  export class DomainViolationError extends Error {
113
- constructor(message) {
114
- super(message);
141
+ id;
142
+ violations;
143
+ context;
144
+ /** The id evaluated, every violated condition, and, for a composed edge, where in the composition it failed. */
145
+ constructor(id, violations, context) {
146
+ super(`${id}: outside the validity domain${context === undefined ? '' : ` (${context})`}: ` +
147
+ violations.map(describeViolation).join('; '));
148
+ this.id = id;
149
+ this.violations = violations;
150
+ this.context = context;
115
151
  this.name = 'DomainViolationError';
116
152
  }
117
153
  }
@@ -1 +1 @@
1
- {"version":3,"file":"evaluation-errors.js","sourceRoot":"","sources":["../../src/bridges/evaluation-errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluation-errors.js","sourceRoot":"","sources":["../../src/bridges/evaluation-errors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The errors one evaluation throws, in the order it checks: the bindings\n * against the declared inputs first (an unknown key, a non-number, a number\n * that is not finite, a key given twice, an absent input), then the validity\n * domain. An input error says what the caller left out or misspelled; a\n * domain error says the physics refuses the values. The library throws these classes so a caller can tell them\n * apart by type, never by message text.\n *\n * @module bridges/evaluation-errors\n */\n\n/** A required input is absent. It is not a physically bad value. @public */\nexport class MissingInputError extends Error {\n /** The id evaluated, the absent keys, and every declared key. */\n constructor(\n readonly id: string,\n readonly missing: readonly string[],\n readonly inputs: readonly string[],\n ) {\n super(`${id}: missing input ${missing.map((key) => `'${key}'`).join(', ')}; the inputs are: ${inputs.join(', ')}`);\n this.name = 'MissingInputError';\n }\n}\n\nconst prefix = (id: string | undefined): string => (id === undefined ? '' : `${id}: `);\n\n/** A binding names no declared input, alias or alternate of the id. @public */\nexport class UnknownInputError extends Error {\n /** The id evaluated (absent when the reader was not told it), the unknown key, and every declared key. */\n constructor(\n readonly id: string | undefined,\n readonly key: string,\n readonly inputs: readonly string[],\n ) {\n super(`${prefix(id)}'${key}' is not an input here; the inputs are: ${inputs.join(', ')}`);\n this.name = 'UnknownInputError';\n }\n}\n\n/** A binding's value is not a number. A `TypeError`, as before it was typed. @public */\nexport class InputTypeError extends TypeError {\n /** The id evaluated, the key, and the JavaScript type that was given. */\n constructor(\n readonly id: string,\n readonly key: string,\n readonly got: string,\n ) {\n super(`${id}: ${key} must be a number, got ${got}`);\n this.name = 'InputTypeError';\n }\n}\n\n/**\n * A binding's value is a number that is not finite (`NaN`, `Infinity`,\n * `-Infinity`). It is refused before the domain, so a validity predicate never\n * sees it and a closed form never turns it into an unset result. @public\n */\nexport class NonFiniteInputError extends Error {\n /** The id evaluated, the key, and the value that was given. */\n constructor(\n readonly id: string,\n readonly key: string,\n readonly value: number,\n ) {\n super(`${id}: ${key} must be a finite number, got ${value}`);\n this.name = 'NonFiniteInputError';\n }\n}\n\n/**\n * A binding names π, a registered physical constant or a formula overlay\n * (`G`, `k_B`, `m_p`, …). A constant is never an input: the value would\n * silently replace the constant in the formula. A relation's own declared\n * source may carry such a name (a named default the caller overrides); any\n * other key with that name is refused before the formula is evaluated.\n * @public\n */\nexport class ConstantInputError extends Error {\n /** The key that was given. */\n constructor(readonly key: string) {\n super(`'${key}' names a registered constant and is not an input`);\n this.name = 'ConstantInputError';\n }\n}\n\n/** One input is given twice, under two of its spellings (its key, an alias, or an alternate). @public */\nexport class DuplicateInputError extends Error {\n /** The id evaluated (absent when the reader was not told it), the input, and the two spellings it was given under. */\n constructor(\n readonly id: string | undefined,\n readonly key: string,\n readonly spellings: readonly [string, string],\n ) {\n super(\n spellings[0] === spellings[1]\n ? `${prefix(id)}'${key}' is given twice`\n : `${prefix(id)}'${key}' is given twice (once through an alternate): ${spellings[0]} and ${spellings[1]}`,\n );\n this.name = 'DuplicateInputError';\n }\n}\n\n/**\n * True for an error the input contract throws: an absent, unknown, non-number,\n * non-finite, twice-given or constant-named input. A caller that reports input errors one way\n * and domain errors another asks this, not the message.\n * @internal\n */\nexport function isInputContractError(\n error: unknown,\n): error is MissingInputError | UnknownInputError | InputTypeError | NonFiniteInputError | DuplicateInputError | ConstantInputError {\n return (\n error instanceof MissingInputError ||\n error instanceof UnknownInputError ||\n error instanceof InputTypeError ||\n error instanceof NonFiniteInputError ||\n error instanceof DuplicateInputError ||\n error instanceof ConstantInputError\n );\n}\n\n/**\n * One input a violated condition reads: the key the caller gave it under, the\n * name the relation reads it by, and its value. @public\n */\nexport interface DomainInput {\n readonly key: string;\n readonly quantity: string;\n readonly value: number;\n}\n\n/**\n * One violated condition of a validity domain. `condition` is the conjunct of\n * the record's `holds` that failed, written with the caller's keys\n * (`T_K >= 0`); `key` and `value` are the first input it reads, and `inputs`\n * every input it reads. A condition that reads no input (a constant check) has\n * `key` `''` and `value` `NaN`. A later range-per-kind change generates the\n * same objects. @public\n */\nexport interface DomainViolation {\n readonly condition: string;\n readonly key: string;\n readonly value: number;\n readonly inputs: readonly DomainInput[];\n}\n\n/** `T_K = -1 violates T_K >= 0`; two inputs: `T_c_K = 5, T_h_K = 3 violate T_c_K <= T_h_K`. */\nfunction describeViolation(violation: DomainViolation): string {\n if (violation.inputs.length === 0) return `${violation.condition} fails`;\n const given = violation.inputs.map((input) => `${input.key} = ${input.value}`).join(', ');\n return `${given} ${violation.inputs.length === 1 ? 'violates' : 'violate'} ${violation.condition}`;\n}\n\n/**\n * Evaluation refused: the inputs fall outside the relation's validity domain.\n * The error lists only the conditions that failed, each with the input keys it\n * reads and their values; the message is rendered from them, so it cannot name\n * a condition the check did not run.\n *\n * Honest deviation from design D-3's \"domain-incompatible at compose\n * time\": domain predicates are opaque functions, so incompatibility is\n * detectable only at evaluation. This error is thrown by `evaluateEdge`, by\n * a catalog evaluator, and by composed edges internally, not by\n * `composeEdges`.\n *\n * @public\n */\nexport class DomainViolationError extends Error {\n /** The id evaluated, every violated condition, and, for a composed edge, where in the composition it failed. */\n constructor(\n readonly id: string,\n readonly violations: readonly DomainViolation[],\n readonly context?: string,\n ) {\n super(\n `${id}: outside the validity domain${context === undefined ? '' : ` (${context})`}: ` +\n violations.map(describeViolation).join('; '),\n );\n this.name = 'DomainViolationError';\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator-inputs.d.ts","sourceRoot":"","sources":["../../src/bridges/evaluator-inputs.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAuCD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,SAAS,kBAAkB,EAAE,EACzC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,CAAC,EAAE,MAAM,GACV;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAgD/D"}
1
+ {"version":3,"file":"evaluator-inputs.d.ts","sourceRoot":"","sources":["../../src/bridges/evaluator-inputs.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAuCD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,SAAS,kBAAkB,EAAE,EACzC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,CAAC,EAAE,MAAM,GACV;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAgD/D"}
@@ -10,22 +10,24 @@
10
10
  *
11
11
  * @module bridges/evaluator-inputs
12
12
  */
13
+ import { splitAssignment } from '../core/assignment.js';
14
+ import { formatQuantity } from '../core/format.js';
13
15
  import { affineReadingNote, unitConventionNotes, UnitError } from '../dimensional/units.js';
14
16
  import { resolveQuantityName, synonymGroup, synonymDisagreement, temperatureQuantityRole, } from '../dimensional/formula-names.js';
15
17
  import { readNamedBinding } from '../numerical/binding-value.js';
16
18
  import { DuplicateInputError, UnknownInputError } from './evaluation-errors.js';
17
- /** 15 significant digits: the value itself is passed unrounded. */
18
- const show = (v) => Number(v.toPrecision(15));
19
+ /** 15 significant digits in the note; the value itself is passed unrounded. */
20
+ const show = formatQuantity;
19
21
  /** Disclosures that a unit symbol does not carry by itself. */
20
22
  function unitAside(given) {
21
23
  const notes = unitConventionNotes(given);
22
24
  return notes.length === 0 ? '' : ` — ${notes.join('; ')}`;
23
25
  }
24
26
  const splitArg = (a) => {
25
- const eq = a.indexOf('=');
26
- if (eq <= 0)
27
+ const split = splitAssignment(a);
28
+ if (split === null)
27
29
  throw new UnitError(`'${a}' must be key=value (e.g. d_m=1um)`);
28
- return [a.slice(0, eq), a.slice(eq + 1)];
30
+ return [split.name, split.raw];
29
31
  };
30
32
  function convert(p, raw, reading, siblings, givenName) {
31
33
  const read = readNamedBinding(givenName, raw, { reading, siblings, declaredUnit: p.unit });
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator-inputs.js","sourceRoot":"","sources":["../../src/bridges/evaluator-inputs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluator-inputs.js","sourceRoot":"","sources":["../../src/bridges/evaluator-inputs.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `key=value[unit]` arguments → an evaluator's numeric inputs, through the\n * evaluator's declared parameters.\n *\n * Every argument must name a declared input or a declared alternate: an\n * unrecognised key is refused rather than ignored, because an ignored\n * `radius_m=` beside a required `diameter_m` is exactly the silent mistake the\n * declarations exist to catch. A value may carry a unit; it is converted into\n * the declared unit only when the dimensions agree.\n *\n * @module bridges/evaluator-inputs\n */\nimport { splitAssignment } from '../core/assignment.js';\nimport { formatQuantity } from '../core/format.js';\nimport { affineReadingNote, unitConventionNotes, UnitError, type TemperatureReading } from '../dimensional/units.js';\nimport {\n resolveQuantityName,\n synonymGroup,\n synonymDisagreement,\n temperatureQuantityRole,\n} from '../dimensional/formula-names.js';\nimport { readNamedBinding, type NamedBindingSibling } from '../numerical/binding-value.js';\nimport type { EvaluatorParameter } from './evaluators.js';\nimport { DuplicateInputError, UnknownInputError } from './evaluation-errors.js';\n\n/** One input as it was given and as the evaluator receives it. @internal */\nexport interface ResolvedInput {\n readonly key: string;\n readonly value: number;\n readonly unit: string;\n readonly given: string;\n /** The alternate key it was given under, when it was. */\n readonly via?: string;\n readonly note?: string;\n}\n\n/** 15 significant digits in the note; the value itself is passed unrounded. */\nconst show = formatQuantity;\n\n/** Disclosures that a unit symbol does not carry by itself. */\nfunction unitAside(given: string): string {\n const notes = unitConventionNotes(given);\n return notes.length === 0 ? '' : ` — ${notes.join('; ')}`;\n}\n\nconst splitArg = (a: string): [string, string] => {\n const split = splitAssignment(a);\n if (split === null) throw new UnitError(`'${a}' must be key=value (e.g. d_m=1um)`);\n return [split.name, split.raw];\n};\n\nfunction convert(\n p: EvaluatorParameter,\n raw: string,\n reading: TemperatureReading,\n siblings: readonly NamedBindingSibling[],\n givenName: string,\n): { value: number; note?: string } {\n const read = readNamedBinding(givenName, raw, { reading, siblings, declaredUnit: p.unit });\n if (!read.dimensioned) return { value: read.value };\n // How an affine reading was applied comes from the unit table's own row (scale and ice point).\n const offset = read.affine === undefined ? '' : ` (${affineReadingNote(read.affine, reading)})`;\n // An angular input counts radians; a cycle-counting unit (the `cycles` flag on its row) takes 2π per cycle.\n const turns = p.angular === true ? read.cycles : 0;\n if (Number.isNaN(turns)) {\n throw new UnitError(`'${raw.trim()}' adds a cycle rate to a plain rate, so its radians per second are not defined`);\n }\n const value = turns === 0 ? read.value : read.value * (2 * Math.PI) ** turns;\n const turnsNote = turns === 0 ? '' : turns === 1 ? ' (cycles: × 2π)' : ` (cycles: × (2π)^${turns})`;\n const base = `${raw.trim()} → ${show(value)} ${p.unit || '(dimensionless)'}${offset}${turnsNote}${unitAside(raw)}`;\n return { value, note: read.temperatureNote === undefined ? base : `${base}. ${read.temperatureNote}` };\n}\n\n/**\n * Resolve `args` against `parameters`. `id` names the evaluated id in an input error.\n * @throws UnknownInputError on an unknown key.\n * @throws DuplicateInputError on an input given twice.\n * @throws UnitError on a unit that does not fit.\n * @internal\n */\nexport function resolveEvaluatorInputs(\n parameters: readonly EvaluatorParameter[],\n args: readonly string[],\n id?: string,\n): { inputs: Record<string, number>; resolved: ResolvedInput[] } {\n const inputs: Record<string, number> = {};\n const resolved: ResolvedInput[] = [];\n const known = parameters.flatMap((p) => [p.key, ...(p.alternates ?? []).map((a) => a.key)]);\n const parameterNames = new Set(parameters.map((p) => p.key));\n const siblings: NamedBindingSibling[] = args.map((arg) => {\n const [key, raw] = splitArg(arg);\n return { name: key, raw };\n });\n for (const arg of args) {\n const [key, raw] = splitArg(arg);\n const direct = parameters.find((p) => p.key === key);\n const viaAlt = parameters.find((p) => (p.alternates ?? []).some((a) => a.key === key));\n const viaName = direct === undefined && viaAlt === undefined ? resolveQuantityName(key, parameterNames) : null;\n const viaSynonym = viaName === null ? undefined : parameters.find((p) => p.key === viaName);\n const p = direct ?? viaAlt ?? viaSynonym;\n if (p === undefined) throw new UnknownInputError(id, key, known);\n const earlier = resolved.find((r) => r.key === p.key);\n const role = temperatureQuantityRole(p.quantity) === 'difference' ? 'difference' : temperatureQuantityRole(key);\n const c = convert(p, raw, role, siblings, key);\n const alt = direct === undefined && viaAlt !== undefined ? p.alternates!.find((a) => a.key === key)! : undefined;\n const value = alt === undefined ? c.value : c.value * alt.toKey;\n if (earlier !== undefined) {\n const earlierName = earlier.via ?? earlier.key;\n const group = synonymGroup(key);\n const synonymRepeat =\n group !== undefined && earlierName !== key && group.includes(earlierName) && group.includes(key);\n if (synonymRepeat && earlier.value === value) continue;\n if (synonymRepeat) {\n throw synonymDisagreement([earlierName, key], { [earlierName]: earlier.value, [key]: value })!;\n }\n throw new DuplicateInputError(id, p.key, [earlierName, key]);\n }\n inputs[p.key] = value;\n resolved.push({\n key: p.key,\n value,\n unit: p.unit,\n given: raw,\n ...(alt !== undefined || viaSynonym !== undefined ? { via: key } : {}),\n ...(alt !== undefined\n ? { note: `${key}=${raw.trim()} is ${alt.meaning}; ${p.key} = ${alt.toKey} × ${show(c.value)} = ${show(value)} ${p.unit}` }\n : c.note === undefined\n ? {}\n : { note: c.note }),\n });\n }\n return { inputs, resolved };\n}\n"]}
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * @module bridges/evaluators
11
11
  */
12
- import type { CatalogEvaluatorOutput } from './catalog-types.js';
12
+ import type { CatalogEvaluator, CatalogEvaluatorOutput } from './catalog-types.js';
13
13
  import { type EvaluationWant, type InputContract } from './input-contract.js';
14
14
  /** How a length input is read: radius, diameter, separation, impact parameter, or semi-major axis. @public */
15
15
  export type GeometryRole = 'radius' | 'diameter' | 'separation' | 'impact-parameter' | 'semi-major-axis';
@@ -33,6 +33,7 @@ export interface EvaluatorParameter {
33
33
  /** An angular frequency in rad/s. A cycle unit (Hz, rpm) given to it is multiplied by 2π. */
34
34
  readonly angular?: true;
35
35
  readonly alternates?: readonly ParameterAlternate[];
36
+ /** Derived: the parameter binds no relation source, so only an extra output reads it. */
36
37
  readonly optional?: true;
37
38
  }
38
39
  /** A callable bridge evaluator with its input contract. @public */
@@ -60,9 +61,23 @@ export interface EvaluatorSpec {
60
61
  * the value, so a caller who varies one sees no effect.
61
62
  */
62
63
  export declare function unusedInputKeys(spec: EvaluatorSpec): string[];
64
+ /**
65
+ * The spec of one catalog evaluator row. A parameter that binds no relation
66
+ * source is read only by an extra output and is optional: the output is left
67
+ * out when it is not given. An output expression reads the scope by
68
+ * parameter key, so a key that names a registered constant (be-66's
69
+ * reflectance `R`) may bind the relation's source but may not be read by an
70
+ * output: building the spec refuses it.
71
+ * @internal
72
+ */
73
+ export declare function buildEvaluatorSpec(row: CatalogEvaluator): EvaluatorSpec;
63
74
  /** Bridge id → evaluator. @internal */
64
75
  export declare const BRIDGE_EVALUATORS: ReadonlyMap<number, EvaluatorSpec>;
65
- /** What to say when an id is not in {@link BRIDGE_EVALUATORS}. @internal */
76
+ /**
77
+ * What to say when an id is not in {@link BRIDGE_EVALUATORS}: an id outside
78
+ * the catalog and a catalog row with no evaluator are two different facts.
79
+ * @internal
80
+ */
66
81
  export declare function missingEvaluatorMessage(bridgeId: number): string;
67
82
  /**
68
83
  * Evaluate a catalog id with a numeric input record: the evaluator's `run`,
@@ -1 +1 @@
1
- {"version":3,"file":"evaluators.d.ts","sourceRoot":"","sources":["../../src/bridges/evaluators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,sBAAsB,EAA8C,MAAM,oBAAoB,CAAC;AAK7G,OAAO,EAA8B,KAAK,cAAc,EAAE,KAAK,aAAa,EAAkB,MAAM,qBAAqB,CAAC;AAE1H,8GAA8G;AAC9G,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AAEzG,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAClC,yFAAyF;IACzF,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,KAAK,CAAC;IACnD,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;CAC1B;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACnD,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9F;AAoCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAc7D;AA8GD,uCAAuC;AACvC,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAKhE,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACvC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxB"}
1
+ {"version":3,"file":"evaluators.d.ts","sourceRoot":"","sources":["../../src/bridges/evaluators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAA8C,MAAM,oBAAoB,CAAC;AAK/H,OAAO,EAA8B,KAAK,cAAc,EAAE,KAAK,aAAa,EAAkB,MAAM,qBAAqB,CAAC;AAE1H,8GAA8G;AAC9G,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AAEzG,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAClC,yFAAyF;IACzF,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,KAAK,CAAC;IACnD,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;CAC1B;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACnD,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9F;AAoCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAc7D;AAsFD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAKvE;AAuDD,uCAAuC;AACvC,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAEhE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOhE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACvC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxB"}
@@ -10,13 +10,12 @@
10
10
  * @module bridges/evaluators
11
11
  */
12
12
  import { FORMULA_NAMED } from '../dimensional/formula-names.js';
13
- import { primaryRelation } from './catalog-load.js';
14
- import { catalogEvaluators } from './catalog-load.js';
15
- import { evaluateFormula, formulaVariables, parseCatalogExpression } from './expr-parse.js';
16
- import { evaluateCatalogRelation, relationHolds } from './relation-eval.js';
13
+ import { catalogEntries, catalogEntry, catalogEvaluators, primaryRelation } from './catalog-load.js';
14
+ import { evaluateFormula, formulaVariables, parseCatalogExpression, reservedFormulaNames } from './expr-parse.js';
15
+ import { evaluateCatalogRelation, relationDomain } from './relation-eval.js';
17
16
  import { DomainViolationError } from './evaluation-errors.js';
18
17
  import { checkInputs, inputContract } from './input-contract.js';
19
- function toParameter(row) {
18
+ function toParameter(row, optional) {
20
19
  return {
21
20
  key: row.key,
22
21
  quantity: row.quantity,
@@ -28,7 +27,7 @@ function toParameter(row) {
28
27
  ...(row.sign !== undefined ? { sign: row.sign } : {}),
29
28
  ...(row.angular === true ? { angular: true } : {}),
30
29
  ...(row.alternates !== undefined ? { alternates: row.alternates } : {}),
31
- ...(row.optional === true ? { optional: true } : {}),
30
+ ...(optional ? { optional: true } : {}),
32
31
  };
33
32
  }
34
33
  const NAMED_DEFAULT = new Map(FORMULA_NAMED.map((named) => [named.name, named.value]));
@@ -140,11 +139,59 @@ function bindRelationInputs(relation, parameters, inputs) {
140
139
  }
141
140
  return bound;
142
141
  }
142
+ /**
143
+ * An optional positive parameter no source owns (so the relation's condition
144
+ * cannot read it) states its own condition: `key > 0` when it is given.
145
+ */
146
+ function unsignedOptional(parameter, value) {
147
+ if (parameter.optional !== true || parameter.sign !== 'positive' || value === undefined || value > 0)
148
+ return [];
149
+ return [
150
+ {
151
+ condition: `${parameter.key} > 0`,
152
+ key: parameter.key,
153
+ value,
154
+ inputs: [{ key: parameter.key, quantity: parameter.quantity, value }],
155
+ },
156
+ ];
157
+ }
158
+ /**
159
+ * The spec of one catalog evaluator row. A parameter that binds no relation
160
+ * source is read only by an extra output and is optional: the output is left
161
+ * out when it is not given. An output expression reads the scope by
162
+ * parameter key, so a key that names a registered constant (be-66's
163
+ * reflectance `R`) may bind the relation's source but may not be read by an
164
+ * output: building the spec refuses it.
165
+ * @internal
166
+ */
167
+ export function buildEvaluatorSpec(row) {
168
+ const relation = primaryRelation(row.catalogId);
169
+ if (relation === undefined)
170
+ throw new Error(missingEvaluatorMessage(row.catalogId));
171
+ const parameters = row.parameters.map((p) => toParameter(p, sourceOfParameter(relation, p) === undefined));
172
+ return buildSpec(row.catalogId, row.name, parameters, row.outputs ?? []);
173
+ }
143
174
  function buildSpec(catalogId, name, parameters, outputs) {
144
175
  const relation = primaryRelation(catalogId);
145
176
  if (relation === undefined)
146
177
  throw new Error(missingEvaluatorMessage(catalogId));
147
178
  const contract = evaluatorContract(catalogId, relation, parameters);
179
+ const keys = parameters.map((parameter) => parameter.key);
180
+ const reserved = reservedFormulaNames();
181
+ for (const output of outputs) {
182
+ const shadowed = formulaVariables(output.expression).find((name) => reserved.has(name) && keys.includes(name));
183
+ if (shadowed !== undefined) {
184
+ throw new Error(`be-${catalogId}: output '${output.name}' reads '${shadowed}', which names a registered constant`);
185
+ }
186
+ }
187
+ // An output reads the parameter keys and `value`; a key that shadows a constant is refused above.
188
+ const outputScope = [...keys, 'value'];
189
+ // An output is computed when every parameter key it reads was given.
190
+ const reads = outputs.map((output) => formulaVariables(output.expression).filter((name) => keys.includes(name)));
191
+ const keyOfSource = new Map(parameters.flatMap((parameter) => {
192
+ const source = sourceOfParameter(relation, parameter);
193
+ return source === undefined ? [] : [[source, parameter.key]];
194
+ }));
148
195
  return {
149
196
  bridgeId: catalogId,
150
197
  name,
@@ -155,36 +202,37 @@ function buildSpec(catalogId, name, parameters, outputs) {
155
202
  run(inputs, want = 'all') {
156
203
  const given = checkInputs(contract, inputs, want);
157
204
  const bound = bindRelationInputs(relation, parameters, given);
158
- if (!relationHolds(relation, bound)) {
159
- throw new DomainViolationError(`${relation.id}: inputs violate validity domain (${relation.domain})`);
160
- }
161
- for (const parameter of parameters) {
162
- const value = given[parameter.key];
163
- if (parameter.optional === true && parameter.sign === 'positive' && value !== undefined && !(value > 0)) {
164
- throw new DomainViolationError(`${relation.id}: ${parameter.key} must be > 0`);
165
- }
166
- }
205
+ const violated = [
206
+ ...relationDomain(relation).violations(bound, (source) => keyOfSource.get(source) ?? source),
207
+ ...parameters.flatMap((parameter) => unsignedOptional(parameter, given[parameter.key])),
208
+ ];
209
+ if (violated.length > 0)
210
+ throw new DomainViolationError(relation.id, violated);
167
211
  const value = evaluateCatalogRelation(relation, bound);
168
212
  const result = { value };
169
- if (want === 'value')
170
- return result;
171
- for (const output of outputs) {
172
- if ((output.requires ?? []).some((key) => given[key] === undefined))
173
- continue;
174
- result[output.name] = evaluateFormula(output.expression, { ...given, value });
175
- }
213
+ outputs.forEach((output, i) => {
214
+ if (reads[i].some((key) => given[key] === undefined))
215
+ return;
216
+ result[output.name] = evaluateFormula(output.expression, { ...given, value }, outputScope);
217
+ });
176
218
  return result;
177
219
  },
178
220
  };
179
221
  }
180
222
  /** Bridge id → evaluator. @internal */
181
- export const BRIDGE_EVALUATORS = new Map(catalogEvaluators().map((row) => {
182
- const parameters = row.parameters.map(toParameter);
183
- return [row.catalogId, buildSpec(row.catalogId, row.name, parameters, row.outputs ?? [])];
184
- }));
185
- /** What to say when an id is not in {@link BRIDGE_EVALUATORS}. @internal */
223
+ export const BRIDGE_EVALUATORS = new Map(catalogEvaluators().map((row) => [row.catalogId, buildEvaluatorSpec(row)]));
224
+ /**
225
+ * What to say when an id is not in {@link BRIDGE_EVALUATORS}: an id outside
226
+ * the catalog and a catalog row with no evaluator are two different facts.
227
+ * @internal
228
+ */
186
229
  export function missingEvaluatorMessage(bridgeId) {
187
- return `evaluateBridge: catalog id ${bridgeId} has no evaluator`;
230
+ const entry = catalogEntry(bridgeId);
231
+ if (entry === undefined) {
232
+ const ids = catalogEntries().map((e) => e.id);
233
+ return `be-${bridgeId} is not a catalog id (the catalog holds be-${Math.min(...ids)} to be-${Math.max(...ids)})`;
234
+ }
235
+ return `be-${bridgeId} (${entry.name}) has no evaluator; \`upt atlas be-${bridgeId}\` prints its record, and \`upt evaluate\` with no id lists the evaluable ids`;
188
236
  }
189
237
  /**
190
238
  * Evaluate a catalog id with a numeric input record: the evaluator's `run`,
@@ -1 +1 @@
1
- {"version":3,"file":"evaluators.js","sourceRoot":"","sources":["../../src/bridges/evaluators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluators.js","sourceRoot":"","sources":["../../src/bridges/evaluators.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Closed-form evaluators projected from the catalog. `run` evaluates the\n * relation expression. It does not switch on a catalog id.\n *\n * `run` is the one evaluation of a catalog closed form: `evaluateRelation`,\n * the CLI and the uncertainty probes all call it. It checks the bindings\n * against the evaluator's {@link InputContract} before the validity domain,\n * so an absent input is a {@link MissingInputError}, never a domain failure.\n *\n * @module bridges/evaluators\n */\n\nimport { FORMULA_NAMED } from '../dimensional/formula-names.js';\nimport { catalogEntries, catalogEntry, catalogEvaluators, primaryRelation } from './catalog-load.js';\nimport type { CatalogEvaluator, CatalogEvaluatorOutput, CatalogEvaluatorParameter, CatalogRelation } from './catalog-types.js';\nimport { evaluateFormula, formulaVariables, parseCatalogExpression, reservedFormulaNames } from './expr-parse.js';\nimport type { ExprNode } from '../dimensional/ast-types.js';\nimport { evaluateCatalogRelation, relationDomain } from './relation-eval.js';\nimport { DomainViolationError, type DomainViolation } from './evaluation-errors.js';\nimport { checkInputs, inputContract, type EvaluationWant, type InputContract, type InputSlot } from './input-contract.js';\n\n/** How a length input is read: radius, diameter, separation, impact parameter, or semi-major axis. @public */\nexport type GeometryRole = 'radius' | 'diameter' | 'separation' | 'impact-parameter' | 'semi-major-axis';\n\n/** A second key that converts into the parameter's key. @public */\nexport interface ParameterAlternate {\n readonly key: string;\n readonly meaning: string;\n readonly toKey: number;\n}\n\n/** One named input of an evaluator. @public */\nexport interface EvaluatorParameter {\n readonly key: string;\n readonly quantity: string;\n readonly symbol: string;\n readonly unit: string;\n readonly meaning: string;\n readonly geometry?: GeometryRole;\n readonly temperature?: 'absolute';\n /** The sign this input must have; the catalog loader turns it into a validity clause. */\n readonly sign?: 'positive' | 'nonnegative' | 'any';\n /** An angular frequency in rad/s. A cycle unit (Hz, rpm) given to it is multiplied by 2π. */\n readonly angular?: true;\n readonly alternates?: readonly ParameterAlternate[];\n /** Derived: the parameter binds no relation source, so only an extra output reads it. */\n readonly optional?: true;\n}\n\n/** A callable bridge evaluator with its input contract. @public */\nexport interface EvaluatorSpec {\n readonly bridgeId: number;\n readonly name: string;\n readonly inputKeys: readonly string[];\n readonly parameters: readonly EvaluatorParameter[];\n /** Further numbers `run` returns beside `value`, keyed by `name`. */\n readonly outputs: readonly CatalogEvaluatorOutput[];\n /** Every spelling that binds an input, and which inputs are required. `run` checks it first. */\n readonly contract: InputContract;\n /**\n * Evaluate at `inputs`, keyed by parameter key, quantity, relation source,\n * alias or alternate. Throws `UnknownInputError`, `InputTypeError`,\n * `DuplicateInputError` or `MissingInputError` before any\n * `DomainViolationError`. With `want` `'value'` it returns `{ value }`\n * alone, and an input only an extra output reads is not required.\n */\n run(inputs: Readonly<Record<string, number>>, want?: EvaluationWant): Record<string, number>;\n}\n\nfunction toParameter(row: CatalogEvaluatorParameter, optional: boolean): EvaluatorParameter {\n return {\n key: row.key,\n quantity: row.quantity,\n symbol: row.symbol,\n unit: row.unit,\n meaning: row.meaning,\n ...(row.geometry !== undefined ? { geometry: row.geometry } : {}),\n ...(row.temperature !== undefined ? { temperature: row.temperature } : {}),\n ...(row.sign !== undefined ? { sign: row.sign } : {}),\n ...(row.angular === true ? { angular: true as const } : {}),\n ...(row.alternates !== undefined ? { alternates: row.alternates } : {}),\n ...(optional ? { optional: true as const } : {}),\n };\n}\n\nconst NAMED_DEFAULT = new Map(FORMULA_NAMED.map((named) => [named.name, named.value]));\n\n/** The relation source a parameter is the input for, or undefined when it owns none. */\nfunction sourceOfParameter(relation: CatalogRelation, parameter: Pick<EvaluatorParameter, 'key' | 'quantity'>): string | undefined {\n for (const source of relation.sources) {\n if (source === parameter.key || (relation.aliases[source] ?? []).includes(parameter.key)) return source;\n }\n return relation.sources.includes(parameter.quantity) ? parameter.quantity : undefined;\n}\n\n/** Every symbol name in an expression tree. */\nfunction symbolNames(node: ExprNode): string[] {\n if (node.kind === 'symbol') return [node.name];\n if (node.kind === 'op') return node.args.flatMap(symbolNames);\n if (node.kind === 'abs' || node.kind === 'transcendental') return symbolNames(node.arg);\n return [];\n}\n\n/**\n * Keys of the parameters whose source does not appear in the relation's\n * expression. They are checked against the validity domain and do not change\n * the value, so a caller who varies one sees no effect.\n */\nexport function unusedInputKeys(spec: EvaluatorSpec): string[] {\n const relation = primaryRelation(spec.bridgeId);\n if (relation === undefined) return [];\n const used = new Set(symbolNames(parseCatalogExpression(relation.expression)));\n // An output reads the scope names its parsed expression names, the same parse `run` evaluates.\n const outputReads = new Set(spec.outputs.flatMap((output) => formulaVariables(output.expression)));\n const readByOutput = (key: string): boolean => outputReads.has(key.replaceAll('-', '_'));\n return spec.parameters\n .filter((parameter) => {\n const source = sourceOfParameter(relation, parameter);\n // A parameter that owns no relation source is read only by an extra output.\n return (source === undefined || !used.has(source)) && !readByOutput(parameter.key);\n })\n .map((parameter) => parameter.key);\n}\n\n/**\n * The declared inputs of a catalog evaluator: one slot per parameter, spelled\n * by its key, its relation source and that source's aliases, and its quantity\n * when no other slot shares it; then one optional, unlisted slot per relation\n * source no parameter owns, which a named constant fills when not given.\n * Building it throws when one spelling would bind two slots.\n */\nfunction evaluatorContract(catalogId: number, relation: CatalogRelation, parameters: readonly EvaluatorParameter[]): InputContract {\n const quantityCount = new Map<string, number>();\n for (const p of parameters) quantityCount.set(p.quantity, (quantityCount.get(p.quantity) ?? 0) + 1);\n const owned = new Set<string>();\n const slots: InputSlot[] = parameters.map((p) => {\n const source = sourceOfParameter(relation, p);\n if (source !== undefined) owned.add(source);\n const spellings = [\n p.key,\n ...(source === undefined ? [] : [source, ...(relation.aliases[source] ?? [])]),\n ...(quantityCount.get(p.quantity) === 1 ? [p.quantity] : []),\n ];\n return {\n key: p.key,\n spellings: [...new Set(spellings)],\n alternates: (p.alternates ?? []).map((alt) => ({ key: alt.key, toKey: alt.toKey })),\n optional: p.optional === true,\n readBy: source === undefined ? ('outputs' as const) : ('value' as const),\n listed: true,\n };\n });\n for (const source of relation.sources) {\n if (owned.has(source)) continue;\n slots.push({\n key: source,\n spellings: [source, ...(relation.aliases[source] ?? [])],\n alternates: [],\n optional: NAMED_DEFAULT.has(source.replaceAll('-', '_')),\n readBy: 'value',\n listed: false,\n });\n }\n return inputContract(`be-${catalogId}`, slots);\n}\n\n/**\n * Checked inputs (keyed by slot key) onto catalog source names. A source no\n * parameter owns takes its given value, else its named constant.\n */\nfunction bindRelationInputs(\n relation: CatalogRelation,\n parameters: readonly EvaluatorParameter[],\n inputs: Readonly<Record<string, number>>,\n): Record<string, number> {\n const bound: Record<string, number> = {};\n const owned = new Set<string>();\n for (const parameter of parameters) {\n const source = sourceOfParameter(relation, parameter);\n if (source === undefined) continue;\n owned.add(source);\n const value = inputs[parameter.key];\n if (value !== undefined) bound[source] = value;\n }\n for (const source of relation.sources) {\n if (owned.has(source)) continue;\n const value = inputs[source] ?? NAMED_DEFAULT.get(source.replaceAll('-', '_'));\n if (value !== undefined) bound[source] = value;\n }\n return bound;\n}\n\n/**\n * An optional positive parameter no source owns (so the relation's condition\n * cannot read it) states its own condition: `key > 0` when it is given.\n */\nfunction unsignedOptional(parameter: EvaluatorParameter, value: number | undefined): DomainViolation[] {\n if (parameter.optional !== true || parameter.sign !== 'positive' || value === undefined || value > 0) return [];\n return [\n {\n condition: `${parameter.key} > 0`,\n key: parameter.key,\n value,\n inputs: [{ key: parameter.key, quantity: parameter.quantity, value }],\n },\n ];\n}\n\n/**\n * The spec of one catalog evaluator row. A parameter that binds no relation\n * source is read only by an extra output and is optional: the output is left\n * out when it is not given. An output expression reads the scope by\n * parameter key, so a key that names a registered constant (be-66's\n * reflectance `R`) may bind the relation's source but may not be read by an\n * output: building the spec refuses it.\n * @internal\n */\nexport function buildEvaluatorSpec(row: CatalogEvaluator): EvaluatorSpec {\n const relation = primaryRelation(row.catalogId);\n if (relation === undefined) throw new Error(missingEvaluatorMessage(row.catalogId));\n const parameters = row.parameters.map((p) => toParameter(p, sourceOfParameter(relation, p) === undefined));\n return buildSpec(row.catalogId, row.name, parameters, row.outputs ?? []);\n}\n\nfunction buildSpec(\n catalogId: number,\n name: string,\n parameters: readonly EvaluatorParameter[],\n outputs: readonly CatalogEvaluatorOutput[],\n): EvaluatorSpec {\n const relation = primaryRelation(catalogId);\n if (relation === undefined) throw new Error(missingEvaluatorMessage(catalogId));\n const contract = evaluatorContract(catalogId, relation, parameters);\n const keys = parameters.map((parameter) => parameter.key);\n const reserved = reservedFormulaNames();\n for (const output of outputs) {\n const shadowed = formulaVariables(output.expression).find((name) => reserved.has(name) && keys.includes(name));\n if (shadowed !== undefined) {\n throw new Error(`be-${catalogId}: output '${output.name}' reads '${shadowed}', which names a registered constant`);\n }\n }\n // An output reads the parameter keys and `value`; a key that shadows a constant is refused above.\n const outputScope = [...keys, 'value'];\n // An output is computed when every parameter key it reads was given.\n const reads = outputs.map((output) => formulaVariables(output.expression).filter((name) => keys.includes(name)));\n const keyOfSource = new Map(\n parameters.flatMap((parameter) => {\n const source = sourceOfParameter(relation, parameter);\n return source === undefined ? [] : [[source, parameter.key] as const];\n }),\n );\n return {\n bridgeId: catalogId,\n name,\n inputKeys: parameters.filter((parameter) => parameter.optional !== true).map((parameter) => parameter.key),\n parameters,\n outputs,\n contract,\n run(inputs, want = 'all') {\n const given = checkInputs(contract, inputs, want);\n const bound = bindRelationInputs(relation, parameters, given);\n const violated = [\n ...relationDomain(relation).violations(bound, (source) => keyOfSource.get(source) ?? source),\n ...parameters.flatMap((parameter) => unsignedOptional(parameter, given[parameter.key])),\n ];\n if (violated.length > 0) throw new DomainViolationError(relation.id, violated);\n const value = evaluateCatalogRelation(relation, bound);\n const result: Record<string, number> = { value };\n outputs.forEach((output, i) => {\n if (reads[i]!.some((key) => given[key] === undefined)) return;\n result[output.name] = evaluateFormula(output.expression, { ...given, value }, outputScope);\n });\n return result;\n },\n };\n}\n\n/** Bridge id → evaluator. @internal */\nexport const BRIDGE_EVALUATORS: ReadonlyMap<number, EvaluatorSpec> = new Map(\n catalogEvaluators().map((row) => [row.catalogId, buildEvaluatorSpec(row)] as const),\n);\n\n/**\n * What to say when an id is not in {@link BRIDGE_EVALUATORS}: an id outside\n * the catalog and a catalog row with no evaluator are two different facts.\n * @internal\n */\nexport function missingEvaluatorMessage(bridgeId: number): string {\n const entry = catalogEntry(bridgeId);\n if (entry === undefined) {\n const ids = catalogEntries().map((e) => e.id);\n return `be-${bridgeId} is not a catalog id (the catalog holds be-${Math.min(...ids)} to be-${Math.max(...ids)})`;\n }\n return `be-${bridgeId} (${entry.name}) has no evaluator; \\`upt atlas be-${bridgeId}\\` prints its record, and \\`upt evaluate\\` with no id lists the evaluable ids`;\n}\n\n/**\n * Evaluate a catalog id with a numeric input record: the evaluator's `run`,\n * which checks the inputs first. Throws on an unknown id.\n *\n * @internal\n */\nexport function evaluateBridge(\n bridgeId: number,\n inputs: Readonly<Record<string, number>>,\n): Record<string, number> {\n const spec = BRIDGE_EVALUATORS.get(bridgeId);\n if (spec === undefined) throw new Error(missingEvaluatorMessage(bridgeId));\n return spec.run(inputs);\n}\n"]}