universal-physics-tensor 10.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (720) hide show
  1. package/README.md +4 -3
  2. package/bin/upt.mjs +13 -1
  3. package/data/atlas/atlas.json +25 -25
  4. package/data/atlas/atlas.jsonld +1 -1
  5. package/data/atlas/diffusion.json +6 -6
  6. package/data/atlas/oscillators.json +7 -7
  7. package/data/atlas/waves.json +14 -14
  8. package/data/atlas/witness-results.json +11 -11
  9. package/data/bridge-catalog.json +371 -228
  10. package/data/bridge-catalog.schema.json +45 -7
  11. package/dist/atlas/applicability.d.ts.map +1 -1
  12. package/dist/atlas/applicability.js +21 -15
  13. package/dist/atlas/applicability.js.map +1 -1
  14. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
  15. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  16. package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
  17. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  18. package/dist/atlas/benchmark/loader.js +2 -2
  19. package/dist/atlas/benchmark/loader.js.map +1 -1
  20. package/dist/atlas/benchmark/stats.d.ts +2 -2
  21. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  22. package/dist/atlas/benchmark/stats.js +15 -7
  23. package/dist/atlas/benchmark/stats.js.map +1 -1
  24. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  25. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  26. package/dist/atlas/catalog-formal-ref.js +52 -5
  27. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  28. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  29. package/dist/atlas/chain-pipeline.js +7 -8
  30. package/dist/atlas/chain-pipeline.js.map +1 -1
  31. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  32. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  33. package/dist/atlas/diffusion/bridges-closure.js +8 -12
  34. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  35. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  36. package/dist/atlas/diffusion/bridges.js +27 -39
  37. package/dist/atlas/diffusion/bridges.js.map +1 -1
  38. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  39. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  40. package/dist/atlas/diffusion/dimensions.js +8 -16
  41. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  42. package/dist/atlas/diffusion/models.d.ts +3 -3
  43. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  44. package/dist/atlas/diffusion/models.js +5 -10
  45. package/dist/atlas/diffusion/models.js.map +1 -1
  46. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  47. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  48. package/dist/atlas/diffusion/numerics.js +38 -24
  49. package/dist/atlas/diffusion/numerics.js.map +1 -1
  50. package/dist/atlas/link-prediction.d.ts +106 -3
  51. package/dist/atlas/link-prediction.d.ts.map +1 -1
  52. package/dist/atlas/link-prediction.js +212 -66
  53. package/dist/atlas/link-prediction.js.map +1 -1
  54. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  55. package/dist/atlas/oscillators/bridges-coarse.js +7 -11
  56. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  57. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  58. package/dist/atlas/oscillators/bridges-exact.js +6 -7
  59. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  60. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  61. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  62. package/dist/atlas/oscillators/bridges-limits.js +23 -34
  63. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  64. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  65. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  66. package/dist/atlas/oscillators/dimensions.js +9 -21
  67. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  68. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  69. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  70. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  71. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  72. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  73. package/dist/atlas/oscillators/models.js +2 -6
  74. package/dist/atlas/oscillators/models.js.map +1 -1
  75. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  76. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  77. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  78. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  79. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  80. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  81. package/dist/atlas/oscillators/phase-translation.js +3 -4
  82. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  83. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  84. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  85. package/dist/atlas/oscillators/position-translation.js +123 -12
  86. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  87. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  88. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  89. package/dist/atlas/oscillators/rejections.js +0 -7
  90. package/dist/atlas/oscillators/rejections.js.map +1 -1
  91. package/dist/atlas/physjs-entries.generated.d.ts +25 -24
  92. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  93. package/dist/atlas/physjs-entries.generated.js +25 -24
  94. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  95. package/dist/atlas/physjs-ref.d.ts +34 -31
  96. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  97. package/dist/atlas/physjs-ref.js +55 -53
  98. package/dist/atlas/physjs-ref.js.map +1 -1
  99. package/dist/atlas/physjs-reviewed.d.ts +1 -1
  100. package/dist/atlas/physjs-reviewed.js +15 -15
  101. package/dist/atlas/physjs-reviewed.js.map +1 -1
  102. package/dist/atlas/poster/statements.d.ts +0 -19
  103. package/dist/atlas/poster/statements.d.ts.map +1 -1
  104. package/dist/atlas/poster/statements.js +1 -1
  105. package/dist/atlas/poster/statements.js.map +1 -1
  106. package/dist/atlas/proof-target.d.ts +1 -1
  107. package/dist/atlas/proof-target.js +1 -1
  108. package/dist/atlas/proof-target.js.map +1 -1
  109. package/dist/atlas/regime.d.ts +1 -1
  110. package/dist/atlas/regime.d.ts.map +1 -1
  111. package/dist/atlas/regime.js +1 -1
  112. package/dist/atlas/regime.js.map +1 -1
  113. package/dist/atlas/text-overlap.d.ts +23 -0
  114. package/dist/atlas/text-overlap.d.ts.map +1 -0
  115. package/dist/atlas/text-overlap.js +41 -0
  116. package/dist/atlas/text-overlap.js.map +1 -0
  117. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  118. package/dist/atlas/waves/bridges-closure.js +2 -6
  119. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  120. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  121. package/dist/atlas/waves/bridges.js +32 -48
  122. package/dist/atlas/waves/bridges.js.map +1 -1
  123. package/dist/atlas/waves/models.d.ts +5 -6
  124. package/dist/atlas/waves/models.d.ts.map +1 -1
  125. package/dist/atlas/waves/models.js +7 -13
  126. package/dist/atlas/waves/models.js.map +1 -1
  127. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  128. package/dist/atlas/waves/numerics.js +10 -3
  129. package/dist/atlas/waves/numerics.js.map +1 -1
  130. package/dist/atlas/witness-numeric.d.ts +30 -0
  131. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  132. package/dist/atlas/witness-numeric.js +53 -0
  133. package/dist/atlas/witness-numeric.js.map +1 -1
  134. package/dist/atlas/witness-specs.d.ts.map +1 -1
  135. package/dist/atlas/witness-specs.js +19 -0
  136. package/dist/atlas/witness-specs.js.map +1 -1
  137. package/dist/atlas/witness-symbolic.d.ts +75 -3
  138. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  139. package/dist/atlas/witness-symbolic.js +116 -10
  140. package/dist/atlas/witness-symbolic.js.map +1 -1
  141. package/dist/bridges/catalog-load.d.ts.map +1 -1
  142. package/dist/bridges/catalog-load.js +13 -8
  143. package/dist/bridges/catalog-load.js.map +1 -1
  144. package/dist/bridges/catalog-types.d.ts +26 -2
  145. package/dist/bridges/catalog-types.d.ts.map +1 -1
  146. package/dist/bridges/catalog-types.js +11 -1
  147. package/dist/bridges/catalog-types.js.map +1 -1
  148. package/dist/bridges/evaluation-errors.d.ts +31 -1
  149. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  150. package/dist/bridges/evaluation-errors.js +20 -2
  151. package/dist/bridges/evaluation-errors.js.map +1 -1
  152. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  153. package/dist/bridges/evaluator-inputs.js +7 -5
  154. package/dist/bridges/evaluator-inputs.js.map +1 -1
  155. package/dist/bridges/evaluators.d.ts.map +1 -1
  156. package/dist/bridges/evaluators.js +27 -12
  157. package/dist/bridges/evaluators.js.map +1 -1
  158. package/dist/bridges/expr-parse.d.ts +11 -0
  159. package/dist/bridges/expr-parse.d.ts.map +1 -1
  160. package/dist/bridges/expr-parse.js +14 -5
  161. package/dist/bridges/expr-parse.js.map +1 -1
  162. package/dist/bridges/holds.d.ts +35 -3
  163. package/dist/bridges/holds.d.ts.map +1 -1
  164. package/dist/bridges/holds.js +117 -23
  165. package/dist/bridges/holds.js.map +1 -1
  166. package/dist/bridges/notices.d.ts.map +1 -1
  167. package/dist/bridges/notices.js +5 -5
  168. package/dist/bridges/notices.js.map +1 -1
  169. package/dist/bridges/relation-eval.d.ts +4 -4
  170. package/dist/bridges/relation-eval.d.ts.map +1 -1
  171. package/dist/bridges/relation-eval.js +15 -16
  172. package/dist/bridges/relation-eval.js.map +1 -1
  173. package/dist/bridges/sensitivity.d.ts.map +1 -1
  174. package/dist/bridges/sensitivity.js +3 -3
  175. package/dist/bridges/sensitivity.js.map +1 -1
  176. package/dist/bridges/validity.d.ts +33 -0
  177. package/dist/bridges/validity.d.ts.map +1 -0
  178. package/dist/bridges/validity.js +67 -0
  179. package/dist/bridges/validity.js.map +1 -0
  180. package/dist/canonical/entries/atomic.js +1 -3
  181. package/dist/canonical/entries/atomic.js.map +1 -1
  182. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  183. package/dist/canonical/entries/condensed-matter.js +4 -5
  184. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  185. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  186. package/dist/canonical/entries/dimensional-classics.js +3 -4
  187. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  188. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  189. package/dist/canonical/entries/electromagnetism.js +4 -10
  190. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  191. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  192. package/dist/canonical/entries/fluids-waves.js +3 -7
  193. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  194. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  195. package/dist/canonical/entries/mechanics.js +4 -6
  196. package/dist/canonical/entries/mechanics.js.map +1 -1
  197. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  198. package/dist/canonical/entries/nonmonomial.js +9 -17
  199. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  200. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  201. package/dist/canonical/entries/relativity.js +6 -6
  202. package/dist/canonical/entries/relativity.js.map +1 -1
  203. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  204. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  205. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  206. package/dist/canonical/fixed-points.d.ts +94 -0
  207. package/dist/canonical/fixed-points.d.ts.map +1 -0
  208. package/dist/canonical/fixed-points.js +81 -0
  209. package/dist/canonical/fixed-points.js.map +1 -0
  210. package/dist/canonical/linkage.d.ts.map +1 -1
  211. package/dist/canonical/linkage.js +25 -44
  212. package/dist/canonical/linkage.js.map +1 -1
  213. package/dist/canonical/normal-form.d.ts.map +1 -1
  214. package/dist/canonical/normal-form.js +5 -11
  215. package/dist/canonical/normal-form.js.map +1 -1
  216. package/dist/canonical/structural.d.ts +21 -21
  217. package/dist/canonical/structural.d.ts.map +1 -1
  218. package/dist/canonical/structural.js +40 -19
  219. package/dist/canonical/structural.js.map +1 -1
  220. package/dist/cases/brownian-sphere.d.ts +3 -3
  221. package/dist/cases/brownian-sphere.d.ts.map +1 -1
  222. package/dist/cases/brownian-sphere.js +6 -5
  223. package/dist/cases/brownian-sphere.js.map +1 -1
  224. package/dist/cases/damped-resonator.d.ts.map +1 -1
  225. package/dist/cases/damped-resonator.js +6 -9
  226. package/dist/cases/damped-resonator.js.map +1 -1
  227. package/dist/cases/kepler-rv.d.ts +1 -1
  228. package/dist/cases/kepler-rv.d.ts.map +1 -1
  229. package/dist/cases/kepler-rv.js +3 -2
  230. package/dist/cases/kepler-rv.js.map +1 -1
  231. package/dist/cases/lumped-cooling.d.ts +8 -3
  232. package/dist/cases/lumped-cooling.d.ts.map +1 -1
  233. package/dist/cases/lumped-cooling.js +21 -23
  234. package/dist/cases/lumped-cooling.js.map +1 -1
  235. package/dist/cases/quadrature.d.ts +7 -9
  236. package/dist/cases/quadrature.d.ts.map +1 -1
  237. package/dist/cases/quadrature.js +28 -32
  238. package/dist/cases/quadrature.js.map +1 -1
  239. package/dist/cases/resistor-noise.js +4 -4
  240. package/dist/cases/resistor-noise.js.map +1 -1
  241. package/dist/cases/skin-depth.d.ts +0 -4
  242. package/dist/cases/skin-depth.d.ts.map +1 -1
  243. package/dist/cases/skin-depth.js +3 -7
  244. package/dist/cases/skin-depth.js.map +1 -1
  245. package/dist/cli/args.d.ts +23 -1
  246. package/dist/cli/args.d.ts.map +1 -1
  247. package/dist/cli/args.js +30 -8
  248. package/dist/cli/args.js.map +1 -1
  249. package/dist/cli/bindings.d.ts.map +1 -1
  250. package/dist/cli/bindings.js +5 -4
  251. package/dist/cli/bindings.js.map +1 -1
  252. package/dist/cli/command.d.ts +8 -1
  253. package/dist/cli/command.d.ts.map +1 -1
  254. package/dist/cli/command.js.map +1 -1
  255. package/dist/cli/commands/_atlas-map.d.ts +0 -9
  256. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  257. package/dist/cli/commands/_atlas-map.js +8 -18
  258. package/dist/cli/commands/_atlas-map.js.map +1 -1
  259. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  260. package/dist/cli/commands/_atlas-route.js +6 -2
  261. package/dist/cli/commands/_atlas-route.js.map +1 -1
  262. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  263. package/dist/cli/commands/_discovery-opts.js +8 -9
  264. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  265. package/dist/cli/commands/atlas.d.ts.map +1 -1
  266. package/dist/cli/commands/atlas.js +8 -5
  267. package/dist/cli/commands/atlas.js.map +1 -1
  268. package/dist/cli/commands/audit.d.ts.map +1 -1
  269. package/dist/cli/commands/audit.js +8 -1
  270. package/dist/cli/commands/audit.js.map +1 -1
  271. package/dist/cli/commands/axes.d.ts.map +1 -1
  272. package/dist/cli/commands/axes.js +20 -1
  273. package/dist/cli/commands/axes.js.map +1 -1
  274. package/dist/cli/commands/confront.d.ts.map +1 -1
  275. package/dist/cli/commands/confront.js +8 -14
  276. package/dist/cli/commands/confront.js.map +1 -1
  277. package/dist/cli/commands/derive.d.ts.map +1 -1
  278. package/dist/cli/commands/derive.js +22 -22
  279. package/dist/cli/commands/derive.js.map +1 -1
  280. package/dist/cli/commands/discover.d.ts.map +1 -1
  281. package/dist/cli/commands/discover.js +6 -2
  282. package/dist/cli/commands/discover.js.map +1 -1
  283. package/dist/cli/commands/eval.d.ts.map +1 -1
  284. package/dist/cli/commands/eval.js +1 -0
  285. package/dist/cli/commands/eval.js.map +1 -1
  286. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  287. package/dist/cli/commands/evaluate.js +65 -37
  288. package/dist/cli/commands/evaluate.js.map +1 -1
  289. package/dist/cli/commands/explain.d.ts.map +1 -1
  290. package/dist/cli/commands/explain.js +2 -1
  291. package/dist/cli/commands/explain.js.map +1 -1
  292. package/dist/cli/commands/ground.d.ts.map +1 -1
  293. package/dist/cli/commands/ground.js +1 -0
  294. package/dist/cli/commands/ground.js.map +1 -1
  295. package/dist/cli/commands/map.d.ts.map +1 -1
  296. package/dist/cli/commands/map.js +75 -5
  297. package/dist/cli/commands/map.js.map +1 -1
  298. package/dist/cli/commands/metric.d.ts.map +1 -1
  299. package/dist/cli/commands/metric.js +12 -9
  300. package/dist/cli/commands/metric.js.map +1 -1
  301. package/dist/cli/commands/path.d.ts +10 -0
  302. package/dist/cli/commands/path.d.ts.map +1 -1
  303. package/dist/cli/commands/path.js +25 -3
  304. package/dist/cli/commands/path.js.map +1 -1
  305. package/dist/cli/commands/probe.d.ts.map +1 -1
  306. package/dist/cli/commands/probe.js +59 -16
  307. package/dist/cli/commands/probe.js.map +1 -1
  308. package/dist/cli/commands/regime.d.ts.map +1 -1
  309. package/dist/cli/commands/regime.js +1 -0
  310. package/dist/cli/commands/regime.js.map +1 -1
  311. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  312. package/dist/cli/commands/retrieve.js +1 -0
  313. package/dist/cli/commands/retrieve.js.map +1 -1
  314. package/dist/cli/commands/search.d.ts.map +1 -1
  315. package/dist/cli/commands/search.js +1 -0
  316. package/dist/cli/commands/search.js.map +1 -1
  317. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  318. package/dist/cli/commands/symbolic.js +19 -28
  319. package/dist/cli/commands/symbolic.js.map +1 -1
  320. package/dist/cli/commands/testplan.d.ts.map +1 -1
  321. package/dist/cli/commands/testplan.js +4 -2
  322. package/dist/cli/commands/testplan.js.map +1 -1
  323. package/dist/cli/expr-print.d.ts +0 -2
  324. package/dist/cli/expr-print.d.ts.map +1 -1
  325. package/dist/cli/expr-print.js +7 -31
  326. package/dist/cli/expr-print.js.map +1 -1
  327. package/dist/cli/main.d.ts +7 -0
  328. package/dist/cli/main.d.ts.map +1 -1
  329. package/dist/cli/main.js +18 -3
  330. package/dist/cli/main.js.map +1 -1
  331. package/dist/cli/numeric-flag.d.ts +12 -0
  332. package/dist/cli/numeric-flag.d.ts.map +1 -0
  333. package/dist/cli/numeric-flag.js +44 -0
  334. package/dist/cli/numeric-flag.js.map +1 -0
  335. package/dist/cli/output.d.ts +20 -0
  336. package/dist/cli/output.d.ts.map +1 -1
  337. package/dist/cli/output.js +15 -0
  338. package/dist/cli/output.js.map +1 -1
  339. package/dist/cli/record-reach.js +2 -2
  340. package/dist/cli/record-reach.js.map +1 -1
  341. package/dist/cli/record-tables.d.ts.map +1 -1
  342. package/dist/cli/record-tables.js +6 -5
  343. package/dist/cli/record-tables.js.map +1 -1
  344. package/dist/cli/record.d.ts +1 -5
  345. package/dist/cli/record.d.ts.map +1 -1
  346. package/dist/cli/record.js +9 -8
  347. package/dist/cli/record.js.map +1 -1
  348. package/dist/cli/search-index.d.ts.map +1 -1
  349. package/dist/cli/search-index.js +7 -6
  350. package/dist/cli/search-index.js.map +1 -1
  351. package/dist/cli/statuses.d.ts +0 -2
  352. package/dist/cli/statuses.d.ts.map +1 -1
  353. package/dist/cli/statuses.js +0 -7
  354. package/dist/cli/statuses.js.map +1 -1
  355. package/dist/cli/stored-results.d.ts +7 -0
  356. package/dist/cli/stored-results.d.ts.map +1 -0
  357. package/dist/cli/stored-results.js +23 -0
  358. package/dist/cli/stored-results.js.map +1 -0
  359. package/dist/cli/version.d.ts.map +1 -1
  360. package/dist/cli/version.js +7 -5
  361. package/dist/cli/version.js.map +1 -1
  362. package/dist/cli-api.d.ts +34 -5
  363. package/dist/cli-api.d.ts.map +1 -1
  364. package/dist/cli-api.js +28 -4
  365. package/dist/cli-api.js.map +1 -1
  366. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  367. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  368. package/dist/composition/algebraic-equivalence.js +115 -0
  369. package/dist/composition/algebraic-equivalence.js.map +1 -0
  370. package/dist/composition/axes.d.ts +0 -6
  371. package/dist/composition/axes.d.ts.map +1 -1
  372. package/dist/composition/axes.js +6 -6
  373. package/dist/composition/axes.js.map +1 -1
  374. package/dist/composition/axis-audit.d.ts +47 -20
  375. package/dist/composition/axis-audit.d.ts.map +1 -1
  376. package/dist/composition/axis-audit.js +82 -9
  377. package/dist/composition/axis-audit.js.map +1 -1
  378. package/dist/composition/bridge-analysis.d.ts +17 -0
  379. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  380. package/dist/composition/bridge-analysis.js +102 -55
  381. package/dist/composition/bridge-analysis.js.map +1 -1
  382. package/dist/composition/canonical-compare.d.ts +40 -0
  383. package/dist/composition/canonical-compare.d.ts.map +1 -1
  384. package/dist/composition/canonical-compare.js +122 -24
  385. package/dist/composition/canonical-compare.js.map +1 -1
  386. package/dist/composition/canonical-graph.d.ts +1 -1
  387. package/dist/composition/canonical-graph.d.ts.map +1 -1
  388. package/dist/composition/canonical-graph.js +9 -36
  389. package/dist/composition/canonical-graph.js.map +1 -1
  390. package/dist/composition/canonical-json.js +2 -2
  391. package/dist/composition/canonical-json.js.map +1 -1
  392. package/dist/composition/catalog-graph.d.ts.map +1 -1
  393. package/dist/composition/catalog-graph.js +2 -5
  394. package/dist/composition/catalog-graph.js.map +1 -1
  395. package/dist/composition/chain-candidate.d.ts +8 -0
  396. package/dist/composition/chain-candidate.d.ts.map +1 -1
  397. package/dist/composition/chain-candidate.js +9 -2
  398. package/dist/composition/chain-candidate.js.map +1 -1
  399. package/dist/composition/chain-match.d.ts +6 -3
  400. package/dist/composition/chain-match.d.ts.map +1 -1
  401. package/dist/composition/chain-match.js +4 -1
  402. package/dist/composition/chain-match.js.map +1 -1
  403. package/dist/composition/chain-result.d.ts.map +1 -1
  404. package/dist/composition/chain-result.js +2 -14
  405. package/dist/composition/chain-result.js.map +1 -1
  406. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  407. package/dist/composition/compose-symbolic.js +3 -2
  408. package/dist/composition/compose-symbolic.js.map +1 -1
  409. package/dist/composition/compose.d.ts.map +1 -1
  410. package/dist/composition/compose.js +13 -5
  411. package/dist/composition/compose.js.map +1 -1
  412. package/dist/composition/composition-recovery.d.ts.map +1 -1
  413. package/dist/composition/composition-recovery.js +4 -7
  414. package/dist/composition/composition-recovery.js.map +1 -1
  415. package/dist/composition/discovery.d.ts +56 -0
  416. package/dist/composition/discovery.d.ts.map +1 -1
  417. package/dist/composition/discovery.js +114 -60
  418. package/dist/composition/discovery.js.map +1 -1
  419. package/dist/composition/edge.d.ts +21 -2
  420. package/dist/composition/edge.d.ts.map +1 -1
  421. package/dist/composition/edge.js +23 -1
  422. package/dist/composition/edge.js.map +1 -1
  423. package/dist/composition/enumerate.d.ts.map +1 -1
  424. package/dist/composition/enumerate.js +18 -3
  425. package/dist/composition/enumerate.js.map +1 -1
  426. package/dist/composition/evaluate-relation.d.ts +35 -11
  427. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  428. package/dist/composition/evaluate-relation.js +60 -39
  429. package/dist/composition/evaluate-relation.js.map +1 -1
  430. package/dist/composition/explain.d.ts +3 -12
  431. package/dist/composition/explain.d.ts.map +1 -1
  432. package/dist/composition/explain.js +7 -20
  433. package/dist/composition/explain.js.map +1 -1
  434. package/dist/composition/expr-eval.d.ts.map +1 -1
  435. package/dist/composition/expr-eval.js +2 -11
  436. package/dist/composition/expr-eval.js.map +1 -1
  437. package/dist/composition/expr-simplify.d.ts +16 -0
  438. package/dist/composition/expr-simplify.d.ts.map +1 -1
  439. package/dist/composition/expr-simplify.js +15 -20
  440. package/dist/composition/expr-simplify.js.map +1 -1
  441. package/dist/composition/formula-shape.d.ts +23 -4
  442. package/dist/composition/formula-shape.d.ts.map +1 -1
  443. package/dist/composition/formula-shape.js +57 -17
  444. package/dist/composition/formula-shape.js.map +1 -1
  445. package/dist/composition/graph-structure.d.ts +98 -0
  446. package/dist/composition/graph-structure.d.ts.map +1 -0
  447. package/dist/composition/graph-structure.js +167 -0
  448. package/dist/composition/graph-structure.js.map +1 -0
  449. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  450. package/dist/composition/graph-viz-svg.js +1 -1
  451. package/dist/composition/graph-viz-svg.js.map +1 -1
  452. package/dist/composition/graph-viz.d.ts.map +1 -1
  453. package/dist/composition/graph-viz.js +8 -37
  454. package/dist/composition/graph-viz.js.map +1 -1
  455. package/dist/composition/identifiability.d.ts +91 -4
  456. package/dist/composition/identifiability.d.ts.map +1 -1
  457. package/dist/composition/identifiability.js +363 -6
  458. package/dist/composition/identifiability.js.map +1 -1
  459. package/dist/composition/index.d.ts +8 -4
  460. package/dist/composition/index.d.ts.map +1 -1
  461. package/dist/composition/index.js +3 -2
  462. package/dist/composition/index.js.map +1 -1
  463. package/dist/composition/mathts-quiet.d.ts +4 -3
  464. package/dist/composition/mathts-quiet.d.ts.map +1 -1
  465. package/dist/composition/mathts-quiet.js +4 -3
  466. package/dist/composition/mathts-quiet.js.map +1 -1
  467. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  468. package/dist/composition/mathts-scalar-symbols.js +2 -1
  469. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  470. package/dist/composition/probe/corpus.d.ts +4 -2
  471. package/dist/composition/probe/corpus.d.ts.map +1 -1
  472. package/dist/composition/probe/corpus.js +20 -9
  473. package/dist/composition/probe/corpus.js.map +1 -1
  474. package/dist/composition/probe/dataset.d.ts +17 -0
  475. package/dist/composition/probe/dataset.d.ts.map +1 -1
  476. package/dist/composition/probe/dataset.js +95 -50
  477. package/dist/composition/probe/dataset.js.map +1 -1
  478. package/dist/composition/probe/experiment-design.d.ts +5 -1
  479. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  480. package/dist/composition/probe/experiment-design.js +44 -24
  481. package/dist/composition/probe/experiment-design.js.map +1 -1
  482. package/dist/composition/probe/falsify.d.ts.map +1 -1
  483. package/dist/composition/probe/falsify.js +2 -0
  484. package/dist/composition/probe/falsify.js.map +1 -1
  485. package/dist/composition/probe/fit.d.ts +6 -0
  486. package/dist/composition/probe/fit.d.ts.map +1 -1
  487. package/dist/composition/probe/fit.js +46 -22
  488. package/dist/composition/probe/fit.js.map +1 -1
  489. package/dist/composition/probe/frontier.d.ts.map +1 -1
  490. package/dist/composition/probe/frontier.js +33 -15
  491. package/dist/composition/probe/frontier.js.map +1 -1
  492. package/dist/composition/probe/generator.d.ts +27 -1
  493. package/dist/composition/probe/generator.d.ts.map +1 -1
  494. package/dist/composition/probe/generator.js +53 -30
  495. package/dist/composition/probe/generator.js.map +1 -1
  496. package/dist/composition/probe/index.d.ts +14 -0
  497. package/dist/composition/probe/index.d.ts.map +1 -1
  498. package/dist/composition/probe/index.js +6 -0
  499. package/dist/composition/probe/index.js.map +1 -1
  500. package/dist/composition/probe/limits.d.ts +24 -1
  501. package/dist/composition/probe/limits.d.ts.map +1 -1
  502. package/dist/composition/probe/limits.js +53 -11
  503. package/dist/composition/probe/limits.js.map +1 -1
  504. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  505. package/dist/composition/probe/pipeline.js +10 -4
  506. package/dist/composition/probe/pipeline.js.map +1 -1
  507. package/dist/composition/probe/power-law.d.ts +121 -0
  508. package/dist/composition/probe/power-law.d.ts.map +1 -0
  509. package/dist/composition/probe/power-law.js +255 -0
  510. package/dist/composition/probe/power-law.js.map +1 -0
  511. package/dist/composition/probe/problem.d.ts +7 -4
  512. package/dist/composition/probe/problem.d.ts.map +1 -1
  513. package/dist/composition/probe/problem.js +177 -49
  514. package/dist/composition/probe/problem.js.map +1 -1
  515. package/dist/composition/probe/report.js +1 -1
  516. package/dist/composition/probe/report.js.map +1 -1
  517. package/dist/composition/probe/residual.d.ts +6 -1
  518. package/dist/composition/probe/residual.d.ts.map +1 -1
  519. package/dist/composition/probe/residual.js +9 -7
  520. package/dist/composition/probe/residual.js.map +1 -1
  521. package/dist/composition/probe/structure.d.ts +82 -17
  522. package/dist/composition/probe/structure.d.ts.map +1 -1
  523. package/dist/composition/probe/structure.js +129 -55
  524. package/dist/composition/probe/structure.js.map +1 -1
  525. package/dist/composition/probe/study.d.ts +31 -9
  526. package/dist/composition/probe/study.d.ts.map +1 -1
  527. package/dist/composition/probe/study.js +236 -181
  528. package/dist/composition/probe/study.js.map +1 -1
  529. package/dist/composition/probe/t-tail.d.ts +17 -0
  530. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  531. package/dist/composition/probe/t-tail.js +32 -0
  532. package/dist/composition/probe/t-tail.js.map +1 -0
  533. package/dist/composition/probe/types.d.ts +3 -0
  534. package/dist/composition/probe/types.d.ts.map +1 -1
  535. package/dist/composition/probe/types.js.map +1 -1
  536. package/dist/composition/proposed-bridges.d.ts +41 -10
  537. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  538. package/dist/composition/proposed-bridges.js +100 -55
  539. package/dist/composition/proposed-bridges.js.map +1 -1
  540. package/dist/composition/quantity-clusters.d.ts +48 -0
  541. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  542. package/dist/composition/quantity-clusters.js +98 -0
  543. package/dist/composition/quantity-clusters.js.map +1 -0
  544. package/dist/composition/rational-exponent.d.ts +40 -0
  545. package/dist/composition/rational-exponent.d.ts.map +1 -0
  546. package/dist/composition/rational-exponent.js +65 -0
  547. package/dist/composition/rational-exponent.js.map +1 -0
  548. package/dist/composition/representative-values.d.ts +22 -0
  549. package/dist/composition/representative-values.d.ts.map +1 -1
  550. package/dist/composition/representative-values.js +23 -0
  551. package/dist/composition/representative-values.js.map +1 -1
  552. package/dist/composition/retrodiction.d.ts.map +1 -1
  553. package/dist/composition/retrodiction.js +2 -1
  554. package/dist/composition/retrodiction.js.map +1 -1
  555. package/dist/composition/user-equation.d.ts.map +1 -1
  556. package/dist/composition/user-equation.js +2 -2
  557. package/dist/composition/user-equation.js.map +1 -1
  558. package/dist/core/assignment.d.ts +19 -0
  559. package/dist/core/assignment.d.ts.map +1 -0
  560. package/dist/core/assignment.js +19 -0
  561. package/dist/core/assignment.js.map +1 -0
  562. package/dist/core/compare.d.ts +32 -0
  563. package/dist/core/compare.d.ts.map +1 -0
  564. package/dist/core/compare.js +46 -0
  565. package/dist/core/compare.js.map +1 -0
  566. package/dist/core/constants.d.ts +30 -30
  567. package/dist/core/constants.d.ts.map +1 -1
  568. package/dist/core/constants.js +47 -30
  569. package/dist/core/constants.js.map +1 -1
  570. package/dist/core/data-file.d.ts +7 -0
  571. package/dist/core/data-file.d.ts.map +1 -1
  572. package/dist/core/data-file.js +17 -0
  573. package/dist/core/data-file.js.map +1 -1
  574. package/dist/core/format.d.ts +36 -0
  575. package/dist/core/format.d.ts.map +1 -0
  576. package/dist/core/format.js +39 -0
  577. package/dist/core/format.js.map +1 -0
  578. package/dist/core/hash.d.ts +14 -0
  579. package/dist/core/hash.d.ts.map +1 -0
  580. package/dist/core/hash.js +17 -0
  581. package/dist/core/hash.js.map +1 -0
  582. package/dist/core/json-schema.d.ts +2 -0
  583. package/dist/core/json-schema.d.ts.map +1 -1
  584. package/dist/core/json-schema.js +14 -13
  585. package/dist/core/json-schema.js.map +1 -1
  586. package/dist/core/labeled-tensor.d.ts.map +1 -1
  587. package/dist/core/labeled-tensor.js +0 -8
  588. package/dist/core/labeled-tensor.js.map +1 -1
  589. package/dist/core/mathts-read.d.ts +25 -0
  590. package/dist/core/mathts-read.d.ts.map +1 -0
  591. package/dist/core/mathts-read.js +51 -0
  592. package/dist/core/mathts-read.js.map +1 -0
  593. package/dist/core/tensor.d.ts.map +1 -1
  594. package/dist/core/tensor.js +24 -0
  595. package/dist/core/tensor.js.map +1 -1
  596. package/dist/core/types.d.ts +5 -5
  597. package/dist/diff/bridge-gradient.d.ts +19 -6
  598. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  599. package/dist/diff/bridge-gradient.js +19 -11
  600. package/dist/diff/bridge-gradient.js.map +1 -1
  601. package/dist/diff/bridge-specs.d.ts.map +1 -1
  602. package/dist/diff/bridge-specs.js +3 -0
  603. package/dist/diff/bridge-specs.js.map +1 -1
  604. package/dist/dimensional/algebra.d.ts +18 -0
  605. package/dist/dimensional/algebra.d.ts.map +1 -1
  606. package/dist/dimensional/algebra.js +41 -1
  607. package/dist/dimensional/algebra.js.map +1 -1
  608. package/dist/dimensional/ast-builders.d.ts +7 -0
  609. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  610. package/dist/dimensional/ast-builders.js +11 -0
  611. package/dist/dimensional/ast-builders.js.map +1 -1
  612. package/dist/dimensional/ast-leaves.d.ts +81 -0
  613. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  614. package/dist/dimensional/ast-leaves.js +146 -0
  615. package/dist/dimensional/ast-leaves.js.map +1 -0
  616. package/dist/dimensional/buckingham.d.ts.map +1 -1
  617. package/dist/dimensional/buckingham.js +15 -27
  618. package/dist/dimensional/buckingham.js.map +1 -1
  619. package/dist/dimensional/constant-rows.js +9 -9
  620. package/dist/dimensional/constant-rows.js.map +1 -1
  621. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  622. package/dist/dimensional/dimension-inference.js +1 -2
  623. package/dist/dimensional/dimension-inference.js.map +1 -1
  624. package/dist/dimensional/errors.d.ts +1 -1
  625. package/dist/dimensional/errors.d.ts.map +1 -1
  626. package/dist/dimensional/errors.js +1 -15
  627. package/dist/dimensional/errors.js.map +1 -1
  628. package/dist/dimensional/exact-scale.d.ts +0 -17
  629. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  630. package/dist/dimensional/exact-scale.js +8 -8
  631. package/dist/dimensional/exact-scale.js.map +1 -1
  632. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  633. package/dist/dimensional/gauge-field.js +2 -2
  634. package/dist/dimensional/gauge-field.js.map +1 -1
  635. package/dist/dimensional/hyphen-names.d.ts +12 -2
  636. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  637. package/dist/dimensional/hyphen-names.js +44 -19
  638. package/dist/dimensional/hyphen-names.js.map +1 -1
  639. package/dist/dimensional/metric.d.ts.map +1 -1
  640. package/dist/dimensional/metric.js +0 -1
  641. package/dist/dimensional/metric.js.map +1 -1
  642. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  643. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  644. package/dist/dimensional/symbolic-constants.js +13 -1
  645. package/dist/dimensional/symbolic-constants.js.map +1 -1
  646. package/dist/dimensional/types.d.ts +36 -0
  647. package/dist/dimensional/types.d.ts.map +1 -1
  648. package/dist/dimensional/types.js +45 -7
  649. package/dist/dimensional/types.js.map +1 -1
  650. package/dist/dimensional/unit-data.js +2 -2
  651. package/dist/dimensional/unit-data.js.map +1 -1
  652. package/dist/index.d.ts +9 -3
  653. package/dist/index.d.ts.map +1 -1
  654. package/dist/index.js +10 -4
  655. package/dist/index.js.map +1 -1
  656. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  657. package/dist/numerical/christoffel-flat.js +3 -2
  658. package/dist/numerical/christoffel-flat.js.map +1 -1
  659. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  660. package/dist/numerical/covariant-eikonal.js +34 -11
  661. package/dist/numerical/covariant-eikonal.js.map +1 -1
  662. package/dist/numerical/curvature-lowering-helpers.js +3 -2
  663. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  664. package/dist/numerical/errors.d.ts.map +1 -1
  665. package/dist/numerical/errors.js +0 -3
  666. package/dist/numerical/errors.js.map +1 -1
  667. package/dist/numerical/finite-difference.d.ts +22 -0
  668. package/dist/numerical/finite-difference.d.ts.map +1 -0
  669. package/dist/numerical/finite-difference.js +27 -0
  670. package/dist/numerical/finite-difference.js.map +1 -0
  671. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  672. package/dist/numerical/geodesic-integrator.js +22 -14
  673. package/dist/numerical/geodesic-integrator.js.map +1 -1
  674. package/dist/numerical/geometrized.d.ts.map +1 -1
  675. package/dist/numerical/geometrized.js +0 -1
  676. package/dist/numerical/geometrized.js.map +1 -1
  677. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  678. package/dist/numerical/mathts-engine.js +10 -24
  679. package/dist/numerical/mathts-engine.js.map +1 -1
  680. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  681. package/dist/numerical/metric-inverse.js +83 -46
  682. package/dist/numerical/metric-inverse.js.map +1 -1
  683. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  684. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  685. package/dist/numerical/null-ray-integrator.js +12 -12
  686. package/dist/numerical/null-ray-integrator.js.map +1 -1
  687. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  688. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  689. package/dist/numerical/perihelion-finder.d.ts +0 -36
  690. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  691. package/dist/numerical/perihelion-finder.js +41 -87
  692. package/dist/numerical/perihelion-finder.js.map +1 -1
  693. package/dist/numerical/quadrature.d.ts.map +1 -1
  694. package/dist/numerical/quadrature.js +8 -10
  695. package/dist/numerical/quadrature.js.map +1 -1
  696. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  697. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  698. package/dist/numerical/rk4-trajectory.js +37 -0
  699. package/dist/numerical/rk4-trajectory.js.map +1 -0
  700. package/dist/numerical/schwarzschild.d.ts +14 -0
  701. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  702. package/dist/numerical/schwarzschild.js +17 -0
  703. package/dist/numerical/schwarzschild.js.map +1 -0
  704. package/dist/numerical/spacetime-metrics.d.ts +12 -0
  705. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  706. package/dist/numerical/spacetime-metrics.js +72 -56
  707. package/dist/numerical/spacetime-metrics.js.map +1 -1
  708. package/dist/numerical/statistics.d.ts +24 -0
  709. package/dist/numerical/statistics.d.ts.map +1 -0
  710. package/dist/numerical/statistics.js +52 -0
  711. package/dist/numerical/statistics.js.map +1 -0
  712. package/dist/numerical/tensor-engine.d.ts +21 -0
  713. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  714. package/dist/numerical/tensor-engine.js +12 -0
  715. package/dist/numerical/tensor-engine.js.map +1 -1
  716. package/dist/relations/regime.d.ts +10 -0
  717. package/dist/relations/regime.d.ts.map +1 -1
  718. package/dist/relations/regime.js +18 -1
  719. package/dist/relations/regime.js.map +1 -1
  720. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"spacetime-metrics.js","sourceRoot":"","sources":["../../src/numerical/spacetime-metrics.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Curvature of a few exact metrics for `upt metric`.\n *\n * The line element is mostly-plus, (−,+,+,+), the signature of the\n * Schwarzschild fixture in this repo. The canonical Einstein-equation metric\n * node uses the same mostly-plus signature. The Kretschmann scalar does not\n * depend on that choice.\n *\n * Schwarzschild and Kerr Christoffel symbols are closed forms; the Kerr\n * ones come from the analytic metric derivatives through the one Christoffel\n * builder (`computeChristoffelTensor`). Riemann, Ricci and Kretschmann are\n * the finite-difference curvature stack of `curvature-lowering-helpers.ts`\n * (`christoffelAt`, `riemannUpperAt`, `lowerFirstIndex`) and\n * `computeKretschmann`, checked in tests against the closed forms\n * (Schwarzschild Kretschmann, flat-dust FLRW Ricci scalar, Kerr\n * Kretschmann). The metric inverse is MathTS `inv`. Kerr geodesics in\n * Boyer–Lindquist coordinates, including inclined ones, take their initial\n * data from the Carter constant and are integrated with the second-order\n * geodesic equation by `integrateGeodesic` (`geodesic-integrator.ts`).\n * This module holds no curvature or geodesic arithmetic of its own.\n *\n * @module numerical/spacetime-metrics\n * @internal\n */\n\nimport { det, inv } from '@danielsimonjr/mathts-functions';\nimport { C_SI, G_SI, M_SUN_SI } from '../core/constants.js';\nimport { DIMENSIONLESS, LENGTH, MASS, MASS_DENSITY, TIME, VELOCITY, type Dimension } from '../dimensional/types.js';\nimport { UnitError } from '../dimensional/units.js';\nimport { readParameter } from './binding-value.js';\nimport { computeChristoffelTensor } from './connection-lowering-helpers.js';\nimport { christoffelAt, lowerFirstIndex, riemannUpperAt } from './curvature-lowering-helpers.js';\nimport { integrateGeodesic as integrateGeodesicRK4 } from './geodesic-integrator.js';\nimport { computeKretschmann } from './kretschmann.js';\nimport { MathTSEngine } from './mathts-engine.js';\nimport type { NestedArray } from './types.js';\n\n/** Coordinate order (t, r, θ, φ). */\ntype Pt = [number, number, number, number];\n\n/** The signature this module differentiates; `CurvatureReport.signature` is its type. */\nexport const METRIC_SIGNATURE = '(-,+,+,+)';\n\n/**\n * Printed with every curvature report. The line element and the canonical\n * Einstein-equation metric node share this mostly-plus signature.\n */\nconst METRIC_SIGNATURE_NOTE =\n 'Line element signature (−,+,+,+), the same mostly-plus signature as the Schwarzschild fixture ' +\n 'and as the canonical Einstein-equation metric node. ' +\n 'The Kretschmann scalar does not depend on that choice.';\n\n/** The spacetime metrics the curvature reports cover. */\nexport type MetricId = 'minkowski' | 'schwarzschild' | 'flrw' | 'kerr';\n\n/** One nonzero component, for text output. @internal */\nexport interface Component {\n readonly index: string;\n readonly value: number;\n}\n\n/** What `upt metric` prints. @internal */\nexport interface CurvatureReport {\n readonly metric: MetricId;\n readonly signature: typeof METRIC_SIGNATURE;\n readonly signatureNote: string;\n readonly coordinates: string;\n readonly parameters: Readonly<Record<string, number>>;\n readonly point: Readonly<Record<string, number>>;\n readonly christoffel: readonly Component[];\n readonly ricci: readonly Component[];\n readonly ricciScalar: number;\n readonly kretschmann: number;\n /** Closed forms the numeric tensors are checked against. */\n readonly closedForm: Readonly<Record<string, number>>;\n readonly notes: readonly string[];\n}\n\nconst Z = 1e-8;\n\nfunction zeros(n: number): number[] {\n return Array.from({ length: n }, () => 0);\n}\n\nfunction mat4(): number[][] {\n return [zeros(4), zeros(4), zeros(4), zeros(4)];\n}\n\n/** The engine the curvature helpers carry their tensors on. */\nconst ENGINE = new MathTSEngine();\n\n/**\n * The metric inverse, MathTS `inv`. A singular metric is this module's error,\n * decided by MathTS `det` before the inverse is asked for, so no error text is\n * read. `inv` and `det` are typed over every MathTS matrix kind, so their\n * results are read back as the number and the 4×4 number array they are for a\n * number[][] input.\n */\nfunction invert4(src: number[][]): number[][] {\n const determinant: unknown = det(src);\n if (typeof determinant !== 'number' || !Number.isFinite(determinant) || determinant === 0) {\n throw new Error('metric is singular at this point');\n }\n const out: unknown = inv(src);\n if (!Array.isArray(out) || out.length !== 4) throw new Error('metric inverse is not a 4×4 matrix');\n return out.map((row: unknown) => {\n if (!Array.isArray(row) || row.length !== 4) throw new Error('metric inverse is not a 4×4 matrix');\n return row.map((v: unknown) => {\n if (typeof v !== 'number') throw new Error('metric inverse is not a 4×4 matrix');\n return v;\n });\n });\n}\n\ntype MetricFn = (x: Pt) => number[][];\n\n/** The nested-array closures the curvature helpers take, over a `MetricFn`. */\nfunction closuresOf(g: MetricFn): {\n readonly gFn: (x: ReadonlyArray<number>) => NestedArray;\n readonly gInverseFn: (x: ReadonlyArray<number>) => NestedArray;\n} {\n const at = (x: ReadonlyArray<number>): number[][] => g([x[0]!, x[1]!, x[2]!, x[3]!]);\n return { gFn: at, gInverseFn: (x) => invert4(at(x)) };\n}\n\ntype Gamma = number[][][];\n\nfunction blankGamma(): Gamma {\n return [0, 1, 2, 3].map(() => mat4());\n}\n\n/** Γ^ρ_{μν}(x) by the finite-difference Christoffel of the curvature helpers. */\nfunction christoffelOf(g: MetricFn, x: Pt): Gamma {\n const { gFn, gInverseFn } = closuresOf(g);\n return christoffelAt(x, gFn, gInverseFn, 4, ENGINE);\n}\n\ninterface Tensors {\n readonly ricciScalar: number;\n readonly kretschmann: number;\n readonly ricci: number[][];\n readonly christoffel: Gamma;\n}\n\n/**\n * Christoffel, Ricci, the Ricci scalar and the Kretschmann scalar at `x`:\n * `christoffelAt` and `riemannUpperAt` (the finite-difference Γ and R^ρ_{σμν}\n * of the curvature helpers), the Ricci contraction R_{σν} = R^ρ_{σρν}, and\n * `computeKretschmann` over the lowered Riemann. Checked against the\n * Schwarzschild Kretschmann closed form.\n */\nfunction tensorsOf(g: MetricFn, x: Pt): Tensors {\n const { gFn, gInverseFn } = closuresOf(g);\n const g0 = g(x);\n const gi = invert4(g0);\n const gamma = christoffelAt(x, gFn, gInverseFn, 4, ENGINE);\n const up = riemannUpperAt(x, gFn, gInverseFn, 4, ENGINE, gamma);\n const ricci = mat4();\n for (let sigma = 0; sigma < 4; sigma++) {\n for (let nu = 0; nu < 4; nu++) {\n let s = 0;\n for (let rho = 0; rho < 4; rho++) s += up[rho]![sigma]![rho]![nu]!;\n ricci[sigma]![nu] = s;\n }\n }\n let ricciScalar = 0;\n for (let a = 0; a < 4; a++) {\n for (let b = 0; b < 4; b++) ricciScalar += gi[a]![b]! * ricci[a]![b]!;\n }\n const lower = lowerFirstIndex(up, g0.flat(), 4);\n const kretschmann = computeKretschmann(lower, gi);\n return { ricciScalar, kretschmann, ricci, christoffel: gamma };\n}\n\nfunction nonzeroMatrix(m: number[][], label: (i: number, j: number) => string): Component[] {\n const out: Component[] = [];\n const scale = Math.max(1, ...m.flat().map((v) => Math.abs(v)));\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 4; j++) {\n const v = m[i]![j]!;\n if (Math.abs(v) > Z * scale) out.push({ index: label(i, j), value: v });\n }\n }\n return out;\n}\n\nfunction nonzeroGamma(G: Gamma): Component[] {\n const names = ['t', 'r', 'θ', 'φ'];\n const out: Component[] = [];\n let scale = 1;\n for (const block of G) for (const row of block) for (const v of row) scale = Math.max(scale, Math.abs(v));\n for (let rho = 0; rho < 4; rho++) {\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = mu; nu < 4; nu++) {\n const v = G[rho]![mu]![nu]!;\n if (Math.abs(v) > Z * scale) {\n out.push({ index: `Γ^${names[rho]}_${names[mu]}${names[nu]}`, value: v });\n }\n }\n }\n }\n return out;\n}\n\nfunction schwarzschildMetric(M: number, c: number, G: number): MetricFn {\n const rs = (2 * G * M) / (c * c);\n return (x) => {\n const r = x[1];\n const th = x[2];\n const f = 1 - rs / r;\n const g = mat4();\n g[0]![0] = -(c * c) * f;\n g[1]![1] = 1 / f;\n g[2]![2] = r * r;\n g[3]![3] = r * r * Math.sin(th) * Math.sin(th);\n return g;\n };\n}\n\n/** Schwarzschild Kretschmann 48 G² M² / (c⁴ r⁶). @internal */\nexport function schwarzschildKretschmann(M: number, r: number, c = C_SI, G = G_SI): number {\n return (48 * G * G * M * M) / (c ** 4 * r ** 6);\n}\n\nfunction flrwScale(t: number, a0: number, t0: number, n: number): { a: number; adot: number; addot: number } {\n const a = a0 * Math.pow(t / t0, n);\n const adot = (n * a) / t;\n const addot = (n * (n - 1) * a) / (t * t);\n return { a, adot, addot };\n}\n\nfunction flrwMetric(a0: number, t0: number, n: number, k: number, c: number): MetricFn {\n return (x) => {\n const { a } = flrwScale(x[0], a0, t0, n);\n const r = x[1];\n const th = x[2];\n const g = mat4();\n g[0]![0] = -(c * c);\n g[1]![1] = (a * a) / (1 - k * r * r);\n g[2]![2] = a * a * r * r;\n g[3]![3] = a * a * r * r * Math.sin(th) * Math.sin(th);\n return g;\n };\n}\n\n/** FLRW Ricci scalar 6/c² (ä/a + H² + k c²/a²). @internal */\nexport function flrwRicciScalar(\n t: number,\n a0: number,\n t0: number,\n n: number,\n k: number,\n r: number,\n c = C_SI,\n): number {\n const { a, adot, addot } = flrwScale(t, a0, t0, n);\n const H = adot / a;\n return (6 / (c * c)) * (addot / a + H * H + (k * c * c) / (a * a));\n}\n\n/** H² and the Friedmann right-hand side, including curvature and Λ. @internal */\nexport function friedmannSides(opts: {\n readonly t: number;\n readonly a0: number;\n readonly t0: number;\n readonly n: number;\n readonly k: number;\n readonly r: number;\n readonly rho: number;\n readonly lambda: number;\n readonly c?: number;\n readonly G?: number;\n}): { readonly H2: number; readonly rhs: number } {\n const c = opts.c ?? C_SI;\n const G = opts.G ?? G_SI;\n const { a, adot } = flrwScale(opts.t, opts.a0, opts.t0, opts.n);\n const H2 = (adot / a) ** 2;\n const rhs = (8 * Math.PI * G * opts.rho) / 3 - (opts.k * c * c) / (a * a) + (opts.lambda * c * c) / 3;\n return { H2, rhs };\n}\n\nfunction kerrMetric(Mgeom: number, a: number): MetricFn {\n return (x) => {\n const r = x[1];\n const th = x[2];\n const cth = Math.cos(th);\n const sth = Math.sin(th);\n const Sigma = r * r + a * a * cth * cth;\n const Delta = r * r - 2 * Mgeom * r + a * a;\n const g = mat4();\n g[0]![0] = -(1 - (2 * Mgeom * r) / Sigma);\n g[0]![3] = g[3]![0] = -((2 * Mgeom * r * a * sth * sth) / Sigma);\n g[1]![1] = Sigma / Delta;\n g[2]![2] = Sigma;\n g[3]![3] = sth * sth * (r * r + a * a + (2 * Mgeom * r * a * a * sth * sth) / Sigma);\n return g;\n };\n}\n\n/**\n * Kerr Kretschmann in geometrized units (G = c = 1), 1/length⁴.\n * M, r and a are lengths. a = 0 is 48 M²/r⁶.\n * @internal\n */\nexport function kerrKretschmann(M: number, r: number, a: number, theta: number): number {\n const c2 = Math.cos(theta) ** 2;\n const Sigma = r * r + a * a * c2;\n const num =\n 48 *\n M *\n M *\n (r * r - a * a * c2) *\n ((r * r + a * a * c2) ** 2 - 16 * r * r * a * a * c2);\n return num / Sigma ** 6;\n}\n\n/** A metric parameter that is not a point of the manifold: a mass that is not positive. */\nexport class MetricMassError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MetricMassError';\n }\n}\n\n/** A mass that is not positive is not a source. */\nfunction requirePositiveMass(M: number): void {\n if (!(M > 0)) throw new MetricMassError(`${M <= 0 ? 'a non-positive' : 'a non-finite'} mass (M = ${M} kg) is not a source: the metric needs a positive mass`);\n}\n\n/**\n * The polar angle is a point of the spherical chart only on the open interval\n * (0, π). The poles are coordinate singularities: `sin π` is 1.2e-16, not 0, so\n * a test for exact zero lets θ = π through and the finite-difference stencil\n * divides by it.\n */\nfunction requirePolarInterior(theta: number): void {\n if (!(theta > 0 && theta < Math.PI && Math.sin(theta) > 1e-9)) {\n throw new Error(\n `θ must be strictly between 0 and π (got ${theta}): the poles are coordinate singularities of the spherical chart`,\n );\n }\n}\n\n/** SI dimension of each metric parameter. A bare number is already in that unit. */\nconst PARAM_DIM: Readonly<Record<string, Dimension>> = {\n M: MASS,\n c: VELOCITY,\n G: { L: 3, M: -1, T: -2, I: 0, Theta: 0, N: 0, J: 0 },\n r: LENGTH,\n a: LENGTH,\n t: TIME,\n theta: DIMENSIONLESS,\n phi: DIMENSIONLESS,\n a0: DIMENSIONLESS,\n t0: TIME,\n n: DIMENSIONLESS,\n k: { L: -2, M: 0, T: 0, I: 0, Theta: 0, N: 0, J: 0 },\n Lambda: { L: -2, M: 0, T: 0, I: 0, Theta: 0, N: 0, J: 0 },\n rho: MASS_DENSITY,\n};\n\n/** Parse `key=value` pairs. A value is a number, a unit, or a constant expression. @internal */\nfunction metricParams(\n pairs: readonly string[],\n defaults: Readonly<Record<string, number>>,\n): { values: Record<string, number>; notes: string[] } {\n const values: Record<string, number> = { ...defaults };\n const notes: string[] = [];\n for (const pair of pairs) {\n const eq = pair.indexOf('=');\n if (eq <= 0) throw new Error(`'${pair}' must be key=value`);\n const key = pair.slice(0, eq);\n if (!(key in defaults)) throw new Error(`unknown parameter '${key}' (expected ${Object.keys(defaults).join(', ')})`);\n let read: ReturnType<typeof readParameter>;\n try {\n read = readParameter(pair.slice(eq + 1), PARAM_DIM[key] ?? DIMENSIONLESS);\n } catch (e) {\n // The reader knows the text and the dimension it was given, not which parameter held them.\n if (e instanceof UnitError) throw new UnitError(`parameter ${key}: ${e.message}`);\n throw e;\n }\n values[key] = read.value;\n for (const note of read.notes) if (!notes.includes(note)) notes.push(note);\n }\n return { values, notes };\n}\n\n/**\n * Curvature at one point. `pairs` overrides the documented defaults.\n * @internal\n */\nexport function curvatureReport(metric: MetricId, pairs: readonly string[] = []): CurvatureReport {\n if (metric === 'minkowski') {\n const { values: p, notes } = metricParams(pairs, { c: C_SI, t: 0, r: 1, theta: 1, phi: 0 });\n const g: MetricFn = () => {\n const m = mat4();\n m[0]![0] = -(p.c! * p.c!);\n m[1]![1] = 1;\n m[2]![2] = 1;\n m[3]![3] = 1;\n return m;\n };\n const x: Pt = [p.t!, p.r!, p.theta!, p.phi!];\n const t = tensorsOf(g, x);\n return stateCurvature(pack('minkowski', p, x, t, { ricciScalar: 0, kretschmann: 0 }, [\n 'Minkowski in Cartesian-like coordinates (the angular part is not a sphere here; g_θθ = g_φφ = 1).',\n ...notes,\n ]));\n }\n if (metric === 'schwarzschild') {\n // NaN marks r as not supplied. A supplied r = 0 is a point, not the default.\n const { values: p, notes } = metricParams(pairs, { M: M_SUN_SI, c: C_SI, G: G_SI, r: Number.NaN, theta: Math.PI / 2, phi: 0, t: 0 });\n requirePositiveMass(p.M!);\n requirePolarInterior(p.theta!);\n const rs = (2 * p.G! * p.M!) / (p.c! * p.c!);\n if (Number.isNaN(p.r)) p.r = 10 * rs;\n if (!(p.r! > rs)) throw new Error(`r must be outside the horizon (r = ${p.r} m, r_s = ${rs} m)`);\n const g = schwarzschildMetric(p.M!, p.c!, p.G!);\n const x: Pt = [p.t!, p.r!, p.theta!, p.phi!];\n const t = tensorsOf(g, x);\n const K = schwarzschildKretschmann(p.M!, p.r!, p.c!, p.G!);\n return stateCurvature(pack('schwarzschild', p, x, t, { kretschmann: K, ricciScalar: 0, horizon_m: rs }, [\n 'Closed form: Kretschmann = 48 G² M² / (c⁴ r⁶), Ricci = 0.',\n 'Christoffel symbols below are the finite-difference values.',\n ...notes,\n ]));\n }\n if (metric === 'flrw') {\n const { values: p, notes } = metricParams(pairs, {\n a0: 1,\n t0: 1,\n n: 2 / 3,\n k: 0,\n Lambda: 0,\n rho: 0,\n c: C_SI,\n G: G_SI,\n t: 2,\n r: 0.3,\n theta: 1,\n phi: 0.4,\n });\n const { a, adot } = flrwScale(p.t!, p.a0!, p.t0!, p.n!);\n const H2 = (adot / a) ** 2;\n if (p.rho === 0 && p.k === 0 && p.Lambda === 0) {\n p.rho = (3 * H2) / (8 * Math.PI * p.G!);\n }\n const g = flrwMetric(p.a0!, p.t0!, p.n!, p.k!, p.c!);\n const x: Pt = [p.t!, p.r!, p.theta!, p.phi!];\n // Christoffel in the SI metric. Ricci and Kretschmann are computed at c = 1\n // and divided by c² and c⁴: g_tt = −c² makes those scalars smaller than the\n // roundoff of an SI finite difference.\n const tSi = tensorsOf(g, x);\n const t1 = p.c === 1 ? tSi : tensorsOf(flrwMetric(p.a0!, p.t0!, p.n!, p.k!, 1), x);\n const c2 = p.c! * p.c!;\n const t = {\n christoffel: tSi.christoffel,\n ricci: t1.ricci.map((row) => row.map((v) => v / c2)),\n ricciScalar: t1.ricciScalar / c2,\n kretschmann: t1.kretschmann / (c2 * c2),\n };\n const R = flrwRicciScalar(p.t!, p.a0!, p.t0!, p.n!, p.k!, p.r!, p.c!);\n const sides = friedmannSides({\n t: p.t!,\n a0: p.a0!,\n t0: p.t0!,\n n: p.n!,\n k: p.k!,\n r: p.r!,\n rho: p.rho!,\n lambda: p.Lambda!,\n c: p.c,\n G: p.G,\n });\n return stateCurvature(pack('flrw', p, x, t, { ricciScalar: R, H2: sides.H2, friedmannRhs: sides.rhs }, [\n 'ds² = −c² dt² + a(t)² [dr²/(1−k r²) + r² dΩ²], a(t) = a0 (t/t0)^n.',\n 'Friedmann: H² = 8πGρ/3 − k c²/a² + Λ c²/3. Flat dust defaults n = 2/3 and ρ = 3 H²/(8πG). CE-friedmann is the flat term; CE-friedmann-curvature carries −k c²/a².',\n 'Ricci scalar closed form: R = 6/c² (ä/a + H² + k c²/a²). Flat dust: R = 3 H²/c².',\n 'Ricci and Kretschmann are finite-differenced at c = 1 and restored with 1/c² and 1/c⁴. Christoffel symbols are the SI difference.',\n ...notes,\n ]));\n }\n const { values: p, notes: paramNotes } = metricParams(pairs, {\n M: M_SUN_SI,\n a: 0,\n c: C_SI,\n G: G_SI,\n r: Number.NaN,\n theta: Math.PI / 2,\n phi: 0,\n t: 0,\n });\n requirePositiveMass(p.M!);\n requirePolarInterior(p.theta!);\n const Mgeom = (p.G! * p.M!) / (p.c! * p.c!);\n if (Number.isNaN(p.r)) p.r = 10 * Mgeom;\n if (!(p.r! > 0)) throw new Error(`r must be positive and outside the singularity (got r = ${p.r} m)`);\n if (Math.abs(p.a!) >= p.r!) throw new Error('Kerr finite difference wants |a| < r and r outside the ring');\n const g = kerrMetric(Mgeom, p.a!);\n const x: Pt = [p.t!, p.r!, p.theta!, p.phi!];\n const t = tensorsOf(g, x);\n const K = kerrKretschmann(Mgeom, p.r!, p.a!, p.theta!);\n const aOverM = p.a! / Mgeom;\n const kerrNotes = [\n 'Boyer–Lindquist, geometrized lengths: M stands for GM/c² and a is a length. Kretschmann is 1/length⁴.',\n ];\n if (p.a! !== 0 && Math.abs(p.a!) <= 1 && Mgeom > 10) {\n kerrNotes.push(\n `a = ${p.a} m is a length, so a/M = ${aOverM}. A dimensionless spin is a/(GM/c²), not the number passed as a.`,\n );\n }\n return stateCurvature(pack('kerr', { ...p, M_geom_m: Mgeom, a_over_M: aOverM }, x, t, { kretschmann: K, ricciScalar: 0 }, [\n ...paramNotes,\n ...kerrNotes,\n 'Closed form: K = 48 M² (r² − a² cos²θ) [(r² + a² cos²θ)² − 16 r² a² cos²θ] / (r² + a² cos²θ)⁶.',\n 'a = 0 reduces to the Schwarzschild Kretschmann 48 M²/r⁶.',\n 'Geodesics (--geodesic) use the Carter constant. θ = π/2 is an equatorial circular orbit. Any other θ is an inclined spherical orbit with that polar turning point. ISCO and photon radii are closed forms in r/M.',\n ]));\n}\n\nconst relDiff = (got: number, want: number): number => Math.abs(got - want) / Math.max(Math.abs(want), 1e-30);\n\n/**\n * The headline Ricci scalar is the closed form when the finite difference\n * does not match it. A vacuum metric's finite-difference residual is not\n * listed as Ricci. A scale factor that does not solve Friedmann says so.\n */\nfunction stateCurvature(report: CurvatureReport): CurvatureReport {\n const notes = [...report.notes];\n let ricci = report.ricci;\n let ricciScalar = report.ricciScalar;\n const exactR = report.closedForm.ricciScalar;\n if (exactR === 0 && Math.abs(report.ricciScalar) < 1e-6) {\n ricciScalar = 0;\n ricci = [];\n notes.push('Ricci is 0 for this vacuum metric. A finite-difference residual is not listed.');\n } else if (exactR !== undefined && relDiff(report.ricciScalar, exactR) > 1e-2) {\n ricciScalar = exactR;\n ricci = [];\n notes.push(\n 'Ricci scalar is the closed form. The finite-difference scalar, restored from a c = 1 difference by 1/c², does not match it when spatial curvature is present, so those components are not listed.',\n );\n }\n const H2 = report.closedForm.H2;\n const rhs = report.closedForm.friedmannRhs;\n if (H2 !== undefined && rhs !== undefined && relDiff(H2, rhs) > 1e-6) {\n notes.push(\n 'H² and the Friedmann right-hand side differ, so this scale factor is not a solution of the Friedmann equation at the stated ρ, k and Λ. k is a curvature in 1/length²: k = 1 with c in m/s is a curvature radius of about a metre, not the dimensionless k = ±1 of geometrized cosmology.',\n );\n }\n return { ...report, ricci, ricciScalar, notes };\n}\n\nfunction pack(\n metric: MetricId,\n parameters: Readonly<Record<string, number>>,\n x: Pt,\n t: Tensors,\n closedForm: Readonly<Record<string, number>>,\n notes: readonly string[],\n): CurvatureReport {\n const names = ['t', 'r', 'θ', 'φ'];\n return {\n metric,\n signature: METRIC_SIGNATURE,\n signatureNote: METRIC_SIGNATURE_NOTE,\n coordinates: '(t, r, θ, φ)',\n parameters,\n point: { t: x[0], r: x[1], theta: x[2], phi: x[3] },\n christoffel: nonzeroGamma(t.christoffel),\n ricci: nonzeroMatrix(t.ricci, (i, j) => `R_${names[i]}${names[j]}`),\n ricciScalar: t.ricciScalar,\n kretschmann: t.kretschmann,\n closedForm,\n notes,\n };\n}\n\n/**\n * A short Schwarzschild circular-orbit integration (analytic Christoffel, RK4).\n * Returns the radial drift relative to the start and the coordinate φ advance.\n * Kerr is refused.\n * @internal\n */\nexport function schwarzschildCircularOrbit(opts?: {\n readonly M?: number;\n readonly r?: number;\n readonly c?: number;\n readonly G?: number;\n readonly fraction?: number;\n}): { readonly r0: number; readonly rEnd: number; readonly phiAdvance: number; readonly steps: number } {\n const Msi = opts?.M ?? M_SUN_SI;\n const c = opts?.c ?? C_SI;\n const G = opts?.G ?? G_SI;\n // Integrate in geometrized units (c = G = 1). An SI Γ^r_tt is ~c² and cancels\n // only after two huge terms; the residual then blows the step up.\n const M = (G * Msi) / (c * c);\n const rs = 2 * M;\n const r0 = opts?.r ?? 10 * rs;\n const f = 1 - rs / r0;\n const Omega = Math.sqrt(M / r0 ** 3);\n const ut = 1 / Math.sqrt(1 - (3 * rs) / (2 * r0));\n const uphi = Omega * ut;\n if (!(f > 0) || !Number.isFinite(ut)) throw new Error('circular orbit needs r > 1.5 r_s');\n\n // The closed-form Schwarzschild Christoffel symbols, polar terms included:\n // with u^θ = 0 and θ = π/2 the polar terms stay zero to roundoff.\n const period = (2 * Math.PI) / uphi;\n const fraction = opts?.fraction ?? 0.02;\n const steps = 400;\n const y = integrateWithChristoffel((r, theta) => schwarzschildChristoffel(M, r, theta), [0, r0, Math.PI / 2, 0, ut, 0, 0, uphi], period * fraction, steps);\n return { r0, rEnd: y[1]!, phiAdvance: y[3]!, steps };\n}\n\n/**\n * Kerr ISCO radii in units of M. χ = a/M, |χ| ≤ 1.\n * Bardeen, Press & Teukolsky 1972: r/M = 3 + Z2 ∓ √((3−Z1)(3+Z1+2 Z2)),\n * upper sign prograde.\n * @internal\n */\nexport function kerrIscoRadius(aOverM: number): { readonly prograde: number; readonly retrograde: number } {\n const chi = aOverM;\n if (!(Math.abs(chi) <= 1)) throw new Error('|a/M| must be at most 1');\n const z1 = 1 + Math.cbrt(1 - chi * chi) * (Math.cbrt(1 + chi) + Math.cbrt(1 - chi));\n const z2 = Math.sqrt(3 * chi * chi + z1 * z1);\n const inner = Math.sqrt((3 - z1) * (3 + z1 + 2 * z2));\n return { prograde: 3 + z2 - inner, retrograde: 3 + z2 + inner };\n}\n\n/**\n * Unstable equatorial photon orbits in units of M.\n * r/M = 2 (1 + cos(⅔ arccos(∓ a/M))), upper sign prograde.\n * @internal\n */\nexport function kerrPhotonRadius(aOverM: number): { readonly prograde: number; readonly retrograde: number } {\n const chi = aOverM;\n if (!(Math.abs(chi) <= 1)) throw new Error('|a/M| must be at most 1');\n return {\n prograde: 2 * (1 + Math.cos((2 / 3) * Math.acos(-chi))),\n retrograde: 2 * (1 + Math.cos((2 / 3) * Math.acos(chi))),\n };\n}\n\n/** One integrated geodesic in geometrized units. @internal */\nexport interface KerrGeodesicSample {\n readonly r0: number;\n readonly rEnd: number;\n readonly theta0: number;\n readonly thetaEnd: number;\n readonly phiAdvance: number;\n readonly steps: number;\n readonly E0: number;\n readonly EEnd: number;\n readonly L0: number;\n readonly LEnd: number;\n readonly Q0: number;\n readonly QEnd: number;\n readonly norm0: number;\n readonly normEnd: number;\n readonly mu2: number;\n}\n\ninterface SphericalConstants {\n readonly E: number;\n readonly L: number;\n readonly Q: number;\n}\n\nfunction radialPotential(M: number, a: number, r: number, E: number, L: number, Q: number, mu2: number): number {\n const Delta = r * r - 2 * M * r + a * a;\n const P = E * (r * r + a * a) - a * L;\n return P * P - Delta * (mu2 * r * r + (L - a * E) ** 2 + Q);\n}\n\nfunction radialPotentialPrime(M: number, a: number, r: number, E: number, L: number, Q: number, mu2: number): number {\n const Delta = r * r - 2 * M * r + a * a;\n const dDelta = 2 * (r - M);\n const P = E * (r * r + a * a) - a * L;\n const separated = mu2 * r * r + (L - a * E) ** 2 + Q;\n return 4 * r * E * P - dDelta * separated - 2 * mu2 * r * Delta;\n}\n\n/** Equatorial circular energy and axial angular momentum. Upper sign is prograde. */\nfunction equatorialCircular(M: number, a: number, r: number, prograde: boolean): { readonly E: number; readonly L: number; readonly uphi: number } {\n const sign = prograde ? 1 : -1;\n const sqrtM = Math.sqrt(M);\n const Omega = (sign * sqrtM) / (r ** 1.5 + sign * a * sqrtM);\n const g0 = kerrMetric(M, a)([0, r, Math.PI / 2, 0]);\n const norm = -(g0[0]![0]! + 2 * Omega * g0[0]![3]! + Omega * Omega * g0[3]![3]!);\n if (!(norm > 0) || !Number.isFinite(Omega)) throw new Error('circular orbit is not timelike at this radius');\n const ut = 1 / Math.sqrt(norm);\n const uphi = Omega * ut;\n return {\n E: -(g0[0]![0]! * ut + g0[0]![3]! * uphi),\n L: g0[3]![0]! * ut + g0[3]![3]! * uphi,\n uphi,\n };\n}\n\n/** ∂(R, R')/∂(E, L). Lengths are in units of M, so L and Q are L/M and Q/M². */\nfunction sphericalJacobian(\n a: number,\n r: number,\n E: number,\n L: number,\n): { readonly j11: number; readonly j12: number; readonly j21: number; readonly j22: number } {\n const Delta = r * r - 2 * r + a * a;\n const dDelta = 2 * (r - 1);\n const alpha = r * r + a * a;\n const P = E * alpha - a * L;\n const x = L - a * E;\n const dPdE = alpha;\n const dPdL = -a;\n const dSdE = -2 * a * x;\n const dSdL = 2 * x;\n return {\n j11: 2 * P * dPdE - Delta * dSdE,\n j12: 2 * P * dPdL - Delta * dSdL,\n j21: 4 * r * P + 4 * r * E * dPdE - dDelta * dSdE,\n j22: 4 * r * E * dPdL - dDelta * dSdL,\n };\n}\n\nfunction solveSpherical(M: number, a: number, r: number, Q: number, mu2: number, prograde: boolean): { readonly E: number; readonly L: number } {\n // R is a difference of terms ~ r⁴. Solve in units of M so a solar radius\n // does not wipe the L-column of a finite-difference Jacobian.\n const aHat = a / M;\n const rHat = r / M;\n const QHat = Q / (M * M);\n const seed = equatorialCircular(1, aHat, rHat, prograde);\n let E = seed.E;\n let L = seed.L;\n for (let n = 0; n < 30; n++) {\n const f1 = radialPotential(1, aHat, rHat, E, L, QHat, mu2);\n const f2 = radialPotentialPrime(1, aHat, rHat, E, L, QHat, mu2);\n const { j11, j12, j21, j22 } = sphericalJacobian(aHat, rHat, E, L);\n const det = j11 * j22 - j12 * j21;\n const scale = Math.max(1, Math.abs(j11), Math.abs(j12), Math.abs(j21), Math.abs(j22));\n if (!Number.isFinite(det) || Math.abs(det) < 1e-18 * scale * scale) throw new Error('spherical-orbit Jacobian is singular');\n const stepE = (j22 * f1 - j12 * f2) / det;\n const stepL = (-j21 * f1 + j11 * f2) / det;\n E -= stepE;\n L -= stepL;\n // r⁴ cancellation leaves R' uncertain by a fraction of a unit at large r/M.\n const room = Math.max(1, rHat ** 4);\n const settled =\n Math.abs(stepE) < 1e-10 &&\n Math.abs(stepL) < 1e-8 * Math.max(1, Math.abs(L)) &&\n Math.abs(f1) < 1e-6 * room &&\n Math.abs(f2) < 1e-6 * room;\n if (settled) return { E, L: L * M };\n }\n throw new Error('spherical orbit did not converge');\n}\n\n/**\n * Timelike spherical orbit at fixed r: R = R' = 0. `Q` is the Carter constant\n * (0 on the equator). E and L come from that pair of conditions.\n * @internal\n */\nexport function kerrSphericalTimelike(opts?: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n readonly Q?: number;\n readonly prograde?: boolean;\n}): SphericalConstants & { readonly R: number; readonly Rp: number } {\n const M = opts?.M ?? 1;\n const chi = opts?.aOverM ?? 0;\n if (!(M > 0) || !(Math.abs(chi) <= 1)) throw new Error('spherical orbit wants M > 0 and |a/M| ≤ 1');\n const a = chi * M;\n const r = (opts?.rOverM ?? 10) * M;\n const Q = opts?.Q ?? 0;\n const solved = solveSpherical(M, a, r, Q, 1, opts?.prograde !== false);\n return {\n E: solved.E,\n L: solved.L,\n Q,\n R: radialPotential(M, a, r, solved.E, solved.L, Q, 1),\n Rp: radialPotentialPrime(M, a, r, solved.E, solved.L, Q, 1),\n };\n}\n\n/**\n * Spherical photon orbit between the equatorial photon radii.\n * E is fixed at 1 (null affine scale). L/E and Q/E² are the separated\n * constants with R = R' = 0 and μ² = 0. Q = 0 on either equatorial photon orbit.\n * @internal\n */\nexport function kerrSphericalPhoton(opts?: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n}): SphericalConstants {\n const M = opts?.M ?? 1;\n const chi = opts?.aOverM ?? 0;\n const rHat = opts?.rOverM;\n if (!(M > 0) || !(Math.abs(chi) > 0 && Math.abs(chi) <= 1)) throw new Error('spherical photon orbit wants M > 0 and 0 < |a/M| ≤ 1');\n if (rHat === undefined) throw new Error('spherical photon orbit needs rOverM');\n const ends = kerrPhotonRadius(chi);\n const lo = Math.min(ends.prograde, ends.retrograde);\n const hi = Math.max(ends.prograde, ends.retrograde);\n if (!(rHat >= lo - 1e-9 && rHat <= hi + 1e-9)) {\n throw new Error('spherical photon radius lies between the prograde and retrograde photon orbits');\n }\n const a = chi * M;\n const r = rHat * M;\n if (!(Math.abs(r - M) > 1e-9 * M)) throw new Error('extremal prograde photon orbit sits on the horizon');\n const Delta = r * r - 2 * M * r + a * a;\n const E = 1;\n const L = E * ((r * r + a * a) / a - (2 * r * Delta) / (a * (r - M)));\n const P = E * (r * r + a * a) - a * L;\n const Q = (P * P) / Delta - (L - a * E) ** 2;\n if (Q < -1e-8 * M * M) throw new Error('no spherical photon orbit at this radius');\n return { E, L, Q: Q < 0 ? 0 : Q };\n}\n\n/**\n * Spherical timelike orbit whose polar turning point is `theta`.\n * The Carter constant is the value that makes Θ(θ) = 0 there.\n * @internal\n */\nexport function kerrTurningPointOrbit(opts: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n readonly theta: number;\n readonly prograde?: boolean;\n}): SphericalConstants {\n const M = opts.M ?? 1;\n const chi = opts.aOverM ?? 0;\n if (!(M > 0) || !(Math.abs(chi) <= 1)) throw new Error('turning-point orbit wants M > 0 and |a/M| ≤ 1');\n const a = chi * M;\n const r = (opts.rOverM ?? 10) * M;\n const theta = opts.theta;\n const s = Math.sin(theta);\n const c = Math.cos(theta);\n if (!(Math.abs(s) > 1e-3) || !(Math.abs(c) > 1e-4)) {\n throw new Error('turning-point θ must sit off the equator and off the pole');\n }\n const seed = equatorialCircular(M, a, r, opts.prograde !== false);\n let Q = seed.L * seed.L * c * c;\n let E = seed.E;\n let L = seed.L;\n for (let n = 0; n < 16; n++) {\n const solved = solveSpherical(M, a, r, Q, 1, opts.prograde !== false);\n E = solved.E;\n L = solved.L;\n const next = c * c * (a * a * (1 - E * E) + (L * L) / (s * s));\n if (!Number.isFinite(next) || next < 0) throw new Error('turning-point Carter constant left the physical range');\n if (Math.abs(next - Q) <= 1e-9 * Math.max(1, Math.abs(next))) return { E, L, Q: next };\n Q = next;\n }\n throw new Error('turning-point Carter constant did not converge');\n}\n\nfunction kerrMetricDerivatives(M: number, a: number, r: number, theta: number): { readonly dr: number[][]; readonly dth: number[][] } {\n const c = Math.cos(theta);\n const s = Math.sin(theta);\n const Sigma = r * r + a * a * c * c;\n const dSr = 2 * r;\n const dSt = -2 * a * a * c * s;\n const Delta = r * r - 2 * M * r + a * a;\n const dDr = 2 * (r - M);\n const Sigma2 = Sigma * Sigma;\n const dr = mat4();\n const dth = mat4();\n dr[0]![0] = (2 * M * (a * a * c * c - r * r)) / Sigma2;\n dth[0]![0] = (4 * M * r * a * a * c * s) / Sigma2;\n const dtpR = (-2 * M * a * s * s * (a * a * c * c - r * r)) / Sigma2;\n const dtpT = (-4 * M * a * r * s * c * (Sigma + a * a * s * s)) / Sigma2;\n dr[0]![3] = dr[3]![0] = dtpR;\n dth[0]![3] = dth[3]![0] = dtpT;\n dr[1]![1] = (dSr * Delta - Sigma * dDr) / (Delta * Delta);\n dth[1]![1] = dSt / Delta;\n dr[2]![2] = dSr;\n dth[2]![2] = dSt;\n const A = (r * r + a * a) ** 2 - a * a * Delta * s * s;\n const dAr = 4 * r * (r * r + a * a) - a * a * dDr * s * s;\n const dAt = -2 * a * a * Delta * s * c;\n dr[3]![3] = (s * s * (dAr * Sigma - A * dSr)) / Sigma2;\n dth[3]![3] = ((2 * s * c * A + s * s * dAt) * Sigma - s * s * A * dSt) / Sigma2;\n return { dr, dth };\n}\n\n/**\n * Γ^ρ_{μν} from a metric and its analytic partial derivatives, through the\n * one Christoffel builder (`computeChristoffelTensor`). A `null` derivative\n * is a coordinate the metric does not depend on.\n */\nfunction christoffelFrom(g: number[][], dg: readonly (number[][] | null)[]): Gamma {\n const gInverseFlat = invert4(g).flat();\n const tensor = computeChristoffelTensor(gInverseFlat, (mu) => (dg[mu] ?? mat4()).flat(), 4, ENGINE);\n return ENGINE.toNested(tensor) as Gamma;\n}\n\nfunction kerrChristoffel(M: number, a: number, r: number, theta: number): Gamma {\n const partial = kerrMetricDerivatives(M, a, r, theta);\n return christoffelFrom(kerrMetric(M, a)([0, r, theta, 0]), [null, partial.dr, partial.dth, null]);\n}\n\n/** Largest |Γ_analytic − Γ_finite_difference| at one Boyer–Lindquist point. @internal */\nexport function kerrChristoffelFdGap(M: number, a: number, r: number, theta: number): number {\n const x: Pt = [0, r, theta, 0];\n const analytic = kerrChristoffel(M, a, r, theta);\n const fd = christoffelOf(kerrMetric(M, a), x);\n let gap = 0;\n for (let rho = 0; rho < 4; rho++) {\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) gap = Math.max(gap, Math.abs(analytic[rho]![mu]![nu]! - fd[rho]![mu]![nu]!));\n }\n }\n return gap;\n}\n\nfunction schwarzschildChristoffel(M: number, r: number, theta: number): Gamma {\n const rs = 2 * M;\n const ff = 1 - rs / r;\n const s = Math.sin(theta);\n const c = Math.cos(theta);\n const Gma: Gamma = blankGamma();\n const set = (rho: number, mu: number, nu: number, v: number) => {\n Gma[rho]![mu]![nu] = v;\n Gma[rho]![nu]![mu] = v;\n };\n set(0, 0, 1, rs / (2 * r * (r - rs)));\n set(1, 0, 0, (rs * ff) / (2 * r * r));\n set(1, 1, 1, -rs / (2 * r * (r - rs)));\n set(1, 2, 2, -(r - rs));\n set(1, 3, 3, -(r - rs) * s * s);\n set(2, 1, 2, 1 / r);\n set(2, 3, 3, -s * c);\n set(3, 1, 3, 1 / r);\n set(3, 2, 3, c / s);\n return Gma;\n}\n\nfunction conservedOf(metric: MetricFn, a: number, y: readonly number[], mu2: number): { readonly E: number; readonly L: number; readonly Q: number; readonly norm: number } {\n const g = metric([y[0]!, y[1]!, y[2]!, y[3]!]);\n const u = [y[4]!, y[5]!, y[6]!, y[7]!];\n let norm = 0;\n for (let i = 0; i < 4; i++) for (let j = 0; j < 4; j++) norm += g[i]![j]! * u[i]! * u[j]!;\n const E = -(g[0]![0]! * u[0]! + g[0]![3]! * u[3]!);\n const L = g[3]![0]! * u[0]! + g[3]![3]! * u[3]!;\n const pTheta = g[2]![2]! * u[2]!;\n const c = Math.cos(y[2]!);\n const s = Math.sin(y[2]!);\n const Q = pTheta * pTheta + c * c * (a * a * (mu2 - E * E) + (L * L) / (s * s));\n return { E, L, Q, norm };\n}\n\nfunction carterState(\n M: number,\n a: number,\n r: number,\n theta: number,\n E: number,\n L: number,\n Q: number,\n mu2: number,\n signR: number,\n signTheta: number,\n allowOffShell: boolean,\n): number[] {\n const c = Math.cos(theta);\n const s = Math.sin(theta);\n if (!(Math.abs(s) > 1e-6)) throw new Error('Boyer–Lindquist geodesic wants θ away from the poles');\n const Sigma = r * r + a * a * c * c;\n const Delta = r * r - 2 * M * r + a * a;\n if (!(Delta > 0)) throw new Error('geodesic start must be outside the horizon');\n const R = radialPotential(M, a, r, E, L, Q, mu2);\n const Theta = Q - c * c * (a * a * (mu2 - E * E) + (L * L) / (s * s));\n const scale = Math.max(1, E * E, L * L, Math.abs(Q));\n if (R < -1e-8 * scale && !allowOffShell) throw new Error('radial potential is negative at the start');\n if (Theta < -1e-8 * scale && !allowOffShell) throw new Error('polar potential is negative at the start');\n const g = kerrMetric(M, a)([0, r, theta, 0]);\n const det = g[0]![0]! * g[3]![3]! - g[0]![3]! * g[0]![3]!;\n const ut = (g[3]![3]! * -E - g[0]![3]! * L) / det;\n const uphi = (g[0]![0]! * L - g[0]![3]! * -E) / det;\n const ur = signR * Math.sqrt(Math.max(R, 0)) / Sigma;\n const uth = signTheta * Math.sqrt(Math.max(Theta, 0)) / Sigma;\n return [0, r, theta, 0, ut, ur, uth, uphi];\n}\n\n/**\n * The state `[t, r, θ, φ, u^t, u^r, u^θ, u^φ]` after `steps` RK4 steps of\n * the second-order geodesic equation over an affine extent `tauEnd`, by\n * `integrateGeodesic` of `geodesic-integrator.ts` with `gammaAt` packed into\n * its flat layout `G[16·μ + 4·ν + ρ] = Γ^μ_{νρ}`.\n */\nfunction integrateWithChristoffel(\n gammaAt: (r: number, theta: number) => Gamma,\n y0: readonly number[],\n tauEnd: number,\n steps: number,\n): number[] {\n const christoffelFn = (x: ReadonlyArray<number>, out?: Float64Array): Float64Array => {\n const flat = out ?? new Float64Array(64);\n const gamma = gammaAt(x[1]!, x[2]!);\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) {\n for (let rho = 0; rho < 4; rho++) flat[16 * mu + 4 * nu + rho] = gamma[mu]![nu]![rho]!;\n }\n }\n return flat;\n };\n const result = integrateGeodesicRK4({\n christoffelFn,\n x0: [y0[0]!, y0[1]!, y0[2]!, y0[3]!],\n v0: [y0[4]!, y0[5]!, y0[6]!, y0[7]!],\n tauStart: 0,\n tauEnd,\n steps,\n });\n return [...result.xFinal, ...result.vFinal];\n}\n\n/** `fraction` of an orbit's angular period, from the start's angular rate. */\nfunction orbitExtent(y0: readonly number[], fraction: number): number {\n const angular = Math.max(Math.abs(y0[7]!), Math.abs(y0[6]!), 1e-12);\n return ((2 * Math.PI) / angular) * fraction;\n}\n\nfunction sampleOf(metric: MetricFn, a: number, y0: readonly number[], y1: readonly number[], steps: number, mu2: number): KerrGeodesicSample {\n const start = conservedOf(metric, a, y0, mu2);\n const end = conservedOf(metric, a, y1, mu2);\n return {\n r0: y0[1]!,\n rEnd: y1[1]!,\n theta0: y0[2]!,\n thetaEnd: y1[2]!,\n phiAdvance: y1[3]!,\n steps,\n E0: start.E,\n EEnd: end.E,\n L0: start.L,\n LEnd: end.L,\n Q0: start.Q,\n QEnd: end.Q,\n norm0: start.norm,\n normEnd: end.norm,\n mu2,\n };\n}\n\n/**\n * Integrate a Kerr geodesic in Boyer–Lindquist coordinates, geometrized (G = c = 1).\n * Initial u^μ comes from the Carter first-order potentials (E, L, Q, μ²).\n * The step is the second-order geodesic equation with analytic Christoffel symbols,\n * so E, L, Q and g_μν u^μ u^ν are evolved quantities and can drift.\n * `mu2` is 1 for timelike and 0 for null. `allowOffShell` starts the second-order\n * equation even when a potential is negative; that is the control that r can move.\n * @internal\n */\nexport function kerrGeodesic(opts: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n readonly theta?: number;\n readonly E: number;\n readonly L: number;\n readonly Q: number;\n readonly mu2?: number;\n readonly signR?: number;\n readonly signTheta?: number;\n readonly fraction?: number;\n readonly steps?: number;\n readonly allowOffShell?: boolean;\n}): KerrGeodesicSample {\n const M = opts.M ?? 1;\n const chi = opts.aOverM ?? 0;\n if (!(M > 0) || !(Math.abs(chi) <= 1)) throw new Error('Kerr geodesic wants M > 0 and |a/M| ≤ 1');\n const a = chi * M;\n const r = (opts.rOverM ?? 10) * M;\n const theta = opts.theta ?? Math.PI / 2;\n const mu2 = opts.mu2 ?? 1;\n const steps = opts.steps ?? 80;\n const fraction = opts.fraction ?? 0.01;\n const metric = kerrMetric(M, a);\n const y0 = carterState(M, a, r, theta, opts.E, opts.L, opts.Q, mu2, opts.signR ?? 1, opts.signTheta ?? 1, opts.allowOffShell === true);\n const y1 = integrateWithChristoffel((rr, th) => kerrChristoffel(M, a, rr, th), y0, orbitExtent(y0, fraction), steps);\n return sampleOf(metric, a, y0, y1, steps, mu2);\n}\n\n/**\n * Schwarzschild geodesic in geometrized units, with the closed-form Christoffel\n * symbols (the polar terms included). The initial 4-velocity is the a = 0 Carter\n * state, so a Kerr run at a = 0 can be compared coordinate by coordinate.\n * @internal\n */\nexport function schwarzschildGeodesic(opts: {\n readonly M?: number;\n readonly rOverM?: number;\n readonly theta?: number;\n readonly E: number;\n readonly L: number;\n readonly Q: number;\n readonly signR?: number;\n readonly signTheta?: number;\n readonly fraction?: number;\n readonly steps?: number;\n}): KerrGeodesicSample {\n const M = opts.M ?? 1;\n if (!(M > 0)) throw new Error('Schwarzschild geodesic wants M > 0');\n const r = (opts.rOverM ?? 10) * M;\n const theta = opts.theta ?? Math.PI / 2;\n const steps = opts.steps ?? 80;\n const fraction = opts.fraction ?? 0.01;\n const metric = schwarzschildMetric(M, 1, 1);\n const y0 = carterState(M, 0, r, theta, opts.E, opts.L, opts.Q, 1, opts.signR ?? 1, opts.signTheta ?? 1, false);\n const y1 = integrateWithChristoffel((rr, th) => schwarzschildChristoffel(M, rr, th), y0, orbitExtent(y0, fraction), steps);\n return sampleOf(metric, 0, y0, y1, steps, 1);\n}\n\n/**\n * Integrate a Kerr equatorial circular orbit in geometrized units (G = c = 1).\n * Q is 0 and θ starts at π/2. E = −u_t and L = u_φ are evolved with the\n * second-order equation. `rOverM` must sit outside the photon orbit.\n * @internal\n */\nexport function kerrEquatorialCircular(opts?: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n readonly prograde?: boolean;\n readonly fraction?: number;\n readonly steps?: number;\n}): KerrGeodesicSample {\n const M = opts?.M ?? 1;\n const chi = opts?.aOverM ?? 0;\n const rOverM = opts?.rOverM ?? 10;\n if (!(M > 0) || !(Math.abs(chi) <= 1)) throw new Error('|a/M| must be at most 1');\n const eq = equatorialCircular(M, chi * M, rOverM * M, opts?.prograde !== false);\n return kerrGeodesic({\n M,\n aOverM: chi,\n rOverM,\n theta: Math.PI / 2,\n E: eq.E,\n L: eq.L,\n Q: 0,\n mu2: 1,\n fraction: opts?.fraction ?? 0.01,\n steps: opts?.steps ?? 80,\n });\n}\n"]}
1
+ {"version":3,"file":"spacetime-metrics.js","sourceRoot":"","sources":["../../src/numerical/spacetime-metrics.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Curvature of a few exact metrics for `upt metric`.\n *\n * The line element is mostly-plus, (−,+,+,+), the signature of the\n * Schwarzschild fixture in this repo. The canonical Einstein-equation metric\n * node uses the same mostly-plus signature. The Kretschmann scalar does not\n * depend on that choice.\n *\n * Schwarzschild and Kerr Christoffel symbols are closed forms; the Kerr\n * ones come from the analytic metric derivatives through the one Christoffel\n * builder (`computeChristoffelTensor`). Riemann, Ricci and Kretschmann are\n * the finite-difference curvature stack of `curvature-lowering-helpers.ts`\n * (`christoffelAt`, `riemannUpperAt`, `lowerFirstIndex`) and\n * `computeKretschmann`, checked in tests against the closed forms\n * (Schwarzschild Kretschmann, flat-dust FLRW Ricci scalar, Kerr\n * Kretschmann). The metric inverse is MathTS `inv`. Kerr geodesics in\n * Boyer–Lindquist coordinates, including inclined ones, take their initial\n * data from the Carter constant and are integrated with the second-order\n * geodesic equation by `integrateGeodesic` (`geodesic-integrator.ts`).\n * This module holds no curvature or geodesic arithmetic of its own.\n *\n * @module numerical/spacetime-metrics\n * @internal\n */\n\nimport { det, inv } from '@danielsimonjr/mathts-functions';\nimport { splitAssignment } from '../core/assignment.js';\nimport { relDiff, withinMixed } from '../core/compare.js';\nimport { numberFrom, numberMatrixFrom } from '../core/mathts-read.js';\nimport { C_SI, G_SI, M_SUN_SI } from '../core/constants.js';\nimport { DIMENSIONLESS, GRAVITATIONAL_CONSTANT, LENGTH, MASS, MASS_DENSITY, TIME, VELOCITY, type Dimension } from '../dimensional/types.js';\nimport { UnitError } from '../dimensional/units.js';\nimport { readParameter } from './binding-value.js';\nimport { computeChristoffelTensor } from './connection-lowering-helpers.js';\nimport { christoffelAt, lowerFirstIndex, riemannUpperAt } from './curvature-lowering-helpers.js';\nimport { integrateGeodesic as integrateGeodesicRK4 } from './geodesic-integrator.js';\nimport { computeKretschmann } from './kretschmann.js';\nimport { MathTSEngine } from './mathts-engine.js';\nimport { schwarzschildRadius } from './schwarzschild.js';\nimport type { NestedArray } from './types.js';\n\n/** Coordinate order (t, r, θ, φ). */\ntype Pt = [number, number, number, number];\n\n/** The signature this module differentiates; `CurvatureReport.signature` is its type. */\nexport const METRIC_SIGNATURE = '(-,+,+,+)';\n\n/**\n * Printed with every curvature report. The line element and the canonical\n * Einstein-equation metric node share this mostly-plus signature.\n */\nconst METRIC_SIGNATURE_NOTE =\n 'Line element signature (−,+,+,+), the same mostly-plus signature as the Schwarzschild fixture ' +\n 'and as the canonical Einstein-equation metric node. ' +\n 'The Kretschmann scalar does not depend on that choice.';\n\n/** The spacetime metrics the curvature reports cover. */\nexport type MetricId = 'minkowski' | 'schwarzschild' | 'flrw' | 'kerr';\n\n/** One nonzero component, for text output. @internal */\nexport interface Component {\n readonly index: string;\n readonly value: number;\n}\n\n/** What `upt metric` prints. @internal */\nexport interface CurvatureReport {\n readonly metric: MetricId;\n readonly signature: typeof METRIC_SIGNATURE;\n readonly signatureNote: string;\n readonly coordinates: string;\n readonly parameters: Readonly<Record<string, number>>;\n readonly point: Readonly<Record<string, number>>;\n readonly christoffel: readonly Component[];\n readonly ricci: readonly Component[];\n readonly ricciScalar: number;\n readonly kretschmann: number;\n /** Closed forms the numeric tensors are checked against. */\n readonly closedForm: Readonly<Record<string, number>>;\n readonly notes: readonly string[];\n}\n\nconst Z = 1e-8;\n\nfunction zeros(n: number): number[] {\n return Array.from({ length: n }, () => 0);\n}\n\nfunction mat4(): number[][] {\n return [zeros(4), zeros(4), zeros(4), zeros(4)];\n}\n\n/** The engine the curvature helpers carry their tensors on. */\nconst ENGINE = new MathTSEngine();\n\n/**\n * The metric inverse, MathTS `inv`. A singular metric is this module's error,\n * decided by MathTS `det` before the inverse is asked for, so no error text is\n * read. `inv` and `det` are typed over every MathTS matrix kind, so their\n * results are read back as the number and the 4×4 number array they are for a\n * number[][] input.\n */\nfunction invert4(src: number[][]): number[][] {\n const determinant = numberFrom('det', det(src));\n if (!Number.isFinite(determinant) || determinant === 0) {\n throw new MetricValueError('metric is singular at this point');\n }\n try {\n return numberMatrixFrom('inv', inv(src), 4);\n } catch (error) {\n throw new Error('metric inverse is not a 4×4 matrix', { cause: error });\n }\n}\n\ntype MetricFn = (x: Pt) => number[][];\n\n/** The nested-array closures the curvature helpers take, over a `MetricFn`. */\nfunction closuresOf(g: MetricFn): {\n readonly gFn: (x: ReadonlyArray<number>) => NestedArray;\n readonly gInverseFn: (x: ReadonlyArray<number>) => NestedArray;\n} {\n const at = (x: ReadonlyArray<number>): number[][] => g([x[0]!, x[1]!, x[2]!, x[3]!]);\n return { gFn: at, gInverseFn: (x) => invert4(at(x)) };\n}\n\ntype Gamma = number[][][];\n\nfunction blankGamma(): Gamma {\n return [0, 1, 2, 3].map(() => mat4());\n}\n\n/** Γ^ρ_{μν}(x) by the finite-difference Christoffel of the curvature helpers. */\nfunction christoffelOf(g: MetricFn, x: Pt): Gamma {\n const { gFn, gInverseFn } = closuresOf(g);\n return christoffelAt(x, gFn, gInverseFn, 4, ENGINE);\n}\n\ninterface Tensors {\n readonly ricciScalar: number;\n readonly kretschmann: number;\n readonly ricci: number[][];\n readonly christoffel: Gamma;\n}\n\n/**\n * Christoffel, Ricci, the Ricci scalar and the Kretschmann scalar at `x`:\n * `christoffelAt` and `riemannUpperAt` (the finite-difference Γ and R^ρ_{σμν}\n * of the curvature helpers), the Ricci contraction R_{σν} = R^ρ_{σρν}, and\n * `computeKretschmann` over the lowered Riemann. Checked against the\n * Schwarzschild Kretschmann closed form.\n */\nfunction tensorsOf(g: MetricFn, x: Pt): Tensors {\n const { gFn, gInverseFn } = closuresOf(g);\n const g0 = g(x);\n const gi = invert4(g0);\n const gamma = christoffelAt(x, gFn, gInverseFn, 4, ENGINE);\n const up = riemannUpperAt(x, gFn, gInverseFn, 4, ENGINE, gamma);\n const ricci = mat4();\n for (let sigma = 0; sigma < 4; sigma++) {\n for (let nu = 0; nu < 4; nu++) {\n let s = 0;\n for (let rho = 0; rho < 4; rho++) s += up[rho]![sigma]![rho]![nu]!;\n ricci[sigma]![nu] = s;\n }\n }\n let ricciScalar = 0;\n for (let a = 0; a < 4; a++) {\n for (let b = 0; b < 4; b++) ricciScalar += gi[a]![b]! * ricci[a]![b]!;\n }\n const lower = lowerFirstIndex(up, g0.flat(), 4);\n const kretschmann = computeKretschmann(lower, gi);\n return { ricciScalar, kretschmann, ricci, christoffel: gamma };\n}\n\nfunction nonzeroMatrix(m: number[][], label: (i: number, j: number) => string): Component[] {\n const out: Component[] = [];\n const scale = Math.max(1, ...m.flat().map((v) => Math.abs(v)));\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 4; j++) {\n const v = m[i]![j]!;\n if (Math.abs(v) > Z * scale) out.push({ index: label(i, j), value: v });\n }\n }\n return out;\n}\n\nfunction nonzeroGamma(G: Gamma): Component[] {\n const names = ['t', 'r', 'θ', 'φ'];\n const out: Component[] = [];\n let scale = 1;\n for (const block of G) for (const row of block) for (const v of row) scale = Math.max(scale, Math.abs(v));\n for (let rho = 0; rho < 4; rho++) {\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = mu; nu < 4; nu++) {\n const v = G[rho]![mu]![nu]!;\n if (Math.abs(v) > Z * scale) {\n out.push({ index: `Γ^${names[rho]}_${names[mu]}${names[nu]}`, value: v });\n }\n }\n }\n }\n return out;\n}\n\nfunction schwarzschildMetric(M: number, c: number, G: number): MetricFn {\n const rs = schwarzschildRadius(M, G, c);\n return (x) => {\n const r = x[1];\n const th = x[2];\n const f = 1 - rs / r;\n const g = mat4();\n g[0]![0] = -(c * c) * f;\n g[1]![1] = 1 / f;\n g[2]![2] = r * r;\n g[3]![3] = r * r * Math.sin(th) * Math.sin(th);\n return g;\n };\n}\n\n/** Schwarzschild Kretschmann 48 G² M² / (c⁴ r⁶). @internal */\nexport function schwarzschildKretschmann(M: number, r: number, c = C_SI, G = G_SI): number {\n return (48 * G * G * M * M) / (c ** 4 * r ** 6);\n}\n\nfunction flrwScale(t: number, a0: number, t0: number, n: number): { a: number; adot: number; addot: number } {\n const a = a0 * Math.pow(t / t0, n);\n const adot = (n * a) / t;\n const addot = (n * (n - 1) * a) / (t * t);\n return { a, adot, addot };\n}\n\nfunction flrwMetric(a0: number, t0: number, n: number, k: number, c: number): MetricFn {\n return (x) => {\n const { a } = flrwScale(x[0], a0, t0, n);\n const r = x[1];\n const th = x[2];\n const g = mat4();\n g[0]![0] = -(c * c);\n g[1]![1] = (a * a) / (1 - k * r * r);\n g[2]![2] = a * a * r * r;\n g[3]![3] = a * a * r * r * Math.sin(th) * Math.sin(th);\n return g;\n };\n}\n\n/** FLRW Ricci scalar 6/c² (ä/a + H² + k c²/a²). @internal */\nexport function flrwRicciScalar(\n t: number,\n a0: number,\n t0: number,\n n: number,\n k: number,\n r: number,\n c = C_SI,\n): number {\n const { a, adot, addot } = flrwScale(t, a0, t0, n);\n const H = adot / a;\n return (6 / (c * c)) * (addot / a + H * H + (k * c * c) / (a * a));\n}\n\n/** H² and the Friedmann right-hand side, including curvature and Λ. @internal */\nexport function friedmannSides(opts: {\n readonly t: number;\n readonly a0: number;\n readonly t0: number;\n readonly n: number;\n readonly k: number;\n readonly r: number;\n readonly rho: number;\n readonly lambda: number;\n readonly c?: number;\n readonly G?: number;\n}): { readonly H2: number; readonly rhs: number } {\n const c = opts.c ?? C_SI;\n const G = opts.G ?? G_SI;\n const { a, adot } = flrwScale(opts.t, opts.a0, opts.t0, opts.n);\n const H2 = (adot / a) ** 2;\n const rhs = (8 * Math.PI * G * opts.rho) / 3 - (opts.k * c * c) / (a * a) + (opts.lambda * c * c) / 3;\n return { H2, rhs };\n}\n\nfunction kerrMetric(Mgeom: number, a: number): MetricFn {\n return (x) => {\n const r = x[1];\n const th = x[2];\n const cth = Math.cos(th);\n const sth = Math.sin(th);\n const Sigma = r * r + a * a * cth * cth;\n const Delta = r * r - 2 * Mgeom * r + a * a;\n const g = mat4();\n g[0]![0] = -(1 - (2 * Mgeom * r) / Sigma);\n g[0]![3] = g[3]![0] = -((2 * Mgeom * r * a * sth * sth) / Sigma);\n g[1]![1] = Sigma / Delta;\n g[2]![2] = Sigma;\n g[3]![3] = sth * sth * (r * r + a * a + (2 * Mgeom * r * a * a * sth * sth) / Sigma);\n return g;\n };\n}\n\n/**\n * Kerr Kretschmann in geometrized units (G = c = 1), 1/length⁴.\n * M, r and a are lengths. a = 0 is 48 M²/r⁶.\n * @internal\n */\nexport function kerrKretschmann(M: number, r: number, a: number, theta: number): number {\n const c2 = Math.cos(theta) ** 2;\n const Sigma = r * r + a * a * c2;\n const num =\n 48 *\n M *\n M *\n (r * r - a * a * c2) *\n ((r * r + a * a * c2) ** 2 - 16 * r * r * a * a * c2);\n return num / Sigma ** 6;\n}\n\n/** A metric parameter that is not a point of the manifold: a mass that is not positive. */\nexport class MetricMassError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MetricMassError';\n }\n}\n\n/**\n * A value the metric library refuses: a point inside the horizon or on a\n * pole, a Kerr point inside the ring, an unknown or repeated parameter, a\n * token that is not `key=value`, an orbit or geodesic start the closed forms\n * do not admit, a Newton iteration that does not converge at the given\n * point. The CLI maps this class to exit 1; any other class is a defect and\n * is not converted.\n * @internal\n */\nexport class MetricValueError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MetricValueError';\n }\n}\n\n/** A mass that is not positive is not a source. */\nfunction requirePositiveMass(M: number): void {\n if (!(M > 0)) throw new MetricMassError(`${M <= 0 ? 'a non-positive' : 'a non-finite'} mass (M = ${M} kg) is not a source: the metric needs a positive mass`);\n}\n\n/**\n * The polar angle is a point of the spherical chart only on the open interval\n * (0, π). The poles are coordinate singularities: `sin π` is 1.2e-16, not 0, so\n * a test for exact zero lets θ = π through and the finite-difference stencil\n * divides by it.\n */\nfunction requirePolarInterior(theta: number): void {\n if (!(theta > 0 && theta < Math.PI && Math.sin(theta) > 1e-9)) {\n throw new MetricValueError(\n `θ must be strictly between 0 and π (got ${theta}): the poles are coordinate singularities of the spherical chart`,\n );\n }\n}\n\n/** SI dimension of each metric parameter. A bare number is already in that unit. */\nconst PARAM_DIM: Readonly<Record<string, Dimension>> = {\n M: MASS,\n c: VELOCITY,\n G: GRAVITATIONAL_CONSTANT,\n r: LENGTH,\n a: LENGTH,\n t: TIME,\n theta: DIMENSIONLESS,\n phi: DIMENSIONLESS,\n a0: DIMENSIONLESS,\n t0: TIME,\n n: DIMENSIONLESS,\n k: { L: -2, M: 0, T: 0, I: 0, Theta: 0, N: 0, J: 0 },\n Lambda: { L: -2, M: 0, T: 0, I: 0, Theta: 0, N: 0, J: 0 },\n rho: MASS_DENSITY,\n};\n\n/** Parse `key=value` pairs. A value is a number, a unit, or a constant expression. @internal */\nfunction metricParams(\n pairs: readonly string[],\n defaults: Readonly<Record<string, number>>,\n): { values: Record<string, number>; notes: string[] } {\n const values: Record<string, number> = { ...defaults };\n const notes: string[] = [];\n const seen = new Set<string>();\n for (const pair of pairs) {\n const split = splitAssignment(pair);\n if (split === null) throw new MetricValueError(`'${pair}' must be key=value`);\n const key = split.name;\n if (!(key in defaults)) throw new MetricValueError(`unknown parameter '${key}' (expected ${Object.keys(defaults).join(', ')})`);\n if (seen.has(key)) throw new MetricValueError(`'${key}' is given twice ('${pair}'); give one value per parameter`);\n seen.add(key);\n let read: ReturnType<typeof readParameter>;\n try {\n read = readParameter(split.raw, PARAM_DIM[key] ?? DIMENSIONLESS);\n } catch (e) {\n // The reader knows the text and the dimension it was given, not which parameter held them.\n if (e instanceof UnitError) throw new UnitError(`parameter ${key}: ${e.message}`);\n throw e;\n }\n values[key] = read.value;\n for (const note of read.notes) if (!notes.includes(note)) notes.push(note);\n }\n return { values, notes };\n}\n\n/**\n * Curvature at one point. `pairs` overrides the documented defaults.\n * @internal\n */\nexport function curvatureReport(metric: MetricId, pairs: readonly string[] = []): CurvatureReport {\n if (metric === 'minkowski') {\n const { values: p, notes } = metricParams(pairs, { c: C_SI, t: 0, r: 1, theta: 1, phi: 0 });\n const g: MetricFn = () => {\n const m = mat4();\n m[0]![0] = -(p.c! * p.c!);\n m[1]![1] = 1;\n m[2]![2] = 1;\n m[3]![3] = 1;\n return m;\n };\n const x: Pt = [p.t!, p.r!, p.theta!, p.phi!];\n const t = tensorsOf(g, x);\n return stateCurvature(pack('minkowski', p, x, t, { ricciScalar: 0, kretschmann: 0 }, [\n 'Minkowski in Cartesian-like coordinates (the angular part is not a sphere here; g_θθ = g_φφ = 1).',\n ...notes,\n ]));\n }\n if (metric === 'schwarzschild') {\n // NaN marks r as not supplied. A supplied r = 0 is a point, not the default.\n const { values: p, notes } = metricParams(pairs, { M: M_SUN_SI, c: C_SI, G: G_SI, r: Number.NaN, theta: Math.PI / 2, phi: 0, t: 0 });\n requirePositiveMass(p.M!);\n requirePolarInterior(p.theta!);\n const rs = schwarzschildRadius(p.M!, p.G!, p.c!);\n if (Number.isNaN(p.r)) p.r = 10 * rs;\n if (!(p.r! > rs)) throw new MetricValueError(`r must be outside the horizon (r = ${p.r} m, r_s = ${rs} m)`);\n const g = schwarzschildMetric(p.M!, p.c!, p.G!);\n const x: Pt = [p.t!, p.r!, p.theta!, p.phi!];\n const t = tensorsOf(g, x);\n const K = schwarzschildKretschmann(p.M!, p.r!, p.c!, p.G!);\n return stateCurvature(pack('schwarzschild', p, x, t, { kretschmann: K, ricciScalar: 0, horizon_m: rs }, [\n 'Closed form: Kretschmann = 48 G² M² / (c⁴ r⁶), Ricci = 0.',\n 'Christoffel symbols below are the finite-difference values.',\n ...notes,\n ]));\n }\n if (metric === 'flrw') {\n const { values: p, notes } = metricParams(pairs, {\n a0: 1,\n t0: 1,\n n: 2 / 3,\n k: 0,\n Lambda: 0,\n rho: 0,\n c: C_SI,\n G: G_SI,\n t: 2,\n r: 0.3,\n theta: 1,\n phi: 0.4,\n });\n const { a, adot } = flrwScale(p.t!, p.a0!, p.t0!, p.n!);\n const H2 = (adot / a) ** 2;\n if (p.rho === 0 && p.k === 0 && p.Lambda === 0) {\n p.rho = (3 * H2) / (8 * Math.PI * p.G!);\n }\n const g = flrwMetric(p.a0!, p.t0!, p.n!, p.k!, p.c!);\n const x: Pt = [p.t!, p.r!, p.theta!, p.phi!];\n // Christoffel in the SI metric. Ricci and Kretschmann are computed at c = 1\n // and divided by c² and c⁴: g_tt = −c² makes those scalars smaller than the\n // roundoff of an SI finite difference.\n const tSi = tensorsOf(g, x);\n const t1 = p.c === 1 ? tSi : tensorsOf(flrwMetric(p.a0!, p.t0!, p.n!, p.k!, 1), x);\n const c2 = p.c! * p.c!;\n const t = {\n christoffel: tSi.christoffel,\n ricci: t1.ricci.map((row) => row.map((v) => v / c2)),\n ricciScalar: t1.ricciScalar / c2,\n kretschmann: t1.kretschmann / (c2 * c2),\n };\n const R = flrwRicciScalar(p.t!, p.a0!, p.t0!, p.n!, p.k!, p.r!, p.c!);\n const sides = friedmannSides({\n t: p.t!,\n a0: p.a0!,\n t0: p.t0!,\n n: p.n!,\n k: p.k!,\n r: p.r!,\n rho: p.rho!,\n lambda: p.Lambda!,\n c: p.c,\n G: p.G,\n });\n return stateCurvature(pack('flrw', p, x, t, { ricciScalar: R, H2: sides.H2, friedmannRhs: sides.rhs }, [\n 'ds² = −c² dt² + a(t)² [dr²/(1−k r²) + r² dΩ²], a(t) = a0 (t/t0)^n.',\n 'Friedmann: H² = 8πGρ/3 − k c²/a² + Λ c²/3. Flat dust defaults n = 2/3 and ρ = 3 H²/(8πG). CE-friedmann is the flat term; CE-friedmann-curvature carries −k c²/a².',\n 'Ricci scalar closed form: R = 6/c² (ä/a + H² + k c²/a²). Flat dust: R = 3 H²/c².',\n 'Ricci and Kretschmann are finite-differenced at c = 1 and restored with 1/c² and 1/c⁴. Christoffel symbols are the SI difference.',\n ...notes,\n ]));\n }\n const { values: p, notes: paramNotes } = metricParams(pairs, {\n M: M_SUN_SI,\n a: 0,\n c: C_SI,\n G: G_SI,\n r: Number.NaN,\n theta: Math.PI / 2,\n phi: 0,\n t: 0,\n });\n requirePositiveMass(p.M!);\n requirePolarInterior(p.theta!);\n const Mgeom = (p.G! * p.M!) / (p.c! * p.c!);\n if (Number.isNaN(p.r)) p.r = 10 * Mgeom;\n if (!(p.r! > 0)) throw new MetricValueError(`r must be positive and outside the singularity (got r = ${p.r} m)`);\n if (Math.abs(p.a!) >= p.r!) throw new MetricValueError('Kerr finite difference wants |a| < r and r outside the ring');\n const g = kerrMetric(Mgeom, p.a!);\n const x: Pt = [p.t!, p.r!, p.theta!, p.phi!];\n const t = tensorsOf(g, x);\n const K = kerrKretschmann(Mgeom, p.r!, p.a!, p.theta!);\n const aOverM = p.a! / Mgeom;\n const kerrNotes = [\n 'Boyer–Lindquist, geometrized lengths: M stands for GM/c² and a is a length. Kretschmann is 1/length⁴.',\n ];\n if (p.a! !== 0 && Math.abs(p.a!) <= 1 && Mgeom > 10) {\n kerrNotes.push(\n `a = ${p.a} m is a length, so a/M = ${aOverM}. A dimensionless spin is a/(GM/c²), not the number passed as a.`,\n );\n }\n return stateCurvature(pack('kerr', { ...p, M_geom_m: Mgeom, a_over_M: aOverM }, x, t, { kretschmann: K, ricciScalar: 0 }, [\n ...paramNotes,\n ...kerrNotes,\n 'Closed form: K = 48 M² (r² − a² cos²θ) [(r² + a² cos²θ)² − 16 r² a² cos²θ] / (r² + a² cos²θ)⁶.',\n 'a = 0 reduces to the Schwarzschild Kretschmann 48 M²/r⁶.',\n 'Geodesics (--geodesic) use the Carter constant. θ = π/2 is an equatorial circular orbit. Any other θ is an inclined spherical orbit with that polar turning point. ISCO and photon radii are closed forms in r/M.',\n ]));\n}\n\n/**\n * The headline Ricci scalar is the closed form when the finite difference\n * does not match it. A vacuum metric's finite-difference residual is not\n * listed as Ricci. A scale factor that does not solve Friedmann says so.\n */\nfunction stateCurvature(report: CurvatureReport): CurvatureReport {\n const notes = [...report.notes];\n let ricci = report.ricci;\n let ricciScalar = report.ricciScalar;\n const exactR = report.closedForm.ricciScalar;\n if (exactR === 0 && Math.abs(report.ricciScalar) < 1e-6) {\n ricciScalar = 0;\n ricci = [];\n notes.push('Ricci is 0 for this vacuum metric. A finite-difference residual is not listed.');\n } else if (exactR !== undefined && relDiff(report.ricciScalar, exactR, 1e-30) > 1e-2) {\n ricciScalar = exactR;\n ricci = [];\n notes.push(\n 'Ricci scalar is the closed form. The finite-difference scalar, restored from a c = 1 difference by 1/c², does not match it when spatial curvature is present, so those components are not listed.',\n );\n }\n const H2 = report.closedForm.H2;\n const rhs = report.closedForm.friedmannRhs;\n if (H2 !== undefined && rhs !== undefined && relDiff(H2, rhs, 1e-30) > 1e-6) {\n notes.push(\n 'H² and the Friedmann right-hand side differ, so this scale factor is not a solution of the Friedmann equation at the stated ρ, k and Λ. k is a curvature in 1/length²: k = 1 with c in m/s is a curvature radius of about a metre, not the dimensionless k = ±1 of geometrized cosmology.',\n );\n }\n return { ...report, ricci, ricciScalar, notes };\n}\n\nfunction pack(\n metric: MetricId,\n parameters: Readonly<Record<string, number>>,\n x: Pt,\n t: Tensors,\n closedForm: Readonly<Record<string, number>>,\n notes: readonly string[],\n): CurvatureReport {\n const names = ['t', 'r', 'θ', 'φ'];\n return {\n metric,\n signature: METRIC_SIGNATURE,\n signatureNote: METRIC_SIGNATURE_NOTE,\n coordinates: '(t, r, θ, φ)',\n parameters,\n point: { t: x[0], r: x[1], theta: x[2], phi: x[3] },\n christoffel: nonzeroGamma(t.christoffel),\n ricci: nonzeroMatrix(t.ricci, (i, j) => `R_${names[i]}${names[j]}`),\n ricciScalar: t.ricciScalar,\n kretschmann: t.kretschmann,\n closedForm,\n notes,\n };\n}\n\n/**\n * A short Schwarzschild circular-orbit integration (analytic Christoffel, RK4).\n * Returns the radial drift relative to the start and the coordinate φ advance.\n * Kerr is refused.\n * @internal\n */\nexport function schwarzschildCircularOrbit(opts?: {\n readonly M?: number;\n readonly r?: number;\n readonly c?: number;\n readonly G?: number;\n readonly fraction?: number;\n}): { readonly r0: number; readonly rEnd: number; readonly phiAdvance: number; readonly steps: number } {\n const Msi = opts?.M ?? M_SUN_SI;\n const c = opts?.c ?? C_SI;\n const G = opts?.G ?? G_SI;\n // Integrate in geometrized units (c = G = 1). An SI Γ^r_tt is ~c² and cancels\n // only after two huge terms; the residual then blows the step up.\n const M = (G * Msi) / (c * c);\n const rs = 2 * M;\n const r0 = opts?.r ?? 10 * rs;\n const f = 1 - rs / r0;\n const Omega = Math.sqrt(M / r0 ** 3);\n const ut = 1 / Math.sqrt(1 - (3 * rs) / (2 * r0));\n const uphi = Omega * ut;\n if (!(f > 0) || !Number.isFinite(ut)) throw new MetricValueError('circular orbit needs r > 1.5 r_s');\n\n // The closed-form Schwarzschild Christoffel symbols, polar terms included:\n // with u^θ = 0 and θ = π/2 the polar terms stay zero to roundoff.\n const period = (2 * Math.PI) / uphi;\n const fraction = opts?.fraction ?? 0.02;\n const steps = 400;\n const y = integrateWithChristoffel((r, theta) => schwarzschildChristoffel(M, r, theta), [0, r0, Math.PI / 2, 0, ut, 0, 0, uphi], period * fraction, steps);\n return { r0, rEnd: y[1]!, phiAdvance: y[3]!, steps };\n}\n\n/**\n * Kerr ISCO radii in units of M. χ = a/M, |χ| ≤ 1.\n * Bardeen, Press & Teukolsky 1972: r/M = 3 + Z2 ∓ √((3−Z1)(3+Z1+2 Z2)),\n * upper sign prograde.\n * @internal\n */\nexport function kerrIscoRadius(aOverM: number): { readonly prograde: number; readonly retrograde: number } {\n const chi = aOverM;\n if (!(Math.abs(chi) <= 1)) throw new MetricValueError('|a/M| must be at most 1');\n const z1 = 1 + Math.cbrt(1 - chi * chi) * (Math.cbrt(1 + chi) + Math.cbrt(1 - chi));\n const z2 = Math.sqrt(3 * chi * chi + z1 * z1);\n const inner = Math.sqrt((3 - z1) * (3 + z1 + 2 * z2));\n return { prograde: 3 + z2 - inner, retrograde: 3 + z2 + inner };\n}\n\n/**\n * Unstable equatorial photon orbits in units of M.\n * r/M = 2 (1 + cos(⅔ arccos(∓ a/M))), upper sign prograde.\n * @internal\n */\nexport function kerrPhotonRadius(aOverM: number): { readonly prograde: number; readonly retrograde: number } {\n const chi = aOverM;\n if (!(Math.abs(chi) <= 1)) throw new MetricValueError('|a/M| must be at most 1');\n return {\n prograde: 2 * (1 + Math.cos((2 / 3) * Math.acos(-chi))),\n retrograde: 2 * (1 + Math.cos((2 / 3) * Math.acos(chi))),\n };\n}\n\n/** One integrated geodesic in geometrized units. @internal */\nexport interface KerrGeodesicSample {\n readonly r0: number;\n readonly rEnd: number;\n readonly theta0: number;\n readonly thetaEnd: number;\n readonly phiAdvance: number;\n readonly steps: number;\n readonly E0: number;\n readonly EEnd: number;\n readonly L0: number;\n readonly LEnd: number;\n readonly Q0: number;\n readonly QEnd: number;\n readonly norm0: number;\n readonly normEnd: number;\n readonly mu2: number;\n}\n\ninterface SphericalConstants {\n readonly E: number;\n readonly L: number;\n readonly Q: number;\n}\n\nfunction radialPotential(M: number, a: number, r: number, E: number, L: number, Q: number, mu2: number): number {\n const Delta = r * r - 2 * M * r + a * a;\n const P = E * (r * r + a * a) - a * L;\n return P * P - Delta * (mu2 * r * r + (L - a * E) ** 2 + Q);\n}\n\nfunction radialPotentialPrime(M: number, a: number, r: number, E: number, L: number, Q: number, mu2: number): number {\n const Delta = r * r - 2 * M * r + a * a;\n const dDelta = 2 * (r - M);\n const P = E * (r * r + a * a) - a * L;\n const separated = mu2 * r * r + (L - a * E) ** 2 + Q;\n return 4 * r * E * P - dDelta * separated - 2 * mu2 * r * Delta;\n}\n\n/** Equatorial circular energy and axial angular momentum. Upper sign is prograde. */\nfunction equatorialCircular(M: number, a: number, r: number, prograde: boolean): { readonly E: number; readonly L: number; readonly uphi: number } {\n const sign = prograde ? 1 : -1;\n const sqrtM = Math.sqrt(M);\n const Omega = (sign * sqrtM) / (r ** 1.5 + sign * a * sqrtM);\n const g0 = kerrMetric(M, a)([0, r, Math.PI / 2, 0]);\n const norm = -(g0[0]![0]! + 2 * Omega * g0[0]![3]! + Omega * Omega * g0[3]![3]!);\n if (!(norm > 0) || !Number.isFinite(Omega)) throw new MetricValueError('circular orbit is not timelike at this radius');\n const ut = 1 / Math.sqrt(norm);\n const uphi = Omega * ut;\n return {\n E: -(g0[0]![0]! * ut + g0[0]![3]! * uphi),\n L: g0[3]![0]! * ut + g0[3]![3]! * uphi,\n uphi,\n };\n}\n\n/** ∂(R, R')/∂(E, L). Lengths are in units of M, so L and Q are L/M and Q/M². */\nfunction sphericalJacobian(\n a: number,\n r: number,\n E: number,\n L: number,\n): { readonly j11: number; readonly j12: number; readonly j21: number; readonly j22: number } {\n const Delta = r * r - 2 * r + a * a;\n const dDelta = 2 * (r - 1);\n const alpha = r * r + a * a;\n const P = E * alpha - a * L;\n const x = L - a * E;\n const dPdE = alpha;\n const dPdL = -a;\n const dSdE = -2 * a * x;\n const dSdL = 2 * x;\n return {\n j11: 2 * P * dPdE - Delta * dSdE,\n j12: 2 * P * dPdL - Delta * dSdL,\n j21: 4 * r * P + 4 * r * E * dPdE - dDelta * dSdE,\n j22: 4 * r * E * dPdL - dDelta * dSdL,\n };\n}\n\nfunction solveSpherical(M: number, a: number, r: number, Q: number, mu2: number, prograde: boolean): { readonly E: number; readonly L: number } {\n // R is a difference of terms ~ r⁴. Solve in units of M so a solar radius\n // does not wipe the L-column of a finite-difference Jacobian.\n const aHat = a / M;\n const rHat = r / M;\n const QHat = Q / (M * M);\n const seed = equatorialCircular(1, aHat, rHat, prograde);\n let E = seed.E;\n let L = seed.L;\n for (let n = 0; n < 30; n++) {\n const f1 = radialPotential(1, aHat, rHat, E, L, QHat, mu2);\n const f2 = radialPotentialPrime(1, aHat, rHat, E, L, QHat, mu2);\n const { j11, j12, j21, j22 } = sphericalJacobian(aHat, rHat, E, L);\n const det = j11 * j22 - j12 * j21;\n const scale = Math.max(1, Math.abs(j11), Math.abs(j12), Math.abs(j21), Math.abs(j22));\n if (!Number.isFinite(det) || Math.abs(det) < 1e-18 * scale * scale) throw new MetricValueError('spherical-orbit Jacobian is singular');\n const stepE = (j22 * f1 - j12 * f2) / det;\n const stepL = (-j21 * f1 + j11 * f2) / det;\n E -= stepE;\n L -= stepL;\n // r⁴ cancellation leaves R' uncertain by a fraction of a unit at large r/M.\n const room = Math.max(1, rHat ** 4);\n const settled =\n Math.abs(stepE) < 1e-10 &&\n Math.abs(stepL) < 1e-8 * Math.max(1, Math.abs(L)) &&\n Math.abs(f1) < 1e-6 * room &&\n Math.abs(f2) < 1e-6 * room;\n if (settled) return { E, L: L * M };\n }\n throw new MetricValueError('spherical orbit did not converge');\n}\n\n/**\n * Timelike spherical orbit at fixed r: R = R' = 0. `Q` is the Carter constant\n * (0 on the equator). E and L come from that pair of conditions.\n * @internal\n */\nexport function kerrSphericalTimelike(opts?: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n readonly Q?: number;\n readonly prograde?: boolean;\n}): SphericalConstants & { readonly R: number; readonly Rp: number } {\n const M = opts?.M ?? 1;\n const chi = opts?.aOverM ?? 0;\n if (!(M > 0) || !(Math.abs(chi) <= 1)) throw new MetricValueError('spherical orbit wants M > 0 and |a/M| ≤ 1');\n const a = chi * M;\n const r = (opts?.rOverM ?? 10) * M;\n const Q = opts?.Q ?? 0;\n const solved = solveSpherical(M, a, r, Q, 1, opts?.prograde !== false);\n return {\n E: solved.E,\n L: solved.L,\n Q,\n R: radialPotential(M, a, r, solved.E, solved.L, Q, 1),\n Rp: radialPotentialPrime(M, a, r, solved.E, solved.L, Q, 1),\n };\n}\n\n/**\n * Spherical photon orbit between the equatorial photon radii.\n * E is fixed at 1 (null affine scale). L/E and Q/E² are the separated\n * constants with R = R' = 0 and μ² = 0. Q = 0 on either equatorial photon orbit.\n * @internal\n */\nexport function kerrSphericalPhoton(opts?: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n}): SphericalConstants {\n const M = opts?.M ?? 1;\n const chi = opts?.aOverM ?? 0;\n const rHat = opts?.rOverM;\n if (!(M > 0) || !(Math.abs(chi) > 0 && Math.abs(chi) <= 1)) throw new MetricValueError('spherical photon orbit wants M > 0 and 0 < |a/M| ≤ 1');\n if (rHat === undefined) throw new MetricValueError('spherical photon orbit needs rOverM');\n const ends = kerrPhotonRadius(chi);\n const lo = Math.min(ends.prograde, ends.retrograde);\n const hi = Math.max(ends.prograde, ends.retrograde);\n if (!(rHat >= lo - 1e-9 && rHat <= hi + 1e-9)) {\n throw new MetricValueError('spherical photon radius lies between the prograde and retrograde photon orbits');\n }\n const a = chi * M;\n const r = rHat * M;\n if (!(Math.abs(r - M) > 1e-9 * M)) throw new MetricValueError('extremal prograde photon orbit sits on the horizon');\n const Delta = r * r - 2 * M * r + a * a;\n const E = 1;\n const L = E * ((r * r + a * a) / a - (2 * r * Delta) / (a * (r - M)));\n const P = E * (r * r + a * a) - a * L;\n const Q = (P * P) / Delta - (L - a * E) ** 2;\n if (Q < -1e-8 * M * M) throw new MetricValueError('no spherical photon orbit at this radius');\n return { E, L, Q: Q < 0 ? 0 : Q };\n}\n\n/**\n * Spherical timelike orbit whose polar turning point is `theta`.\n * The Carter constant is the value that makes Θ(θ) = 0 there.\n * @internal\n */\nexport function kerrTurningPointOrbit(opts: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n readonly theta: number;\n readonly prograde?: boolean;\n}): SphericalConstants {\n const M = opts.M ?? 1;\n const chi = opts.aOverM ?? 0;\n if (!(M > 0) || !(Math.abs(chi) <= 1)) throw new MetricValueError('turning-point orbit wants M > 0 and |a/M| ≤ 1');\n const a = chi * M;\n const r = (opts.rOverM ?? 10) * M;\n const theta = opts.theta;\n const s = Math.sin(theta);\n const c = Math.cos(theta);\n if (!(Math.abs(s) > 1e-3) || !(Math.abs(c) > 1e-4)) {\n throw new MetricValueError('turning-point θ must sit off the equator and off the pole');\n }\n const seed = equatorialCircular(M, a, r, opts.prograde !== false);\n let Q = seed.L * seed.L * c * c;\n let E = seed.E;\n let L = seed.L;\n for (let n = 0; n < 16; n++) {\n const solved = solveSpherical(M, a, r, Q, 1, opts.prograde !== false);\n E = solved.E;\n L = solved.L;\n const next = c * c * (a * a * (1 - E * E) + (L * L) / (s * s));\n if (!Number.isFinite(next) || next < 0) throw new MetricValueError('turning-point Carter constant left the physical range');\n if (withinMixed(Q, next, 1e-9)) return { E, L, Q: next };\n Q = next;\n }\n throw new MetricValueError('turning-point Carter constant did not converge');\n}\n\nfunction kerrMetricDerivatives(M: number, a: number, r: number, theta: number): { readonly dr: number[][]; readonly dth: number[][] } {\n const c = Math.cos(theta);\n const s = Math.sin(theta);\n const Sigma = r * r + a * a * c * c;\n const dSr = 2 * r;\n const dSt = -2 * a * a * c * s;\n const Delta = r * r - 2 * M * r + a * a;\n const dDr = 2 * (r - M);\n const Sigma2 = Sigma * Sigma;\n const dr = mat4();\n const dth = mat4();\n dr[0]![0] = (2 * M * (a * a * c * c - r * r)) / Sigma2;\n dth[0]![0] = (4 * M * r * a * a * c * s) / Sigma2;\n const dtpR = (-2 * M * a * s * s * (a * a * c * c - r * r)) / Sigma2;\n const dtpT = (-4 * M * a * r * s * c * (Sigma + a * a * s * s)) / Sigma2;\n dr[0]![3] = dr[3]![0] = dtpR;\n dth[0]![3] = dth[3]![0] = dtpT;\n dr[1]![1] = (dSr * Delta - Sigma * dDr) / (Delta * Delta);\n dth[1]![1] = dSt / Delta;\n dr[2]![2] = dSr;\n dth[2]![2] = dSt;\n const A = (r * r + a * a) ** 2 - a * a * Delta * s * s;\n const dAr = 4 * r * (r * r + a * a) - a * a * dDr * s * s;\n const dAt = -2 * a * a * Delta * s * c;\n dr[3]![3] = (s * s * (dAr * Sigma - A * dSr)) / Sigma2;\n dth[3]![3] = ((2 * s * c * A + s * s * dAt) * Sigma - s * s * A * dSt) / Sigma2;\n return { dr, dth };\n}\n\n/**\n * Γ^ρ_{μν} from a metric and its analytic partial derivatives, through the\n * one Christoffel builder (`computeChristoffelTensor`). A `null` derivative\n * is a coordinate the metric does not depend on.\n */\nfunction christoffelFrom(g: number[][], dg: readonly (number[][] | null)[]): Gamma {\n const gInverseFlat = invert4(g).flat();\n const tensor = computeChristoffelTensor(gInverseFlat, (mu) => (dg[mu] ?? mat4()).flat(), 4, ENGINE);\n return ENGINE.toNested(tensor) as Gamma;\n}\n\nfunction kerrChristoffel(M: number, a: number, r: number, theta: number): Gamma {\n const partial = kerrMetricDerivatives(M, a, r, theta);\n return christoffelFrom(kerrMetric(M, a)([0, r, theta, 0]), [null, partial.dr, partial.dth, null]);\n}\n\n/** Largest |Γ_analytic − Γ_finite_difference| at one Boyer–Lindquist point. @internal */\nexport function kerrChristoffelFdGap(M: number, a: number, r: number, theta: number): number {\n const x: Pt = [0, r, theta, 0];\n const analytic = kerrChristoffel(M, a, r, theta);\n const fd = christoffelOf(kerrMetric(M, a), x);\n let gap = 0;\n for (let rho = 0; rho < 4; rho++) {\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) gap = Math.max(gap, Math.abs(analytic[rho]![mu]![nu]! - fd[rho]![mu]![nu]!));\n }\n }\n return gap;\n}\n\nfunction schwarzschildChristoffel(M: number, r: number, theta: number): Gamma {\n const rs = 2 * M;\n const ff = 1 - rs / r;\n const s = Math.sin(theta);\n const c = Math.cos(theta);\n const Gma: Gamma = blankGamma();\n const set = (rho: number, mu: number, nu: number, v: number) => {\n Gma[rho]![mu]![nu] = v;\n Gma[rho]![nu]![mu] = v;\n };\n set(0, 0, 1, rs / (2 * r * (r - rs)));\n set(1, 0, 0, (rs * ff) / (2 * r * r));\n set(1, 1, 1, -rs / (2 * r * (r - rs)));\n set(1, 2, 2, -(r - rs));\n set(1, 3, 3, -(r - rs) * s * s);\n set(2, 1, 2, 1 / r);\n set(2, 3, 3, -s * c);\n set(3, 1, 3, 1 / r);\n set(3, 2, 3, c / s);\n return Gma;\n}\n\nfunction conservedOf(metric: MetricFn, a: number, y: readonly number[], mu2: number): { readonly E: number; readonly L: number; readonly Q: number; readonly norm: number } {\n const g = metric([y[0]!, y[1]!, y[2]!, y[3]!]);\n const u = [y[4]!, y[5]!, y[6]!, y[7]!];\n let norm = 0;\n for (let i = 0; i < 4; i++) for (let j = 0; j < 4; j++) norm += g[i]![j]! * u[i]! * u[j]!;\n const E = -(g[0]![0]! * u[0]! + g[0]![3]! * u[3]!);\n const L = g[3]![0]! * u[0]! + g[3]![3]! * u[3]!;\n const pTheta = g[2]![2]! * u[2]!;\n const c = Math.cos(y[2]!);\n const s = Math.sin(y[2]!);\n const Q = pTheta * pTheta + c * c * (a * a * (mu2 - E * E) + (L * L) / (s * s));\n return { E, L, Q, norm };\n}\n\nfunction carterState(\n M: number,\n a: number,\n r: number,\n theta: number,\n E: number,\n L: number,\n Q: number,\n mu2: number,\n signR: number,\n signTheta: number,\n allowOffShell: boolean,\n): number[] {\n const c = Math.cos(theta);\n const s = Math.sin(theta);\n if (!(Math.abs(s) > 1e-6)) throw new MetricValueError('Boyer–Lindquist geodesic wants θ away from the poles');\n const Sigma = r * r + a * a * c * c;\n const Delta = r * r - 2 * M * r + a * a;\n if (!(Delta > 0)) throw new MetricValueError('geodesic start must be outside the horizon');\n const R = radialPotential(M, a, r, E, L, Q, mu2);\n const Theta = Q - c * c * (a * a * (mu2 - E * E) + (L * L) / (s * s));\n const scale = Math.max(1, E * E, L * L, Math.abs(Q));\n if (R < -1e-8 * scale && !allowOffShell) throw new MetricValueError('radial potential is negative at the start');\n if (Theta < -1e-8 * scale && !allowOffShell) throw new MetricValueError('polar potential is negative at the start');\n const g = kerrMetric(M, a)([0, r, theta, 0]);\n const det = g[0]![0]! * g[3]![3]! - g[0]![3]! * g[0]![3]!;\n const ut = (g[3]![3]! * -E - g[0]![3]! * L) / det;\n const uphi = (g[0]![0]! * L - g[0]![3]! * -E) / det;\n const ur = signR * Math.sqrt(Math.max(R, 0)) / Sigma;\n const uth = signTheta * Math.sqrt(Math.max(Theta, 0)) / Sigma;\n return [0, r, theta, 0, ut, ur, uth, uphi];\n}\n\n/**\n * The state `[t, r, θ, φ, u^t, u^r, u^θ, u^φ]` after `steps` RK4 steps of\n * the second-order geodesic equation over an affine extent `tauEnd`, by\n * `integrateGeodesic` of `geodesic-integrator.ts` with `gammaAt` packed into\n * its flat layout `G[16·μ + 4·ν + ρ] = Γ^μ_{νρ}`.\n */\nfunction integrateWithChristoffel(\n gammaAt: (r: number, theta: number) => Gamma,\n y0: readonly number[],\n tauEnd: number,\n steps: number,\n): number[] {\n const christoffelFn = (x: ReadonlyArray<number>, out?: Float64Array): Float64Array => {\n const flat = out ?? new Float64Array(64);\n const gamma = gammaAt(x[1]!, x[2]!);\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) {\n for (let rho = 0; rho < 4; rho++) flat[16 * mu + 4 * nu + rho] = gamma[mu]![nu]![rho]!;\n }\n }\n return flat;\n };\n const result = integrateGeodesicRK4({\n christoffelFn,\n x0: [y0[0]!, y0[1]!, y0[2]!, y0[3]!],\n v0: [y0[4]!, y0[5]!, y0[6]!, y0[7]!],\n tauStart: 0,\n tauEnd,\n steps,\n });\n return [...result.xFinal, ...result.vFinal];\n}\n\n/** `fraction` of an orbit's angular period, from the start's angular rate. */\nfunction orbitExtent(y0: readonly number[], fraction: number): number {\n const angular = Math.max(Math.abs(y0[7]!), Math.abs(y0[6]!), 1e-12);\n return ((2 * Math.PI) / angular) * fraction;\n}\n\nfunction sampleOf(metric: MetricFn, a: number, y0: readonly number[], y1: readonly number[], steps: number, mu2: number): KerrGeodesicSample {\n const start = conservedOf(metric, a, y0, mu2);\n const end = conservedOf(metric, a, y1, mu2);\n return {\n r0: y0[1]!,\n rEnd: y1[1]!,\n theta0: y0[2]!,\n thetaEnd: y1[2]!,\n phiAdvance: y1[3]!,\n steps,\n E0: start.E,\n EEnd: end.E,\n L0: start.L,\n LEnd: end.L,\n Q0: start.Q,\n QEnd: end.Q,\n norm0: start.norm,\n normEnd: end.norm,\n mu2,\n };\n}\n\n/**\n * Integrate a Kerr geodesic in Boyer–Lindquist coordinates, geometrized (G = c = 1).\n * Initial u^μ comes from the Carter first-order potentials (E, L, Q, μ²).\n * The step is the second-order geodesic equation with analytic Christoffel symbols,\n * so E, L, Q and g_μν u^μ u^ν are evolved quantities and can drift.\n * `mu2` is 1 for timelike and 0 for null. `allowOffShell` starts the second-order\n * equation even when a potential is negative; that is the control that r can move.\n * @internal\n */\nexport function kerrGeodesic(opts: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n readonly theta?: number;\n readonly E: number;\n readonly L: number;\n readonly Q: number;\n readonly mu2?: number;\n readonly signR?: number;\n readonly signTheta?: number;\n readonly fraction?: number;\n readonly steps?: number;\n readonly allowOffShell?: boolean;\n}): KerrGeodesicSample {\n const M = opts.M ?? 1;\n const chi = opts.aOverM ?? 0;\n if (!(M > 0) || !(Math.abs(chi) <= 1)) throw new MetricValueError('Kerr geodesic wants M > 0 and |a/M| ≤ 1');\n const a = chi * M;\n const r = (opts.rOverM ?? 10) * M;\n const theta = opts.theta ?? Math.PI / 2;\n const mu2 = opts.mu2 ?? 1;\n const steps = opts.steps ?? 80;\n const fraction = opts.fraction ?? 0.01;\n const metric = kerrMetric(M, a);\n const y0 = carterState(M, a, r, theta, opts.E, opts.L, opts.Q, mu2, opts.signR ?? 1, opts.signTheta ?? 1, opts.allowOffShell === true);\n const y1 = integrateWithChristoffel((rr, th) => kerrChristoffel(M, a, rr, th), y0, orbitExtent(y0, fraction), steps);\n return sampleOf(metric, a, y0, y1, steps, mu2);\n}\n\n/**\n * Schwarzschild geodesic in geometrized units, with the closed-form Christoffel\n * symbols (the polar terms included). The initial 4-velocity is the a = 0 Carter\n * state, so a Kerr run at a = 0 can be compared coordinate by coordinate.\n * @internal\n */\nexport function schwarzschildGeodesic(opts: {\n readonly M?: number;\n readonly rOverM?: number;\n readonly theta?: number;\n readonly E: number;\n readonly L: number;\n readonly Q: number;\n readonly signR?: number;\n readonly signTheta?: number;\n readonly fraction?: number;\n readonly steps?: number;\n}): KerrGeodesicSample {\n const M = opts.M ?? 1;\n if (!(M > 0)) throw new MetricValueError('Schwarzschild geodesic wants M > 0');\n const r = (opts.rOverM ?? 10) * M;\n const theta = opts.theta ?? Math.PI / 2;\n const steps = opts.steps ?? 80;\n const fraction = opts.fraction ?? 0.01;\n const metric = schwarzschildMetric(M, 1, 1);\n const y0 = carterState(M, 0, r, theta, opts.E, opts.L, opts.Q, 1, opts.signR ?? 1, opts.signTheta ?? 1, false);\n const y1 = integrateWithChristoffel((rr, th) => schwarzschildChristoffel(M, rr, th), y0, orbitExtent(y0, fraction), steps);\n return sampleOf(metric, 0, y0, y1, steps, 1);\n}\n\n/**\n * Integrate a Kerr equatorial circular orbit in geometrized units (G = c = 1).\n * Q is 0 and θ starts at π/2. E = −u_t and L = u_φ are evolved with the\n * second-order equation. `rOverM` must sit outside the photon orbit.\n * @internal\n */\nexport function kerrEquatorialCircular(opts?: {\n readonly M?: number;\n readonly aOverM?: number;\n readonly rOverM?: number;\n readonly prograde?: boolean;\n readonly fraction?: number;\n readonly steps?: number;\n}): KerrGeodesicSample {\n const M = opts?.M ?? 1;\n const chi = opts?.aOverM ?? 0;\n const rOverM = opts?.rOverM ?? 10;\n if (!(M > 0) || !(Math.abs(chi) <= 1)) throw new MetricValueError('|a/M| must be at most 1');\n const eq = equatorialCircular(M, chi * M, rOverM * M, opts?.prograde !== false);\n return kerrGeodesic({\n M,\n aOverM: chi,\n rOverM,\n theta: Math.PI / 2,\n E: eq.E,\n L: eq.L,\n Q: 0,\n mu2: 1,\n fraction: opts?.fraction ?? 0.01,\n steps: opts?.steps ?? 80,\n });\n}\n"]}
@@ -0,0 +1,24 @@
1
+ /** MathTS `mean` of a non-empty number array. @throws RangeError on an empty array. @internal */
2
+ export declare function meanOf(values: readonly number[]): number;
3
+ /**
4
+ * `ln C(n, k) = ln Γ(n+1) − ln Γ(k+1) − ln Γ(n−k+1)`, through MathTS `lgamma`.
5
+ * The one owner of the log binomial coefficient: the lattice random walk and
6
+ * the McNemar tail both read it (`TOOLS.md`, how `lgamma` compares to a sum
7
+ * of logs at large n).
8
+ * @internal
9
+ */
10
+ export declare function logChoose(n: number, k: number): number;
11
+ /** The mean of a set of ratios and their coefficient of variation (population σ over |mean|). @internal */
12
+ export interface RatioSpread {
13
+ readonly mean: number;
14
+ /** `σ/|mean|`; `Infinity` when the mean is 0 and the ratios are not all 0, `NaN` when they are all 0 or any ratio is not finite. */
15
+ readonly cv: number;
16
+ }
17
+ /**
18
+ * How far a set of ratios is from one constant: the mean and `σ/|mean|`. A
19
+ * monomial fit is accepted when the ratios of a formula to the candidate
20
+ * monomial agree to a relative spread below the caller's threshold.
21
+ * @internal
22
+ */
23
+ export declare function ratioSpread(ratios: readonly number[]): RatioSpread;
24
+ //# sourceMappingURL=statistics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statistics.d.ts","sourceRoot":"","sources":["../../src/numerical/statistics.ts"],"names":[],"mappings":"AAaA,iGAAiG;AACjG,wBAAgB,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAGxD;AAgBD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,2GAA2G;AAC3G,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oIAAoI;IACpI,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAGlE"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Scalar statistics read from MathTS, typed back as the numbers they are.
3
+ *
4
+ * The typed MathTS functions (`mean`, `std`, `lgamma`) are dispatch objects
5
+ * whose declared return is `unknown`; each reader here takes its number
6
+ * through `core/mathts-read`, so a caller never carries an `unknown` into
7
+ * arithmetic.
8
+ *
9
+ * @module numerical/statistics
10
+ */
11
+ import { lgamma, mean, std } from '@danielsimonjr/mathts-functions';
12
+ import { numberFrom } from '../core/mathts-read.js';
13
+ /** MathTS `mean` of a non-empty number array. @throws RangeError on an empty array. @internal */
14
+ export function meanOf(values) {
15
+ if (values.length === 0)
16
+ throw new RangeError('meanOf: no values');
17
+ return numberFrom('mean', mean([...values]));
18
+ }
19
+ /**
20
+ * MathTS `std` with the `uncorrected` (population, divide by n) normalization.
21
+ * @throws RangeError on an empty array.
22
+ */
23
+ function populationStd(values) {
24
+ if (values.length === 0)
25
+ throw new RangeError('populationStd: no values');
26
+ return numberFrom('std', std([...values], 'uncorrected'));
27
+ }
28
+ /** `log Γ(z)`, MathTS `lgamma`, read back as the number it is for a number. */
29
+ function logGamma(z) {
30
+ return numberFrom('lgamma', lgamma(z));
31
+ }
32
+ /**
33
+ * `ln C(n, k) = ln Γ(n+1) − ln Γ(k+1) − ln Γ(n−k+1)`, through MathTS `lgamma`.
34
+ * The one owner of the log binomial coefficient: the lattice random walk and
35
+ * the McNemar tail both read it (`TOOLS.md`, how `lgamma` compares to a sum
36
+ * of logs at large n).
37
+ * @internal
38
+ */
39
+ export function logChoose(n, k) {
40
+ return logGamma(n + 1) - logGamma(k + 1) - logGamma(n - k + 1);
41
+ }
42
+ /**
43
+ * How far a set of ratios is from one constant: the mean and `σ/|mean|`. A
44
+ * monomial fit is accepted when the ratios of a formula to the candidate
45
+ * monomial agree to a relative spread below the caller's threshold.
46
+ * @internal
47
+ */
48
+ export function ratioSpread(ratios) {
49
+ const m = meanOf(ratios);
50
+ return { mean: m, cv: populationStd(ratios) / Math.abs(m) };
51
+ }
52
+ //# sourceMappingURL=statistics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statistics.js","sourceRoot":"","sources":["../../src/numerical/statistics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,iGAAiG;AACjG,MAAM,UAAU,MAAM,CAAC,MAAyB;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,mBAAmB,CAAC,CAAC;IACnE,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,MAAyB;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;IAC1E,OAAO,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS;IAC5C,OAAO,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AASD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAyB;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC","sourcesContent":["/**\n * Scalar statistics read from MathTS, typed back as the numbers they are.\n *\n * The typed MathTS functions (`mean`, `std`, `lgamma`) are dispatch objects\n * whose declared return is `unknown`; each reader here takes its number\n * through `core/mathts-read`, so a caller never carries an `unknown` into\n * arithmetic.\n *\n * @module numerical/statistics\n */\nimport { lgamma, mean, std } from '@danielsimonjr/mathts-functions';\nimport { numberFrom } from '../core/mathts-read.js';\n\n/** MathTS `mean` of a non-empty number array. @throws RangeError on an empty array. @internal */\nexport function meanOf(values: readonly number[]): number {\n if (values.length === 0) throw new RangeError('meanOf: no values');\n return numberFrom('mean', mean([...values]));\n}\n\n/**\n * MathTS `std` with the `uncorrected` (population, divide by n) normalization.\n * @throws RangeError on an empty array.\n */\nfunction populationStd(values: readonly number[]): number {\n if (values.length === 0) throw new RangeError('populationStd: no values');\n return numberFrom('std', std([...values], 'uncorrected'));\n}\n\n/** `log Γ(z)`, MathTS `lgamma`, read back as the number it is for a number. */\nfunction logGamma(z: number): number {\n return numberFrom('lgamma', lgamma(z));\n}\n\n/**\n * `ln C(n, k) = ln Γ(n+1) − ln Γ(k+1) − ln Γ(n−k+1)`, through MathTS `lgamma`.\n * The one owner of the log binomial coefficient: the lattice random walk and\n * the McNemar tail both read it (`TOOLS.md`, how `lgamma` compares to a sum\n * of logs at large n).\n * @internal\n */\nexport function logChoose(n: number, k: number): number {\n return logGamma(n + 1) - logGamma(k + 1) - logGamma(n - k + 1);\n}\n\n/** The mean of a set of ratios and their coefficient of variation (population σ over |mean|). @internal */\nexport interface RatioSpread {\n readonly mean: number;\n /** `σ/|mean|`; `Infinity` when the mean is 0 and the ratios are not all 0, `NaN` when they are all 0 or any ratio is not finite. */\n readonly cv: number;\n}\n\n/**\n * How far a set of ratios is from one constant: the mean and `σ/|mean|`. A\n * monomial fit is accepted when the ratios of a formula to the candidate\n * monomial agree to a relative spread below the caller's threshold.\n * @internal\n */\nexport function ratioSpread(ratios: readonly number[]): RatioSpread {\n const m = meanOf(ratios);\n return { mean: m, cv: populationStd(ratios) / Math.abs(m) };\n}\n"]}
@@ -23,6 +23,27 @@ export { EngineCapabilityError } from './errors.js';
23
23
  export interface EngineTensor {
24
24
  readonly shape: ReadonlyArray<number>;
25
25
  }
26
+ /**
27
+ * An `EngineTensor` that `@danielsimonjr/mathts-autograd` has wrapped for
28
+ * tracing: a `DualTensor` (forward mode, carries `tangent`) or a
29
+ * `TapedTensor` (reverse mode, carries `tape`). Both implement the traced
30
+ * arithmetic over another wrapped tensor, which is what the engine dispatches
31
+ * to inside an AD call. The autograd package is loaded at that call, so its
32
+ * classes are not named here; this is the shape the package keeps.
33
+ * @internal
34
+ */
35
+ export interface TracedEngineTensor extends EngineTensor {
36
+ readonly tangent?: unknown;
37
+ readonly tape?: unknown;
38
+ add(other: EngineTensor): EngineTensor;
39
+ sub(other: EngineTensor): EngineTensor;
40
+ mul(other: EngineTensor): EngineTensor;
41
+ scale(k: number): EngineTensor;
42
+ }
43
+ /** The AD mode a wrapped tensor carries: `forward` (a `tangent`), `reverse` (a `tape`), or null for a plain tensor. @internal */
44
+ export declare function tracedMode(t: EngineTensor): 'forward' | 'reverse' | null;
45
+ /** Whether `t` is an autograd-wrapped tensor (it carries a `tangent` or a `tape`). @internal */
46
+ export declare function isTracedTensor(t: EngineTensor): t is TracedEngineTensor;
26
47
  /** One contracted index: the two (operand, axis) coordinates that the
27
48
  * Einstein summation pairs and sums over. Named by the public
28
49
  * {@link EinsumSpec}, so it is public too.
@@ -1 +1 @@
1
- {"version":3,"file":"tensor-engine.d.ts","sourceRoot":"","sources":["../../src/numerical/tensor-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;cAGc;AACd,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACvC;AAED;;;cAGc;AACd,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAChF;AAED;;;;cAIc;AACd,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;cACc;AACd,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CAC9C;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC;AAED;cACc;AACd,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;IAC1E,QAAQ,CAAC,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IAEvC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC;IACpE,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IACvD,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;IACvE,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;IAErE,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IACpD,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IACpD,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IACpD,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAEhD,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAClC,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAEjC;iEAC6D;IAC7D,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAEhC;;;;;;OAMG;IACH,WAAW,CAAC,CACV,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,YAAY,EACrC,CAAC,EAAE,YAAY,GACd,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE9B;;;;;;OAMG;IACH,WAAW,CAAC,CACV,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,YAAY,EACrC,CAAC,EAAE,YAAY,EACf,SAAS,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAGhE;AAED;;;;gBAIgB;AAChB,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAmBxD"}
1
+ {"version":3,"file":"tensor-engine.d.ts","sourceRoot":"","sources":["../../src/numerical/tensor-engine.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,18 @@
15
15
  * @public
16
16
  */
17
17
  export { EngineCapabilityError } from './errors.js';
18
+ /** The AD mode a wrapped tensor carries: `forward` (a `tangent`), `reverse` (a `tape`), or null for a plain tensor. @internal */
19
+ export function tracedMode(t) {
20
+ if ('tangent' in t)
21
+ return 'forward';
22
+ if ('tape' in t)
23
+ return 'reverse';
24
+ return null;
25
+ }
26
+ /** Whether `t` is an autograd-wrapped tensor (it carries a `tangent` or a `tape`). @internal */
27
+ export function isTracedTensor(t) {
28
+ return tracedMode(t) !== null;
29
+ }
18
30
  /**
19
31
  * Returns `true` iff the engine implements both `forwardGrad` and `reverseGrad`.
20
32
  * Use this before invoking AD methods so callers get a clear capability signal