universal-physics-tensor 8.0.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (916) hide show
  1. package/README.md +26 -21
  2. package/data/atlas/atlas.json +75 -64
  3. package/data/atlas/atlas.jsonld +1 -1
  4. package/data/atlas/diffusion.json +23 -22
  5. package/data/atlas/oscillators.json +21 -16
  6. package/data/atlas/waves.json +33 -28
  7. package/data/bridge-catalog.json +1356 -1791
  8. package/data/bridge-catalog.schema.json +789 -46
  9. package/data/quantities.json +280 -234
  10. package/data/quantities.schema.json +52 -0
  11. package/data/schemas/atlas-record.v0.json +184 -46
  12. package/data/units.json +1178 -0
  13. package/data/units.schema.json +124 -0
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +14 -3
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/association.d.ts +1 -1
  18. package/dist/atlas/association.js.map +1 -1
  19. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
  20. package/dist/atlas/benchmark/backend-shapes.js +5 -1
  21. package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
  22. package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
  23. package/dist/atlas/benchmark/baselines.js +8 -0
  24. package/dist/atlas/benchmark/baselines.js.map +1 -1
  25. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +3 -2
  26. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  27. package/dist/atlas/benchmark/hybrid-retrieval.js +16 -12
  28. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  29. package/dist/atlas/benchmark/leakage.js.map +1 -1
  30. package/dist/atlas/benchmark/loader.js.map +1 -1
  31. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
  32. package/dist/atlas/benchmark/run-atlas.js +14 -2
  33. package/dist/atlas/benchmark/run-atlas.js.map +1 -1
  34. package/dist/atlas/benchmark/stats.d.ts +1 -1
  35. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  36. package/dist/atlas/benchmark/stats.js +1 -1
  37. package/dist/atlas/benchmark/stats.js.map +1 -1
  38. package/dist/atlas/benchmark/study.js.map +1 -1
  39. package/dist/atlas/benchmark/types.js.map +1 -1
  40. package/dist/atlas/bridge-record.d.ts +4 -4
  41. package/dist/atlas/bridge-record.d.ts.map +1 -1
  42. package/dist/atlas/bridge-record.js +6 -6
  43. package/dist/atlas/bridge-record.js.map +1 -1
  44. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  45. package/dist/atlas/chain-pipeline.d.ts +0 -11
  46. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  47. package/dist/atlas/chain-pipeline.js +5 -16
  48. package/dist/atlas/chain-pipeline.js.map +1 -1
  49. package/dist/atlas/composition-table.js.map +1 -1
  50. package/dist/atlas/conventions.js.map +1 -1
  51. package/dist/atlas/coverage.d.ts +2 -2
  52. package/dist/atlas/coverage.js.map +1 -1
  53. package/dist/atlas/derivation.js.map +1 -1
  54. package/dist/atlas/derive-evidence.d.ts +6 -4
  55. package/dist/atlas/derive-evidence.d.ts.map +1 -1
  56. package/dist/atlas/derive-evidence.js +7 -2
  57. package/dist/atlas/derive-evidence.js.map +1 -1
  58. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  59. package/dist/atlas/diffusion/bridges-closure.js +0 -5
  60. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  61. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  62. package/dist/atlas/diffusion/bridges.js +0 -3
  63. package/dist/atlas/diffusion/bridges.js.map +1 -1
  64. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  65. package/dist/atlas/diffusion/index.d.ts +1 -1
  66. package/dist/atlas/diffusion/index.d.ts.map +1 -1
  67. package/dist/atlas/diffusion/index.js.map +1 -1
  68. package/dist/atlas/diffusion/models.js.map +1 -1
  69. package/dist/atlas/diffusion/numerics.js.map +1 -1
  70. package/dist/atlas/error-algebra.d.ts +6 -0
  71. package/dist/atlas/error-algebra.d.ts.map +1 -1
  72. package/dist/atlas/error-algebra.js +26 -0
  73. package/dist/atlas/error-algebra.js.map +1 -1
  74. package/dist/atlas/export.d.ts +18 -2
  75. package/dist/atlas/export.d.ts.map +1 -1
  76. package/dist/atlas/export.js +9 -3
  77. package/dist/atlas/export.js.map +1 -1
  78. package/dist/atlas/families.d.ts +19 -2
  79. package/dist/atlas/families.d.ts.map +1 -1
  80. package/dist/atlas/families.js +26 -3
  81. package/dist/atlas/families.js.map +1 -1
  82. package/dist/atlas/family.d.ts +27 -0
  83. package/dist/atlas/family.d.ts.map +1 -0
  84. package/dist/atlas/family.js +12 -0
  85. package/dist/atlas/family.js.map +1 -0
  86. package/dist/atlas/index.d.ts +3 -2
  87. package/dist/atlas/index.d.ts.map +1 -1
  88. package/dist/atlas/index.js +2 -1
  89. package/dist/atlas/index.js.map +1 -1
  90. package/dist/atlas/link-prediction.d.ts +1 -1
  91. package/dist/atlas/link-prediction.d.ts.map +1 -1
  92. package/dist/atlas/link-prediction.js.map +1 -1
  93. package/dist/atlas/model.js.map +1 -1
  94. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  95. package/dist/atlas/oscillators/bridges-coarse.js +0 -1
  96. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  97. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  98. package/dist/atlas/oscillators/bridges-exact.js +0 -3
  99. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  100. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  101. package/dist/atlas/oscillators/bridges-limits.js +0 -2
  102. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  103. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  104. package/dist/atlas/oscillators/index.d.ts +1 -16
  105. package/dist/atlas/oscillators/index.d.ts.map +1 -1
  106. package/dist/atlas/oscillators/index.js.map +1 -1
  107. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  108. package/dist/atlas/oscillators/models.js.map +1 -1
  109. package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
  110. package/dist/atlas/oscillators/norm-transport.js.map +1 -1
  111. package/dist/atlas/oscillators/norms.js.map +1 -1
  112. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  113. package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
  114. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  115. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  116. package/dist/atlas/oscillators/rejections.js.map +1 -1
  117. package/dist/atlas/path-bound.js.map +1 -1
  118. package/dist/atlas/physjs-entries.generated.d.ts +1601 -220
  119. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  120. package/dist/atlas/physjs-entries.generated.js +1854 -345
  121. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  122. package/dist/atlas/physjs-ref.d.ts +151 -117
  123. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  124. package/dist/atlas/physjs-ref.js +244 -211
  125. package/dist/atlas/physjs-ref.js.map +1 -1
  126. package/dist/atlas/physjs-reviewed.d.ts +31 -0
  127. package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
  128. package/dist/atlas/physjs-reviewed.js +194 -0
  129. package/dist/atlas/physjs-reviewed.js.map +1 -0
  130. package/dist/atlas/poster/associations.js.map +1 -1
  131. package/dist/atlas/poster/derivations.js.map +1 -1
  132. package/dist/atlas/poster/statements.js.map +1 -1
  133. package/dist/atlas/proof-target.d.ts +16 -8
  134. package/dist/atlas/proof-target.d.ts.map +1 -1
  135. package/dist/atlas/proof-target.js +34 -31
  136. package/dist/atlas/proof-target.js.map +1 -1
  137. package/dist/atlas/public.d.ts +2 -1
  138. package/dist/atlas/public.d.ts.map +1 -1
  139. package/dist/atlas/public.js +2 -1
  140. package/dist/atlas/public.js.map +1 -1
  141. package/dist/atlas/regime.js.map +1 -1
  142. package/dist/atlas/serialize.d.ts +18 -12
  143. package/dist/atlas/serialize.d.ts.map +1 -1
  144. package/dist/atlas/serialize.js +28 -18
  145. package/dist/atlas/serialize.js.map +1 -1
  146. package/dist/atlas/statement.js.map +1 -1
  147. package/dist/atlas/translation-registry.js.map +1 -1
  148. package/dist/atlas/translation.js.map +1 -1
  149. package/dist/atlas/types.d.ts +9 -2
  150. package/dist/atlas/types.d.ts.map +1 -1
  151. package/dist/atlas/types.js +1 -1
  152. package/dist/atlas/types.js.map +1 -1
  153. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  154. package/dist/atlas/waves/bridges-closure.js +0 -3
  155. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  156. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  157. package/dist/atlas/waves/bridges.js +0 -4
  158. package/dist/atlas/waves/bridges.js.map +1 -1
  159. package/dist/atlas/waves/index.d.ts +1 -1
  160. package/dist/atlas/waves/index.d.ts.map +1 -1
  161. package/dist/atlas/waves/index.js.map +1 -1
  162. package/dist/atlas/waves/models.js.map +1 -1
  163. package/dist/atlas/waves/numerics.js.map +1 -1
  164. package/dist/atlas/witness-artifact.js.map +1 -1
  165. package/dist/atlas/witness-dominance.d.ts +4 -3
  166. package/dist/atlas/witness-dominance.d.ts.map +1 -1
  167. package/dist/atlas/witness-dominance.js +15 -5
  168. package/dist/atlas/witness-dominance.js.map +1 -1
  169. package/dist/atlas/witness-numeric.d.ts +8 -4
  170. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  171. package/dist/atlas/witness-numeric.js +27 -2
  172. package/dist/atlas/witness-numeric.js.map +1 -1
  173. package/dist/atlas/witness-result.d.ts +7 -1
  174. package/dist/atlas/witness-result.d.ts.map +1 -1
  175. package/dist/atlas/witness-result.js.map +1 -1
  176. package/dist/atlas/witness-specs.js.map +1 -1
  177. package/dist/atlas/witness-symbolic.js.map +1 -1
  178. package/dist/atlas/witnesses/quantum-support.js.map +1 -1
  179. package/dist/bridges/caller-table.d.ts +1 -1
  180. package/dist/bridges/caller-table.d.ts.map +1 -1
  181. package/dist/bridges/caller-table.js.map +1 -1
  182. package/dist/bridges/carrier-sign.d.ts.map +1 -1
  183. package/dist/bridges/carrier-sign.js +8 -3
  184. package/dist/bridges/carrier-sign.js.map +1 -1
  185. package/dist/bridges/catalog-adapter.d.ts +12 -3
  186. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  187. package/dist/bridges/catalog-adapter.js +22 -14
  188. package/dist/bridges/catalog-adapter.js.map +1 -1
  189. package/dist/bridges/catalog-load.d.ts +19 -2
  190. package/dist/bridges/catalog-load.d.ts.map +1 -1
  191. package/dist/bridges/catalog-load.js +233 -14
  192. package/dist/bridges/catalog-load.js.map +1 -1
  193. package/dist/bridges/catalog-types.d.ts +96 -27
  194. package/dist/bridges/catalog-types.d.ts.map +1 -1
  195. package/dist/bridges/catalog-types.js.map +1 -1
  196. package/dist/bridges/coefficient-statement.js +1 -5
  197. package/dist/bridges/coefficient-statement.js.map +1 -1
  198. package/dist/bridges/confrontation-coverage.js.map +1 -1
  199. package/dist/bridges/confrontations.d.ts +1 -1
  200. package/dist/bridges/confrontations.d.ts.map +1 -1
  201. package/dist/bridges/confrontations.js +1 -1
  202. package/dist/bridges/confrontations.js.map +1 -1
  203. package/dist/bridges/evaluation-errors.d.ts +89 -0
  204. package/dist/bridges/evaluation-errors.d.ts.map +1 -0
  205. package/dist/bridges/evaluation-errors.js +136 -0
  206. package/dist/bridges/evaluation-errors.js.map +1 -0
  207. package/dist/bridges/evaluator-inputs.d.ts +5 -3
  208. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  209. package/dist/bridges/evaluator-inputs.js +24 -24
  210. package/dist/bridges/evaluator-inputs.js.map +1 -1
  211. package/dist/bridges/evaluators.d.ts +48 -8
  212. package/dist/bridges/evaluators.d.ts.map +1 -1
  213. package/dist/bridges/evaluators.js +173 -38
  214. package/dist/bridges/evaluators.js.map +1 -1
  215. package/dist/bridges/expr-parse.d.ts +38 -7
  216. package/dist/bridges/expr-parse.d.ts.map +1 -1
  217. package/dist/bridges/expr-parse.js +129 -156
  218. package/dist/bridges/expr-parse.js.map +1 -1
  219. package/dist/bridges/holds.d.ts +16 -8
  220. package/dist/bridges/holds.d.ts.map +1 -1
  221. package/dist/bridges/holds.js +130 -236
  222. package/dist/bridges/holds.js.map +1 -1
  223. package/dist/bridges/index.d.ts +15 -14
  224. package/dist/bridges/index.d.ts.map +1 -1
  225. package/dist/bridges/index.js +14 -15
  226. package/dist/bridges/index.js.map +1 -1
  227. package/dist/bridges/input-contract.d.ts +65 -0
  228. package/dist/bridges/input-contract.d.ts.map +1 -0
  229. package/dist/bridges/input-contract.js +97 -0
  230. package/dist/bridges/input-contract.js.map +1 -0
  231. package/dist/bridges/membership.d.ts +5 -3
  232. package/dist/bridges/membership.d.ts.map +1 -1
  233. package/dist/bridges/membership.js +5 -6
  234. package/dist/bridges/membership.js.map +1 -1
  235. package/dist/bridges/notices.d.ts +11 -0
  236. package/dist/bridges/notices.d.ts.map +1 -0
  237. package/dist/bridges/notices.js +22 -0
  238. package/dist/bridges/notices.js.map +1 -0
  239. package/dist/bridges/observations/types.js.map +1 -1
  240. package/dist/bridges/rejected.d.ts +11 -17
  241. package/dist/bridges/rejected.d.ts.map +1 -1
  242. package/dist/bridges/rejected.js +13 -68
  243. package/dist/bridges/rejected.js.map +1 -1
  244. package/dist/bridges/relation-eval.d.ts +5 -6
  245. package/dist/bridges/relation-eval.d.ts.map +1 -1
  246. package/dist/bridges/relation-eval.js +9 -38
  247. package/dist/bridges/relation-eval.js.map +1 -1
  248. package/dist/bridges/rhs-registry.js.map +1 -1
  249. package/dist/bridges/sensitivity.d.ts +11 -3
  250. package/dist/bridges/sensitivity.d.ts.map +1 -1
  251. package/dist/bridges/sensitivity.js +24 -10
  252. package/dist/bridges/sensitivity.js.map +1 -1
  253. package/dist/bridges/tensor-index.js.map +1 -1
  254. package/dist/bridges/types.d.ts +1 -7
  255. package/dist/bridges/types.d.ts.map +1 -1
  256. package/dist/bridges/types.js +1 -4
  257. package/dist/bridges/types.js.map +1 -1
  258. package/dist/canonical/canonical-equation.d.ts +31 -0
  259. package/dist/canonical/canonical-equation.d.ts.map +1 -1
  260. package/dist/canonical/canonical-equation.js.map +1 -1
  261. package/dist/canonical/dimensional-fields.js.map +1 -1
  262. package/dist/canonical/entries/_l1-build.js.map +1 -1
  263. package/dist/canonical/entries/atomic.d.ts.map +1 -1
  264. package/dist/canonical/entries/atomic.js +11 -1
  265. package/dist/canonical/entries/atomic.js.map +1 -1
  266. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  267. package/dist/canonical/entries/condensed-matter.js +7 -4
  268. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  269. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  270. package/dist/canonical/entries/dimensional-classics.js +50 -2
  271. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  272. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  273. package/dist/canonical/entries/electromagnetism.js +32 -2
  274. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  275. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  276. package/dist/canonical/entries/fluids-waves.js +34 -0
  277. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  278. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  279. package/dist/canonical/entries/mechanics.js +24 -0
  280. package/dist/canonical/entries/mechanics.js.map +1 -1
  281. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  282. package/dist/canonical/entries/nonmonomial.js +42 -24
  283. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  284. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  285. package/dist/canonical/entries/relativity.js +6 -0
  286. package/dist/canonical/entries/relativity.js.map +1 -1
  287. package/dist/canonical/entries/statistical-mechanics.d.ts.map +1 -1
  288. package/dist/canonical/entries/statistical-mechanics.js +24 -5
  289. package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
  290. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  291. package/dist/canonical/entries/thermo-nuclear-cosmo.js +15 -0
  292. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  293. package/dist/canonical/linkage.d.ts +29 -4
  294. package/dist/canonical/linkage.d.ts.map +1 -1
  295. package/dist/canonical/linkage.js +31 -29
  296. package/dist/canonical/linkage.js.map +1 -1
  297. package/dist/canonical/normal-form.d.ts +0 -8
  298. package/dist/canonical/normal-form.d.ts.map +1 -1
  299. package/dist/canonical/normal-form.js +17 -12
  300. package/dist/canonical/normal-form.js.map +1 -1
  301. package/dist/canonical/registry.js.map +1 -1
  302. package/dist/canonical/residual.js.map +1 -1
  303. package/dist/canonical/seed-l-layer.d.ts +7 -1
  304. package/dist/canonical/seed-l-layer.d.ts.map +1 -1
  305. package/dist/canonical/seed-l-layer.js +7 -1
  306. package/dist/canonical/seed-l-layer.js.map +1 -1
  307. package/dist/canonical/structural.d.ts +21 -0
  308. package/dist/canonical/structural.d.ts.map +1 -1
  309. package/dist/canonical/structural.js +24 -4
  310. package/dist/canonical/structural.js.map +1 -1
  311. package/dist/cases/brownian-sphere.js +4 -4
  312. package/dist/cases/brownian-sphere.js.map +1 -1
  313. package/dist/cases/damped-resonator.js +2 -2
  314. package/dist/cases/damped-resonator.js.map +1 -1
  315. package/dist/cases/index.d.ts +9 -2
  316. package/dist/cases/index.d.ts.map +1 -1
  317. package/dist/cases/index.js +26 -7
  318. package/dist/cases/index.js.map +1 -1
  319. package/dist/cases/kepler-rv.js +6 -6
  320. package/dist/cases/kepler-rv.js.map +1 -1
  321. package/dist/cases/lumped-cooling.js +1 -1
  322. package/dist/cases/lumped-cooling.js.map +1 -1
  323. package/dist/cases/quadrature.js.map +1 -1
  324. package/dist/cases/resistor-noise.js +3 -3
  325. package/dist/cases/resistor-noise.js.map +1 -1
  326. package/dist/cases/skin-depth.js.map +1 -1
  327. package/dist/cases/types.js.map +1 -1
  328. package/dist/cli/args.d.ts +7 -2
  329. package/dist/cli/args.d.ts.map +1 -1
  330. package/dist/cli/args.js +18 -2
  331. package/dist/cli/args.js.map +1 -1
  332. package/dist/cli/bindings.d.ts +13 -0
  333. package/dist/cli/bindings.d.ts.map +1 -0
  334. package/dist/cli/bindings.js +32 -0
  335. package/dist/cli/bindings.js.map +1 -0
  336. package/dist/cli/closed-form-range.js.map +1 -1
  337. package/dist/cli/command.js.map +1 -1
  338. package/dist/cli/commands/_atlas-map.d.ts +3 -3
  339. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  340. package/dist/cli/commands/_atlas-map.js +43 -18
  341. package/dist/cli/commands/_atlas-map.js.map +1 -1
  342. package/dist/cli/commands/_atlas-route.js.map +1 -1
  343. package/dist/cli/commands/_discovery-opts.d.ts +2 -1
  344. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  345. package/dist/cli/commands/_discovery-opts.js +48 -18
  346. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  347. package/dist/cli/commands/atlas.d.ts.map +1 -1
  348. package/dist/cli/commands/atlas.js +7 -12
  349. package/dist/cli/commands/atlas.js.map +1 -1
  350. package/dist/cli/commands/audit.d.ts.map +1 -1
  351. package/dist/cli/commands/audit.js +13 -21
  352. package/dist/cli/commands/audit.js.map +1 -1
  353. package/dist/cli/commands/axes.js.map +1 -1
  354. package/dist/cli/commands/candidates.d.ts.map +1 -1
  355. package/dist/cli/commands/candidates.js +16 -8
  356. package/dist/cli/commands/candidates.js.map +1 -1
  357. package/dist/cli/commands/canonical.js.map +1 -1
  358. package/dist/cli/commands/chain.js +1 -1
  359. package/dist/cli/commands/chain.js.map +1 -1
  360. package/dist/cli/commands/confront.d.ts.map +1 -1
  361. package/dist/cli/commands/confront.js +22 -14
  362. package/dist/cli/commands/confront.js.map +1 -1
  363. package/dist/cli/commands/connectors.d.ts.map +1 -1
  364. package/dist/cli/commands/connectors.js +8 -9
  365. package/dist/cli/commands/connectors.js.map +1 -1
  366. package/dist/cli/commands/coverage.js.map +1 -1
  367. package/dist/cli/commands/derive.d.ts.map +1 -1
  368. package/dist/cli/commands/derive.js +50 -26
  369. package/dist/cli/commands/derive.js.map +1 -1
  370. package/dist/cli/commands/discover.d.ts.map +1 -1
  371. package/dist/cli/commands/discover.js +18 -13
  372. package/dist/cli/commands/discover.js.map +1 -1
  373. package/dist/cli/commands/eval.d.ts.map +1 -1
  374. package/dist/cli/commands/eval.js +29 -26
  375. package/dist/cli/commands/eval.js.map +1 -1
  376. package/dist/cli/commands/evaluate.d.ts +1 -35
  377. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  378. package/dist/cli/commands/evaluate.js +99 -208
  379. package/dist/cli/commands/evaluate.js.map +1 -1
  380. package/dist/cli/commands/explain.d.ts.map +1 -1
  381. package/dist/cli/commands/explain.js +57 -45
  382. package/dist/cli/commands/explain.js.map +1 -1
  383. package/dist/cli/commands/frontier.js.map +1 -1
  384. package/dist/cli/commands/ground.d.ts.map +1 -1
  385. package/dist/cli/commands/ground.js +41 -11
  386. package/dist/cli/commands/ground.js.map +1 -1
  387. package/dist/cli/commands/index.js.map +1 -1
  388. package/dist/cli/commands/map.d.ts.map +1 -1
  389. package/dist/cli/commands/map.js +84 -92
  390. package/dist/cli/commands/map.js.map +1 -1
  391. package/dist/cli/commands/metric.d.ts.map +1 -1
  392. package/dist/cli/commands/metric.js +53 -15
  393. package/dist/cli/commands/metric.js.map +1 -1
  394. package/dist/cli/commands/path.js +4 -4
  395. package/dist/cli/commands/path.js.map +1 -1
  396. package/dist/cli/commands/predict.js.map +1 -1
  397. package/dist/cli/commands/priority.js.map +1 -1
  398. package/dist/cli/commands/probe.d.ts.map +1 -1
  399. package/dist/cli/commands/probe.js +50 -26
  400. package/dist/cli/commands/probe.js.map +1 -1
  401. package/dist/cli/commands/recover.js +1 -1
  402. package/dist/cli/commands/recover.js.map +1 -1
  403. package/dist/cli/commands/regime.d.ts +5 -4
  404. package/dist/cli/commands/regime.d.ts.map +1 -1
  405. package/dist/cli/commands/regime.js +25 -27
  406. package/dist/cli/commands/regime.js.map +1 -1
  407. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  408. package/dist/cli/commands/retrieve.js +22 -14
  409. package/dist/cli/commands/retrieve.js.map +1 -1
  410. package/dist/cli/commands/search.d.ts.map +1 -1
  411. package/dist/cli/commands/search.js +8 -4
  412. package/dist/cli/commands/search.js.map +1 -1
  413. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  414. package/dist/cli/commands/symbolic.js +14 -7
  415. package/dist/cli/commands/symbolic.js.map +1 -1
  416. package/dist/cli/commands/testplan.js +4 -4
  417. package/dist/cli/commands/testplan.js.map +1 -1
  418. package/dist/cli/conventions.d.ts +6 -7
  419. package/dist/cli/conventions.d.ts.map +1 -1
  420. package/dist/cli/conventions.js +19 -28
  421. package/dist/cli/conventions.js.map +1 -1
  422. package/dist/cli/determination.js.map +1 -1
  423. package/dist/cli/errors.js.map +1 -1
  424. package/dist/cli/euler-guard.d.ts +13 -2
  425. package/dist/cli/euler-guard.d.ts.map +1 -1
  426. package/dist/cli/euler-guard.js +17 -3
  427. package/dist/cli/euler-guard.js.map +1 -1
  428. package/dist/cli/eval-numbers.d.ts +4 -9
  429. package/dist/cli/eval-numbers.d.ts.map +1 -1
  430. package/dist/cli/eval-numbers.js +11 -41
  431. package/dist/cli/eval-numbers.js.map +1 -1
  432. package/dist/cli/expr-print.d.ts +29 -2
  433. package/dist/cli/expr-print.d.ts.map +1 -1
  434. package/dist/cli/expr-print.js +46 -2
  435. package/dist/cli/expr-print.js.map +1 -1
  436. package/dist/cli/flag-help.js.map +1 -1
  437. package/dist/cli/graphs.js.map +1 -1
  438. package/dist/cli/library-defaults.d.ts +19 -0
  439. package/dist/cli/library-defaults.d.ts.map +1 -0
  440. package/dist/cli/library-defaults.js +22 -0
  441. package/dist/cli/library-defaults.js.map +1 -0
  442. package/dist/cli/main.js +7 -3
  443. package/dist/cli/main.js.map +1 -1
  444. package/dist/cli/map-evidence.js.map +1 -1
  445. package/dist/cli/output.d.ts +3 -6
  446. package/dist/cli/output.d.ts.map +1 -1
  447. package/dist/cli/output.js.map +1 -1
  448. package/dist/cli/published-url.d.ts +2 -0
  449. package/dist/cli/published-url.d.ts.map +1 -1
  450. package/dist/cli/published-url.js +5 -0
  451. package/dist/cli/published-url.js.map +1 -1
  452. package/dist/cli/record-reach.d.ts +6 -0
  453. package/dist/cli/record-reach.d.ts.map +1 -1
  454. package/dist/cli/record-reach.js +16 -10
  455. package/dist/cli/record-reach.js.map +1 -1
  456. package/dist/cli/record-tables.d.ts +2 -1
  457. package/dist/cli/record-tables.d.ts.map +1 -1
  458. package/dist/cli/record-tables.js +8 -3
  459. package/dist/cli/record-tables.js.map +1 -1
  460. package/dist/cli/record.d.ts.map +1 -1
  461. package/dist/cli/record.js +31 -12
  462. package/dist/cli/record.js.map +1 -1
  463. package/dist/cli/search-index.d.ts +5 -0
  464. package/dist/cli/search-index.d.ts.map +1 -1
  465. package/dist/cli/search-index.js +12 -1
  466. package/dist/cli/search-index.js.map +1 -1
  467. package/dist/cli/statuses.js.map +1 -1
  468. package/dist/cli/top-level-help.js.map +1 -1
  469. package/dist/cli/version.js.map +1 -1
  470. package/dist/cli-api.d.ts +57 -18
  471. package/dist/cli-api.d.ts.map +1 -1
  472. package/dist/cli-api.js +49 -21
  473. package/dist/cli-api.js.map +1 -1
  474. package/dist/composition/adjudication.d.ts +8 -30
  475. package/dist/composition/adjudication.d.ts.map +1 -1
  476. package/dist/composition/adjudication.js +15 -67
  477. package/dist/composition/adjudication.js.map +1 -1
  478. package/dist/composition/aliases.d.ts +1 -1
  479. package/dist/composition/aliases.d.ts.map +1 -1
  480. package/dist/composition/aliases.js +10 -20
  481. package/dist/composition/aliases.js.map +1 -1
  482. package/dist/composition/audit-coverage.d.ts +2 -0
  483. package/dist/composition/audit-coverage.d.ts.map +1 -1
  484. package/dist/composition/audit-coverage.js.map +1 -1
  485. package/dist/composition/axes.d.ts +12 -0
  486. package/dist/composition/axes.d.ts.map +1 -1
  487. package/dist/composition/axes.js +18 -6
  488. package/dist/composition/axes.js.map +1 -1
  489. package/dist/composition/axis-audit.js.map +1 -1
  490. package/dist/composition/bridge-analysis.d.ts +0 -14
  491. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  492. package/dist/composition/bridge-analysis.js +66 -57
  493. package/dist/composition/bridge-analysis.js.map +1 -1
  494. package/dist/composition/bridge-prediction.d.ts +5 -1
  495. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  496. package/dist/composition/bridge-prediction.js +12 -16
  497. package/dist/composition/bridge-prediction.js.map +1 -1
  498. package/dist/composition/buckingham-filter.js.map +1 -1
  499. package/dist/composition/canonical-compare.d.ts.map +1 -1
  500. package/dist/composition/canonical-compare.js +12 -2
  501. package/dist/composition/canonical-compare.js.map +1 -1
  502. package/dist/composition/canonical-graph.d.ts +15 -18
  503. package/dist/composition/canonical-graph.d.ts.map +1 -1
  504. package/dist/composition/canonical-graph.js +59 -85
  505. package/dist/composition/canonical-graph.js.map +1 -1
  506. package/dist/composition/canonical-json.js.map +1 -1
  507. package/dist/composition/canonical-prefactors.d.ts +10 -29
  508. package/dist/composition/canonical-prefactors.d.ts.map +1 -1
  509. package/dist/composition/canonical-prefactors.js +15 -202
  510. package/dist/composition/canonical-prefactors.js.map +1 -1
  511. package/dist/composition/catalog-graph.d.ts.map +1 -1
  512. package/dist/composition/catalog-graph.js +6 -20
  513. package/dist/composition/catalog-graph.js.map +1 -1
  514. package/dist/composition/chain-candidate.d.ts +2 -0
  515. package/dist/composition/chain-candidate.d.ts.map +1 -1
  516. package/dist/composition/chain-candidate.js +2 -0
  517. package/dist/composition/chain-candidate.js.map +1 -1
  518. package/dist/composition/chain-match.js.map +1 -1
  519. package/dist/composition/chain-regime.js.map +1 -1
  520. package/dist/composition/chain-result.js.map +1 -1
  521. package/dist/composition/compose-surface.js.map +1 -1
  522. package/dist/composition/compose-symbolic.js.map +1 -1
  523. package/dist/composition/compose.d.ts.map +1 -1
  524. package/dist/composition/compose.js +154 -36
  525. package/dist/composition/compose.js.map +1 -1
  526. package/dist/composition/composition-recovery.js.map +1 -1
  527. package/dist/composition/consequence.d.ts.map +1 -1
  528. package/dist/composition/consequence.js +15 -6
  529. package/dist/composition/consequence.js.map +1 -1
  530. package/dist/composition/consistency.js.map +1 -1
  531. package/dist/composition/descriptor.d.ts +1 -1
  532. package/dist/composition/descriptor.d.ts.map +1 -1
  533. package/dist/composition/descriptor.js.map +1 -1
  534. package/dist/composition/dimension-adjacency.js.map +1 -1
  535. package/dist/composition/discovery.d.ts +67 -7
  536. package/dist/composition/discovery.d.ts.map +1 -1
  537. package/dist/composition/discovery.js +83 -23
  538. package/dist/composition/discovery.js.map +1 -1
  539. package/dist/composition/edge.d.ts +19 -22
  540. package/dist/composition/edge.d.ts.map +1 -1
  541. package/dist/composition/edge.js +25 -28
  542. package/dist/composition/edge.js.map +1 -1
  543. package/dist/composition/enumerate.d.ts +2 -2
  544. package/dist/composition/enumerate.d.ts.map +1 -1
  545. package/dist/composition/enumerate.js.map +1 -1
  546. package/dist/composition/evaluate-relation.d.ts +29 -5
  547. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  548. package/dist/composition/evaluate-relation.js +100 -72
  549. package/dist/composition/evaluate-relation.js.map +1 -1
  550. package/dist/composition/explain.d.ts +14 -4
  551. package/dist/composition/explain.d.ts.map +1 -1
  552. package/dist/composition/explain.js +53 -19
  553. package/dist/composition/explain.js.map +1 -1
  554. package/dist/composition/expr-eval.d.ts.map +1 -1
  555. package/dist/composition/expr-eval.js +2 -1
  556. package/dist/composition/expr-eval.js.map +1 -1
  557. package/dist/composition/expr-simplify.d.ts.map +1 -1
  558. package/dist/composition/expr-simplify.js +9 -39
  559. package/dist/composition/expr-simplify.js.map +1 -1
  560. package/dist/composition/expr-subst.js.map +1 -1
  561. package/dist/composition/formula-shape.d.ts +9 -0
  562. package/dist/composition/formula-shape.d.ts.map +1 -1
  563. package/dist/composition/formula-shape.js +54 -0
  564. package/dist/composition/formula-shape.js.map +1 -1
  565. package/dist/composition/frontier-account.d.ts +3 -2
  566. package/dist/composition/frontier-account.d.ts.map +1 -1
  567. package/dist/composition/frontier-account.js +7 -3
  568. package/dist/composition/frontier-account.js.map +1 -1
  569. package/dist/composition/graph-viz-svg.js.map +1 -1
  570. package/dist/composition/graph-viz.js.map +1 -1
  571. package/dist/composition/grounding.js.map +1 -1
  572. package/dist/composition/identifiability.js.map +1 -1
  573. package/dist/composition/index.d.ts +9 -5
  574. package/dist/composition/index.d.ts.map +1 -1
  575. package/dist/composition/index.js +7 -4
  576. package/dist/composition/index.js.map +1 -1
  577. package/dist/composition/mathts-quiet.d.ts +28 -0
  578. package/dist/composition/mathts-quiet.d.ts.map +1 -0
  579. package/dist/composition/mathts-quiet.js +56 -0
  580. package/dist/composition/mathts-quiet.js.map +1 -0
  581. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  582. package/dist/composition/mathts-scalar-symbols.js +18 -34
  583. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  584. package/dist/composition/not-composable-seeds.d.ts +3 -1
  585. package/dist/composition/not-composable-seeds.d.ts.map +1 -1
  586. package/dist/composition/not-composable-seeds.js +2 -0
  587. package/dist/composition/not-composable-seeds.js.map +1 -1
  588. package/dist/composition/probe/backend-protocol.js.map +1 -1
  589. package/dist/composition/probe/candidate-store.js.map +1 -1
  590. package/dist/composition/probe/corpus.js.map +1 -1
  591. package/dist/composition/probe/dataset.js.map +1 -1
  592. package/dist/composition/probe/experiment-design.js.map +1 -1
  593. package/dist/composition/probe/expression-gaps.js.map +1 -1
  594. package/dist/composition/probe/falsify.d.ts +14 -3
  595. package/dist/composition/probe/falsify.d.ts.map +1 -1
  596. package/dist/composition/probe/falsify.js +14 -27
  597. package/dist/composition/probe/falsify.js.map +1 -1
  598. package/dist/composition/probe/fingerprint.js.map +1 -1
  599. package/dist/composition/probe/fit.d.ts +1 -1
  600. package/dist/composition/probe/fit.d.ts.map +1 -1
  601. package/dist/composition/probe/fit.js +2 -1
  602. package/dist/composition/probe/fit.js.map +1 -1
  603. package/dist/composition/probe/frontier.js.map +1 -1
  604. package/dist/composition/probe/generator.js.map +1 -1
  605. package/dist/composition/probe/index.d.ts +4 -2
  606. package/dist/composition/probe/index.d.ts.map +1 -1
  607. package/dist/composition/probe/index.js +4 -2
  608. package/dist/composition/probe/index.js.map +1 -1
  609. package/dist/composition/probe/limits.js.map +1 -1
  610. package/dist/composition/probe/metadata.js.map +1 -1
  611. package/dist/composition/probe/pipeline.d.ts +5 -0
  612. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  613. package/dist/composition/probe/pipeline.js +13 -6
  614. package/dist/composition/probe/pipeline.js.map +1 -1
  615. package/dist/composition/probe/problem.d.ts +8 -0
  616. package/dist/composition/probe/problem.d.ts.map +1 -1
  617. package/dist/composition/probe/problem.js +78 -12
  618. package/dist/composition/probe/problem.js.map +1 -1
  619. package/dist/composition/probe/report.js.map +1 -1
  620. package/dist/composition/probe/residual.js.map +1 -1
  621. package/dist/composition/probe/run-manifest.js +2 -2
  622. package/dist/composition/probe/run-manifest.js.map +1 -1
  623. package/dist/composition/probe/scoring.d.ts +2 -1
  624. package/dist/composition/probe/scoring.d.ts.map +1 -1
  625. package/dist/composition/probe/scoring.js +21 -7
  626. package/dist/composition/probe/scoring.js.map +1 -1
  627. package/dist/composition/probe/search-budget.js.map +1 -1
  628. package/dist/composition/probe/serialize.js.map +1 -1
  629. package/dist/composition/probe/structure.js.map +1 -1
  630. package/dist/composition/probe/study.d.ts +4 -3
  631. package/dist/composition/probe/study.d.ts.map +1 -1
  632. package/dist/composition/probe/study.js +5 -3
  633. package/dist/composition/probe/study.js.map +1 -1
  634. package/dist/composition/probe/types.d.ts +3 -1
  635. package/dist/composition/probe/types.d.ts.map +1 -1
  636. package/dist/composition/probe/types.js +2 -0
  637. package/dist/composition/probe/types.js.map +1 -1
  638. package/dist/composition/proposed-bridges.d.ts +11 -4
  639. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  640. package/dist/composition/proposed-bridges.js +14 -6
  641. package/dist/composition/proposed-bridges.js.map +1 -1
  642. package/dist/composition/quantities.d.ts +0 -4
  643. package/dist/composition/quantities.d.ts.map +1 -1
  644. package/dist/composition/quantities.js +5 -5
  645. package/dist/composition/quantities.js.map +1 -1
  646. package/dist/composition/quantity.d.ts +18 -2
  647. package/dist/composition/quantity.d.ts.map +1 -1
  648. package/dist/composition/quantity.js +35 -6
  649. package/dist/composition/quantity.js.map +1 -1
  650. package/dist/composition/representative-values.js.map +1 -1
  651. package/dist/composition/retrodiction.d.ts +18 -0
  652. package/dist/composition/retrodiction.d.ts.map +1 -1
  653. package/dist/composition/retrodiction.js +37 -7
  654. package/dist/composition/retrodiction.js.map +1 -1
  655. package/dist/composition/uncertainty.js.map +1 -1
  656. package/dist/composition/user-equation.d.ts +11 -7
  657. package/dist/composition/user-equation.d.ts.map +1 -1
  658. package/dist/composition/user-equation.js +24 -26
  659. package/dist/composition/user-equation.js.map +1 -1
  660. package/dist/core/axes-registry.d.ts +8 -5
  661. package/dist/core/axes-registry.d.ts.map +1 -1
  662. package/dist/core/axes-registry.js.map +1 -1
  663. package/dist/core/cell.js.map +1 -1
  664. package/dist/core/constants.d.ts +35 -12
  665. package/dist/core/constants.d.ts.map +1 -1
  666. package/dist/core/constants.js +46 -15
  667. package/dist/core/constants.js.map +1 -1
  668. package/dist/core/data-file.d.ts +27 -0
  669. package/dist/core/data-file.d.ts.map +1 -0
  670. package/dist/core/data-file.js +48 -0
  671. package/dist/core/data-file.js.map +1 -0
  672. package/dist/core/flux-rules.js +1 -1
  673. package/dist/core/flux-rules.js.map +1 -1
  674. package/dist/core/json-schema.d.ts +27 -0
  675. package/dist/core/json-schema.d.ts.map +1 -0
  676. package/dist/core/json-schema.js +177 -0
  677. package/dist/core/json-schema.js.map +1 -0
  678. package/dist/core/labeled-tensor.d.ts +6 -1
  679. package/dist/core/labeled-tensor.d.ts.map +1 -1
  680. package/dist/core/labeled-tensor.js +18 -8
  681. package/dist/core/labeled-tensor.js.map +1 -1
  682. package/dist/core/regime-registry.d.ts +6 -2
  683. package/dist/core/regime-registry.d.ts.map +1 -1
  684. package/dist/core/regime-registry.js.map +1 -1
  685. package/dist/core/regime-rule-install.js.map +1 -1
  686. package/dist/core/regimes-builtins.js.map +1 -1
  687. package/dist/core/tensor.d.ts +7 -4
  688. package/dist/core/tensor.d.ts.map +1 -1
  689. package/dist/core/tensor.js +40 -8
  690. package/dist/core/tensor.js.map +1 -1
  691. package/dist/core/types.d.ts +3 -2
  692. package/dist/core/types.d.ts.map +1 -1
  693. package/dist/core/types.js +16 -14
  694. package/dist/core/types.js.map +1 -1
  695. package/dist/core/universal-index.js.map +1 -1
  696. package/dist/diff/bridge-ast-gradient.d.ts +4 -5
  697. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  698. package/dist/diff/bridge-ast-gradient.js +16 -23
  699. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  700. package/dist/diff/bridge-gradient.d.ts +24 -80
  701. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  702. package/dist/diff/bridge-gradient.js +21 -98
  703. package/dist/diff/bridge-gradient.js.map +1 -1
  704. package/dist/diff/bridge-specs.d.ts +18 -6
  705. package/dist/diff/bridge-specs.d.ts.map +1 -1
  706. package/dist/diff/bridge-specs.js +17 -5
  707. package/dist/diff/bridge-specs.js.map +1 -1
  708. package/dist/dimensional/algebra.js.map +1 -1
  709. package/dist/dimensional/ast-builders.d.ts +5 -4
  710. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  711. package/dist/dimensional/ast-builders.js +6 -5
  712. package/dist/dimensional/ast-builders.js.map +1 -1
  713. package/dist/dimensional/ast-types.js.map +1 -1
  714. package/dist/dimensional/bridge-check.d.ts.map +1 -1
  715. package/dist/dimensional/bridge-check.js +3 -5
  716. package/dist/dimensional/bridge-check.js.map +1 -1
  717. package/dist/dimensional/buckingham.js.map +1 -1
  718. package/dist/dimensional/connection-validators.d.ts +2 -1
  719. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  720. package/dist/dimensional/connection-validators.js.map +1 -1
  721. package/dist/dimensional/connection.js.map +1 -1
  722. package/dist/dimensional/constant-rows.d.ts +54 -0
  723. package/dist/dimensional/constant-rows.d.ts.map +1 -0
  724. package/dist/dimensional/constant-rows.js +115 -0
  725. package/dist/dimensional/constant-rows.js.map +1 -0
  726. package/dist/dimensional/constants.d.ts +7 -17
  727. package/dist/dimensional/constants.d.ts.map +1 -1
  728. package/dist/dimensional/constants.js +12 -21
  729. package/dist/dimensional/constants.js.map +1 -1
  730. package/dist/dimensional/curvature-composite.js.map +1 -1
  731. package/dist/dimensional/curvature-invariants.js.map +1 -1
  732. package/dist/dimensional/curvature.js.map +1 -1
  733. package/dist/dimensional/dimension-inference.js.map +1 -1
  734. package/dist/dimensional/dimension-spec.d.ts +21 -6
  735. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  736. package/dist/dimensional/dimension-spec.js +150 -160
  737. package/dist/dimensional/dimension-spec.js.map +1 -1
  738. package/dist/dimensional/einstein-equation.js.map +1 -1
  739. package/dist/dimensional/errors.d.ts +3 -1
  740. package/dist/dimensional/errors.d.ts.map +1 -1
  741. package/dist/dimensional/errors.js +2 -2
  742. package/dist/dimensional/errors.js.map +1 -1
  743. package/dist/dimensional/exact-scale.d.ts +79 -0
  744. package/dist/dimensional/exact-scale.d.ts.map +1 -0
  745. package/dist/dimensional/exact-scale.js +222 -0
  746. package/dist/dimensional/exact-scale.js.map +1 -0
  747. package/dist/dimensional/field-equation-helpers.js.map +1 -1
  748. package/dist/dimensional/formula-names.d.ts +13 -12
  749. package/dist/dimensional/formula-names.d.ts.map +1 -1
  750. package/dist/dimensional/formula-names.js +28 -51
  751. package/dist/dimensional/formula-names.js.map +1 -1
  752. package/dist/dimensional/fresh-label.js.map +1 -1
  753. package/dist/dimensional/friedmann-equation.d.ts +3 -3
  754. package/dist/dimensional/friedmann-equation.js +3 -3
  755. package/dist/dimensional/friedmann-equation.js.map +1 -1
  756. package/dist/dimensional/gauge-field.d.ts +2 -3
  757. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  758. package/dist/dimensional/gauge-field.js +0 -1
  759. package/dist/dimensional/gauge-field.js.map +1 -1
  760. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  761. package/dist/dimensional/hyphen-names.js +8 -0
  762. package/dist/dimensional/hyphen-names.js.map +1 -1
  763. package/dist/dimensional/killing-validators.js.map +1 -1
  764. package/dist/dimensional/klein-gordon-equation.js.map +1 -1
  765. package/dist/dimensional/metric-validators.d.ts +2 -1
  766. package/dist/dimensional/metric-validators.d.ts.map +1 -1
  767. package/dist/dimensional/metric-validators.js.map +1 -1
  768. package/dist/dimensional/metric.js.map +1 -1
  769. package/dist/dimensional/natural-units.js.map +1 -1
  770. package/dist/dimensional/quantity-registry.d.ts +23 -1
  771. package/dist/dimensional/quantity-registry.d.ts.map +1 -1
  772. package/dist/dimensional/quantity-registry.js +55 -18
  773. package/dist/dimensional/quantity-registry.js.map +1 -1
  774. package/dist/dimensional/rg-flow.js.map +1 -1
  775. package/dist/dimensional/stress-energy-validators.js.map +1 -1
  776. package/dist/dimensional/symbolic-constants.d.ts +63 -19
  777. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  778. package/dist/dimensional/symbolic-constants.js +114 -92
  779. package/dist/dimensional/symbolic-constants.js.map +1 -1
  780. package/dist/dimensional/tensor-trace.js.map +1 -1
  781. package/dist/dimensional/tensor.js.map +1 -1
  782. package/dist/dimensional/types.js.map +1 -1
  783. package/dist/dimensional/unit-convention.d.ts +0 -2
  784. package/dist/dimensional/unit-convention.d.ts.map +1 -1
  785. package/dist/dimensional/unit-convention.js +2 -2
  786. package/dist/dimensional/unit-convention.js.map +1 -1
  787. package/dist/dimensional/unit-data.d.ts +70 -0
  788. package/dist/dimensional/unit-data.d.ts.map +1 -0
  789. package/dist/dimensional/unit-data.js +139 -0
  790. package/dist/dimensional/unit-data.js.map +1 -0
  791. package/dist/dimensional/units.d.ts +87 -24
  792. package/dist/dimensional/units.d.ts.map +1 -1
  793. package/dist/dimensional/units.js +290 -295
  794. package/dist/dimensional/units.js.map +1 -1
  795. package/dist/dimensional/validator-registry.js.map +1 -1
  796. package/dist/dimensional/validator.d.ts +0 -16
  797. package/dist/dimensional/validator.d.ts.map +1 -1
  798. package/dist/dimensional/validator.js +65 -29
  799. package/dist/dimensional/validator.js.map +1 -1
  800. package/dist/dimensional/weyl-validators.js.map +1 -1
  801. package/dist/index.d.ts +65 -18
  802. package/dist/index.d.ts.map +1 -1
  803. package/dist/index.js +19 -24
  804. package/dist/index.js.map +1 -1
  805. package/dist/numerical/bianchi-residual.js.map +1 -1
  806. package/dist/numerical/binding-value.d.ts +32 -7
  807. package/dist/numerical/binding-value.d.ts.map +1 -1
  808. package/dist/numerical/binding-value.js +218 -209
  809. package/dist/numerical/binding-value.js.map +1 -1
  810. package/dist/numerical/christoffel-flat.js.map +1 -1
  811. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  812. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  813. package/dist/numerical/covariant-eikonal.js +2 -2
  814. package/dist/numerical/covariant-eikonal.js.map +1 -1
  815. package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
  816. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  817. package/dist/numerical/curvature-lowering-helpers.js +6 -3
  818. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  819. package/dist/numerical/derivative-lowering.js.map +1 -1
  820. package/dist/numerical/einstein-equation.js.map +1 -1
  821. package/dist/numerical/engine-registry.js.map +1 -1
  822. package/dist/numerical/errors.d.ts +7 -3
  823. package/dist/numerical/errors.d.ts.map +1 -1
  824. package/dist/numerical/errors.js +5 -5
  825. package/dist/numerical/errors.js.map +1 -1
  826. package/dist/numerical/evaluator-uncertainty.d.ts +34 -0
  827. package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -0
  828. package/dist/numerical/evaluator-uncertainty.js +134 -0
  829. package/dist/numerical/evaluator-uncertainty.js.map +1 -0
  830. package/dist/numerical/formula-contract.d.ts +67 -7
  831. package/dist/numerical/formula-contract.d.ts.map +1 -1
  832. package/dist/numerical/formula-contract.js +68 -42
  833. package/dist/numerical/formula-contract.js.map +1 -1
  834. package/dist/numerical/formula-dimension.d.ts +17 -7
  835. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  836. package/dist/numerical/formula-dimension.js +120 -44
  837. package/dist/numerical/formula-dimension.js.map +1 -1
  838. package/dist/numerical/formula-mathts.d.ts.map +1 -1
  839. package/dist/numerical/formula-mathts.js +10 -3
  840. package/dist/numerical/formula-mathts.js.map +1 -1
  841. package/dist/numerical/formula-registry.d.ts +13 -3
  842. package/dist/numerical/formula-registry.d.ts.map +1 -1
  843. package/dist/numerical/formula-registry.js +7 -2
  844. package/dist/numerical/formula-registry.js.map +1 -1
  845. package/dist/numerical/geodesic-integrator.js.map +1 -1
  846. package/dist/numerical/geometrized.js.map +1 -1
  847. package/dist/numerical/gl4-integrator.d.ts +28 -27
  848. package/dist/numerical/gl4-integrator.d.ts.map +1 -1
  849. package/dist/numerical/gl4-integrator.js +44 -45
  850. package/dist/numerical/gl4-integrator.js.map +1 -1
  851. package/dist/numerical/grid-field.js.map +1 -1
  852. package/dist/numerical/index.js.map +1 -1
  853. package/dist/numerical/input-validation.d.ts +3 -6
  854. package/dist/numerical/input-validation.d.ts.map +1 -1
  855. package/dist/numerical/input-validation.js +4 -8
  856. package/dist/numerical/input-validation.js.map +1 -1
  857. package/dist/numerical/killing.d.ts +8 -5
  858. package/dist/numerical/killing.d.ts.map +1 -1
  859. package/dist/numerical/killing.js.map +1 -1
  860. package/dist/numerical/klein-gordon.js.map +1 -1
  861. package/dist/numerical/kretschmann.js.map +1 -1
  862. package/dist/numerical/lowering-utils.js.map +1 -1
  863. package/dist/numerical/lowering.d.ts.map +1 -1
  864. package/dist/numerical/lowering.js +7 -17
  865. package/dist/numerical/lowering.js.map +1 -1
  866. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  867. package/dist/numerical/mathts-engine.js +11 -6
  868. package/dist/numerical/mathts-engine.js.map +1 -1
  869. package/dist/numerical/metric-inverse.js.map +1 -1
  870. package/dist/numerical/null-ic.js.map +1 -1
  871. package/dist/numerical/null-ray-integrator.js +4 -4
  872. package/dist/numerical/null-ray-integrator.js.map +1 -1
  873. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  874. package/dist/numerical/pderiv.d.ts.map +1 -1
  875. package/dist/numerical/pderiv.js +9 -2
  876. package/dist/numerical/pderiv.js.map +1 -1
  877. package/dist/numerical/perihelion-finder.js.map +1 -1
  878. package/dist/numerical/quadrature.d.ts +5 -2
  879. package/dist/numerical/quadrature.d.ts.map +1 -1
  880. package/dist/numerical/quadrature.js +20 -3
  881. package/dist/numerical/quadrature.js.map +1 -1
  882. package/dist/numerical/spacetime-metrics.d.ts +17 -19
  883. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  884. package/dist/numerical/spacetime-metrics.js +158 -250
  885. package/dist/numerical/spacetime-metrics.js.map +1 -1
  886. package/dist/numerical/strides.js.map +1 -1
  887. package/dist/numerical/tensor-engine.d.ts +9 -5
  888. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  889. package/dist/numerical/tensor-engine.js.map +1 -1
  890. package/dist/numerical/types.js.map +1 -1
  891. package/dist/numerical/weyl-lowering.js.map +1 -1
  892. package/dist/relations/category.js.map +1 -1
  893. package/dist/relations/composition-table.d.ts +4 -4
  894. package/dist/relations/composition-table.js +4 -4
  895. package/dist/relations/composition-table.js.map +1 -1
  896. package/dist/relations/conventions.js.map +1 -1
  897. package/dist/relations/domain-regimes.js.map +1 -1
  898. package/dist/relations/regime-registration.js.map +1 -1
  899. package/dist/relations/regime-vocabularies.js.map +1 -1
  900. package/dist/relations/regime.d.ts +18 -8
  901. package/dist/relations/regime.d.ts.map +1 -1
  902. package/dist/relations/regime.js +26 -14
  903. package/dist/relations/regime.js.map +1 -1
  904. package/dist/relations/types.d.ts +26 -6
  905. package/dist/relations/types.d.ts.map +1 -1
  906. package/dist/relations/types.js +15 -3
  907. package/dist/relations/types.js.map +1 -1
  908. package/package.json +10 -14
  909. package/dist/bridges/registry.d.ts +0 -60
  910. package/dist/bridges/registry.d.ts.map +0 -1
  911. package/dist/bridges/registry.js +0 -87
  912. package/dist/bridges/registry.js.map +0 -1
  913. package/dist/cli/poster-source.d.ts +0 -154
  914. package/dist/cli/poster-source.d.ts.map +0 -1
  915. package/dist/cli/poster-source.js +0 -184
  916. package/dist/cli/poster-source.js.map +0 -1
@@ -1,46 +1,31 @@
1
1
  /**
2
- * Bridge-parameter differentiation — v0.9 Proposal 8 core layer.
2
+ * Bridge-parameter differentiation by central finite differences.
3
3
  *
4
- * Wraps catalog bridge evaluators (typed scalar functions with
5
- * named-field struct inputs like `evaluateShapiroDelay(input:
6
- * ShapiroInputs): number`) into the shape expected by
7
- * `TensorEngine.reverseGrad`: `(paramTensor: EngineTensor) →
8
- * outputScalar`. Returns gradients with respect to a chosen subset
9
- * of the bridge's input parameters.
4
+ * A {@link BridgeDiffSpec} wraps one catalog closed form (a plain-JS scalar
5
+ * function over a named-field struct) and names which fields vary.
6
+ * {@link bridgeGradientNumerical} perturbs those fields and returns the
7
+ * gradient keyed by field name.
10
8
  *
11
- * Per P8 Decision #1, this lives in `src/diff/` (NOT in
12
- * `src/bridges/`), keeping bridge evaluators untouched. The AD
13
- * dependency `mathts-autograd` is a required dependency. Installing it
14
- * does not make AD of the plain-JS bridges work: the tape still cannot
15
- * trace `Math.*` (see the AD limitation below).
9
+ * There is no engine-AD path over a spec. `evaluate` returns a `number`, and
10
+ * a number carries no autograd tape, so reverse- or forward-mode AD of a spec
11
+ * is unreachable by construction; the function that once offered it
12
+ * (`bridgeGradient`) threw for every shipped spec and was removed. The exact
13
+ * AD path is {@link bridgeGradientAST} in `bridge-ast-gradient.ts`, which
14
+ * lowers the bridge's symbolic RHS through `@danielsimonjr/mathts-autograd`.
16
15
  *
17
- * IMPORTANT — AD limitation (verified empirically): `bridgeGradient`
18
- * does NOT actually differentiate the catalog evaluators. Because P8
19
- * Decision #1 keeps those evaluators as plain-JS scalar functions
20
- * (`Math.*` / raw arithmetic on numbers), neither reverse-mode (tape)
21
- * nor forward-mode (dual) AD can trace them — the tape/dual instrument
22
- * only sees ops routed through engine-traced tensors. With
23
- * `MathTSEngine` the autograd `TapedTensor` does not survive
24
- * `engine.toNested`. `bridgeGradient` therefore only works for
25
- * functions written in engine ops — not the plain-JS bridges.
26
- *
27
- * The SUPPORTED way to differentiate a plain-JS bridge evaluator is
28
- * {@link bridgeGradientNumerical} (central finite differences, no engine).
16
+ * This module lives in `src/diff/` (P8 Decision #1), not in `src/bridges/`,
17
+ * so the catalog closed forms stay untouched.
29
18
  *
30
19
  * @module diff/bridge-gradient
31
20
  */
32
- import type { EngineTensor, TensorEngine } from '../numerical/tensor-engine.js';
33
21
  /**
34
- * Specification of a differentiable bridge: which parameters can
35
- * vary, in what order they get packed into a 1-D parameter
36
- * tensor, how to unpack the tensor back into the bridge's input
37
- * struct, and the bridge evaluator itself.
22
+ * Specification of a differentiable bridge: which parameters can vary, in
23
+ * what order the gradient reports them, the fixed inputs, and the bridge's
24
+ * scalar evaluator.
38
25
  *
39
- * `paramNames` is the canonical pack/unpack order. For
40
- * `evaluateShapiroDelay(input: { r: number; b: number; M: number })`
41
- * with `paramNames: ['r', 'b', 'M']`, the gradient returned by
42
- * `bridgeGradient` has shape `[3]` with entries
43
- * `[dS/dr, dS/db, dS/dM]` in that order.
26
+ * `paramNames` is the report order. For a Shapiro-delay spec with
27
+ * `paramNames: ['M_kg', 'R_far_m', 'R_near_m']`, the gradient returned by
28
+ * `bridgeGradientNumerical` has keys in that insertion order.
44
29
  *
45
30
  * @public
46
31
  */
@@ -50,54 +35,18 @@ export interface BridgeDiffSpec<Input> {
50
35
  /** Display name (e.g., 'Shapiro time delay'). */
51
36
  readonly name: string;
52
37
  /**
53
- * Pack/unpack order: which Input keys correspond to which axis
54
- * of the parameter tensor. All names must be present in the
38
+ * Which Input keys vary, in report order. All names must be present in the
55
39
  * frozen `Input` struct as `number`-valued keys.
56
40
  */
57
41
  readonly paramNames: ReadonlyArray<keyof Input & string>;
58
42
  /**
59
- * Fill in the non-differentiable input fields (those NOT in
60
- * `paramNames`). Returns the full struct merged from `defaults`
61
- * + the unpacked differentiable params. Typed as
62
- * `Partial<Input>` for ergonomics — runtime check in
63
- * `bridgeGradient` would catch missing required defaults if
64
- * the bridge evaluator needs them.
43
+ * The non-differentiable input fields (those NOT in `paramNames`). The
44
+ * evaluator receives `defaults` merged with the varying params.
65
45
  */
66
46
  readonly defaults: Partial<Input>;
67
47
  /** The bridge's scalar evaluator. */
68
48
  readonly evaluate: (input: Input) => number;
69
49
  }
70
- /**
71
- * Result of `bridgeGradient`. `value` is the bridge's scalar
72
- * output at the supplied parameter point; `gradient` is the
73
- * 1-D `EngineTensor` of partial derivatives in `paramNames`
74
- * order.
75
- *
76
- * @public
77
- */
78
- export interface BridgeGradientResult {
79
- readonly value: number;
80
- readonly gradient: EngineTensor;
81
- }
82
- /**
83
- * Compute the gradient of a bridge evaluator with respect to its
84
- * differentiable parameters via reverse-mode AD. The supplied
85
- * `params` map must contain every key in `spec.paramNames`.
86
- *
87
- * Throws `EngineCapabilityError` if the engine doesn't support
88
- * autograd (the standard graceful-degradation path from v0.4.0;
89
- * see `MathTSEngine.reverseGrad`).
90
- *
91
- * @public
92
- */
93
- export declare function bridgeGradient<Input>(spec: BridgeDiffSpec<Input>, engine: TensorEngine, params: Record<string, number>): Promise<BridgeGradientResult>;
94
- /**
95
- * Convenience: unpack a 1-D gradient tensor into a named-field
96
- * record matching the spec's `paramNames` order.
97
- *
98
- * @public
99
- */
100
- export declare function gradientToNamed<Input>(spec: BridgeDiffSpec<Input>, gradient: EngineTensor, engine: TensorEngine): Record<string, number>;
101
50
  /**
102
51
  * Result of {@link bridgeGradientNumerical}: the bridge's scalar `value`
103
52
  * at the supplied point, plus the `gradient` of partial derivatives keyed
@@ -111,13 +60,8 @@ export interface BridgeNumericalGradientResult {
111
60
  }
112
61
  /**
113
62
  * Gradient of a bridge evaluator by **central finite differences** — the
114
- * supported way to differentiate the catalog's plain-JS evaluators.
115
- *
116
- * Reverse-/forward-mode AD ({@link bridgeGradient}) cannot trace these
117
- * evaluators: per P8 Decision #1 they are plain-JS scalar functions
118
- * (`Math.*` / raw arithmetic on numbers), so a tape/dual engine observes no
119
- * traced ops. `bridgeGradientNumerical` perturbs the inputs instead, so it
120
- * needs no engine and is synchronous.
63
+ * way to differentiate the catalog's plain-JS closed forms without
64
+ * rewriting them. Needs no engine and is synchronous.
121
65
  *
122
66
  * For each differentiable param with value `x` it uses a relative step
123
67
  * `h = max(|x|, 1)·cbrt(eps)` and the ACTUAL representable denominator
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-gradient.d.ts","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAIhF;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK;IACnC,2GAA2G;IAC3G,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC;IACzD;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,KAAK,EACxC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAC3B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAmC/B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EACnC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAC3B,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAUD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAC3C,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,6BAA6B,CA2C/B"}
1
+ {"version":3,"file":"bridge-gradient.d.ts","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK;IACnC,2GAA2G;IAC3G,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAUD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAC3C,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,6BAA6B,CA6C/B"}
@@ -1,97 +1,23 @@
1
1
  /**
2
- * Bridge-parameter differentiation — v0.9 Proposal 8 core layer.
2
+ * Bridge-parameter differentiation by central finite differences.
3
3
  *
4
- * Wraps catalog bridge evaluators (typed scalar functions with
5
- * named-field struct inputs like `evaluateShapiroDelay(input:
6
- * ShapiroInputs): number`) into the shape expected by
7
- * `TensorEngine.reverseGrad`: `(paramTensor: EngineTensor) →
8
- * outputScalar`. Returns gradients with respect to a chosen subset
9
- * of the bridge's input parameters.
4
+ * A {@link BridgeDiffSpec} wraps one catalog closed form (a plain-JS scalar
5
+ * function over a named-field struct) and names which fields vary.
6
+ * {@link bridgeGradientNumerical} perturbs those fields and returns the
7
+ * gradient keyed by field name.
10
8
  *
11
- * Per P8 Decision #1, this lives in `src/diff/` (NOT in
12
- * `src/bridges/`), keeping bridge evaluators untouched. The AD
13
- * dependency `mathts-autograd` is a required dependency. Installing it
14
- * does not make AD of the plain-JS bridges work: the tape still cannot
15
- * trace `Math.*` (see the AD limitation below).
9
+ * There is no engine-AD path over a spec. `evaluate` returns a `number`, and
10
+ * a number carries no autograd tape, so reverse- or forward-mode AD of a spec
11
+ * is unreachable by construction; the function that once offered it
12
+ * (`bridgeGradient`) threw for every shipped spec and was removed. The exact
13
+ * AD path is {@link bridgeGradientAST} in `bridge-ast-gradient.ts`, which
14
+ * lowers the bridge's symbolic RHS through `@danielsimonjr/mathts-autograd`.
16
15
  *
17
- * IMPORTANT — AD limitation (verified empirically): `bridgeGradient`
18
- * does NOT actually differentiate the catalog evaluators. Because P8
19
- * Decision #1 keeps those evaluators as plain-JS scalar functions
20
- * (`Math.*` / raw arithmetic on numbers), neither reverse-mode (tape)
21
- * nor forward-mode (dual) AD can trace them — the tape/dual instrument
22
- * only sees ops routed through engine-traced tensors. With
23
- * `MathTSEngine` the autograd `TapedTensor` does not survive
24
- * `engine.toNested`. `bridgeGradient` therefore only works for
25
- * functions written in engine ops — not the plain-JS bridges.
26
- *
27
- * The SUPPORTED way to differentiate a plain-JS bridge evaluator is
28
- * {@link bridgeGradientNumerical} (central finite differences, no engine).
16
+ * This module lives in `src/diff/` (P8 Decision #1), not in `src/bridges/`,
17
+ * so the catalog closed forms stay untouched.
29
18
  *
30
19
  * @module diff/bridge-gradient
31
20
  */
32
- import { hasAutogradSupport } from '../numerical/tensor-engine.js';
33
- import { EngineCapabilityError } from '../numerical/errors.js';
34
- /**
35
- * Compute the gradient of a bridge evaluator with respect to its
36
- * differentiable parameters via reverse-mode AD. The supplied
37
- * `params` map must contain every key in `spec.paramNames`.
38
- *
39
- * Throws `EngineCapabilityError` if the engine doesn't support
40
- * autograd (the standard graceful-degradation path from v0.4.0;
41
- * see `MathTSEngine.reverseGrad`).
42
- *
43
- * @public
44
- */
45
- export async function bridgeGradient(spec, engine, params) {
46
- if (!hasAutogradSupport(engine)) {
47
- throw new EngineCapabilityError(engine.name, 'reverseGrad');
48
- }
49
- // Pack params into a 1-D tensor in spec.paramNames order.
50
- const packed = spec.paramNames.map((k) => {
51
- const v = params[k];
52
- if (typeof v !== 'number') {
53
- throw new TypeError(`bridgeGradient: ${spec.bridgeId}: missing or non-numeric param '${k}' ` +
54
- `(got ${typeof v}). All paramNames must be numbers in the params object.`);
55
- }
56
- return v;
57
- });
58
- const paramTensor = engine.fromNested(packed, [packed.length]);
59
- // Build the (paramTensor) → scalar function the engine's
60
- // reverseGrad expects. The function unpacks the tensor back
61
- // into the bridge's Input struct, calls evaluate, and returns
62
- // a rank-0 tensor.
63
- const fn = (x) => {
64
- const unpacked = engine.toNested(x);
65
- const input = { ...spec.defaults };
66
- spec.paramNames.forEach((k, i) => {
67
- input[k] = unpacked[i];
68
- });
69
- const scalar = spec.evaluate(input);
70
- return engine.fromNested(scalar, []);
71
- };
72
- const { value, gradient } = await engine.reverseGrad(fn, paramTensor);
73
- const valueNumber = engine.toNested(value);
74
- return { value: valueNumber, gradient };
75
- }
76
- /**
77
- * Convenience: unpack a 1-D gradient tensor into a named-field
78
- * record matching the spec's `paramNames` order.
79
- *
80
- * @public
81
- */
82
- export function gradientToNamed(spec, gradient, engine) {
83
- const arr = engine.toNested(gradient);
84
- if (arr.length !== spec.paramNames.length) {
85
- throw new RangeError(`gradientToNamed: ${spec.bridgeId}: gradient length ${arr.length} does not ` +
86
- `match paramNames length ${spec.paramNames.length} — a mismatch would ` +
87
- `silently leave some params undefined or drop gradient entries.`);
88
- }
89
- const out = {};
90
- spec.paramNames.forEach((k, i) => {
91
- out[k] = arr[i];
92
- });
93
- return out;
94
- }
95
21
  /**
96
22
  * Relative step for central differences: `cbrt(eps)` balances the `O(h²)`
97
23
  * truncation error against the `O(eps/h)` round-off error (the central-diff
@@ -101,13 +27,8 @@ export function gradientToNamed(spec, gradient, engine) {
101
27
  const CENTRAL_DIFF_REL_STEP = Math.cbrt(Number.EPSILON); // ≈ 6.06e-6
102
28
  /**
103
29
  * Gradient of a bridge evaluator by **central finite differences** — the
104
- * supported way to differentiate the catalog's plain-JS evaluators.
105
- *
106
- * Reverse-/forward-mode AD ({@link bridgeGradient}) cannot trace these
107
- * evaluators: per P8 Decision #1 they are plain-JS scalar functions
108
- * (`Math.*` / raw arithmetic on numbers), so a tape/dual engine observes no
109
- * traced ops. `bridgeGradientNumerical` perturbs the inputs instead, so it
110
- * needs no engine and is synchronous.
30
+ * way to differentiate the catalog's plain-JS closed forms without
31
+ * rewriting them. Needs no engine and is synchronous.
111
32
  *
112
33
  * For each differentiable param with value `x` it uses a relative step
113
34
  * `h = max(|x|, 1)·cbrt(eps)` and the ACTUAL representable denominator
@@ -124,9 +45,8 @@ export function bridgeGradientNumerical(spec, params, opts) {
124
45
  throw new RangeError(`bridgeGradientNumerical: ${spec.bridgeId}: relStep must be a positive finite number, got ${relStep} ` +
125
46
  `(a zero/non-finite step collapses the central-difference denominator to 0 → NaN gradients).`);
126
47
  }
127
- // Same contract as bridgeGradient: every paramName must be a FINITE number.
128
- // (`typeof NaN === 'number'`, so a bare typeof check let NaN/∞ flow into a
129
- // silently non-finite gradient.)
48
+ // Every paramName must be a FINITE number. (`typeof NaN === 'number'`, so a
49
+ // bare typeof check let NaN/∞ flow into a silently non-finite gradient.)
130
50
  for (const k of spec.paramNames) {
131
51
  if (!Number.isFinite(params[k])) {
132
52
  throw new TypeError(`bridgeGradientNumerical: ${spec.bridgeId}: missing or non-finite param '${k}' ` +
@@ -134,7 +54,10 @@ export function bridgeGradientNumerical(spec, params, opts) {
134
54
  }
135
55
  }
136
56
  // Build the full Input struct (defaults + differentiable params), with an
137
- // optional single-param override for the perturbed evaluations.
57
+ // optional single-param override for the perturbed evaluations. The
58
+ // `Input` generic has no runtime schema: `spec.paramNames` is declared as
59
+ // keys of `Input`, and `defaults` is a `Partial<Input>`, so the merged
60
+ // record is an `Input` by the spec's own contract; the cast states that.
138
61
  const buildInput = (override) => {
139
62
  const input = { ...spec.defaults };
140
63
  for (const k of spec.paramNames)
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-gradient.js","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge-gradient.js","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA4CH;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;AAErE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAA2B,EAC3B,MAA8B,EAC9B,IAAoC;IAEpC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,qBAAqB,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,UAAU,CAClB,4BAA4B,IAAI,CAAC,QAAQ,mDAAmD,OAAO,GAAG;YACtG,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,SAAS,CACjB,4BAA4B,IAAI,CAAC,QAAQ,kCAAkC,CAAC,IAAI;gBAChF,QAAQ,MAAM,CAAC,CAAC,CAAC,gEAAgE,CAClF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,oEAAoE;IACpE,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,UAAU,GAAG,CAAC,QAAuC,EAAS,EAAE;QACpE,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAA6B,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,QAAQ;YAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC;QACjD,OAAO,KAAyB,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;QAC7C,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0CAA0C;QACtE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC","sourcesContent":["/**\n * Bridge-parameter differentiation by central finite differences.\n *\n * A {@link BridgeDiffSpec} wraps one catalog closed form (a plain-JS scalar\n * function over a named-field struct) and names which fields vary.\n * {@link bridgeGradientNumerical} perturbs those fields and returns the\n * gradient keyed by field name.\n *\n * There is no engine-AD path over a spec. `evaluate` returns a `number`, and\n * a number carries no autograd tape, so reverse- or forward-mode AD of a spec\n * is unreachable by construction; the function that once offered it\n * (`bridgeGradient`) threw for every shipped spec and was removed. The exact\n * AD path is {@link bridgeGradientAST} in `bridge-ast-gradient.ts`, which\n * lowers the bridge's symbolic RHS through `@danielsimonjr/mathts-autograd`.\n *\n * This module lives in `src/diff/` (P8 Decision #1), not in `src/bridges/`,\n * so the catalog closed forms stay untouched.\n *\n * @module diff/bridge-gradient\n */\n\n/**\n * Specification of a differentiable bridge: which parameters can vary, in\n * what order the gradient reports them, the fixed inputs, and the bridge's\n * scalar evaluator.\n *\n * `paramNames` is the report order. For a Shapiro-delay spec with\n * `paramNames: ['M_kg', 'R_far_m', 'R_near_m']`, the gradient returned by\n * `bridgeGradientNumerical` has keys in that insertion order.\n *\n * @public\n */\nexport interface BridgeDiffSpec<Input> {\n /** Catalog id used in error messages (for example the relation that uses the covariant-eikonal method). */\n readonly bridgeId: string;\n /** Display name (e.g., 'Shapiro time delay'). */\n readonly name: string;\n /**\n * Which Input keys vary, in report order. All names must be present in the\n * frozen `Input` struct as `number`-valued keys.\n */\n readonly paramNames: ReadonlyArray<keyof Input & string>;\n /**\n * The non-differentiable input fields (those NOT in `paramNames`). The\n * evaluator receives `defaults` merged with the varying params.\n */\n readonly defaults: Partial<Input>;\n /** The bridge's scalar evaluator. */\n readonly evaluate: (input: Input) => number;\n}\n\n/**\n * Result of {@link bridgeGradientNumerical}: the bridge's scalar `value`\n * at the supplied point, plus the `gradient` of partial derivatives keyed\n * by `paramName` (insertion follows `spec.paramNames` order).\n *\n * @public\n */\nexport interface BridgeNumericalGradientResult {\n readonly value: number;\n readonly gradient: Readonly<Record<string, number>>;\n}\n\n/**\n * Relative step for central differences: `cbrt(eps)` balances the `O(h²)`\n * truncation error against the `O(eps/h)` round-off error (the central-diff\n * optimum). `sqrt(eps)` — the FORWARD-diff optimum — would leave precision on\n * the table for central differences.\n */\nconst CENTRAL_DIFF_REL_STEP = Math.cbrt(Number.EPSILON); // ≈ 6.06e-6\n\n/**\n * Gradient of a bridge evaluator by **central finite differences** — the\n * way to differentiate the catalog's plain-JS closed forms without\n * rewriting them. Needs no engine and is synchronous.\n *\n * For each differentiable param with value `x` it uses a relative step\n * `h = max(|x|, 1)·cbrt(eps)` and the ACTUAL representable denominator\n * `dx = (x + h) − (x − h)` — so the perturbation survives floating-point\n * rounding even at astrophysical scales (e.g. `M ≈ 2e30 kg`). The supplied\n * `params` must contain every key in `spec.paramNames`; non-differentiable\n * fields come from `spec.defaults`.\n *\n * @public\n */\nexport function bridgeGradientNumerical<Input>(\n spec: BridgeDiffSpec<Input>,\n params: Record<string, number>,\n opts?: { readonly relStep?: number },\n): BridgeNumericalGradientResult {\n const relStep = opts?.relStep ?? CENTRAL_DIFF_REL_STEP;\n if (!Number.isFinite(relStep) || relStep <= 0) {\n throw new RangeError(\n `bridgeGradientNumerical: ${spec.bridgeId}: relStep must be a positive finite number, got ${relStep} ` +\n `(a zero/non-finite step collapses the central-difference denominator to 0 → NaN gradients).`,\n );\n }\n\n // Every paramName must be a FINITE number. (`typeof NaN === 'number'`, so a\n // bare typeof check let NaN/∞ flow into a silently non-finite gradient.)\n for (const k of spec.paramNames) {\n if (!Number.isFinite(params[k])) {\n throw new TypeError(\n `bridgeGradientNumerical: ${spec.bridgeId}: missing or non-finite param '${k}' ` +\n `(got ${params[k]}). All paramNames must be finite numbers in the params object.`,\n );\n }\n }\n\n // Build the full Input struct (defaults + differentiable params), with an\n // optional single-param override for the perturbed evaluations. The\n // `Input` generic has no runtime schema: `spec.paramNames` is declared as\n // keys of `Input`, and `defaults` is a `Partial<Input>`, so the merged\n // record is an `Input` by the spec's own contract; the cast states that.\n const buildInput = (override?: { key: string; val: number }): Input => {\n const input = { ...spec.defaults } as Record<string, unknown>;\n for (const k of spec.paramNames) input[k] = params[k];\n if (override) input[override.key] = override.val;\n return input as unknown as Input;\n };\n\n const value = spec.evaluate(buildInput());\n\n const gradient: Record<string, number> = {};\n for (const k of spec.paramNames) {\n const x = params[k];\n const h = Math.max(Math.abs(x), 1) * relStep;\n const dx = x + h - (x - h); // actual representable step (huge-x safe)\n const fp = spec.evaluate(buildInput({ key: k, val: x + h }));\n const fm = spec.evaluate(buildInput({ key: k, val: x - h }));\n gradient[k] = (fp - fm) / dx;\n }\n\n return { value, gradient };\n}\n"]}
@@ -5,21 +5,34 @@
5
5
  * @module diff/bridge-specs
6
6
  */
7
7
  import type { BridgeDiffSpec } from './bridge-gradient.js';
8
- interface ShapiroInput {
8
+ import type { CatalogRelation } from '../bridges/catalog-types.js';
9
+ /**
10
+ * The catalog id a differentiable relation is labelled by. A relation with no
11
+ * catalog id is not a catalog bridge and gets no `be-<n>` label; it throws
12
+ * rather than defaulting to `be-0`.
13
+ * @internal
14
+ */
15
+ export declare function requireCatalogId(relation: CatalogRelation): number;
16
+ /** Inputs of {@link SHAPIRO_DELAY_DIFF}: the mass and the two radii. @public */
17
+ export interface ShapiroInput {
9
18
  readonly M_kg: number;
10
19
  readonly R_far_m: number;
11
20
  readonly R_near_m: number;
12
21
  }
13
- interface PerihelionInput {
22
+ /** Inputs of {@link PERIHELION_ADVANCE_DIFF}: mass, semi-major axis, eccentricity, optional period. @public */
23
+ export interface PerihelionInput {
14
24
  readonly M_kg: number;
15
25
  readonly a_m: number;
16
- readonly e: number;
26
+ /** Orbital eccentricity, 0 ≤ e < 1. A bare `e` is the elementary charge, so it is not this key. */
27
+ readonly eccentricity: number;
17
28
  readonly T_yr?: number;
18
29
  }
19
- interface HawkingInput {
30
+ /** Inputs of {@link HAWKING_TEMPERATURE_DIFF}: the mass. @public */
31
+ export interface HawkingInput {
20
32
  readonly M_kg: number;
21
33
  }
22
- interface DecoherenceInput {
34
+ /** Inputs of {@link DECOHERENCE_RATE_DIFF}: the rate and the two couplings. @public */
35
+ export interface DecoherenceInput {
23
36
  readonly gamma0_per_s: number;
24
37
  readonly lambda: number;
25
38
  readonly lambda0: number;
@@ -34,5 +47,4 @@ export declare const HAWKING_TEMPERATURE_DIFF: BridgeDiffSpec<HawkingInput>;
34
47
  export declare const DECOHERENCE_RATE_DIFF: BridgeDiffSpec<DecoherenceInput>;
35
48
  /** Catalog relations this module differentiates. @public */
36
49
  export declare const DIFFERENTIABLE_RELATIONS: readonly [BridgeDiffSpec<ShapiroInput>, BridgeDiffSpec<PerihelionInput>, BridgeDiffSpec<HawkingInput>, BridgeDiffSpec<DecoherenceInput>];
37
- export {};
38
50
  //# sourceMappingURL=bridge-specs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-specs.d.ts","sourceRoot":"","sources":["../../src/diff/bridge-specs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAyB3D,UAAU,YAAY;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,eAAe;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,YAAY;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAUD,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,YAAY,CAM3D,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,eAAe,CAMnE,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,YAAY,CAMjE,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,gBAAgB,CAMlE,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,0IAK3B,CAAC"}
1
+ {"version":3,"file":"bridge-specs.d.ts","sourceRoot":"","sources":["../../src/diff/bridge-specs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAKlE;AAsBD,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,+GAA+G;AAC/G,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,uFAAuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAUD,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,YAAY,CAM3D,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,eAAe,CAMnE,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,YAAY,CAMjE,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,gBAAgB,CAMlE,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,0IAK3B,CAAC"}
@@ -6,6 +6,18 @@
6
6
  */
7
7
  import { catalogEdgeKey, catalogRelations } from '../bridges/catalog-load.js';
8
8
  import { evaluateCatalogRelation } from '../bridges/relation-eval.js';
9
+ /**
10
+ * The catalog id a differentiable relation is labelled by. A relation with no
11
+ * catalog id is not a catalog bridge and gets no `be-<n>` label; it throws
12
+ * rather than defaulting to `be-0`.
13
+ * @internal
14
+ */
15
+ export function requireCatalogId(relation) {
16
+ if (relation.catalogId === null) {
17
+ throw new Error(`bridge-specs: relation '${relation.id}' has no catalog id and cannot be labelled be-<n>`);
18
+ }
19
+ return relation.catalogId;
20
+ }
9
21
  function relationWithSource(source) {
10
22
  const found = catalogRelations().find((row) => row.sources.includes(source));
11
23
  if (found === undefined)
@@ -35,7 +47,7 @@ if (hawking === undefined)
35
47
  const decoherence = relationWithSource('system-environment-coupling');
36
48
  /** Shapiro delay. Differentiable in mass and the two radii. @public */
37
49
  export const SHAPIRO_DELAY_DIFF = {
38
- bridgeId: catalogEdgeKey(shapiro.catalogId ?? 0),
50
+ bridgeId: catalogEdgeKey(requireCatalogId(shapiro)),
39
51
  name: 'Shapiro time delay',
40
52
  paramNames: ['M_kg', 'R_far_m', 'R_near_m'],
41
53
  defaults: {},
@@ -43,15 +55,15 @@ export const SHAPIRO_DELAY_DIFF = {
43
55
  };
44
56
  /** Perihelion advance in radians per orbit. @public */
45
57
  export const PERIHELION_ADVANCE_DIFF = {
46
- bridgeId: catalogEdgeKey(perihelion.catalogId ?? 0),
58
+ bridgeId: catalogEdgeKey(requireCatalogId(perihelion)),
47
59
  name: 'Perihelion advance (radian per orbit)',
48
- paramNames: ['M_kg', 'a_m', 'e'],
60
+ paramNames: ['M_kg', 'a_m', 'eccentricity'],
49
61
  defaults: {},
50
62
  evaluate: (input) => evaluateAliased(perihelion, input),
51
63
  };
52
64
  /** Hawking temperature. Differentiable in mass. @public */
53
65
  export const HAWKING_TEMPERATURE_DIFF = {
54
- bridgeId: catalogEdgeKey(hawking.catalogId ?? 0),
66
+ bridgeId: catalogEdgeKey(requireCatalogId(hawking)),
55
67
  name: 'Hawking temperature',
56
68
  paramNames: ['M_kg'],
57
69
  defaults: {},
@@ -59,7 +71,7 @@ export const HAWKING_TEMPERATURE_DIFF = {
59
71
  };
60
72
  /** Decoherence rate. Differentiable in the rate and the two couplings. @public */
61
73
  export const DECOHERENCE_RATE_DIFF = {
62
- bridgeId: catalogEdgeKey(decoherence.catalogId ?? 0),
74
+ bridgeId: catalogEdgeKey(requireCatalogId(decoherence)),
63
75
  name: 'Decoherence rate',
64
76
  paramNames: ['gamma0_per_s', 'lambda', 'lambda0'],
65
77
  defaults: {},
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-specs.js","sourceRoot":"","sources":["../../src/diff/bridge-specs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge-specs.js","sourceRoot":"","sources":["../../src/diff/bridge-specs.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Differentiable relations projected from the catalog. The scalar is the\n * catalog expression. Parameter names are the relation's aliases.\n *\n * @module diff/bridge-specs\n */\n\nimport type { BridgeDiffSpec } from './bridge-gradient.js';\nimport { catalogEdgeKey, catalogRelations } from '../bridges/catalog-load.js';\nimport type { CatalogRelation } from '../bridges/catalog-types.js';\nimport { evaluateCatalogRelation } from '../bridges/relation-eval.js';\n\n/**\n * The catalog id a differentiable relation is labelled by. A relation with no\n * catalog id is not a catalog bridge and gets no `be-<n>` label; it throws\n * rather than defaulting to `be-0`.\n * @internal\n */\nexport function requireCatalogId(relation: CatalogRelation): number {\n if (relation.catalogId === null) {\n throw new Error(`bridge-specs: relation '${relation.id}' has no catalog id and cannot be labelled be-<n>`);\n }\n return relation.catalogId;\n}\n\nfunction relationWithSource(source: string): CatalogRelation {\n const found = catalogRelations().find((row) => row.sources.includes(source));\n if (found === undefined) throw new Error(`bridge-specs: no relation has source '${source}'`);\n return found;\n}\n\nfunction evaluateAliased(relation: CatalogRelation, input: object): number {\n const record = input as Record<string, number | undefined>;\n const bound: Record<string, number> = {};\n for (const source of relation.sources) {\n const alias = (relation.aliases[source] ?? []).find((key) => record[key] !== undefined);\n const key = alias ?? (record[source] !== undefined ? source : undefined);\n if (key === undefined) throw new Error(`${relation.id}: missing ${source}`);\n const value = record[key];\n if (value === undefined) throw new Error(`${relation.id}: missing ${source}`);\n bound[source] = value;\n }\n return evaluateCatalogRelation(relation, bound);\n}\n\n/** Inputs of {@link SHAPIRO_DELAY_DIFF}: the mass and the two radii. @public */\nexport interface ShapiroInput {\n readonly M_kg: number;\n readonly R_far_m: number;\n readonly R_near_m: number;\n}\n\n/** Inputs of {@link PERIHELION_ADVANCE_DIFF}: mass, semi-major axis, eccentricity, optional period. @public */\nexport interface PerihelionInput {\n readonly M_kg: number;\n readonly a_m: number;\n /** Orbital eccentricity, 0 ≤ e < 1. A bare `e` is the elementary charge, so it is not this key. */\n readonly eccentricity: number;\n readonly T_yr?: number;\n}\n\n/** Inputs of {@link HAWKING_TEMPERATURE_DIFF}: the mass. @public */\nexport interface HawkingInput {\n readonly M_kg: number;\n}\n\n/** Inputs of {@link DECOHERENCE_RATE_DIFF}: the rate and the two couplings. @public */\nexport interface DecoherenceInput {\n readonly gamma0_per_s: number;\n readonly lambda: number;\n readonly lambda0: number;\n}\n\nconst shapiro = relationWithSource('far-radius');\nconst perihelion = relationWithSource('semi-major-axis');\nconst hawking = catalogRelations().find(\n (row) => row.target === 'hawking-temperature' && row.sources.length === 1 && row.sources[0] === 'mass',\n);\nif (hawking === undefined) throw new Error('bridge-specs: no Hawking temperature relation');\nconst decoherence = relationWithSource('system-environment-coupling');\n\n/** Shapiro delay. Differentiable in mass and the two radii. @public */\nexport const SHAPIRO_DELAY_DIFF: BridgeDiffSpec<ShapiroInput> = {\n bridgeId: catalogEdgeKey(requireCatalogId(shapiro)),\n name: 'Shapiro time delay',\n paramNames: ['M_kg', 'R_far_m', 'R_near_m'],\n defaults: {},\n evaluate: (input) => evaluateAliased(shapiro, input),\n};\n\n/** Perihelion advance in radians per orbit. @public */\nexport const PERIHELION_ADVANCE_DIFF: BridgeDiffSpec<PerihelionInput> = {\n bridgeId: catalogEdgeKey(requireCatalogId(perihelion)),\n name: 'Perihelion advance (radian per orbit)',\n paramNames: ['M_kg', 'a_m', 'eccentricity'],\n defaults: {},\n evaluate: (input) => evaluateAliased(perihelion, input),\n};\n\n/** Hawking temperature. Differentiable in mass. @public */\nexport const HAWKING_TEMPERATURE_DIFF: BridgeDiffSpec<HawkingInput> = {\n bridgeId: catalogEdgeKey(requireCatalogId(hawking)),\n name: 'Hawking temperature',\n paramNames: ['M_kg'],\n defaults: {},\n evaluate: (input) => evaluateAliased(hawking, input),\n};\n\n/** Decoherence rate. Differentiable in the rate and the two couplings. @public */\nexport const DECOHERENCE_RATE_DIFF: BridgeDiffSpec<DecoherenceInput> = {\n bridgeId: catalogEdgeKey(requireCatalogId(decoherence)),\n name: 'Decoherence rate',\n paramNames: ['gamma0_per_s', 'lambda', 'lambda0'],\n defaults: {},\n evaluate: (input) => evaluateAliased(decoherence, input),\n};\n\n/** Catalog relations this module differentiates. @public */\nexport const DIFFERENTIABLE_RELATIONS = [\n SHAPIRO_DELAY_DIFF,\n PERIHELION_ADVANCE_DIFF,\n HAWKING_TEMPERATURE_DIFF,\n DECOHERENCE_RATE_DIFF,\n] as const;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"algebra.js","sourceRoot":"","sources":["../../src/dimensional/algebra.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"algebra.js","sourceRoot":"","sources":["../../src/dimensional/algebra.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Dimensional algebra: per-base-exponent arithmetic.\n *\n * Operations follow standard dimensional analysis (Bridgman, \"Dimensional Analysis\", 1922):\n * - multiply: add exponents per base\n * - divide: subtract exponents per base\n * - power: scale exponents by the scalar `n`\n * - add/sub: permitted only when both operands have the same dimension\n *\n * @module dimensional/algebra\n */\n\nimport { Dimension, NAMED_DIMENSIONS } from './types.js';\nimport { DimensionMismatchError } from './errors.js';\n\n/**\n * Re-exported for callers that import the error from the algebra module.\n * The definition lives in `errors.ts`.\n *\n * @public\n */\nexport { DimensionMismatchError } from './errors.js';\n\nconst BASES = ['L', 'M', 'T', 'I', 'Theta', 'N', 'J'] as const;\ntype Base = typeof BASES[number];\n\n/** Product of two dimensions: exponents add per base. */\nexport function multiply(a: Dimension, b: Dimension): Dimension {\n const out = {} as Dimension;\n for (const base of BASES) {\n out[base as Base] = a[base as Base] + b[base as Base];\n }\n return out;\n}\n\n/** Quotient of two dimensions: exponents subtract per base. */\nexport function divide(a: Dimension, b: Dimension): Dimension {\n const out = {} as Dimension;\n for (const base of BASES) {\n out[base as Base] = a[base as Base] - b[base as Base];\n }\n return out;\n}\n\n/** Raise a dimension to a (possibly fractional) power: exponents scale by `n`. */\nexport function power(a: Dimension, n: number): Dimension {\n const out = {} as Dimension;\n for (const base of BASES) {\n out[base as Base] = a[base as Base] * n;\n }\n return out;\n}\n\n/**\n * Largest exponent difference still treated as equal. Physical dimension\n * exponents are integers or simple rationals (halves, thirds), so any genuine\n * distinction is ≥ ~1/3 — far above this tolerance, which only absorbs\n * floating-point round-off in fractional powers (v0.20 dimensionful `M^0.5`\n * reached by different op chains, e.g. 0.30000000000000004 vs 0.3).\n */\nexport const EXPONENT_TOL = 1e-9;\n\n/**\n * True iff two dimensions have equal exponents on every base, within\n * `EXPONENT_TOL` so floating-point round-off in fractional exponents does not\n * read as unequal.\n *\n * Unrolled over the 7 bases (no iterator / dynamic-key access) and\n * short-circuiting — `equals` is on the hot path (every `add`/`subtract`, and\n * `format`'s named-dimension scan calls it per entry). Stays distinct from\n * `linkage.ts`'s exact `dimEqual`: this one is tolerant by design (the v0.20\n * fractional-power round-off fix), so they are NOT the same predicate.\n */\nexport function equals(a: Dimension, b: Dimension): boolean {\n return (\n Math.abs(a.L - b.L) <= EXPONENT_TOL &&\n Math.abs(a.M - b.M) <= EXPONENT_TOL &&\n Math.abs(a.T - b.T) <= EXPONENT_TOL &&\n Math.abs(a.I - b.I) <= EXPONENT_TOL &&\n Math.abs(a.Theta - b.Theta) <= EXPONENT_TOL &&\n Math.abs(a.N - b.N) <= EXPONENT_TOL &&\n Math.abs(a.J - b.J) <= EXPONENT_TOL\n );\n}\n\n/** Dimensional sum: requires equal dimensions, else throws `DimensionMismatchError`. */\nexport function add(a: Dimension, b: Dimension): Dimension {\n if (!equals(a, b)) {\n throw new DimensionMismatchError(\n `Cannot add unlike dimensions: ${format(a)} + ${format(b)}`,\n a,\n b,\n );\n }\n return { ...a };\n}\n\n/** Dimensional difference: requires equal dimensions, else throws `DimensionMismatchError`. */\nexport function subtract(a: Dimension, b: Dimension): Dimension {\n if (!equals(a, b)) {\n throw new DimensionMismatchError(\n `Cannot subtract unlike dimensions: ${format(a)} - ${format(b)}`,\n a,\n b,\n );\n }\n return { ...a };\n}\n\n/**\n * Format a `Dimension` for human display.\n *\n * Strategy:\n * 1. If `d` matches a named SI dimension exactly, return e.g. \"[energy]\".\n * \"dimensionless\" is rendered as \"[1]\" for compactness.\n * 2. Otherwise emit the bracketed product form, e.g. \"[M L^2 T^-2]\".\n * Bases with exponent 0 are omitted; exponent 1 is written without \"^1\".\n */\nexport function format(d: Dimension): string {\n for (const [name, ref] of NAMED_DIMENSIONS) {\n if (equals(d, ref)) {\n if (name === 'dimensionless') return '[1]';\n return `[${name}]`;\n }\n }\n const parts: string[] = [];\n for (const base of BASES) {\n const exp = d[base as Base];\n if (exp === 0) continue;\n if (exp === 1) parts.push(base);\n else parts.push(`${base}^${exp}`);\n }\n if (parts.length === 0) return '[1]';\n return `[${parts.join(' ')}]`;\n}\n"]}
@@ -17,9 +17,10 @@ import type { Dimension } from './types.js';
17
17
  /** A symbol-leaf `ExprNode` carrying its name and SI dimension. */
18
18
  export declare function sym(name: string, dim: Dimension): ExprNode;
19
19
  /**
20
- * Build a `Dimension` from its first five base exponents. Arg order is
21
- * (L, M, T, **I**, **Θ**) — note I precedes Θ; the amount-of-substance (N) and
22
- * luminous-intensity (J) exponents default to 0.
20
+ * Build a `Dimension` from its base exponents. Arg order is
21
+ * (L, M, T, **I**, **Θ**, N, J) — note I precedes Θ; every omitted exponent
22
+ * is 0, so the amount-of-substance (N) and luminous-intensity (J) exponents
23
+ * are reachable from the one builder.
23
24
  */
24
- export declare function dim(L?: number, M?: number, T?: number, I?: number, Theta?: number): Dimension;
25
+ export declare function dim(L?: number, M?: number, T?: number, I?: number, Theta?: number, N?: number, J?: number): Dimension;
25
26
  //# sourceMappingURL=ast-builders.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast-builders.d.ts","sourceRoot":"","sources":["../../src/dimensional/ast-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,mEAAmE;AACnE,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,QAAQ,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,KAAK,SAAI,GAAG,SAAS,CAEpE"}
1
+ {"version":3,"file":"ast-builders.d.ts","sourceRoot":"","sources":["../../src/dimensional/ast-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,mEAAmE;AACnE,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,QAAQ,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,KAAK,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,GAAG,SAAS,CAElF"}
@@ -17,11 +17,12 @@ export function sym(name, dim) {
17
17
  return { kind: 'symbol', name, dim };
18
18
  }
19
19
  /**
20
- * Build a `Dimension` from its first five base exponents. Arg order is
21
- * (L, M, T, **I**, **Θ**) — note I precedes Θ; the amount-of-substance (N) and
22
- * luminous-intensity (J) exponents default to 0.
20
+ * Build a `Dimension` from its base exponents. Arg order is
21
+ * (L, M, T, **I**, **Θ**, N, J) — note I precedes Θ; every omitted exponent
22
+ * is 0, so the amount-of-substance (N) and luminous-intensity (J) exponents
23
+ * are reachable from the one builder.
23
24
  */
24
- export function dim(L = 0, M = 0, T = 0, I = 0, Theta = 0) {
25
- return { L, M, T, I, Theta, N: 0, J: 0 };
25
+ export function dim(L = 0, M = 0, T = 0, I = 0, Theta = 0, N = 0, J = 0) {
26
+ return { L, M, T, I, Theta, N, J };
26
27
  }
27
28
  //# sourceMappingURL=ast-builders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast-builders.js","sourceRoot":"","sources":["../../src/dimensional/ast-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,mEAAmE;AACnE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,GAAc;IAC9C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;IACvD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"ast-builders.js","sourceRoot":"","sources":["../../src/dimensional/ast-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,mEAAmE;AACnE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,GAAc;IAC9C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;IACrE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACrC,CAAC","sourcesContent":["/**\n * Tiny pure builders for dimensional ASTs — `sym` (a symbol leaf) and `dim`\n * (a `Dimension` from its first five base exponents). These were copy-pasted\n * across the bridge-equation helpers, the canonical L1 builder, the\n * composition layer, and the formula transpiler; this module is their single\n * source of truth.\n *\n * Deliberately depends only on TYPES (`ExprNode`, `Dimension`), so it has no\n * runtime imports and can be imported from any layer without risking a cycle.\n * `_be-helpers` and `_l1-build` re-export `sym`/`dim` for their existing\n * importers, so most call sites are unchanged.\n *\n * @module dimensional/ast-builders\n */\n\nimport type { ExprNode } from './validator.js';\nimport type { Dimension } from './types.js';\n\n/** A symbol-leaf `ExprNode` carrying its name and SI dimension. */\nexport function sym(name: string, dim: Dimension): ExprNode {\n return { kind: 'symbol', name, dim };\n}\n\n/**\n * Build a `Dimension` from its base exponents. Arg order is\n * (L, M, T, **I**, **Θ**, N, J) — note I precedes Θ; every omitted exponent\n * is 0, so the amount-of-substance (N) and luminous-intensity (J) exponents\n * are reachable from the one builder.\n */\nexport function dim(L = 0, M = 0, T = 0, I = 0, Theta = 0, N = 0, J = 0): Dimension {\n return { L, M, T, I, Theta, N, J };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ast-types.js","sourceRoot":"","sources":["../../src/dimensional/ast-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
1
+ {"version":3,"file":"ast-types.js","sourceRoot":"","sources":["../../src/dimensional/ast-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG","sourcesContent":["/**\n * The dimensional AST type system — `ExprNode` and every node/index interface\n * it unions, in ONE leaf module.\n *\n * Previously `ExprNode` lived in `validator.ts` and pulled its member node types\n * from ~9 sibling modules (`tensor`, `metric-validators`, `connection-\n * validators`, `curvature`, …). Two of those (`tensor`, `curvature`) imported\n * `ExprNode` back, forming type-only cycles, and several node interfaces used\n * `of: unknown` casts to dodge importing `ExprNode`. Consolidating the *types*\n * here (this module imports only `types.ts` + the leaf `curvature-composite.ts`,\n * so it has no back-edges) breaks both cycles and lets the derivative nodes type\n * `of`/`wrt` as real `ExprNode`.\n *\n * Each origin module now re-exports its types from here (so existing importers\n * are unchanged) and keeps only its validation FUNCTIONS.\n *\n * @module dimensional/ast-types\n */\n\nimport type { Dimension } from './types.js';\nimport type { CurvatureCompositeNode } from './curvature-composite.js';\n\n// ── index types ─────────────────────────────────────────────────────────────\n\nexport type Variance = 'upper' | 'lower';\nexport type Role = 'coordinate' | 'field' | 'constant';\n\nexport interface TensorIndex {\n readonly label: string;\n readonly variance: Variance;\n}\n\n/** A strictly-lower tensor index. */\nexport interface CovariantIndex {\n readonly label: string;\n readonly variance: 'lower';\n}\n\n/** A strictly-upper tensor index. */\nexport interface UpperIndex {\n readonly label: string;\n readonly variance: 'upper';\n}\n\n// ── transcendental functions ────────────────────────────────────────────────\n\n/**\n * Elementwise transcendental functions usable in a `transcendental` node. All\n * take a DIMENSIONLESS argument and return a DIMENSIONLESS result. (`sqrt`/`cbrt`\n * are excluded — they produce fractional dimensions.)\n */\nexport type TranscendentalFn =\n | 'exp'\n | 'ln'\n | 'log2'\n | 'log10'\n | 'sin'\n | 'cos'\n | 'tan'\n | 'sinh'\n | 'cosh'\n | 'tanh';\n\n// ── tensor nodes ────────────────────────────────────────────────────────────\n\nexport interface TensorSymbolNode {\n readonly kind: 'tensor-symbol';\n readonly name: string;\n readonly indices: ReadonlyArray<TensorIndex>;\n readonly dim: Dimension;\n /** Semantic classification (default 'field'). Structural metadata only. */\n readonly role?: Role;\n /** v0.3.5 numerical pderiv strategy when this is a partial-derivative `of`\n * operand (default 'symbolic'). */\n readonly numericalForm?: 'symbolic' | 'numerical-fn' | 'grid';\n}\n\nexport interface TensorProductNode {\n readonly kind: 'tensor-product';\n readonly args: ReadonlyArray<ExprNode>;\n}\n\n// ── metric nodes ────────────────────────────────────────────────────────────\n\nexport interface MetricTensorNode {\n readonly kind: 'metric-tensor';\n readonly name: string;\n readonly indices: ReadonlyArray<TensorIndex>;\n readonly signature: string;\n readonly dim: Dimension;\n /** v0.4.0 numerical-lowering hint for ∂g (default 'computed'). */\n readonly derivativeStrategy?: 'computed' | 'zero' | 'supplied';\n}\n\nexport interface KroneckerDeltaNode {\n readonly kind: 'kronecker-delta';\n readonly indices: ReadonlyArray<TensorIndex>;\n readonly dim: Dimension;\n}\n\nexport interface TensorPartialDerivativeNode {\n readonly kind: 'tensor-partial-derivative';\n readonly of: ExprNode;\n readonly wrt: ExprNode;\n readonly wrtIndex: CovariantIndex;\n}\n\n// ── connection / curvature nodes ────────────────────────────────────────────\n\n/**\n * AST node for the covariant derivative ∇_μ of a tensor expression.\n *\n * @public\n */\nexport interface CovariantDerivativeNode {\n readonly kind: 'covariant-derivative';\n readonly of: ExprNode;\n readonly wrt: ExprNode;\n readonly wrtIndex: CovariantIndex;\n readonly gLower: MetricTensorNode;\n readonly gInverse: MetricTensorNode;\n}\n\nexport type RiemannTensorNode = CurvatureCompositeNode<'riemann-tensor', {\n readonly upperIndex: UpperIndex;\n readonly lowerIndices: readonly [CovariantIndex, CovariantIndex, CovariantIndex];\n readonly gLower: MetricTensorNode;\n readonly gInverse: MetricTensorNode;\n readonly xCoord: TensorSymbolNode;\n}>;\n\n/**\n * AST node for the Ricci tensor R_μν, built by `ricci`.\n *\n * @public\n */\nexport type RicciTensorNode = CurvatureCompositeNode<'ricci-tensor', {\n /** The Riemann tensor, contracted on its upper index and its second lower index: R_μν = R^λ_{μλν}. */\n readonly riemann: RiemannTensorNode;\n}>;\n\n/**\n * AST node for the Einstein tensor G_μν, built by `einstein`.\n *\n * @public\n */\nexport type EinsteinTensorNode = CurvatureCompositeNode<'einstein-tensor', {\n /** The Riemann tensor whose contraction yields the inner Ricci R_μν. */\n readonly riemann: RiemannTensorNode;\n /** Lower metric g_μν — supplies the `½ R g_μν` subtraction tensor. */\n readonly gLower: MetricTensorNode;\n /** Upper metric g^μν — supplies the scalar trace `R = g^μν R_μν`. */\n readonly gInverse: MetricTensorNode;\n}>;\n\n/**\n * AST node for the cyclic second-Bianchi-identity residual, built by `bianchiResidual`.\n *\n * @public\n */\nexport type BianchiResidualNode = CurvatureCompositeNode<'bianchi-residual', {\n /** The Riemann tensor whose cyclic-derivative identity is checked. */\n readonly riemann: RiemannTensorNode;\n}>;\n\nexport type WeylTensorNode = CurvatureCompositeNode<'weyl-tensor', {\n /** Metric g_{μν} (both-lower). Present for numerical lowering consumers. */\n readonly metric: MetricTensorNode;\n /** Contravariant (upper) index ρ. */\n readonly upperIndex: UpperIndex;\n /** Three covariant (lower) indices [σ, μ, ν]. */\n readonly lowerIndices: readonly [CovariantIndex, CovariantIndex, CovariantIndex];\n /** Dimensional signature of each component: [L⁻²], same as Riemann. */\n readonly componentDim: Dimension;\n}>;\n\n/**\n * AST node for the Kretschmann scalar K = R_{ρσμν} R^{ρσμν}.\n *\n * @public\n */\nexport type KretschmannScalarNode = CurvatureCompositeNode<'kretschmann-scalar', {\n /** Riemann tensor R^ρ_{σμν}. */\n readonly riemann: RiemannTensorNode;\n /** Metric (both-lower preferred). */\n readonly metric: MetricTensorNode;\n}>;\n\n// ── Killing / stress-energy / field-equation nodes ──────────────────────────\n\nexport interface KillingVectorNode {\n readonly kind: 'killing-vector';\n readonly vector: TensorSymbolNode;\n readonly metric: MetricTensorNode;\n}\n\nexport interface ConservedChargeNode {\n readonly kind: 'conserved-charge';\n /** The Killing vector ξ^μ (rank-1, upper variance). */\n readonly killing: KillingVectorNode;\n /** The covariant momentum p_μ (rank-1, lower variance), sharing the Killing\n * vector's index label so ξ^μ p_μ is well-formed. */\n readonly momentum: TensorSymbolNode;\n}\n\nexport interface StressEnergyTensorNode {\n readonly kind: 'stress-energy';\n readonly symbol: 'T';\n readonly indices: readonly [CovariantIndex, CovariantIndex];\n readonly symmetry: 'symmetric';\n readonly componentDim: Dimension;\n}\n\nexport interface CosmologicalConstantNode {\n readonly kind: 'cosmological-constant';\n readonly symbol: 'Λ';\n readonly dim: Dimension; // [L⁻²]\n readonly value?: number; // optional numeric value (e.g., 1.1056e-52 m⁻²)\n}\n\n/**\n * AST node for the Einstein field equation G_μν + Λ g_μν = (8πG/c⁴) T_μν.\n *\n * @public\n */\nexport interface EinsteinFieldEquationNode {\n readonly kind: 'einstein-equation';\n readonly lhs: EinsteinTensorNode;\n readonly cosmological: CosmologicalConstantNode | null;\n readonly metric: MetricTensorNode;\n readonly rhs: StressEnergyTensorNode;\n readonly coupling: 'einstein';\n}\n\n// ── the ExprNode union ──────────────────────────────────────────────────────\n\nexport type ExprNode =\n | { kind: 'symbol'; name: string; dim: Dimension }\n | { kind: 'op'; op: '+' | '-' | '*' | '/' | '^'; args: ExprNode[] }\n // ∫ integrand d(over); optional lower/upper bounds make it a DEFINITE integral.\n | { kind: 'integral'; over: ExprNode; integrand: ExprNode; lower?: ExprNode; upper?: ExprNode }\n | { kind: 'derivative'; of: ExprNode; wrt: ExprNode }\n // Dirac-δ correlator: ∫δ(x)dx=1 ⟹ [δ(x)]=[x]⁻¹.\n | { kind: 'dirac-delta'; arg: ExprNode }\n // Functional derivative δF/δφ \"over\" the measure dμ: [δF/δφ]=[F]/([φ]·[μ]).\n | { kind: 'variational-derivative'; functional: ExprNode; field: ExprNode; over: ExprNode }\n // Elementwise transcendental of a DIMENSIONLESS arg → DIMENSIONLESS result.\n | { kind: 'transcendental'; fn: TranscendentalFn; arg: ExprNode }\n // Absolute value |x| — dimension-PRESERVING (unlike the transcendentals).\n | { kind: 'abs'; arg: ExprNode }\n | TensorSymbolNode\n | TensorProductNode\n | MetricTensorNode\n | KroneckerDeltaNode\n | TensorPartialDerivativeNode\n | CovariantDerivativeNode\n | RiemannTensorNode\n | RicciTensorNode\n | EinsteinTensorNode\n | BianchiResidualNode\n | KillingVectorNode\n | ConservedChargeNode\n | StressEnergyTensorNode\n | CosmologicalConstantNode\n | EinsteinFieldEquationNode\n | WeylTensorNode\n | KretschmannScalarNode;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-check.d.ts","sourceRoot":"","sources":["../../src/dimensional/bridge-check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAiB/C,mDAAmD;AACnD,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAkB,CAAC;AAE3F;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GACb,SAAS,GAAG,IAAI,CAQlB"}
1
+ {"version":3,"file":"bridge-check.d.ts","sourceRoot":"","sources":["../../src/dimensional/bridge-check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAiB/C,mDAAmD;AACnD,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAkB,CAAC;AAE3F;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GACb,SAAS,GAAG,IAAI,CAQlB"}
@@ -4,14 +4,12 @@
4
4
  *
5
5
  * @module dimensional/bridge-check
6
6
  */
7
- import { readFileSync } from 'node:fs';
8
- import { dirname, join } from 'node:path';
9
- import { fileURLToPath } from 'node:url';
7
+ import { checkedDataFile } from '../core/data-file.js';
10
8
  import { equals } from './algebra.js';
11
9
  import { validate } from './validator.js';
12
10
  function loadExpected() {
13
- const path = join(dirname(fileURLToPath(import.meta.url)), '../../data/bridge-catalog.json');
14
- const parsed = JSON.parse(readFileSync(path, 'utf8'));
11
+ // The same checked read as `bridges/catalog-load.ts`; this layer cannot import that module.
12
+ const parsed = checkedDataFile('bridge-catalog.json');
15
13
  const map = new Map();
16
14
  for (const entry of parsed.entries) {
17
15
  if (entry.dimension !== undefined)