universal-physics-tensor 9.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1109) hide show
  1. package/README.md +21 -17
  2. package/bin/upt.mjs +13 -1
  3. package/data/atlas/atlas.json +79 -68
  4. package/data/atlas/atlas.jsonld +1 -1
  5. package/data/atlas/diffusion.json +24 -23
  6. package/data/atlas/oscillators.json +21 -16
  7. package/data/atlas/waves.json +36 -31
  8. package/data/atlas/witness-results.json +11 -11
  9. package/data/bridge-catalog.json +1192 -1636
  10. package/data/bridge-catalog.schema.json +390 -135
  11. package/data/quantities.json +53 -19
  12. package/data/schemas/atlas-record.v0.json +184 -46
  13. package/data/units.json +33 -4
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +35 -18
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/association.js.map +1 -1
  18. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
  19. package/dist/atlas/benchmark/backend-shapes.js +5 -1
  20. package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
  21. package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
  22. package/dist/atlas/benchmark/baselines.js +8 -0
  23. package/dist/atlas/benchmark/baselines.js.map +1 -1
  24. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +12 -3
  25. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  26. package/dist/atlas/benchmark/hybrid-retrieval.js +30 -21
  27. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  28. package/dist/atlas/benchmark/leakage.js.map +1 -1
  29. package/dist/atlas/benchmark/loader.js +2 -2
  30. package/dist/atlas/benchmark/loader.js.map +1 -1
  31. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
  32. package/dist/atlas/benchmark/run-atlas.js +14 -2
  33. package/dist/atlas/benchmark/run-atlas.js.map +1 -1
  34. package/dist/atlas/benchmark/stats.d.ts +3 -3
  35. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  36. package/dist/atlas/benchmark/stats.js +16 -8
  37. package/dist/atlas/benchmark/stats.js.map +1 -1
  38. package/dist/atlas/benchmark/study.js.map +1 -1
  39. package/dist/atlas/benchmark/types.js.map +1 -1
  40. package/dist/atlas/bridge-record.d.ts +4 -4
  41. package/dist/atlas/bridge-record.d.ts.map +1 -1
  42. package/dist/atlas/bridge-record.js +6 -6
  43. package/dist/atlas/bridge-record.js.map +1 -1
  44. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  45. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  46. package/dist/atlas/catalog-formal-ref.js +52 -5
  47. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  48. package/dist/atlas/chain-pipeline.d.ts +0 -11
  49. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  50. package/dist/atlas/chain-pipeline.js +12 -24
  51. package/dist/atlas/chain-pipeline.js.map +1 -1
  52. package/dist/atlas/composition-table.js.map +1 -1
  53. package/dist/atlas/conventions.js.map +1 -1
  54. package/dist/atlas/coverage.d.ts +2 -2
  55. package/dist/atlas/coverage.js.map +1 -1
  56. package/dist/atlas/derivation.js.map +1 -1
  57. package/dist/atlas/derive-evidence.d.ts +6 -4
  58. package/dist/atlas/derive-evidence.d.ts.map +1 -1
  59. package/dist/atlas/derive-evidence.js +7 -2
  60. package/dist/atlas/derive-evidence.js.map +1 -1
  61. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  62. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  63. package/dist/atlas/diffusion/bridges-closure.js +8 -17
  64. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  65. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  66. package/dist/atlas/diffusion/bridges.js +27 -42
  67. package/dist/atlas/diffusion/bridges.js.map +1 -1
  68. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  69. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  70. package/dist/atlas/diffusion/dimensions.js +8 -16
  71. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  72. package/dist/atlas/diffusion/index.d.ts +1 -1
  73. package/dist/atlas/diffusion/index.d.ts.map +1 -1
  74. package/dist/atlas/diffusion/index.js.map +1 -1
  75. package/dist/atlas/diffusion/models.d.ts +3 -3
  76. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  77. package/dist/atlas/diffusion/models.js +5 -10
  78. package/dist/atlas/diffusion/models.js.map +1 -1
  79. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  80. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  81. package/dist/atlas/diffusion/numerics.js +38 -24
  82. package/dist/atlas/diffusion/numerics.js.map +1 -1
  83. package/dist/atlas/error-algebra.d.ts +6 -0
  84. package/dist/atlas/error-algebra.d.ts.map +1 -1
  85. package/dist/atlas/error-algebra.js +26 -0
  86. package/dist/atlas/error-algebra.js.map +1 -1
  87. package/dist/atlas/export.d.ts +18 -2
  88. package/dist/atlas/export.d.ts.map +1 -1
  89. package/dist/atlas/export.js +9 -3
  90. package/dist/atlas/export.js.map +1 -1
  91. package/dist/atlas/families.d.ts +19 -2
  92. package/dist/atlas/families.d.ts.map +1 -1
  93. package/dist/atlas/families.js +26 -3
  94. package/dist/atlas/families.js.map +1 -1
  95. package/dist/atlas/family.d.ts +27 -0
  96. package/dist/atlas/family.d.ts.map +1 -0
  97. package/dist/atlas/family.js +12 -0
  98. package/dist/atlas/family.js.map +1 -0
  99. package/dist/atlas/index.d.ts +3 -2
  100. package/dist/atlas/index.d.ts.map +1 -1
  101. package/dist/atlas/index.js +2 -1
  102. package/dist/atlas/index.js.map +1 -1
  103. package/dist/atlas/link-prediction.d.ts +107 -4
  104. package/dist/atlas/link-prediction.d.ts.map +1 -1
  105. package/dist/atlas/link-prediction.js +212 -66
  106. package/dist/atlas/link-prediction.js.map +1 -1
  107. package/dist/atlas/model.js.map +1 -1
  108. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  109. package/dist/atlas/oscillators/bridges-coarse.js +7 -12
  110. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  111. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  112. package/dist/atlas/oscillators/bridges-exact.js +6 -10
  113. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  114. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  115. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  116. package/dist/atlas/oscillators/bridges-limits.js +23 -36
  117. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  118. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  119. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  120. package/dist/atlas/oscillators/dimensions.js +9 -21
  121. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  122. package/dist/atlas/oscillators/index.d.ts +1 -16
  123. package/dist/atlas/oscillators/index.d.ts.map +1 -1
  124. package/dist/atlas/oscillators/index.js.map +1 -1
  125. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  126. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  127. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  128. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  129. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  130. package/dist/atlas/oscillators/models.js +2 -6
  131. package/dist/atlas/oscillators/models.js.map +1 -1
  132. package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
  133. package/dist/atlas/oscillators/norm-transport.js.map +1 -1
  134. package/dist/atlas/oscillators/norms.js.map +1 -1
  135. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  136. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  137. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  138. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  139. package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
  140. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  141. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  142. package/dist/atlas/oscillators/phase-translation.js +3 -4
  143. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  144. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  145. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  146. package/dist/atlas/oscillators/position-translation.js +123 -12
  147. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  148. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  149. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  150. package/dist/atlas/oscillators/rejections.js +0 -7
  151. package/dist/atlas/oscillators/rejections.js.map +1 -1
  152. package/dist/atlas/path-bound.js.map +1 -1
  153. package/dist/atlas/physjs-entries.generated.d.ts +25 -24
  154. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  155. package/dist/atlas/physjs-entries.generated.js +25 -24
  156. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  157. package/dist/atlas/physjs-ref.d.ts +107 -70
  158. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  159. package/dist/atlas/physjs-ref.js +184 -101
  160. package/dist/atlas/physjs-ref.js.map +1 -1
  161. package/dist/atlas/physjs-reviewed.d.ts +31 -0
  162. package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
  163. package/dist/atlas/physjs-reviewed.js +194 -0
  164. package/dist/atlas/physjs-reviewed.js.map +1 -0
  165. package/dist/atlas/poster/associations.js.map +1 -1
  166. package/dist/atlas/poster/derivations.js.map +1 -1
  167. package/dist/atlas/poster/statements.d.ts +0 -19
  168. package/dist/atlas/poster/statements.d.ts.map +1 -1
  169. package/dist/atlas/poster/statements.js +1 -1
  170. package/dist/atlas/poster/statements.js.map +1 -1
  171. package/dist/atlas/proof-target.d.ts +1 -1
  172. package/dist/atlas/proof-target.js +1 -1
  173. package/dist/atlas/proof-target.js.map +1 -1
  174. package/dist/atlas/public.d.ts +2 -1
  175. package/dist/atlas/public.d.ts.map +1 -1
  176. package/dist/atlas/public.js +2 -1
  177. package/dist/atlas/public.js.map +1 -1
  178. package/dist/atlas/regime.d.ts +1 -1
  179. package/dist/atlas/regime.d.ts.map +1 -1
  180. package/dist/atlas/regime.js +1 -1
  181. package/dist/atlas/regime.js.map +1 -1
  182. package/dist/atlas/serialize.d.ts +18 -12
  183. package/dist/atlas/serialize.d.ts.map +1 -1
  184. package/dist/atlas/serialize.js +28 -18
  185. package/dist/atlas/serialize.js.map +1 -1
  186. package/dist/atlas/statement.js.map +1 -1
  187. package/dist/atlas/text-overlap.d.ts +23 -0
  188. package/dist/atlas/text-overlap.d.ts.map +1 -0
  189. package/dist/atlas/text-overlap.js +41 -0
  190. package/dist/atlas/text-overlap.js.map +1 -0
  191. package/dist/atlas/translation-registry.js.map +1 -1
  192. package/dist/atlas/translation.js.map +1 -1
  193. package/dist/atlas/types.d.ts +9 -2
  194. package/dist/atlas/types.d.ts.map +1 -1
  195. package/dist/atlas/types.js +1 -1
  196. package/dist/atlas/types.js.map +1 -1
  197. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  198. package/dist/atlas/waves/bridges-closure.js +2 -9
  199. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  200. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  201. package/dist/atlas/waves/bridges.js +32 -52
  202. package/dist/atlas/waves/bridges.js.map +1 -1
  203. package/dist/atlas/waves/index.d.ts +1 -1
  204. package/dist/atlas/waves/index.d.ts.map +1 -1
  205. package/dist/atlas/waves/index.js.map +1 -1
  206. package/dist/atlas/waves/models.d.ts +5 -6
  207. package/dist/atlas/waves/models.d.ts.map +1 -1
  208. package/dist/atlas/waves/models.js +7 -13
  209. package/dist/atlas/waves/models.js.map +1 -1
  210. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  211. package/dist/atlas/waves/numerics.js +10 -3
  212. package/dist/atlas/waves/numerics.js.map +1 -1
  213. package/dist/atlas/witness-artifact.js.map +1 -1
  214. package/dist/atlas/witness-dominance.d.ts +4 -3
  215. package/dist/atlas/witness-dominance.d.ts.map +1 -1
  216. package/dist/atlas/witness-dominance.js +15 -5
  217. package/dist/atlas/witness-dominance.js.map +1 -1
  218. package/dist/atlas/witness-numeric.d.ts +38 -4
  219. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  220. package/dist/atlas/witness-numeric.js +80 -2
  221. package/dist/atlas/witness-numeric.js.map +1 -1
  222. package/dist/atlas/witness-result.d.ts +7 -1
  223. package/dist/atlas/witness-result.d.ts.map +1 -1
  224. package/dist/atlas/witness-result.js.map +1 -1
  225. package/dist/atlas/witness-specs.d.ts.map +1 -1
  226. package/dist/atlas/witness-specs.js +19 -0
  227. package/dist/atlas/witness-specs.js.map +1 -1
  228. package/dist/atlas/witness-symbolic.d.ts +75 -3
  229. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  230. package/dist/atlas/witness-symbolic.js +116 -10
  231. package/dist/atlas/witness-symbolic.js.map +1 -1
  232. package/dist/atlas/witnesses/quantum-support.js.map +1 -1
  233. package/dist/bridges/caller-table.d.ts +1 -1
  234. package/dist/bridges/caller-table.d.ts.map +1 -1
  235. package/dist/bridges/caller-table.js.map +1 -1
  236. package/dist/bridges/carrier-sign.d.ts.map +1 -1
  237. package/dist/bridges/carrier-sign.js +8 -3
  238. package/dist/bridges/carrier-sign.js.map +1 -1
  239. package/dist/bridges/catalog-adapter.d.ts +12 -3
  240. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  241. package/dist/bridges/catalog-adapter.js +17 -9
  242. package/dist/bridges/catalog-adapter.js.map +1 -1
  243. package/dist/bridges/catalog-load.d.ts +12 -2
  244. package/dist/bridges/catalog-load.d.ts.map +1 -1
  245. package/dist/bridges/catalog-load.js +181 -13
  246. package/dist/bridges/catalog-load.js.map +1 -1
  247. package/dist/bridges/catalog-types.d.ts +74 -26
  248. package/dist/bridges/catalog-types.d.ts.map +1 -1
  249. package/dist/bridges/catalog-types.js +11 -1
  250. package/dist/bridges/catalog-types.js.map +1 -1
  251. package/dist/bridges/coefficient-statement.js +1 -5
  252. package/dist/bridges/coefficient-statement.js.map +1 -1
  253. package/dist/bridges/confrontation-coverage.js.map +1 -1
  254. package/dist/bridges/confrontations.d.ts +1 -1
  255. package/dist/bridges/confrontations.d.ts.map +1 -1
  256. package/dist/bridges/confrontations.js +1 -1
  257. package/dist/bridges/confrontations.js.map +1 -1
  258. package/dist/bridges/evaluation-errors.d.ts +46 -3
  259. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  260. package/dist/bridges/evaluation-errors.js +40 -4
  261. package/dist/bridges/evaluation-errors.js.map +1 -1
  262. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  263. package/dist/bridges/evaluator-inputs.js +7 -5
  264. package/dist/bridges/evaluator-inputs.js.map +1 -1
  265. package/dist/bridges/evaluators.d.ts +17 -2
  266. package/dist/bridges/evaluators.d.ts.map +1 -1
  267. package/dist/bridges/evaluators.js +76 -28
  268. package/dist/bridges/evaluators.js.map +1 -1
  269. package/dist/bridges/expr-parse.d.ts +38 -4
  270. package/dist/bridges/expr-parse.d.ts.map +1 -1
  271. package/dist/bridges/expr-parse.js +101 -12
  272. package/dist/bridges/expr-parse.js.map +1 -1
  273. package/dist/bridges/holds.d.ts +40 -4
  274. package/dist/bridges/holds.d.ts.map +1 -1
  275. package/dist/bridges/holds.js +128 -19
  276. package/dist/bridges/holds.js.map +1 -1
  277. package/dist/bridges/index.d.ts +15 -14
  278. package/dist/bridges/index.d.ts.map +1 -1
  279. package/dist/bridges/index.js +14 -15
  280. package/dist/bridges/index.js.map +1 -1
  281. package/dist/bridges/input-contract.js.map +1 -1
  282. package/dist/bridges/membership.d.ts +5 -3
  283. package/dist/bridges/membership.d.ts.map +1 -1
  284. package/dist/bridges/membership.js +5 -6
  285. package/dist/bridges/membership.js.map +1 -1
  286. package/dist/bridges/notices.d.ts.map +1 -1
  287. package/dist/bridges/notices.js +5 -5
  288. package/dist/bridges/notices.js.map +1 -1
  289. package/dist/bridges/observations/types.js.map +1 -1
  290. package/dist/bridges/rejected.d.ts +11 -17
  291. package/dist/bridges/rejected.d.ts.map +1 -1
  292. package/dist/bridges/rejected.js +13 -68
  293. package/dist/bridges/rejected.js.map +1 -1
  294. package/dist/bridges/relation-eval.d.ts +6 -7
  295. package/dist/bridges/relation-eval.d.ts.map +1 -1
  296. package/dist/bridges/relation-eval.js +20 -50
  297. package/dist/bridges/relation-eval.js.map +1 -1
  298. package/dist/bridges/rhs-registry.js.map +1 -1
  299. package/dist/bridges/sensitivity.d.ts +11 -3
  300. package/dist/bridges/sensitivity.d.ts.map +1 -1
  301. package/dist/bridges/sensitivity.js +27 -13
  302. package/dist/bridges/sensitivity.js.map +1 -1
  303. package/dist/bridges/tensor-index.js.map +1 -1
  304. package/dist/bridges/types.d.ts +1 -7
  305. package/dist/bridges/types.d.ts.map +1 -1
  306. package/dist/bridges/types.js +1 -4
  307. package/dist/bridges/types.js.map +1 -1
  308. package/dist/bridges/validity.d.ts +33 -0
  309. package/dist/bridges/validity.d.ts.map +1 -0
  310. package/dist/bridges/validity.js +67 -0
  311. package/dist/bridges/validity.js.map +1 -0
  312. package/dist/canonical/canonical-equation.js.map +1 -1
  313. package/dist/canonical/dimensional-fields.js.map +1 -1
  314. package/dist/canonical/entries/_l1-build.js.map +1 -1
  315. package/dist/canonical/entries/atomic.js +1 -3
  316. package/dist/canonical/entries/atomic.js.map +1 -1
  317. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  318. package/dist/canonical/entries/condensed-matter.js +8 -9
  319. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  320. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  321. package/dist/canonical/entries/dimensional-classics.js +5 -6
  322. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  323. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  324. package/dist/canonical/entries/electromagnetism.js +6 -12
  325. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  326. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  327. package/dist/canonical/entries/fluids-waves.js +3 -7
  328. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  329. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  330. package/dist/canonical/entries/mechanics.js +4 -6
  331. package/dist/canonical/entries/mechanics.js.map +1 -1
  332. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  333. package/dist/canonical/entries/nonmonomial.js +38 -39
  334. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  335. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  336. package/dist/canonical/entries/relativity.js +6 -6
  337. package/dist/canonical/entries/relativity.js.map +1 -1
  338. package/dist/canonical/entries/statistical-mechanics.js +5 -5
  339. package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
  340. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  341. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  342. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  343. package/dist/canonical/fixed-points.d.ts +94 -0
  344. package/dist/canonical/fixed-points.d.ts.map +1 -0
  345. package/dist/canonical/fixed-points.js +81 -0
  346. package/dist/canonical/fixed-points.js.map +1 -0
  347. package/dist/canonical/linkage.d.ts +29 -4
  348. package/dist/canonical/linkage.d.ts.map +1 -1
  349. package/dist/canonical/linkage.js +47 -64
  350. package/dist/canonical/linkage.js.map +1 -1
  351. package/dist/canonical/normal-form.d.ts +0 -8
  352. package/dist/canonical/normal-form.d.ts.map +1 -1
  353. package/dist/canonical/normal-form.js +22 -23
  354. package/dist/canonical/normal-form.js.map +1 -1
  355. package/dist/canonical/registry.js.map +1 -1
  356. package/dist/canonical/residual.js.map +1 -1
  357. package/dist/canonical/seed-l-layer.d.ts +7 -1
  358. package/dist/canonical/seed-l-layer.d.ts.map +1 -1
  359. package/dist/canonical/seed-l-layer.js +7 -1
  360. package/dist/canonical/seed-l-layer.js.map +1 -1
  361. package/dist/canonical/structural.d.ts +42 -21
  362. package/dist/canonical/structural.d.ts.map +1 -1
  363. package/dist/canonical/structural.js +64 -23
  364. package/dist/canonical/structural.js.map +1 -1
  365. package/dist/cases/brownian-sphere.d.ts +3 -3
  366. package/dist/cases/brownian-sphere.d.ts.map +1 -1
  367. package/dist/cases/brownian-sphere.js +10 -9
  368. package/dist/cases/brownian-sphere.js.map +1 -1
  369. package/dist/cases/damped-resonator.d.ts.map +1 -1
  370. package/dist/cases/damped-resonator.js +8 -11
  371. package/dist/cases/damped-resonator.js.map +1 -1
  372. package/dist/cases/index.js.map +1 -1
  373. package/dist/cases/kepler-rv.d.ts +1 -1
  374. package/dist/cases/kepler-rv.d.ts.map +1 -1
  375. package/dist/cases/kepler-rv.js +3 -2
  376. package/dist/cases/kepler-rv.js.map +1 -1
  377. package/dist/cases/lumped-cooling.d.ts +8 -3
  378. package/dist/cases/lumped-cooling.d.ts.map +1 -1
  379. package/dist/cases/lumped-cooling.js +22 -24
  380. package/dist/cases/lumped-cooling.js.map +1 -1
  381. package/dist/cases/quadrature.d.ts +7 -9
  382. package/dist/cases/quadrature.d.ts.map +1 -1
  383. package/dist/cases/quadrature.js +28 -32
  384. package/dist/cases/quadrature.js.map +1 -1
  385. package/dist/cases/resistor-noise.js +7 -7
  386. package/dist/cases/resistor-noise.js.map +1 -1
  387. package/dist/cases/skin-depth.d.ts +0 -4
  388. package/dist/cases/skin-depth.d.ts.map +1 -1
  389. package/dist/cases/skin-depth.js +3 -7
  390. package/dist/cases/skin-depth.js.map +1 -1
  391. package/dist/cases/types.js.map +1 -1
  392. package/dist/cli/args.d.ts +30 -3
  393. package/dist/cli/args.d.ts.map +1 -1
  394. package/dist/cli/args.js +47 -9
  395. package/dist/cli/args.js.map +1 -1
  396. package/dist/cli/bindings.d.ts +13 -0
  397. package/dist/cli/bindings.d.ts.map +1 -0
  398. package/dist/cli/bindings.js +33 -0
  399. package/dist/cli/bindings.js.map +1 -0
  400. package/dist/cli/closed-form-range.js.map +1 -1
  401. package/dist/cli/command.d.ts +8 -1
  402. package/dist/cli/command.d.ts.map +1 -1
  403. package/dist/cli/command.js.map +1 -1
  404. package/dist/cli/commands/_atlas-map.d.ts +2 -11
  405. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  406. package/dist/cli/commands/_atlas-map.js +50 -35
  407. package/dist/cli/commands/_atlas-map.js.map +1 -1
  408. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  409. package/dist/cli/commands/_atlas-route.js +6 -2
  410. package/dist/cli/commands/_atlas-route.js.map +1 -1
  411. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  412. package/dist/cli/commands/_discovery-opts.js +48 -14
  413. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  414. package/dist/cli/commands/atlas.d.ts.map +1 -1
  415. package/dist/cli/commands/atlas.js +9 -8
  416. package/dist/cli/commands/atlas.js.map +1 -1
  417. package/dist/cli/commands/audit.d.ts.map +1 -1
  418. package/dist/cli/commands/audit.js +20 -20
  419. package/dist/cli/commands/audit.js.map +1 -1
  420. package/dist/cli/commands/axes.d.ts.map +1 -1
  421. package/dist/cli/commands/axes.js +20 -1
  422. package/dist/cli/commands/axes.js.map +1 -1
  423. package/dist/cli/commands/candidates.d.ts.map +1 -1
  424. package/dist/cli/commands/candidates.js +16 -8
  425. package/dist/cli/commands/candidates.js.map +1 -1
  426. package/dist/cli/commands/canonical.js.map +1 -1
  427. package/dist/cli/commands/chain.js +1 -1
  428. package/dist/cli/commands/chain.js.map +1 -1
  429. package/dist/cli/commands/confront.d.ts.map +1 -1
  430. package/dist/cli/commands/confront.js +22 -20
  431. package/dist/cli/commands/confront.js.map +1 -1
  432. package/dist/cli/commands/connectors.js.map +1 -1
  433. package/dist/cli/commands/coverage.js.map +1 -1
  434. package/dist/cli/commands/derive.d.ts.map +1 -1
  435. package/dist/cli/commands/derive.js +60 -35
  436. package/dist/cli/commands/derive.js.map +1 -1
  437. package/dist/cli/commands/discover.d.ts.map +1 -1
  438. package/dist/cli/commands/discover.js +20 -10
  439. package/dist/cli/commands/discover.js.map +1 -1
  440. package/dist/cli/commands/eval.d.ts.map +1 -1
  441. package/dist/cli/commands/eval.js +14 -10
  442. package/dist/cli/commands/eval.js.map +1 -1
  443. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  444. package/dist/cli/commands/evaluate.js +108 -58
  445. package/dist/cli/commands/evaluate.js.map +1 -1
  446. package/dist/cli/commands/explain.d.ts.map +1 -1
  447. package/dist/cli/commands/explain.js +16 -8
  448. package/dist/cli/commands/explain.js.map +1 -1
  449. package/dist/cli/commands/frontier.js.map +1 -1
  450. package/dist/cli/commands/ground.d.ts.map +1 -1
  451. package/dist/cli/commands/ground.js +41 -10
  452. package/dist/cli/commands/ground.js.map +1 -1
  453. package/dist/cli/commands/index.js.map +1 -1
  454. package/dist/cli/commands/map.d.ts.map +1 -1
  455. package/dist/cli/commands/map.js +155 -92
  456. package/dist/cli/commands/map.js.map +1 -1
  457. package/dist/cli/commands/metric.d.ts.map +1 -1
  458. package/dist/cli/commands/metric.js +58 -20
  459. package/dist/cli/commands/metric.js.map +1 -1
  460. package/dist/cli/commands/path.d.ts +10 -0
  461. package/dist/cli/commands/path.d.ts.map +1 -1
  462. package/dist/cli/commands/path.js +29 -7
  463. package/dist/cli/commands/path.js.map +1 -1
  464. package/dist/cli/commands/predict.js.map +1 -1
  465. package/dist/cli/commands/priority.js.map +1 -1
  466. package/dist/cli/commands/probe.d.ts.map +1 -1
  467. package/dist/cli/commands/probe.js +105 -38
  468. package/dist/cli/commands/probe.js.map +1 -1
  469. package/dist/cli/commands/recover.js +1 -1
  470. package/dist/cli/commands/recover.js.map +1 -1
  471. package/dist/cli/commands/regime.d.ts +5 -4
  472. package/dist/cli/commands/regime.d.ts.map +1 -1
  473. package/dist/cli/commands/regime.js +25 -26
  474. package/dist/cli/commands/regime.js.map +1 -1
  475. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  476. package/dist/cli/commands/retrieve.js +23 -14
  477. package/dist/cli/commands/retrieve.js.map +1 -1
  478. package/dist/cli/commands/search.d.ts.map +1 -1
  479. package/dist/cli/commands/search.js +9 -4
  480. package/dist/cli/commands/search.js.map +1 -1
  481. package/dist/cli/commands/symbolic.js +31 -36
  482. package/dist/cli/commands/symbolic.js.map +1 -1
  483. package/dist/cli/commands/testplan.d.ts.map +1 -1
  484. package/dist/cli/commands/testplan.js +5 -3
  485. package/dist/cli/commands/testplan.js.map +1 -1
  486. package/dist/cli/conventions.js.map +1 -1
  487. package/dist/cli/determination.js.map +1 -1
  488. package/dist/cli/errors.js.map +1 -1
  489. package/dist/cli/euler-guard.js.map +1 -1
  490. package/dist/cli/eval-numbers.js.map +1 -1
  491. package/dist/cli/expr-print.d.ts +28 -3
  492. package/dist/cli/expr-print.d.ts.map +1 -1
  493. package/dist/cli/expr-print.js +42 -22
  494. package/dist/cli/expr-print.js.map +1 -1
  495. package/dist/cli/flag-help.js.map +1 -1
  496. package/dist/cli/graphs.js.map +1 -1
  497. package/dist/cli/library-defaults.d.ts +19 -0
  498. package/dist/cli/library-defaults.d.ts.map +1 -0
  499. package/dist/cli/library-defaults.js +22 -0
  500. package/dist/cli/library-defaults.js.map +1 -0
  501. package/dist/cli/main.d.ts +7 -0
  502. package/dist/cli/main.d.ts.map +1 -1
  503. package/dist/cli/main.js +25 -6
  504. package/dist/cli/main.js.map +1 -1
  505. package/dist/cli/map-evidence.js.map +1 -1
  506. package/dist/cli/numeric-flag.d.ts +12 -0
  507. package/dist/cli/numeric-flag.d.ts.map +1 -0
  508. package/dist/cli/numeric-flag.js +44 -0
  509. package/dist/cli/numeric-flag.js.map +1 -0
  510. package/dist/cli/output.d.ts +23 -6
  511. package/dist/cli/output.d.ts.map +1 -1
  512. package/dist/cli/output.js +15 -0
  513. package/dist/cli/output.js.map +1 -1
  514. package/dist/cli/published-url.js.map +1 -1
  515. package/dist/cli/record-reach.d.ts +6 -0
  516. package/dist/cli/record-reach.d.ts.map +1 -1
  517. package/dist/cli/record-reach.js +17 -11
  518. package/dist/cli/record-reach.js.map +1 -1
  519. package/dist/cli/record-tables.d.ts.map +1 -1
  520. package/dist/cli/record-tables.js +7 -6
  521. package/dist/cli/record-tables.js.map +1 -1
  522. package/dist/cli/record.d.ts +1 -5
  523. package/dist/cli/record.d.ts.map +1 -1
  524. package/dist/cli/record.js +40 -20
  525. package/dist/cli/record.js.map +1 -1
  526. package/dist/cli/search-index.d.ts +5 -0
  527. package/dist/cli/search-index.d.ts.map +1 -1
  528. package/dist/cli/search-index.js +19 -7
  529. package/dist/cli/search-index.js.map +1 -1
  530. package/dist/cli/statuses.d.ts +0 -2
  531. package/dist/cli/statuses.d.ts.map +1 -1
  532. package/dist/cli/statuses.js +0 -7
  533. package/dist/cli/statuses.js.map +1 -1
  534. package/dist/cli/stored-results.d.ts +7 -0
  535. package/dist/cli/stored-results.d.ts.map +1 -0
  536. package/dist/cli/stored-results.js +23 -0
  537. package/dist/cli/stored-results.js.map +1 -0
  538. package/dist/cli/top-level-help.js.map +1 -1
  539. package/dist/cli/version.d.ts.map +1 -1
  540. package/dist/cli/version.js +7 -5
  541. package/dist/cli/version.js.map +1 -1
  542. package/dist/cli-api.d.ts +49 -14
  543. package/dist/cli-api.d.ts.map +1 -1
  544. package/dist/cli-api.js +42 -17
  545. package/dist/cli-api.js.map +1 -1
  546. package/dist/composition/adjudication.js.map +1 -1
  547. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  548. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  549. package/dist/composition/algebraic-equivalence.js +115 -0
  550. package/dist/composition/algebraic-equivalence.js.map +1 -0
  551. package/dist/composition/aliases.js.map +1 -1
  552. package/dist/composition/audit-coverage.d.ts +2 -0
  553. package/dist/composition/audit-coverage.d.ts.map +1 -1
  554. package/dist/composition/audit-coverage.js.map +1 -1
  555. package/dist/composition/axes.d.ts +6 -0
  556. package/dist/composition/axes.d.ts.map +1 -1
  557. package/dist/composition/axes.js +18 -6
  558. package/dist/composition/axes.js.map +1 -1
  559. package/dist/composition/axis-audit.d.ts +47 -20
  560. package/dist/composition/axis-audit.d.ts.map +1 -1
  561. package/dist/composition/axis-audit.js +82 -9
  562. package/dist/composition/axis-audit.js.map +1 -1
  563. package/dist/composition/bridge-analysis.d.ts +14 -15
  564. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  565. package/dist/composition/bridge-analysis.js +148 -91
  566. package/dist/composition/bridge-analysis.js.map +1 -1
  567. package/dist/composition/bridge-prediction.d.ts +5 -1
  568. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  569. package/dist/composition/bridge-prediction.js +12 -16
  570. package/dist/composition/bridge-prediction.js.map +1 -1
  571. package/dist/composition/buckingham-filter.js.map +1 -1
  572. package/dist/composition/canonical-compare.d.ts +40 -0
  573. package/dist/composition/canonical-compare.d.ts.map +1 -1
  574. package/dist/composition/canonical-compare.js +134 -26
  575. package/dist/composition/canonical-compare.js.map +1 -1
  576. package/dist/composition/canonical-graph.d.ts +9 -10
  577. package/dist/composition/canonical-graph.d.ts.map +1 -1
  578. package/dist/composition/canonical-graph.js +33 -102
  579. package/dist/composition/canonical-graph.js.map +1 -1
  580. package/dist/composition/canonical-json.js +2 -2
  581. package/dist/composition/canonical-json.js.map +1 -1
  582. package/dist/composition/canonical-prefactors.js.map +1 -1
  583. package/dist/composition/catalog-graph.d.ts.map +1 -1
  584. package/dist/composition/catalog-graph.js +8 -25
  585. package/dist/composition/catalog-graph.js.map +1 -1
  586. package/dist/composition/chain-candidate.d.ts +10 -0
  587. package/dist/composition/chain-candidate.d.ts.map +1 -1
  588. package/dist/composition/chain-candidate.js +11 -2
  589. package/dist/composition/chain-candidate.js.map +1 -1
  590. package/dist/composition/chain-match.d.ts +6 -3
  591. package/dist/composition/chain-match.d.ts.map +1 -1
  592. package/dist/composition/chain-match.js +4 -1
  593. package/dist/composition/chain-match.js.map +1 -1
  594. package/dist/composition/chain-regime.js.map +1 -1
  595. package/dist/composition/chain-result.d.ts.map +1 -1
  596. package/dist/composition/chain-result.js +2 -14
  597. package/dist/composition/chain-result.js.map +1 -1
  598. package/dist/composition/compose-surface.js.map +1 -1
  599. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  600. package/dist/composition/compose-symbolic.js +3 -2
  601. package/dist/composition/compose-symbolic.js.map +1 -1
  602. package/dist/composition/compose.d.ts.map +1 -1
  603. package/dist/composition/compose.js +166 -41
  604. package/dist/composition/compose.js.map +1 -1
  605. package/dist/composition/composition-recovery.d.ts.map +1 -1
  606. package/dist/composition/composition-recovery.js +4 -7
  607. package/dist/composition/composition-recovery.js.map +1 -1
  608. package/dist/composition/consequence.d.ts.map +1 -1
  609. package/dist/composition/consequence.js +15 -6
  610. package/dist/composition/consequence.js.map +1 -1
  611. package/dist/composition/consistency.js.map +1 -1
  612. package/dist/composition/descriptor.d.ts +1 -1
  613. package/dist/composition/descriptor.d.ts.map +1 -1
  614. package/dist/composition/descriptor.js.map +1 -1
  615. package/dist/composition/dimension-adjacency.js.map +1 -1
  616. package/dist/composition/discovery.d.ts +77 -11
  617. package/dist/composition/discovery.d.ts.map +1 -1
  618. package/dist/composition/discovery.js +194 -80
  619. package/dist/composition/discovery.js.map +1 -1
  620. package/dist/composition/edge.d.ts +40 -10
  621. package/dist/composition/edge.d.ts.map +1 -1
  622. package/dist/composition/edge.js +47 -12
  623. package/dist/composition/edge.js.map +1 -1
  624. package/dist/composition/enumerate.d.ts +2 -2
  625. package/dist/composition/enumerate.d.ts.map +1 -1
  626. package/dist/composition/enumerate.js +18 -3
  627. package/dist/composition/enumerate.js.map +1 -1
  628. package/dist/composition/evaluate-relation.d.ts +35 -11
  629. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  630. package/dist/composition/evaluate-relation.js +60 -39
  631. package/dist/composition/evaluate-relation.js.map +1 -1
  632. package/dist/composition/explain.d.ts +5 -9
  633. package/dist/composition/explain.d.ts.map +1 -1
  634. package/dist/composition/explain.js +38 -18
  635. package/dist/composition/explain.js.map +1 -1
  636. package/dist/composition/expr-eval.d.ts.map +1 -1
  637. package/dist/composition/expr-eval.js +2 -11
  638. package/dist/composition/expr-eval.js.map +1 -1
  639. package/dist/composition/expr-simplify.d.ts +16 -0
  640. package/dist/composition/expr-simplify.d.ts.map +1 -1
  641. package/dist/composition/expr-simplify.js +24 -59
  642. package/dist/composition/expr-simplify.js.map +1 -1
  643. package/dist/composition/expr-subst.js.map +1 -1
  644. package/dist/composition/formula-shape.d.ts +28 -0
  645. package/dist/composition/formula-shape.d.ts.map +1 -1
  646. package/dist/composition/formula-shape.js +96 -2
  647. package/dist/composition/formula-shape.js.map +1 -1
  648. package/dist/composition/frontier-account.d.ts +3 -2
  649. package/dist/composition/frontier-account.d.ts.map +1 -1
  650. package/dist/composition/frontier-account.js +7 -3
  651. package/dist/composition/frontier-account.js.map +1 -1
  652. package/dist/composition/graph-structure.d.ts +98 -0
  653. package/dist/composition/graph-structure.d.ts.map +1 -0
  654. package/dist/composition/graph-structure.js +167 -0
  655. package/dist/composition/graph-structure.js.map +1 -0
  656. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  657. package/dist/composition/graph-viz-svg.js +1 -1
  658. package/dist/composition/graph-viz-svg.js.map +1 -1
  659. package/dist/composition/graph-viz.d.ts.map +1 -1
  660. package/dist/composition/graph-viz.js +8 -37
  661. package/dist/composition/graph-viz.js.map +1 -1
  662. package/dist/composition/grounding.js.map +1 -1
  663. package/dist/composition/identifiability.d.ts +91 -4
  664. package/dist/composition/identifiability.d.ts.map +1 -1
  665. package/dist/composition/identifiability.js +363 -6
  666. package/dist/composition/identifiability.js.map +1 -1
  667. package/dist/composition/index.d.ts +14 -8
  668. package/dist/composition/index.d.ts.map +1 -1
  669. package/dist/composition/index.js +7 -5
  670. package/dist/composition/index.js.map +1 -1
  671. package/dist/composition/mathts-quiet.d.ts +29 -0
  672. package/dist/composition/mathts-quiet.d.ts.map +1 -0
  673. package/dist/composition/mathts-quiet.js +57 -0
  674. package/dist/composition/mathts-quiet.js.map +1 -0
  675. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  676. package/dist/composition/mathts-scalar-symbols.js +20 -35
  677. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  678. package/dist/composition/not-composable-seeds.d.ts +3 -1
  679. package/dist/composition/not-composable-seeds.d.ts.map +1 -1
  680. package/dist/composition/not-composable-seeds.js +2 -0
  681. package/dist/composition/not-composable-seeds.js.map +1 -1
  682. package/dist/composition/probe/backend-protocol.js.map +1 -1
  683. package/dist/composition/probe/candidate-store.js.map +1 -1
  684. package/dist/composition/probe/corpus.d.ts +4 -2
  685. package/dist/composition/probe/corpus.d.ts.map +1 -1
  686. package/dist/composition/probe/corpus.js +20 -9
  687. package/dist/composition/probe/corpus.js.map +1 -1
  688. package/dist/composition/probe/dataset.d.ts +17 -0
  689. package/dist/composition/probe/dataset.d.ts.map +1 -1
  690. package/dist/composition/probe/dataset.js +95 -50
  691. package/dist/composition/probe/dataset.js.map +1 -1
  692. package/dist/composition/probe/experiment-design.d.ts +5 -1
  693. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  694. package/dist/composition/probe/experiment-design.js +44 -24
  695. package/dist/composition/probe/experiment-design.js.map +1 -1
  696. package/dist/composition/probe/expression-gaps.js.map +1 -1
  697. package/dist/composition/probe/falsify.d.ts +14 -3
  698. package/dist/composition/probe/falsify.d.ts.map +1 -1
  699. package/dist/composition/probe/falsify.js +16 -27
  700. package/dist/composition/probe/falsify.js.map +1 -1
  701. package/dist/composition/probe/fingerprint.js.map +1 -1
  702. package/dist/composition/probe/fit.d.ts +7 -1
  703. package/dist/composition/probe/fit.d.ts.map +1 -1
  704. package/dist/composition/probe/fit.js +48 -23
  705. package/dist/composition/probe/fit.js.map +1 -1
  706. package/dist/composition/probe/frontier.d.ts.map +1 -1
  707. package/dist/composition/probe/frontier.js +33 -15
  708. package/dist/composition/probe/frontier.js.map +1 -1
  709. package/dist/composition/probe/generator.d.ts +27 -1
  710. package/dist/composition/probe/generator.d.ts.map +1 -1
  711. package/dist/composition/probe/generator.js +53 -30
  712. package/dist/composition/probe/generator.js.map +1 -1
  713. package/dist/composition/probe/index.d.ts +18 -2
  714. package/dist/composition/probe/index.d.ts.map +1 -1
  715. package/dist/composition/probe/index.js +10 -2
  716. package/dist/composition/probe/index.js.map +1 -1
  717. package/dist/composition/probe/limits.d.ts +24 -1
  718. package/dist/composition/probe/limits.d.ts.map +1 -1
  719. package/dist/composition/probe/limits.js +53 -11
  720. package/dist/composition/probe/limits.js.map +1 -1
  721. package/dist/composition/probe/metadata.js.map +1 -1
  722. package/dist/composition/probe/pipeline.d.ts +5 -0
  723. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  724. package/dist/composition/probe/pipeline.js +22 -9
  725. package/dist/composition/probe/pipeline.js.map +1 -1
  726. package/dist/composition/probe/power-law.d.ts +121 -0
  727. package/dist/composition/probe/power-law.d.ts.map +1 -0
  728. package/dist/composition/probe/power-law.js +255 -0
  729. package/dist/composition/probe/power-law.js.map +1 -0
  730. package/dist/composition/probe/problem.d.ts +12 -1
  731. package/dist/composition/probe/problem.d.ts.map +1 -1
  732. package/dist/composition/probe/problem.js +242 -48
  733. package/dist/composition/probe/problem.js.map +1 -1
  734. package/dist/composition/probe/report.js +1 -1
  735. package/dist/composition/probe/report.js.map +1 -1
  736. package/dist/composition/probe/residual.d.ts +6 -1
  737. package/dist/composition/probe/residual.d.ts.map +1 -1
  738. package/dist/composition/probe/residual.js +9 -7
  739. package/dist/composition/probe/residual.js.map +1 -1
  740. package/dist/composition/probe/run-manifest.js +2 -2
  741. package/dist/composition/probe/run-manifest.js.map +1 -1
  742. package/dist/composition/probe/scoring.d.ts +2 -1
  743. package/dist/composition/probe/scoring.d.ts.map +1 -1
  744. package/dist/composition/probe/scoring.js +21 -7
  745. package/dist/composition/probe/scoring.js.map +1 -1
  746. package/dist/composition/probe/search-budget.js.map +1 -1
  747. package/dist/composition/probe/serialize.js.map +1 -1
  748. package/dist/composition/probe/structure.d.ts +82 -17
  749. package/dist/composition/probe/structure.d.ts.map +1 -1
  750. package/dist/composition/probe/structure.js +129 -55
  751. package/dist/composition/probe/structure.js.map +1 -1
  752. package/dist/composition/probe/study.d.ts +35 -12
  753. package/dist/composition/probe/study.d.ts.map +1 -1
  754. package/dist/composition/probe/study.js +241 -184
  755. package/dist/composition/probe/study.js.map +1 -1
  756. package/dist/composition/probe/t-tail.d.ts +17 -0
  757. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  758. package/dist/composition/probe/t-tail.js +32 -0
  759. package/dist/composition/probe/t-tail.js.map +1 -0
  760. package/dist/composition/probe/types.d.ts +6 -1
  761. package/dist/composition/probe/types.d.ts.map +1 -1
  762. package/dist/composition/probe/types.js +2 -0
  763. package/dist/composition/probe/types.js.map +1 -1
  764. package/dist/composition/proposed-bridges.d.ts +51 -13
  765. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  766. package/dist/composition/proposed-bridges.js +110 -58
  767. package/dist/composition/proposed-bridges.js.map +1 -1
  768. package/dist/composition/quantities.d.ts +0 -4
  769. package/dist/composition/quantities.d.ts.map +1 -1
  770. package/dist/composition/quantities.js +5 -5
  771. package/dist/composition/quantities.js.map +1 -1
  772. package/dist/composition/quantity-clusters.d.ts +48 -0
  773. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  774. package/dist/composition/quantity-clusters.js +98 -0
  775. package/dist/composition/quantity-clusters.js.map +1 -0
  776. package/dist/composition/quantity.d.ts +18 -2
  777. package/dist/composition/quantity.d.ts.map +1 -1
  778. package/dist/composition/quantity.js +35 -6
  779. package/dist/composition/quantity.js.map +1 -1
  780. package/dist/composition/rational-exponent.d.ts +40 -0
  781. package/dist/composition/rational-exponent.d.ts.map +1 -0
  782. package/dist/composition/rational-exponent.js +65 -0
  783. package/dist/composition/rational-exponent.js.map +1 -0
  784. package/dist/composition/representative-values.d.ts +22 -0
  785. package/dist/composition/representative-values.d.ts.map +1 -1
  786. package/dist/composition/representative-values.js +23 -0
  787. package/dist/composition/representative-values.js.map +1 -1
  788. package/dist/composition/retrodiction.d.ts +16 -6
  789. package/dist/composition/retrodiction.d.ts.map +1 -1
  790. package/dist/composition/retrodiction.js +36 -10
  791. package/dist/composition/retrodiction.js.map +1 -1
  792. package/dist/composition/uncertainty.js.map +1 -1
  793. package/dist/composition/user-equation.d.ts.map +1 -1
  794. package/dist/composition/user-equation.js +2 -2
  795. package/dist/composition/user-equation.js.map +1 -1
  796. package/dist/core/assignment.d.ts +19 -0
  797. package/dist/core/assignment.d.ts.map +1 -0
  798. package/dist/core/assignment.js +19 -0
  799. package/dist/core/assignment.js.map +1 -0
  800. package/dist/core/axes-registry.d.ts +8 -5
  801. package/dist/core/axes-registry.d.ts.map +1 -1
  802. package/dist/core/axes-registry.js.map +1 -1
  803. package/dist/core/cell.js.map +1 -1
  804. package/dist/core/compare.d.ts +32 -0
  805. package/dist/core/compare.d.ts.map +1 -0
  806. package/dist/core/compare.js +46 -0
  807. package/dist/core/compare.js.map +1 -0
  808. package/dist/core/constants.d.ts +35 -35
  809. package/dist/core/constants.d.ts.map +1 -1
  810. package/dist/core/constants.js +52 -37
  811. package/dist/core/constants.js.map +1 -1
  812. package/dist/core/data-file.d.ts +7 -0
  813. package/dist/core/data-file.d.ts.map +1 -1
  814. package/dist/core/data-file.js +17 -0
  815. package/dist/core/data-file.js.map +1 -1
  816. package/dist/core/flux-rules.js +1 -1
  817. package/dist/core/flux-rules.js.map +1 -1
  818. package/dist/core/format.d.ts +36 -0
  819. package/dist/core/format.d.ts.map +1 -0
  820. package/dist/core/format.js +39 -0
  821. package/dist/core/format.js.map +1 -0
  822. package/dist/core/hash.d.ts +14 -0
  823. package/dist/core/hash.d.ts.map +1 -0
  824. package/dist/core/hash.js +17 -0
  825. package/dist/core/hash.js.map +1 -0
  826. package/dist/core/json-schema.d.ts +3 -1
  827. package/dist/core/json-schema.d.ts.map +1 -1
  828. package/dist/core/json-schema.js +41 -16
  829. package/dist/core/json-schema.js.map +1 -1
  830. package/dist/core/labeled-tensor.d.ts +6 -1
  831. package/dist/core/labeled-tensor.d.ts.map +1 -1
  832. package/dist/core/labeled-tensor.js +18 -16
  833. package/dist/core/labeled-tensor.js.map +1 -1
  834. package/dist/core/mathts-read.d.ts +25 -0
  835. package/dist/core/mathts-read.d.ts.map +1 -0
  836. package/dist/core/mathts-read.js +51 -0
  837. package/dist/core/mathts-read.js.map +1 -0
  838. package/dist/core/regime-registry.d.ts +6 -2
  839. package/dist/core/regime-registry.d.ts.map +1 -1
  840. package/dist/core/regime-registry.js.map +1 -1
  841. package/dist/core/regime-rule-install.js.map +1 -1
  842. package/dist/core/regimes-builtins.js.map +1 -1
  843. package/dist/core/tensor.d.ts +7 -4
  844. package/dist/core/tensor.d.ts.map +1 -1
  845. package/dist/core/tensor.js +64 -8
  846. package/dist/core/tensor.js.map +1 -1
  847. package/dist/core/types.d.ts +5 -5
  848. package/dist/core/types.js.map +1 -1
  849. package/dist/core/universal-index.js.map +1 -1
  850. package/dist/diff/bridge-ast-gradient.d.ts +4 -5
  851. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  852. package/dist/diff/bridge-ast-gradient.js +10 -6
  853. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  854. package/dist/diff/bridge-gradient.d.ts +43 -86
  855. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  856. package/dist/diff/bridge-gradient.js +40 -109
  857. package/dist/diff/bridge-gradient.js.map +1 -1
  858. package/dist/diff/bridge-specs.d.ts +16 -5
  859. package/dist/diff/bridge-specs.d.ts.map +1 -1
  860. package/dist/diff/bridge-specs.js +19 -4
  861. package/dist/diff/bridge-specs.js.map +1 -1
  862. package/dist/dimensional/algebra.d.ts +18 -0
  863. package/dist/dimensional/algebra.d.ts.map +1 -1
  864. package/dist/dimensional/algebra.js +41 -1
  865. package/dist/dimensional/algebra.js.map +1 -1
  866. package/dist/dimensional/ast-builders.d.ts +12 -4
  867. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  868. package/dist/dimensional/ast-builders.js +17 -5
  869. package/dist/dimensional/ast-builders.js.map +1 -1
  870. package/dist/dimensional/ast-leaves.d.ts +81 -0
  871. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  872. package/dist/dimensional/ast-leaves.js +146 -0
  873. package/dist/dimensional/ast-leaves.js.map +1 -0
  874. package/dist/dimensional/ast-types.js.map +1 -1
  875. package/dist/dimensional/bridge-check.js.map +1 -1
  876. package/dist/dimensional/buckingham.d.ts.map +1 -1
  877. package/dist/dimensional/buckingham.js +15 -27
  878. package/dist/dimensional/buckingham.js.map +1 -1
  879. package/dist/dimensional/connection-validators.d.ts +2 -1
  880. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  881. package/dist/dimensional/connection-validators.js.map +1 -1
  882. package/dist/dimensional/connection.js.map +1 -1
  883. package/dist/dimensional/constant-rows.d.ts.map +1 -1
  884. package/dist/dimensional/constant-rows.js +17 -13
  885. package/dist/dimensional/constant-rows.js.map +1 -1
  886. package/dist/dimensional/constants.d.ts +5 -6
  887. package/dist/dimensional/constants.d.ts.map +1 -1
  888. package/dist/dimensional/constants.js +5 -6
  889. package/dist/dimensional/constants.js.map +1 -1
  890. package/dist/dimensional/curvature-composite.js.map +1 -1
  891. package/dist/dimensional/curvature-invariants.js.map +1 -1
  892. package/dist/dimensional/curvature.js.map +1 -1
  893. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  894. package/dist/dimensional/dimension-inference.js +1 -2
  895. package/dist/dimensional/dimension-inference.js.map +1 -1
  896. package/dist/dimensional/dimension-spec.d.ts +13 -7
  897. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  898. package/dist/dimensional/dimension-spec.js +49 -23
  899. package/dist/dimensional/dimension-spec.js.map +1 -1
  900. package/dist/dimensional/einstein-equation.js.map +1 -1
  901. package/dist/dimensional/errors.d.ts +4 -2
  902. package/dist/dimensional/errors.d.ts.map +1 -1
  903. package/dist/dimensional/errors.js +3 -17
  904. package/dist/dimensional/errors.js.map +1 -1
  905. package/dist/dimensional/exact-scale.d.ts +0 -17
  906. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  907. package/dist/dimensional/exact-scale.js +8 -8
  908. package/dist/dimensional/exact-scale.js.map +1 -1
  909. package/dist/dimensional/field-equation-helpers.js.map +1 -1
  910. package/dist/dimensional/formula-names.js.map +1 -1
  911. package/dist/dimensional/fresh-label.js.map +1 -1
  912. package/dist/dimensional/friedmann-equation.d.ts +3 -3
  913. package/dist/dimensional/friedmann-equation.js +3 -3
  914. package/dist/dimensional/friedmann-equation.js.map +1 -1
  915. package/dist/dimensional/gauge-field.d.ts +2 -3
  916. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  917. package/dist/dimensional/gauge-field.js +2 -3
  918. package/dist/dimensional/gauge-field.js.map +1 -1
  919. package/dist/dimensional/hyphen-names.d.ts +12 -2
  920. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  921. package/dist/dimensional/hyphen-names.js +45 -12
  922. package/dist/dimensional/hyphen-names.js.map +1 -1
  923. package/dist/dimensional/killing-validators.js.map +1 -1
  924. package/dist/dimensional/klein-gordon-equation.js.map +1 -1
  925. package/dist/dimensional/metric-validators.d.ts +2 -1
  926. package/dist/dimensional/metric-validators.d.ts.map +1 -1
  927. package/dist/dimensional/metric-validators.js.map +1 -1
  928. package/dist/dimensional/metric.d.ts.map +1 -1
  929. package/dist/dimensional/metric.js +0 -1
  930. package/dist/dimensional/metric.js.map +1 -1
  931. package/dist/dimensional/natural-units.js.map +1 -1
  932. package/dist/dimensional/quantity-registry.d.ts +13 -0
  933. package/dist/dimensional/quantity-registry.d.ts.map +1 -1
  934. package/dist/dimensional/quantity-registry.js +14 -6
  935. package/dist/dimensional/quantity-registry.js.map +1 -1
  936. package/dist/dimensional/rg-flow.js.map +1 -1
  937. package/dist/dimensional/stress-energy-validators.js.map +1 -1
  938. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  939. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  940. package/dist/dimensional/symbolic-constants.js +20 -3
  941. package/dist/dimensional/symbolic-constants.js.map +1 -1
  942. package/dist/dimensional/tensor-trace.js.map +1 -1
  943. package/dist/dimensional/tensor.js.map +1 -1
  944. package/dist/dimensional/types.d.ts +36 -0
  945. package/dist/dimensional/types.d.ts.map +1 -1
  946. package/dist/dimensional/types.js +45 -7
  947. package/dist/dimensional/types.js.map +1 -1
  948. package/dist/dimensional/unit-convention.d.ts +0 -2
  949. package/dist/dimensional/unit-convention.d.ts.map +1 -1
  950. package/dist/dimensional/unit-convention.js +2 -2
  951. package/dist/dimensional/unit-convention.js.map +1 -1
  952. package/dist/dimensional/unit-data.d.ts.map +1 -1
  953. package/dist/dimensional/unit-data.js +11 -7
  954. package/dist/dimensional/unit-data.js.map +1 -1
  955. package/dist/dimensional/units.d.ts.map +1 -1
  956. package/dist/dimensional/units.js +38 -20
  957. package/dist/dimensional/units.js.map +1 -1
  958. package/dist/dimensional/validator-registry.js.map +1 -1
  959. package/dist/dimensional/validator.d.ts +0 -16
  960. package/dist/dimensional/validator.d.ts.map +1 -1
  961. package/dist/dimensional/validator.js +65 -29
  962. package/dist/dimensional/validator.js.map +1 -1
  963. package/dist/dimensional/weyl-validators.js.map +1 -1
  964. package/dist/index.d.ts +59 -8
  965. package/dist/index.d.ts.map +1 -1
  966. package/dist/index.js +22 -24
  967. package/dist/index.js.map +1 -1
  968. package/dist/numerical/bianchi-residual.js.map +1 -1
  969. package/dist/numerical/binding-value.d.ts +11 -6
  970. package/dist/numerical/binding-value.d.ts.map +1 -1
  971. package/dist/numerical/binding-value.js +126 -122
  972. package/dist/numerical/binding-value.js.map +1 -1
  973. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  974. package/dist/numerical/christoffel-flat.js +3 -2
  975. package/dist/numerical/christoffel-flat.js.map +1 -1
  976. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  977. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  978. package/dist/numerical/covariant-eikonal.js +36 -13
  979. package/dist/numerical/covariant-eikonal.js.map +1 -1
  980. package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
  981. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  982. package/dist/numerical/curvature-lowering-helpers.js +9 -5
  983. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  984. package/dist/numerical/derivative-lowering.js.map +1 -1
  985. package/dist/numerical/einstein-equation.js.map +1 -1
  986. package/dist/numerical/engine-registry.js.map +1 -1
  987. package/dist/numerical/errors.d.ts +7 -3
  988. package/dist/numerical/errors.d.ts.map +1 -1
  989. package/dist/numerical/errors.js +5 -8
  990. package/dist/numerical/errors.js.map +1 -1
  991. package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -1
  992. package/dist/numerical/evaluator-uncertainty.js +19 -2
  993. package/dist/numerical/evaluator-uncertainty.js.map +1 -1
  994. package/dist/numerical/finite-difference.d.ts +22 -0
  995. package/dist/numerical/finite-difference.d.ts.map +1 -0
  996. package/dist/numerical/finite-difference.js +27 -0
  997. package/dist/numerical/finite-difference.js.map +1 -0
  998. package/dist/numerical/formula-contract.d.ts +63 -7
  999. package/dist/numerical/formula-contract.d.ts.map +1 -1
  1000. package/dist/numerical/formula-contract.js +61 -42
  1001. package/dist/numerical/formula-contract.js.map +1 -1
  1002. package/dist/numerical/formula-dimension.d.ts +8 -7
  1003. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  1004. package/dist/numerical/formula-dimension.js +58 -36
  1005. package/dist/numerical/formula-dimension.js.map +1 -1
  1006. package/dist/numerical/formula-mathts.d.ts.map +1 -1
  1007. package/dist/numerical/formula-mathts.js +5 -2
  1008. package/dist/numerical/formula-mathts.js.map +1 -1
  1009. package/dist/numerical/formula-registry.d.ts +13 -3
  1010. package/dist/numerical/formula-registry.d.ts.map +1 -1
  1011. package/dist/numerical/formula-registry.js +7 -2
  1012. package/dist/numerical/formula-registry.js.map +1 -1
  1013. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  1014. package/dist/numerical/geodesic-integrator.js +22 -14
  1015. package/dist/numerical/geodesic-integrator.js.map +1 -1
  1016. package/dist/numerical/geometrized.d.ts.map +1 -1
  1017. package/dist/numerical/geometrized.js +0 -1
  1018. package/dist/numerical/geometrized.js.map +1 -1
  1019. package/dist/numerical/gl4-integrator.d.ts +28 -27
  1020. package/dist/numerical/gl4-integrator.d.ts.map +1 -1
  1021. package/dist/numerical/gl4-integrator.js +41 -42
  1022. package/dist/numerical/gl4-integrator.js.map +1 -1
  1023. package/dist/numerical/grid-field.js.map +1 -1
  1024. package/dist/numerical/index.js.map +1 -1
  1025. package/dist/numerical/input-validation.d.ts +3 -6
  1026. package/dist/numerical/input-validation.d.ts.map +1 -1
  1027. package/dist/numerical/input-validation.js +4 -8
  1028. package/dist/numerical/input-validation.js.map +1 -1
  1029. package/dist/numerical/killing.d.ts +8 -5
  1030. package/dist/numerical/killing.d.ts.map +1 -1
  1031. package/dist/numerical/killing.js.map +1 -1
  1032. package/dist/numerical/klein-gordon.js.map +1 -1
  1033. package/dist/numerical/kretschmann.js.map +1 -1
  1034. package/dist/numerical/lowering-utils.js.map +1 -1
  1035. package/dist/numerical/lowering.d.ts.map +1 -1
  1036. package/dist/numerical/lowering.js +7 -17
  1037. package/dist/numerical/lowering.js.map +1 -1
  1038. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  1039. package/dist/numerical/mathts-engine.js +16 -25
  1040. package/dist/numerical/mathts-engine.js.map +1 -1
  1041. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  1042. package/dist/numerical/metric-inverse.js +83 -46
  1043. package/dist/numerical/metric-inverse.js.map +1 -1
  1044. package/dist/numerical/null-ic.js.map +1 -1
  1045. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  1046. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  1047. package/dist/numerical/null-ray-integrator.js +12 -12
  1048. package/dist/numerical/null-ray-integrator.js.map +1 -1
  1049. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  1050. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  1051. package/dist/numerical/pderiv.d.ts.map +1 -1
  1052. package/dist/numerical/pderiv.js +9 -2
  1053. package/dist/numerical/pderiv.js.map +1 -1
  1054. package/dist/numerical/perihelion-finder.d.ts +0 -36
  1055. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  1056. package/dist/numerical/perihelion-finder.js +41 -87
  1057. package/dist/numerical/perihelion-finder.js.map +1 -1
  1058. package/dist/numerical/quadrature.d.ts +5 -2
  1059. package/dist/numerical/quadrature.d.ts.map +1 -1
  1060. package/dist/numerical/quadrature.js +19 -4
  1061. package/dist/numerical/quadrature.js.map +1 -1
  1062. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  1063. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  1064. package/dist/numerical/rk4-trajectory.js +37 -0
  1065. package/dist/numerical/rk4-trajectory.js.map +1 -0
  1066. package/dist/numerical/schwarzschild.d.ts +14 -0
  1067. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  1068. package/dist/numerical/schwarzschild.js +17 -0
  1069. package/dist/numerical/schwarzschild.js.map +1 -0
  1070. package/dist/numerical/spacetime-metrics.d.ts +25 -19
  1071. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  1072. package/dist/numerical/spacetime-metrics.js +180 -286
  1073. package/dist/numerical/spacetime-metrics.js.map +1 -1
  1074. package/dist/numerical/statistics.d.ts +24 -0
  1075. package/dist/numerical/statistics.d.ts.map +1 -0
  1076. package/dist/numerical/statistics.js +52 -0
  1077. package/dist/numerical/statistics.js.map +1 -0
  1078. package/dist/numerical/strides.js.map +1 -1
  1079. package/dist/numerical/tensor-engine.d.ts +30 -5
  1080. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  1081. package/dist/numerical/tensor-engine.js +12 -0
  1082. package/dist/numerical/tensor-engine.js.map +1 -1
  1083. package/dist/numerical/types.js.map +1 -1
  1084. package/dist/numerical/weyl-lowering.js.map +1 -1
  1085. package/dist/relations/category.js.map +1 -1
  1086. package/dist/relations/composition-table.d.ts +4 -4
  1087. package/dist/relations/composition-table.js +4 -4
  1088. package/dist/relations/composition-table.js.map +1 -1
  1089. package/dist/relations/conventions.js.map +1 -1
  1090. package/dist/relations/domain-regimes.js.map +1 -1
  1091. package/dist/relations/regime-registration.js.map +1 -1
  1092. package/dist/relations/regime-vocabularies.js.map +1 -1
  1093. package/dist/relations/regime.d.ts +28 -8
  1094. package/dist/relations/regime.d.ts.map +1 -1
  1095. package/dist/relations/regime.js +44 -15
  1096. package/dist/relations/regime.js.map +1 -1
  1097. package/dist/relations/types.d.ts +18 -5
  1098. package/dist/relations/types.d.ts.map +1 -1
  1099. package/dist/relations/types.js +5 -3
  1100. package/dist/relations/types.js.map +1 -1
  1101. package/package.json +16 -20
  1102. package/dist/bridges/registry.d.ts +0 -60
  1103. package/dist/bridges/registry.d.ts.map +0 -1
  1104. package/dist/bridges/registry.js +0 -87
  1105. package/dist/bridges/registry.js.map +0 -1
  1106. package/dist/cli/poster-source.d.ts +0 -154
  1107. package/dist/cli/poster-source.d.ts.map +0 -1
  1108. package/dist/cli/poster-source.js +0 -184
  1109. package/dist/cli/poster-source.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"formula-mathts.js","sourceRoot":"","sources":["../../src/numerical/formula-mathts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formula-mathts.js","sourceRoot":"","sources":["../../src/numerical/formula-mathts.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MathTS-backed scalar-formula parser.\n *\n * Backed by `@danielsimonjr/mathts-functions` (`parse(expr) → Node`,\n * `node.evaluate(scope)`). The package is a required dependency.\n *\n * SCALAR-ONLY guard: the CLI/inference contract returns a `number`. If a\n * formula evaluates to a non-number (matrix, complex, unit, function), this\n * throws a {@link FormulaError} rather than leaking MathTS types through the\n * seam.\n *\n * Bare `e` is the elementary charge. MathTS `{ physics: true, charge: 'scalar' }`\n * binds that symbol to the SI magnitude `1.602176634e-19`, so `1-e^2` is\n * ordinary arithmetic. `{ physics: true }` without `charge: 'scalar'` is a\n * Unit, and subtract does not accept it. Euler's number is `exp(x)`. The name\n * `euler` is refused. `E` stays unbound.\n *\n * @module numerical/formula-mathts\n */\n\nimport { compileExpr, parse as parseMathTs } from '@danielsimonjr/mathts-functions';\nimport type { CompiledFormula, FormulaParser } from './formula-contract.js';\nimport { BUILTIN_FUNCTION_NAMES, callBuiltinFunction, EulerNumberError, FormulaError, unknownFunctionMessage, FormulaValueError } from './formula-contract.js';\n\n/** Bare `e` is the SI magnitude, not the coulomb Unit. */\nconst PHYSICS_SCALAR = { physics: true, charge: 'scalar' } as const;\n\n/** Minimal structural shape of a MathTS AST node (the bits we use). */\ninterface MathNode {\n evaluate(scope: Record<string, number>): unknown;\n filter(predicate: (node: MathNode) => boolean): MathNode[];\n toString(): string;\n readonly isSymbolNode?: boolean;\n readonly isFunctionNode?: boolean;\n readonly name?: string;\n readonly fn?: { readonly name?: string };\n}\n\n/** Minimal structural shape of the @danielsimonjr/mathts-functions module. */\ninterface MathtsFunctionsModule {\n parse(expr: string): MathNode;\n}\n\n/**\n * Build a {@link FormulaParser} bound to an already-loaded mathts-functions\n * module. Pure (no I/O) — the dynamic import lives in the registry.\n */\nfunction createMathtsFormulaParser(\n mod: MathtsFunctionsModule,\n): FormulaParser {\n const builtinCache = new Map<string, boolean>();\n const isBuiltin = (name: string): boolean => {\n const cached = builtinCache.get(name);\n if (cached !== undefined) return cached;\n let builtin: boolean;\n try {\n mod.parse(name).evaluate({});\n builtin = true; // pi / e / sin / … resolve with an empty scope\n } catch {\n builtin = false; // a free variable does not\n }\n builtinCache.set(name, builtin);\n return builtin;\n };\n\n // A MathTS *function* (`gamma`, `distance`, `zeta`, `sin`, …) also resolves\n // with an empty scope: it returns the function. That is not a value. A bare\n // symbol with that name is a quantity (the adiabatic index, a length), and\n // treating it as a built-in dropped it from the free-variable list, so\n // `sqrt(gamma*pressure/density)` died as \"undeclared symbol 'gamma'\".\n // Only a name that evaluates to a number is a MathTS constant (`pi`, `tau`).\n // Bare `e` is one of those under MathTS's default (Euler's number). Evaluation\n // below reads it as the elementary charge through `{ physics: true, charge: 'scalar' }`.\n // An explicit scope `e` still wins. The name `euler` is refused below.\n // A call such as `gamma(5)` is still a callee, decided separately.\n const valueConstantCache = new Map<string, boolean>();\n const isValueConstant = (name: string): boolean => {\n const cached = valueConstantCache.get(name);\n if (cached !== undefined) return cached;\n let constant = false;\n try {\n constant = typeof mod.parse(name).evaluate({}) === 'number';\n } catch {\n constant = false;\n }\n valueConstantCache.set(name, constant);\n return constant;\n };\n\n // Functions the built-in parser documents but MathTS does not define (`ln`),\n // supplied through the scope so a formula means the same under either\n // parser. Anything outside the documented list still fails.\n const shims: Record<string, (...args: number[]) => number> = {};\n for (const name of BUILTIN_FUNCTION_NAMES) {\n if (!isBuiltin(name)) shims[name] = (...args) => callBuiltinFunction(name, args);\n }\n\n return {\n parse(expr: string): CompiledFormula {\n if (!expr || !expr.trim()) throw new FormulaError('empty formula');\n let node: MathNode;\n try {\n node = mod.parse(expr);\n } catch (err) {\n throw new FormulaError(\n `parse error: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n\n // Free variables = symbol names − function callees − numeric constants.\n // A function name is excluded only where it is called (`gamma(5)`), not\n // where it is a quantity (`gamma` the adiabatic index).\n const callees = new Set(\n node\n .filter((n) => n.isFunctionNode === true)\n .map((n) => n.fn?.name)\n .filter((n): n is string => typeof n === 'string'),\n );\n // A callee MathTS does not resolve and no shim supplies: evaluation would fail with MathTS's\n // own \"Undefined function\", so it fails with the shared diagnostic instead (audit I4).\n const symbolNames = node\n .filter((n) => n.isSymbolNode === true)\n .map((n) => n.name)\n .filter((n): n is string => typeof n === 'string');\n if (symbolNames.includes('euler') || callees.has('euler')) {\n throw new EulerNumberError();\n }\n const unknownCallee = [...callees].find((n) => !(n in shims) && !isBuiltin(n));\n const variables = [\n ...new Set(\n node\n .filter((n) => n.isSymbolNode === true)\n .map((n) => n.name)\n .filter((n): n is string => typeof n === 'string')\n .filter((n) => !callees.has(n) && !isValueConstant(n)),\n ),\n ].sort();\n\n // `compileExpr` applies `{ physics: true, charge: 'scalar' }` on each\n // evaluation, so bare `e` is the SI magnitude and a scope entry for `e` wins.\n const compiled = compileExpr(expr, PHYSICS_SCALAR);\n return {\n source: expr,\n variables,\n evaluate(scope: Record<string, number>): number {\n if (unknownCallee !== undefined) throw new FormulaError(unknownFunctionMessage(unknownCallee));\n let result: unknown;\n try {\n result = compiled.evaluate({ ...shims, ...scope });\n } catch (err) {\n // `compileExpr` quotes the name (`Undefined symbol \"process\"`).\n // The interpreter path reports `Undefined symbol process`.\n // The one place src/ reads MathTS message text: MathTS throws a plain `Error` with no\n // symbol field, and a pre-check against the scope cannot stand in because MathTS resolves\n // some names itself (`hbar` reads as a unit). It only normalizes the text; nothing branches on it.\n // Tracked in ACTIVE.md as a MathTS follow-up (a typed undefined-symbol error).\n const message = err instanceof Error ? err.message : String(err);\n throw new FormulaError(message.replace(/^Undefined symbol \"([^\"]+)\"$/, 'Undefined symbol $1'));\n }\n if (typeof result !== 'number' || !Number.isFinite(result)) {\n // typeof Infinity and NaN is \"number\", which reads as a type error.\n // A Complex is an object; \"got object\" hides that sqrt(-1) left the reals.\n throw new FormulaValueError(`formula did not evaluate to a finite number (got ${describeNonFinite(result)})`);\n }\n return result;\n },\n };\n },\n };\n}\n\n/** What a non-finite or non-number result was, for the error text. */\nfunction describeNonFinite(result: unknown): string {\n if (typeof result === 'number') return String(result);\n if (result !== null && typeof result === 'object') {\n const c = result as { re?: unknown; im?: unknown; toString?: () => string };\n if (typeof c.re === 'number' && typeof c.im === 'number') {\n const text = typeof c.toString === 'function' ? c.toString() : `${c.re}+${c.im}i`;\n return `a complex number (${text})`;\n }\n }\n return typeof result;\n}\n\nconst mathTsModule: MathtsFunctionsModule = {\n // MathTS's Node type is not imported; `MathNode` is the structural subset\n // this parser reads (`evaluate`, `filter`, `isSymbolNode`, `isFunctionNode`,\n // `name`, `fn`), every member of which exists on a MathTS node.\n parse: (expr) => parseMathTs(expr) as unknown as MathNode,\n};\n\n/** The MathTS formula parser. @internal */\nexport const mathtsFormulaParser: FormulaParser = createMathtsFormulaParser(mathTsModule);\n\n/** Parse a scalar formula. @internal */\nexport function parseFormula(expr: string): CompiledFormula {\n return mathtsFormulaParser.parse(expr);\n}\n"]}
@@ -10,10 +10,20 @@
10
10
  import type { FormulaParser } from './formula-contract.js';
11
11
  import type { Dimension } from '../dimensional/types.js';
12
12
  import type { FormulaDimensionChecker, ParsedPhysics } from './formula-dimension.js';
13
- type FormulaParserKind = 'mathts' | 'builtin';
14
- /** Resolve the active formula parser. It is the MathTS parser. @internal */
13
+ /**
14
+ * The one formula parser kind. The `builtin` recursive-descent parser was
15
+ * removed with Path B, so the type has no second member; the CLI records
16
+ * this value in an experiment record's environment.
17
+ */
18
+ type FormulaParserKind = 'mathts';
19
+ /**
20
+ * Resolve the active formula parser. It is the MathTS parser. The function
21
+ * stays async because the CLI awaits it on a code path that once loaded an
22
+ * optional peer; the value is constant.
23
+ * @internal
24
+ */
15
25
  export declare function getFormulaParser(): Promise<FormulaParser>;
16
- /** Which parser is active. Always `mathts`. @internal */
26
+ /** Which parser is active: `mathts`, the one value of {@link FormulaParserKind}. @internal */
17
27
  export declare function getFormulaParserKind(): Promise<FormulaParserKind>;
18
28
  /**
19
29
  * The dimensional checker for user formulas. It transpiles the MathTS AST.
@@ -1 +1 @@
1
- {"version":3,"file":"formula-registry.d.ts","sourceRoot":"","sources":["../../src/numerical/formula-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGrF,KAAK,iBAAiB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9C,4EAA4E;AAC5E,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAE/D;AAED,yDAAyD;AACzD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAEvE;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAEnF;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GACxC,OAAO,CAAC,aAAa,CAAC,CAExB"}
1
+ {"version":3,"file":"formula-registry.d.ts","sourceRoot":"","sources":["../../src/numerical/formula-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGrF;;;;GAIG;AACH,KAAK,iBAAiB,GAAG,QAAQ,CAAC;AAElC;;;;;GAKG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAE/D;AAED,8FAA8F;AAC9F,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAEvE;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAEnF;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GACxC,OAAO,CAAC,aAAa,CAAC,CAExB"}
@@ -9,11 +9,16 @@
9
9
  */
10
10
  import { mathtsFormulaParser } from './formula-mathts.js';
11
11
  import { builtinFormulaDimensionChecker } from './formula-dimension.js';
12
- /** Resolve the active formula parser. It is the MathTS parser. @internal */
12
+ /**
13
+ * Resolve the active formula parser. It is the MathTS parser. The function
14
+ * stays async because the CLI awaits it on a code path that once loaded an
15
+ * optional peer; the value is constant.
16
+ * @internal
17
+ */
13
18
  export async function getFormulaParser() {
14
19
  return mathtsFormulaParser;
15
20
  }
16
- /** Which parser is active. Always `mathts`. @internal */
21
+ /** Which parser is active: `mathts`, the one value of {@link FormulaParserKind}. @internal */
17
22
  export async function getFormulaParserKind() {
18
23
  return 'mathts';
19
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"formula-registry.js","sourceRoot":"","sources":["../../src/numerical/formula-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAIxE,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,OAAO,8BAA8B,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,IAAyC;IAEzC,OAAO,8BAA8B,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"formula-registry.js","sourceRoot":"","sources":["../../src/numerical/formula-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AASxE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,OAAO,8BAA8B,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,IAAyC;IAEzC,OAAO,8BAA8B,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC","sourcesContent":["/**\n * Formula-parser registry.\n *\n * `getFormulaParser()` returns the MathTS-backed parser. The MathTS packages\n * are required dependencies, so there is no absent-peer branch and no Path B\n * parser.\n *\n * @module numerical/formula-registry\n */\n\nimport type { FormulaParser } from './formula-contract.js';\nimport { mathtsFormulaParser } from './formula-mathts.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport type { FormulaDimensionChecker, ParsedPhysics } from './formula-dimension.js';\nimport { builtinFormulaDimensionChecker } from './formula-dimension.js';\n\n/**\n * The one formula parser kind. The `builtin` recursive-descent parser was\n * removed with Path B, so the type has no second member; the CLI records\n * this value in an experiment record's environment.\n */\ntype FormulaParserKind = 'mathts';\n\n/**\n * Resolve the active formula parser. It is the MathTS parser. The function\n * stays async because the CLI awaits it on a code path that once loaded an\n * optional peer; the value is constant.\n * @internal\n */\nexport async function getFormulaParser(): Promise<FormulaParser> {\n return mathtsFormulaParser;\n}\n\n/** Which parser is active: `mathts`, the one value of {@link FormulaParserKind}. @internal */\nexport async function getFormulaParserKind(): Promise<FormulaParserKind> {\n return 'mathts';\n}\n\n/**\n * The dimensional checker for user formulas. It transpiles the MathTS AST.\n * @internal\n */\nexport async function getFormulaDimensionChecker(): Promise<FormulaDimensionChecker> {\n return builtinFormulaDimensionChecker();\n}\n\n/**\n * Parse physics text to a dimensional `ExprNode` + its inferred dimension.\n * The single public string→`ExprNode` entry point.\n *\n * @throws {FormulaDimensionError} on a parse error or non-homogeneity.\n * @public\n */\nexport async function parsePhysics(\n text: string,\n dims: Readonly<Record<string, Dimension>>,\n): Promise<ParsedPhysics> {\n return builtinFormulaDimensionChecker().parse(text, dims);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"geodesic-integrator.d.ts","sourceRoot":"","sources":["../../src/numerical/geodesic-integrator.ts"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;;;;OAYG;IACH,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,KAAK,YAAY,CAAC;IAE9E,iDAAiD;IACjD,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C;;;;;;;;OAQG;IACH,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IAEjB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IAEf,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3D,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3D;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC/E;AAuFD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,wBAAwB,GAC/B,wBAAwB,CAuD1B"}
1
+ {"version":3,"file":"geodesic-integrator.d.ts","sourceRoot":"","sources":["../../src/numerical/geodesic-integrator.ts"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;;;;OAYG;IACH,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,KAAK,YAAY,CAAC;IAE9E,iDAAiD;IACjD,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C;;;;;;;;OAQG;IACH,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IAEjB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IAEf,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3D,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3D;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC/E;AAuFD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,wBAAwB,GAC/B,wBAAwB,CA8D1B"}
@@ -14,16 +14,17 @@
14
14
  * The Christoffel symbol Γ^μ_{νρ} is supplied as a plain-JS closure that
15
15
  * maps a 4-coordinate array to a [4][4][4] tensor. No TensorEngine
16
16
  * dependency — the integrator is self-contained. The fixed steps are
17
- * MathTS `solveODESystem` with `dt` set, which is that library's classical
18
- * RK4. Adaptive `solveODE` is not this step.
17
+ * `rk4Trajectory` (MathTS `solveODESystem` with `dt` set, that library's
18
+ * classical RK4), which takes exactly `steps` steps. Adaptive `solveODE` is
19
+ * not this step.
19
20
  *
20
21
  * Validated against the cycloid parametric form for radial Schwarzschild
21
22
  * infall to ±1e-6 (Task 14 test, η = 0.5).
22
23
  *
23
24
  * @module numerical/geodesic-integrator
24
25
  */
25
- import { solveODESystem } from '@danielsimonjr/mathts-functions';
26
26
  import { NumericalBackendError } from './errors.js';
27
+ import { rk4Trajectory } from './rk4-trajectory.js';
27
28
  /**
28
29
  * Evaluate the Christoffel acceleration −Γ^μ_{νρ} v^ν v^ρ at position x
29
30
  * with 4-velocity v. Returns (dx/dτ, dv/dτ) = (v, accel).
@@ -149,28 +150,35 @@ export function integrateGeodesic(inputs) {
149
150
  if (!Number.isInteger(steps) || steps <= 0) {
150
151
  throw new NumericalBackendError(`integrateGeodesic: steps must be a positive integer, got ${steps}`);
151
152
  }
152
- const h = (tauEnd - tauStart) / steps;
153
+ // A NaN or infinite end made every step NaN and the result the start state; an
154
+ // end equal to the start is a zero step, which is not an integration either.
155
+ if (!Number.isFinite(tauStart)) {
156
+ throw new NumericalBackendError(`integrateGeodesic: tauStart must be finite, got ${tauStart}`);
157
+ }
158
+ if (!Number.isFinite(tauEnd)) {
159
+ throw new NumericalBackendError(`integrateGeodesic: tauEnd must be finite, got ${tauEnd}`);
160
+ }
161
+ if (tauEnd === tauStart) {
162
+ throw new NumericalBackendError(`integrateGeodesic: tauEnd must differ from tauStart, both are ${tauStart}`);
163
+ }
153
164
  const y0 = [x0[0], x0[1], x0[2], x0[3], v0[0], v0[1], v0[2], v0[3]];
154
165
  // One scratch buffer reused across all Christoffel evaluations (4 per step).
155
166
  // Each geodesicRHS consumes its Γ before the next call, so reuse is safe and
156
167
  // avoids ~4·steps Float64Array(64) allocations per integration.
157
168
  const scratch = new Float64Array(64);
158
- const sol = solveODESystem((_tau, y) => {
169
+ const states = rk4Trajectory((_tau, y) => {
159
170
  const x = [y[0], y[1], y[2], y[3]];
160
171
  const v = [y[4], y[5], y[6], y[7]];
161
172
  const s = geodesicRHS(christoffelFn, x, v, scratch);
162
173
  return [s.dx[0], s.dx[1], s.dx[2], s.dx[3], s.dv[0], s.dv[1], s.dv[2], s.dv[3]];
163
- }, y0, [tauStart, tauEnd], { dt: h });
174
+ }, y0, tauStart, tauEnd, steps);
164
175
  const asVec4 = (row) => [row[0], row[1], row[2], row[3]];
165
176
  const sampleEvery = Math.max(1, Math.floor(steps / 100));
166
- const trajectory = [asVec4(sol.y[0] ?? y0)];
167
- for (let i = 0; i < steps; i++) {
168
- if ((i + 1) % sampleEvery === 0) {
169
- const row = sol.y[i + 1] ?? sol.y[sol.y.length - 1] ?? y0;
170
- trajectory.push(asVec4(row));
171
- }
172
- }
173
- const last = sol.y[sol.y.length - 1] ?? y0;
177
+ // `rk4Trajectory` returns exactly steps + 1 states, so state i is the one after i steps.
178
+ const trajectory = [asVec4(states[0] ?? y0)];
179
+ for (let i = sampleEvery; i <= steps; i += sampleEvery)
180
+ trajectory.push(asVec4(states[i] ?? y0));
181
+ const last = states[steps] ?? y0;
174
182
  return {
175
183
  xFinal: asVec4(last),
176
184
  vFinal: [last[4], last[5], last[6], last[7]],
@@ -1 +1 @@
1
- {"version":3,"file":"geodesic-integrator.js","sourceRoot":"","sources":["../../src/numerical/geodesic-integrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geodesic-integrator.js","sourceRoot":"","sources":["../../src/numerical/geodesic-integrator.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Fixed-step RK4 integrator for the geodesic equation in an arbitrary\n * Lorentzian manifold (v0.4.0, Task 14 [U]).\n *\n * Solves the second-order ODE system\n *\n * d²x^μ/dτ² + Γ^μ_{νρ}(x) (dx^ν/dτ)(dx^ρ/dτ) = 0\n *\n * by casting it as a first-order system on the (x, v) phase space:\n *\n * dx^μ/dτ = v^μ\n * dv^μ/dτ = −Γ^μ_{νρ}(x) v^ν v^ρ (Einstein summation over ν, ρ)\n *\n * The Christoffel symbol Γ^μ_{νρ} is supplied as a plain-JS closure that\n * maps a 4-coordinate array to a [4][4][4] tensor. No TensorEngine\n * dependency — the integrator is self-contained. The fixed steps are\n * `rk4Trajectory` (MathTS `solveODESystem` with `dt` set, that library's\n * classical RK4), which takes exactly `steps` steps. Adaptive `solveODE` is\n * not this step.\n *\n * Validated against the cycloid parametric form for radial Schwarzschild\n * infall to ±1e-6 (Task 14 test, η = 0.5).\n *\n * @module numerical/geodesic-integrator\n */\nimport { NumericalBackendError } from './errors.js';\nimport { rk4Trajectory } from './rk4-trajectory.js';\n\n/**\n * Input bundle for `integrateGeodesic`.\n * @public\n */\nexport interface GeodesicIntegratorInputs {\n /**\n * Christoffel-symbol closure. Maps a 4-coordinate array x^μ to a\n * Float64Array(64) containing Γ^μ_{νρ}(x) in λ-major layout:\n * index (λ, μ, ν) → 16·λ + 4·μ + ν.\n *\n * BR-2 (v0.6.0 Task 2.9): migrated from nested number[][][] to flat\n * Float64Array(64). Consumers call `arr[16*mu + 4*nu + rho]`.\n *\n * The optional `out` buffer lets the integrator pass a reused scratch\n * Float64Array(64) so the hot loop avoids per-call allocation. A function\n * that ignores `out` (e.g. allocates fresh each call) still satisfies this\n * type — the optimization is opt-in.\n */\n christoffelFn: (x: ReadonlyArray<number>, out?: Float64Array) => Float64Array;\n\n /** Initial 4-position x^μ(τ₀) = [t, r, θ, φ]. */\n x0: readonly [number, number, number, number];\n\n /**\n * Initial 4-velocity dx^μ/dτ at τ₀.\n *\n * I2 fix: for a Schwarzschild radial timelike geodesic starting at\n * coordinate radius r₀, use\n * v0 = [1/√(1 − r_s/r₀), 0, 0, 0]\n * so that g_{μν} u^μ u^ν = −c² holds. At r₀ = 100·r_s this gives\n * dt/dτ ≈ 1.005, not 1.\n */\n v0: readonly [number, number, number, number];\n\n /** Proper-time parameter at the start of integration. */\n tauStart: number;\n\n /** Proper-time parameter at the end of integration. */\n tauEnd: number;\n\n /** Number of fixed RK4 steps. Must be a positive integer. */\n steps: number;\n\n /**\n * E11 fix: explicit domain-validity option in place of the\n * `(christoffelFn as any).r_s` monkey-patch. If supplied, the\n * integrator throws `NumericalBackendError` when `x0[1] < domainMinRadius`\n * (e.g. for Schwarzschild: caller passes `3 * r_s` to enforce the\n * v0.4.0 domain restriction r ≥ 3·r_Schwarz).\n */\n domainMinRadius?: number;\n}\n\n/**\n * Result of `integrateGeodesic`.\n * @public\n */\nexport interface GeodesicIntegratorResult {\n /** Final 4-position x^μ(τEnd). */\n readonly xFinal: readonly [number, number, number, number];\n\n /** Final 4-velocity v^μ(τEnd). */\n readonly vFinal: readonly [number, number, number, number];\n\n /**\n * Sampled trajectory positions (approximately 100 evenly-spaced snapshots\n * plus the initial point). Useful for visualisation and diagnostics.\n */\n readonly trajectory: ReadonlyArray<readonly [number, number, number, number]>;\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\ntype Vec4 = [number, number, number, number];\n\n/**\n * Evaluate the Christoffel acceleration −Γ^μ_{νρ} v^ν v^ρ at position x\n * with 4-velocity v. Returns (dx/dτ, dv/dτ) = (v, accel).\n *\n * BR-2 (v0.6.0 Task 2.9): christoffelFn now returns Float64Array(64).\n * Index access: G[16*mu + 4*nu + rho] (λ-major layout).\n */\nfunction geodesicRHS(\n christoffelFn: (x: ReadonlyArray<number>, out?: Float64Array) => Float64Array,\n x: Vec4,\n v: Vec4,\n // Reused scratch buffer for the Christoffel evaluation. Safe: G is fully\n // consumed into `dv` below before geodesicRHS returns, so the next call may\n // overwrite it. `dx`/`dv` are fresh arrays and never alias G.\n scratch?: Float64Array,\n): { dx: Vec4; dv: Vec4 } {\n const G = christoffelFn(x, scratch);\n const v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3];\n let dv0 = 0, dv1 = 0, dv2 = 0, dv3 = 0;\n\n for (let mu = 0; mu < 4; mu++) {\n // Bolt: Hoist the invariant 16 * mu multiplication outside the nu, rho loops\n const mu16 = mu * 16;\n let acc = 0;\n let accTerm = 0;\n let g = 0;\n\n // Bolt: Fully unroll the inner `nu` and `rho` loops for a fixed 4D spacetime\n // to eliminate loop overhead and index arithmetic, caching `v` into scalar variables.\n\n // nu = 0\n let offset = mu16;\n accTerm = 0;\n g = G[offset]; if (g !== 0) accTerm += g * v0;\n g = G[offset+1]; if (g !== 0) accTerm += g * v1;\n g = G[offset+2]; if (g !== 0) accTerm += g * v2;\n g = G[offset+3]; if (g !== 0) accTerm += g * v3;\n if (accTerm !== 0) acc += accTerm * v0;\n\n // nu = 1\n offset += 4;\n accTerm = 0;\n g = G[offset]; if (g !== 0) accTerm += g * v0;\n g = G[offset+1]; if (g !== 0) accTerm += g * v1;\n g = G[offset+2]; if (g !== 0) accTerm += g * v2;\n g = G[offset+3]; if (g !== 0) accTerm += g * v3;\n if (accTerm !== 0) acc += accTerm * v1;\n\n // nu = 2\n offset += 4;\n accTerm = 0;\n g = G[offset]; if (g !== 0) accTerm += g * v0;\n g = G[offset+1]; if (g !== 0) accTerm += g * v1;\n g = G[offset+2]; if (g !== 0) accTerm += g * v2;\n g = G[offset+3]; if (g !== 0) accTerm += g * v3;\n if (accTerm !== 0) acc += accTerm * v2;\n\n // nu = 3\n offset += 4;\n accTerm = 0;\n g = G[offset]; if (g !== 0) accTerm += g * v0;\n g = G[offset+1]; if (g !== 0) accTerm += g * v1;\n g = G[offset+2]; if (g !== 0) accTerm += g * v2;\n g = G[offset+3]; if (g !== 0) accTerm += g * v3;\n if (accTerm !== 0) acc += accTerm * v3;\n\n if (mu === 0) dv0 = -acc;\n else if (mu === 1) dv1 = -acc;\n else if (mu === 2) dv2 = -acc;\n else dv3 = -acc;\n }\n\n return { dx: [v0, v1, v2, v3], dv: [dv0, dv1, dv2, dv3] };\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Numerically integrate the geodesic equation for a timelike (or null)\n * worldline in an arbitrary curved spacetime using a fixed-step classical\n * fourth-order Runge-Kutta scheme.\n *\n * @public\n */\nexport function integrateGeodesic(\n inputs: GeodesicIntegratorInputs,\n): GeodesicIntegratorResult {\n const { christoffelFn, x0, v0, tauStart, tauEnd, steps, domainMinRadius } = inputs;\n // BR-2: christoffelFn now returns Float64Array(64); geodesicRHS reads flat layout.\n\n // E11 fix: explicit option in place of monkey-patched .r_s on the closure.\n // Callers (e.g. the Schwarzschild test fixture) pass `3 * r_s` directly.\n if (typeof domainMinRadius === 'number' && x0[1] < domainMinRadius) {\n throw new NumericalBackendError(\n `integrateGeodesic: initial radius r0=${x0[1]} < domainMinRadius=${domainMinRadius}. ` +\n `Position is outside the valid integration domain. ` +\n `For Schwarzschild geodesics this restriction is r ≥ 3·r_Schwarz (v0.4.0).`,\n );\n }\n\n if (!Number.isInteger(steps) || steps <= 0) {\n throw new NumericalBackendError(\n `integrateGeodesic: steps must be a positive integer, got ${steps}`,\n );\n }\n // A NaN or infinite end made every step NaN and the result the start state; an\n // end equal to the start is a zero step, which is not an integration either.\n if (!Number.isFinite(tauStart)) {\n throw new NumericalBackendError(`integrateGeodesic: tauStart must be finite, got ${tauStart}`);\n }\n if (!Number.isFinite(tauEnd)) {\n throw new NumericalBackendError(`integrateGeodesic: tauEnd must be finite, got ${tauEnd}`);\n }\n if (tauEnd === tauStart) {\n throw new NumericalBackendError(`integrateGeodesic: tauEnd must differ from tauStart, both are ${tauStart}`);\n }\n\n const y0 = [x0[0], x0[1], x0[2], x0[3], v0[0], v0[1], v0[2], v0[3]];\n\n // One scratch buffer reused across all Christoffel evaluations (4 per step).\n // Each geodesicRHS consumes its Γ before the next call, so reuse is safe and\n // avoids ~4·steps Float64Array(64) allocations per integration.\n const scratch = new Float64Array(64);\n const states = rk4Trajectory(\n (_tau, y) => {\n const x: Vec4 = [y[0], y[1], y[2], y[3]];\n const v: Vec4 = [y[4], y[5], y[6], y[7]];\n const s = geodesicRHS(christoffelFn, x, v, scratch);\n return [s.dx[0], s.dx[1], s.dx[2], s.dx[3], s.dv[0], s.dv[1], s.dv[2], s.dv[3]];\n },\n y0,\n tauStart,\n tauEnd,\n steps,\n );\n\n const asVec4 = (row: readonly number[]): Vec4 => [row[0], row[1], row[2], row[3]];\n const sampleEvery = Math.max(1, Math.floor(steps / 100));\n // `rk4Trajectory` returns exactly steps + 1 states, so state i is the one after i steps.\n const trajectory: Vec4[] = [asVec4(states[0] ?? y0)];\n for (let i = sampleEvery; i <= steps; i += sampleEvery) trajectory.push(asVec4(states[i] ?? y0));\n const last = states[steps] ?? y0;\n\n return {\n xFinal: asVec4(last),\n vFinal: [last[4], last[5], last[6], last[7]],\n trajectory,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"geometrized.d.ts","sourceRoot":"","sources":["../../src/numerical/geometrized.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD;;;;;GAKG;AACH,qBAAa,8BAA+B,SAAQ,QAAQ;IAC1D,YAAY,OAAO,EAAE,MAAM,EAI1B;CACF;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CASxD;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,CAErE;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,CAEzE"}
1
+ {"version":3,"file":"geometrized.d.ts","sourceRoot":"","sources":["../../src/numerical/geometrized.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD;;;;;GAKG;AACH,qBAAa,8BAA+B,SAAQ,QAAQ;IAC1D,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CASxD;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,CAErE;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,CAEzE"}
@@ -35,7 +35,6 @@ export class NonGeometrizableDimensionError extends UPTError {
35
35
  constructor(message) {
36
36
  super(message);
37
37
  this.name = 'NonGeometrizableDimensionError';
38
- Object.setPrototypeOf(this, NonGeometrizableDimensionError.prototype);
39
38
  }
40
39
  }
41
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"geometrized.js","sourceRoot":"","sources":["../../src/numerical/geometrized.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,OAAO,8BAA+B,SAAQ,QAAQ;IAC1D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;QAC7C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,8BAA8B,CAAC,SAAS,CAAC,CAAC;IACxE,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAc;IAC9C,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,8BAA8B,CACtC,qEAAqE;YACnE,wCAAwC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,IAAI;YACjE,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,iDAAiD,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,GAAc;IAC3D,OAAO,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,GAAc;IAC/D,OAAO,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"geometrized.js","sourceRoot":"","sources":["../../src/numerical/geometrized.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,OAAO,8BAA+B,SAAQ,QAAQ;IAC1D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAc;IAC9C,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,8BAA8B,CACtC,qEAAqE;YACnE,wCAAwC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,IAAI;YACjE,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,iDAAiD,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,GAAc;IAC3D,OAAO,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,GAAc;IAC/D,OAAO,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["/**\n * Geometrized-units boundary adapters (G-9 increment 1).\n *\n * Converts a scalar between SI and geometrized (G = c = 1) units, driven\n * MECHANICALLY by the `Dimension` exponent vector — the dimension functor\n * earning its keep. For an SI quantity of dimension L^l M^m T^t the single\n * conversion factor is `G^m · c^(t − 2m)` (each kg → G/c² metres, each second\n * → c metres); the geometrized quantity is a pure length L^(l+m+t).\n *\n * This is the self-contained FOUNDATION of the units-normalization layer\n * (design: docs/planning/v0.10.0-Units-Normalization-Design-Note.md, Adam-\n * vetted r2; plan: docs/planning/v0.13-G9-Adapters-Plan.md, Eve-vetted). Only c\n * and G are in scope: a nonzero electromagnetic / thermal / molar / luminous\n * exponent (I/Θ/N/J) throws.\n *\n * PUBLIC boundary API (G-9 increment 2): a consumer running the GR pipeline in\n * geometrized (G = c = 1) units converts scalars at the boundary with these\n * adapters. The consumer-wide DEFAULT-pipeline migration (increment 3) was\n * DECLINED after adversarial review — it is measured to give no precision win\n * (and far worse far-field; see docs/planning/v0.14-G9-Increment3-Disposition.md).\n * The SI pipeline stays the default; this geometrized layer is the optional\n * boundary API.\n *\n * @module numerical/geometrized\n */\n\nimport type { Dimension } from '../dimensional/types.js';\nimport { UPTError } from '../dimensional/errors.js';\nimport { C_SI, G_SI } from '../core/constants.js';\n\n/**\n * A dimension carries a non-c/G base (I/Θ/N/J ≠ 0) and cannot be geometrized\n * by c and G alone (k_B / ε₀ extensions are out of scope for this increment).\n *\n * @public\n */\nexport class NonGeometrizableDimensionError extends UPTError {\n constructor(message: string) {\n super(message);\n this.name = 'NonGeometrizableDimensionError';\n }\n}\n\n/**\n * The single SI→geometrized conversion factor for `dim`: `G^M · c^(T − 2M)`\n * (only the mass and time exponents enter). Shared by `toGeometrized` /\n * `fromGeometrized` so the round-trip is a clean inverse. A nonzero I/Θ/N/J\n * exponent throws `NonGeometrizableDimensionError` BEFORE any factor is\n * computed.\n *\n * @public\n */\nexport function geometrizedFactor(dim: Dimension): number {\n if (dim.I !== 0 || dim.Theta !== 0 || dim.N !== 0 || dim.J !== 0) {\n throw new NonGeometrizableDimensionError(\n `geometrizedFactor: only c and G are in scope; this dimension has a ` +\n `nonzero non-mechanizable exponent (I=${dim.I}, Θ=${dim.Theta}, ` +\n `N=${dim.N}, J=${dim.J}). Geometrization handles length / mass / time.`,\n );\n }\n return Math.pow(G_SI, dim.M) * Math.pow(C_SI, dim.T - 2 * dim.M);\n}\n\n/** SI → geometrized (G = c = 1). @public */\nexport function toGeometrized(valueSI: number, dim: Dimension): number {\n return valueSI * geometrizedFactor(dim);\n}\n\n/** Geometrized (G = c = 1) → SI. @public */\nexport function fromGeometrized(valueGeom: number, dim: Dimension): number {\n return valueGeom / geometrizedFactor(dim);\n}\n"]}
@@ -26,8 +26,9 @@ export interface GL4State {
26
26
  }
27
27
  /**
28
28
  * Per-step snapshot recorded by the integrator. `v` (the contravariant
29
- * 4-velocity v^μ = g^{μν} p_ν) is optional — emitted when the caller asks
30
- * for it, since it requires an extra metric-inverse contraction.
29
+ * 4-velocity v^μ = g^{μν} p_ν) is declared optional and is never emitted:
30
+ * no option asks for it, and nothing in `src/` reads it. It stays so a caller's
31
+ * own snapshot type can carry one.
31
32
  *
32
33
  * @public
33
34
  */
@@ -90,34 +91,27 @@ export interface GL4Options {
90
91
  }) => void;
91
92
  }
92
93
  /**
93
- * Result of `solveGL4Stage` — the two converged stage values plus the
94
- * iteration count actually consumed. Consumed by the
95
- * `integrateGeodesicGL4` step driver.
96
- *
97
- * v0.6.1: dropped export — internal-only result shape (was already
98
- * @internal-tagged but had no external consumer).
94
+ * The state after one GL4 step, with the Picard iteration count that step
95
+ * consumed. MathTS `gaussLegendre4` does not expose its two internal stage
96
+ * values, so this is the advanced state and nothing else.
97
+ * @internal
99
98
  */
100
- interface StageSolveResult {
101
- readonly stageX: readonly [readonly number[], readonly number[]];
102
- readonly stageP: readonly [readonly number[], readonly number[]];
103
- readonly stageDx: readonly [readonly number[], readonly number[]];
104
- readonly stageDp: readonly [readonly number[], readonly number[]];
99
+ export interface GL4StepResult {
100
+ readonly x: readonly number[];
101
+ readonly p: readonly number[];
105
102
  readonly iterations: number;
106
103
  }
107
104
  /**
108
- * One GL4 step, reported in the stage-result shape the stage tests read.
109
- *
110
- * The step itself is MathTS `gaussLegendre4`. In flat space `p` is constant,
111
- * so both stage momenta equal that advanced `p`. Throws `GL4ConvergenceError`
112
- * with a message matching `/Picard iteration did not converge/` when the
113
- * Picard cap is exhausted.
114
- *
105
+ * One GL4 step of the geodesic Hamiltonian, via MathTS `gaussLegendre4`.
106
+ * Throws `GL4ConvergenceError` with a message matching
107
+ * `/Picard iteration did not converge/` when the Picard cap is exhausted;
108
+ * any other error from the metric closures propagates unchanged.
115
109
  * @internal
116
110
  */
117
- export declare function solveGL4Stage(state: GL4State, h: number, gInverseFn: (x: readonly number[]) => Float64Array, dgInverseFn: (x: readonly number[]) => Float64Array, opts: {
111
+ export declare function gl4Step(state: GL4State, h: number, gInverseFn: (x: readonly number[]) => Float64Array, dgInverseFn: (x: readonly number[]) => Float64Array, opts: {
118
112
  picardTol: number;
119
113
  picardMaxIter: number;
120
- }): StageSolveResult;
114
+ }): GL4StepResult;
121
115
  /**
122
116
  * GL4 symplectic integrator on the canonical (x, p) geodesic Hamiltonian.
123
117
  *
@@ -163,10 +157,11 @@ export declare function solveGL4Stage(state: GL4State, h: number, gInverseFn: (x
163
157
  * @param initialState — canonical (x, p) at τ = 0. Units follow the
164
158
  * `gInverseFn` convention (see above).
165
159
  * @param options — see {@link GL4Options}:
166
- * - `steps` — integer step count (dimensionless).
167
- * - `tauMax` — affine-parameter extent (seconds in canonical SI).
168
- * - `gInverseFn(x)[μ][ν]` — inverse metric g^{μν}(x).
169
- * - `dgInverseFn(x)[λ][μ][ν]` — ∂_λ g^{μν}(x).
160
+ * - `steps` — positive integer step count (dimensionless).
161
+ * - `tauMax` — positive finite affine-parameter extent (seconds in
162
+ * canonical SI). The integrator runs forward from τ = 0 only.
163
+ * - `gInverseFn(x)[μ*dim + ν]` — inverse metric g^{μν}(x), row-major flat.
164
+ * - `dgInverseFn(x)[λ*dim² + μ*dim + ν]` — ∂_λ g^{μν}(x), flat.
170
165
  * - `picardTol` — convergence tolerance (dimensionless, default 1e-12).
171
166
  * - `picardMaxIter` — fixed-point iteration cap (dimensionless, default 50).
172
167
  * - `hMin` — step-halving floor (same units as `tauMax / steps`).
@@ -174,8 +169,14 @@ export declare function solveGL4Stage(state: GL4State, h: number, gInverseFn: (x
174
169
  * @returns `steps + 1` snapshots: index `0` is the initial state, index `n`
175
170
  * is the state after `n` steps (τ = n · h). Each snapshot carries `tau`,
176
171
  * `x`, `p` (and optional `v` = g^{μν} p_ν) in the units chosen above.
177
- * @throws NumericalBackendError if `initialState.x[1] < domainMinRadius`.
172
+ * @throws NumericalBackendError if `steps` is not a positive integer, if
173
+ * `tauMax` is not a positive finite number, or if
174
+ * `initialState.x[1] < domainMinRadius`. The two option checks run before
175
+ * any metric evaluation.
178
176
  * @throws GL4ConvergenceError if Picard fails even after step-halving to h_min.
177
+ * Any other error thrown by `gInverseFn` or `dgInverseFn` (a domain
178
+ * crossing the caller signals by throwing, or a programming error) is
179
+ * rethrown unchanged; it is not halved away.
179
180
  *
180
181
  * @public
181
182
  */
@@ -1 +1 @@
1
- {"version":3,"file":"gl4-integrator.d.ts","sourceRoot":"","sources":["../../src/numerical/gl4-integrator.ts"],"names":[],"mappings":"AA4BA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,QAAQ;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;qCACiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;gFAC4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,CAAC;IAC5D;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,CAAC;IAC7D,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;qCAEiC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC3F;AAED;;;;;;;GAOG;AACH,UAAU,gBAAgB;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACjE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAClE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAClE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AA2FD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,CAAC,EAAE,MAAM,EACT,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,EAClD,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,EACnD,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACjD,gBAAgB,CAYlB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,QAAQ,EACtB,OAAO,EAAE,UAAU,GAClB,SAAS,WAAW,EAAE,CAmGxB"}
1
+ {"version":3,"file":"gl4-integrator.d.ts","sourceRoot":"","sources":["../../src/numerical/gl4-integrator.ts"],"names":[],"mappings":"AA4BA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,QAAQ;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;qCACiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;gFAC4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,CAAC;IAC5D;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,CAAC;IAC7D,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;qCAEiC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC3F;AAgDD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,QAAQ,EACf,CAAC,EAAE,MAAM,EACT,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,EAClD,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,EACnD,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACjD,aAAa,CA6Bf;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,QAAQ,EACtB,OAAO,EAAE,UAAU,GAClB,SAAS,WAAW,EAAE,CA0GxB"}
@@ -17,9 +17,9 @@
17
17
  * p_μ = g_μν dx^ν/dτ — not (x, v). This is what makes the flow symplectic
18
18
  * on T*M.
19
19
  *
20
- * This module holds the types, the Butcher constants, the implicit Picard
21
- * stage solver (`solveGL4Stage`, internal), and the integrator entry point
22
- * `integrateGeodesicGL4`.
20
+ * This module holds the types, the Butcher constants, the one-step driver
21
+ * (`gl4Step`, internal; the implicit Picard stages are MathTS
22
+ * `gaussLegendre4`'s), and the integrator entry point `integrateGeodesicGL4`.
23
23
  *
24
24
  * @module numerical/gl4-integrator
25
25
  */
@@ -41,14 +41,15 @@ export { GL4_A, GL4_B, GL4_C } from '@danielsimonjr/mathts-functions';
41
41
  *
42
42
  * `dg[μ*dim² + ν*dim + ρ] = ∂_μ g^{νρ}`. A coefficient that is exactly 0 is
43
43
  * skipped, so `0 * NaN` does not poison a component the term does not enter.
44
+ * `xBuf` is a reused coordinate buffer of length `dim`; it is the array the
45
+ * metric closures receive, so it is a plain `number[]` and needs no cast.
44
46
  */
45
47
  function geodesicDeriv(y, gInverseFn, dgInverseFn, xBuf) {
46
48
  const dim = xBuf.length;
47
49
  for (let i = 0; i < dim; i++)
48
50
  xBuf[i] = y[i];
49
- const coords = xBuf;
50
- const gInv = gInverseFn(coords);
51
- const dgInv = dgInverseFn(coords);
51
+ const gInv = gInverseFn(xBuf);
52
+ const dgInv = dgInverseFn(xBuf);
52
53
  const out = new Array(dim * 2);
53
54
  for (let mu = 0; mu < dim; mu++) {
54
55
  let dx = 0;
@@ -76,15 +77,21 @@ function geodesicDeriv(y, gInverseFn, dgInverseFn, xBuf) {
76
77
  }
77
78
  return out;
78
79
  }
79
- /** One GL4 step of the geodesic Hamiltonian, via MathTS `gaussLegendre4`. */
80
- function advanceGl4(state, h, gInverseFn, dgInverseFn, opts) {
80
+ /**
81
+ * One GL4 step of the geodesic Hamiltonian, via MathTS `gaussLegendre4`.
82
+ * Throws `GL4ConvergenceError` with a message matching
83
+ * `/Picard iteration did not converge/` when the Picard cap is exhausted;
84
+ * any other error from the metric closures propagates unchanged.
85
+ * @internal
86
+ */
87
+ export function gl4Step(state, h, gInverseFn, dgInverseFn, opts) {
81
88
  const dim = state.x.length;
82
89
  const y0 = new Array(dim * 2);
83
90
  for (let i = 0; i < dim; i++) {
84
91
  y0[i] = state.x[i];
85
92
  y0[dim + i] = state.p[i];
86
93
  }
87
- const xBuf = new Float64Array(dim);
94
+ const xBuf = new Array(dim).fill(0);
88
95
  let solved;
89
96
  try {
90
97
  solved = gaussLegendre4((_t, y) => geodesicDeriv(y, gInverseFn, dgInverseFn, xBuf), y0, [0, h], { steps: 1, picardTol: opts.picardTol, picardMaxIter: opts.picardMaxIter });
@@ -102,29 +109,6 @@ function advanceGl4(state, h, gInverseFn, dgInverseFn, opts) {
102
109
  }
103
110
  return { x: y1.slice(0, dim), p: y1.slice(dim), iterations };
104
111
  }
105
- /**
106
- * One GL4 step, reported in the stage-result shape the stage tests read.
107
- *
108
- * The step itself is MathTS `gaussLegendre4`. In flat space `p` is constant,
109
- * so both stage momenta equal that advanced `p`. Throws `GL4ConvergenceError`
110
- * with a message matching `/Picard iteration did not converge/` when the
111
- * Picard cap is exhausted.
112
- *
113
- * @internal
114
- */
115
- export function solveGL4Stage(state, h, gInverseFn, dgInverseFn, opts) {
116
- const step = advanceGl4(state, h, gInverseFn, dgInverseFn, opts);
117
- const dim = step.p.length;
118
- const zeros = new Array(dim).fill(0);
119
- // In flat space p is constant, so both stage momenta equal the advanced p.
120
- return {
121
- stageX: [step.x.slice(), step.x.slice()],
122
- stageP: [step.p.slice(), step.p.slice()],
123
- stageDx: [zeros, zeros.slice()],
124
- stageDp: [zeros.slice(), zeros.slice()],
125
- iterations: step.iterations,
126
- };
127
- }
128
112
  // ---------------------------------------------------------------------------
129
113
  // Integrator entry-point (Task 3, Phase 1a-iii)
130
114
  // ---------------------------------------------------------------------------
@@ -173,10 +157,11 @@ export function solveGL4Stage(state, h, gInverseFn, dgInverseFn, opts) {
173
157
  * @param initialState — canonical (x, p) at τ = 0. Units follow the
174
158
  * `gInverseFn` convention (see above).
175
159
  * @param options — see {@link GL4Options}:
176
- * - `steps` — integer step count (dimensionless).
177
- * - `tauMax` — affine-parameter extent (seconds in canonical SI).
178
- * - `gInverseFn(x)[μ][ν]` — inverse metric g^{μν}(x).
179
- * - `dgInverseFn(x)[λ][μ][ν]` — ∂_λ g^{μν}(x).
160
+ * - `steps` — positive integer step count (dimensionless).
161
+ * - `tauMax` — positive finite affine-parameter extent (seconds in
162
+ * canonical SI). The integrator runs forward from τ = 0 only.
163
+ * - `gInverseFn(x)[μ*dim + ν]` — inverse metric g^{μν}(x), row-major flat.
164
+ * - `dgInverseFn(x)[λ*dim² + μ*dim + ν]` — ∂_λ g^{μν}(x), flat.
180
165
  * - `picardTol` — convergence tolerance (dimensionless, default 1e-12).
181
166
  * - `picardMaxIter` — fixed-point iteration cap (dimensionless, default 50).
182
167
  * - `hMin` — step-halving floor (same units as `tauMax / steps`).
@@ -184,21 +169,31 @@ export function solveGL4Stage(state, h, gInverseFn, dgInverseFn, opts) {
184
169
  * @returns `steps + 1` snapshots: index `0` is the initial state, index `n`
185
170
  * is the state after `n` steps (τ = n · h). Each snapshot carries `tau`,
186
171
  * `x`, `p` (and optional `v` = g^{μν} p_ν) in the units chosen above.
187
- * @throws NumericalBackendError if `initialState.x[1] < domainMinRadius`.
172
+ * @throws NumericalBackendError if `steps` is not a positive integer, if
173
+ * `tauMax` is not a positive finite number, or if
174
+ * `initialState.x[1] < domainMinRadius`. The two option checks run before
175
+ * any metric evaluation.
188
176
  * @throws GL4ConvergenceError if Picard fails even after step-halving to h_min.
177
+ * Any other error thrown by `gInverseFn` or `dgInverseFn` (a domain
178
+ * crossing the caller signals by throwing, or a programming error) is
179
+ * rethrown unchanged; it is not halved away.
189
180
  *
190
181
  * @public
191
182
  */
192
183
  export function integrateGeodesicGL4(initialState, options) {
193
184
  const { steps, tauMax, gInverseFn, dgInverseFn, picardTol = 1e-12, picardMaxIter = 50, hMin, domainMinRadius, onStep, } = options;
185
+ if (!Number.isInteger(steps) || steps <= 0) {
186
+ throw new NumericalBackendError(`GL4 integrator: steps must be a positive integer, got ${steps}`);
187
+ }
188
+ if (!Number.isFinite(tauMax) || tauMax <= 0) {
189
+ throw new NumericalBackendError(`GL4 integrator: tauMax must be a positive finite number, got ${tauMax}`);
190
+ }
194
191
  if (domainMinRadius !== undefined && initialState.x[1] < domainMinRadius) {
195
192
  throw new NumericalBackendError(`GL4 integrator: initial r=${initialState.x[1]} < domainMinRadius=${domainMinRadius} (domain violation)`);
196
193
  }
197
194
  const h = tauMax / steps;
198
195
  const hFloor = hMin ?? h * 1e-9;
199
- const snapshots = [
200
- { tau: 0, x: initialState.x.slice(), p: initialState.p.slice() },
201
- ];
196
+ const snapshots = [{ tau: 0, x: initialState.x.slice(), p: initialState.p.slice() }];
202
197
  let x = initialState.x.slice();
203
198
  let p = initialState.p.slice();
204
199
  const stateDim = x.length;
@@ -225,14 +220,18 @@ export function integrateGeodesicGL4(initialState, options) {
225
220
  let subH = trialH;
226
221
  while (subH >= hFloor) {
227
222
  try {
228
- advanced = advanceGl4({ x, p }, subH, gInverseFn, dgInverseFn, {
223
+ advanced = gl4Step({ x, p }, subH, gInverseFn, dgInverseFn, {
229
224
  picardTol,
230
225
  picardMaxIter,
231
226
  });
232
227
  stepSucceeded = true;
233
228
  break;
234
229
  }
235
- catch {
230
+ catch (err) {
231
+ // Only a Picard failure is a reason to halve. A throw from the metric
232
+ // closures (a domain crossing the caller signals, or a bug) is that error.
233
+ if (!(err instanceof GL4ConvergenceError))
234
+ throw err;
236
235
  subH /= 2;
237
236
  halvings++;
238
237
  }