universal-physics-tensor 9.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 (824) hide show
  1. package/README.md +19 -16
  2. package/data/atlas/atlas.json +55 -44
  3. package/data/atlas/atlas.jsonld +1 -1
  4. package/data/atlas/diffusion.json +19 -18
  5. package/data/atlas/oscillators.json +15 -10
  6. package/data/atlas/waves.json +23 -18
  7. package/data/bridge-catalog.json +886 -1473
  8. package/data/bridge-catalog.schema.json +349 -132
  9. package/data/quantities.json +53 -19
  10. package/data/schemas/atlas-record.v0.json +184 -46
  11. package/data/units.json +33 -4
  12. package/dist/atlas/applicability.d.ts.map +1 -1
  13. package/dist/atlas/applicability.js +14 -3
  14. package/dist/atlas/applicability.js.map +1 -1
  15. package/dist/atlas/association.js.map +1 -1
  16. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
  17. package/dist/atlas/benchmark/backend-shapes.js +5 -1
  18. package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
  19. package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
  20. package/dist/atlas/benchmark/baselines.js +8 -0
  21. package/dist/atlas/benchmark/baselines.js.map +1 -1
  22. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +3 -2
  23. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  24. package/dist/atlas/benchmark/hybrid-retrieval.js +15 -8
  25. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  26. package/dist/atlas/benchmark/leakage.js.map +1 -1
  27. package/dist/atlas/benchmark/loader.js.map +1 -1
  28. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
  29. package/dist/atlas/benchmark/run-atlas.js +14 -2
  30. package/dist/atlas/benchmark/run-atlas.js.map +1 -1
  31. package/dist/atlas/benchmark/stats.d.ts +1 -1
  32. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  33. package/dist/atlas/benchmark/stats.js +1 -1
  34. package/dist/atlas/benchmark/stats.js.map +1 -1
  35. package/dist/atlas/benchmark/study.js.map +1 -1
  36. package/dist/atlas/benchmark/types.js.map +1 -1
  37. package/dist/atlas/bridge-record.d.ts +4 -4
  38. package/dist/atlas/bridge-record.d.ts.map +1 -1
  39. package/dist/atlas/bridge-record.js +6 -6
  40. package/dist/atlas/bridge-record.js.map +1 -1
  41. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  42. package/dist/atlas/chain-pipeline.d.ts +0 -11
  43. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  44. package/dist/atlas/chain-pipeline.js +5 -16
  45. package/dist/atlas/chain-pipeline.js.map +1 -1
  46. package/dist/atlas/composition-table.js.map +1 -1
  47. package/dist/atlas/conventions.js.map +1 -1
  48. package/dist/atlas/coverage.d.ts +2 -2
  49. package/dist/atlas/coverage.js.map +1 -1
  50. package/dist/atlas/derivation.js.map +1 -1
  51. package/dist/atlas/derive-evidence.d.ts +6 -4
  52. package/dist/atlas/derive-evidence.d.ts.map +1 -1
  53. package/dist/atlas/derive-evidence.js +7 -2
  54. package/dist/atlas/derive-evidence.js.map +1 -1
  55. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  56. package/dist/atlas/diffusion/bridges-closure.js +0 -5
  57. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  58. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  59. package/dist/atlas/diffusion/bridges.js +0 -3
  60. package/dist/atlas/diffusion/bridges.js.map +1 -1
  61. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  62. package/dist/atlas/diffusion/index.d.ts +1 -1
  63. package/dist/atlas/diffusion/index.d.ts.map +1 -1
  64. package/dist/atlas/diffusion/index.js.map +1 -1
  65. package/dist/atlas/diffusion/models.js.map +1 -1
  66. package/dist/atlas/diffusion/numerics.js.map +1 -1
  67. package/dist/atlas/error-algebra.d.ts +6 -0
  68. package/dist/atlas/error-algebra.d.ts.map +1 -1
  69. package/dist/atlas/error-algebra.js +26 -0
  70. package/dist/atlas/error-algebra.js.map +1 -1
  71. package/dist/atlas/export.d.ts +18 -2
  72. package/dist/atlas/export.d.ts.map +1 -1
  73. package/dist/atlas/export.js +9 -3
  74. package/dist/atlas/export.js.map +1 -1
  75. package/dist/atlas/families.d.ts +19 -2
  76. package/dist/atlas/families.d.ts.map +1 -1
  77. package/dist/atlas/families.js +26 -3
  78. package/dist/atlas/families.js.map +1 -1
  79. package/dist/atlas/family.d.ts +27 -0
  80. package/dist/atlas/family.d.ts.map +1 -0
  81. package/dist/atlas/family.js +12 -0
  82. package/dist/atlas/family.js.map +1 -0
  83. package/dist/atlas/index.d.ts +3 -2
  84. package/dist/atlas/index.d.ts.map +1 -1
  85. package/dist/atlas/index.js +2 -1
  86. package/dist/atlas/index.js.map +1 -1
  87. package/dist/atlas/link-prediction.d.ts +1 -1
  88. package/dist/atlas/link-prediction.d.ts.map +1 -1
  89. package/dist/atlas/link-prediction.js.map +1 -1
  90. package/dist/atlas/model.js.map +1 -1
  91. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  92. package/dist/atlas/oscillators/bridges-coarse.js +0 -1
  93. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  94. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  95. package/dist/atlas/oscillators/bridges-exact.js +0 -3
  96. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  97. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  98. package/dist/atlas/oscillators/bridges-limits.js +0 -2
  99. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  100. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  101. package/dist/atlas/oscillators/index.d.ts +1 -16
  102. package/dist/atlas/oscillators/index.d.ts.map +1 -1
  103. package/dist/atlas/oscillators/index.js.map +1 -1
  104. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  105. package/dist/atlas/oscillators/models.js.map +1 -1
  106. package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
  107. package/dist/atlas/oscillators/norm-transport.js.map +1 -1
  108. package/dist/atlas/oscillators/norms.js.map +1 -1
  109. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  110. package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
  111. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  112. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  113. package/dist/atlas/oscillators/rejections.js.map +1 -1
  114. package/dist/atlas/path-bound.js.map +1 -1
  115. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  116. package/dist/atlas/physjs-ref.d.ts +79 -45
  117. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  118. package/dist/atlas/physjs-ref.js +143 -62
  119. package/dist/atlas/physjs-ref.js.map +1 -1
  120. package/dist/atlas/physjs-reviewed.d.ts +31 -0
  121. package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
  122. package/dist/atlas/physjs-reviewed.js +194 -0
  123. package/dist/atlas/physjs-reviewed.js.map +1 -0
  124. package/dist/atlas/poster/associations.js.map +1 -1
  125. package/dist/atlas/poster/derivations.js.map +1 -1
  126. package/dist/atlas/poster/statements.js.map +1 -1
  127. package/dist/atlas/proof-target.js.map +1 -1
  128. package/dist/atlas/public.d.ts +2 -1
  129. package/dist/atlas/public.d.ts.map +1 -1
  130. package/dist/atlas/public.js +2 -1
  131. package/dist/atlas/public.js.map +1 -1
  132. package/dist/atlas/regime.js.map +1 -1
  133. package/dist/atlas/serialize.d.ts +18 -12
  134. package/dist/atlas/serialize.d.ts.map +1 -1
  135. package/dist/atlas/serialize.js +28 -18
  136. package/dist/atlas/serialize.js.map +1 -1
  137. package/dist/atlas/statement.js.map +1 -1
  138. package/dist/atlas/translation-registry.js.map +1 -1
  139. package/dist/atlas/translation.js.map +1 -1
  140. package/dist/atlas/types.d.ts +9 -2
  141. package/dist/atlas/types.d.ts.map +1 -1
  142. package/dist/atlas/types.js +1 -1
  143. package/dist/atlas/types.js.map +1 -1
  144. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  145. package/dist/atlas/waves/bridges-closure.js +0 -3
  146. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  147. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  148. package/dist/atlas/waves/bridges.js +0 -4
  149. package/dist/atlas/waves/bridges.js.map +1 -1
  150. package/dist/atlas/waves/index.d.ts +1 -1
  151. package/dist/atlas/waves/index.d.ts.map +1 -1
  152. package/dist/atlas/waves/index.js.map +1 -1
  153. package/dist/atlas/waves/models.js.map +1 -1
  154. package/dist/atlas/waves/numerics.js.map +1 -1
  155. package/dist/atlas/witness-artifact.js.map +1 -1
  156. package/dist/atlas/witness-dominance.d.ts +4 -3
  157. package/dist/atlas/witness-dominance.d.ts.map +1 -1
  158. package/dist/atlas/witness-dominance.js +15 -5
  159. package/dist/atlas/witness-dominance.js.map +1 -1
  160. package/dist/atlas/witness-numeric.d.ts +8 -4
  161. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  162. package/dist/atlas/witness-numeric.js +27 -2
  163. package/dist/atlas/witness-numeric.js.map +1 -1
  164. package/dist/atlas/witness-result.d.ts +7 -1
  165. package/dist/atlas/witness-result.d.ts.map +1 -1
  166. package/dist/atlas/witness-result.js.map +1 -1
  167. package/dist/atlas/witness-specs.js.map +1 -1
  168. package/dist/atlas/witness-symbolic.js.map +1 -1
  169. package/dist/atlas/witnesses/quantum-support.js.map +1 -1
  170. package/dist/bridges/caller-table.d.ts +1 -1
  171. package/dist/bridges/caller-table.d.ts.map +1 -1
  172. package/dist/bridges/caller-table.js.map +1 -1
  173. package/dist/bridges/carrier-sign.d.ts.map +1 -1
  174. package/dist/bridges/carrier-sign.js +8 -3
  175. package/dist/bridges/carrier-sign.js.map +1 -1
  176. package/dist/bridges/catalog-adapter.d.ts +12 -3
  177. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  178. package/dist/bridges/catalog-adapter.js +17 -9
  179. package/dist/bridges/catalog-adapter.js.map +1 -1
  180. package/dist/bridges/catalog-load.d.ts +12 -2
  181. package/dist/bridges/catalog-load.d.ts.map +1 -1
  182. package/dist/bridges/catalog-load.js +171 -8
  183. package/dist/bridges/catalog-load.js.map +1 -1
  184. package/dist/bridges/catalog-types.d.ts +48 -24
  185. package/dist/bridges/catalog-types.d.ts.map +1 -1
  186. package/dist/bridges/catalog-types.js.map +1 -1
  187. package/dist/bridges/coefficient-statement.js +1 -5
  188. package/dist/bridges/coefficient-statement.js.map +1 -1
  189. package/dist/bridges/confrontation-coverage.js.map +1 -1
  190. package/dist/bridges/confrontations.d.ts +1 -1
  191. package/dist/bridges/confrontations.d.ts.map +1 -1
  192. package/dist/bridges/confrontations.js +1 -1
  193. package/dist/bridges/confrontations.js.map +1 -1
  194. package/dist/bridges/evaluation-errors.d.ts +15 -2
  195. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  196. package/dist/bridges/evaluation-errors.js +20 -2
  197. package/dist/bridges/evaluation-errors.js.map +1 -1
  198. package/dist/bridges/evaluator-inputs.js.map +1 -1
  199. package/dist/bridges/evaluators.d.ts +17 -2
  200. package/dist/bridges/evaluators.d.ts.map +1 -1
  201. package/dist/bridges/evaluators.js +49 -16
  202. package/dist/bridges/evaluators.js.map +1 -1
  203. package/dist/bridges/expr-parse.d.ts +27 -4
  204. package/dist/bridges/expr-parse.d.ts.map +1 -1
  205. package/dist/bridges/expr-parse.js +90 -10
  206. package/dist/bridges/expr-parse.js.map +1 -1
  207. package/dist/bridges/holds.d.ts +5 -1
  208. package/dist/bridges/holds.d.ts.map +1 -1
  209. package/dist/bridges/holds.js +18 -3
  210. package/dist/bridges/holds.js.map +1 -1
  211. package/dist/bridges/index.d.ts +15 -14
  212. package/dist/bridges/index.d.ts.map +1 -1
  213. package/dist/bridges/index.js +14 -15
  214. package/dist/bridges/index.js.map +1 -1
  215. package/dist/bridges/input-contract.js.map +1 -1
  216. package/dist/bridges/membership.d.ts +5 -3
  217. package/dist/bridges/membership.d.ts.map +1 -1
  218. package/dist/bridges/membership.js +5 -6
  219. package/dist/bridges/membership.js.map +1 -1
  220. package/dist/bridges/notices.js.map +1 -1
  221. package/dist/bridges/observations/types.js.map +1 -1
  222. package/dist/bridges/rejected.d.ts +11 -17
  223. package/dist/bridges/rejected.d.ts.map +1 -1
  224. package/dist/bridges/rejected.js +13 -68
  225. package/dist/bridges/rejected.js.map +1 -1
  226. package/dist/bridges/relation-eval.d.ts +5 -6
  227. package/dist/bridges/relation-eval.d.ts.map +1 -1
  228. package/dist/bridges/relation-eval.js +9 -38
  229. package/dist/bridges/relation-eval.js.map +1 -1
  230. package/dist/bridges/rhs-registry.js.map +1 -1
  231. package/dist/bridges/sensitivity.d.ts +11 -3
  232. package/dist/bridges/sensitivity.d.ts.map +1 -1
  233. package/dist/bridges/sensitivity.js +24 -10
  234. package/dist/bridges/sensitivity.js.map +1 -1
  235. package/dist/bridges/tensor-index.js.map +1 -1
  236. package/dist/bridges/types.d.ts +1 -7
  237. package/dist/bridges/types.d.ts.map +1 -1
  238. package/dist/bridges/types.js +1 -4
  239. package/dist/bridges/types.js.map +1 -1
  240. package/dist/canonical/canonical-equation.js.map +1 -1
  241. package/dist/canonical/dimensional-fields.js.map +1 -1
  242. package/dist/canonical/entries/_l1-build.js.map +1 -1
  243. package/dist/canonical/entries/atomic.js.map +1 -1
  244. package/dist/canonical/entries/condensed-matter.js +4 -4
  245. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  246. package/dist/canonical/entries/dimensional-classics.js +2 -2
  247. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  248. package/dist/canonical/entries/electromagnetism.js +2 -2
  249. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  250. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  251. package/dist/canonical/entries/mechanics.js.map +1 -1
  252. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  253. package/dist/canonical/entries/nonmonomial.js +29 -22
  254. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  255. package/dist/canonical/entries/relativity.js.map +1 -1
  256. package/dist/canonical/entries/statistical-mechanics.js +5 -5
  257. package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
  258. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  259. package/dist/canonical/linkage.d.ts +29 -4
  260. package/dist/canonical/linkage.d.ts.map +1 -1
  261. package/dist/canonical/linkage.js +31 -29
  262. package/dist/canonical/linkage.js.map +1 -1
  263. package/dist/canonical/normal-form.d.ts +0 -8
  264. package/dist/canonical/normal-form.d.ts.map +1 -1
  265. package/dist/canonical/normal-form.js +17 -12
  266. package/dist/canonical/normal-form.js.map +1 -1
  267. package/dist/canonical/registry.js.map +1 -1
  268. package/dist/canonical/residual.js.map +1 -1
  269. package/dist/canonical/seed-l-layer.d.ts +7 -1
  270. package/dist/canonical/seed-l-layer.d.ts.map +1 -1
  271. package/dist/canonical/seed-l-layer.js +7 -1
  272. package/dist/canonical/seed-l-layer.js.map +1 -1
  273. package/dist/canonical/structural.d.ts +21 -0
  274. package/dist/canonical/structural.d.ts.map +1 -1
  275. package/dist/canonical/structural.js +24 -4
  276. package/dist/canonical/structural.js.map +1 -1
  277. package/dist/cases/brownian-sphere.js +4 -4
  278. package/dist/cases/brownian-sphere.js.map +1 -1
  279. package/dist/cases/damped-resonator.js +2 -2
  280. package/dist/cases/damped-resonator.js.map +1 -1
  281. package/dist/cases/index.js.map +1 -1
  282. package/dist/cases/kepler-rv.js.map +1 -1
  283. package/dist/cases/lumped-cooling.js +1 -1
  284. package/dist/cases/lumped-cooling.js.map +1 -1
  285. package/dist/cases/quadrature.js.map +1 -1
  286. package/dist/cases/resistor-noise.js +3 -3
  287. package/dist/cases/resistor-noise.js.map +1 -1
  288. package/dist/cases/skin-depth.js.map +1 -1
  289. package/dist/cases/types.js.map +1 -1
  290. package/dist/cli/args.d.ts +7 -2
  291. package/dist/cli/args.d.ts.map +1 -1
  292. package/dist/cli/args.js +18 -2
  293. package/dist/cli/args.js.map +1 -1
  294. package/dist/cli/bindings.d.ts +13 -0
  295. package/dist/cli/bindings.d.ts.map +1 -0
  296. package/dist/cli/bindings.js +32 -0
  297. package/dist/cli/bindings.js.map +1 -0
  298. package/dist/cli/closed-form-range.js.map +1 -1
  299. package/dist/cli/command.js.map +1 -1
  300. package/dist/cli/commands/_atlas-map.d.ts +3 -3
  301. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  302. package/dist/cli/commands/_atlas-map.js +43 -18
  303. package/dist/cli/commands/_atlas-map.js.map +1 -1
  304. package/dist/cli/commands/_atlas-route.js.map +1 -1
  305. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  306. package/dist/cli/commands/_discovery-opts.js +42 -7
  307. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  308. package/dist/cli/commands/atlas.d.ts.map +1 -1
  309. package/dist/cli/commands/atlas.js +1 -3
  310. package/dist/cli/commands/atlas.js.map +1 -1
  311. package/dist/cli/commands/audit.d.ts.map +1 -1
  312. package/dist/cli/commands/audit.js +13 -20
  313. package/dist/cli/commands/audit.js.map +1 -1
  314. package/dist/cli/commands/axes.js.map +1 -1
  315. package/dist/cli/commands/candidates.d.ts.map +1 -1
  316. package/dist/cli/commands/candidates.js +16 -8
  317. package/dist/cli/commands/candidates.js.map +1 -1
  318. package/dist/cli/commands/canonical.js.map +1 -1
  319. package/dist/cli/commands/chain.js +1 -1
  320. package/dist/cli/commands/chain.js.map +1 -1
  321. package/dist/cli/commands/confront.d.ts.map +1 -1
  322. package/dist/cli/commands/confront.js +22 -14
  323. package/dist/cli/commands/confront.js.map +1 -1
  324. package/dist/cli/commands/connectors.js.map +1 -1
  325. package/dist/cli/commands/coverage.js.map +1 -1
  326. package/dist/cli/commands/derive.d.ts.map +1 -1
  327. package/dist/cli/commands/derive.js +42 -17
  328. package/dist/cli/commands/derive.js.map +1 -1
  329. package/dist/cli/commands/discover.d.ts.map +1 -1
  330. package/dist/cli/commands/discover.js +15 -9
  331. package/dist/cli/commands/discover.js.map +1 -1
  332. package/dist/cli/commands/eval.d.ts.map +1 -1
  333. package/dist/cli/commands/eval.js +13 -10
  334. package/dist/cli/commands/eval.js.map +1 -1
  335. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  336. package/dist/cli/commands/evaluate.js +53 -31
  337. package/dist/cli/commands/evaluate.js.map +1 -1
  338. package/dist/cli/commands/explain.d.ts.map +1 -1
  339. package/dist/cli/commands/explain.js +14 -7
  340. package/dist/cli/commands/explain.js.map +1 -1
  341. package/dist/cli/commands/frontier.js.map +1 -1
  342. package/dist/cli/commands/ground.d.ts.map +1 -1
  343. package/dist/cli/commands/ground.js +40 -10
  344. package/dist/cli/commands/ground.js.map +1 -1
  345. package/dist/cli/commands/index.js.map +1 -1
  346. package/dist/cli/commands/map.d.ts.map +1 -1
  347. package/dist/cli/commands/map.js +82 -89
  348. package/dist/cli/commands/map.js.map +1 -1
  349. package/dist/cli/commands/metric.d.ts.map +1 -1
  350. package/dist/cli/commands/metric.js +53 -18
  351. package/dist/cli/commands/metric.js.map +1 -1
  352. package/dist/cli/commands/path.js +4 -4
  353. package/dist/cli/commands/path.js.map +1 -1
  354. package/dist/cli/commands/predict.js.map +1 -1
  355. package/dist/cli/commands/priority.js.map +1 -1
  356. package/dist/cli/commands/probe.d.ts.map +1 -1
  357. package/dist/cli/commands/probe.js +50 -26
  358. package/dist/cli/commands/probe.js.map +1 -1
  359. package/dist/cli/commands/recover.js +1 -1
  360. package/dist/cli/commands/recover.js.map +1 -1
  361. package/dist/cli/commands/regime.d.ts +5 -4
  362. package/dist/cli/commands/regime.d.ts.map +1 -1
  363. package/dist/cli/commands/regime.js +24 -26
  364. package/dist/cli/commands/regime.js.map +1 -1
  365. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  366. package/dist/cli/commands/retrieve.js +22 -14
  367. package/dist/cli/commands/retrieve.js.map +1 -1
  368. package/dist/cli/commands/search.d.ts.map +1 -1
  369. package/dist/cli/commands/search.js +8 -4
  370. package/dist/cli/commands/search.js.map +1 -1
  371. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  372. package/dist/cli/commands/symbolic.js +13 -9
  373. package/dist/cli/commands/symbolic.js.map +1 -1
  374. package/dist/cli/commands/testplan.js +1 -1
  375. package/dist/cli/commands/testplan.js.map +1 -1
  376. package/dist/cli/conventions.js.map +1 -1
  377. package/dist/cli/determination.js.map +1 -1
  378. package/dist/cli/errors.js.map +1 -1
  379. package/dist/cli/euler-guard.js.map +1 -1
  380. package/dist/cli/eval-numbers.js.map +1 -1
  381. package/dist/cli/expr-print.d.ts +29 -2
  382. package/dist/cli/expr-print.d.ts.map +1 -1
  383. package/dist/cli/expr-print.js +46 -2
  384. package/dist/cli/expr-print.js.map +1 -1
  385. package/dist/cli/flag-help.js.map +1 -1
  386. package/dist/cli/graphs.js.map +1 -1
  387. package/dist/cli/library-defaults.d.ts +19 -0
  388. package/dist/cli/library-defaults.d.ts.map +1 -0
  389. package/dist/cli/library-defaults.js +22 -0
  390. package/dist/cli/library-defaults.js.map +1 -0
  391. package/dist/cli/main.js +7 -3
  392. package/dist/cli/main.js.map +1 -1
  393. package/dist/cli/map-evidence.js.map +1 -1
  394. package/dist/cli/output.d.ts +3 -6
  395. package/dist/cli/output.d.ts.map +1 -1
  396. package/dist/cli/output.js.map +1 -1
  397. package/dist/cli/published-url.js.map +1 -1
  398. package/dist/cli/record-reach.d.ts +6 -0
  399. package/dist/cli/record-reach.d.ts.map +1 -1
  400. package/dist/cli/record-reach.js +16 -10
  401. package/dist/cli/record-reach.js.map +1 -1
  402. package/dist/cli/record-tables.js +1 -1
  403. package/dist/cli/record-tables.js.map +1 -1
  404. package/dist/cli/record.d.ts.map +1 -1
  405. package/dist/cli/record.js +31 -12
  406. package/dist/cli/record.js.map +1 -1
  407. package/dist/cli/search-index.d.ts +5 -0
  408. package/dist/cli/search-index.d.ts.map +1 -1
  409. package/dist/cli/search-index.js +12 -1
  410. package/dist/cli/search-index.js.map +1 -1
  411. package/dist/cli/statuses.js.map +1 -1
  412. package/dist/cli/top-level-help.js.map +1 -1
  413. package/dist/cli/version.js.map +1 -1
  414. package/dist/cli-api.d.ts +15 -9
  415. package/dist/cli-api.d.ts.map +1 -1
  416. package/dist/cli-api.js +14 -13
  417. package/dist/cli-api.js.map +1 -1
  418. package/dist/composition/adjudication.js.map +1 -1
  419. package/dist/composition/aliases.js.map +1 -1
  420. package/dist/composition/audit-coverage.d.ts +2 -0
  421. package/dist/composition/audit-coverage.d.ts.map +1 -1
  422. package/dist/composition/audit-coverage.js.map +1 -1
  423. package/dist/composition/axes.d.ts +12 -0
  424. package/dist/composition/axes.d.ts.map +1 -1
  425. package/dist/composition/axes.js +18 -6
  426. package/dist/composition/axes.js.map +1 -1
  427. package/dist/composition/axis-audit.js.map +1 -1
  428. package/dist/composition/bridge-analysis.d.ts +0 -18
  429. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  430. package/dist/composition/bridge-analysis.js +57 -47
  431. package/dist/composition/bridge-analysis.js.map +1 -1
  432. package/dist/composition/bridge-prediction.d.ts +5 -1
  433. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  434. package/dist/composition/bridge-prediction.js +12 -16
  435. package/dist/composition/bridge-prediction.js.map +1 -1
  436. package/dist/composition/buckingham-filter.js.map +1 -1
  437. package/dist/composition/canonical-compare.d.ts.map +1 -1
  438. package/dist/composition/canonical-compare.js +12 -2
  439. package/dist/composition/canonical-compare.js.map +1 -1
  440. package/dist/composition/canonical-graph.d.ts +8 -9
  441. package/dist/composition/canonical-graph.d.ts.map +1 -1
  442. package/dist/composition/canonical-graph.js +25 -67
  443. package/dist/composition/canonical-graph.js.map +1 -1
  444. package/dist/composition/canonical-json.js.map +1 -1
  445. package/dist/composition/canonical-prefactors.js.map +1 -1
  446. package/dist/composition/catalog-graph.d.ts.map +1 -1
  447. package/dist/composition/catalog-graph.js +6 -20
  448. package/dist/composition/catalog-graph.js.map +1 -1
  449. package/dist/composition/chain-candidate.d.ts +2 -0
  450. package/dist/composition/chain-candidate.d.ts.map +1 -1
  451. package/dist/composition/chain-candidate.js +2 -0
  452. package/dist/composition/chain-candidate.js.map +1 -1
  453. package/dist/composition/chain-match.js.map +1 -1
  454. package/dist/composition/chain-regime.js.map +1 -1
  455. package/dist/composition/chain-result.js.map +1 -1
  456. package/dist/composition/compose-surface.js.map +1 -1
  457. package/dist/composition/compose-symbolic.js.map +1 -1
  458. package/dist/composition/compose.d.ts.map +1 -1
  459. package/dist/composition/compose.js +153 -36
  460. package/dist/composition/compose.js.map +1 -1
  461. package/dist/composition/composition-recovery.js.map +1 -1
  462. package/dist/composition/consequence.d.ts.map +1 -1
  463. package/dist/composition/consequence.js +15 -6
  464. package/dist/composition/consequence.js.map +1 -1
  465. package/dist/composition/consistency.js.map +1 -1
  466. package/dist/composition/descriptor.d.ts +1 -1
  467. package/dist/composition/descriptor.d.ts.map +1 -1
  468. package/dist/composition/descriptor.js.map +1 -1
  469. package/dist/composition/dimension-adjacency.js.map +1 -1
  470. package/dist/composition/discovery.d.ts +21 -11
  471. package/dist/composition/discovery.d.ts.map +1 -1
  472. package/dist/composition/discovery.js +81 -21
  473. package/dist/composition/discovery.js.map +1 -1
  474. package/dist/composition/edge.d.ts +19 -8
  475. package/dist/composition/edge.d.ts.map +1 -1
  476. package/dist/composition/edge.js +24 -11
  477. package/dist/composition/edge.js.map +1 -1
  478. package/dist/composition/enumerate.d.ts +2 -2
  479. package/dist/composition/enumerate.d.ts.map +1 -1
  480. package/dist/composition/enumerate.js.map +1 -1
  481. package/dist/composition/evaluate-relation.js.map +1 -1
  482. package/dist/composition/explain.d.ts +14 -9
  483. package/dist/composition/explain.d.ts.map +1 -1
  484. package/dist/composition/explain.js +46 -13
  485. package/dist/composition/explain.js.map +1 -1
  486. package/dist/composition/expr-eval.js.map +1 -1
  487. package/dist/composition/expr-simplify.d.ts.map +1 -1
  488. package/dist/composition/expr-simplify.js +9 -39
  489. package/dist/composition/expr-simplify.js.map +1 -1
  490. package/dist/composition/expr-subst.js.map +1 -1
  491. package/dist/composition/formula-shape.d.ts +9 -0
  492. package/dist/composition/formula-shape.d.ts.map +1 -1
  493. package/dist/composition/formula-shape.js +54 -0
  494. package/dist/composition/formula-shape.js.map +1 -1
  495. package/dist/composition/frontier-account.d.ts +3 -2
  496. package/dist/composition/frontier-account.d.ts.map +1 -1
  497. package/dist/composition/frontier-account.js +7 -3
  498. package/dist/composition/frontier-account.js.map +1 -1
  499. package/dist/composition/graph-viz-svg.js.map +1 -1
  500. package/dist/composition/graph-viz.js.map +1 -1
  501. package/dist/composition/grounding.js.map +1 -1
  502. package/dist/composition/identifiability.js.map +1 -1
  503. package/dist/composition/index.d.ts +6 -4
  504. package/dist/composition/index.d.ts.map +1 -1
  505. package/dist/composition/index.js +4 -3
  506. package/dist/composition/index.js.map +1 -1
  507. package/dist/composition/mathts-quiet.d.ts +28 -0
  508. package/dist/composition/mathts-quiet.d.ts.map +1 -0
  509. package/dist/composition/mathts-quiet.js +56 -0
  510. package/dist/composition/mathts-quiet.js.map +1 -0
  511. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  512. package/dist/composition/mathts-scalar-symbols.js +18 -34
  513. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  514. package/dist/composition/not-composable-seeds.d.ts +3 -1
  515. package/dist/composition/not-composable-seeds.d.ts.map +1 -1
  516. package/dist/composition/not-composable-seeds.js +2 -0
  517. package/dist/composition/not-composable-seeds.js.map +1 -1
  518. package/dist/composition/probe/backend-protocol.js.map +1 -1
  519. package/dist/composition/probe/candidate-store.js.map +1 -1
  520. package/dist/composition/probe/corpus.js.map +1 -1
  521. package/dist/composition/probe/dataset.js.map +1 -1
  522. package/dist/composition/probe/experiment-design.js.map +1 -1
  523. package/dist/composition/probe/expression-gaps.js.map +1 -1
  524. package/dist/composition/probe/falsify.d.ts +14 -3
  525. package/dist/composition/probe/falsify.d.ts.map +1 -1
  526. package/dist/composition/probe/falsify.js +14 -27
  527. package/dist/composition/probe/falsify.js.map +1 -1
  528. package/dist/composition/probe/fingerprint.js.map +1 -1
  529. package/dist/composition/probe/fit.d.ts +1 -1
  530. package/dist/composition/probe/fit.d.ts.map +1 -1
  531. package/dist/composition/probe/fit.js +2 -1
  532. package/dist/composition/probe/fit.js.map +1 -1
  533. package/dist/composition/probe/frontier.js.map +1 -1
  534. package/dist/composition/probe/generator.js.map +1 -1
  535. package/dist/composition/probe/index.d.ts +4 -2
  536. package/dist/composition/probe/index.d.ts.map +1 -1
  537. package/dist/composition/probe/index.js +4 -2
  538. package/dist/composition/probe/index.js.map +1 -1
  539. package/dist/composition/probe/limits.js.map +1 -1
  540. package/dist/composition/probe/metadata.js.map +1 -1
  541. package/dist/composition/probe/pipeline.d.ts +5 -0
  542. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  543. package/dist/composition/probe/pipeline.js +13 -6
  544. package/dist/composition/probe/pipeline.js.map +1 -1
  545. package/dist/composition/probe/problem.d.ts +8 -0
  546. package/dist/composition/probe/problem.d.ts.map +1 -1
  547. package/dist/composition/probe/problem.js +78 -12
  548. package/dist/composition/probe/problem.js.map +1 -1
  549. package/dist/composition/probe/report.js.map +1 -1
  550. package/dist/composition/probe/residual.js.map +1 -1
  551. package/dist/composition/probe/run-manifest.js +2 -2
  552. package/dist/composition/probe/run-manifest.js.map +1 -1
  553. package/dist/composition/probe/scoring.d.ts +2 -1
  554. package/dist/composition/probe/scoring.d.ts.map +1 -1
  555. package/dist/composition/probe/scoring.js +21 -7
  556. package/dist/composition/probe/scoring.js.map +1 -1
  557. package/dist/composition/probe/search-budget.js.map +1 -1
  558. package/dist/composition/probe/serialize.js.map +1 -1
  559. package/dist/composition/probe/structure.js.map +1 -1
  560. package/dist/composition/probe/study.d.ts +4 -3
  561. package/dist/composition/probe/study.d.ts.map +1 -1
  562. package/dist/composition/probe/study.js +5 -3
  563. package/dist/composition/probe/study.js.map +1 -1
  564. package/dist/composition/probe/types.d.ts +3 -1
  565. package/dist/composition/probe/types.d.ts.map +1 -1
  566. package/dist/composition/probe/types.js +2 -0
  567. package/dist/composition/probe/types.js.map +1 -1
  568. package/dist/composition/proposed-bridges.d.ts +11 -4
  569. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  570. package/dist/composition/proposed-bridges.js +11 -4
  571. package/dist/composition/proposed-bridges.js.map +1 -1
  572. package/dist/composition/quantities.d.ts +0 -4
  573. package/dist/composition/quantities.d.ts.map +1 -1
  574. package/dist/composition/quantities.js +5 -5
  575. package/dist/composition/quantities.js.map +1 -1
  576. package/dist/composition/quantity.d.ts +18 -2
  577. package/dist/composition/quantity.d.ts.map +1 -1
  578. package/dist/composition/quantity.js +35 -6
  579. package/dist/composition/quantity.js.map +1 -1
  580. package/dist/composition/representative-values.js.map +1 -1
  581. package/dist/composition/retrodiction.d.ts +16 -6
  582. package/dist/composition/retrodiction.d.ts.map +1 -1
  583. package/dist/composition/retrodiction.js +34 -9
  584. package/dist/composition/retrodiction.js.map +1 -1
  585. package/dist/composition/uncertainty.js.map +1 -1
  586. package/dist/composition/user-equation.js.map +1 -1
  587. package/dist/core/axes-registry.d.ts +8 -5
  588. package/dist/core/axes-registry.d.ts.map +1 -1
  589. package/dist/core/axes-registry.js.map +1 -1
  590. package/dist/core/cell.js.map +1 -1
  591. package/dist/core/constants.d.ts +8 -8
  592. package/dist/core/constants.d.ts.map +1 -1
  593. package/dist/core/constants.js +8 -10
  594. package/dist/core/constants.js.map +1 -1
  595. package/dist/core/data-file.js.map +1 -1
  596. package/dist/core/flux-rules.js +1 -1
  597. package/dist/core/flux-rules.js.map +1 -1
  598. package/dist/core/json-schema.d.ts +1 -1
  599. package/dist/core/json-schema.d.ts.map +1 -1
  600. package/dist/core/json-schema.js +31 -7
  601. package/dist/core/json-schema.js.map +1 -1
  602. package/dist/core/labeled-tensor.d.ts +6 -1
  603. package/dist/core/labeled-tensor.d.ts.map +1 -1
  604. package/dist/core/labeled-tensor.js +18 -8
  605. package/dist/core/labeled-tensor.js.map +1 -1
  606. package/dist/core/regime-registry.d.ts +6 -2
  607. package/dist/core/regime-registry.d.ts.map +1 -1
  608. package/dist/core/regime-registry.js.map +1 -1
  609. package/dist/core/regime-rule-install.js.map +1 -1
  610. package/dist/core/regimes-builtins.js.map +1 -1
  611. package/dist/core/tensor.d.ts +7 -4
  612. package/dist/core/tensor.d.ts.map +1 -1
  613. package/dist/core/tensor.js +40 -8
  614. package/dist/core/tensor.js.map +1 -1
  615. package/dist/core/types.js.map +1 -1
  616. package/dist/core/universal-index.js.map +1 -1
  617. package/dist/diff/bridge-ast-gradient.d.ts +4 -5
  618. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  619. package/dist/diff/bridge-ast-gradient.js +10 -6
  620. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  621. package/dist/diff/bridge-gradient.d.ts +24 -80
  622. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  623. package/dist/diff/bridge-gradient.js +21 -98
  624. package/dist/diff/bridge-gradient.js.map +1 -1
  625. package/dist/diff/bridge-specs.d.ts +16 -5
  626. package/dist/diff/bridge-specs.d.ts.map +1 -1
  627. package/dist/diff/bridge-specs.js +16 -4
  628. package/dist/diff/bridge-specs.js.map +1 -1
  629. package/dist/dimensional/algebra.js.map +1 -1
  630. package/dist/dimensional/ast-builders.d.ts +5 -4
  631. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  632. package/dist/dimensional/ast-builders.js +6 -5
  633. package/dist/dimensional/ast-builders.js.map +1 -1
  634. package/dist/dimensional/ast-types.js.map +1 -1
  635. package/dist/dimensional/bridge-check.js.map +1 -1
  636. package/dist/dimensional/buckingham.js.map +1 -1
  637. package/dist/dimensional/connection-validators.d.ts +2 -1
  638. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  639. package/dist/dimensional/connection-validators.js.map +1 -1
  640. package/dist/dimensional/connection.js.map +1 -1
  641. package/dist/dimensional/constant-rows.d.ts.map +1 -1
  642. package/dist/dimensional/constant-rows.js +9 -5
  643. package/dist/dimensional/constant-rows.js.map +1 -1
  644. package/dist/dimensional/constants.d.ts +5 -6
  645. package/dist/dimensional/constants.d.ts.map +1 -1
  646. package/dist/dimensional/constants.js +5 -6
  647. package/dist/dimensional/constants.js.map +1 -1
  648. package/dist/dimensional/curvature-composite.js.map +1 -1
  649. package/dist/dimensional/curvature-invariants.js.map +1 -1
  650. package/dist/dimensional/curvature.js.map +1 -1
  651. package/dist/dimensional/dimension-inference.js.map +1 -1
  652. package/dist/dimensional/dimension-spec.d.ts +13 -7
  653. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  654. package/dist/dimensional/dimension-spec.js +49 -23
  655. package/dist/dimensional/dimension-spec.js.map +1 -1
  656. package/dist/dimensional/einstein-equation.js.map +1 -1
  657. package/dist/dimensional/errors.d.ts +3 -1
  658. package/dist/dimensional/errors.d.ts.map +1 -1
  659. package/dist/dimensional/errors.js +2 -2
  660. package/dist/dimensional/errors.js.map +1 -1
  661. package/dist/dimensional/exact-scale.js.map +1 -1
  662. package/dist/dimensional/field-equation-helpers.js.map +1 -1
  663. package/dist/dimensional/formula-names.js.map +1 -1
  664. package/dist/dimensional/fresh-label.js.map +1 -1
  665. package/dist/dimensional/friedmann-equation.d.ts +3 -3
  666. package/dist/dimensional/friedmann-equation.js +3 -3
  667. package/dist/dimensional/friedmann-equation.js.map +1 -1
  668. package/dist/dimensional/gauge-field.d.ts +2 -3
  669. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  670. package/dist/dimensional/gauge-field.js +0 -1
  671. package/dist/dimensional/gauge-field.js.map +1 -1
  672. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  673. package/dist/dimensional/hyphen-names.js +8 -0
  674. package/dist/dimensional/hyphen-names.js.map +1 -1
  675. package/dist/dimensional/killing-validators.js.map +1 -1
  676. package/dist/dimensional/klein-gordon-equation.js.map +1 -1
  677. package/dist/dimensional/metric-validators.d.ts +2 -1
  678. package/dist/dimensional/metric-validators.d.ts.map +1 -1
  679. package/dist/dimensional/metric-validators.js.map +1 -1
  680. package/dist/dimensional/metric.js.map +1 -1
  681. package/dist/dimensional/natural-units.js.map +1 -1
  682. package/dist/dimensional/quantity-registry.d.ts +13 -0
  683. package/dist/dimensional/quantity-registry.d.ts.map +1 -1
  684. package/dist/dimensional/quantity-registry.js +14 -6
  685. package/dist/dimensional/quantity-registry.js.map +1 -1
  686. package/dist/dimensional/rg-flow.js.map +1 -1
  687. package/dist/dimensional/stress-energy-validators.js.map +1 -1
  688. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  689. package/dist/dimensional/symbolic-constants.js +7 -2
  690. package/dist/dimensional/symbolic-constants.js.map +1 -1
  691. package/dist/dimensional/tensor-trace.js.map +1 -1
  692. package/dist/dimensional/tensor.js.map +1 -1
  693. package/dist/dimensional/types.js.map +1 -1
  694. package/dist/dimensional/unit-convention.d.ts +0 -2
  695. package/dist/dimensional/unit-convention.d.ts.map +1 -1
  696. package/dist/dimensional/unit-convention.js +2 -2
  697. package/dist/dimensional/unit-convention.js.map +1 -1
  698. package/dist/dimensional/unit-data.d.ts.map +1 -1
  699. package/dist/dimensional/unit-data.js +9 -5
  700. package/dist/dimensional/unit-data.js.map +1 -1
  701. package/dist/dimensional/units.d.ts.map +1 -1
  702. package/dist/dimensional/units.js +38 -20
  703. package/dist/dimensional/units.js.map +1 -1
  704. package/dist/dimensional/validator-registry.js.map +1 -1
  705. package/dist/dimensional/validator.d.ts +0 -16
  706. package/dist/dimensional/validator.d.ts.map +1 -1
  707. package/dist/dimensional/validator.js +65 -29
  708. package/dist/dimensional/validator.js.map +1 -1
  709. package/dist/dimensional/weyl-validators.js.map +1 -1
  710. package/dist/index.d.ts +50 -5
  711. package/dist/index.d.ts.map +1 -1
  712. package/dist/index.js +12 -20
  713. package/dist/index.js.map +1 -1
  714. package/dist/numerical/bianchi-residual.js.map +1 -1
  715. package/dist/numerical/binding-value.d.ts +11 -6
  716. package/dist/numerical/binding-value.d.ts.map +1 -1
  717. package/dist/numerical/binding-value.js +126 -122
  718. package/dist/numerical/binding-value.js.map +1 -1
  719. package/dist/numerical/christoffel-flat.js.map +1 -1
  720. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  721. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  722. package/dist/numerical/covariant-eikonal.js +2 -2
  723. package/dist/numerical/covariant-eikonal.js.map +1 -1
  724. package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
  725. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  726. package/dist/numerical/curvature-lowering-helpers.js +6 -3
  727. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  728. package/dist/numerical/derivative-lowering.js.map +1 -1
  729. package/dist/numerical/einstein-equation.js.map +1 -1
  730. package/dist/numerical/engine-registry.js.map +1 -1
  731. package/dist/numerical/errors.d.ts +7 -3
  732. package/dist/numerical/errors.d.ts.map +1 -1
  733. package/dist/numerical/errors.js +5 -5
  734. package/dist/numerical/errors.js.map +1 -1
  735. package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -1
  736. package/dist/numerical/evaluator-uncertainty.js +19 -2
  737. package/dist/numerical/evaluator-uncertainty.js.map +1 -1
  738. package/dist/numerical/formula-contract.d.ts +63 -7
  739. package/dist/numerical/formula-contract.d.ts.map +1 -1
  740. package/dist/numerical/formula-contract.js +61 -42
  741. package/dist/numerical/formula-contract.js.map +1 -1
  742. package/dist/numerical/formula-dimension.d.ts +8 -7
  743. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  744. package/dist/numerical/formula-dimension.js +58 -36
  745. package/dist/numerical/formula-dimension.js.map +1 -1
  746. package/dist/numerical/formula-mathts.d.ts.map +1 -1
  747. package/dist/numerical/formula-mathts.js +5 -2
  748. package/dist/numerical/formula-mathts.js.map +1 -1
  749. package/dist/numerical/formula-registry.d.ts +13 -3
  750. package/dist/numerical/formula-registry.d.ts.map +1 -1
  751. package/dist/numerical/formula-registry.js +7 -2
  752. package/dist/numerical/formula-registry.js.map +1 -1
  753. package/dist/numerical/geodesic-integrator.js.map +1 -1
  754. package/dist/numerical/geometrized.js.map +1 -1
  755. package/dist/numerical/gl4-integrator.d.ts +28 -27
  756. package/dist/numerical/gl4-integrator.d.ts.map +1 -1
  757. package/dist/numerical/gl4-integrator.js +41 -42
  758. package/dist/numerical/gl4-integrator.js.map +1 -1
  759. package/dist/numerical/grid-field.js.map +1 -1
  760. package/dist/numerical/index.js.map +1 -1
  761. package/dist/numerical/input-validation.d.ts +3 -6
  762. package/dist/numerical/input-validation.d.ts.map +1 -1
  763. package/dist/numerical/input-validation.js +4 -8
  764. package/dist/numerical/input-validation.js.map +1 -1
  765. package/dist/numerical/killing.d.ts +8 -5
  766. package/dist/numerical/killing.d.ts.map +1 -1
  767. package/dist/numerical/killing.js.map +1 -1
  768. package/dist/numerical/klein-gordon.js.map +1 -1
  769. package/dist/numerical/kretschmann.js.map +1 -1
  770. package/dist/numerical/lowering-utils.js.map +1 -1
  771. package/dist/numerical/lowering.d.ts.map +1 -1
  772. package/dist/numerical/lowering.js +7 -17
  773. package/dist/numerical/lowering.js.map +1 -1
  774. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  775. package/dist/numerical/mathts-engine.js +11 -6
  776. package/dist/numerical/mathts-engine.js.map +1 -1
  777. package/dist/numerical/metric-inverse.js.map +1 -1
  778. package/dist/numerical/null-ic.js.map +1 -1
  779. package/dist/numerical/null-ray-integrator.js +4 -4
  780. package/dist/numerical/null-ray-integrator.js.map +1 -1
  781. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  782. package/dist/numerical/pderiv.d.ts.map +1 -1
  783. package/dist/numerical/pderiv.js +9 -2
  784. package/dist/numerical/pderiv.js.map +1 -1
  785. package/dist/numerical/perihelion-finder.js.map +1 -1
  786. package/dist/numerical/quadrature.d.ts +5 -2
  787. package/dist/numerical/quadrature.d.ts.map +1 -1
  788. package/dist/numerical/quadrature.js +20 -3
  789. package/dist/numerical/quadrature.js.map +1 -1
  790. package/dist/numerical/spacetime-metrics.d.ts +13 -19
  791. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  792. package/dist/numerical/spacetime-metrics.js +126 -248
  793. package/dist/numerical/spacetime-metrics.js.map +1 -1
  794. package/dist/numerical/strides.js.map +1 -1
  795. package/dist/numerical/tensor-engine.d.ts +9 -5
  796. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  797. package/dist/numerical/tensor-engine.js.map +1 -1
  798. package/dist/numerical/types.js.map +1 -1
  799. package/dist/numerical/weyl-lowering.js.map +1 -1
  800. package/dist/relations/category.js.map +1 -1
  801. package/dist/relations/composition-table.d.ts +4 -4
  802. package/dist/relations/composition-table.js +4 -4
  803. package/dist/relations/composition-table.js.map +1 -1
  804. package/dist/relations/conventions.js.map +1 -1
  805. package/dist/relations/domain-regimes.js.map +1 -1
  806. package/dist/relations/regime-registration.js.map +1 -1
  807. package/dist/relations/regime-vocabularies.js.map +1 -1
  808. package/dist/relations/regime.d.ts +18 -8
  809. package/dist/relations/regime.d.ts.map +1 -1
  810. package/dist/relations/regime.js +26 -14
  811. package/dist/relations/regime.js.map +1 -1
  812. package/dist/relations/types.d.ts +18 -5
  813. package/dist/relations/types.d.ts.map +1 -1
  814. package/dist/relations/types.js +5 -3
  815. package/dist/relations/types.js.map +1 -1
  816. package/package.json +10 -14
  817. package/dist/bridges/registry.d.ts +0 -60
  818. package/dist/bridges/registry.d.ts.map +0 -1
  819. package/dist/bridges/registry.js +0 -87
  820. package/dist/bridges/registry.js.map +0 -1
  821. package/dist/cli/poster-source.d.ts +0 -154
  822. package/dist/cli/poster-source.d.ts.map +0 -1
  823. package/dist/cli/poster-source.js +0 -184
  824. package/dist/cli/poster-source.js.map +0 -1
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * Runtime input validation for numeric evaluators — `validateFiniteInputs`.
3
3
  *
4
- * A generic, dependency-free finite-and-in-range check shared by the numerical
5
- * evaluators (`klein-gordon.ts`) and the 42 bridge-equation evaluators
6
- * (`bridges/equations/be-*.ts`). It lived in `bridges/equations/_be-helpers.ts`,
7
- * which forced the lower numerical layer to import upward from `bridges`; moving
8
- * it here (a leaf module with no imports) removes that dependency while
9
- * `_be-helpers.ts` re-exports it so every bridge evaluator is unchanged.
4
+ * A generic, dependency-free finite-and-in-range check for a numeric
5
+ * evaluator's input record (`klein-gordon.ts` reads it). It is a leaf module
6
+ * with no imports, so any layer may read it without an upward edge.
10
7
  *
11
8
  * @module numerical/input-validation
12
9
  */
@@ -50,8 +47,7 @@ function describeRange(spec) {
50
47
  */
51
48
  export function validateFiniteInputs(input, fieldSpecs, evaluatorName) {
52
49
  for (const spec of fieldSpecs) {
53
- const raw = input[spec.name];
54
- const value = raw;
50
+ const value = input[spec.name];
55
51
  if (typeof value !== 'number' || !Number.isFinite(value)) {
56
52
  const range = describeRange(spec);
57
53
  throw new RangeError(`${evaluatorName}: ${spec.name} must be a finite ${range}number, got ${String(value)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"input-validation.js","sourceRoot":"","sources":["../../src/numerical/input-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-validation.js","sourceRoot":"","sources":["../../src/numerical/input-validation.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime input validation for numeric evaluators — `validateFiniteInputs`.\n *\n * A generic, dependency-free finite-and-in-range check for a numeric\n * evaluator's input record (`klein-gordon.ts` reads it). It is a leaf module\n * with no imports, so any layer may read it without an upward edge.\n *\n * @module numerical/input-validation\n */\n\n/**\n * Declarative spec for a single field of an evaluator's `input` record.\n *\n * The default behaviour (no `min`/`max`) only verifies finiteness\n * (`Number.isFinite`). The bound predicates compose with `Number.isFinite`\n * so the resulting error always reads \"finite ⟨adj⟩ number\" — drop-in\n * compatible with the per-evaluator message format\n * `\"<evaluator>: <field> must be a finite <adjective> number, got <v>\"`.\n *\n * @internal\n */\nexport interface FieldSpec {\n /** Field name on the `input` record (e.g., `'M_kg'`). */\n readonly name: string;\n /** Inclusive lower bound (default `-Infinity`). */\n readonly min?: number;\n /** Inclusive upper bound (default `Infinity`). */\n readonly max?: number;\n /** Strict `>` instead of `≥` at the lower bound. */\n readonly excludeMin?: boolean;\n /** Strict `<` instead of `≤` at the upper bound. */\n readonly excludeMax?: boolean;\n /** Explicit override — when `min === 0` and you want to permit zero. */\n readonly allowZero?: boolean;\n /**\n * Optional domain-specific noun phrase (e.g., 'probability', 'angle').\n * When set, replaces the auto-generated \"in range [a, b]\" prose:\n * \"<evaluator>: <field> must be a finite <description> number, got <v>\"\n * @internal\n */\n readonly description?: string;\n}\n\n/**\n * Compose the adjective phrase that appears in the error message, picked to\n * match the per-evaluator prose conventions:\n * - `min=0, excludeMin=true` → \"positive\" (i.e., `> 0`)\n * - `min=0` → \"non-negative\" (i.e., `≥ 0`)\n * - bounded but not a 0-pin → \"in range [a, b]\" (closed/open as set)\n * - unbounded → \"\" (just \"finite\")\n */\nfunction describeRange(spec: FieldSpec): string {\n if (spec.description !== undefined) return `${spec.description} `;\n\n const hasMin = spec.min !== undefined;\n const hasMax = spec.max !== undefined;\n const lowOpen = !!spec.excludeMin;\n const highOpen = !!spec.excludeMax;\n\n if (hasMin && !hasMax && spec.min === 0 && !spec.allowZero) {\n if (lowOpen) return 'positive ';\n return 'non-negative ';\n }\n\n if (!hasMin && !hasMax) return '';\n\n const lo = hasMin ? spec.min : -Infinity;\n const hi = hasMax ? spec.max : Infinity;\n const lb = lowOpen ? '(' : '[';\n const rb = highOpen ? ')' : ']';\n return `in range ${lb}${lo}, ${hi}${rb} `;\n}\n\n/**\n * Validate every field of `input` named by `fieldSpecs`. Throws a `RangeError`\n * on the first violation with a message containing the keywords (`\"finite\"`,\n * plus `\"positive\"` / `\"non-negative\"` / `\"in range\"`) the per-evaluator tests\n * pattern-match against. Format:\n *\n * `<evaluatorName>: <fieldName> must be a finite <range> number, got <value>`\n *\n * @internal\n */\nexport function validateFiniteInputs<T extends object>(\n input: T,\n fieldSpecs: ReadonlyArray<FieldSpec>,\n evaluatorName: string,\n): void {\n for (const spec of fieldSpecs) {\n const value: unknown = (input as Record<string, unknown>)[spec.name];\n\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n const range = describeRange(spec);\n throw new RangeError(\n `${evaluatorName}: ${spec.name} must be a finite ${range}number, got ${String(value)}`,\n );\n }\n\n if (spec.min !== undefined) {\n const violatesMin = spec.excludeMin ? value <= spec.min : value < spec.min;\n if (violatesMin) {\n const range = describeRange(spec);\n throw new RangeError(\n `${evaluatorName}: ${spec.name} must be a finite ${range}number, got ${value}`,\n );\n }\n }\n\n if (spec.max !== undefined) {\n const violatesMax = spec.excludeMax ? value >= spec.max : value > spec.max;\n if (violatesMax) {\n const range = describeRange(spec);\n throw new RangeError(\n `${evaluatorName}: ${spec.name} must be a finite ${range}number, got ${value}`,\n );\n }\n }\n }\n}\n"]}
@@ -63,8 +63,10 @@ export interface KillingEquationOptions {
63
63
  readonly dMetricFn?: (x: ReadonlyArray<number>) => number[][][];
64
64
  }
65
65
  type Vec4 = [number, number, number, number];
66
- type KillingFn = () => (x: Vec4) => Vec4;
67
- type MetricFn = (x: ReadonlyArray<number>) => number[][];
66
+ /** A Killing-field factory: returns the field ξ^μ(x) as a function of the 4-position. @public */
67
+ export type KillingFn = () => (x: Vec4) => Vec4;
68
+ /** A covariant metric closure for the Killing checks: `g(x)[μ][ν] = g_{μν}(x)`, nested. @public */
69
+ export type KillingMetricFn = (x: ReadonlyArray<number>) => number[][];
68
70
  /**
69
71
  * Layout-agnostic Christoffel accessor.
70
72
  *
@@ -77,7 +79,8 @@ type MetricFn = (x: ReadonlyArray<number>) => number[][];
77
79
  * @public
78
80
  */
79
81
  export type ChristoffelAccess = (lambda: number, mu: number, nu: number) => number;
80
- type ChristoffelAtFn = (x: Vec4) => ChristoffelAccess;
82
+ /** A Christoffel producer: the {@link ChristoffelAccess} at a 4-position. @public */
83
+ export type ChristoffelAtFn = (x: Vec4) => ChristoffelAccess;
81
84
  /**
82
85
  * Compute `||∇_μ ξ_ν + ∇_ν ξ_μ||_∞` at point `x`, returning the maximum
83
86
  * absolute symmetrized residual over all 16 (μ, ν) pairs.
@@ -128,7 +131,7 @@ type ChristoffelAtFn = (x: Vec4) => ChristoffelAccess;
128
131
  *
129
132
  * @public
130
133
  */
131
- export declare function verifyKillingEquation(killingFn: KillingFn, metricFn: MetricFn, christoffelAt: ChristoffelAtFn, x: Vec4, opts?: KillingEquationOptions): number;
134
+ export declare function verifyKillingEquation(killingFn: KillingFn, metricFn: KillingMetricFn, christoffelAt: ChristoffelAtFn, x: Vec4, opts?: KillingEquationOptions): number;
132
135
  /**
133
136
  * Result of {@link checkKillingEquation}.
134
137
  *
@@ -164,7 +167,7 @@ export interface KillingEquationCheck {
164
167
  *
165
168
  * @public
166
169
  */
167
- export declare function checkKillingEquation(killingFn: KillingFn, metricFn: MetricFn, christoffelAt: ChristoffelAtFn, x: Vec4, opts?: KillingEquationOptions): KillingEquationCheck;
170
+ export declare function checkKillingEquation(killingFn: KillingFn, metricFn: KillingMetricFn, christoffelAt: ChristoffelAtFn, x: Vec4, opts?: KillingEquationOptions): KillingEquationCheck;
168
171
  /**
169
172
  * Evaluate the conserved charge Q = ξ^μ p_μ at point x along a geodesic.
170
173
  *
@@ -1 +1 @@
1
- {"version":3,"file":"killing.d.ts","sourceRoot":"","sources":["../../src/numerical/killing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH;;cAEc;AACd,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,EAAE,CAAC;CACjE;AAED,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,KAAK,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AACzC,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,CAAC;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnF,KAAK,eAAe,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,eAAe,EAC9B,CAAC,EAAE,IAAI,EACP,IAAI,GAAE,sBAA2B,GAChC,MAAM,CAmIR;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC;wDACoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;qFACiF;IACjF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,uDAAuD;IACvD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,eAAe,EAC9B,CAAC,EAAE,IAAI,EACP,IAAI,GAAE,sBAA2B,GAChC,oBAAoB,CAUtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,IAAI,EACnB,CAAC,EAAE,IAAI,GACN,MAAM,CAKR"}
1
+ {"version":3,"file":"killing.d.ts","sourceRoot":"","sources":["../../src/numerical/killing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH;;cAEc;AACd,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,EAAE,CAAC;CACjE;AAED,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,iGAAiG;AACjG,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AAChD,mGAAmG;AACnG,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnF,qFAAqF;AACrF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,iBAAiB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,eAAe,EAC9B,CAAC,EAAE,IAAI,EACP,IAAI,GAAE,sBAA2B,GAChC,MAAM,CAmIR;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC;wDACoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;qFACiF;IACjF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,uDAAuD;IACvD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,eAAe,EAC9B,CAAC,EAAE,IAAI,EACP,IAAI,GAAE,sBAA2B,GAChC,oBAAoB,CAUtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,IAAI,EACnB,CAAC,EAAE,IAAI,GACN,MAAM,CAKR"}
@@ -1 +1 @@
1
- {"version":3,"file":"killing.js","sourceRoot":"","sources":["../../src/numerical/killing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"killing.js","sourceRoot":"","sources":["../../src/numerical/killing.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Killing-equation numerical verification (v0.6.0 Phase 1, Task 1.3).\n *\n * F-3 reconciliation (hybrid impl):\n * - Uses EXACT symbolic Christoffels for all Γ terms.\n * - For the outer ∂_μ ξ_α = (∂_μ g_{αβ}) ξ^β + g_{αβ} ∂_μ ξ^β, two paths:\n * 1. constantKilling=true (default for constant ξ^β): uses metric\n * compatibility ∂_μ g_{αβ} = Γ^λ_{μα} g_{λβ} + Γ^λ_{μβ} g_{αλ} to\n * derive ∇_μ ξ_α = Γ^λ_{μβ} g_{αλ} ξ^β without any FD. Achieves\n * machine precision RELATIVE to the metric scale for Schwarzschild.\n * The residual itself is absolute, in the metric's units: with SI\n * Schwarzschild (g_tt ≈ −c² ≈ −9e16) the exact time-translation field\n * leaves 2.44e-4 at r = 3 r_s and 3.05e-5 at 10 r_s (≈ 3e-21 relative).\n * 2. constantKilling=false with dMetricFn supplied: uses exact analytic\n * ∂_μ g_{αβ} + FD for ∂_μ ξ^β. Handles spatially-varying Killing fields.\n * 3. Fallback FD path: differentiates ξ_α(y) = g_{αβ}(y) ξ^β(y) via 4th-\n * order FD. WARNING: suffers c²-cancellation noise for SI-scaled metrics.\n *\n * The Killing equation (Carroll Eq. 3.174):\n * ∇_μ ξ_ν + ∇_ν ξ_μ = 0\n *\n * where ∇_μ ξ_ν = ∂_μ ξ_ν − Γ^λ_{μν} ξ_λ (covariant derivative of the\n * lowered Killing field ξ_ν = g_{νβ} ξ^β).\n *\n * @module numerical/killing\n */\n\nimport { pderivNumericalFn } from './pderiv.js';\nimport { validateFiniteInputs } from './input-validation.js';\n\n/** Options for {@link verifyKillingEquation}.\n *\n * @public */\nexport interface KillingEquationOptions {\n /**\n * Maximum tolerated RELATIVE residual, read only by {@link checkKillingEquation}:\n * ||∇_μ ξ_ν + ∇_ν ξ_μ||_∞ / max(max_{μν} |g_{μν}(x)|, 1) ≤ tolerance. Default 1e-10.\n * Must be finite and > 0. {@link verifyKillingEquation} ignores it and returns the\n * raw (absolute) residual.\n */\n readonly tolerance?: number;\n /**\n * Finite-difference stencil order for the outer ∂_μ ξ_α partials\n * (used only when constantKilling=false and dMetricFn is not supplied).\n * Default 4.\n */\n readonly order?: 2 | 4;\n /**\n * When true (default), assumes ξ^β is coordinate-independent (∂_μ ξ^β = 0)\n * and uses the metric-compatibility identity to compute the covariant\n * derivative purely algebraically:\n *\n * ∇_μ ξ_α = Γ^λ_{μβ} g_{αλ} ξ^β (for constant ξ^β)\n *\n * This avoids all FD and any c²-scale cancellation noise. Exactly correct for\n * the Schwarzschild time-translation (ξ^t = 1) and axial (ξ^φ = 1) fields.\n * Set to false for spatially-varying Killing fields.\n */\n readonly constantKilling?: boolean;\n /**\n * Optional exact partial derivatives of the covariant metric\n * (used only when constantKilling=false).\n * dMetricFn(x)[lambda][mu][nu] = ∂_lambda g_{mu nu}.\n * When supplied with constantKilling=false, ∂_μ g_{αβ} is exact;\n * ∂_μ ξ^β is computed via 4th-order FD.\n */\n readonly dMetricFn?: (x: ReadonlyArray<number>) => number[][][];\n}\n\ntype Vec4 = [number, number, number, number];\n/** A Killing-field factory: returns the field ξ^μ(x) as a function of the 4-position. @public */\nexport type KillingFn = () => (x: Vec4) => Vec4;\n/** A covariant metric closure for the Killing checks: `g(x)[μ][ν] = g_{μν}(x)`, nested. @public */\nexport type KillingMetricFn = (x: ReadonlyArray<number>) => number[][];\n\n/**\n * Layout-agnostic Christoffel accessor.\n *\n * P-3 fix: both nested (number[4][4][4]) and flat (Float64Array(64))\n * Christoffel producers can provide a ChristoffelAccess. This insulates\n * {@link verifyKillingEquation} from the Phase 2 BR-2 migration:\n * Task 2.9 changes how christoffelAt(x) is *constructed*, but consumers\n * only call `christoffelAt(x)(λ, μ, ν)`.\n *\n * @public\n */\nexport type ChristoffelAccess = (lambda: number, mu: number, nu: number) => number;\n\n/** A Christoffel producer: the {@link ChristoffelAccess} at a 4-position. @public */\nexport type ChristoffelAtFn = (x: Vec4) => ChristoffelAccess;\n\n/**\n * Compute `||∇_μ ξ_ν + ∇_ν ξ_μ||_∞` at point `x`, returning the maximum\n * absolute symmetrized residual over all 16 (μ, ν) pairs.\n *\n * For constant Killing fields (constantKilling=true, the default):\n * Uses metric compatibility to derive ∇_μ ξ_α = Γ^λ_{μβ} g_{αλ} ξ^β\n * algebraically — no FD at all. The residual is ABSOLUTE (metric units);\n * for SI Schwarzschild it is at machine precision relative to |g_tt| ≈ c².\n * `opts.tolerance` is not read here; use {@link checkKillingEquation} for a verdict.\n *\n * @param killingFn - Factory returning ξ^μ(x) (upper index).\n * @param metricFn - Covariant metric g_{μν}(x).\n * @param christoffelAt - Christoffel accessor factory (layout-agnostic).\n * @param x - Evaluation point [t, r, θ, φ].\n * @param opts - Optional overrides (see {@link KillingEquationOptions}).\n * @returns Maximum absolute residual of the symmetrized Killing equation.\n *\n * @example\n * ```typescript\n * import { verifyKillingEquation } from 'universal-physics-tensor';\n * import {\n * schwarzschildKillingT,\n * schwarzschildGFn,\n * schwarzschildChristoffelFn,\n * schwarzschildRs,\n * } from '../tests/fixtures/schwarzschild.js'; // or your own metric closures\n *\n * const M = 1.989e30; // solar mass, kg\n * const r_s = schwarzschildRs(M);\n * const x: [number, number, number, number] = [0, 5 * r_s, Math.PI / 2, 0];\n *\n * // Christoffel accessor wrapping the flat Float64Array layout (BR-2)\n * const gammaFn = schwarzschildChristoffelFn(M);\n * const christoffelAccessAt = (pt: [number, number, number, number]) => {\n * const arr = gammaFn(pt);\n * return (lam: number, mu: number, nu: number) => arr[16 * lam + 4 * mu + nu];\n * };\n *\n * const residual = verifyKillingEquation(\n * schwarzschildKillingT,\n * schwarzschildGFn(M),\n * christoffelAccessAt,\n * x,\n * { constantKilling: true },\n * );\n * // residual < 1e-12 for the exact time-translation Killing field\n * ```\n *\n * @public\n */\nexport function verifyKillingEquation(\n killingFn: KillingFn,\n metricFn: KillingMetricFn,\n christoffelAt: ChristoffelAtFn,\n x: Vec4,\n opts: KillingEquationOptions = {},\n): number {\n const order = opts.order ?? 4;\n const constantKilling = opts.constantKilling ?? true;\n const xi = killingFn();\n const g = metricFn(x);\n const xiAtX = xi(x);\n const Gamma = christoffelAt(x);\n\n // Lowered Killing field: ξ_α = g_{αβ} ξ^β\n const xiLower: Vec4 = [0, 0, 0, 0];\n for (let a = 0; a < 4; a++) {\n let s = 0;\n for (let b = 0; b < 4; b++) s += g[a][b] * xiAtX[b];\n xiLower[a] = s;\n }\n\n // Covariant derivative ∇_μ ξ_α (4×4 matrix)\n const cov: number[][] = [\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ];\n\n if (constantKilling) {\n // Algebraic path (metric compatibility, ∂_μ ξ^β = 0):\n // ∇_μ ξ_α = ∂_μ ξ_α − Γ^λ_{μα} ξ_λ\n // where ∂_μ ξ_α = (Γ^λ_{μα} g_{λβ} + Γ^λ_{μβ} g_{αλ}) ξ^β\n // cancelling Γ^λ_{μα} g_{λβ} ξ^β = Γ^λ_{μα} ξ_λ gives:\n // ∇_μ ξ_α = Σ_β Σ_λ Γ^λ_{μβ} g_{αλ} ξ^β\n //\n // Symmetrized: ∇_μ ξ_α + ∇_α ξ_μ = Σ_β [Γ^λ_{μβ} g_{αλ} + Γ^λ_{αβ} g_{μλ}] ξ^β\n // This is the Killing equation in terms of Christoffels only.\n for (let mu = 0; mu < 4; mu++) {\n for (let a = 0; a < 4; a++) {\n let s = 0;\n for (let lam = 0; lam < 4; lam++) {\n for (let b = 0; b < 4; b++) {\n s += Gamma(lam, mu, b) * g[a][lam] * xiAtX[b];\n }\n }\n cov[mu][a] = s;\n }\n }\n } else if (opts.dMetricFn !== undefined) {\n // Exact dMetricFn + FD path for spatially-varying Killing fields.\n // ∂_μ ξ_α = (∂_μ g_{αβ}) ξ^β + g_{αβ} ∂_μ ξ^β\n const dg = opts.dMetricFn(x);\n\n // FD for ∂_μ ξ^β (upper components)\n const dxiUpper: number[][] = [\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ];\n for (let b = 0; b < 4; b++) {\n const xiUpperB = (y: ReadonlyArray<number>): number => xi(y as Vec4)[b];\n for (let mu = 0; mu < 4; mu++) {\n const raw = pderivNumericalFn(xiUpperB, x, mu, { order });\n dxiUpper[mu][b] = typeof raw === 'number' ? raw : (raw as number[])[0];\n }\n }\n\n const partial: number[][] = [\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ];\n for (let mu = 0; mu < 4; mu++) {\n for (let a = 0; a < 4; a++) {\n let s = 0;\n for (let b = 0; b < 4; b++) {\n s += dg[mu][a][b] * xiAtX[b];\n s += g[a][b] * dxiUpper[mu][b];\n }\n partial[mu][a] = s;\n }\n }\n\n for (let mu = 0; mu < 4; mu++) {\n for (let a = 0; a < 4; a++) {\n let connSum = 0;\n for (let lam = 0; lam < 4; lam++) connSum += Gamma(lam, mu, a) * xiLower[lam];\n cov[mu][a] = partial[mu][a] - connSum;\n }\n }\n } else {\n // Pure FD fallback: differentiate ξ_α(y) = g_{αβ}(y) ξ^β(y) numerically.\n // WARNING: large-scale SI metrics (c²·g_tt ~ 6e16) produce cancellation\n // noise at the ~1-10 absolute level. Use constantKilling=true for\n // constant Schwarzschild Killing fields.\n const partial: number[][] = [\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ];\n for (let a = 0; a < 4; a++) {\n const xiLowerA = (y: ReadonlyArray<number>): number => {\n const gy = metricFn(y);\n const xy = xi(y as Vec4);\n let s = 0;\n for (let b = 0; b < 4; b++) s += gy[a][b] * xy[b];\n return s;\n };\n for (let mu = 0; mu < 4; mu++) {\n const raw = pderivNumericalFn(xiLowerA, x, mu, { order });\n partial[mu][a] = typeof raw === 'number' ? raw : (raw as number[])[0];\n }\n }\n for (let mu = 0; mu < 4; mu++) {\n for (let a = 0; a < 4; a++) {\n let connSum = 0;\n for (let lam = 0; lam < 4; lam++) connSum += Gamma(lam, mu, a) * xiLower[lam];\n cov[mu][a] = partial[mu][a] - connSum;\n }\n }\n }\n\n // Symmetrize ∇_μ ξ_ν + ∇_ν ξ_μ and find max|·| over 16 pairs.\n let maxResid = 0;\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) {\n const sym = cov[mu][nu] + cov[nu][mu];\n const ab = Math.abs(sym);\n if (ab > maxResid) maxResid = ab;\n }\n }\n return maxResid;\n}\n\n/**\n * Result of {@link checkKillingEquation}.\n *\n * @public\n */\nexport interface KillingEquationCheck {\n /** Raw max residual ||∇_μ ξ_ν + ∇_ν ξ_μ||_∞ in the metric's units — identical to\n * {@link verifyKillingEquation}'s return value. */\n readonly residual: number;\n /** `residual / max(max_{μν} |g_{μν}(x)|, 1)`: dimensionless, the quantity the tolerance\n * is applied to (the normalization `evaluateEinsteinEquationResidual` uses). */\n readonly relativeResidual: number;\n /** `relativeResidual <= tolerance` (default 1e-10). */\n readonly withinTolerance: boolean;\n}\n\n/**\n * Check the Killing equation ∇_μ ξ_ν + ∇_ν ξ_μ = 0 at `x` against a tolerance.\n *\n * Runs {@link verifyKillingEquation} with the same arguments and normalizes its absolute\n * residual by the metric scale at `x`: `relativeResidual = residual / max(max|g_μν(x)|, 1)`.\n * The floor of 1 keeps geometrized (order-1) metrics absolute. The verdict is\n * `relativeResidual <= opts.tolerance` (default 1e-10). A relative test matters for SI\n * metrics: an exact Killing field of SI Schwarzschild leaves an absolute residual up to\n * 2.44e-4 (g_tt ≈ −9e16), about 3e-21 relative.\n *\n * @param killingFn - Factory returning ξ^μ(x) (upper index).\n * @param metricFn - Covariant metric g_{μν}(x).\n * @param christoffelAt - Christoffel accessor factory (layout-agnostic).\n * @param x - Evaluation point [t, r, θ, φ].\n * @param opts - {@link KillingEquationOptions}; `tolerance` must be finite and > 0.\n * @returns `{ residual, relativeResidual, withinTolerance }`.\n * @throws RangeError when `opts.tolerance` is not a finite positive number.\n *\n * @public\n */\nexport function checkKillingEquation(\n killingFn: KillingFn,\n metricFn: KillingMetricFn,\n christoffelAt: ChristoffelAtFn,\n x: Vec4,\n opts: KillingEquationOptions = {},\n): KillingEquationCheck {\n if (opts.tolerance !== undefined) {\n validateFiniteInputs(opts, [{ name: 'tolerance', min: 0, excludeMin: true }], 'checkKillingEquation');\n }\n const tolerance = opts.tolerance ?? 1e-10;\n const residual = verifyKillingEquation(killingFn, metricFn, christoffelAt, x, opts);\n let scale = 1;\n for (const row of metricFn(x)) for (const v of row) scale = Math.max(scale, Math.abs(v));\n const relativeResidual = residual / scale;\n return { residual, relativeResidual, withinTolerance: relativeResidual <= tolerance };\n}\n\n/**\n * Evaluate the conserved charge Q = ξ^μ p_μ at point x along a geodesic.\n *\n * Sign convention: raw contraction ξ^μ p_μ. For the time-translation\n * Killing field in (−,+,+,+) signature, p_t < 0 for forward-time motion,\n * so the physical energy of common usage is E = −Q (Carroll Eq. 8.30).\n * Use `|ΔQ / Q|` for drift diagnostics to stay sign-agnostic.\n *\n * @param killingFn - Factory returning ξ^μ(x) (upper index).\n * @param momentumLower - Co-momentum p_μ at the geodesic point (lower index).\n * @param x - Geodesic coordinate [t, r, θ, φ].\n * @returns Q = ξ^μ p_μ (dimensioned as energy if p is 4-momentum).\n *\n * @example\n * ```typescript\n * import { evaluateConservedCharge } from 'universal-physics-tensor';\n * import { schwarzschildKillingT } from '../tests/fixtures/schwarzschild.js';\n *\n * // Co-momentum p_μ at a geodesic snapshot (p_t < 0 for forward-time motion)\n * const pLower: [number, number, number, number] = [-8.988e16, 0, 0, 0];\n * const x: [number, number, number, number] = [0, 1e7, Math.PI / 2, 0];\n *\n * const Q = evaluateConservedCharge(schwarzschildKillingT, pLower, x);\n * // Q = ξ^t · p_t = 1 · p_t = p_t (energy with sign from metric)\n * // Physical energy E = −Q (Carroll sign convention for (−,+,+,+))\n * ```\n *\n * @public\n */\nexport function evaluateConservedCharge(\n killingFn: KillingFn,\n momentumLower: Vec4,\n x: Vec4,\n): number {\n const xi = killingFn()(x);\n let q = 0;\n for (let m = 0; m < 4; m++) q += xi[m] * momentumLower[m];\n return q;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"klein-gordon.js","sourceRoot":"","sources":["../../src/numerical/klein-gordon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAiD7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAgC;IAEhC,oBAAoB,CAClB,KAAK,EACL;QACE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;QACjD,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;QAC3B,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;KAC5B,EACD,8BAA8B,CAC/B,CAAC;IACF,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEhD,MAAM,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC;IAC1B,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;IACpB,oDAAoD;IACpD,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAEhC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAA6B;IAE7B,oBAAoB,CAClB,KAAK,EACL;QACE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;QAC3B,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;KAC5B,EACD,4BAA4B,CAC7B,CAAC;IACF,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,oBAAoB,CAClB,KAAK,EACL,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EACjD,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACnC,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,UAAU,CAClB,qHAAqH,CACtH,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;IAE3C,2EAA2E;IAC3E,+EAA+E;IAC/E,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC;IAC1B,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;IACjD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,4BAA4B,CAAC;QAC5C,WAAW;QACX,OAAO;QACP,OAAO;KACR,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,QAAQ;QACR,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;KACjD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"klein-gordon.js","sourceRoot":"","sources":["../../src/numerical/klein-gordon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAiD7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAgC;IAEhC,oBAAoB,CAClB,KAAK,EACL;QACE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;QACjD,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;QAC3B,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;KAC5B,EACD,8BAA8B,CAC/B,CAAC;IACF,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEhD,MAAM,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC;IAC1B,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;IACpB,oDAAoD;IACpD,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAEhC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAA6B;IAE7B,oBAAoB,CAClB,KAAK,EACL;QACE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;QAC3B,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;KAC5B,EACD,4BAA4B,CAC7B,CAAC;IACF,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,oBAAoB,CAClB,KAAK,EACL,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EACjD,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACnC,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,UAAU,CAClB,qHAAqH,CACtH,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;IAE3C,2EAA2E;IAC3E,+EAA+E;IAC/E,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC;IAC1B,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;IACjD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,4BAA4B,CAAC;QAC5C,WAAW;QACX,OAAO;QACP,OAAO;KACR,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,QAAQ;QACR,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;KACjD,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Klein-Gordon dispersion-relation numerical evaluator (G-7 debt closure).\n *\n * Companion to the symbolic predicate `KleinGordonEquationNode`\n * (`src/dimensional/klein-gordon-equation.ts`, Part-X §X.5): the predicate\n * pins structure + dimensions of `(□ + m²)φ = J`; this module supplies the\n * numerical content for the *free-field plane-wave sector*.\n *\n * A plane wave φ ~ exp(i(k·x − ωt)) solves the free Klein-Gordon equation\n * `(□ + m²)φ = 0` iff the dispersion relation holds\n * (Peskin & Schroeder 1995, *An Introduction to Quantum Field Theory*,\n * §2.1 — ω_k² = |k|² + m² in natural units; restoring SI factors):\n *\n * ω² = c² k² + (m c² / ℏ)²\n *\n * where ω_C = m c² / ℏ is the (angular) Compton frequency of the field\n * quantum. The evaluator returns the **scale-normalized residual**\n *\n * r = (ω² − c²k² − ω_C²) / (ω² + c²k² + ω_C²)\n *\n * which is dimensionless, bounded in (−1, 1), and zero iff the plane wave\n * solves the free KG equation — the same residual-normalization discipline\n * as `evaluateEinsteinEquationResidual` (src/numerical/einstein-equation.ts),\n * adapted to the algebraic (no-FD) plane-wave case.\n *\n * Scope note (honesty policy): this closes the dispersion-relation slice of\n * the missing-evaluator debt only. A full finite-difference wave-operator\n * evaluator `□φ` on coordinate grids (the analogue of the curvature lowering\n * pipeline) remains future work.\n *\n * @module numerical/klein-gordon\n */\n\nimport { C_SI, HBAR_SI } from '../core/constants.js';\nimport { validateFiniteInputs } from './input-validation.js';\n\n/**\n * Input bag for {@link evaluateKGDispersionResidual}.\n *\n * @public\n */\nexport interface KGDispersionResidualInput {\n /** Angular frequency ω of the plane wave (rad/s). Must be > 0 and finite. */\n readonly omega_per_s: number;\n /** Wavenumber magnitude |k| (m⁻¹). Must be ≥ 0 and finite. */\n readonly k_per_m: number;\n /** Field-quantum mass m (kg). Must be ≥ 0 and finite (0 = massless field). */\n readonly mass_kg: number;\n}\n\n/**\n * Input bag for {@link verifyKleinGordonPlaneWave}.\n *\n * @public\n */\nexport interface KGPlaneWaveVerifyInput {\n /** Field-quantum mass m (kg). Must be ≥ 0 and finite (0 = massless field). */\n readonly mass_kg: number;\n /** Wavenumber magnitude |k| (m⁻¹). Must be ≥ 0 and finite. */\n readonly k_per_m: number;\n /**\n * Maximum tolerated |residual| for the closure check.\n * Default 1e-12 (the algebraic round-trip lands at the few-ULP level,\n * ≲ 1e-15; 1e-12 leaves ~3 orders of headroom, mirroring the\n * measure-then-lock convention of `verifyKillingEquation`).\n */\n readonly tolerance?: number;\n}\n\n/**\n * Result of {@link verifyKleinGordonPlaneWave}.\n *\n * @public\n */\nexport interface KGPlaneWaveVerifyResult {\n /** The exact dispersion root ω = √(c²k² + (mc²/ℏ)²) (rad/s). */\n readonly omega_per_s: number;\n /** Scale-normalized dispersion residual at the constructed ω (dimensionless). */\n readonly residual: number;\n /** Whether |residual| ≤ tolerance. */\n readonly withinTolerance: boolean;\n}\n\n/**\n * Evaluate the dimensionless free-field Klein-Gordon dispersion residual\n *\n * r = (ω² − c²k² − (m c²/ℏ)²) / (ω² + c²k² + (m c²/ℏ)²)\n *\n * r = 0 iff the plane wave φ ~ exp(i(k·x − ωt)) solves the free KG equation\n * (□ + m²)φ = 0 — i.e. iff ω² = c²k² + (mc²/ℏ)² (Peskin & Schroeder 1995\n * §2.1, ω_k² = |k|² + m² in natural units, SI factors restored).\n *\n * The denominator ω² + c²k² + ω_C² is strictly positive on the validated\n * domain (ω > 0), so r is well-defined, dimensionless, and bounded in\n * (−1, 1): r → +1 for ω far above the mass shell, r → −1 far below.\n *\n * @param input - ω (rad/s, > 0), |k| (m⁻¹, ≥ 0), m (kg, ≥ 0).\n * @returns Dimensionless residual r ∈ (−1, 1); 0 on the mass shell.\n *\n * @example\n * ```typescript\n * import { evaluateKGDispersionResidual } from 'universal-physics-tensor';\n * import { C_SI } from 'universal-physics-tensor';\n *\n * // Massless field: ω = ck is exactly on shell.\n * const k = 1e7; // m⁻¹\n * const r = evaluateKGDispersionResidual({\n * omega_per_s: C_SI * k,\n * k_per_m: k,\n * mass_kg: 0,\n * });\n * // r === 0\n * ```\n *\n * @public\n */\nexport function evaluateKGDispersionResidual(\n input: KGDispersionResidualInput,\n): number {\n validateFiniteInputs(\n input,\n [\n { name: 'omega_per_s', min: 0, excludeMin: true },\n { name: 'k_per_m', min: 0 },\n { name: 'mass_kg', min: 0 },\n ],\n 'evaluateKGDispersionResidual',\n );\n const { omega_per_s, k_per_m, mass_kg } = input;\n\n const omega2 = omega_per_s * omega_per_s;\n const ck = C_SI * k_per_m;\n const ck2 = ck * ck;\n // Compton angular frequency ω_C = m c² / ℏ (rad/s).\n const omegaC = (mass_kg * C_SI * C_SI) / HBAR_SI;\n const omegaC2 = omegaC * omegaC;\n\n return (omega2 - ck2 - omegaC2) / (omega2 + ck2 + omegaC2);\n}\n\n/**\n * Closure check for the free Klein-Gordon plane-wave sector (the algebraic\n * analogue of `verifyKillingEquation`'s residual-plus-tolerance pattern):\n * construct the exact positive dispersion root\n *\n * ω = √(c²k² + (m c²/ℏ)²)\n *\n * (Peskin & Schroeder 1995 §2.1) and feed it back through\n * {@link evaluateKGDispersionResidual}, verifying the residual closes to ~0.\n * Round-trip error is pure IEEE-754 rounding (one sqrt + one squaring over\n * identical intermediates), so |residual| lands at the few-ULP level.\n *\n * Degenerate-domain guard: `mass_kg` and `k_per_m` must not both be zero\n * (ω = 0 is outside the evaluator's ω > 0 domain — there is no zero-frequency\n * plane wave).\n *\n * @param input - m (kg, ≥ 0), |k| (m⁻¹, ≥ 0), optional tolerance (default 1e-12).\n * @returns `{ omega_per_s, residual, withinTolerance }`.\n *\n * @example\n * ```typescript\n * import { verifyKleinGordonPlaneWave } from 'universal-physics-tensor';\n *\n * // Electron-mass scalar at k = 1e10 m⁻¹.\n * const { omega_per_s, residual, withinTolerance } = verifyKleinGordonPlaneWave({\n * mass_kg: 9.1093837015e-31,\n * k_per_m: 1e10,\n * });\n * // omega_per_s ≈ 7.83e20 rad/s, |residual| ≲ 1e-15, withinTolerance === true\n * ```\n *\n * @public\n */\nexport function verifyKleinGordonPlaneWave(\n input: KGPlaneWaveVerifyInput,\n): KGPlaneWaveVerifyResult {\n validateFiniteInputs(\n input,\n [\n { name: 'mass_kg', min: 0 },\n { name: 'k_per_m', min: 0 },\n ],\n 'verifyKleinGordonPlaneWave',\n );\n if (input.tolerance !== undefined) {\n validateFiniteInputs(\n input,\n [{ name: 'tolerance', min: 0, excludeMin: true }],\n 'verifyKleinGordonPlaneWave',\n );\n }\n const { mass_kg, k_per_m } = input;\n if (mass_kg === 0 && k_per_m === 0) {\n throw new RangeError(\n 'verifyKleinGordonPlaneWave: mass_kg and k_per_m must not both be zero (degenerate ω = 0 has no plane-wave solution)',\n );\n }\n const tolerance = input.tolerance ?? 1e-12;\n\n // Same intermediates as the residual evaluator (ck, ω_C) so the round-trip\n // cancels to the IEEE-754 floor rather than accumulating re-association noise.\n const ck = C_SI * k_per_m;\n const omegaC = (mass_kg * C_SI * C_SI) / HBAR_SI;\n const omega_per_s = Math.sqrt(ck * ck + omegaC * omegaC);\n\n const residual = evaluateKGDispersionResidual({\n omega_per_s,\n k_per_m,\n mass_kg,\n });\n\n return {\n omega_per_s,\n residual,\n withinTolerance: Math.abs(residual) <= tolerance,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"kretschmann.js","sourceRoot":"","sources":["../../src/numerical/kretschmann.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,MAAM,UAAU,kBAAkB,CAChC,YAA4B,EAC5B,aAAwC;IAExC,oEAAoE;IACpE,kEAAkE;IAClE,IAAI,IAAkB,CAAC;IACvB,IAAI,aAAa,YAAY,YAAY,EAAE,CAAC;QAC1C,IAAI,GAAG,aAAa,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QAC5B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YAC9B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;gBAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,GAAG,GAAG,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,GAAG,GAAG,UAAU,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wBACpB,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACzB,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACzB,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACzB,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,GAAG,GAAG,EAAE,CAAC;QAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACZ,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;oBACpC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;wBACrC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEpB,mBAAmB;gBACnB,mDAAmD;gBACnD,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC9B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBAChB,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;wBACjC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;wBACpC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACxC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACxC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBAED,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;oBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;oBACvB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBAChB,IAAI,MAAM,GAAG,CAAC,CAAC;wBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC3B,MAAM,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC7C,CAAC;wBACD,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"kretschmann.js","sourceRoot":"","sources":["../../src/numerical/kretschmann.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Kretschmann scalar numerical contraction (v0.6.0 Phase 3, Task 3.6;\n * factored-raising optimization 2026-06-11).\n *\n * Computes K = R_{ρσμν} R^{ρσμν} from the fully-lowered Riemann tensor and\n * the inverse metric by raising all four indices on the second Riemann factor.\n *\n * **PERFORMANCE (2026-06-11 optimization)**: the original implementation\n * raised all four indices inside the contraction loop — O(4⁸) = 65536\n * inner products (~327k multiplications). The current implementation\n * factors the four-index raise into FOUR successive single-index raisings\n * (4 × 4⁵ = 4096 multiply-adds) plus one 256-term contraction — a ~70×\n * reduction in multiplications that is EXACT for arbitrary input (pure\n * reassociation of the sums; no Riemann-symmetry assumption). See the\n * algorithm notes inside {@link computeKretschmann}.\n *\n * @module numerical/kretschmann\n */\n\n/**\n * Kretschmann invariant K = R_{ρσμν} R^{ρσμν}.\n *\n * Algorithm:\n * 1. Raise all four indices on the second Riemann factor:\n * R^{ρσμν} = g^{ρα} g^{σβ} g^{μγ} g^{νδ} R_{αβγδ}\n * — factored as four successive single-index raisings (see below).\n * 2. Contract:\n * K = Σ_{ρσμν} R_{ρσμν} · R^{ρσμν}\n *\n * **Factored raising (exact, input-shape-agnostic).** The naive raise is a\n * rank-8 contraction, O(4⁸). Because the four metric factors each touch a\n * single Riemann index, the sum factors exactly:\n *\n * T1^ρ_{βγδ} = g^{ρα} R_{αβγδ} (axis-0 raise, 4⁵ = 1024 mult-adds)\n * T2^{ρσ}_{γδ} = g^{σβ} T1^ρ_{βγδ} (axis-1 raise, 1024)\n * T3^{ρσμ}_δ = g^{μγ} T2^{ρσ}_{γδ} (axis-2 raise, 1024)\n * R^{ρσμν} = g^{νδ} T3^{ρσμ}_δ (axis-3 raise, 1024)\n *\n * This is a pure reassociation of the quadruple sum — mathematically\n * identical for ARBITRARY (even non-antisymmetric) `riemannLower` input,\n * which matters because the FD-built Riemann is only approximately\n * antisymmetric.\n *\n * **Rejected alternative — symmetry pair-iteration.** Under EXACT Riemann\n * antisymmetry (R_{ρσμν} = −R_{σρμν} = −R_{ρσνμ}) all components with\n * ρ = σ or μ = ν vanish and the survivors come in sign-pairs, so the\n * contraction collapses to the 6×6 independent index PAIRS:\n *\n * K = 4 · Σ_{ρ<σ} Σ_{μ<ν} R_{ρσμν} R^{ρσμν}\n *\n * (each unordered pair contributes 4 ordered combinations whose sign\n * factors square away: (−1)·(−1) = +1). That formula is NOT identical to\n * the full sum for arbitrary input — the FD pipeline produces small\n * antisymmetry violations — so it was rejected in favour of the factored\n * raise, which needs no input-symmetry assumption.\n *\n * @param riemannLower - R_{ρσμν}: all-lower Riemann tensor, shape [4][4][4][4].\n * Obtain by lowering R^ρ_{σμν} via g_{ρα}: R_{αβγδ} = g_{αρ} R^ρ_{βγδ}.\n * @param metricInverse - g^{αβ}: inverse metric. Either nested `number[][]`\n * (shape [4][4]) or row-major `Float64Array(16)` with `flat[mu*4 + nu]`\n * (the v0.9.0 fixture layout). Normalized ONCE at entry — O-4 widening,\n * non-breaking for existing nested callers.\n * @returns K, a scalar. Dimension [L⁻⁴] (Riemann is [L⁻²] per F8/I3 convention).\n *\n * @example\n * ```typescript\n * import { computeKretschmann, G_SI, C_SI } from 'universal-physics-tensor';\n * import {\n * schwarzschildGFn,\n * schwarzschildGInverseFn,\n * schwarzschildRs,\n * } from '../tests/fixtures/schwarzschild.js';\n * import { riemannLowerAt } from '../src/numerical/curvature-lowering-helpers.js';\n * import { MathTSEngine } from '../src/numerical/mathts-engine.js';\n *\n * const M = 1.989e30;\n * const r_s = schwarzschildRs(M);\n * const r = 5 * r_s;\n * const x: [number, number, number, number] = [0, r, Math.PI / 2, 0];\n *\n * const engine = new MathTSEngine();\n * const rLower = riemannLowerAt(x, schwarzschildGFn(M), schwarzschildGInverseFn(M), 4, engine);\n * const gInv = schwarzschildGInverseFn(M)(x); // Float64Array(16) — accepted directly\n * const K = computeKretschmann(rLower, gInv);\n *\n * // Schwarzschild closed-form: K = 48 G² M² / (c⁴ r⁶)\n * const K_analytic = 48 * G_SI**2 * M**2 / (C_SI**4 * r**6);\n * // |K - K_analytic| / K_analytic < 1e-4\n * ```\n *\n * @public\n */\nexport function computeKretschmann(\n riemannLower: number[][][][],\n metricInverse: number[][] | Float64Array,\n): number {\n // O-4: normalize the inverse metric ONCE at entry to row-major flat\n // g[mu*4 + nu]. Float64Array inputs pass through without copying.\n let gInv: Float64Array;\n if (metricInverse instanceof Float64Array) {\n gInv = metricInverse;\n } else {\n gInv = new Float64Array(16);\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) {\n gInv[mu * 4 + nu] = metricInverse[mu][nu];\n }\n }\n }\n\n // Axis-0 raise: T1[ρ,β,γ,δ] = Σ_α g^{ρα} R[α,β,γ,δ]\n const T1 = new Float64Array(256);\n for (let rho = 0; rho < 4; rho++) {\n const rho_offset = rho * 64;\n for (let a = 0; a < 4; a++) {\n const g = gInv[rho * 4 + a];\n if (g !== 0) {\n const Ra = riemannLower[a];\n let idx = rho_offset;\n for (let b = 0; b < 4; b++) {\n const Rab = Ra[b];\n for (let c = 0; c < 4; c++) {\n const Rabc = Rab[c];\n T1[idx++] += g * Rabc[0];\n T1[idx++] += g * Rabc[1];\n T1[idx++] += g * Rabc[2];\n T1[idx++] += g * Rabc[3];\n }\n }\n }\n }\n }\n\n // Axis-1 raise: T2[ρ,σ,γ,δ] = Σ_β g^{σβ} T1[ρ,β,γ,δ]\n const T2 = new Float64Array(256);\n for (let rho = 0; rho < 4; rho++) {\n const r_offset = rho * 64;\n for (let sigma = 0; sigma < 4; sigma++) {\n const rs_offset = r_offset + sigma * 16;\n for (let b = 0; b < 4; b++) {\n const g = gInv[sigma * 4 + b];\n if (g !== 0) {\n const rb_offset = r_offset + b * 16;\n for (let rest = 0; rest < 16; rest++) {\n T2[rs_offset + rest] += g * T1[rb_offset + rest];\n }\n }\n }\n }\n }\n\n // Axis-2 and Axis-3 raises fused with the final contraction:\n let K = 0;\n for (let a = 0; a < 4; a++) {\n const Ra = riemannLower[a];\n const a_offset = a * 64;\n for (let b = 0; b < 4; b++) {\n const Rab = Ra[b];\n const ab_offset = a_offset + b * 16;\n for (let c = 0; c < 4; c++) {\n const Rabc = Rab[c];\n\n // Cache sum over e\n // T3_partial[d] = sum_{e} gInv[c, e] * T2[a,b,e,d]\n const T3_partial = [0, 0, 0, 0];\n for (let e = 0; e < 4; e++) {\n const g_c_e = gInv[c * 4 + e];\n if (g_c_e !== 0) {\n const T2_idx = ab_offset + e * 4;\n T3_partial[0] += g_c_e * T2[T2_idx];\n T3_partial[1] += g_c_e * T2[T2_idx + 1];\n T3_partial[2] += g_c_e * T2[T2_idx + 2];\n T3_partial[3] += g_c_e * T2[T2_idx + 3];\n }\n }\n\n for (let nu = 0; nu < 4; nu++) {\n const R_val = Rabc[nu];\n if (R_val !== 0) {\n let raised = 0;\n for (let d = 0; d < 4; d++) {\n raised += gInv[nu * 4 + d] * T3_partial[d];\n }\n K += R_val * raised;\n }\n }\n }\n }\n }\n return K;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"lowering-utils.js","sourceRoot":"","sources":["../../src/numerical/lowering-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;WACpC,CAAwB,CAAC,IAAI,KAAK,eAAe,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAuB;IACjD,OAAO,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAuB;IAChE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,qBAAqB,CAAC,oCAAoC,IAAI,qBAAqB,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAiB,EAAE,YAAoB;IACxE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,qBAAqB,CAC7B,qCAAqC,GAAG,CAAC,MAAM,uBAAuB,YAAY,EAAE,CACrF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"lowering-utils.js","sourceRoot":"","sources":["../../src/numerical/lowering-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;WACpC,CAAwB,CAAC,IAAI,KAAK,eAAe,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAuB;IACjD,OAAO,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAuB;IAChE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,qBAAqB,CAAC,oCAAoC,IAAI,qBAAqB,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAiB,EAAE,YAAoB;IACxE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,qBAAqB,CAC7B,qCAAqC,GAAG,CAAC,MAAM,uBAAuB,YAAY,EAAE,CACrF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["/**\n * Shared private utilities for the `numerical/lowering*.ts` modules.\n *\n * Carved out of `lowering.ts` in the v0.7 follow-up to its v0.6.1\n * sprint-target miss (LOC 903 vs ≤890). Centralizes the four helpers\n * that both `lowering.ts` and the v0.7 `derivative-lowering.ts`\n * need, avoiding both a forward-import cycle and code duplication.\n *\n * No public surface — every export carries an `@internal` JSDoc tag.\n *\n * @module numerical/lowering-utils\n */\n\nimport type { NumericalInputs, NestedArray } from './types.js';\nimport type { MetricTensorNode } from '../dimensional/metric-validators.js';\nimport { NumericalBackendError } from './errors.js';\nimport { flattenNA } from './connection-lowering-helpers.js';\n\n/**\n * Module-private type predicate for the `metric-tensor` AST kind.\n * Replaces the duplicated `(n as { kind?: unknown }).kind ===\n * 'metric-tensor'` cast pattern. TypeScript narrows the operand to\n * `MetricTensorNode` after the predicate, removing follow-up `as\n * MetricTensorNode` casts.\n *\n * @internal\n */\nexport function isMetricTensorNode(n: unknown): n is MetricTensorNode {\n return typeof n === 'object' && n !== null\n && (n as { kind?: unknown }).kind === 'metric-tensor';\n}\n\n/**\n * Coordinate-space dimension supplied via `NumericalInputs.dimension`,\n * defaulting to 4 (spacetime). Read at most case-arms in lowering.\n *\n * @internal\n */\nexport function dimensionOf(inputs: NumericalInputs): number {\n return inputs.dimension ?? 4;\n}\n\n/**\n * Look up a named tensor's concrete value from\n * `NumericalInputs.tensors`, or throw with a clear message.\n *\n * @internal\n */\nexport function requireValue(name: string, inputs: NumericalInputs): NestedArray {\n const v = inputs.tensors.get(name);\n if (v === undefined) {\n throw new NumericalBackendError(`lowering: no value supplied for \"${name}\" in inputs.tensors`);\n }\n return v;\n}\n\n/**\n * Flatten a `NestedArray` to a plain `number[]` and check the result\n * matches `expectedSize`. Wraps the canonical `flattenNA()` with a\n * size-mismatch guard so consumers don't silently swallow bad input.\n *\n * @internal\n */\nexport function flattenNestedArray(data: NestedArray, expectedSize: number): number[] {\n const out = flattenNA(data);\n if (out.length !== expectedSize) {\n throw new NumericalBackendError(\n `lowering: flattenNestedArray: got ${out.length} elements, expected ${expectedSize}`,\n );\n }\n return out;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"lowering.d.ts","sourceRoot":"","sources":["../../src/numerical/lowering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,6BAA6B,CAAC;AAiB9E,OAAO,KAAK,EACV,YAAY,EAAE,YAAY,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAyW/D;;;;;;;;;;GAUG;AACH,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,KAAK,gBAAgB,GACjB,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,GACf,uBAAuB,GACvB,mBAAmB,CAAC;AAExB,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAqBxF,CAAC;AAMF;gFACgF;AAChF,wBAAgB,SAAS,CACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,YAAY,GACnB,YAAY,CAuQd"}
1
+ {"version":3,"file":"lowering.d.ts","sourceRoot":"","sources":["../../src/numerical/lowering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAkB5D,OAAO,KAAK,EACV,YAAY,EAAE,YAAY,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAyW/D;;;;;;;;;;GAUG;AACH,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,KAAK,gBAAgB,GACjB,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,GACf,uBAAuB,GACvB,mBAAmB,CAAC;AAExB,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAqBxF,CAAC;AAMF;gFACgF;AAChF,wBAAgB,SAAS,CACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,YAAY,GACnB,YAAY,CA4Pd"}
@@ -10,6 +10,7 @@
10
10
  *
11
11
  * @module numerical/lowering
12
12
  */
13
+ import { callBuiltinFunction } from './formula-contract.js';
13
14
  import { computeContraction, validateTensorSymbol } from '../dimensional/tensor.js';
14
15
  import { validateMetricTensor, validateKroneckerDelta, validatePartialDerivative, } from '../dimensional/metric-validators.js';
15
16
  import { NumericalBackendError } from './errors.js';
@@ -356,39 +357,28 @@ export function lowerNode(node, inputs, engine) {
356
357
  else if (node.op === '/')
357
358
  value = scalars.reduce((a, b) => a / b);
358
359
  else
359
- value = Math.pow(scalars[0], scalars[1]); // '^'
360
+ value = callBuiltinFunction('pow', scalars); // '^': the one table's body
360
361
  return engine.fromNested(value, []);
361
362
  }
362
363
  case 'transcendental': {
363
364
  // Scalar transcendental of a rank-0 dimensionless argument. Materialise
364
- // the arg to a number and apply Math.* (same lower-to-JS pattern as the
365
- // scalar 'op' case above).
365
+ // the arg to a number and apply the one function table's body (same
366
+ // lower-to-JS pattern as the scalar 'op' case above). Each grammar node
367
+ // name is a table key.
366
368
  const argT = lowerNode(node.arg, inputs, engine);
367
369
  if (argT.shape.length !== 0) {
368
370
  throw new NumericalBackendError(`lowering: transcendental '${node.fn}' requires a rank-0 (scalar) argument, `
369
371
  + `got rank-${argT.shape.length}`);
370
372
  }
371
373
  const x = engine.toNested(argT);
372
- const TRANSCENDENTAL_FNS = {
373
- exp: Math.exp,
374
- ln: Math.log,
375
- log2: Math.log2,
376
- log10: Math.log10,
377
- sin: Math.sin,
378
- cos: Math.cos,
379
- tan: Math.tan,
380
- sinh: Math.sinh,
381
- cosh: Math.cosh,
382
- tanh: Math.tanh,
383
- };
384
- return engine.fromNested(TRANSCENDENTAL_FNS[node.fn](x), []);
374
+ return engine.fromNested(callBuiltinFunction(node.fn, [x]), []);
385
375
  }
386
376
  case 'abs': {
387
377
  const argT = lowerNode(node.arg, inputs, engine);
388
378
  if (argT.shape.length !== 0) {
389
379
  throw new NumericalBackendError(`lowering: abs requires a rank-0 (scalar) argument, got rank-${argT.shape.length}`);
390
380
  }
391
- return engine.fromNested(Math.abs(engine.toNested(argT)), []);
381
+ return engine.fromNested(callBuiltinFunction('abs', [engine.toNested(argT)]), []);
392
382
  }
393
383
  case 'tensor-product': {
394
384
  for (const arg of node.args) {
@@ -1 +1 @@
1
- {"version":3,"file":"lowering.js","sourceRoot":"","sources":["../../src/numerical/lowering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lowering.js","sourceRoot":"","sources":["../../src/numerical/lowering.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AST → EngineTensor lowering. Walks a validated ExprNode tree and emits\n * TensorEngine calls. The tensor-product case turns computeContraction()'s\n * contractionPairs into an EinsumSpec (v0.3.5-Design.md §5).\n *\n * v0.3.5 scope: flat tensor-products of contractable operands (the three\n * index-carrying nodes + tensor-partial-derivative) + scalar operands.\n * Nested products, integral/derivative numerical eval are out of scope and\n * throw clearly.\n *\n * @module numerical/lowering\n */\n\nimport type { ExprNode } from '../dimensional/validator.js';\nimport { callBuiltinFunction } from './formula-contract.js';\nimport { validate } from '../dimensional/validator.js';\nimport type { TensorIndex, TensorSymbolNode } from '../dimensional/tensor.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport { computeContraction, validateTensorSymbol } from '../dimensional/tensor.js';\nimport { pderivGrid, pderivNumericalFn, pderivSymbolic } from './pderiv.js';\nimport {\n validateMetricTensor,\n validateKroneckerDelta,\n validatePartialDerivative,\n} from '../dimensional/metric-validators.js';\nimport type { MetricTensorNode } from '../dimensional/metric-validators.js';\nimport type { CovariantDerivativeNode, RiemannTensorNode } from '../dimensional/connection-validators.js';\nimport type { RicciTensorNode, EinsteinTensorNode, BianchiResidualNode } from '../dimensional/curvature.js';\nimport type { WeylTensorNode } from '../dimensional/weyl-validators.js';\nimport type { KretschmannScalarNode } from '../dimensional/curvature-invariants.js';\nimport type { CurvatureKind } from '../dimensional/curvature-composite.js';\nimport type {\n EngineTensor, TensorEngine, EinsumSpec, EinsumContraction,\n} from './tensor-engine.js';\nimport type { NumericalInputs, NestedArray } from './types.js';\nimport { NumericalBackendError } from './errors.js';\nimport { integrateGaussLegendre } from './quadrature.js';\nimport {\n zeroTensor,\n zeroTensorLike,\n flatToNested,\n flattenNA,\n tensorAdd,\n tensorAddScaled,\n computeChristoffelTensor,\n contractChristoffelWithOperand,\n getMetricDerivFlat,\n} from './connection-lowering-helpers.js';\nimport {\n christoffelAt,\n dGammaAt,\n buildRiemann,\n contractRiemannJS,\n // v0.6.1 Phase 2: the bianchi-residual + weyl-tensor arms moved into\n // these two helpers (full FD pipeline + result-wrap).\n lowerBianchiResidual,\n lowerWeylTensor,\n lowerKretschmannScalar,\n type MetricFn,\n} from './curvature-lowering-helpers.js';\n// v0.7 follow-up to v0.6.1's LOC-target miss: the four private helpers\n// (isMetricTensorNode, dimensionOf, requireValue, flattenNestedArray)\n// live in lowering-utils.ts so the new derivative-lowering.ts can\n// share them without a forward-import cycle.\nimport {\n isMetricTensorNode,\n dimensionOf,\n requireValue,\n flattenNestedArray,\n} from './lowering-utils.js';\n// v0.7 follow-up: tensor-partial-derivative + covariant-derivative\n// case arms extracted (was lines 523-820, ~298 LOC). The recursive\n// lowerNode call is threaded as a thunk to keep the module graph\n// acyclic.\nimport {\n lowerTensorPartialDerivative,\n lowerCovariantDerivative,\n} from './derivative-lowering.js';\n\n/** Operand kinds a flat tensor-product can lower in v0.3.5: the three\n * index-carrying nodes plus tensor-partial-derivative (whose effective\n * indices are `of`'s indices followed by its wrtIndex).\n *\n * NOTE: Explicitly enumerated rather than structural Extract to avoid\n * accidentally including future index-carrying nodes (e.g.,\n * StressEnergyTensorNode) that are not contractable in the einsum sense. */\ntype ContractableNode =\n | Extract<ExprNode, { kind: 'tensor-symbol' }>\n | Extract<ExprNode, { kind: 'metric-tensor' }>\n | Extract<ExprNode, { kind: 'kronecker-delta' }>\n | Extract<ExprNode, { kind: 'tensor-partial-derivative' }>;\n\nfunction isContractable(node: ExprNode): node is ContractableNode {\n return node.kind === 'tensor-symbol'\n || node.kind === 'metric-tensor'\n || node.kind === 'kronecker-delta'\n || node.kind === 'tensor-partial-derivative';\n}\n\n/** The effective index list of a contractable operand, in the SAME axis\n * order as its lowered EngineTensor. For the three index-carrying nodes\n * that is `node.indices`. For ∂_μ(of) the lowered tensor has shape\n * [...ofShape, N] (Task 10), so the effective indices are `of`'s indices\n * (v0.3.5: `of` is a tensor-symbol or metric-tensor) followed by the wrtIndex. */\nfunction operandIndices(node: ContractableNode): ReadonlyArray<TensorIndex> {\n if (node.kind === 'tensor-partial-derivative') {\n const of = node.of as ExprNode;\n if (of.kind !== 'tensor-symbol' && of.kind !== 'metric-tensor') {\n throw new NumericalBackendError(\n `lowering: a tensor-partial-derivative operand requires a tensor-symbol or `\n + `metric-tensor 'of' in v0.3.5/v0.4.0 — got '${of.kind}'`,\n );\n }\n return [...of.indices, node.wrtIndex];\n }\n return node.indices;\n}\n\n/**\n * Build the EinsumSpec for a flat tensor-product.\n *\n * NOTE: this function does NOT decide which indices contract. That authority\n * belongs to `computeContraction()` (v0.2.0 symbolic-layer) — variance-aware,\n * implicit-identity-metric rule — which already classified every label as\n * contracted or free. buildEinsumSpec only maps those already-classified\n * labels to their (operand, axis) sites. There is exactly one\n * contraction-decision implementation in the codebase.\n *\n * v0.6.1: dropped export — was @internal-tagged with no external consumer.\n * `lowerTensorProduct` (this file) is the only call site.\n */\nfunction buildEinsumSpec(\n operands: ReadonlyArray<ContractableNode>,\n contractionPairs: ReadonlyArray<{ label: string }>,\n freeIndices: ReadonlyMap<string, { upper: number; lower: number }>,\n): EinsumSpec {\n // Map every label to its (operand, axis) sites — via operandIndices() so a\n // tensor-partial-derivative operand contributes its [...of.indices, wrtIndex]\n // effective axes.\n const sites = new Map<string, Array<[number, number]>>();\n operands.forEach((op, opIndex) => {\n operandIndices(op).forEach((idx, axis) => {\n const list = sites.get(idx.label) ?? [];\n list.push([opIndex, axis]);\n sites.set(idx.label, list);\n });\n });\n\n // Contractions: computeContraction told us exactly which labels contract.\n const contractions: EinsumContraction[] = [];\n for (const { label } of contractionPairs) {\n const locs = sites.get(label);\n if (!locs || locs.length !== 2) {\n throw new NumericalBackendError(\n `buildEinsumSpec: contracted label \"${label}\" must occur at exactly 2 `\n + `operand sites, found ${locs?.length ?? 0}`,\n );\n }\n contractions.push({ pair: [locs[0], locs[1]] });\n }\n\n // Free axes in computeContraction's freeIndices order — the symbolic\n // layer's canonical ordering, so the numerical result's axis order\n // matches what the rest of UPT expects.\n const free: Array<{ operand: number; axis: number }> = [];\n for (const label of freeIndices.keys()) {\n const locs = sites.get(label);\n if (!locs || locs.length !== 1) {\n throw new NumericalBackendError(\n `buildEinsumSpec: free label \"${label}\" must occur at exactly 1 `\n + `operand site, found ${locs?.length ?? 0}`,\n );\n }\n free.push({ operand: locs[0][0], axis: locs[0][1] });\n }\n\n return { contractions, free };\n}\n\n/** Lower a contractable operand to a concrete EngineTensor. */\nfunction lowerContractable(\n node: ContractableNode, inputs: NumericalInputs, engine: TensorEngine,\n): EngineTensor {\n const N = dimensionOf(inputs);\n if (node.kind === 'kronecker-delta') return engine.identity(N);\n if (node.kind === 'tensor-partial-derivative') {\n // Delegate to lowerNode, which handles all three numericalForm paths.\n return lowerNode(node, inputs, engine);\n }\n // tensor-symbol / metric-tensor: shape is N per index.\n const shape = node.indices.map(() => N);\n return engine.fromNested(requireValue(node.name, inputs), shape);\n}\n\n/**\n * Dispatcher for the six curvature-composite AST kinds.\n *\n * v0.6.0 Task 3.10e: extracted from `lowerNode`'s switch so all curvature\n * lowering logic lives in one named helper. It switches on `node.kind`\n * directly; `CURVATURE_KIND_REGISTRY` is not read here. The numerical paths\n * are preserved verbatim from the prior per-kind arms — no logic changes.\n *\n * Called from `lowerNode` for all `CurvatureKind` discriminants.\n * @internal\n */\nfunction lowerCurvature(\n node: ExprNode & { kind: CurvatureKind },\n inputs: NumericalInputs,\n engine: TensorEngine,\n): EngineTensor {\n switch (node.kind) {\n case 'ricci-tensor': {\n // v0.5.0 Task 7 — Ricci R_μν = R^λ_{μλν} (Carroll Eq. 3.91). Lowers\n // the embedded Riemann tensor via the 'riemann-tensor' case (so all\n // FD machinery is shared), then contracts upper-ρ with the SECOND\n // lower slot (the μ slot of R^ρ_σμν — i.e., axis index 2 in the\n // [ρ, σ, μ, ν] storage) by summing R[λ][σ][λ][ν] over λ. The\n // surviving free axes are lowerIndices[0] (the σ slot, becoming\n // Ricci's first free index μ_out) and lowerIndices[2] (the ν slot,\n // becoming Ricci's second free index ν_out).\n //\n // Convention note (deviates from the Task 7 prompt's stated S1 rule\n // but agrees with Carroll Eq. 3.91 and the constant-curvature\n // identity R_μν = (n-1)·K·g_μν → R = 4Λ for de Sitter in n=4): the\n // prompt's \"contract upper↔lowerIndices[0] (σ)\" trace is the\n // first-pair antisymmetric trace `R^λ_λμν`, which is identically\n // zero for the (lowered) Riemann's first-pair antisymmetry — it\n // would zero out the de-Sitter Ricci scalar, contradicting both the\n // closed-form fixture and the test target R_scalar = 4Λ. The\n // mathematically correct contraction that satisfies the de-Sitter\n // test target is upper↔lowerIndices[1] (the middle/μ slot),\n // matching Carroll Eq. 3.91 verbatim.\n //\n // No new AST primitive in the contraction: the inner Riemann\n // returns an [N,N,N,N] EngineTensor; we materialise it via\n // engine.toNested, contract on the JS side, and lift back via\n // engine.fromNested. (Mirrors the philosophy of Task 6: walk the\n // composite node directly, no rewrite into a tensor-product.)\n const ricciNode = node as RicciTensorNode;\n const N = dimensionOf(inputs);\n // RiemannTensorNode is a member of ExprNode and CurvatureKind — cast is safe.\n const innerR = lowerCurvature(\n ricciNode.riemann as ExprNode & { kind: CurvatureKind },\n inputs,\n engine,\n );\n const flatR = flattenNestedArray(engine.toNested(innerR) as NestedArray, N * N * N * N);\n\n // Contract R[λ][μ_out][λ][ν_out] → Ricci[μ_out][ν_out] via the shared\n // `contractRiemannJS` helper (AS-1, v0.5.1). On R^ρ_{σμν} stored as\n // R[ρ][σ][μ][ν], the Carroll Eq. 3.91 contraction is upperAxis=0 (ρ)\n // against lowerAxis=2 (μ); free outputs are axes [1, 3] = (σ, ν).\n const ricci2d = contractRiemannJS(flatR, N, {\n upperAxis: 0, lowerAxis: 2, outAxes: [1, 3],\n });\n return engine.fromNested(ricci2d as NestedArray, [N, N]);\n }\n\n case 'einstein-tensor': {\n // v0.5.0 Task 8 — Einstein G_μν = R_μν − ½ R g_μν.\n //\n // Lowers in three steps and folds them on the JS side (same\n // walk-directly philosophy as ricci-tensor — no AST rewrite into a\n // 'op'/'-' tree with a tensor-valued scalar-multiply, which the\n // v0.3.5 tensor-product einsum does not natively support):\n //\n // 1. Lower the inner ricci-tensor → R_μν (4×4 number[][])\n // 2. Look up g_μν and g^μν from inputs.tensors (constant raw values\n // at the coordinate point — same pattern as the riemann-tensor\n // case uses for `xCoord` / inputs.fields).\n // 3. Compute scalar R = Σ_{μν} g^{μν} R_{μν} on the JS side.\n // 4. Form G_{μν} = R_{μν} − ½ R · g_{μν} elementwise.\n //\n // Trace identity g^μν G_μν = −R is preserved EXACTLY in the\n // arithmetic (modulo cancellation noise) because both R and the\n // ½ R g_μν trace term are constructed from the same `Ric` and `g`\n // matrices — the test pins this to machine precision.\n const eNode = node as EinsteinTensorNode;\n const N = dimensionOf(inputs);\n\n // Step 1: inner Ricci R_μν via the ricci-tensor case (which itself\n // walks the riemann-tensor case for ∂Γ etc).\n const ricciNodeInner: RicciTensorNode = {\n kind: 'ricci-tensor', riemann: eNode.riemann,\n };\n const innerR = lowerCurvature(ricciNodeInner, inputs, engine);\n const Ric = engine.toNested(innerR) as number[][];\n\n // Step 2: g_μν and g^μν from inputs.tensors (raw constant matrices at\n // the test coordinate point). Mirrors how ricci-tensor's de-Sitter\n // closed-form test sources its metrics.\n const gFlat = flattenNestedArray(requireValue(eNode.gLower.name, inputs), N * N);\n const gInvFlat = flattenNestedArray(requireValue(eNode.gInverse.name, inputs), N * N);\n\n // Step 3: scalar R = Σ g^{μν} R_{μν}.\n let Rscalar = 0;\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n Rscalar += gInvFlat[mu * N + nu] * Ric[mu][nu];\n }\n }\n\n // Step 4: G_{μν} = R_{μν} − ½ R · g_{μν}.\n const G: number[][] = new Array(N);\n for (let i = 0; i < N; i++) {\n const row = new Array<number>(N);\n for (let j = 0; j < N; j++) row[j] = 0;\n G[i] = row;\n }\n const halfR = 0.5 * Rscalar;\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n G[mu][nu] = Ric[mu][nu] - halfR * gFlat[mu * N + nu];\n }\n }\n return engine.fromNested(G as NestedArray, [N, N]);\n }\n\n case 'bianchi-residual': {\n // v0.5.0 Task 9 — Bianchi-identity residual B_{λμνρσ}.\n // Extracted into `lowerBianchiResidual` in v0.6.1 Phase 2; the body\n // here is just the type-narrowed dispatch.\n return lowerBianchiResidual(node as BianchiResidualNode, inputs, engine);\n }\n\n case 'riemann-tensor': {\n // v0.5.0 Task 6 (Phase 1c-ii). Walks the node directly (no AST rewrite\n // into pderiv-of-Γ): evaluates Γ(x) via the v0.4.0\n // `computeChristoffelTensor` helper, then computes ∂Γ via centered FD\n // (M11 — pderiv-style, not a new AST kind or AD pass).\n const rNode = node as RiemannTensorNode;\n const N = dimensionOf(inputs);\n\n // Coordinate value: read from inputs.tensors[xCoord.name] (a flat\n // number[] of length N). This mirrors the test fixture's\n // 'x' tensor convention.\n const xCoordName = rNode.xCoord.name;\n const xRaw = requireValue(xCoordName, inputs);\n const x = flattenNestedArray(xRaw, N);\n\n // Coordinate-dependent metric closures: required for ∂g (inner FD) and\n // ∂Γ (outer FD). Looked up by name in inputs.fields.\n const gName = rNode.gLower.name;\n const gInvName = rNode.gInverse.name;\n const gFn = inputs.fields?.get(gName) as MetricFn | undefined;\n const gInverseFn = inputs.fields?.get(gInvName) as MetricFn | undefined;\n if (!gFn || !gInverseFn) {\n throw new NumericalBackendError(\n `lowering: riemann-tensor numerical evaluation requires coordinate-` +\n `dependent metric closures in inputs.fields for \"${gName}\" and \"${gInvName}\" ` +\n `(constant-metric Riemann is identically zero — the test wouldn't fire here). ` +\n `Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`,\n );\n }\n\n // Γ^ρ_{σν}(x) and ∂_λ Γ^ρ_{σν}(x).\n const gamma = christoffelAt(x, gFn, gInverseFn, N, engine);\n const dGamma = dGammaAt(x, gFn, gInverseFn, N, engine);\n\n // R[ρ][σ][μ][ν] per the Carroll formula (Adam+Eve F4-S3).\n const R = buildRiemann(gamma, dGamma, N);\n\n // Materialise back into an EngineTensor in [N,N,N,N] shape.\n return engine.fromNested(R as NestedArray, [N, N, N, N]);\n }\n\n case 'weyl-tensor': {\n // v0.6.0 Task 3.2 — Weyl C^ρ_{σμν}.\n // Extracted into `lowerWeylTensor` in v0.6.1 Phase 2; the body here\n // is just the type-narrowed dispatch.\n return lowerWeylTensor(node as WeylTensorNode, inputs, engine);\n }\n\n case 'kretschmann-scalar': {\n return lowerKretschmannScalar(node as KretschmannScalarNode, inputs, engine);\n }\n\n default: {\n // Compile-time exhaustiveness: in this default arm `node` is the\n // union of the deferred kinds (all others have explicit arms).\n // Excluding the registry-covered kinds must leave `never` — if a\n // new ExprNode kind lands without an arm OR a registry entry,\n // this assignment errors at tsc (Adam A-8 mitigation).\n const _exhaustive: never = node as Exclude<\n typeof node,\n { kind: DeferredNodeKind }\n >;\n void _exhaustive;\n throw new NumericalBackendError(\n `lowerCurvature: unhandled curvature kind ${JSON.stringify((node as { kind?: unknown }).kind)}`,\n );\n }\n }\n}\n\n/**\n * S-9 (v0.9.0): deferred-evaluator registry — the single source of\n * truth for AST kinds whose numerical evaluation lives in a dedicated\n * module instead of the lowering switch. The default arm consults this\n * registry and raises a descriptive error naming the canonical\n * evaluator; the per-kind explicit arms it replaces had drifted into\n * 5 near-identical bodies (v0.7.1 S-9 finding).\n *\n * Exhaustiveness is pinned by tests/numerical/lowering-deferred-arms.test.ts\n * (Adam A-8 mitigation: silent prose drift between registry and arms).\n */\ninterface DeferredEvaluatorEntry {\n readonly canonicalEvaluatorName: string;\n readonly moduleHint: string;\n}\n\ntype DeferredNodeKind =\n | 'killing-vector'\n | 'conserved-charge'\n | 'stress-energy'\n | 'cosmological-constant'\n | 'einstein-equation';\n\nexport const DEFERRED_EVALUATOR_REGISTRY: Record<DeferredNodeKind, DeferredEvaluatorEntry> = {\n 'killing-vector': {\n canonicalEvaluatorName: 'verifyKillingEquation',\n moduleHint: 'src/numerical/killing.ts',\n },\n 'conserved-charge': {\n canonicalEvaluatorName: 'evaluateConservedCharge',\n moduleHint: 'src/numerical/killing.ts',\n },\n 'stress-energy': {\n canonicalEvaluatorName: 'evaluateEinsteinEquationResidual',\n moduleHint: 'src/numerical/einstein-equation.ts',\n },\n 'cosmological-constant': {\n canonicalEvaluatorName: 'evaluateEinsteinEquationResidual',\n moduleHint: 'src/numerical/einstein-equation.ts',\n },\n 'einstein-equation': {\n canonicalEvaluatorName: 'evaluateEinsteinEquationResidual',\n moduleHint: 'src/numerical/einstein-equation.ts',\n },\n};\n\nfunction isDeferredNodeKind(kind: string): kind is DeferredNodeKind {\n return Object.prototype.hasOwnProperty.call(DEFERRED_EVALUATOR_REGISTRY, kind);\n}\n\n/** Lower a validated ExprNode to an EngineTensor.\n * @internal — cross-module/test use only; not part of the consumer surface. */\nexport function lowerNode(\n node: ExprNode,\n inputs: NumericalInputs,\n engine: TensorEngine,\n): EngineTensor {\n switch (node.kind) {\n case 'symbol':\n return engine.fromNested(requireValue(node.name, inputs), []);\n\n case 'tensor-symbol':\n case 'metric-tensor':\n case 'kronecker-delta':\n return lowerContractable(node, inputs, engine);\n\n case 'op': {\n if (node.op === '+' || node.op === '-') {\n if (node.args.length === 0) return engine.fromNested(0, []);\n let acc = lowerNode(node.args[0], inputs, engine);\n for (let i = 1; i < node.args.length; i++) {\n const next = lowerNode(node.args[i], inputs, engine);\n acc = node.op === '+' ? engine.add(acc, next) : engine.sub(acc, next);\n }\n return acc;\n }\n // '*' / '/' / '^' are scalar-only. Empty-op convention is aligned with\n // the validator (validator.ts: '*'/'/' with 0 args → DIMENSIONLESS) and\n // expr-eval ('*'/'/' empty → 1): an empty '/' is the multiplicative\n // identity, NOT an error, and the ≥1-arg case left-folds (1-arg → the\n // operand) consistently across all three layers. '^' still requires\n // exactly 2 operands everywhere (raw arity guard against an unvalidated\n // AST surfacing a silent NaN).\n if (node.op === '/' && node.args.length === 0) {\n return engine.fromNested(1, []);\n }\n if (node.op === '^' && node.args.length !== 2) {\n throw new NumericalBackendError(\n `lowering: op '^' requires exactly 2 operands (base, exponent), got ${node.args.length}`,\n );\n }\n // '*' / '/' / '^' are scalar-only (the validator rejects tensor\n // operands). Lower each to rank-0, do the arithmetic in JS, lift back.\n const scalars = node.args.map((a) => {\n const t = lowerNode(a, inputs, engine);\n if (t.shape.length !== 0) {\n throw new NumericalBackendError(\n `lowering: op '${node.op}' got a rank-${t.shape.length} operand — scalar ops require rank-0`,\n );\n }\n return engine.toNested(t) as number;\n });\n let value: number;\n if (node.op === '*') value = scalars.reduce((a, b) => a * b, 1);\n else if (node.op === '/') value = scalars.reduce((a, b) => a / b);\n else value = callBuiltinFunction('pow', scalars); // '^': the one table's body\n return engine.fromNested(value, []);\n }\n\n case 'transcendental': {\n // Scalar transcendental of a rank-0 dimensionless argument. Materialise\n // the arg to a number and apply the one function table's body (same\n // lower-to-JS pattern as the scalar 'op' case above). Each grammar node\n // name is a table key.\n const argT = lowerNode(node.arg, inputs, engine);\n if (argT.shape.length !== 0) {\n throw new NumericalBackendError(\n `lowering: transcendental '${node.fn}' requires a rank-0 (scalar) argument, `\n + `got rank-${argT.shape.length}`,\n );\n }\n const x = engine.toNested(argT) as number;\n return engine.fromNested(callBuiltinFunction(node.fn, [x]), []);\n }\n\n case 'abs': {\n const argT = lowerNode(node.arg, inputs, engine);\n if (argT.shape.length !== 0) {\n throw new NumericalBackendError(\n `lowering: abs requires a rank-0 (scalar) argument, got rank-${argT.shape.length}`,\n );\n }\n return engine.fromNested(callBuiltinFunction('abs', [engine.toNested(argT) as number]), []);\n }\n\n case 'tensor-product': {\n for (const arg of node.args) {\n if (arg.kind === 'tensor-product') {\n throw new NumericalBackendError(\n 'lowering: nested tensor-product numerical evaluation is not supported in v0.3.5 — '\n + 'flatten the contraction into a single product',\n );\n }\n }\n // Contractable operands (tensor-symbol / metric-tensor / kronecker-delta\n // / tensor-partial-derivative) participate in the einsum; everything\n // else must be a rank-0 scalar factor.\n const operands = node.args.filter(isContractable);\n const scalarArgs = node.args.filter((a) => !isContractable(a));\n // computeContraction is the single authority on WHICH indices contract\n // (variance-aware, implicit-metric rule). See buildEinsumSpec JSDoc.\n // The recursive validateContractionChild resolves tensor-partial-derivative\n // operands via validatePartialDerivative.\n function validateContractionChild(child: ExprNode): {\n dim: Dimension;\n freeIndices: Map<string, { upper: number; lower: number }>;\n } {\n if (child.kind === 'tensor-symbol') return validateTensorSymbol(child);\n if (child.kind === 'metric-tensor') return validateMetricTensor(child);\n if (child.kind === 'kronecker-delta') return validateKroneckerDelta(child);\n if (child.kind === 'tensor-partial-derivative') {\n const r = validatePartialDerivative(child, (g) =>\n validateContractionChild(g as ExprNode),\n );\n return { dim: r.dim, freeIndices: r.freeIndices };\n }\n throw new NumericalBackendError(\n `lowering: unexpected operand '${child.kind}' in tensor-product einsum`,\n );\n }\n const { contractionPairs, freeIndices } = computeContraction(\n operands, validateContractionChild,\n );\n const spec = buildEinsumSpec(operands, contractionPairs, freeIndices);\n const operandTensors = operands.map((n) => lowerContractable(n, inputs, engine));\n let result = engine.einsum(spec, ...operandTensors);\n // Scalar operands multiply the whole contraction.\n for (const s of scalarArgs) {\n const st = lowerNode(s, inputs, engine);\n if (st.shape.length !== 0) {\n throw new NumericalBackendError(\n 'lowering: non-scalar non-contractable operand in tensor-product',\n );\n }\n result = engine.scale(result, engine.toNested(st) as number);\n }\n return result;\n }\n\n case 'tensor-partial-derivative':\n // v0.7 follow-up to v0.6.1 LOC miss: body extracted to\n // derivative-lowering.ts. No recursive lowerNode call from\n // this arm, so the thunk parameter is not needed.\n return lowerTensorPartialDerivative(node, inputs, engine);\n\n case 'covariant-derivative':\n // v0.7 follow-up to v0.6.1 LOC miss: body extracted to\n // derivative-lowering.ts. Recursive lowerNode call threaded\n // via thunk to keep the module graph acyclic.\n return lowerCovariantDerivative(node, inputs, engine, lowerNode);\n\n case 'integral': {\n // A DEFINITE integral (with bounds) is evaluated by 16-point\n // Gauss–Legendre quadrature; the integration variable `over.name` is\n // scope-bound to each abscissa. A bound-LESS integral stays abstract\n // (dimensional-only) and is not numerically evaluated.\n if (!node.lower || !node.upper) {\n throw new NumericalBackendError(\n `lowering: an abstract (bound-less) 'integral' is not numerically evaluated; `\n + 'supply lower/upper bounds for a definite integral',\n );\n }\n if (node.over.kind !== 'symbol') {\n throw new NumericalBackendError(\n `lowering: integral 'over' must be a symbol (the integration variable), `\n + `got '${node.over.kind}'`,\n );\n }\n const overName = node.over.name;\n const toScalar = (n: ExprNode): number => {\n const t = lowerNode(n, inputs, engine);\n if (t.shape.length !== 0) {\n throw new NumericalBackendError(\n `lowering: integral bound must be rank-0 (scalar), got rank-${t.shape.length}`,\n );\n }\n return engine.toNested(t) as number;\n };\n const a = toScalar(node.lower);\n const b = toScalar(node.upper);\n const integrand = node.integrand;\n const value = integrateGaussLegendre(\n (x) => {\n const scoped: NumericalInputs = {\n ...inputs,\n tensors: new Map(inputs.tensors).set(overName, x),\n };\n const t = lowerNode(integrand, scoped, engine);\n if (t.shape.length !== 0) {\n throw new NumericalBackendError(\n `lowering: integral integrand must be rank-0 (scalar), got rank-${t.shape.length}`,\n );\n }\n return engine.toNested(t) as number;\n },\n a,\n b,\n );\n return engine.fromNested(value, []);\n }\n\n case 'derivative':\n throw new NumericalBackendError(\n `lowering: 'derivative' is not numerically evaluated in v0.3.5 — `\n + 'use tensor-partial-derivative for differentiation',\n );\n\n // v0.14 distributional/variational primitives — dimensional-grammar only,\n // not numerically evaluable (δ(0)=∞; a functional derivative needs the\n // functional's explicit form). They never appear in a composable symbolic\n // form, so the throw is correct.\n case 'dirac-delta':\n case 'variational-derivative':\n throw new NumericalBackendError(\n `lowering: '${node.kind}' is a dimensional-grammar primitive (v0.14) `\n + 'and is not numerically evaluated',\n );\n\n // v0.6.0 Task 3.10e: ricci-tensor, einstein-tensor, bianchi-residual,\n // riemann-tensor, weyl-tensor, kretschmann-scalar all delegate to\n // lowerCurvature — the extracted curvature-composite dispatcher.\n case 'ricci-tensor':\n case 'einstein-tensor':\n case 'bianchi-residual':\n case 'riemann-tensor':\n case 'weyl-tensor':\n case 'kretschmann-scalar':\n return lowerCurvature(node, inputs, engine);\n\n // S-9 (v0.9.0): the five deferred-evaluator arms (killing-vector,\n // conserved-charge, stress-energy, cosmological-constant,\n // einstein-equation) collapsed into the registry-consulting default\n // arm below. Message wording unified (no test pinned the old\n // per-arm text — verified before consolidation).\n default: {\n if (isDeferredNodeKind(node.kind)) {\n const entry = DEFERRED_EVALUATOR_REGISTRY[node.kind];\n throw new NumericalBackendError(\n `lowering: '${node.kind}' numerical evaluation is not yet implemented ` +\n `in the lowering layer. Use ${entry.canonicalEvaluatorName}() from ` +\n `${entry.moduleHint} instead.`,\n );\n }\n // Compile-time exhaustiveness: in this default arm `node` is the\n // union of the deferred kinds (all others have explicit arms).\n // Excluding the registry-covered kinds must leave `never` — if a\n // new ExprNode kind lands without an arm OR a registry entry,\n // this assignment errors at tsc (Adam A-8 mitigation).\n const _exhaustive: never = node as Exclude<\n typeof node,\n { kind: DeferredNodeKind }\n >;\n void _exhaustive;\n throw new NumericalBackendError(\n `lowering: unknown ExprNode.kind ${JSON.stringify((node as { kind?: unknown }).kind)}`,\n );\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mathts-engine.d.ts","sourceRoot":"","sources":["../../src/numerical/mathts-engine.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmC9C;;;;;;;GAOG;AACH,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,kBAAkB;IAE/B,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,YAAY,CAGxE;IACD,QAAQ,CAAC,CAAC,EAAE,YAAY,GAAG,WAAW,CAErC;IAED,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAGlE;IACD,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAErD;IACD,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,YAAY,CAErE;IACD,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,YAAY,CAEnE;IAED,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAWlD;IACD,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAQlD;IACD,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAQlD;IACD,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAK9C;IAED,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAEhC;IACD,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAE/B;IAMD,oFAAoF;IACpF,OAAO,CAAC,cAAc;IAItB,2EAA2E;IAC3E,OAAO,CAAC,gBAAgB;IAQxB;;;;;;;;;;;OAWG;IACG,WAAW,CACf,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,YAAY,EACrC,CAAC,EAAE,YAAY,GACd,OAAO,CAAC,iBAAiB,CAAC,CAkB5B;IAMD;;;;;;;;;OASG;IACG,WAAW,CACf,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,YAAY,EACrC,CAAC,EAAE,YAAY,EACf,SAAS,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAiB5B;CACF"}
1
+ {"version":3,"file":"mathts-engine.d.ts","sourceRoot":"","sources":["../../src/numerical/mathts-engine.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmC9C;;;;;;;GAOG;AACH,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,kBAAkB;IAE/B,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,YAAY,CAGxE;IACD,QAAQ,CAAC,CAAC,EAAE,YAAY,GAAG,WAAW,CAErC;IAED,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAGlE;IACD,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAErD;IACD,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,YAAY,CAErE;IACD,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,YAAY,CAEnE;IASD,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CASlD;IACD,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAQlD;IACD,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAQlD;IACD,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAK9C;IAED,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAEhC;IACD,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAE/B;IAMD,oFAAoF;IACpF,OAAO,CAAC,cAAc;IAItB,2EAA2E;IAC3E,OAAO,CAAC,gBAAgB;IAQxB;;;;;;;;;;;OAWG;IACG,WAAW,CACf,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,YAAY,EACrC,CAAC,EAAE,YAAY,GACd,OAAO,CAAC,iBAAiB,CAAC,CAkB5B;IAMD;;;;;;;;;OASG;IACG,WAAW,CACf,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,YAAY,EACrC,CAAC,EAAE,YAAY,EACf,SAAS,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAiB5B;CACF"}
@@ -56,9 +56,14 @@ export class MathTSEngine {
56
56
  reshape(t, shape) {
57
57
  return new MathTSEngineTensor(unwrap(t, 'reshape').reshape(shape));
58
58
  }
59
+ // AD dispatch. `@danielsimonjr/mathts-autograd` wraps the traced input as a
60
+ // DualTensor (forward mode, carries `tangent`) or a TapedTensor (reverse
61
+ // mode, carries `tape`) and calls these methods with it. The autograd
62
+ // package is loaded at the AD call, not at module load, so its classes
63
+ // cannot be named here; the structural casts below state the invariant
64
+ // the package keeps: a wrapped tensor implements add/sub/mul/scale over
65
+ // another wrapped tensor and returns a wrapped tensor.
59
66
  add(a, b) {
60
- // AD dispatch: DualTensor (forward-mode), duck-typed so this method can
61
- // accept the wrapped tensor autograd passes in.
62
67
  if ('tangent' in a && 'tangent' in b) {
63
68
  return a.add(b);
64
69
  }
@@ -130,8 +135,8 @@ export class MathTSEngine {
130
135
  // Narrow the dynamic import to the local call-site shape.
131
136
  autograd = await import('@danielsimonjr/mathts-autograd');
132
137
  }
133
- catch {
134
- throw new EngineCapabilityError('MathTSEngine', 'forwardGrad');
138
+ catch (cause) {
139
+ throw new EngineCapabilityError('MathTSEngine', 'forwardGrad', { cause });
135
140
  }
136
141
  // S1 fix: pass fn UNCHANGED. autograd.forwardGrad wraps x as a DualTensor;
137
142
  // MathTSEngine's arithmetic methods (mul/add/sub/scale) MUST dispatch
@@ -164,8 +169,8 @@ export class MathTSEngine {
164
169
  // Narrow the dynamic import to the local call-site shape.
165
170
  autograd = await import('@danielsimonjr/mathts-autograd');
166
171
  }
167
- catch {
168
- throw new EngineCapabilityError('MathTSEngine', 'reverseGrad');
172
+ catch (cause) {
173
+ throw new EngineCapabilityError('MathTSEngine', 'reverseGrad', { cause });
169
174
  }
170
175
  // S1 fix: pass fn UNCHANGED (see forwardGrad note above). autograd.reverseGrad
171
176
  // wraps x as a TapedTensor; MathTSEngine's mul/add/sub/scale dispatch
@@ -1 +1 @@
1
- {"version":3,"file":"mathts-engine.js","sourceRoot":"","sources":["../../src/numerical/mathts-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mathts-engine.js","sourceRoot":"","sources":["../../src/numerical/mathts-engine.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MathTSEngine — a TensorEngine implementation backed by\n * @danielsimonjr/mathts-tensor's rank-N Tensor. It is the only engine.\n * The MathTS packages are required dependencies; see engine-registry.ts.\n *\n * Thin adapter: it translates the TensorEngine contract onto the MathTS\n * Tensor's methods. The engine-conformance suite is what checks that\n * translation.\n *\n * @module numerical/mathts-engine\n */\nimport { Tensor } from '@danielsimonjr/mathts-tensor';\nimport type { EngineTensor, TensorEngine, EinsumSpec, ForwardGradResult, ReverseGradResult } from './tensor-engine.js';\nimport type { NestedArray } from './types.js';\nimport { NumericalBackendError } from './errors.js';\nimport { EngineCapabilityError } from './tensor-engine.js';\n\n/** EngineTensor handle wrapping a MathTS Tensor. */\nclass MathTSEngineTensor implements EngineTensor {\n constructor(readonly inner: Tensor) {}\n get shape(): ReadonlyArray<number> { return this.inner.shape; }\n}\n\nfunction unwrap(t: EngineTensor, op: string): Tensor {\n if (!(t instanceof MathTSEngineTensor)) {\n throw new NumericalBackendError(`MathTSEngine.${op}: operand is not a MathTSEngineTensor`);\n }\n return t.inner;\n}\n\n/**\n * Call-site shape for `@danielsimonjr/mathts-autograd`. The package is a\n * required dependency and is loaded at the call, so this interface covers\n * the dynamic-import result only.\n * @internal\n */\ninterface MathTSAutograd {\n forwardGrad(\n fn: (x: EngineTensor) => EngineTensor,\n x: Tensor,\n ): Promise<{ value: Tensor; jacobian: Tensor }>;\n reverseGrad(\n fn: (x: EngineTensor) => EngineTensor,\n x: Tensor,\n cotangent?: Tensor,\n ): Promise<{ value: Tensor; gradient: Tensor }>;\n}\n\n/**\n * `TensorEngine` backed by `@danielsimonjr/mathts-tensor`'s rank-N Tensor.\n * The MathTS packages are required dependencies.\n *\n * @public — reachable only via the\n * `universal-physics-tensor/numerical/mathts-engine` exports subpath.\n * Intentionally NOT re-exported from the root barrel.\n */\nexport class MathTSEngine implements TensorEngine {\n readonly name = 'MathTSEngine';\n\n fromNested(data: NestedArray, shape: ReadonlyArray<number>): EngineTensor {\n // UPT's NestedArray and MathTS's are the same shape; the type parameters differ.\n return new MathTSEngineTensor(Tensor.fromNested(data as never, shape));\n }\n toNested(t: EngineTensor): NestedArray {\n return unwrap(t, 'toNested').toNested();\n }\n\n einsum(spec: EinsumSpec, ...operands: EngineTensor[]): EngineTensor {\n const inner = operands.map((o, i) => unwrap(o, `einsum (operand ${i})`));\n return new MathTSEngineTensor(Tensor.einsum(spec, ...inner));\n }\n matMul(a: EngineTensor, b: EngineTensor): EngineTensor {\n return new MathTSEngineTensor(unwrap(a, 'matMul').matMul(unwrap(b, 'matMul')));\n }\n transpose(t: EngineTensor, perm?: ReadonlyArray<number>): EngineTensor {\n return new MathTSEngineTensor(unwrap(t, 'transpose').transpose(perm));\n }\n reshape(t: EngineTensor, shape: ReadonlyArray<number>): EngineTensor {\n return new MathTSEngineTensor(unwrap(t, 'reshape').reshape(shape));\n }\n\n // AD dispatch. `@danielsimonjr/mathts-autograd` wraps the traced input as a\n // DualTensor (forward mode, carries `tangent`) or a TapedTensor (reverse\n // mode, carries `tape`) and calls these methods with it. The autograd\n // package is loaded at the AD call, not at module load, so its classes\n // cannot be named here; the structural casts below state the invariant\n // the package keeps: a wrapped tensor implements add/sub/mul/scale over\n // another wrapped tensor and returns a wrapped tensor.\n add(a: EngineTensor, b: EngineTensor): EngineTensor {\n if ('tangent' in a && 'tangent' in b) {\n return (a as unknown as { add(o: unknown): EngineTensor }).add(b);\n }\n // AD dispatch: TapedTensor (reverse-mode)\n if ('tape' in a && 'tape' in b) {\n return (a as unknown as { add(o: unknown): EngineTensor }).add(b);\n }\n return new MathTSEngineTensor(unwrap(a, 'add').add(unwrap(b, 'add')));\n }\n sub(a: EngineTensor, b: EngineTensor): EngineTensor {\n if ('tangent' in a && 'tangent' in b) {\n return (a as unknown as { sub(o: unknown): EngineTensor }).sub(b);\n }\n if ('tape' in a && 'tape' in b) {\n return (a as unknown as { sub(o: unknown): EngineTensor }).sub(b);\n }\n return new MathTSEngineTensor(unwrap(a, 'sub').sub(unwrap(b, 'sub')));\n }\n mul(a: EngineTensor, b: EngineTensor): EngineTensor {\n if ('tangent' in a && 'tangent' in b) {\n return (a as unknown as { mul(o: unknown): EngineTensor }).mul(b);\n }\n if ('tape' in a && 'tape' in b) {\n return (a as unknown as { mul(o: unknown): EngineTensor }).mul(b);\n }\n return new MathTSEngineTensor(unwrap(a, 'mul').mul(unwrap(b, 'mul')));\n }\n scale(t: EngineTensor, k: number): EngineTensor {\n if ('tangent' in t || 'tape' in t) {\n return (t as unknown as { scale(k: number): EngineTensor }).scale(k);\n }\n return new MathTSEngineTensor(unwrap(t, 'scale').scale(k));\n }\n\n identity(n: number): EngineTensor {\n return new MathTSEngineTensor(Tensor.identity(n));\n }\n normInf(t: EngineTensor): number {\n return unwrap(t, 'normInf').normInf();\n }\n\n // ---------------------------------------------------------------------------\n // Internal helpers for AD boundary conversions\n // ---------------------------------------------------------------------------\n\n /** Unwrap an EngineTensor to its underlying MathTS Tensor (for the AD boundary). */\n private toMathTSTensor(t: EngineTensor): Tensor {\n return unwrap(t, 'toMathTSTensor');\n }\n\n /** Wrap a MathTS Tensor (returned by autograd) back as an EngineTensor. */\n private fromMathTSTensor(t: Tensor): EngineTensor {\n return new MathTSEngineTensor(t);\n }\n\n // ---------------------------------------------------------------------------\n // Forward-mode AD (Jacobian-vector product)\n // ---------------------------------------------------------------------------\n\n /**\n * Forward-mode automatic differentiation via a lazy-imported\n * `@danielsimonjr/mathts-autograd`. Throws `EngineCapabilityError` if that\n * import fails.\n *\n * S1 fix: `fn` is passed UNCHANGED to `autograd.forwardGrad`. The autograd\n * package wraps `x` as a DualTensor internally; MathTSEngine's arithmetic\n * methods (mul/add/sub/scale) must dispatch DualTensor inputs through to\n * mathts-autograd's dual arithmetic — there must be no fn-wrapping at the\n * boundary, which would strip DualTensor instrumentation and silence the\n * AD trace.\n */\n async forwardGrad(\n fn: (x: EngineTensor) => EngineTensor,\n x: EngineTensor,\n ): Promise<ForwardGradResult> {\n let autograd: MathTSAutograd;\n try {\n // Narrow the dynamic import to the local call-site shape.\n autograd = await import('@danielsimonjr/mathts-autograd') as unknown as MathTSAutograd;\n } catch (cause) { throw new EngineCapabilityError('MathTSEngine', 'forwardGrad', { cause }); }\n\n // S1 fix: pass fn UNCHANGED. autograd.forwardGrad wraps x as a DualTensor;\n // MathTSEngine's arithmetic methods (mul/add/sub/scale) MUST dispatch\n // DualTensor inputs to mathts-autograd's dual arithmetic via\n // `'tangent' in arg`. Wrapping fn at the boundary strips the\n // instrumentation — the v0 sketch's bug.\n const xMathts = this.toMathTSTensor(x);\n const { value, jacobian } = await autograd.forwardGrad(fn, xMathts);\n return {\n value: this.fromMathTSTensor(value),\n jacobian: this.fromMathTSTensor(jacobian),\n };\n }\n\n // ---------------------------------------------------------------------------\n // Reverse-mode AD (vector-Jacobian product)\n // ---------------------------------------------------------------------------\n\n /**\n * Reverse-mode automatic differentiation via a lazy-imported\n * `@danielsimonjr/mathts-autograd`. Throws `EngineCapabilityError` if that\n * import fails.\n *\n * S1 fix: `fn` is passed UNCHANGED (see forwardGrad note above). The\n * autograd package wraps `x` as a TapedTensor; MathTSEngine's op methods\n * must dispatch TapedTensor inputs to mathts-autograd's tape arithmetic via\n * `'tape' in arg` branching.\n */\n async reverseGrad(\n fn: (x: EngineTensor) => EngineTensor,\n x: EngineTensor,\n cotangent?: EngineTensor,\n ): Promise<ReverseGradResult> {\n let autograd: MathTSAutograd;\n try {\n // Narrow the dynamic import to the local call-site shape.\n autograd = await import('@danielsimonjr/mathts-autograd') as unknown as MathTSAutograd;\n } catch (cause) { throw new EngineCapabilityError('MathTSEngine', 'reverseGrad', { cause }); }\n\n // S1 fix: pass fn UNCHANGED (see forwardGrad note above). autograd.reverseGrad\n // wraps x as a TapedTensor; MathTSEngine's mul/add/sub/scale dispatch\n // TapedTensor inputs to mathts-autograd's tape arithmetic via `'tape' in arg`.\n const xMathts = this.toMathTSTensor(x);\n const ctMathts = cotangent ? this.toMathTSTensor(cotangent) : undefined;\n const { value, gradient } = await autograd.reverseGrad(fn, xMathts, ctMathts);\n return {\n value: this.fromMathTSTensor(value),\n gradient: this.fromMathTSTensor(gradient),\n };\n }\n}\n"]}