universal-physics-tensor 10.0.0 → 12.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.
- package/README.md +39 -36
- package/bin/upt.mjs +13 -1
- package/data/applied-cases.json +1892 -0
- package/data/applied-cases.schema.json +194 -0
- package/data/atlas/atlas.json +25 -25
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +6 -6
- package/data/atlas/oscillators.json +7 -7
- package/data/atlas/waves.json +14 -14
- package/data/atlas/witness-results.json +11 -11
- package/data/bridge-catalog.json +389 -230
- package/data/bridge-catalog.schema.json +45 -7
- package/data/units.json +6 -25
- package/dist/atlas/applicability.d.ts.map +1 -1
- package/dist/atlas/applicability.js +21 -15
- package/dist/atlas/applicability.js.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
- package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
- package/dist/atlas/benchmark/loader.js +2 -2
- package/dist/atlas/benchmark/loader.js.map +1 -1
- package/dist/atlas/benchmark/stats.d.ts +2 -2
- package/dist/atlas/benchmark/stats.d.ts.map +1 -1
- package/dist/atlas/benchmark/stats.js +9 -15
- package/dist/atlas/benchmark/stats.js.map +1 -1
- package/dist/atlas/catalog-formal-ref.d.ts +26 -3
- package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
- package/dist/atlas/catalog-formal-ref.js +52 -5
- package/dist/atlas/catalog-formal-ref.js.map +1 -1
- package/dist/atlas/chain-pipeline.d.ts.map +1 -1
- package/dist/atlas/chain-pipeline.js +7 -8
- package/dist/atlas/chain-pipeline.js.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.js +8 -12
- package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
- package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges.js +27 -39
- package/dist/atlas/diffusion/bridges.js.map +1 -1
- package/dist/atlas/diffusion/dimensions.d.ts +6 -14
- package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
- package/dist/atlas/diffusion/dimensions.js +8 -16
- package/dist/atlas/diffusion/dimensions.js.map +1 -1
- package/dist/atlas/diffusion/models.d.ts +3 -3
- package/dist/atlas/diffusion/models.d.ts.map +1 -1
- package/dist/atlas/diffusion/models.js +5 -10
- package/dist/atlas/diffusion/models.js.map +1 -1
- package/dist/atlas/diffusion/numerics.d.ts +16 -4
- package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
- package/dist/atlas/diffusion/numerics.js +38 -24
- package/dist/atlas/diffusion/numerics.js.map +1 -1
- package/dist/atlas/link-prediction.d.ts +106 -3
- package/dist/atlas/link-prediction.d.ts.map +1 -1
- package/dist/atlas/link-prediction.js +212 -66
- package/dist/atlas/link-prediction.js.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.js +7 -11
- package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.js +6 -7
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.js +23 -34
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
- package/dist/atlas/oscillators/dimensions.d.ts +9 -21
- package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
- package/dist/atlas/oscillators/dimensions.js +9 -21
- package/dist/atlas/oscillators/dimensions.js.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
- package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.js +17 -15
- package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
- package/dist/atlas/oscillators/models.d.ts.map +1 -1
- package/dist/atlas/oscillators/models.js +2 -6
- package/dist/atlas/oscillators/models.js.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
- package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.js +60 -40
- package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
- package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
- package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/phase-translation.js +3 -4
- package/dist/atlas/oscillators/phase-translation.js.map +1 -1
- package/dist/atlas/oscillators/position-translation.d.ts +68 -7
- package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/position-translation.js +123 -12
- package/dist/atlas/oscillators/position-translation.js.map +1 -1
- package/dist/atlas/oscillators/rejections.d.ts +0 -2
- package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
- package/dist/atlas/oscillators/rejections.js +0 -7
- package/dist/atlas/oscillators/rejections.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +35 -25
- package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
- package/dist/atlas/physjs-entries.generated.js +37 -25
- package/dist/atlas/physjs-entries.generated.js.map +1 -1
- package/dist/atlas/physjs-ref.d.ts +34 -31
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +55 -53
- package/dist/atlas/physjs-ref.js.map +1 -1
- package/dist/atlas/physjs-reviewed.d.ts +1 -1
- package/dist/atlas/physjs-reviewed.js +15 -15
- package/dist/atlas/physjs-reviewed.js.map +1 -1
- package/dist/atlas/poster/statements.d.ts +0 -19
- package/dist/atlas/poster/statements.d.ts.map +1 -1
- package/dist/atlas/poster/statements.js +1 -1
- package/dist/atlas/poster/statements.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +1 -1
- package/dist/atlas/proof-target.js +1 -1
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/atlas/regime.d.ts +1 -1
- package/dist/atlas/regime.d.ts.map +1 -1
- package/dist/atlas/regime.js +1 -1
- package/dist/atlas/regime.js.map +1 -1
- package/dist/atlas/text-overlap.d.ts +23 -0
- package/dist/atlas/text-overlap.d.ts.map +1 -0
- package/dist/atlas/text-overlap.js +41 -0
- package/dist/atlas/text-overlap.js.map +1 -0
- package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/waves/bridges-closure.js +2 -6
- package/dist/atlas/waves/bridges-closure.js.map +1 -1
- package/dist/atlas/waves/bridges.d.ts.map +1 -1
- package/dist/atlas/waves/bridges.js +32 -48
- package/dist/atlas/waves/bridges.js.map +1 -1
- package/dist/atlas/waves/models.d.ts +5 -6
- package/dist/atlas/waves/models.d.ts.map +1 -1
- package/dist/atlas/waves/models.js +7 -13
- package/dist/atlas/waves/models.js.map +1 -1
- package/dist/atlas/waves/numerics.d.ts.map +1 -1
- package/dist/atlas/waves/numerics.js +10 -3
- package/dist/atlas/waves/numerics.js.map +1 -1
- package/dist/atlas/witness-numeric.d.ts +30 -0
- package/dist/atlas/witness-numeric.d.ts.map +1 -1
- package/dist/atlas/witness-numeric.js +53 -0
- package/dist/atlas/witness-numeric.js.map +1 -1
- package/dist/atlas/witness-specs.d.ts.map +1 -1
- package/dist/atlas/witness-specs.js +19 -0
- package/dist/atlas/witness-specs.js.map +1 -1
- package/dist/atlas/witness-symbolic.d.ts +75 -3
- package/dist/atlas/witness-symbolic.d.ts.map +1 -1
- package/dist/atlas/witness-symbolic.js +116 -10
- package/dist/atlas/witness-symbolic.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +13 -8
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +26 -2
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/catalog-types.js +11 -1
- package/dist/bridges/catalog-types.js.map +1 -1
- package/dist/bridges/evaluation-errors.d.ts +31 -1
- package/dist/bridges/evaluation-errors.d.ts.map +1 -1
- package/dist/bridges/evaluation-errors.js +20 -2
- package/dist/bridges/evaluation-errors.js.map +1 -1
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +7 -5
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +27 -12
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +11 -0
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +14 -5
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +35 -3
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +117 -23
- package/dist/bridges/holds.js.map +1 -1
- package/dist/bridges/notices.d.ts.map +1 -1
- package/dist/bridges/notices.js +5 -5
- package/dist/bridges/notices.js.map +1 -1
- package/dist/bridges/relation-eval.d.ts +4 -4
- package/dist/bridges/relation-eval.d.ts.map +1 -1
- package/dist/bridges/relation-eval.js +15 -16
- package/dist/bridges/relation-eval.js.map +1 -1
- package/dist/bridges/sensitivity.d.ts.map +1 -1
- package/dist/bridges/sensitivity.js +3 -3
- package/dist/bridges/sensitivity.js.map +1 -1
- package/dist/bridges/validity.d.ts +33 -0
- package/dist/bridges/validity.d.ts.map +1 -0
- package/dist/bridges/validity.js +67 -0
- package/dist/bridges/validity.js.map +1 -0
- package/dist/canonical/entries/atomic.js +1 -3
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
- package/dist/canonical/entries/condensed-matter.js +4 -5
- package/dist/canonical/entries/condensed-matter.js.map +1 -1
- package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
- package/dist/canonical/entries/dimensional-classics.js +3 -4
- package/dist/canonical/entries/dimensional-classics.js.map +1 -1
- package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
- package/dist/canonical/entries/electromagnetism.js +4 -10
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +3 -7
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/mechanics.js +4 -6
- package/dist/canonical/entries/mechanics.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +9 -17
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/entries/relativity.d.ts.map +1 -1
- package/dist/canonical/entries/relativity.js +6 -6
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/fixed-points.d.ts +94 -0
- package/dist/canonical/fixed-points.d.ts.map +1 -0
- package/dist/canonical/fixed-points.js +81 -0
- package/dist/canonical/fixed-points.js.map +1 -0
- package/dist/canonical/linkage.d.ts.map +1 -1
- package/dist/canonical/linkage.js +25 -44
- package/dist/canonical/linkage.js.map +1 -1
- package/dist/canonical/normal-form.d.ts.map +1 -1
- package/dist/canonical/normal-form.js +5 -11
- package/dist/canonical/normal-form.js.map +1 -1
- package/dist/canonical/structural.d.ts +21 -21
- package/dist/canonical/structural.d.ts.map +1 -1
- package/dist/canonical/structural.js +40 -19
- package/dist/canonical/structural.js.map +1 -1
- package/dist/cases/catalog-checks.d.ts +10 -0
- package/dist/cases/catalog-checks.d.ts.map +1 -0
- package/dist/cases/catalog-checks.js +241 -0
- package/dist/cases/catalog-checks.js.map +1 -0
- package/dist/cases/catalog.d.ts +83 -0
- package/dist/cases/catalog.d.ts.map +1 -0
- package/dist/cases/catalog.js +118 -0
- package/dist/cases/catalog.js.map +1 -0
- package/dist/cases/engine.d.ts +13 -0
- package/dist/cases/engine.d.ts.map +1 -0
- package/dist/cases/engine.js +179 -0
- package/dist/cases/engine.js.map +1 -0
- package/dist/cases/index.d.ts.map +1 -1
- package/dist/cases/index.js +5 -7
- package/dist/cases/index.js.map +1 -1
- package/dist/cases/methods.d.ts +215 -0
- package/dist/cases/methods.d.ts.map +1 -0
- package/dist/cases/methods.js +743 -0
- package/dist/cases/methods.js.map +1 -0
- package/dist/cases/quadrature.d.ts +7 -9
- package/dist/cases/quadrature.d.ts.map +1 -1
- package/dist/cases/quadrature.js +28 -32
- package/dist/cases/quadrature.js.map +1 -1
- package/dist/cases/types.d.ts +12 -0
- package/dist/cases/types.d.ts.map +1 -1
- package/dist/cases/types.js.map +1 -1
- package/dist/cli/args.d.ts +25 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +30 -8
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bindings.d.ts.map +1 -1
- package/dist/cli/bindings.js +5 -4
- package/dist/cli/bindings.js.map +1 -1
- package/dist/cli/command.d.ts +11 -1
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/_atlas-map.d.ts +0 -9
- package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-map.js +8 -18
- package/dist/cli/commands/_atlas-map.js.map +1 -1
- package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-route.js +6 -2
- package/dist/cli/commands/_atlas-route.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts +1 -0
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +9 -9
- package/dist/cli/commands/_discovery-opts.js.map +1 -1
- package/dist/cli/commands/atlas.d.ts.map +1 -1
- package/dist/cli/commands/atlas.js +8 -5
- package/dist/cli/commands/atlas.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +8 -1
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/axes.d.ts.map +1 -1
- package/dist/cli/commands/axes.js +20 -1
- package/dist/cli/commands/axes.js.map +1 -1
- package/dist/cli/commands/confront.d.ts.map +1 -1
- package/dist/cli/commands/confront.js +8 -14
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +22 -22
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +122 -73
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +1 -0
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +67 -39
- package/dist/cli/commands/evaluate.js.map +1 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +24 -3
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/ground.d.ts.map +1 -1
- package/dist/cli/commands/ground.js +7 -1
- package/dist/cli/commands/ground.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +84 -11
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli/commands/metric.d.ts.map +1 -1
- package/dist/cli/commands/metric.js +12 -9
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/path.d.ts +10 -0
- package/dist/cli/commands/path.d.ts.map +1 -1
- package/dist/cli/commands/path.js +25 -3
- package/dist/cli/commands/path.js.map +1 -1
- package/dist/cli/commands/probe.d.ts.map +1 -1
- package/dist/cli/commands/probe.js +59 -16
- package/dist/cli/commands/probe.js.map +1 -1
- package/dist/cli/commands/regime.d.ts.map +1 -1
- package/dist/cli/commands/regime.js +1 -0
- package/dist/cli/commands/regime.js.map +1 -1
- package/dist/cli/commands/retrieve.d.ts.map +1 -1
- package/dist/cli/commands/retrieve.js +1 -0
- package/dist/cli/commands/retrieve.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +1 -0
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/symbolic.d.ts.map +1 -1
- package/dist/cli/commands/symbolic.js +19 -28
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.d.ts.map +1 -1
- package/dist/cli/commands/testplan.js +4 -2
- package/dist/cli/commands/testplan.js.map +1 -1
- package/dist/cli/determination.d.ts +1 -0
- package/dist/cli/determination.d.ts.map +1 -1
- package/dist/cli/determination.js.map +1 -1
- package/dist/cli/expr-print.d.ts +0 -2
- package/dist/cli/expr-print.d.ts.map +1 -1
- package/dist/cli/expr-print.js +7 -31
- package/dist/cli/expr-print.js.map +1 -1
- package/dist/cli/flag-help.d.ts +1 -0
- package/dist/cli/flag-help.d.ts.map +1 -1
- package/dist/cli/flag-help.js +1 -0
- package/dist/cli/flag-help.js.map +1 -1
- package/dist/cli/graphs.d.ts +2 -0
- package/dist/cli/graphs.d.ts.map +1 -1
- package/dist/cli/graphs.js +1 -0
- package/dist/cli/graphs.js.map +1 -1
- package/dist/cli/main.d.ts +8 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +19 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/numeric-flag.d.ts +12 -0
- package/dist/cli/numeric-flag.d.ts.map +1 -0
- package/dist/cli/numeric-flag.js +44 -0
- package/dist/cli/numeric-flag.js.map +1 -0
- package/dist/cli/output.d.ts +28 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +23 -0
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/record-reach.js +2 -2
- package/dist/cli/record-reach.js.map +1 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +6 -5
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli/record.d.ts +1 -5
- package/dist/cli/record.d.ts.map +1 -1
- package/dist/cli/record.js +9 -8
- package/dist/cli/record.js.map +1 -1
- package/dist/cli/search-index.d.ts.map +1 -1
- package/dist/cli/search-index.js +7 -6
- package/dist/cli/search-index.js.map +1 -1
- package/dist/cli/statuses.d.ts +0 -2
- package/dist/cli/statuses.d.ts.map +1 -1
- package/dist/cli/statuses.js +12 -9
- package/dist/cli/statuses.js.map +1 -1
- package/dist/cli/stored-results.d.ts +7 -0
- package/dist/cli/stored-results.d.ts.map +1 -0
- package/dist/cli/stored-results.js +23 -0
- package/dist/cli/stored-results.js.map +1 -0
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +8 -5
- package/dist/cli/version.js.map +1 -1
- package/dist/cli-api.d.ts +36 -5
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +30 -4
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/algebraic-equivalence.d.ts +43 -0
- package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
- package/dist/composition/algebraic-equivalence.js +115 -0
- package/dist/composition/algebraic-equivalence.js.map +1 -0
- package/dist/composition/axes.d.ts +0 -6
- package/dist/composition/axes.d.ts.map +1 -1
- package/dist/composition/axes.js +6 -6
- package/dist/composition/axes.js.map +1 -1
- package/dist/composition/axis-audit.d.ts +47 -20
- package/dist/composition/axis-audit.d.ts.map +1 -1
- package/dist/composition/axis-audit.js +82 -9
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +17 -0
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +102 -55
- package/dist/composition/bridge-analysis.js.map +1 -1
- package/dist/composition/canonical-compare.d.ts +40 -0
- package/dist/composition/canonical-compare.d.ts.map +1 -1
- package/dist/composition/canonical-compare.js +122 -24
- package/dist/composition/canonical-compare.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +3 -3
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +11 -38
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-json.js +2 -2
- package/dist/composition/canonical-json.js.map +1 -1
- package/dist/composition/catalog-graph.d.ts.map +1 -1
- package/dist/composition/catalog-graph.js +2 -5
- package/dist/composition/catalog-graph.js.map +1 -1
- package/dist/composition/chain-candidate.d.ts +8 -0
- package/dist/composition/chain-candidate.d.ts.map +1 -1
- package/dist/composition/chain-candidate.js +9 -2
- package/dist/composition/chain-candidate.js.map +1 -1
- package/dist/composition/chain-match.d.ts +6 -3
- package/dist/composition/chain-match.d.ts.map +1 -1
- package/dist/composition/chain-match.js +4 -1
- package/dist/composition/chain-match.js.map +1 -1
- package/dist/composition/chain-result.d.ts.map +1 -1
- package/dist/composition/chain-result.js +2 -14
- package/dist/composition/chain-result.js.map +1 -1
- package/dist/composition/compose-symbolic.d.ts.map +1 -1
- package/dist/composition/compose-symbolic.js +3 -2
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +13 -5
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/composition-recovery.d.ts.map +1 -1
- package/dist/composition/composition-recovery.js +4 -7
- package/dist/composition/composition-recovery.js.map +1 -1
- package/dist/composition/consequence.d.ts +15 -5
- package/dist/composition/consequence.d.ts.map +1 -1
- package/dist/composition/consequence.js +6 -4
- package/dist/composition/consequence.js.map +1 -1
- package/dist/composition/discovery.d.ts +129 -9
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +171 -67
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +21 -2
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +23 -1
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/enumerate.d.ts.map +1 -1
- package/dist/composition/enumerate.js +18 -3
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +35 -11
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +60 -39
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +3 -12
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +7 -20
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts +1 -1
- package/dist/composition/expr-eval.d.ts.map +1 -1
- package/dist/composition/expr-eval.js +6 -15
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/expr-simplify.d.ts +26 -14
- package/dist/composition/expr-simplify.d.ts.map +1 -1
- package/dist/composition/expr-simplify.js +64 -72
- package/dist/composition/expr-simplify.js.map +1 -1
- package/dist/composition/formula-shape.d.ts +23 -4
- package/dist/composition/formula-shape.d.ts.map +1 -1
- package/dist/composition/formula-shape.js +57 -17
- package/dist/composition/formula-shape.js.map +1 -1
- package/dist/composition/graph-structure.d.ts +98 -0
- package/dist/composition/graph-structure.d.ts.map +1 -0
- package/dist/composition/graph-structure.js +167 -0
- package/dist/composition/graph-structure.js.map +1 -0
- package/dist/composition/graph-viz-svg.d.ts.map +1 -1
- package/dist/composition/graph-viz-svg.js +1 -1
- package/dist/composition/graph-viz-svg.js.map +1 -1
- package/dist/composition/graph-viz.d.ts.map +1 -1
- package/dist/composition/graph-viz.js +8 -37
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/grounding.d.ts.map +1 -1
- package/dist/composition/grounding.js +19 -7
- package/dist/composition/grounding.js.map +1 -1
- package/dist/composition/identifiability.d.ts +91 -4
- package/dist/composition/identifiability.d.ts.map +1 -1
- package/dist/composition/identifiability.js +363 -6
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +8 -4
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +3 -2
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/mathts-quiet.d.ts +7 -8
- package/dist/composition/mathts-quiet.d.ts.map +1 -1
- package/dist/composition/mathts-quiet.js +7 -16
- package/dist/composition/mathts-quiet.js.map +1 -1
- package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
- package/dist/composition/mathts-scalar-symbols.js +2 -1
- package/dist/composition/mathts-scalar-symbols.js.map +1 -1
- package/dist/composition/own-equation-magnitude.d.ts +95 -0
- package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
- package/dist/composition/own-equation-magnitude.js +270 -0
- package/dist/composition/own-equation-magnitude.js.map +1 -0
- package/dist/composition/probe/backend-protocol.d.ts +3 -0
- package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
- package/dist/composition/probe/backend-protocol.js.map +1 -1
- package/dist/composition/probe/candidate-store.d.ts +1 -0
- package/dist/composition/probe/candidate-store.d.ts.map +1 -1
- package/dist/composition/probe/candidate-store.js +1 -0
- package/dist/composition/probe/candidate-store.js.map +1 -1
- package/dist/composition/probe/corpus.d.ts +8 -4
- package/dist/composition/probe/corpus.d.ts.map +1 -1
- package/dist/composition/probe/corpus.js +23 -12
- package/dist/composition/probe/corpus.js.map +1 -1
- package/dist/composition/probe/dataset.d.ts +18 -0
- package/dist/composition/probe/dataset.d.ts.map +1 -1
- package/dist/composition/probe/dataset.js +95 -50
- package/dist/composition/probe/dataset.js.map +1 -1
- package/dist/composition/probe/experiment-design.d.ts +7 -1
- package/dist/composition/probe/experiment-design.d.ts.map +1 -1
- package/dist/composition/probe/experiment-design.js +44 -24
- package/dist/composition/probe/experiment-design.js.map +1 -1
- package/dist/composition/probe/falsify.d.ts +2 -0
- package/dist/composition/probe/falsify.d.ts.map +1 -1
- package/dist/composition/probe/falsify.js +2 -0
- package/dist/composition/probe/falsify.js.map +1 -1
- package/dist/composition/probe/fit.d.ts +7 -0
- package/dist/composition/probe/fit.d.ts.map +1 -1
- package/dist/composition/probe/fit.js +46 -22
- package/dist/composition/probe/fit.js.map +1 -1
- package/dist/composition/probe/frontier.d.ts.map +1 -1
- package/dist/composition/probe/frontier.js +33 -15
- package/dist/composition/probe/frontier.js.map +1 -1
- package/dist/composition/probe/generator.d.ts +30 -1
- package/dist/composition/probe/generator.d.ts.map +1 -1
- package/dist/composition/probe/generator.js +58 -36
- package/dist/composition/probe/generator.js.map +1 -1
- package/dist/composition/probe/index.d.ts +14 -0
- package/dist/composition/probe/index.d.ts.map +1 -1
- package/dist/composition/probe/index.js +6 -0
- package/dist/composition/probe/index.js.map +1 -1
- package/dist/composition/probe/limits.d.ts +25 -1
- package/dist/composition/probe/limits.d.ts.map +1 -1
- package/dist/composition/probe/limits.js +53 -11
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/pipeline.d.ts +5 -0
- package/dist/composition/probe/pipeline.d.ts.map +1 -1
- package/dist/composition/probe/pipeline.js +73 -24
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/power-law.d.ts +121 -0
- package/dist/composition/probe/power-law.d.ts.map +1 -0
- package/dist/composition/probe/power-law.js +251 -0
- package/dist/composition/probe/power-law.js.map +1 -0
- package/dist/composition/probe/problem.d.ts +8 -4
- package/dist/composition/probe/problem.d.ts.map +1 -1
- package/dist/composition/probe/problem.js +177 -49
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.js +1 -1
- package/dist/composition/probe/report.js.map +1 -1
- package/dist/composition/probe/residual.d.ts +7 -1
- package/dist/composition/probe/residual.d.ts.map +1 -1
- package/dist/composition/probe/residual.js +10 -7
- package/dist/composition/probe/residual.js.map +1 -1
- package/dist/composition/probe/run-manifest.d.ts +1 -0
- package/dist/composition/probe/run-manifest.d.ts.map +1 -1
- package/dist/composition/probe/run-manifest.js.map +1 -1
- package/dist/composition/probe/scalar-search.d.ts +50 -0
- package/dist/composition/probe/scalar-search.d.ts.map +1 -0
- package/dist/composition/probe/scalar-search.js +169 -0
- package/dist/composition/probe/scalar-search.js.map +1 -0
- package/dist/composition/probe/scoring.d.ts +1 -0
- package/dist/composition/probe/scoring.d.ts.map +1 -1
- package/dist/composition/probe/scoring.js.map +1 -1
- package/dist/composition/probe/structure.d.ts +82 -17
- package/dist/composition/probe/structure.d.ts.map +1 -1
- package/dist/composition/probe/structure.js +129 -55
- package/dist/composition/probe/structure.js.map +1 -1
- package/dist/composition/probe/study.d.ts +31 -9
- package/dist/composition/probe/study.d.ts.map +1 -1
- package/dist/composition/probe/study.js +235 -184
- package/dist/composition/probe/study.js.map +1 -1
- package/dist/composition/probe/t-tail.d.ts +16 -0
- package/dist/composition/probe/t-tail.d.ts.map +1 -0
- package/dist/composition/probe/t-tail.js +29 -0
- package/dist/composition/probe/t-tail.js.map +1 -0
- package/dist/composition/probe/types.d.ts +3 -0
- package/dist/composition/probe/types.d.ts.map +1 -1
- package/dist/composition/probe/types.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts +52 -12
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +107 -60
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/quantity-clusters.d.ts +48 -0
- package/dist/composition/quantity-clusters.d.ts.map +1 -0
- package/dist/composition/quantity-clusters.js +98 -0
- package/dist/composition/quantity-clusters.js.map +1 -0
- package/dist/composition/rational-exponent.d.ts +40 -0
- package/dist/composition/rational-exponent.d.ts.map +1 -0
- package/dist/composition/rational-exponent.js +65 -0
- package/dist/composition/rational-exponent.js.map +1 -0
- package/dist/composition/representative-values.d.ts +22 -0
- package/dist/composition/representative-values.d.ts.map +1 -1
- package/dist/composition/representative-values.js +29 -0
- package/dist/composition/representative-values.js.map +1 -1
- package/dist/composition/retrodiction.d.ts +15 -0
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +12 -4
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/user-equation.d.ts +1 -0
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/composition/user-equation.js +3 -2
- package/dist/composition/user-equation.js.map +1 -1
- package/dist/core/assignment.d.ts +19 -0
- package/dist/core/assignment.d.ts.map +1 -0
- package/dist/core/assignment.js +19 -0
- package/dist/core/assignment.js.map +1 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.d.ts.map +1 -0
- package/dist/core/compare.js +46 -0
- package/dist/core/compare.js.map +1 -0
- package/dist/core/constants.d.ts +42 -41
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +71 -51
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +7 -0
- package/dist/core/data-file.d.ts.map +1 -1
- package/dist/core/data-file.js +17 -0
- package/dist/core/data-file.js.map +1 -1
- package/dist/core/format.d.ts +36 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +39 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/hash.d.ts +14 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +17 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/json-schema.d.ts +2 -0
- package/dist/core/json-schema.d.ts.map +1 -1
- package/dist/core/json-schema.js +14 -13
- package/dist/core/json-schema.js.map +1 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/labeled-tensor.js +0 -8
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/mathts-read.d.ts +25 -0
- package/dist/core/mathts-read.d.ts.map +1 -0
- package/dist/core/mathts-read.js +51 -0
- package/dist/core/mathts-read.js.map +1 -0
- package/dist/core/tensor.d.ts.map +1 -1
- package/dist/core/tensor.js +24 -0
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts +5 -5
- package/dist/diff/bridge-ast-gradient.d.ts +27 -23
- package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-ast-gradient.js +75 -173
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/diff/bridge-gradient.d.ts +19 -6
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +19 -11
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +3 -0
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/algebra.d.ts +18 -0
- package/dist/dimensional/algebra.d.ts.map +1 -1
- package/dist/dimensional/algebra.js +41 -1
- package/dist/dimensional/algebra.js.map +1 -1
- package/dist/dimensional/ast-builders.d.ts +7 -0
- package/dist/dimensional/ast-builders.d.ts.map +1 -1
- package/dist/dimensional/ast-builders.js +11 -0
- package/dist/dimensional/ast-builders.js.map +1 -1
- package/dist/dimensional/ast-leaves.d.ts +81 -0
- package/dist/dimensional/ast-leaves.d.ts.map +1 -0
- package/dist/dimensional/ast-leaves.js +146 -0
- package/dist/dimensional/ast-leaves.js.map +1 -0
- package/dist/dimensional/ast-types.d.ts +15 -0
- package/dist/dimensional/ast-types.d.ts.map +1 -1
- package/dist/dimensional/ast-types.js.map +1 -1
- package/dist/dimensional/buckingham.d.ts.map +1 -1
- package/dist/dimensional/buckingham.js +15 -27
- package/dist/dimensional/buckingham.js.map +1 -1
- package/dist/dimensional/constant-rows.js +9 -9
- package/dist/dimensional/constant-rows.js.map +1 -1
- package/dist/dimensional/curvature-composite.d.ts +1 -1
- package/dist/dimensional/curvature-composite.js.map +1 -1
- package/dist/dimensional/dimension-inference.d.ts.map +1 -1
- package/dist/dimensional/dimension-inference.js +1 -2
- package/dist/dimensional/dimension-inference.js.map +1 -1
- package/dist/dimensional/errors.d.ts +1 -1
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/errors.js +1 -15
- package/dist/dimensional/errors.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +24 -11
- package/dist/dimensional/exact-scale.d.ts.map +1 -1
- package/dist/dimensional/exact-scale.js +122 -130
- package/dist/dimensional/exact-scale.js.map +1 -1
- package/dist/dimensional/gauge-field.d.ts.map +1 -1
- package/dist/dimensional/gauge-field.js +2 -2
- package/dist/dimensional/gauge-field.js.map +1 -1
- package/dist/dimensional/hyphen-names.d.ts +12 -2
- package/dist/dimensional/hyphen-names.d.ts.map +1 -1
- package/dist/dimensional/hyphen-names.js +44 -19
- package/dist/dimensional/hyphen-names.js.map +1 -1
- package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
- package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
- package/dist/dimensional/mathts-unit-delegation.js +187 -0
- package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
- package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
- package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
- package/dist/dimensional/mathts-unit-wrapper.js +190 -0
- package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
- package/dist/dimensional/metric.d.ts.map +1 -1
- package/dist/dimensional/metric.js +0 -1
- package/dist/dimensional/metric.js.map +1 -1
- package/dist/dimensional/scalar-lowering.d.ts +21 -0
- package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
- package/dist/dimensional/scalar-lowering.js +45 -0
- package/dist/dimensional/scalar-lowering.js.map +1 -0
- package/dist/dimensional/symbolic-constants.d.ts +9 -0
- package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
- package/dist/dimensional/symbolic-constants.js +13 -1
- package/dist/dimensional/symbolic-constants.js.map +1 -1
- package/dist/dimensional/types.d.ts +36 -0
- package/dist/dimensional/types.d.ts.map +1 -1
- package/dist/dimensional/types.js +45 -7
- package/dist/dimensional/types.js.map +1 -1
- package/dist/dimensional/unit-data.d.ts +5 -1
- package/dist/dimensional/unit-data.d.ts.map +1 -1
- package/dist/dimensional/unit-data.js +30 -6
- package/dist/dimensional/unit-data.js.map +1 -1
- package/dist/dimensional/units.d.ts +2 -0
- package/dist/dimensional/units.d.ts.map +1 -1
- package/dist/dimensional/units.js +59 -3
- package/dist/dimensional/units.js.map +1 -1
- package/dist/dimensional/validator.d.ts +2 -0
- package/dist/dimensional/validator.d.ts.map +1 -1
- package/dist/dimensional/validator.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/numerical/christoffel-flat.d.ts.map +1 -1
- package/dist/numerical/christoffel-flat.js +3 -2
- package/dist/numerical/christoffel-flat.js.map +1 -1
- package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
- package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
- package/dist/numerical/connection-lowering-helpers.js +11 -15
- package/dist/numerical/connection-lowering-helpers.js.map +1 -1
- package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
- package/dist/numerical/covariant-eikonal.js +34 -11
- package/dist/numerical/covariant-eikonal.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +3 -2
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/errors.d.ts.map +1 -1
- package/dist/numerical/errors.js +0 -3
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/finite-difference.d.ts +22 -0
- package/dist/numerical/finite-difference.d.ts.map +1 -0
- package/dist/numerical/finite-difference.js +27 -0
- package/dist/numerical/finite-difference.js.map +1 -0
- package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
- package/dist/numerical/geodesic-integrator.js +22 -14
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/geometrized.d.ts.map +1 -1
- package/dist/numerical/geometrized.js +0 -1
- package/dist/numerical/geometrized.js.map +1 -1
- package/dist/numerical/mathts-engine.d.ts.map +1 -1
- package/dist/numerical/mathts-engine.js +10 -24
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.d.ts.map +1 -1
- package/dist/numerical/metric-inverse.js +83 -46
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/null-ray-integrator.d.ts +2 -1
- package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
- package/dist/numerical/null-ray-integrator.js +12 -12
- package/dist/numerical/null-ray-integrator.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js +2 -2
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/pderiv.d.ts.map +1 -1
- package/dist/numerical/pderiv.js +2 -6
- package/dist/numerical/pderiv.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +0 -36
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +41 -87
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/quadrature.d.ts.map +1 -1
- package/dist/numerical/quadrature.js +11 -13
- package/dist/numerical/quadrature.js.map +1 -1
- package/dist/numerical/rk4-trajectory.d.ts +10 -0
- package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
- package/dist/numerical/rk4-trajectory.js +37 -0
- package/dist/numerical/rk4-trajectory.js.map +1 -0
- package/dist/numerical/schwarzschild.d.ts +14 -0
- package/dist/numerical/schwarzschild.d.ts.map +1 -0
- package/dist/numerical/schwarzschild.js +17 -0
- package/dist/numerical/schwarzschild.js.map +1 -0
- package/dist/numerical/spacetime-metrics.d.ts +12 -0
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +72 -56
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/numerical/statistics.d.ts +24 -0
- package/dist/numerical/statistics.d.ts.map +1 -0
- package/dist/numerical/statistics.js +52 -0
- package/dist/numerical/statistics.js.map +1 -0
- package/dist/numerical/strides.d.ts +3 -2
- package/dist/numerical/strides.d.ts.map +1 -1
- package/dist/numerical/strides.js +3 -10
- package/dist/numerical/strides.js.map +1 -1
- package/dist/numerical/tensor-engine.d.ts +21 -0
- package/dist/numerical/tensor-engine.d.ts.map +1 -1
- package/dist/numerical/tensor-engine.js +12 -0
- package/dist/numerical/tensor-engine.js.map +1 -1
- package/dist/relations/regime.d.ts +10 -0
- package/dist/relations/regime.d.ts.map +1 -1
- package/dist/relations/regime.js +18 -1
- package/dist/relations/regime.js.map +1 -1
- package/package.json +9 -12
- package/dist/cases/brownian-sphere.d.ts +0 -68
- package/dist/cases/brownian-sphere.d.ts.map +0 -1
- package/dist/cases/brownian-sphere.js +0 -354
- package/dist/cases/brownian-sphere.js.map +0 -1
- package/dist/cases/damped-resonator.d.ts +0 -23
- package/dist/cases/damped-resonator.d.ts.map +0 -1
- package/dist/cases/damped-resonator.js +0 -224
- package/dist/cases/damped-resonator.js.map +0 -1
- package/dist/cases/kepler-rv.d.ts +0 -13
- package/dist/cases/kepler-rv.d.ts.map +0 -1
- package/dist/cases/kepler-rv.js +0 -172
- package/dist/cases/kepler-rv.js.map +0 -1
- package/dist/cases/lumped-cooling.d.ts +0 -46
- package/dist/cases/lumped-cooling.d.ts.map +0 -1
- package/dist/cases/lumped-cooling.js +0 -261
- package/dist/cases/lumped-cooling.js.map +0 -1
- package/dist/cases/resistor-noise.d.ts +0 -14
- package/dist/cases/resistor-noise.d.ts.map +0 -1
- package/dist/cases/resistor-noise.js +0 -215
- package/dist/cases/resistor-noise.js.map +0 -1
- package/dist/cases/skin-depth.d.ts +0 -21
- package/dist/cases/skin-depth.d.ts.map +0 -1
- package/dist/cases/skin-depth.js +0 -174
- package/dist/cases/skin-depth.js.map +0 -1
|
@@ -30,10 +30,12 @@
|
|
|
30
30
|
* @module numerical/covariant-eikonal
|
|
31
31
|
* @public
|
|
32
32
|
*/
|
|
33
|
+
import { findRoot, hermiteInterp } from '@danielsimonjr/mathts-functions';
|
|
33
34
|
import { integrateGeodesicGL4 } from './gl4-integrator.js';
|
|
34
|
-
import { C_SI
|
|
35
|
+
import { C_SI } from '../core/constants.js';
|
|
36
|
+
import { schwarzschildRadius } from './schwarzschild.js';
|
|
35
37
|
import { reconstructNullPr } from './null-ic.js';
|
|
36
|
-
// ─── Physical constants (canonical CODATA
|
|
38
|
+
// ─── Physical constants (canonical CODATA 2022 + exact-SI definitions) ────
|
|
37
39
|
// Imported from src/core/constants.ts (v0.5.1 PC-1 canonicalization).
|
|
38
40
|
const c_SI = C_SI;
|
|
39
41
|
const c2_SI = c_SI * c_SI;
|
|
@@ -46,7 +48,7 @@ const c2_SI = c_SI * c_SI;
|
|
|
46
48
|
* @internal
|
|
47
49
|
*/
|
|
48
50
|
function schwarzschildRs(M_kg) {
|
|
49
|
-
return (
|
|
51
|
+
return schwarzschildRadius(M_kg);
|
|
50
52
|
}
|
|
51
53
|
/**
|
|
52
54
|
* Returns the contravariant Schwarzschild metric closure g^{μν}(x).
|
|
@@ -267,17 +269,38 @@ export async function evaluateCovariantEikonalNumerical(inputs) {
|
|
|
267
269
|
dgInverseFn,
|
|
268
270
|
domainMinRadius: r_s * 1.01,
|
|
269
271
|
});
|
|
270
|
-
// Find the first snapshot with r ≤ R_near_m and
|
|
272
|
+
// Find the first snapshot with r ≤ R_near_m and locate the crossing INSIDE
|
|
273
|
+
// that step with the cubic Hermite interpolant of r(τ) and t(τ), whose
|
|
274
|
+
// derivatives are the 4-velocity v^μ = g^{μν} p_ν the snapshot already
|
|
275
|
+
// carries, by MathTS `findRoot` (Brent, residual stop only). A straight line
|
|
276
|
+
// between the two snapshots is O(h²) in the crossing, and with an impact
|
|
277
|
+
// parameter r(τ) curves by c² b²/r³: at Earth–Mars with b = 5e10 m that line
|
|
278
|
+
// put the crossing about 300 m off, a 1e-6 s excess on a 4e-6 s delay (25 %),
|
|
279
|
+
// independent of the mass. The Hermite crossing is O(h⁴).
|
|
280
|
+
const velocity = (snap) => {
|
|
281
|
+
const gInv = gInverseFn(snap.x);
|
|
282
|
+
const v = [0, 0, 0, 0];
|
|
283
|
+
for (let mu = 0; mu < 4; mu++) {
|
|
284
|
+
for (let nu = 0; nu < 4; nu++)
|
|
285
|
+
v[mu] += gInv[mu * 4 + nu] * snap.p[nu];
|
|
286
|
+
}
|
|
287
|
+
return v;
|
|
288
|
+
};
|
|
271
289
|
let t_geodesic;
|
|
272
290
|
for (let i = 1; i < snapshots.length; i++) {
|
|
273
|
-
const
|
|
274
|
-
const
|
|
291
|
+
const prev = snapshots[i - 1];
|
|
292
|
+
const curr = snapshots[i];
|
|
293
|
+
const rPrev = prev.x[1];
|
|
294
|
+
const rCurr = curr.x[1];
|
|
275
295
|
if (rPrev > R_near_m && rCurr <= R_near_m) {
|
|
276
|
-
const
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
const
|
|
280
|
-
|
|
296
|
+
const dtau = curr.tau - prev.tau;
|
|
297
|
+
const vPrev = velocity(prev);
|
|
298
|
+
const vCurr = velocity(curr);
|
|
299
|
+
const rAt = (s) => hermiteInterp([0, 1], [rPrev, rCurr], [dtau * vPrev[1], dtau * vCurr[1]], s);
|
|
300
|
+
const sCross = rCurr === R_near_m
|
|
301
|
+
? 1
|
|
302
|
+
: findRoot((s) => rAt(s) - R_near_m, 0, 1, { tol: 1e-15 * R_near_m, xtol: 0, maxIter: 100 });
|
|
303
|
+
t_geodesic = hermiteInterp([0, 1], [prev.x[0], curr.x[0]], [dtau * vPrev[0], dtau * vCurr[0]], sCross);
|
|
281
304
|
break;
|
|
282
305
|
}
|
|
283
306
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"covariant-eikonal.js","sourceRoot":"","sources":["../../src/numerical/covariant-eikonal.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Covariant-eikonal method, used by catalog relation be-37.\n *\n * Provides `evaluateCovariantEikonalNumerical`, which encodes the\n * covariant-eikonal equation\n *\n * g^μν ∇_μ ∇_ν S = 0\n *\n * via the connection layer (Tasks 2-3 + 12-14 of v0.4.0). The eikonal\n * residual is **0 by construction**: the null wave-covector\n *\n * k_μ = ∂_μ S = (E, E, 0, 0) (energy + radial component only)\n *\n * satisfies g^μν k_μ k_ν = 0 identically for the +,−,−,− Schwarzschild\n * metric. No numerical integration is performed for this quantity.\n *\n * `shapiroDelaySec` is computed by **GL4-driven null-geodesic integration**\n * on the canonical (x, p) state in the Schwarzschild spacetime (v0.5.0 Task\n * 12, Phase 2c). The photon propagates from `r = R_far_m` down to\n * `r = R_near_m`; coordinate time at the endpoint minus the flat-space\n * straight-line transit time is returned as the Shapiro delay.\n *\n * For the default radial geometry (impact parameter `b_m = 0`) the\n * integrator reproduces the closed-form `(2GM/c³) · ln(R_far/R_near)`\n * (Task 11 cross-checks this to ±2×10⁻³).\n *\n * @see tests/numerical/covariant-eikonal-real.test.ts (Task 12 [U])\n * @see tests/dimensional/covariant-derivative-preview.test.ts (Task 17 [U]/Task 11 [U])\n * @see docs/planning/v0.5.0-Implementation-Plan.md Task 12\n * @module numerical/covariant-eikonal\n * @public\n */\n\nimport { integrateGeodesicGL4 } from './gl4-integrator.js';\nimport { C_SI, G_SI } from '../core/constants.js';\nimport { reconstructNullPr } from './null-ic.js';\n\n// ─── Physical constants (canonical CODATA 2018 + exact-SI definitions) ────\n// Imported from src/core/constants.ts (v0.5.1 PC-1 canonicalization).\nconst c_SI = C_SI;\nconst c2_SI = c_SI * c_SI;\n\n/**\n * Input parameters for the covariant-eikonal method, used by catalog relation be-37.\n * @public\n */\nexport interface CovariantEikonalInputs {\n /** Gravitational source mass in kilograms (must be > 0). */\n readonly M_kg: number;\n /** Far-point radius in metres, i.e. the signal origin (must be > 0). */\n readonly R_far_m: number;\n /** Near-point radius in metres, i.e. the signal destination\n * (must be > 0, ≤ R_far_m, and outside the Schwarzschild horizon). */\n readonly R_near_m: number;\n /**\n * Optional impact parameter `b` in metres for the null geodesic. The\n * photon's angular momentum is set such that the minimum r (closest\n * approach) is `b` in the flat-space limit; `p_φ = b · c` in the\n * affine-parameter normalization used here (`p_t = −c²`).\n *\n * Default `0` — purely radial null geodesic, which reproduces the\n * closed-form `(2GM/c³) · ln(R_far/R_near)` Shapiro delay. Non-zero\n * `b` modifies the geometry and the closed-form comparator changes\n * to `(2GM/c³) · ln((R_far + √(R_far²−b²)) / (R_near + √(R_near²−b²)))`\n * for the single-leg path (closest-approach not crossed).\n *\n * Must satisfy `b ≤ R_near` if non-zero (otherwise the photon cannot\n * reach `R_near` without crossing closest approach).\n */\n readonly b_m?: number;\n /**\n * Optional GL4 step count override. Default `2048` — sufficient for\n * the default radial geometry to reach ≤1e-6 relative agreement with\n * `evaluateShapiroDelay` on Earth/Mars/Sun scales (Task 11).\n */\n readonly steps?: number;\n}\n\n/**\n * Result of `evaluateCovariantEikonalNumerical`.\n * @public\n */\nexport interface CovariantEikonalResult {\n /**\n * Dimensionless relative residual of the eikonal equation g^μν p_μ p_ν = 0,\n * COMPUTED at the initial wave-covector p_μ (whose radial component is solved\n * by `reconstructNullPr` to make the covector genuinely null at r = R_far).\n *\n * Reported as |g^μν p_μ p_ν| normalized by the sum of the |term| magnitudes\n * (the raw contraction is a near-cancellation of ~1e16-scale terms). A\n * well-constructed null covector yields ~machine-ε, confirming the\n * construction numerically rather than asserting it.\n */\n readonly eikonalResidual: number;\n\n /**\n * Shapiro coordinate-time delay in seconds, computed via GL4\n * null-geodesic integration on the canonical (x, p) state.\n *\n * **v0.5.0 Task 12:** real value (was a documented stub returning 0 in\n * v0.4.0). For the default radial geometry (`b_m = 0`) this agrees with\n * the closed-form `(2GM/c³) · ln(R_far/R_near)` to ≤1e-6 relative at\n * the default step count (Task 11 [U]).\n */\n readonly shapiroDelaySec: number;\n\n /**\n * Optional closed-form cross-check value (seconds). Not populated by\n * this evaluator — callers cross-check externally against\n * `evaluateShapiroDelay`.\n */\n readonly closedFormDelaySec?: number;\n}\n\n/**\n * Schwarzschild radius `r_s = 2GM/c²`.\n *\n * Mirrors `tests/fixtures/schwarzschild.ts` (kept private here to avoid\n * a src→tests dependency).\n *\n * @internal\n */\nfunction schwarzschildRs(M_kg: number): number {\n return (2 * G_SI * M_kg) / c2_SI;\n}\n\n/**\n * Returns the contravariant Schwarzschild metric closure g^{μν}(x).\n *\n * SI convention with c² on `g_{tt}` — mirrors the test fixture so the\n * coordinate time `t = x^0` carries seconds and `p_t = −c²` produces\n * `dt/dτ ≈ 1` (τ ≈ coord time far from horizon).\n *\n * @internal\n */\nfunction buildGInverseFn(\n M_kg: number,\n): (x: ReadonlyArray<number>) => Float64Array {\n const r_s = schwarzschildRs(M_kg);\n return function gInverse(x: ReadonlyArray<number>): Float64Array {\n // v0.9.0 O-1: flat row-major Float64Array(16), gInv[mu*4+nu] = g^{μν}.\n const r = x[1];\n const theta = x[2];\n const f = 1 - r_s / r;\n const sinT = Math.sin(theta);\n const gInv = new Float64Array(16);\n gInv[0 * 4 + 0] = -1 / (f * c2_SI);\n gInv[1 * 4 + 1] = f;\n gInv[2 * 4 + 2] = 1 / (r * r);\n gInv[3 * 4 + 3] = 1 / (r * r * sinT * sinT);\n return gInv;\n };\n}\n\n/**\n * Returns ∂_λ g^{μν}(x) as a flat row-major Float64Array(64) with\n * index order `dg[λ*16 + μ*4 + ν]` (v0.9.0 O-1, Decision #1 layout).\n *\n * Only ∂_r and ∂_θ entries are non-zero (static, axisymmetric metric).\n * Sign of `dg[1*16+0*4+0] = ∂_r g^{tt} = +r_s/(r²(1−r_s/r)²c²)` matches the\n * Task 0 fixture fix (positive — incorrectly negative in the v0.5.0\n * pre-Task-3 fixture; reversal would push the photon outward).\n *\n * @internal\n */\nfunction buildDgInverseFn(\n M_kg: number,\n): (x: ReadonlyArray<number>) => Float64Array {\n const r_s = schwarzschildRs(M_kg);\n return function dgInverse(x: ReadonlyArray<number>): Float64Array {\n const r = x[1];\n const theta = x[2];\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const f = 1 - r_s / r;\n const dg = new Float64Array(64);\n // ∂_r entries (axis 1)\n dg[1 * 16 + 0 * 4 + 0] = r_s / (r * r * f * f * c2_SI);\n dg[1 * 16 + 1 * 4 + 1] = r_s / (r * r);\n dg[1 * 16 + 2 * 4 + 2] = -2 / (r * r * r);\n dg[1 * 16 + 3 * 4 + 3] = -2 / (r * r * r * sinT * sinT);\n // ∂_θ entry (axis 2)\n dg[2 * 16 + 3 * 4 + 3] = (-2 * cosT) / (r * r * sinT * sinT * sinT);\n return dg;\n };\n}\n\n/**\n * Covariant-eikonal method, used by catalog relation be-37.\n *\n * Returns:\n * - `eikonalResidual`: the computed relative residual of g^μν p_μ p_ν on the\n * null wave-covector (~machine-ε; confirms the null construction).\n * - `shapiroDelaySec`: GL4-integrated coordinate-time delay relative to\n * the flat-space straight-line transit, in seconds.\n *\n * **Algorithm — null geodesic in Schwarzschild via GL4.**\n *\n * 1. Schwarzschild radius `r_s = 2GM/c²`. Domain guard `R_near_m > r_s`\n * (else the photon path crosses the event horizon).\n * 2. Set initial state at `(t=0, r=R_far_m, θ=π/2, φ=0)`. Affine-parameter\n * normalization `p_t = −c²` → `dt/dτ = 1/(1−r_s/r) ≈ 1` far from the\n * horizon (τ ≈ coord time). Set `p_θ = 0` (motion confined to equatorial\n * plane), `p_φ = b_m · c` (Killing-vector angular momentum\n * corresponding to flat-limit impact parameter `b_m`).\n * 3. Solve `p_r` from the null condition `g^μν p_μ p_ν = 0` at the\n * initial point, take the negative root (inward motion: `dr/dτ < 0`\n * since `dr/dτ = g^rr p_r = (1−r_s/r) p_r`).\n * 4. Integrate via `integrateGeodesicGL4` for `tauMax` chosen to overshoot\n * `r = R_near_m` (safety factor 1.5 on the flat-space transit time).\n * 5. Walk snapshots; find the first index where `r ≤ R_near_m`. Linearly\n * interpolate `t` between the bracketing snapshots to land exactly on\n * `r = R_near_m`. Take that `t` as the geodesic coord-time transit.\n * 6. Flat-space reference: for a straight-line null ray with impact\n * parameter `b`, time to go from `r_far` to `r_near` (single leg, no\n * closest-approach crossing) is `(√(r_far²−b²) − √(r_near²−b²))/c`.\n * For `b = 0` (default) this reduces to `(R_far − R_near)/c`.\n * 7. `shapiroDelaySec = t_geodesic − t_flat`.\n *\n * **Sign convention.** Shapiro delay is positive (light slowed by the\n * gravitational potential). A negative result indicates an integration\n * or reference-frame bug.\n *\n * **Impact parameter `b_m`.** Default `0` (radial). The default geometry\n * reproduces the closed-form `evaluateShapiroDelay` to ≤1e-6 relative at\n * 2048 steps for solar-scale Earth/Mars distances (Task 11 cross-check).\n * Non-zero `b_m` requires `b_m ≤ R_near_m` (closest approach `r_min ≈ b`\n * must not lie between R_far and R_near).\n *\n * @param inputs - Source mass + far/near radii (+ optional `b_m`, `steps`):\n * - `M_kg` — gravitational source mass in **kilograms** (SI). Must be a\n * finite positive number.\n * - `R_far_m` — origin radial coordinate in **metres** (SI). The signal\n * start point.\n * - `R_near_m` — destination radial coordinate in **metres** (SI). Must\n * satisfy `0 < R_near_m ≤ R_far_m` and `R_near_m > 1.01 · r_s` (stay\n * comfortably outside the Schwarzschild horizon `r_s = 2GM/c²`).\n * - `b_m` — optional impact parameter in **metres** (SI). Default `0`\n * (purely radial geodesic). Non-zero `b_m` requires `b_m ≤ R_near_m`.\n * - `steps` — optional GL4 integrator step count (dimensionless). Default\n * 2048. Higher = tighter agreement with closed-form Shapiro at\n * additional CPU cost.\n * @returns `{ eikonalResidual, shapiroDelaySec }`:\n * - `eikonalResidual` — **dimensionless** relative residual of\n * `g^μν p_μ p_ν = 0`, computed on the null wave-covector (~machine-ε).\n * - `shapiroDelaySec` — gravitational-time-delay in **seconds** (SI).\n * Positive by sign convention (light is slowed in the potential well).\n * @throws RangeError on out-of-domain inputs.\n *\n * @example\n * ```typescript\n * import { evaluateCovariantEikonalNumerical, G_SI, C_SI } from 'universal-physics-tensor';\n *\n * const M_SUN = 1.989e30; // kg\n * // Radial null geodesic: signal from Earth orbit to solar surface\n * const R_far_m = 1.496e11; // ~1 AU\n * const R_near_m = 6.957e8; // ~solar radius\n *\n * const result = await evaluateCovariantEikonalNumerical({\n * M_kg: M_SUN,\n * R_far_m,\n * R_near_m,\n * });\n * // result.eikonalResidual ≈ 1e-16 (computed; confirms the null construction)\n * // result.shapiroDelaySec ≈ 2e-4 s (Shapiro delay near the Sun)\n * ```\n *\n * @public\n */\nexport async function evaluateCovariantEikonalNumerical(\n inputs: CovariantEikonalInputs,\n): Promise<CovariantEikonalResult> {\n const { M_kg, R_far_m, R_near_m, b_m = 0, steps = 2048 } = inputs;\n\n // ─── Domain guards ──────────────────────────────────────────────────────\n if (!Number.isFinite(M_kg) || M_kg <= 0) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: M_kg must be a finite positive number, got ${M_kg}`,\n );\n }\n if (!Number.isFinite(R_far_m) || R_far_m <= 0) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: R_far_m must be a finite positive number, got ${R_far_m}`,\n );\n }\n if (!Number.isFinite(R_near_m) || R_near_m <= 0) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: R_near_m must be a finite positive number, got ${R_near_m}`,\n );\n }\n if (R_near_m > R_far_m) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: R_near_m (${R_near_m}) must be ≤ R_far_m (${R_far_m})`,\n );\n }\n if (!Number.isFinite(b_m) || b_m < 0) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: b_m must be a finite non-negative number, got ${b_m}`,\n );\n }\n if (b_m > R_near_m) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: b_m (${b_m}) must be ≤ R_near_m (${R_near_m}); closest-approach geometry not supported`,\n );\n }\n const r_s = schwarzschildRs(M_kg);\n if (R_near_m <= r_s * 1.01) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: R_near_m (${R_near_m}) must be safely outside the Schwarzschild horizon r_s=${r_s}`,\n );\n }\n\n // ─── Shapiro delay via GL4 null-geodesic integration ────────────────────\n const gInverseFn = buildGInverseFn(M_kg);\n const dgInverseFn = buildDgInverseFn(M_kg);\n\n // Initial state at (t=0, r=R_far, θ=π/2, φ=0). Equatorial plane (p_θ=0).\n // Affine-parameter normalization: p_t = -c² makes dt/dτ ≈ 1 far from\n // horizon, so τ ≈ coord time t and tauMax can be set in units of seconds.\n const x0: number[] = [0, R_far_m, Math.PI / 2, 0];\n const p_t = -c2_SI;\n const p_phi = b_m * c_SI; // Killing-vector conservation: classical b = p_φ/(|p_t|/c²·c) = p_φ/c.\n const p_theta = 0;\n\n // Solve null condition g^μν p_μ p_ν = 0 for p_r at the initial point.\n // Delegated to reconstructNullPr (src/numerical/null-ic.ts) so PC-1.5\n // bench harnesses measure the same production arithmetic.\n const gInv0 = gInverseFn(x0);\n let p_r: number;\n try {\n p_r = reconstructNullPr(gInv0, p_t, p_phi);\n } catch (cause) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: null condition has no real p_r at R_far=${R_far_m} (impact parameter b=${b_m} too large for this geometry)`,\n { cause },\n );\n }\n\n const initialState = {\n x: x0,\n p: [p_t, p_r, p_theta, p_phi],\n };\n\n // ─── Eikonal residual ────────────────────────────────────────────────────\n // The eikonal equation is g^μν ∂_μS ∂_νS = 0; the wave-covector is the\n // geodesic momentum p_μ, with p_r solved by reconstructNullPr so the covector\n // is genuinely null at the initial point. Report the ACTUAL contraction\n // g^μν p_μ p_ν, normalized by the sum of |term| magnitudes to a dimensionless\n // relative residual (the raw value is a near-cancellation of ~1e16-scale\n // terms). This is computed, not asserted: ~machine-ε confirms the null\n // construction rather than the earlier hardcoded 0 on a non-null (E,E,0,0).\n let rawResidual = 0;\n let residualScale = 0;\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) {\n const term = gInv0[mu * 4 + nu] * initialState.p[mu] * initialState.p[nu];\n rawResidual += term;\n residualScale += Math.abs(term);\n }\n }\n const eikonalResidual = residualScale > 0 ? Math.abs(rawResidual) / residualScale : 0;\n\n // Choose tauMax to overshoot R_near with safety margin. With p_t = -c²\n // and far from horizon, dr/dτ ≈ -c for b=0 (radial); slightly slower for\n // non-zero b. Flat-space single-leg time = (√(R_far² − b²) − √(R_near² − b²))/c.\n const flatLegFar = Math.sqrt(R_far_m * R_far_m - b_m * b_m);\n const flatLegNear = Math.sqrt(R_near_m * R_near_m - b_m * b_m);\n const t_flat = (flatLegFar - flatLegNear) / c_SI;\n const tauMax = t_flat * 1.5;\n\n const snapshots = integrateGeodesicGL4(initialState, {\n steps,\n tauMax,\n gInverseFn,\n dgInverseFn,\n domainMinRadius: r_s * 1.01,\n });\n\n // Find the first snapshot with r ≤ R_near_m and linearly interpolate t.\n let t_geodesic: number | undefined;\n for (let i = 1; i < snapshots.length; i++) {\n const rPrev = snapshots[i - 1].x[1];\n const rCurr = snapshots[i].x[1];\n if (rPrev > R_near_m && rCurr <= R_near_m) {\n const tPrev = snapshots[i - 1].x[0];\n const tCurr = snapshots[i].x[0];\n // Linear interpolation: alpha = (R_near - rPrev) / (rCurr - rPrev), in [0, 1].\n const alpha = (R_near_m - rPrev) / (rCurr - rPrev);\n t_geodesic = tPrev + alpha * (tCurr - tPrev);\n break;\n }\n }\n if (t_geodesic === undefined) {\n const rFinal = snapshots[snapshots.length - 1].x[1];\n throw new Error(\n `evaluateCovariantEikonalNumerical: photon did not reach R_near=${R_near_m} within tauMax=${tauMax} s; final r=${rFinal}. Try increasing steps or tauMax.`,\n );\n }\n\n const shapiroDelaySec = t_geodesic - t_flat;\n\n return { eikonalResidual, shapiroDelaySec };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"covariant-eikonal.js","sourceRoot":"","sources":["../../src/numerical/covariant-eikonal.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Covariant-eikonal method, used by catalog relation be-37.\n *\n * Provides `evaluateCovariantEikonalNumerical`, which encodes the\n * covariant-eikonal equation\n *\n * g^μν ∇_μ ∇_ν S = 0\n *\n * via the connection layer (Tasks 2-3 + 12-14 of v0.4.0). The eikonal\n * residual is **0 by construction**: the null wave-covector\n *\n * k_μ = ∂_μ S = (E, E, 0, 0) (energy + radial component only)\n *\n * satisfies g^μν k_μ k_ν = 0 identically for the +,−,−,− Schwarzschild\n * metric. No numerical integration is performed for this quantity.\n *\n * `shapiroDelaySec` is computed by **GL4-driven null-geodesic integration**\n * on the canonical (x, p) state in the Schwarzschild spacetime (v0.5.0 Task\n * 12, Phase 2c). The photon propagates from `r = R_far_m` down to\n * `r = R_near_m`; coordinate time at the endpoint minus the flat-space\n * straight-line transit time is returned as the Shapiro delay.\n *\n * For the default radial geometry (impact parameter `b_m = 0`) the\n * integrator reproduces the closed-form `(2GM/c³) · ln(R_far/R_near)`\n * (Task 11 cross-checks this to ±2×10⁻³).\n *\n * @see tests/numerical/covariant-eikonal-real.test.ts (Task 12 [U])\n * @see tests/dimensional/covariant-derivative-preview.test.ts (Task 17 [U]/Task 11 [U])\n * @see docs/planning/v0.5.0-Implementation-Plan.md Task 12\n * @module numerical/covariant-eikonal\n * @public\n */\n\nimport { findRoot, hermiteInterp } from '@danielsimonjr/mathts-functions';\nimport { integrateGeodesicGL4 } from './gl4-integrator.js';\nimport { C_SI } from '../core/constants.js';\nimport { schwarzschildRadius } from './schwarzschild.js';\nimport { reconstructNullPr } from './null-ic.js';\n\n// ─── Physical constants (canonical CODATA 2022 + exact-SI definitions) ────\n// Imported from src/core/constants.ts (v0.5.1 PC-1 canonicalization).\nconst c_SI = C_SI;\nconst c2_SI = c_SI * c_SI;\n\n/**\n * Input parameters for the covariant-eikonal method, used by catalog relation be-37.\n * @public\n */\nexport interface CovariantEikonalInputs {\n /** Gravitational source mass in kilograms (must be > 0). */\n readonly M_kg: number;\n /** Far-point radius in metres, i.e. the signal origin (must be > 0). */\n readonly R_far_m: number;\n /** Near-point radius in metres, i.e. the signal destination\n * (must be > 0, ≤ R_far_m, and outside the Schwarzschild horizon). */\n readonly R_near_m: number;\n /**\n * Optional impact parameter `b` in metres for the null geodesic. The\n * photon's angular momentum is set such that the minimum r (closest\n * approach) is `b` in the flat-space limit; `p_φ = b · c` in the\n * affine-parameter normalization used here (`p_t = −c²`).\n *\n * Default `0` — purely radial null geodesic, which reproduces the\n * closed-form `(2GM/c³) · ln(R_far/R_near)` Shapiro delay. Non-zero\n * `b` modifies the geometry and the closed-form comparator changes\n * to `(2GM/c³) · ln((R_far + √(R_far²−b²)) / (R_near + √(R_near²−b²)))`\n * for the single-leg path (closest-approach not crossed).\n *\n * Must satisfy `b ≤ R_near` if non-zero (otherwise the photon cannot\n * reach `R_near` without crossing closest approach).\n */\n readonly b_m?: number;\n /**\n * Optional GL4 step count override. Default `2048` — sufficient for\n * the default radial geometry to reach ≤1e-6 relative agreement with\n * `evaluateShapiroDelay` on Earth/Mars/Sun scales (Task 11).\n */\n readonly steps?: number;\n}\n\n/**\n * Result of `evaluateCovariantEikonalNumerical`.\n * @public\n */\nexport interface CovariantEikonalResult {\n /**\n * Dimensionless relative residual of the eikonal equation g^μν p_μ p_ν = 0,\n * COMPUTED at the initial wave-covector p_μ (whose radial component is solved\n * by `reconstructNullPr` to make the covector genuinely null at r = R_far).\n *\n * Reported as |g^μν p_μ p_ν| normalized by the sum of the |term| magnitudes\n * (the raw contraction is a near-cancellation of ~1e16-scale terms). A\n * well-constructed null covector yields ~machine-ε, confirming the\n * construction numerically rather than asserting it.\n */\n readonly eikonalResidual: number;\n\n /**\n * Shapiro coordinate-time delay in seconds, computed via GL4\n * null-geodesic integration on the canonical (x, p) state.\n *\n * **v0.5.0 Task 12:** real value (was a documented stub returning 0 in\n * v0.4.0). For the default radial geometry (`b_m = 0`) this agrees with\n * the closed-form `(2GM/c³) · ln(R_far/R_near)` to ≤1e-6 relative at\n * the default step count (Task 11 [U]).\n */\n readonly shapiroDelaySec: number;\n\n /**\n * Optional closed-form cross-check value (seconds). Not populated by\n * this evaluator — callers cross-check externally against\n * `evaluateShapiroDelay`.\n */\n readonly closedFormDelaySec?: number;\n}\n\n/**\n * Schwarzschild radius `r_s = 2GM/c²`.\n *\n * Mirrors `tests/fixtures/schwarzschild.ts` (kept private here to avoid\n * a src→tests dependency).\n *\n * @internal\n */\nfunction schwarzschildRs(M_kg: number): number {\n return schwarzschildRadius(M_kg);\n}\n\n/**\n * Returns the contravariant Schwarzschild metric closure g^{μν}(x).\n *\n * SI convention with c² on `g_{tt}` — mirrors the test fixture so the\n * coordinate time `t = x^0` carries seconds and `p_t = −c²` produces\n * `dt/dτ ≈ 1` (τ ≈ coord time far from horizon).\n *\n * @internal\n */\nfunction buildGInverseFn(\n M_kg: number,\n): (x: ReadonlyArray<number>) => Float64Array {\n const r_s = schwarzschildRs(M_kg);\n return function gInverse(x: ReadonlyArray<number>): Float64Array {\n // v0.9.0 O-1: flat row-major Float64Array(16), gInv[mu*4+nu] = g^{μν}.\n const r = x[1];\n const theta = x[2];\n const f = 1 - r_s / r;\n const sinT = Math.sin(theta);\n const gInv = new Float64Array(16);\n gInv[0 * 4 + 0] = -1 / (f * c2_SI);\n gInv[1 * 4 + 1] = f;\n gInv[2 * 4 + 2] = 1 / (r * r);\n gInv[3 * 4 + 3] = 1 / (r * r * sinT * sinT);\n return gInv;\n };\n}\n\n/**\n * Returns ∂_λ g^{μν}(x) as a flat row-major Float64Array(64) with\n * index order `dg[λ*16 + μ*4 + ν]` (v0.9.0 O-1, Decision #1 layout).\n *\n * Only ∂_r and ∂_θ entries are non-zero (static, axisymmetric metric).\n * Sign of `dg[1*16+0*4+0] = ∂_r g^{tt} = +r_s/(r²(1−r_s/r)²c²)` matches the\n * Task 0 fixture fix (positive — incorrectly negative in the v0.5.0\n * pre-Task-3 fixture; reversal would push the photon outward).\n *\n * @internal\n */\nfunction buildDgInverseFn(\n M_kg: number,\n): (x: ReadonlyArray<number>) => Float64Array {\n const r_s = schwarzschildRs(M_kg);\n return function dgInverse(x: ReadonlyArray<number>): Float64Array {\n const r = x[1];\n const theta = x[2];\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const f = 1 - r_s / r;\n const dg = new Float64Array(64);\n // ∂_r entries (axis 1)\n dg[1 * 16 + 0 * 4 + 0] = r_s / (r * r * f * f * c2_SI);\n dg[1 * 16 + 1 * 4 + 1] = r_s / (r * r);\n dg[1 * 16 + 2 * 4 + 2] = -2 / (r * r * r);\n dg[1 * 16 + 3 * 4 + 3] = -2 / (r * r * r * sinT * sinT);\n // ∂_θ entry (axis 2)\n dg[2 * 16 + 3 * 4 + 3] = (-2 * cosT) / (r * r * sinT * sinT * sinT);\n return dg;\n };\n}\n\n/**\n * Covariant-eikonal method, used by catalog relation be-37.\n *\n * Returns:\n * - `eikonalResidual`: the computed relative residual of g^μν p_μ p_ν on the\n * null wave-covector (~machine-ε; confirms the null construction).\n * - `shapiroDelaySec`: GL4-integrated coordinate-time delay relative to\n * the flat-space straight-line transit, in seconds.\n *\n * **Algorithm — null geodesic in Schwarzschild via GL4.**\n *\n * 1. Schwarzschild radius `r_s = 2GM/c²`. Domain guard `R_near_m > r_s`\n * (else the photon path crosses the event horizon).\n * 2. Set initial state at `(t=0, r=R_far_m, θ=π/2, φ=0)`. Affine-parameter\n * normalization `p_t = −c²` → `dt/dτ = 1/(1−r_s/r) ≈ 1` far from the\n * horizon (τ ≈ coord time). Set `p_θ = 0` (motion confined to equatorial\n * plane), `p_φ = b_m · c` (Killing-vector angular momentum\n * corresponding to flat-limit impact parameter `b_m`).\n * 3. Solve `p_r` from the null condition `g^μν p_μ p_ν = 0` at the\n * initial point, take the negative root (inward motion: `dr/dτ < 0`\n * since `dr/dτ = g^rr p_r = (1−r_s/r) p_r`).\n * 4. Integrate via `integrateGeodesicGL4` for `tauMax` chosen to overshoot\n * `r = R_near_m` (safety factor 1.5 on the flat-space transit time).\n * 5. Walk snapshots; find the first index where `r ≤ R_near_m`. Linearly\n * interpolate `t` between the bracketing snapshots to land exactly on\n * `r = R_near_m`. Take that `t` as the geodesic coord-time transit.\n * 6. Flat-space reference: for a straight-line null ray with impact\n * parameter `b`, time to go from `r_far` to `r_near` (single leg, no\n * closest-approach crossing) is `(√(r_far²−b²) − √(r_near²−b²))/c`.\n * For `b = 0` (default) this reduces to `(R_far − R_near)/c`.\n * 7. `shapiroDelaySec = t_geodesic − t_flat`.\n *\n * **Sign convention.** Shapiro delay is positive (light slowed by the\n * gravitational potential). A negative result indicates an integration\n * or reference-frame bug.\n *\n * **Impact parameter `b_m`.** Default `0` (radial). The default geometry\n * reproduces the closed-form `evaluateShapiroDelay` to ≤1e-6 relative at\n * 2048 steps for solar-scale Earth/Mars distances (Task 11 cross-check).\n * Non-zero `b_m` requires `b_m ≤ R_near_m` (closest approach `r_min ≈ b`\n * must not lie between R_far and R_near).\n *\n * @param inputs - Source mass + far/near radii (+ optional `b_m`, `steps`):\n * - `M_kg` — gravitational source mass in **kilograms** (SI). Must be a\n * finite positive number.\n * - `R_far_m` — origin radial coordinate in **metres** (SI). The signal\n * start point.\n * - `R_near_m` — destination radial coordinate in **metres** (SI). Must\n * satisfy `0 < R_near_m ≤ R_far_m` and `R_near_m > 1.01 · r_s` (stay\n * comfortably outside the Schwarzschild horizon `r_s = 2GM/c²`).\n * - `b_m` — optional impact parameter in **metres** (SI). Default `0`\n * (purely radial geodesic). Non-zero `b_m` requires `b_m ≤ R_near_m`.\n * - `steps` — optional GL4 integrator step count (dimensionless). Default\n * 2048. Higher = tighter agreement with closed-form Shapiro at\n * additional CPU cost.\n * @returns `{ eikonalResidual, shapiroDelaySec }`:\n * - `eikonalResidual` — **dimensionless** relative residual of\n * `g^μν p_μ p_ν = 0`, computed on the null wave-covector (~machine-ε).\n * - `shapiroDelaySec` — gravitational-time-delay in **seconds** (SI).\n * Positive by sign convention (light is slowed in the potential well).\n * @throws RangeError on out-of-domain inputs.\n *\n * @example\n * ```typescript\n * import { evaluateCovariantEikonalNumerical, G_SI, C_SI } from 'universal-physics-tensor';\n *\n * const M_SUN = 1.989e30; // kg\n * // Radial null geodesic: signal from Earth orbit to solar surface\n * const R_far_m = 1.496e11; // ~1 AU\n * const R_near_m = 6.957e8; // ~solar radius\n *\n * const result = await evaluateCovariantEikonalNumerical({\n * M_kg: M_SUN,\n * R_far_m,\n * R_near_m,\n * });\n * // result.eikonalResidual ≈ 1e-16 (computed; confirms the null construction)\n * // result.shapiroDelaySec ≈ 2e-4 s (Shapiro delay near the Sun)\n * ```\n *\n * @public\n */\nexport async function evaluateCovariantEikonalNumerical(\n inputs: CovariantEikonalInputs,\n): Promise<CovariantEikonalResult> {\n const { M_kg, R_far_m, R_near_m, b_m = 0, steps = 2048 } = inputs;\n\n // ─── Domain guards ──────────────────────────────────────────────────────\n if (!Number.isFinite(M_kg) || M_kg <= 0) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: M_kg must be a finite positive number, got ${M_kg}`,\n );\n }\n if (!Number.isFinite(R_far_m) || R_far_m <= 0) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: R_far_m must be a finite positive number, got ${R_far_m}`,\n );\n }\n if (!Number.isFinite(R_near_m) || R_near_m <= 0) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: R_near_m must be a finite positive number, got ${R_near_m}`,\n );\n }\n if (R_near_m > R_far_m) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: R_near_m (${R_near_m}) must be ≤ R_far_m (${R_far_m})`,\n );\n }\n if (!Number.isFinite(b_m) || b_m < 0) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: b_m must be a finite non-negative number, got ${b_m}`,\n );\n }\n if (b_m > R_near_m) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: b_m (${b_m}) must be ≤ R_near_m (${R_near_m}); closest-approach geometry not supported`,\n );\n }\n const r_s = schwarzschildRs(M_kg);\n if (R_near_m <= r_s * 1.01) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: R_near_m (${R_near_m}) must be safely outside the Schwarzschild horizon r_s=${r_s}`,\n );\n }\n\n // ─── Shapiro delay via GL4 null-geodesic integration ────────────────────\n const gInverseFn = buildGInverseFn(M_kg);\n const dgInverseFn = buildDgInverseFn(M_kg);\n\n // Initial state at (t=0, r=R_far, θ=π/2, φ=0). Equatorial plane (p_θ=0).\n // Affine-parameter normalization: p_t = -c² makes dt/dτ ≈ 1 far from\n // horizon, so τ ≈ coord time t and tauMax can be set in units of seconds.\n const x0: number[] = [0, R_far_m, Math.PI / 2, 0];\n const p_t = -c2_SI;\n const p_phi = b_m * c_SI; // Killing-vector conservation: classical b = p_φ/(|p_t|/c²·c) = p_φ/c.\n const p_theta = 0;\n\n // Solve null condition g^μν p_μ p_ν = 0 for p_r at the initial point.\n // Delegated to reconstructNullPr (src/numerical/null-ic.ts) so PC-1.5\n // bench harnesses measure the same production arithmetic.\n const gInv0 = gInverseFn(x0);\n let p_r: number;\n try {\n p_r = reconstructNullPr(gInv0, p_t, p_phi);\n } catch (cause) {\n throw new RangeError(\n `evaluateCovariantEikonalNumerical: null condition has no real p_r at R_far=${R_far_m} (impact parameter b=${b_m} too large for this geometry)`,\n { cause },\n );\n }\n\n const initialState = {\n x: x0,\n p: [p_t, p_r, p_theta, p_phi],\n };\n\n // ─── Eikonal residual ────────────────────────────────────────────────────\n // The eikonal equation is g^μν ∂_μS ∂_νS = 0; the wave-covector is the\n // geodesic momentum p_μ, with p_r solved by reconstructNullPr so the covector\n // is genuinely null at the initial point. Report the ACTUAL contraction\n // g^μν p_μ p_ν, normalized by the sum of |term| magnitudes to a dimensionless\n // relative residual (the raw value is a near-cancellation of ~1e16-scale\n // terms). This is computed, not asserted: ~machine-ε confirms the null\n // construction rather than the earlier hardcoded 0 on a non-null (E,E,0,0).\n let rawResidual = 0;\n let residualScale = 0;\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) {\n const term = gInv0[mu * 4 + nu] * initialState.p[mu] * initialState.p[nu];\n rawResidual += term;\n residualScale += Math.abs(term);\n }\n }\n const eikonalResidual = residualScale > 0 ? Math.abs(rawResidual) / residualScale : 0;\n\n // Choose tauMax to overshoot R_near with safety margin. With p_t = -c²\n // and far from horizon, dr/dτ ≈ -c for b=0 (radial); slightly slower for\n // non-zero b. Flat-space single-leg time = (√(R_far² − b²) − √(R_near² − b²))/c.\n const flatLegFar = Math.sqrt(R_far_m * R_far_m - b_m * b_m);\n const flatLegNear = Math.sqrt(R_near_m * R_near_m - b_m * b_m);\n const t_flat = (flatLegFar - flatLegNear) / c_SI;\n const tauMax = t_flat * 1.5;\n\n const snapshots = integrateGeodesicGL4(initialState, {\n steps,\n tauMax,\n gInverseFn,\n dgInverseFn,\n domainMinRadius: r_s * 1.01,\n });\n\n // Find the first snapshot with r ≤ R_near_m and locate the crossing INSIDE\n // that step with the cubic Hermite interpolant of r(τ) and t(τ), whose\n // derivatives are the 4-velocity v^μ = g^{μν} p_ν the snapshot already\n // carries, by MathTS `findRoot` (Brent, residual stop only). A straight line\n // between the two snapshots is O(h²) in the crossing, and with an impact\n // parameter r(τ) curves by c² b²/r³: at Earth–Mars with b = 5e10 m that line\n // put the crossing about 300 m off, a 1e-6 s excess on a 4e-6 s delay (25 %),\n // independent of the mass. The Hermite crossing is O(h⁴).\n const velocity = (snap: { readonly x: readonly number[]; readonly p: readonly number[] }): number[] => {\n const gInv = gInverseFn(snap.x);\n const v = [0, 0, 0, 0];\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) v[mu]! += gInv[mu * 4 + nu]! * snap.p[nu]!;\n }\n return v;\n };\n let t_geodesic: number | undefined;\n for (let i = 1; i < snapshots.length; i++) {\n const prev = snapshots[i - 1]!;\n const curr = snapshots[i]!;\n const rPrev = prev.x[1]!;\n const rCurr = curr.x[1]!;\n if (rPrev > R_near_m && rCurr <= R_near_m) {\n const dtau = curr.tau - prev.tau;\n const vPrev = velocity(prev);\n const vCurr = velocity(curr);\n const rAt = (s: number): number => hermiteInterp([0, 1], [rPrev, rCurr], [dtau * vPrev[1]!, dtau * vCurr[1]!], s);\n const sCross =\n rCurr === R_near_m\n ? 1\n : findRoot((s) => rAt(s) - R_near_m, 0, 1, { tol: 1e-15 * R_near_m, xtol: 0, maxIter: 100 });\n t_geodesic = hermiteInterp([0, 1], [prev.x[0]!, curr.x[0]!], [dtau * vPrev[0]!, dtau * vCurr[0]!], sCross);\n break;\n }\n }\n if (t_geodesic === undefined) {\n const rFinal = snapshots[snapshots.length - 1].x[1];\n throw new Error(\n `evaluateCovariantEikonalNumerical: photon did not reach R_near=${R_near_m} within tauMax=${tauMax} s; final r=${rFinal}. Try increasing steps or tauMax.`,\n );\n }\n\n const shapiroDelaySec = t_geodesic - t_flat;\n\n return { eikonalResidual, shapiroDelaySec };\n}\n"]}
|
|
@@ -745,9 +745,10 @@ export function lowerKretschmannScalar(node, inputs, engine) {
|
|
|
745
745
|
`Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`);
|
|
746
746
|
}
|
|
747
747
|
const rLower = riemannLowerAt(x, gFn, gInverseFn, N, engine);
|
|
748
|
+
// `flattenNestedArray` has checked the length is N·N, so the flat row-major form is the one
|
|
749
|
+
// `computeKretschmann` reads as a Float64Array; it never was a number[][] here.
|
|
748
750
|
const gInvFlat = flattenNestedArray(requireValue(metricInvName, inputs), N * N);
|
|
749
|
-
const
|
|
750
|
-
const K = computeKretschmann(rLower, gInvArg);
|
|
751
|
+
const K = computeKretschmann(rLower, Float64Array.from(gInvFlat));
|
|
751
752
|
return engine.fromNested(K, []);
|
|
752
753
|
}
|
|
753
754
|
//# sourceMappingURL=curvature-lowering-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curvature-lowering-helpers.js","sourceRoot":"","sources":["../../src/numerical/curvature-lowering-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAkCpF,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,8DAA8D;AAC9D,SAAS,YAAY,CAAC,CAAS;IAC7B,yGAAyG;IACzG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,OAAO;YACL;gBACE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACzF;YACD;gBACE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACzF;YACD;gBACE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACzF;YACD;gBACE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE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","sourcesContent":["/**\n * Numerical helpers for Riemann-curvature lowering (Task 6 [U] / v0.5.0 1c-ii).\n *\n * Mirrors `connection-lowering-helpers.ts`: produces Γ and ∂Γ tensors from\n * coordinate-dependent metric closures, then assembles the Riemann tensor via\n * the corrected (Carroll-Ch.3 §3.4 / Adam+Eve F4-S3) formula:\n *\n * R^ρ_{σμν} = ∂_μ Γ^ρ_{σν} − ∂_ν Γ^ρ_{σμ} + Σ_λ (Γ^ρ_{λμ} Γ^λ_{σν} − Γ^ρ_{λν} Γ^λ_{σμ})\n *\n * Index conventions (pinned via JSDoc + a runtime assert):\n * - Γ[ρ][σ][ν] = Γ^ρ_{σν} (matches computeChristoffelTensor's [α][μ][ν] with\n * σ ↔ μ — i.e., the SECOND axis is σ, the THIRD is ν, per Carroll Ch.5).\n * - dGamma[λ][ρ][σ][ν] = ∂_λ Γ^ρ_{σν} (I3)\n * - R[ρ][σ][μ][ν] = R^ρ_{σμν} (Carroll)\n *\n * NOTE on the σ/μ swap vs `computeChristoffelTensor`:\n * `computeChristoffelTensor` was authored for v0.4.0 covariant-derivative\n * lowering, which sums Γ^α_{μλ} T^λ over the middle index `μ` (the wrt index\n * of the cov-deriv). v0.5.0 Riemann needs σ in the SECOND-lower slot of every\n * Γ. Because Γ is symmetric in its two lower indices (Christoffel symmetry),\n * the two storage conventions are numerically identical — we use the\n * existing [α][middle][last] storage and access it with σ in the middle slot.\n *\n * The fast path uses the v0.4.0 `computeChristoffelTensor` infrastructure\n * (no new tensor-engine code) and the v0.4.0 `pderivNumericalFn` pattern\n * (centered finite differences). M11: ∂Γ is computed by repeated centered\n * finite-differences on `christoffel()`, not a new AST node type or AD pass.\n *\n * @module numerical/curvature-lowering-helpers\n */\n\nimport type { EngineTensor, TensorEngine } from './tensor-engine.js';\nimport type { NestedArray, NumericalInputs } from './types.js';\nimport { NumericalBackendError } from './errors.js';\nimport { computeChristoffelTensor, flattenNA } from './connection-lowering-helpers.js';\nimport { pderivNumericalFn } from './pderiv.js';\nimport type { BianchiResidualNode } from '../dimensional/curvature.js';\nimport type { WeylTensorNode } from '../dimensional/weyl-validators.js';\nimport type { KretschmannScalarNode } from '../dimensional/curvature-invariants.js';\nimport { computeWeylTensor } from './weyl-lowering.js';\nimport { computeKretschmann } from './kretschmann.js';\nimport { dimensionOf, requireValue, flattenNestedArray } from './lowering-utils.js';\n\n/** A coordinate-dependent rank-2 closure returning the FLAT layout:\n * f(x) → Float64Array(N²), row-major `flat[mu*N + nu]` (v0.9.0\n * Task 1.1; mirrors the v0.6.0 BR-2 christoffelFn convention). */\nexport type MetricFnFlat = (x: ReadonlyArray<number>) => Float64Array;\n\n/** A coordinate-dependent rank-2 closure returning the legacy nested\n * layout: f(x) → number[][] (sibling fixtures de-sitter / flrw /\n * minkowski stay nested for this release per Decision #8). */\ntype MetricFnNested = (x: ReadonlyArray<number>) => number[][];\n\n/** A coordinate-dependent rank-2 closure: f(x) → N×N as a NestedArray\n * (number[][], Float64Array, or any form `flattenNA` can flatten —\n * the union of `MetricFnFlat` and `MetricFnNested` plus deeper\n * nestings; NestedArray itself admits Float64Array since v0.9.0). */\nexport type MetricFn = (x: ReadonlyArray<number>) => NestedArray;\n\n/**\n * dGamma[λ][ρ][σ][ν] = ∂_λ Γ^ρ_{σν} at the given coordinates (I3).\n *\n * 4-deep nested number array — readonly to mark this as an output container\n * the helper produces but does not mutate after construction.\n *\n * v0.6.1: dropped `export` — file-internal only (used by `dGammaAt` +\n * `buildRiemann` + `riemannLowerAt`).\n */\ntype DGammaTensor = readonly (readonly (readonly (readonly number[])[])[])[];\n\n/** Gamma[ρ][σ][ν] = Γ^ρ_{σν} — same index order as `computeChristoffelTensor`\n * output (just renamed for the Riemann use).\n * v0.6.1: dropped `export` — file-internal only. */\ntype GammaTensor = readonly (readonly (readonly number[])[])[];\n\n// ---------------------------------------------------------------------------\n// Zero-tensor allocators\n// ---------------------------------------------------------------------------\n\n/** A fresh N×N×N×N zero tensor (independent inner arrays). */\nfunction nestedZeros4(N: number): number[][][][] {\n // Bolt: V8 fast-path literal allocation bypasses `new Array` and looping overhead for fixed small sizes.\n if (N === 4) {\n return [\n [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ],\n [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ],\n [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ],\n [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ]\n ];\n }\n\n // Bolt: nested manual allocation is faster than Array.from and .fill\n const out = new Array<number[][][]>(N);\n for (let i = 0; i < N; i++) {\n const arr3 = new Array<number[][]>(N);\n for (let j = 0; j < N; j++) {\n const arr2 = new Array<number[]>(N);\n for (let k = 0; k < N; k++) {\n const arr1 = new Array<number>(N);\n for (let l = 0; l < N; l++) arr1[l] = 0.0;\n arr2[k] = arr1;\n }\n arr3[j] = arr2;\n }\n out[i] = arr3;\n }\n return out;\n}\n\n/** A fresh N×N×N×N×N zero tensor (independent inner arrays). */\nfunction nestedZeros5(N: number): number[][][][][] {\n if (N === 4) {\n return [\n nestedZeros4(4),\n nestedZeros4(4),\n nestedZeros4(4),\n nestedZeros4(4)\n ];\n }\n\n const out = new Array<number[][][][]>(N);\n for (let i = 0; i < N; i++) out[i] = nestedZeros4(N);\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Finite-difference step\n// ---------------------------------------------------------------------------\n\n/**\n * Step size for finite differences on the Christoffel function.\n *\n * Inner step (∂g for one Γ evaluation) uses the v0.4.0 default\n * `1e-6·max(|x|,1)` via `pderivNumericalFn`-style centered FD. This gives ∂g\n * with relative precision ≈ 1e-11 on Schwarzschild components (verified by\n * inspection at r=3·r_s).\n *\n * Outer step (∂Γ for one R evaluation) is `1e-4·max(|x|,1)` and we use a\n * **4th-order centered stencil**:\n *\n * f'(x) ≈ [−f(x+2h) + 8 f(x+h) − 8 f(x-h) + f(x-2h)] / (12 h)\n *\n * Truncation O(h⁴) instead of O(h²). At h=0.886 m (r=3·r_s, M=M_sun),\n * truncation ≈ h⁴·Γ⁽⁵⁾/Γ ~ 1e-13 relative, round-off ε·|Γ|/h ~ 1e-15 relative.\n * Both sit well below the 1e-9 gate.\n *\n * The 2nd-order outer FD that v0.4.0 covariant-derivative lowering uses\n * leaves ~3e-6 relative error on R^t_{rtr} due to noise propagation through\n * the c²-scaled g_{tt} component — 4th-order outer FD recovers the precision.\n */\nfunction outerStep(x: number): number {\n return 1e-4 * Math.max(Math.abs(x), 1);\n}\n\n/**\n * Build a flat ∂_μ g sampler around point x using a **4th-order centered\n * stencil**:\n *\n * ∂_μ g ≈ [−g(x+2h) + 8 g(x+h) − 8 g(x−h) + g(x−2h)] / (12 h)\n *\n * Returned function matches the `getMetricDeriv` signature expected by\n * `computeChristoffelTensor`.\n *\n * Inner step `h_i = 1e-3·max(|x|,1)` is intentionally LARGER than the v0.4.0\n * 1e-6 default to compensate for the c²·g_{tt} ~ 6e16 cancellation noise: a\n * 4th-order stencil at h_i ≈ 8.86 m around r=3·r_s gives truncation\n * O(h_i⁴·g⁽⁵⁾) ~ 1e-13 relative on each ∂g component while keeping round-off\n * ε|g|/h_i ~ 1e-15 relative — orders below the 1e-9 component-match gate.\n */\nfunction makeInnerGradFn(\n gFn: MetricFn,\n x0: ReadonlyArray<number>,\n N: number,\n): (mu: number) => number[] {\n // v0.5.1 PD-7: delegates to the shared `pderivNumericalFn(..., {order: 4})`\n // 4th-order centered stencil. The explicit `h = 1e-3·max(|x|,1)` override\n // is load-bearing: the c²·g_{tt} cancellation noise on Schwarzschild\n // demands a larger step than the v0.5.0-default 1e-4 to balance truncation\n // vs round-off at the ≤1e-9 component-match gate. (See module JSDoc.)\n return (mu: number): number[] => {\n const xc = x0[mu];\n const h = 1e-3 * Math.max(Math.abs(xc), 1);\n const d = pderivNumericalFn(gFn, x0, mu, { order: 4, h });\n const flat = Array.isArray(d) ? (d as number[]) : [d as number];\n if (flat.length !== N * N) {\n throw new NumericalBackendError(\n `curvature-lowering: metric closure returned wrong shape — expected ${N * N}, ` +\n `got ${flat.length}`,\n );\n }\n return flat;\n };\n}\n\n/**\n * Compute Γ^ρ_{σν} at coordinate x. Internally builds a centered-FD ∂g sampler\n * around x and delegates to `computeChristoffelTensor` (the v0.4.0 helper).\n *\n * Returns a fully-materialised 3-deep nested array Γ[ρ][σ][ν]. (We do NOT keep\n * the EngineTensor wrapper because we immediately rebuild dGamma and R as\n * plain nested arrays — round-tripping through the engine on every FD sample\n * would dominate the cost.)\n */\nexport function christoffelAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): number[][][] {\n const gInvFlat = flattenNA(gInverseFn(x));\n if (gInvFlat.length !== N * N) {\n throw new NumericalBackendError(\n `curvature-lowering: gInverseFn returned wrong shape — expected ${N * N}, got ${gInvFlat.length}`,\n );\n }\n const gradFn = makeInnerGradFn(gFn, x, N);\n const tensor = computeChristoffelTensor(gInvFlat, gradFn, N, engine);\n const nested = engine.toNested(tensor) as NestedArray;\n engine.dispose?.(tensor);\n\n // Cast to the expected nested shape; computeChristoffelTensor produces\n // shape [N,N,N] so this is structurally [ρ][middle][last]. We treat\n // [middle] as σ and [last] as ν (Christoffel symmetry makes the two\n // lower-slot conventions numerically interchangeable).\n return nested as number[][][];\n}\n\n/**\n * dGamma[λ][ρ][σ][ν] = ∂_λ Γ^ρ_{σν} via centered FD on `christoffelAt`. (I3)\n *\n * Includes a runtime index-assert verifying `dGamma[1][1][1][1]` is finite\n * before returning (catches silent shape-permutation bugs introduced by future\n * edits to `computeChristoffelTensor`'s output ordering).\n */\nexport function dGammaAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): DGammaTensor {\n // Allocate dGamma[λ][ρ][σ][ν]\n const dGamma: number[][][][] = nestedZeros4(N);\n\n // v0.5.1 PD-7: 4th-order centered stencil via the shared\n // `pderivNumericalFn(..., {order: 4})` (h = 1e-4·max(|x|,1) default matches\n // the v0.5.0 `outerStep`). Each axis returns a flat number[] of length N³;\n // unflatten into the `dGamma[λ][ρ][σ][ν]` axis-0 slab.\n const christFn = (xs: ReadonlyArray<number>): NestedArray =>\n christoffelAt(xs, gFn, gInverseFn, N, engine);\n for (let lam = 0; lam < N; lam++) {\n const d = pderivNumericalFn(christFn, x, lam, { order: 4 });\n const flat = Array.isArray(d) ? (d as number[]) : [d as number];\n if (flat.length !== N * N * N) {\n throw new NumericalBackendError(\n `dGammaAt: christoffelAt derivative shape mismatch — expected ${N * N * N}, got ${flat.length}`,\n );\n }\n const N2 = N * N;\n for (let rho = 0; rho < N; rho++) {\n for (let sigma = 0; sigma < N; sigma++) {\n for (let nu = 0; nu < N; nu++) {\n dGamma[lam][rho][sigma][nu] = flat[rho * N2 + sigma * N + nu];\n }\n }\n }\n }\n\n // I3 runtime index-assert: verify the container is populated as expected.\n // dGamma[1][1][1][1] is ∂_r Γ^r_{rr} for Schwarzschild — a non-trivial real\n // number, so a `Number.isFinite` check catches both shape regressions and\n // numerical blow-ups.\n const probe = dGamma[1]?.[1]?.[1]?.[1];\n if (typeof probe !== 'number' || !Number.isFinite(probe)) {\n throw new NumericalBackendError(\n `curvature-lowering: dGamma index-assert failed — dGamma[1][1][1][1] is ` +\n `${probe} (expected finite number). Shape regression in christoffelAt?`,\n );\n }\n\n return dGamma as DGammaTensor;\n}\n\n/**\n * Build the full 4×4×4×4 Riemann tensor R^ρ_{σμν} from Γ and ∂Γ per the\n * Carroll formula (Adam+Eve F4-S3):\n *\n * R[ρ][σ][μ][ν] = ∂_μ Γ[ρ][σ][ν] − ∂_ν Γ[ρ][σ][μ]\n * + Σ_λ (Γ[ρ][λ][μ] Γ[λ][σ][ν] − Γ[ρ][λ][ν] Γ[λ][σ][μ])\n *\n * σ in the SECOND lower slot of each Γ (F4/S3 correction).\n */\nexport function buildRiemann(\n gamma: GammaTensor,\n dGamma: DGammaTensor,\n N: number,\n): number[][][][] {\n // Bolt: Unroll and cache inner loop constants for N=4, creating 4D array in-place\n // without relying on `nestedZeros4` or excessive repetitive lookups. This drops overhead significantly\n // over creating an empty multi-dimensional array and repeatedly fetching `dGamma[mu][rho][sigma][nu]`.\n if (N === 4) {\n const R = new Array(4);\n\n for (let rho = 0; rho < 4; rho++) {\n const R_rho = new Array(4);\n const gamma_rho = gamma[rho];\n const g_rho_0 = gamma_rho[0];\n const g_rho_1 = gamma_rho[1];\n const g_rho_2 = gamma_rho[2];\n const g_rho_3 = gamma_rho[3];\n\n for (let sigma = 0; sigma < 4; sigma++) {\n const R_rho_sigma = new Array(4);\n const g_0_sig = gamma[0][sigma];\n const g_1_sig = gamma[1][sigma];\n const g_2_sig = gamma[2][sigma];\n const g_3_sig = gamma[3][sigma];\n\n for (let mu = 0; mu < 4; mu++) {\n const dG_mu = dGamma[mu][rho][sigma];\n\n const g_rho_0_mu = g_rho_0[mu];\n const g_rho_1_mu = g_rho_1[mu];\n const g_rho_2_mu = g_rho_2[mu];\n const g_rho_3_mu = g_rho_3[mu];\n\n const g_0_sig_mu = g_0_sig[mu];\n const g_1_sig_mu = g_1_sig[mu];\n const g_2_sig_mu = g_2_sig[mu];\n const g_3_sig_mu = g_3_sig[mu];\n\n const R_rho_sigma_mu = new Array(4);\n for (let nu = 0; nu < 4; nu++) {\n let value = dG_mu[nu] - dGamma[nu][rho][sigma][mu];\n value += g_rho_0_mu * g_0_sig[nu] - g_rho_0[nu] * g_0_sig_mu;\n value += g_rho_1_mu * g_1_sig[nu] - g_rho_1[nu] * g_1_sig_mu;\n value += g_rho_2_mu * g_2_sig[nu] - g_rho_2[nu] * g_2_sig_mu;\n value += g_rho_3_mu * g_3_sig[nu] - g_rho_3[nu] * g_3_sig_mu;\n R_rho_sigma_mu[nu] = value;\n }\n R_rho_sigma[mu] = R_rho_sigma_mu;\n }\n R_rho[sigma] = R_rho_sigma;\n }\n R[rho] = R_rho;\n }\n return R;\n }\n\n const R: number[][][][] = nestedZeros4(N);\n\n for (let rho = 0; rho < N; rho++) {\n for (let sigma = 0; sigma < N; sigma++) {\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n // ∂_μ Γ^ρ_{σν} − ∂_ν Γ^ρ_{σμ}\n let value = dGamma[mu][rho][sigma][nu] - dGamma[nu][rho][sigma][mu];\n // Σ_λ (Γ^ρ_{λμ} Γ^λ_{σν} − Γ^ρ_{λν} Γ^λ_{σμ})\n for (let lam = 0; lam < N; lam++) {\n value += gamma[rho][lam][mu] * gamma[lam][sigma][nu]\n - gamma[rho][lam][nu] * gamma[lam][sigma][mu];\n }\n R[rho][sigma][mu][nu] = value;\n }\n }\n }\n }\n\n return R;\n}\n\n// ---------------------------------------------------------------------------\n// v0.5.0 Task 9: helpers for bianchiResidual()\n// ---------------------------------------------------------------------------\n\n/**\n * Compute the upper-Riemann tensor R^ρ_{σμν} at coordinate x using the same\n * Γ + ∂Γ pipeline as the riemann-tensor lowering case. Encapsulates the\n * full christoffelAt + dGammaAt + buildRiemann sequence so callers (Task 9\n * Bianchi residual) can sample R at perturbed coordinates without\n * re-implementing the FD machinery. The curvature report of `upt metric`\n * reads it too.\n * @internal\n */\nexport function riemannUpperAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n // Optional precomputed Γ^ρ_{σν} at x — `christoffelAt` is a pure function of\n // x, so reusing the caller's center evaluation is numerically identical and\n // avoids one redundant Christoffel compute (the Bianchi path already has it).\n gammaAtX?: number[][][],\n): number[][][][] {\n const gamma = gammaAtX ?? christoffelAt(x, gFn, gInverseFn, N, engine);\n const dGamma = dGammaAt(x, gFn, gInverseFn, N, engine);\n return buildRiemann(gamma, dGamma, N);\n}\n\n/**\n * Lower the upper-ρ index of R^ρ_{σμν} via the covariant metric g_{aρ}:\n *\n * R_{aσμν} = Σ_ρ g_{aρ} R^ρ_{σμν}\n *\n * Output index order: `[a][σ][μ][ν]` — all four lower. (a is the freshly\n * lowered index in the first slot.)\n * @internal\n */\nexport function lowerFirstIndex(\n R: number[][][][],\n gLowerFlat: ReadonlyArray<number>,\n N: number,\n): number[][][][] {\n // Bolt: Exploit physical 4D spacetime constraints to fully unroll the first-index\n // tensor lowering loop. By eliminating repetitive `a * N + rho` multi-dimensional\n // arithmetic operations and creating fully formed array closures without\n // generic `nestedZeros4` logic, we eliminate redundant garbage collection pressure.\n if (N === 4) {\n const Rlow: number[][][][] = new Array(4);\n for (let a = 0; a < 4; a++) {\n const a_offset = a * 4;\n const g0 = gLowerFlat[a_offset];\n const g1 = gLowerFlat[a_offset + 1];\n const g2 = gLowerFlat[a_offset + 2];\n const g3 = gLowerFlat[a_offset + 3];\n\n if (g0 === 0.0 && g1 === 0.0 && g2 === 0.0 && g3 === 0.0) {\n Rlow[a] = [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ];\n continue;\n }\n\n const Rlow_a = new Array(4);\n for (let sig = 0; sig < 4; sig++) {\n const Rlow_a_sig = new Array(4);\n const R0 = R[0][sig];\n const R1 = R[1][sig];\n const R2 = R[2][sig];\n const R3 = R[3][sig];\n\n for (let mu = 0; mu < 4; mu++) {\n const R0_mu = R0[mu];\n const R1_mu = R1[mu];\n const R2_mu = R2[mu];\n const R3_mu = R3[mu];\n Rlow_a_sig[mu] = [\n g0 * R0_mu[0] + g1 * R1_mu[0] + g2 * R2_mu[0] + g3 * R3_mu[0],\n g0 * R0_mu[1] + g1 * R1_mu[1] + g2 * R2_mu[1] + g3 * R3_mu[1],\n g0 * R0_mu[2] + g1 * R1_mu[2] + g2 * R2_mu[2] + g3 * R3_mu[2],\n g0 * R0_mu[3] + g1 * R1_mu[3] + g2 * R2_mu[3] + g3 * R3_mu[3]\n ];\n }\n Rlow_a[sig] = Rlow_a_sig;\n }\n Rlow[a] = Rlow_a;\n }\n return Rlow;\n }\n\n const Rlow: number[][][][] = nestedZeros4(N);\n for (let a = 0; a < N; a++) {\n for (let sig = 0; sig < N; sig++) {\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n let sum = 0;\n for (let rho = 0; rho < N; rho++) {\n sum += gLowerFlat[a * N + rho] * R[rho][sig][mu][nu];\n }\n Rlow[a][sig][mu][nu] = sum;\n }\n }\n }\n }\n return Rlow;\n}\n\n/**\n * Sample the all-lower Riemann tensor R_{αβγδ}(x) — combines `riemannUpperAt`\n * with `lowerFirstIndex` for the single-coordinate evaluation. Used both as\n * the base sample and (with perturbed x) as the FD inputs for ∂_λ R_{αβγδ}.\n */\nexport function riemannLowerAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n /** Optional precomputed Γ at x — forwarded to `riemannUpperAt` to skip the\n * redundant Christoffel compute when the caller already has it. */\n gammaAtX?: number[][][],\n): number[][][][] {\n const Rup = riemannUpperAt(x, gFn, gInverseFn, N, engine, gammaAtX);\n const gFlat = flattenNA(gFn(x));\n if (gFlat.length !== N * N) {\n throw new NumericalBackendError(\n `bianchi-residual: gFn returned wrong shape — expected ${N * N}, got ${gFlat.length}`,\n );\n }\n return lowerFirstIndex(Rup, gFlat, N);\n}\n\n/**\n * Compute ∂_λ R_{αβγδ}(x) via a 4th-order centered stencil on\n * `riemannLowerAt`. Index order: `dR[λ][α][β][γ][δ] = ∂_λ R_{αβγδ}`.\n *\n * Uses the same outer step (`outerStep`) as Task 6's dGammaAt so the\n * FD-noise compounding pattern matches. This is one extra layer of FD on top\n * of the Christoffel-of-Christoffel double-FD already inside `riemannLowerAt`\n * — total: ∂(∂(∂g)) at 4th order in each layer. Empirical noise floor reached\n * by the per-component value is documented in the test report.\n */\nfunction dRiemannLowerAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): number[][][][][] {\n const dR: number[][][][][] = nestedZeros5(N);\n\n // v0.5.1 PD-7: 4th-order centered stencil via the shared\n // `pderivNumericalFn(..., {order: 4})` — default h = 1e-4·max(|x|,1) matches\n // the v0.5.0 `outerStep`. Each axis call returns a flat number[] of length\n // N⁴ (riemannLowerAt produces [N,N,N,N]); unflatten into the\n // `dR[λ][a][b][c][d]` axis-0 slab.\n const RlowerFn = (xs: ReadonlyArray<number>): NestedArray =>\n riemannLowerAt(xs, gFn, gInverseFn, N, engine);\n const N2 = N * N;\n const N3 = N * N * N;\n for (let lam = 0; lam < N; lam++) {\n const flat = pderivNumericalFn(RlowerFn, x, lam, { order: 4 }) as number[];\n if (!Array.isArray(flat) || flat.length !== N2 * N2) {\n throw new NumericalBackendError(\n `dRiemannLowerAt: derivative shape mismatch — expected ${N2 * N2}, got ${\n Array.isArray(flat) ? flat.length : 'scalar'\n }`,\n );\n }\n for (let a = 0; a < N; a++) {\n for (let b = 0; b < N; b++) {\n for (let c = 0; c < N; c++) {\n for (let d = 0; d < N; d++) {\n dR[lam][a][b][c][d] = flat[a * N3 + b * N2 + c * N + d];\n }\n }\n }\n }\n }\n\n return dR;\n}\n\n/**\n * Compute ∇_λ R_{μνρσ} via partial + Christoffel-correction terms (Approach 1).\n *\n * ∇_λ R_{μνρσ} = ∂_λ R_{μνρσ}\n * − Γ^α_{λμ} R_{ανρσ}\n * − Γ^α_{λν} R_{μαρσ}\n * − Γ^α_{λρ} R_{μνασ}\n * − Γ^α_{λσ} R_{μνρα}\n *\n * Index order: `covR[λ][μ][ν][ρ][σ] = ∇_λ R_{μνρσ}`.\n *\n * Approach choice (full ∇, not raw ∂): the second Bianchi identity\n * ∇_{[λ} R_{μν]ρσ} = 0 is the canonical statement. Using raw ∂ would give a\n * residual dominated by the (cyclic-non-cancelling) Christoffel-correction\n * terms, masking the identity check with O(1) algebraic clutter. Full ∇\n * makes the test a genuine self-consistency check of the lowered Riemann.\n */\nexport function covariantDerivRiemannLowerAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): number[][][][][] {\n const gamma = christoffelAt(x, gFn, gInverseFn, N, engine);\n // Reuse the center Γ — riemannLowerAt(x) would otherwise recompute it.\n const R = riemannLowerAt(x, gFn, gInverseFn, N, engine, gamma);\n const dR = dRiemannLowerAt(x, gFn, gInverseFn, N, engine);\n\n const covR: number[][][][][] = nestedZeros5(N);\n\n for (let lam = 0; lam < N; lam++) {\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n for (let rho = 0; rho < N; rho++) {\n for (let sig = 0; sig < N; sig++) {\n let value = dR[lam][mu][nu][rho][sig];\n // Subtract Γ^α_{λμ} R_{ανρσ} (correction for the μ index)\n // Subtract Γ^α_{λν} R_{μαρσ} (correction for the ν index)\n // Subtract Γ^α_{λρ} R_{μνασ} (correction for the ρ index)\n // Subtract Γ^α_{λσ} R_{μνρα} (correction for the σ index)\n for (let a = 0; a < N; a++) {\n value -= gamma[a][lam][mu] * R[a][nu][rho][sig];\n value -= gamma[a][lam][nu] * R[mu][a][rho][sig];\n value -= gamma[a][lam][rho] * R[mu][nu][a][sig];\n value -= gamma[a][lam][sig] * R[mu][nu][rho][a];\n }\n covR[lam][mu][nu][rho][sig] = value;\n }\n }\n }\n }\n }\n\n return covR;\n}\n\n/**\n * Build the second-Bianchi-identity residual (cyclic over first three indices):\n *\n * B_{λμνρσ} = ∇_λ R_{μνρσ} + ∇_μ R_{νλρσ} + ∇_ν R_{λμρσ}\n *\n * Carroll Eq. 3.95: B ≡ 0 in any (torsion-free) Lorentzian manifold. The\n * residual measures the FD-truncation + cancellation noise on the lowered\n * Riemann tensor through one extra ∂ layer.\n *\n * Index order: `B[λ][μ][ν][ρ][σ]` — all five lower.\n */\nfunction bianchiResidualAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): number[][][][][] {\n const covR = covariantDerivRiemannLowerAt(x, gFn, gInverseFn, N, engine);\n\n const B: number[][][][][] = nestedZeros5(N);\n\n for (let lam = 0; lam < N; lam++) {\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n for (let rho = 0; rho < N; rho++) {\n for (let sig = 0; sig < N; sig++) {\n B[lam][mu][nu][rho][sig] =\n covR[lam][mu][nu][rho][sig] // ∇_λ R_{μνρσ}\n + covR[mu][nu][lam][rho][sig] // ∇_μ R_{νλρσ}\n + covR[nu][lam][mu][rho][sig]; // ∇_ν R_{λμρσ}\n }\n }\n }\n }\n }\n\n return B;\n}\n\n/**\n * JS-side contraction of a flat 4-axis tensor R[a][b][c][d] (length N⁴, row-major)\n * down to a 2-tensor by summing one upper axis against one lower axis.\n *\n * Configuration:\n * - `upperAxis`: the axis index (0..3) that contracts WITH `lowerAxis` (dummy slot).\n * - `lowerAxis`: the partner axis (0..3) forming the dummy pair.\n * - `outAxes`: the two surviving axes [i, j] that become the (free output)\n * rows/cols of the returned N×N matrix.\n *\n * For Carroll Eq. 3.91 Ricci R_μν = R^λ_{μλν} on Riemann stored as R[ρ][σ][μ][ν]:\n * contractRiemannJS(flatR, N, { upperAxis: 0, lowerAxis: 2, outAxes: [1, 3] })\n * sums `R[λ][μ_out][λ][ν_out]` over λ.\n *\n * Pre-flattened input convention: row-major `R[a][b][c][d] = flatR[a*N³ + b*N² + c*N + d]`.\n * (Matches `flattenNestedArray` output for an [N,N,N,N] EngineTensor.)\n *\n * @internal — extracted from `lowering.ts` ricci-tensor arm (AS-1, v0.5.1). Kept\n * deliberately narrow (4-axis source → 2-axis output) to match the v0.5.0 GR\n * curvature pipeline; generalisation deferred to v0.6.0 if Weyl/Kretschmann\n * arrives (see `docs/architecture/COMPONENTS.md` curvature-layer pattern note).\n */\nexport function contractRiemannJS(\n flatR: ReadonlyArray<number>,\n N: number,\n config: {\n upperAxis: 0 | 1 | 2 | 3;\n lowerAxis: 0 | 1 | 2 | 3;\n outAxes: readonly [number, number];\n },\n): number[][] {\n const { upperAxis, lowerAxis, outAxes } = config;\n if (upperAxis === lowerAxis) {\n throw new NumericalBackendError(\n `contractRiemannJS: upperAxis (${upperAxis}) and lowerAxis (${lowerAxis}) must differ`,\n );\n }\n const [outA, outB] = outAxes;\n if (outA === outB) {\n throw new NumericalBackendError(\n `contractRiemannJS: outAxes [${outA},${outB}] must be distinct`,\n );\n }\n if (outA === upperAxis || outA === lowerAxis || outB === upperAxis || outB === lowerAxis) {\n throw new NumericalBackendError(\n `contractRiemannJS: outAxes [${outA},${outB}] must not overlap dummy pair [${upperAxis},${lowerAxis}]`,\n );\n }\n if (flatR.length !== N * N * N * N) {\n throw new NumericalBackendError(\n `contractRiemannJS: flatR length ${flatR.length} != N⁴ = ${N * N * N * N}`,\n );\n }\n\n // Row-major strides for R[a][b][c][d].\n const N2 = N * N;\n const N3 = N * N * N;\n const strides = [N3, N2, N, 1] as const;\n const strideDummy = strides[upperAxis] + strides[lowerAxis];\n const strideOutA = strides[outA];\n const strideOutB = strides[outB];\n\n if (N === 4) {\n const strideUpper = strides[upperAxis];\n const strideLower = strides[lowerAxis];\n const dummy1 = strideUpper + strideLower;\n const dummy2 = dummy1 * 2;\n const dummy3 = dummy1 * 3;\n\n const out4 = [\n [0.0, 0.0, 0.0, 0.0],\n [0.0, 0.0, 0.0, 0.0],\n [0.0, 0.0, 0.0, 0.0],\n [0.0, 0.0, 0.0, 0.0],\n ];\n\n for (let i = 0; i < 4; i++) {\n const baseI = i * strideOutA;\n const row = out4[i];\n for (let j = 0; j < 4; j++) {\n const baseIJ = baseI + j * strideOutB;\n row[j] = flatR[baseIJ] + flatR[baseIJ + dummy1] + flatR[baseIJ + dummy2] + flatR[baseIJ + dummy3];\n }\n }\n return out4;\n }\n\n // Bolt: Manual allocation is faster than Array.from\n const out: number[][] = new Array<number[]>(N);\n for (let k = 0; k < N; k++) {\n const row = new Array<number>(N);\n for (let l = 0; l < N; l++) row[l] = 0.0;\n out[k] = row;\n }\n for (let i = 0; i < N; i++) {\n const baseI = i * strideOutA;\n for (let j = 0; j < N; j++) {\n const baseIJ = baseI + j * strideOutB;\n let sum = 0;\n for (let lam = 0; lam < N; lam++) {\n sum += flatR[baseIJ + lam * strideDummy];\n }\n out[i][j] = sum;\n }\n }\n return out;\n}\n\n\n// ===========================================================================\n// v0.6.1 Phase 2 Proposal 2 — Arm extractions from lowering.ts\n// ===========================================================================\n//\n// Two FD pipelines (`bianchi-residual` and `weyl-tensor`) were inlined as\n// switch arms in `lowering.ts`'s `lowerCurvature` dispatcher. Each was a\n// self-contained block of input-resolution + helper-pipeline + result-wrap\n// boilerplate; together they accounted for ~125 LOC of lowering.ts. Moving\n// them here (a) keeps the dispatcher readable, (b) co-locates the FD\n// machinery with its consumers, and (c) makes the per-arm pipeline\n// independently unit-testable in the future.\n\n/**\n * Lower a `bianchi-residual` AST node to a 5-rank EngineTensor B_{λμνρσ}.\n *\n * Extracted from `lowering.ts` `lowerCurvature` switch arm in v0.6.1 Phase 2.\n * Wires `inputs.tensors[xCoord.name]` (the coordinate vector) and\n * `inputs.fields[gLower.name]` / `inputs.fields[gInverse.name]` (the metric\n * closures) into the existing `bianchiResidualAt` FD helper.\n *\n * Approach (cyclic ∇R sum):\n * B_{λμνρσ} = ∇_λ R_{μνρσ} + ∇_μ R_{νλρσ} + ∇_ν R_{λμρσ}\n * Each ∇_λ R_{μνρσ} is computed with the four Christoffel-correction terms.\n *\n * @returns engine.fromNested(B, [N,N,N,N,N])\n */\nexport function lowerBianchiResidual(\n node: BianchiResidualNode,\n inputs: NumericalInputs,\n engine: TensorEngine,\n): EngineTensor {\n const rNode = node.riemann;\n const N = dimensionOf(inputs);\n const x = flattenNestedArray(requireValue(rNode.xCoord.name, inputs), N);\n const gFn = inputs.fields?.get(rNode.gLower.name) as MetricFn | undefined;\n const gInverseFn = inputs.fields?.get(rNode.gInverse.name) as MetricFn | undefined;\n if (!gFn || !gInverseFn) {\n throw new NumericalBackendError(\n `lowering: bianchi-residual numerical evaluation requires coordinate-` +\n `dependent metric closures in inputs.fields for \"${rNode.gLower.name}\" ` +\n `and \"${rNode.gInverse.name}\". ` +\n `Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`,\n );\n }\n const B = bianchiResidualAt(x, gFn, gInverseFn, N, engine);\n return engine.fromNested(B as NestedArray, [N, N, N, N, N]);\n}\n\n/**\n * Lower a `weyl-tensor` AST node to a 4-rank EngineTensor C^ρ_{σμν}.\n *\n * Extracted from `lowering.ts` `lowerCurvature` switch arm in v0.6.1 Phase 2.\n * Implements the F-5 Weyl-formula pipeline:\n *\n * 1. Resolve `x`, `g`, `g_inv`, `g(x)`, `g_inv(x)` from `inputs`.\n * 2. Compute Riemann R^ρ_{σμν} via `christoffelAt` + `dGammaAt` + `buildRiemann`.\n * 3. Contract Ricci R_{μν} = R^λ_{μλν} via `contractRiemannJS`.\n * 4. Compute Ricci scalar R = Σ_{μν} g^{μν} R_{μν}.\n * 5. Assemble Weyl via `computeWeylTensor({...})` using the F-5 formula.\n *\n * Naming convention (must match the caller's inputs map):\n * inputs.tensors[metricName] — g_{μν} at x\n * inputs.tensors[metricName + '_inv'] — g^{μν} at x\n * inputs.tensors['x'] — coordinate 4-vector\n * inputs.fields[metricName] — coordinate-dependent g closure\n * inputs.fields[metricName + '_inv'] — coordinate-dependent g^{-1} closure\n *\n * @returns engine.fromNested(C, [N,N,N,N])\n */\nexport function lowerWeylTensor(\n node: WeylTensorNode,\n inputs: NumericalInputs,\n engine: TensorEngine,\n): EngineTensor {\n const N = dimensionOf(inputs);\n const metricName = node.metric.name;\n const metricInvName = `${metricName}_inv`;\n\n const x = flattenNestedArray(requireValue('x', inputs), N);\n const gFn = inputs.fields?.get(metricName) as MetricFn | undefined;\n const gInverseFn = inputs.fields?.get(metricInvName) as MetricFn | undefined;\n if (!gFn || !gInverseFn) {\n throw new NumericalBackendError(\n `lowering: weyl-tensor requires coordinate-dependent metric closures in ` +\n `inputs.fields for \"${metricName}\" and \"${metricInvName}\". ` +\n `Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`,\n );\n }\n\n // Step 1-2: Riemann R^ρ_{σμν} via FD pipeline.\n const gamma = christoffelAt(x, gFn, gInverseFn, N, engine);\n const dGamma = dGammaAt(x, gFn, gInverseFn, N, engine);\n const Rup = buildRiemann(gamma, dGamma, N);\n\n // Step 3: Ricci R_{μν} = R^λ_{μλν} (Carroll Eq. 3.91).\n const flatRup = flattenNestedArray(Rup as unknown as NestedArray, N * N * N * N);\n const Ric = contractRiemannJS(flatRup, N, {\n upperAxis: 0, lowerAxis: 2, outAxes: [1, 3],\n });\n\n // Step 4: Ricci scalar R = Σ_{μν} g^{μν} R_{μν}.\n const gInvFlat = flattenNestedArray(requireValue(metricInvName, inputs), N * N);\n let Rscalar = 0;\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n Rscalar += gInvFlat[mu * N + nu] * Ric[mu][nu];\n }\n }\n\n // Step 5: point-sample of covariant metric + inverse, then assemble.\n const gFlat = flattenNestedArray(requireValue(metricName, inputs), N * N);\n // Bolt: Using manual loops over Array.from to avoid massive TypedArray conversion overhead\n const gMat: number[][] = new Array(N);\n const gInvMat: number[][] = new Array(N);\n for (let i = 0; i < N; i++) {\n const rowG = new Array(N);\n const rowGInv = new Array(N);\n const base = i * N;\n for (let j = 0; j < N; j++) {\n const idx = base + j;\n rowG[j] = gFlat[idx];\n rowGInv[j] = gInvFlat[idx];\n }\n gMat[i] = rowG;\n gInvMat[i] = rowGInv;\n }\n\n const C = computeWeylTensor({\n riemann: Rup,\n ricci: Ric,\n ricciScalar: Rscalar,\n metric: gMat,\n metricInverse: gInvMat,\n });\n return engine.fromNested(C as NestedArray, [N, N, N, N]);\n}\n\n/**\n * Lower a `kretschmann-scalar` node to the scalar K = R_{ρσμν} R^{ρσμν}.\n *\n * Uses the FD Riemann pipeline (`riemannLowerAt`) plus `computeKretschmann`.\n * Naming convention matches {@link lowerWeylTensor}.\n */\nexport function lowerKretschmannScalar(\n node: KretschmannScalarNode,\n inputs: NumericalInputs,\n engine: TensorEngine,\n): EngineTensor {\n const N = dimensionOf(inputs);\n const metricName = node.metric.name;\n const metricInvName = `${metricName}_inv`;\n\n const x = flattenNestedArray(requireValue('x', inputs), N);\n const gFn = inputs.fields?.get(metricName) as MetricFn | undefined;\n const gInverseFn = inputs.fields?.get(metricInvName) as MetricFn | undefined;\n if (!gFn || !gInverseFn) {\n throw new NumericalBackendError(\n `lowering: kretschmann-scalar requires coordinate-dependent metric closures in ` +\n `inputs.fields for \"${metricName}\" and \"${metricInvName}\". ` +\n `Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`,\n );\n }\n\n const rLower = riemannLowerAt(x, gFn, gInverseFn, N, engine);\n const gInvFlat = flattenNestedArray(requireValue(metricInvName, inputs), N * N);\n const gInvArg =\n gInvFlat.length === N * N ? Float64Array.from(gInvFlat) : (gInvFlat as unknown as number[][]);\n const K = computeKretschmann(rLower, gInvArg);\n return engine.fromNested(K, []);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"curvature-lowering-helpers.js","sourceRoot":"","sources":["../../src/numerical/curvature-lowering-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAkCpF,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,8DAA8D;AAC9D,SAAS,YAAY,CAAC,CAAS;IAC7B,yGAAyG;IACzG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,OAAO;YACL;gBACE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACzF;YACD;gBACE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACzF;YACD;gBACE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACzF;YACD;gBACE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxF,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE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","sourcesContent":["/**\n * Numerical helpers for Riemann-curvature lowering (Task 6 [U] / v0.5.0 1c-ii).\n *\n * Mirrors `connection-lowering-helpers.ts`: produces Γ and ∂Γ tensors from\n * coordinate-dependent metric closures, then assembles the Riemann tensor via\n * the corrected (Carroll-Ch.3 §3.4 / Adam+Eve F4-S3) formula:\n *\n * R^ρ_{σμν} = ∂_μ Γ^ρ_{σν} − ∂_ν Γ^ρ_{σμ} + Σ_λ (Γ^ρ_{λμ} Γ^λ_{σν} − Γ^ρ_{λν} Γ^λ_{σμ})\n *\n * Index conventions (pinned via JSDoc + a runtime assert):\n * - Γ[ρ][σ][ν] = Γ^ρ_{σν} (matches computeChristoffelTensor's [α][μ][ν] with\n * σ ↔ μ — i.e., the SECOND axis is σ, the THIRD is ν, per Carroll Ch.5).\n * - dGamma[λ][ρ][σ][ν] = ∂_λ Γ^ρ_{σν} (I3)\n * - R[ρ][σ][μ][ν] = R^ρ_{σμν} (Carroll)\n *\n * NOTE on the σ/μ swap vs `computeChristoffelTensor`:\n * `computeChristoffelTensor` was authored for v0.4.0 covariant-derivative\n * lowering, which sums Γ^α_{μλ} T^λ over the middle index `μ` (the wrt index\n * of the cov-deriv). v0.5.0 Riemann needs σ in the SECOND-lower slot of every\n * Γ. Because Γ is symmetric in its two lower indices (Christoffel symmetry),\n * the two storage conventions are numerically identical — we use the\n * existing [α][middle][last] storage and access it with σ in the middle slot.\n *\n * The fast path uses the v0.4.0 `computeChristoffelTensor` infrastructure\n * (no new tensor-engine code) and the v0.4.0 `pderivNumericalFn` pattern\n * (centered finite differences). M11: ∂Γ is computed by repeated centered\n * finite-differences on `christoffel()`, not a new AST node type or AD pass.\n *\n * @module numerical/curvature-lowering-helpers\n */\n\nimport type { EngineTensor, TensorEngine } from './tensor-engine.js';\nimport type { NestedArray, NumericalInputs } from './types.js';\nimport { NumericalBackendError } from './errors.js';\nimport { computeChristoffelTensor, flattenNA } from './connection-lowering-helpers.js';\nimport { pderivNumericalFn } from './pderiv.js';\nimport type { BianchiResidualNode } from '../dimensional/curvature.js';\nimport type { WeylTensorNode } from '../dimensional/weyl-validators.js';\nimport type { KretschmannScalarNode } from '../dimensional/curvature-invariants.js';\nimport { computeWeylTensor } from './weyl-lowering.js';\nimport { computeKretschmann } from './kretschmann.js';\nimport { dimensionOf, requireValue, flattenNestedArray } from './lowering-utils.js';\n\n/** A coordinate-dependent rank-2 closure returning the FLAT layout:\n * f(x) → Float64Array(N²), row-major `flat[mu*N + nu]` (v0.9.0\n * Task 1.1; mirrors the v0.6.0 BR-2 christoffelFn convention). */\nexport type MetricFnFlat = (x: ReadonlyArray<number>) => Float64Array;\n\n/** A coordinate-dependent rank-2 closure returning the legacy nested\n * layout: f(x) → number[][] (sibling fixtures de-sitter / flrw /\n * minkowski stay nested for this release per Decision #8). */\ntype MetricFnNested = (x: ReadonlyArray<number>) => number[][];\n\n/** A coordinate-dependent rank-2 closure: f(x) → N×N as a NestedArray\n * (number[][], Float64Array, or any form `flattenNA` can flatten —\n * the union of `MetricFnFlat` and `MetricFnNested` plus deeper\n * nestings; NestedArray itself admits Float64Array since v0.9.0). */\nexport type MetricFn = (x: ReadonlyArray<number>) => NestedArray;\n\n/**\n * dGamma[λ][ρ][σ][ν] = ∂_λ Γ^ρ_{σν} at the given coordinates (I3).\n *\n * 4-deep nested number array — readonly to mark this as an output container\n * the helper produces but does not mutate after construction.\n *\n * v0.6.1: dropped `export` — file-internal only (used by `dGammaAt` +\n * `buildRiemann` + `riemannLowerAt`).\n */\ntype DGammaTensor = readonly (readonly (readonly (readonly number[])[])[])[];\n\n/** Gamma[ρ][σ][ν] = Γ^ρ_{σν} — same index order as `computeChristoffelTensor`\n * output (just renamed for the Riemann use).\n * v0.6.1: dropped `export` — file-internal only. */\ntype GammaTensor = readonly (readonly (readonly number[])[])[];\n\n// ---------------------------------------------------------------------------\n// Zero-tensor allocators\n// ---------------------------------------------------------------------------\n\n/** A fresh N×N×N×N zero tensor (independent inner arrays). */\nfunction nestedZeros4(N: number): number[][][][] {\n // Bolt: V8 fast-path literal allocation bypasses `new Array` and looping overhead for fixed small sizes.\n if (N === 4) {\n return [\n [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ],\n [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ],\n [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ],\n [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ]\n ];\n }\n\n // Bolt: nested manual allocation is faster than Array.from and .fill\n const out = new Array<number[][][]>(N);\n for (let i = 0; i < N; i++) {\n const arr3 = new Array<number[][]>(N);\n for (let j = 0; j < N; j++) {\n const arr2 = new Array<number[]>(N);\n for (let k = 0; k < N; k++) {\n const arr1 = new Array<number>(N);\n for (let l = 0; l < N; l++) arr1[l] = 0.0;\n arr2[k] = arr1;\n }\n arr3[j] = arr2;\n }\n out[i] = arr3;\n }\n return out;\n}\n\n/** A fresh N×N×N×N×N zero tensor (independent inner arrays). */\nfunction nestedZeros5(N: number): number[][][][][] {\n if (N === 4) {\n return [\n nestedZeros4(4),\n nestedZeros4(4),\n nestedZeros4(4),\n nestedZeros4(4)\n ];\n }\n\n const out = new Array<number[][][][]>(N);\n for (let i = 0; i < N; i++) out[i] = nestedZeros4(N);\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Finite-difference step\n// ---------------------------------------------------------------------------\n\n/**\n * Step size for finite differences on the Christoffel function.\n *\n * Inner step (∂g for one Γ evaluation) uses the v0.4.0 default\n * `1e-6·max(|x|,1)` via `pderivNumericalFn`-style centered FD. This gives ∂g\n * with relative precision ≈ 1e-11 on Schwarzschild components (verified by\n * inspection at r=3·r_s).\n *\n * Outer step (∂Γ for one R evaluation) is `1e-4·max(|x|,1)` and we use a\n * **4th-order centered stencil**:\n *\n * f'(x) ≈ [−f(x+2h) + 8 f(x+h) − 8 f(x-h) + f(x-2h)] / (12 h)\n *\n * Truncation O(h⁴) instead of O(h²). At h=0.886 m (r=3·r_s, M=M_sun),\n * truncation ≈ h⁴·Γ⁽⁵⁾/Γ ~ 1e-13 relative, round-off ε·|Γ|/h ~ 1e-15 relative.\n * Both sit well below the 1e-9 gate.\n *\n * The 2nd-order outer FD that v0.4.0 covariant-derivative lowering uses\n * leaves ~3e-6 relative error on R^t_{rtr} due to noise propagation through\n * the c²-scaled g_{tt} component — 4th-order outer FD recovers the precision.\n */\nfunction outerStep(x: number): number {\n return 1e-4 * Math.max(Math.abs(x), 1);\n}\n\n/**\n * Build a flat ∂_μ g sampler around point x using a **4th-order centered\n * stencil**:\n *\n * ∂_μ g ≈ [−g(x+2h) + 8 g(x+h) − 8 g(x−h) + g(x−2h)] / (12 h)\n *\n * Returned function matches the `getMetricDeriv` signature expected by\n * `computeChristoffelTensor`.\n *\n * Inner step `h_i = 1e-3·max(|x|,1)` is intentionally LARGER than the v0.4.0\n * 1e-6 default to compensate for the c²·g_{tt} ~ 6e16 cancellation noise: a\n * 4th-order stencil at h_i ≈ 8.86 m around r=3·r_s gives truncation\n * O(h_i⁴·g⁽⁵⁾) ~ 1e-13 relative on each ∂g component while keeping round-off\n * ε|g|/h_i ~ 1e-15 relative — orders below the 1e-9 component-match gate.\n */\nfunction makeInnerGradFn(\n gFn: MetricFn,\n x0: ReadonlyArray<number>,\n N: number,\n): (mu: number) => number[] {\n // v0.5.1 PD-7: delegates to the shared `pderivNumericalFn(..., {order: 4})`\n // 4th-order centered stencil. The explicit `h = 1e-3·max(|x|,1)` override\n // is load-bearing: the c²·g_{tt} cancellation noise on Schwarzschild\n // demands a larger step than the v0.5.0-default 1e-4 to balance truncation\n // vs round-off at the ≤1e-9 component-match gate. (See module JSDoc.)\n return (mu: number): number[] => {\n const xc = x0[mu];\n const h = 1e-3 * Math.max(Math.abs(xc), 1);\n const d = pderivNumericalFn(gFn, x0, mu, { order: 4, h });\n const flat = Array.isArray(d) ? (d as number[]) : [d as number];\n if (flat.length !== N * N) {\n throw new NumericalBackendError(\n `curvature-lowering: metric closure returned wrong shape — expected ${N * N}, ` +\n `got ${flat.length}`,\n );\n }\n return flat;\n };\n}\n\n/**\n * Compute Γ^ρ_{σν} at coordinate x. Internally builds a centered-FD ∂g sampler\n * around x and delegates to `computeChristoffelTensor` (the v0.4.0 helper).\n *\n * Returns a fully-materialised 3-deep nested array Γ[ρ][σ][ν]. (We do NOT keep\n * the EngineTensor wrapper because we immediately rebuild dGamma and R as\n * plain nested arrays — round-tripping through the engine on every FD sample\n * would dominate the cost.)\n */\nexport function christoffelAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): number[][][] {\n const gInvFlat = flattenNA(gInverseFn(x));\n if (gInvFlat.length !== N * N) {\n throw new NumericalBackendError(\n `curvature-lowering: gInverseFn returned wrong shape — expected ${N * N}, got ${gInvFlat.length}`,\n );\n }\n const gradFn = makeInnerGradFn(gFn, x, N);\n const tensor = computeChristoffelTensor(gInvFlat, gradFn, N, engine);\n const nested = engine.toNested(tensor) as NestedArray;\n engine.dispose?.(tensor);\n\n // Cast to the expected nested shape; computeChristoffelTensor produces\n // shape [N,N,N] so this is structurally [ρ][middle][last]. We treat\n // [middle] as σ and [last] as ν (Christoffel symmetry makes the two\n // lower-slot conventions numerically interchangeable).\n return nested as number[][][];\n}\n\n/**\n * dGamma[λ][ρ][σ][ν] = ∂_λ Γ^ρ_{σν} via centered FD on `christoffelAt`. (I3)\n *\n * Includes a runtime index-assert verifying `dGamma[1][1][1][1]` is finite\n * before returning (catches silent shape-permutation bugs introduced by future\n * edits to `computeChristoffelTensor`'s output ordering).\n */\nexport function dGammaAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): DGammaTensor {\n // Allocate dGamma[λ][ρ][σ][ν]\n const dGamma: number[][][][] = nestedZeros4(N);\n\n // v0.5.1 PD-7: 4th-order centered stencil via the shared\n // `pderivNumericalFn(..., {order: 4})` (h = 1e-4·max(|x|,1) default matches\n // the v0.5.0 `outerStep`). Each axis returns a flat number[] of length N³;\n // unflatten into the `dGamma[λ][ρ][σ][ν]` axis-0 slab.\n const christFn = (xs: ReadonlyArray<number>): NestedArray =>\n christoffelAt(xs, gFn, gInverseFn, N, engine);\n for (let lam = 0; lam < N; lam++) {\n const d = pderivNumericalFn(christFn, x, lam, { order: 4 });\n const flat = Array.isArray(d) ? (d as number[]) : [d as number];\n if (flat.length !== N * N * N) {\n throw new NumericalBackendError(\n `dGammaAt: christoffelAt derivative shape mismatch — expected ${N * N * N}, got ${flat.length}`,\n );\n }\n const N2 = N * N;\n for (let rho = 0; rho < N; rho++) {\n for (let sigma = 0; sigma < N; sigma++) {\n for (let nu = 0; nu < N; nu++) {\n dGamma[lam][rho][sigma][nu] = flat[rho * N2 + sigma * N + nu];\n }\n }\n }\n }\n\n // I3 runtime index-assert: verify the container is populated as expected.\n // dGamma[1][1][1][1] is ∂_r Γ^r_{rr} for Schwarzschild — a non-trivial real\n // number, so a `Number.isFinite` check catches both shape regressions and\n // numerical blow-ups.\n const probe = dGamma[1]?.[1]?.[1]?.[1];\n if (typeof probe !== 'number' || !Number.isFinite(probe)) {\n throw new NumericalBackendError(\n `curvature-lowering: dGamma index-assert failed — dGamma[1][1][1][1] is ` +\n `${probe} (expected finite number). Shape regression in christoffelAt?`,\n );\n }\n\n return dGamma as DGammaTensor;\n}\n\n/**\n * Build the full 4×4×4×4 Riemann tensor R^ρ_{σμν} from Γ and ∂Γ per the\n * Carroll formula (Adam+Eve F4-S3):\n *\n * R[ρ][σ][μ][ν] = ∂_μ Γ[ρ][σ][ν] − ∂_ν Γ[ρ][σ][μ]\n * + Σ_λ (Γ[ρ][λ][μ] Γ[λ][σ][ν] − Γ[ρ][λ][ν] Γ[λ][σ][μ])\n *\n * σ in the SECOND lower slot of each Γ (F4/S3 correction).\n */\nexport function buildRiemann(\n gamma: GammaTensor,\n dGamma: DGammaTensor,\n N: number,\n): number[][][][] {\n // Bolt: Unroll and cache inner loop constants for N=4, creating 4D array in-place\n // without relying on `nestedZeros4` or excessive repetitive lookups. This drops overhead significantly\n // over creating an empty multi-dimensional array and repeatedly fetching `dGamma[mu][rho][sigma][nu]`.\n if (N === 4) {\n const R = new Array(4);\n\n for (let rho = 0; rho < 4; rho++) {\n const R_rho = new Array(4);\n const gamma_rho = gamma[rho];\n const g_rho_0 = gamma_rho[0];\n const g_rho_1 = gamma_rho[1];\n const g_rho_2 = gamma_rho[2];\n const g_rho_3 = gamma_rho[3];\n\n for (let sigma = 0; sigma < 4; sigma++) {\n const R_rho_sigma = new Array(4);\n const g_0_sig = gamma[0][sigma];\n const g_1_sig = gamma[1][sigma];\n const g_2_sig = gamma[2][sigma];\n const g_3_sig = gamma[3][sigma];\n\n for (let mu = 0; mu < 4; mu++) {\n const dG_mu = dGamma[mu][rho][sigma];\n\n const g_rho_0_mu = g_rho_0[mu];\n const g_rho_1_mu = g_rho_1[mu];\n const g_rho_2_mu = g_rho_2[mu];\n const g_rho_3_mu = g_rho_3[mu];\n\n const g_0_sig_mu = g_0_sig[mu];\n const g_1_sig_mu = g_1_sig[mu];\n const g_2_sig_mu = g_2_sig[mu];\n const g_3_sig_mu = g_3_sig[mu];\n\n const R_rho_sigma_mu = new Array(4);\n for (let nu = 0; nu < 4; nu++) {\n let value = dG_mu[nu] - dGamma[nu][rho][sigma][mu];\n value += g_rho_0_mu * g_0_sig[nu] - g_rho_0[nu] * g_0_sig_mu;\n value += g_rho_1_mu * g_1_sig[nu] - g_rho_1[nu] * g_1_sig_mu;\n value += g_rho_2_mu * g_2_sig[nu] - g_rho_2[nu] * g_2_sig_mu;\n value += g_rho_3_mu * g_3_sig[nu] - g_rho_3[nu] * g_3_sig_mu;\n R_rho_sigma_mu[nu] = value;\n }\n R_rho_sigma[mu] = R_rho_sigma_mu;\n }\n R_rho[sigma] = R_rho_sigma;\n }\n R[rho] = R_rho;\n }\n return R;\n }\n\n const R: number[][][][] = nestedZeros4(N);\n\n for (let rho = 0; rho < N; rho++) {\n for (let sigma = 0; sigma < N; sigma++) {\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n // ∂_μ Γ^ρ_{σν} − ∂_ν Γ^ρ_{σμ}\n let value = dGamma[mu][rho][sigma][nu] - dGamma[nu][rho][sigma][mu];\n // Σ_λ (Γ^ρ_{λμ} Γ^λ_{σν} − Γ^ρ_{λν} Γ^λ_{σμ})\n for (let lam = 0; lam < N; lam++) {\n value += gamma[rho][lam][mu] * gamma[lam][sigma][nu]\n - gamma[rho][lam][nu] * gamma[lam][sigma][mu];\n }\n R[rho][sigma][mu][nu] = value;\n }\n }\n }\n }\n\n return R;\n}\n\n// ---------------------------------------------------------------------------\n// v0.5.0 Task 9: helpers for bianchiResidual()\n// ---------------------------------------------------------------------------\n\n/**\n * Compute the upper-Riemann tensor R^ρ_{σμν} at coordinate x using the same\n * Γ + ∂Γ pipeline as the riemann-tensor lowering case. Encapsulates the\n * full christoffelAt + dGammaAt + buildRiemann sequence so callers (Task 9\n * Bianchi residual) can sample R at perturbed coordinates without\n * re-implementing the FD machinery. The curvature report of `upt metric`\n * reads it too.\n * @internal\n */\nexport function riemannUpperAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n // Optional precomputed Γ^ρ_{σν} at x — `christoffelAt` is a pure function of\n // x, so reusing the caller's center evaluation is numerically identical and\n // avoids one redundant Christoffel compute (the Bianchi path already has it).\n gammaAtX?: number[][][],\n): number[][][][] {\n const gamma = gammaAtX ?? christoffelAt(x, gFn, gInverseFn, N, engine);\n const dGamma = dGammaAt(x, gFn, gInverseFn, N, engine);\n return buildRiemann(gamma, dGamma, N);\n}\n\n/**\n * Lower the upper-ρ index of R^ρ_{σμν} via the covariant metric g_{aρ}:\n *\n * R_{aσμν} = Σ_ρ g_{aρ} R^ρ_{σμν}\n *\n * Output index order: `[a][σ][μ][ν]` — all four lower. (a is the freshly\n * lowered index in the first slot.)\n * @internal\n */\nexport function lowerFirstIndex(\n R: number[][][][],\n gLowerFlat: ReadonlyArray<number>,\n N: number,\n): number[][][][] {\n // Bolt: Exploit physical 4D spacetime constraints to fully unroll the first-index\n // tensor lowering loop. By eliminating repetitive `a * N + rho` multi-dimensional\n // arithmetic operations and creating fully formed array closures without\n // generic `nestedZeros4` logic, we eliminate redundant garbage collection pressure.\n if (N === 4) {\n const Rlow: number[][][][] = new Array(4);\n for (let a = 0; a < 4; a++) {\n const a_offset = a * 4;\n const g0 = gLowerFlat[a_offset];\n const g1 = gLowerFlat[a_offset + 1];\n const g2 = gLowerFlat[a_offset + 2];\n const g3 = gLowerFlat[a_offset + 3];\n\n if (g0 === 0.0 && g1 === 0.0 && g2 === 0.0 && g3 === 0.0) {\n Rlow[a] = [\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],\n [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]\n ];\n continue;\n }\n\n const Rlow_a = new Array(4);\n for (let sig = 0; sig < 4; sig++) {\n const Rlow_a_sig = new Array(4);\n const R0 = R[0][sig];\n const R1 = R[1][sig];\n const R2 = R[2][sig];\n const R3 = R[3][sig];\n\n for (let mu = 0; mu < 4; mu++) {\n const R0_mu = R0[mu];\n const R1_mu = R1[mu];\n const R2_mu = R2[mu];\n const R3_mu = R3[mu];\n Rlow_a_sig[mu] = [\n g0 * R0_mu[0] + g1 * R1_mu[0] + g2 * R2_mu[0] + g3 * R3_mu[0],\n g0 * R0_mu[1] + g1 * R1_mu[1] + g2 * R2_mu[1] + g3 * R3_mu[1],\n g0 * R0_mu[2] + g1 * R1_mu[2] + g2 * R2_mu[2] + g3 * R3_mu[2],\n g0 * R0_mu[3] + g1 * R1_mu[3] + g2 * R2_mu[3] + g3 * R3_mu[3]\n ];\n }\n Rlow_a[sig] = Rlow_a_sig;\n }\n Rlow[a] = Rlow_a;\n }\n return Rlow;\n }\n\n const Rlow: number[][][][] = nestedZeros4(N);\n for (let a = 0; a < N; a++) {\n for (let sig = 0; sig < N; sig++) {\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n let sum = 0;\n for (let rho = 0; rho < N; rho++) {\n sum += gLowerFlat[a * N + rho] * R[rho][sig][mu][nu];\n }\n Rlow[a][sig][mu][nu] = sum;\n }\n }\n }\n }\n return Rlow;\n}\n\n/**\n * Sample the all-lower Riemann tensor R_{αβγδ}(x) — combines `riemannUpperAt`\n * with `lowerFirstIndex` for the single-coordinate evaluation. Used both as\n * the base sample and (with perturbed x) as the FD inputs for ∂_λ R_{αβγδ}.\n */\nexport function riemannLowerAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n /** Optional precomputed Γ at x — forwarded to `riemannUpperAt` to skip the\n * redundant Christoffel compute when the caller already has it. */\n gammaAtX?: number[][][],\n): number[][][][] {\n const Rup = riemannUpperAt(x, gFn, gInverseFn, N, engine, gammaAtX);\n const gFlat = flattenNA(gFn(x));\n if (gFlat.length !== N * N) {\n throw new NumericalBackendError(\n `bianchi-residual: gFn returned wrong shape — expected ${N * N}, got ${gFlat.length}`,\n );\n }\n return lowerFirstIndex(Rup, gFlat, N);\n}\n\n/**\n * Compute ∂_λ R_{αβγδ}(x) via a 4th-order centered stencil on\n * `riemannLowerAt`. Index order: `dR[λ][α][β][γ][δ] = ∂_λ R_{αβγδ}`.\n *\n * Uses the same outer step (`outerStep`) as Task 6's dGammaAt so the\n * FD-noise compounding pattern matches. This is one extra layer of FD on top\n * of the Christoffel-of-Christoffel double-FD already inside `riemannLowerAt`\n * — total: ∂(∂(∂g)) at 4th order in each layer. Empirical noise floor reached\n * by the per-component value is documented in the test report.\n */\nfunction dRiemannLowerAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): number[][][][][] {\n const dR: number[][][][][] = nestedZeros5(N);\n\n // v0.5.1 PD-7: 4th-order centered stencil via the shared\n // `pderivNumericalFn(..., {order: 4})` — default h = 1e-4·max(|x|,1) matches\n // the v0.5.0 `outerStep`. Each axis call returns a flat number[] of length\n // N⁴ (riemannLowerAt produces [N,N,N,N]); unflatten into the\n // `dR[λ][a][b][c][d]` axis-0 slab.\n const RlowerFn = (xs: ReadonlyArray<number>): NestedArray =>\n riemannLowerAt(xs, gFn, gInverseFn, N, engine);\n const N2 = N * N;\n const N3 = N * N * N;\n for (let lam = 0; lam < N; lam++) {\n const flat = pderivNumericalFn(RlowerFn, x, lam, { order: 4 }) as number[];\n if (!Array.isArray(flat) || flat.length !== N2 * N2) {\n throw new NumericalBackendError(\n `dRiemannLowerAt: derivative shape mismatch — expected ${N2 * N2}, got ${\n Array.isArray(flat) ? flat.length : 'scalar'\n }`,\n );\n }\n for (let a = 0; a < N; a++) {\n for (let b = 0; b < N; b++) {\n for (let c = 0; c < N; c++) {\n for (let d = 0; d < N; d++) {\n dR[lam][a][b][c][d] = flat[a * N3 + b * N2 + c * N + d];\n }\n }\n }\n }\n }\n\n return dR;\n}\n\n/**\n * Compute ∇_λ R_{μνρσ} via partial + Christoffel-correction terms (Approach 1).\n *\n * ∇_λ R_{μνρσ} = ∂_λ R_{μνρσ}\n * − Γ^α_{λμ} R_{ανρσ}\n * − Γ^α_{λν} R_{μαρσ}\n * − Γ^α_{λρ} R_{μνασ}\n * − Γ^α_{λσ} R_{μνρα}\n *\n * Index order: `covR[λ][μ][ν][ρ][σ] = ∇_λ R_{μνρσ}`.\n *\n * Approach choice (full ∇, not raw ∂): the second Bianchi identity\n * ∇_{[λ} R_{μν]ρσ} = 0 is the canonical statement. Using raw ∂ would give a\n * residual dominated by the (cyclic-non-cancelling) Christoffel-correction\n * terms, masking the identity check with O(1) algebraic clutter. Full ∇\n * makes the test a genuine self-consistency check of the lowered Riemann.\n */\nexport function covariantDerivRiemannLowerAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): number[][][][][] {\n const gamma = christoffelAt(x, gFn, gInverseFn, N, engine);\n // Reuse the center Γ — riemannLowerAt(x) would otherwise recompute it.\n const R = riemannLowerAt(x, gFn, gInverseFn, N, engine, gamma);\n const dR = dRiemannLowerAt(x, gFn, gInverseFn, N, engine);\n\n const covR: number[][][][][] = nestedZeros5(N);\n\n for (let lam = 0; lam < N; lam++) {\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n for (let rho = 0; rho < N; rho++) {\n for (let sig = 0; sig < N; sig++) {\n let value = dR[lam][mu][nu][rho][sig];\n // Subtract Γ^α_{λμ} R_{ανρσ} (correction for the μ index)\n // Subtract Γ^α_{λν} R_{μαρσ} (correction for the ν index)\n // Subtract Γ^α_{λρ} R_{μνασ} (correction for the ρ index)\n // Subtract Γ^α_{λσ} R_{μνρα} (correction for the σ index)\n for (let a = 0; a < N; a++) {\n value -= gamma[a][lam][mu] * R[a][nu][rho][sig];\n value -= gamma[a][lam][nu] * R[mu][a][rho][sig];\n value -= gamma[a][lam][rho] * R[mu][nu][a][sig];\n value -= gamma[a][lam][sig] * R[mu][nu][rho][a];\n }\n covR[lam][mu][nu][rho][sig] = value;\n }\n }\n }\n }\n }\n\n return covR;\n}\n\n/**\n * Build the second-Bianchi-identity residual (cyclic over first three indices):\n *\n * B_{λμνρσ} = ∇_λ R_{μνρσ} + ∇_μ R_{νλρσ} + ∇_ν R_{λμρσ}\n *\n * Carroll Eq. 3.95: B ≡ 0 in any (torsion-free) Lorentzian manifold. The\n * residual measures the FD-truncation + cancellation noise on the lowered\n * Riemann tensor through one extra ∂ layer.\n *\n * Index order: `B[λ][μ][ν][ρ][σ]` — all five lower.\n */\nfunction bianchiResidualAt(\n x: ReadonlyArray<number>,\n gFn: MetricFn,\n gInverseFn: MetricFn,\n N: number,\n engine: TensorEngine,\n): number[][][][][] {\n const covR = covariantDerivRiemannLowerAt(x, gFn, gInverseFn, N, engine);\n\n const B: number[][][][][] = nestedZeros5(N);\n\n for (let lam = 0; lam < N; lam++) {\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n for (let rho = 0; rho < N; rho++) {\n for (let sig = 0; sig < N; sig++) {\n B[lam][mu][nu][rho][sig] =\n covR[lam][mu][nu][rho][sig] // ∇_λ R_{μνρσ}\n + covR[mu][nu][lam][rho][sig] // ∇_μ R_{νλρσ}\n + covR[nu][lam][mu][rho][sig]; // ∇_ν R_{λμρσ}\n }\n }\n }\n }\n }\n\n return B;\n}\n\n/**\n * JS-side contraction of a flat 4-axis tensor R[a][b][c][d] (length N⁴, row-major)\n * down to a 2-tensor by summing one upper axis against one lower axis.\n *\n * Configuration:\n * - `upperAxis`: the axis index (0..3) that contracts WITH `lowerAxis` (dummy slot).\n * - `lowerAxis`: the partner axis (0..3) forming the dummy pair.\n * - `outAxes`: the two surviving axes [i, j] that become the (free output)\n * rows/cols of the returned N×N matrix.\n *\n * For Carroll Eq. 3.91 Ricci R_μν = R^λ_{μλν} on Riemann stored as R[ρ][σ][μ][ν]:\n * contractRiemannJS(flatR, N, { upperAxis: 0, lowerAxis: 2, outAxes: [1, 3] })\n * sums `R[λ][μ_out][λ][ν_out]` over λ.\n *\n * Pre-flattened input convention: row-major `R[a][b][c][d] = flatR[a*N³ + b*N² + c*N + d]`.\n * (Matches `flattenNestedArray` output for an [N,N,N,N] EngineTensor.)\n *\n * @internal — extracted from `lowering.ts` ricci-tensor arm (AS-1, v0.5.1). Kept\n * deliberately narrow (4-axis source → 2-axis output) to match the v0.5.0 GR\n * curvature pipeline; generalisation deferred to v0.6.0 if Weyl/Kretschmann\n * arrives (see `docs/architecture/COMPONENTS.md` curvature-layer pattern note).\n */\nexport function contractRiemannJS(\n flatR: ReadonlyArray<number>,\n N: number,\n config: {\n upperAxis: 0 | 1 | 2 | 3;\n lowerAxis: 0 | 1 | 2 | 3;\n outAxes: readonly [number, number];\n },\n): number[][] {\n const { upperAxis, lowerAxis, outAxes } = config;\n if (upperAxis === lowerAxis) {\n throw new NumericalBackendError(\n `contractRiemannJS: upperAxis (${upperAxis}) and lowerAxis (${lowerAxis}) must differ`,\n );\n }\n const [outA, outB] = outAxes;\n if (outA === outB) {\n throw new NumericalBackendError(\n `contractRiemannJS: outAxes [${outA},${outB}] must be distinct`,\n );\n }\n if (outA === upperAxis || outA === lowerAxis || outB === upperAxis || outB === lowerAxis) {\n throw new NumericalBackendError(\n `contractRiemannJS: outAxes [${outA},${outB}] must not overlap dummy pair [${upperAxis},${lowerAxis}]`,\n );\n }\n if (flatR.length !== N * N * N * N) {\n throw new NumericalBackendError(\n `contractRiemannJS: flatR length ${flatR.length} != N⁴ = ${N * N * N * N}`,\n );\n }\n\n // Row-major strides for R[a][b][c][d].\n const N2 = N * N;\n const N3 = N * N * N;\n const strides = [N3, N2, N, 1] as const;\n const strideDummy = strides[upperAxis] + strides[lowerAxis];\n const strideOutA = strides[outA];\n const strideOutB = strides[outB];\n\n if (N === 4) {\n const strideUpper = strides[upperAxis];\n const strideLower = strides[lowerAxis];\n const dummy1 = strideUpper + strideLower;\n const dummy2 = dummy1 * 2;\n const dummy3 = dummy1 * 3;\n\n const out4 = [\n [0.0, 0.0, 0.0, 0.0],\n [0.0, 0.0, 0.0, 0.0],\n [0.0, 0.0, 0.0, 0.0],\n [0.0, 0.0, 0.0, 0.0],\n ];\n\n for (let i = 0; i < 4; i++) {\n const baseI = i * strideOutA;\n const row = out4[i];\n for (let j = 0; j < 4; j++) {\n const baseIJ = baseI + j * strideOutB;\n row[j] = flatR[baseIJ] + flatR[baseIJ + dummy1] + flatR[baseIJ + dummy2] + flatR[baseIJ + dummy3];\n }\n }\n return out4;\n }\n\n // Bolt: Manual allocation is faster than Array.from\n const out: number[][] = new Array<number[]>(N);\n for (let k = 0; k < N; k++) {\n const row = new Array<number>(N);\n for (let l = 0; l < N; l++) row[l] = 0.0;\n out[k] = row;\n }\n for (let i = 0; i < N; i++) {\n const baseI = i * strideOutA;\n for (let j = 0; j < N; j++) {\n const baseIJ = baseI + j * strideOutB;\n let sum = 0;\n for (let lam = 0; lam < N; lam++) {\n sum += flatR[baseIJ + lam * strideDummy];\n }\n out[i][j] = sum;\n }\n }\n return out;\n}\n\n\n// ===========================================================================\n// v0.6.1 Phase 2 Proposal 2 — Arm extractions from lowering.ts\n// ===========================================================================\n//\n// Two FD pipelines (`bianchi-residual` and `weyl-tensor`) were inlined as\n// switch arms in `lowering.ts`'s `lowerCurvature` dispatcher. Each was a\n// self-contained block of input-resolution + helper-pipeline + result-wrap\n// boilerplate; together they accounted for ~125 LOC of lowering.ts. Moving\n// them here (a) keeps the dispatcher readable, (b) co-locates the FD\n// machinery with its consumers, and (c) makes the per-arm pipeline\n// independently unit-testable in the future.\n\n/**\n * Lower a `bianchi-residual` AST node to a 5-rank EngineTensor B_{λμνρσ}.\n *\n * Extracted from `lowering.ts` `lowerCurvature` switch arm in v0.6.1 Phase 2.\n * Wires `inputs.tensors[xCoord.name]` (the coordinate vector) and\n * `inputs.fields[gLower.name]` / `inputs.fields[gInverse.name]` (the metric\n * closures) into the existing `bianchiResidualAt` FD helper.\n *\n * Approach (cyclic ∇R sum):\n * B_{λμνρσ} = ∇_λ R_{μνρσ} + ∇_μ R_{νλρσ} + ∇_ν R_{λμρσ}\n * Each ∇_λ R_{μνρσ} is computed with the four Christoffel-correction terms.\n *\n * @returns engine.fromNested(B, [N,N,N,N,N])\n */\nexport function lowerBianchiResidual(\n node: BianchiResidualNode,\n inputs: NumericalInputs,\n engine: TensorEngine,\n): EngineTensor {\n const rNode = node.riemann;\n const N = dimensionOf(inputs);\n const x = flattenNestedArray(requireValue(rNode.xCoord.name, inputs), N);\n const gFn = inputs.fields?.get(rNode.gLower.name) as MetricFn | undefined;\n const gInverseFn = inputs.fields?.get(rNode.gInverse.name) as MetricFn | undefined;\n if (!gFn || !gInverseFn) {\n throw new NumericalBackendError(\n `lowering: bianchi-residual numerical evaluation requires coordinate-` +\n `dependent metric closures in inputs.fields for \"${rNode.gLower.name}\" ` +\n `and \"${rNode.gInverse.name}\". ` +\n `Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`,\n );\n }\n const B = bianchiResidualAt(x, gFn, gInverseFn, N, engine);\n return engine.fromNested(B as NestedArray, [N, N, N, N, N]);\n}\n\n/**\n * Lower a `weyl-tensor` AST node to a 4-rank EngineTensor C^ρ_{σμν}.\n *\n * Extracted from `lowering.ts` `lowerCurvature` switch arm in v0.6.1 Phase 2.\n * Implements the F-5 Weyl-formula pipeline:\n *\n * 1. Resolve `x`, `g`, `g_inv`, `g(x)`, `g_inv(x)` from `inputs`.\n * 2. Compute Riemann R^ρ_{σμν} via `christoffelAt` + `dGammaAt` + `buildRiemann`.\n * 3. Contract Ricci R_{μν} = R^λ_{μλν} via `contractRiemannJS`.\n * 4. Compute Ricci scalar R = Σ_{μν} g^{μν} R_{μν}.\n * 5. Assemble Weyl via `computeWeylTensor({...})` using the F-5 formula.\n *\n * Naming convention (must match the caller's inputs map):\n * inputs.tensors[metricName] — g_{μν} at x\n * inputs.tensors[metricName + '_inv'] — g^{μν} at x\n * inputs.tensors['x'] — coordinate 4-vector\n * inputs.fields[metricName] — coordinate-dependent g closure\n * inputs.fields[metricName + '_inv'] — coordinate-dependent g^{-1} closure\n *\n * @returns engine.fromNested(C, [N,N,N,N])\n */\nexport function lowerWeylTensor(\n node: WeylTensorNode,\n inputs: NumericalInputs,\n engine: TensorEngine,\n): EngineTensor {\n const N = dimensionOf(inputs);\n const metricName = node.metric.name;\n const metricInvName = `${metricName}_inv`;\n\n const x = flattenNestedArray(requireValue('x', inputs), N);\n const gFn = inputs.fields?.get(metricName) as MetricFn | undefined;\n const gInverseFn = inputs.fields?.get(metricInvName) as MetricFn | undefined;\n if (!gFn || !gInverseFn) {\n throw new NumericalBackendError(\n `lowering: weyl-tensor requires coordinate-dependent metric closures in ` +\n `inputs.fields for \"${metricName}\" and \"${metricInvName}\". ` +\n `Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`,\n );\n }\n\n // Step 1-2: Riemann R^ρ_{σμν} via FD pipeline.\n const gamma = christoffelAt(x, gFn, gInverseFn, N, engine);\n const dGamma = dGammaAt(x, gFn, gInverseFn, N, engine);\n const Rup = buildRiemann(gamma, dGamma, N);\n\n // Step 3: Ricci R_{μν} = R^λ_{μλν} (Carroll Eq. 3.91).\n const flatRup = flattenNestedArray(Rup as unknown as NestedArray, N * N * N * N);\n const Ric = contractRiemannJS(flatRup, N, {\n upperAxis: 0, lowerAxis: 2, outAxes: [1, 3],\n });\n\n // Step 4: Ricci scalar R = Σ_{μν} g^{μν} R_{μν}.\n const gInvFlat = flattenNestedArray(requireValue(metricInvName, inputs), N * N);\n let Rscalar = 0;\n for (let mu = 0; mu < N; mu++) {\n for (let nu = 0; nu < N; nu++) {\n Rscalar += gInvFlat[mu * N + nu] * Ric[mu][nu];\n }\n }\n\n // Step 5: point-sample of covariant metric + inverse, then assemble.\n const gFlat = flattenNestedArray(requireValue(metricName, inputs), N * N);\n // Bolt: Using manual loops over Array.from to avoid massive TypedArray conversion overhead\n const gMat: number[][] = new Array(N);\n const gInvMat: number[][] = new Array(N);\n for (let i = 0; i < N; i++) {\n const rowG = new Array(N);\n const rowGInv = new Array(N);\n const base = i * N;\n for (let j = 0; j < N; j++) {\n const idx = base + j;\n rowG[j] = gFlat[idx];\n rowGInv[j] = gInvFlat[idx];\n }\n gMat[i] = rowG;\n gInvMat[i] = rowGInv;\n }\n\n const C = computeWeylTensor({\n riemann: Rup,\n ricci: Ric,\n ricciScalar: Rscalar,\n metric: gMat,\n metricInverse: gInvMat,\n });\n return engine.fromNested(C as NestedArray, [N, N, N, N]);\n}\n\n/**\n * Lower a `kretschmann-scalar` node to the scalar K = R_{ρσμν} R^{ρσμν}.\n *\n * Uses the FD Riemann pipeline (`riemannLowerAt`) plus `computeKretschmann`.\n * Naming convention matches {@link lowerWeylTensor}.\n */\nexport function lowerKretschmannScalar(\n node: KretschmannScalarNode,\n inputs: NumericalInputs,\n engine: TensorEngine,\n): EngineTensor {\n const N = dimensionOf(inputs);\n const metricName = node.metric.name;\n const metricInvName = `${metricName}_inv`;\n\n const x = flattenNestedArray(requireValue('x', inputs), N);\n const gFn = inputs.fields?.get(metricName) as MetricFn | undefined;\n const gInverseFn = inputs.fields?.get(metricInvName) as MetricFn | undefined;\n if (!gFn || !gInverseFn) {\n throw new NumericalBackendError(\n `lowering: kretschmann-scalar requires coordinate-dependent metric closures in ` +\n `inputs.fields for \"${metricName}\" and \"${metricInvName}\". ` +\n `Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`,\n );\n }\n\n const rLower = riemannLowerAt(x, gFn, gInverseFn, N, engine);\n // `flattenNestedArray` has checked the length is N·N, so the flat row-major form is the one\n // `computeKretschmann` reads as a Float64Array; it never was a number[][] here.\n const gInvFlat = flattenNestedArray(requireValue(metricInvName, inputs), N * N);\n const K = computeKretschmann(rLower, Float64Array.from(gInvFlat));\n return engine.fromNested(K, []);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/numerical/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/numerical/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGlE;CACF;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,qBAAqB;aAE5C,UAAU,EAAE,MAAM;aAClB,aAAa,EAAE,MAAM;IAFvC,YACkB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAQvC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,mBAAoB,SAAQ,qBAAqB;IAC5D,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF"}
|
package/dist/numerical/errors.js
CHANGED
|
@@ -14,7 +14,6 @@ export class NumericalBackendError extends UPTError {
|
|
|
14
14
|
constructor(message, options) {
|
|
15
15
|
super(message, options);
|
|
16
16
|
this.name = 'NumericalBackendError';
|
|
17
|
-
Object.setPrototypeOf(this, NumericalBackendError.prototype);
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
19
|
/**
|
|
@@ -32,7 +31,6 @@ export class EngineCapabilityError extends NumericalBackendError {
|
|
|
32
31
|
this.engineName = engineName;
|
|
33
32
|
this.missingMethod = missingMethod;
|
|
34
33
|
this.name = 'EngineCapabilityError';
|
|
35
|
-
Object.setPrototypeOf(this, EngineCapabilityError.prototype);
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
/**
|
|
@@ -52,7 +50,6 @@ export class GL4ConvergenceError extends NumericalBackendError {
|
|
|
52
50
|
constructor(message) {
|
|
53
51
|
super(message);
|
|
54
52
|
this.name = 'GL4ConvergenceError';
|
|
55
|
-
Object.setPrototypeOf(this, GL4ConvergenceError.prototype);
|
|
56
53
|
}
|
|
57
54
|
}
|
|
58
55
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/numerical/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAe,EAAE,OAAsC;QACjE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/numerical/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAe,EAAE,OAAsC;QACjE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,qBAAsB,SAAQ,qBAAqB;IAE5C,UAAU;IACV,aAAa;IAF/B,YACkB,UAAkB,EAClB,aAAqB,EACrC,OAAsC;QAEtC,KAAK,CACH,WAAW,UAAU,yBAAyB,aAAa,KAAK;YAC9D,wEAAwE,EAC1E,OAAO,CACR,CAAC;0BARc,UAAU;6BACV,aAAa;QAQ7B,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,mBAAoB,SAAQ,qBAAqB;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF","sourcesContent":["/**\n * Numerical-backend error type. Subclass of UPTError so downstream\n * consumers discriminate UPT-source errors uniformly with `instanceof`.\n *\n * @module numerical/errors\n */\nimport { UPTError } from '../dimensional/errors.js';\n\n/**\n * Error type thrown by the numerical-contraction backend. Subclass of\n * `UPTError` so consumers can discriminate UPT-source errors with `instanceof`.\n * @public\n */\nexport class NumericalBackendError extends UPTError {\n constructor(message: string, options?: { readonly cause?: unknown }) {\n super(message, options);\n this.name = 'NumericalBackendError';\n }\n}\n\n/**\n * Thrown when a TensorEngine method required for an operation is not\n * implemented by the active engine. Call `hasAutogradSupport(engine)` before\n * invoking AD methods to avoid this error.\n * @public\n */\nexport class EngineCapabilityError extends NumericalBackendError {\n constructor(\n public readonly engineName: string,\n public readonly missingMethod: string,\n options?: { readonly cause?: unknown },\n ) {\n super(\n `Engine \"${engineName}\" does not implement \"${missingMethod}\". ` +\n `Call \\`hasAutogradSupport(engine)\\` to detect support before invoking.`,\n options,\n );\n this.name = 'EngineCapabilityError';\n }\n}\n\n/**\n * Thrown when the GL4 implicit-stage Picard fixed-point solver fails to\n * reach `picardTol` within `picardMaxIter` iterations. Carries a message\n * matching `/Picard iteration did not converge/` for I7-style specific\n * error-class assertions.\n *\n * Picard convergence is linear with contraction rate ≈ h·|∂f/∂x|; failure\n * usually indicates the step size h is too large for the local curvature.\n * Adaptive step-halving (Task 5) is the production response — direct\n * callers of `gl4Step` should adjust h or picardMaxIter.\n *\n * @public\n */\nexport class GL4ConvergenceError extends NumericalBackendError {\n constructor(message: string) {\n super(message);\n this.name = 'GL4ConvergenceError';\n }\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One central-difference rule.
|
|
3
|
+
*
|
|
4
|
+
* Three readers differentiated a closed form by central differences, each
|
|
5
|
+
* with its own step rule and its own denominator (`2h` at one, the
|
|
6
|
+
* representable step at another). The derivative is here, once: the caller
|
|
7
|
+
* passes the step its rule chose, and the denominator is the step the
|
|
8
|
+
* floating-point point actually took, `dx = (x + h) − (x − h)`, so a
|
|
9
|
+
* perturbation that rounds at an astrophysical `x` is divided by what was
|
|
10
|
+
* applied, not by what was asked.
|
|
11
|
+
*
|
|
12
|
+
* @module numerical/finite-difference
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* `∂f/∂x_key` at `point` by the central difference with half-step `step`:
|
|
16
|
+
* `(f(x + h) − f(x − h)) / ((x + h) − (x − h))`. The other keys of `point` are
|
|
17
|
+
* held. The step rule is the caller's; a zero or non-finite `step` makes the
|
|
18
|
+
* denominator 0 or NaN, which the caller refuses before calling.
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare function centralPartial(f: (point: Record<string, number>) => number, point: Readonly<Record<string, number>>, key: string, step: number): number;
|
|
22
|
+
//# sourceMappingURL=finite-difference.d.ts.map
|