universal-physics-tensor 8.0.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -21
- package/data/atlas/atlas.json +75 -64
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +23 -22
- package/data/atlas/oscillators.json +21 -16
- package/data/atlas/waves.json +33 -28
- package/data/bridge-catalog.json +1356 -1791
- package/data/bridge-catalog.schema.json +789 -46
- package/data/quantities.json +280 -234
- package/data/quantities.schema.json +52 -0
- package/data/schemas/atlas-record.v0.json +184 -46
- package/data/units.json +1178 -0
- package/data/units.schema.json +124 -0
- package/dist/atlas/applicability.d.ts.map +1 -1
- package/dist/atlas/applicability.js +14 -3
- package/dist/atlas/applicability.js.map +1 -1
- package/dist/atlas/association.d.ts +1 -1
- package/dist/atlas/association.js.map +1 -1
- package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
- package/dist/atlas/benchmark/backend-shapes.js +5 -1
- package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
- package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
- package/dist/atlas/benchmark/baselines.js +8 -0
- package/dist/atlas/benchmark/baselines.js.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts +3 -2
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +16 -12
- package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
- package/dist/atlas/benchmark/leakage.js.map +1 -1
- package/dist/atlas/benchmark/loader.js.map +1 -1
- package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
- package/dist/atlas/benchmark/run-atlas.js +14 -2
- package/dist/atlas/benchmark/run-atlas.js.map +1 -1
- package/dist/atlas/benchmark/stats.d.ts +1 -1
- package/dist/atlas/benchmark/stats.d.ts.map +1 -1
- package/dist/atlas/benchmark/stats.js +1 -1
- package/dist/atlas/benchmark/stats.js.map +1 -1
- package/dist/atlas/benchmark/study.js.map +1 -1
- package/dist/atlas/benchmark/types.js.map +1 -1
- package/dist/atlas/bridge-record.d.ts +4 -4
- package/dist/atlas/bridge-record.d.ts.map +1 -1
- package/dist/atlas/bridge-record.js +6 -6
- package/dist/atlas/bridge-record.js.map +1 -1
- package/dist/atlas/catalog-formal-ref.js.map +1 -1
- package/dist/atlas/chain-pipeline.d.ts +0 -11
- package/dist/atlas/chain-pipeline.d.ts.map +1 -1
- package/dist/atlas/chain-pipeline.js +5 -16
- package/dist/atlas/chain-pipeline.js.map +1 -1
- package/dist/atlas/composition-table.js.map +1 -1
- package/dist/atlas/conventions.js.map +1 -1
- package/dist/atlas/coverage.d.ts +2 -2
- package/dist/atlas/coverage.js.map +1 -1
- package/dist/atlas/derivation.js.map +1 -1
- package/dist/atlas/derive-evidence.d.ts +6 -4
- package/dist/atlas/derive-evidence.d.ts.map +1 -1
- package/dist/atlas/derive-evidence.js +7 -2
- package/dist/atlas/derive-evidence.js.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.js +0 -5
- 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 +0 -3
- package/dist/atlas/diffusion/bridges.js.map +1 -1
- package/dist/atlas/diffusion/dimensions.js.map +1 -1
- package/dist/atlas/diffusion/index.d.ts +1 -1
- package/dist/atlas/diffusion/index.d.ts.map +1 -1
- package/dist/atlas/diffusion/index.js.map +1 -1
- package/dist/atlas/diffusion/models.js.map +1 -1
- package/dist/atlas/diffusion/numerics.js.map +1 -1
- package/dist/atlas/error-algebra.d.ts +6 -0
- package/dist/atlas/error-algebra.d.ts.map +1 -1
- package/dist/atlas/error-algebra.js +26 -0
- package/dist/atlas/error-algebra.js.map +1 -1
- package/dist/atlas/export.d.ts +18 -2
- package/dist/atlas/export.d.ts.map +1 -1
- package/dist/atlas/export.js +9 -3
- package/dist/atlas/export.js.map +1 -1
- package/dist/atlas/families.d.ts +19 -2
- package/dist/atlas/families.d.ts.map +1 -1
- package/dist/atlas/families.js +26 -3
- package/dist/atlas/families.js.map +1 -1
- package/dist/atlas/family.d.ts +27 -0
- package/dist/atlas/family.d.ts.map +1 -0
- package/dist/atlas/family.js +12 -0
- package/dist/atlas/family.js.map +1 -0
- package/dist/atlas/index.d.ts +3 -2
- package/dist/atlas/index.d.ts.map +1 -1
- package/dist/atlas/index.js +2 -1
- package/dist/atlas/index.js.map +1 -1
- package/dist/atlas/link-prediction.d.ts +1 -1
- package/dist/atlas/link-prediction.d.ts.map +1 -1
- package/dist/atlas/link-prediction.js.map +1 -1
- package/dist/atlas/model.js.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.js +0 -1
- 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 +0 -3
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.js +0 -2
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
- package/dist/atlas/oscillators/dimensions.js.map +1 -1
- package/dist/atlas/oscillators/index.d.ts +1 -16
- package/dist/atlas/oscillators/index.d.ts.map +1 -1
- package/dist/atlas/oscillators/index.js.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
- package/dist/atlas/oscillators/models.js.map +1 -1
- package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
- package/dist/atlas/oscillators/norm-transport.js.map +1 -1
- package/dist/atlas/oscillators/norms.js.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
- package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
- package/dist/atlas/oscillators/phase-translation.js.map +1 -1
- package/dist/atlas/oscillators/position-translation.js.map +1 -1
- package/dist/atlas/oscillators/rejections.js.map +1 -1
- package/dist/atlas/path-bound.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +1601 -220
- package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
- package/dist/atlas/physjs-entries.generated.js +1854 -345
- package/dist/atlas/physjs-entries.generated.js.map +1 -1
- package/dist/atlas/physjs-ref.d.ts +151 -117
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +244 -211
- package/dist/atlas/physjs-ref.js.map +1 -1
- package/dist/atlas/physjs-reviewed.d.ts +31 -0
- package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
- package/dist/atlas/physjs-reviewed.js +194 -0
- package/dist/atlas/physjs-reviewed.js.map +1 -0
- package/dist/atlas/poster/associations.js.map +1 -1
- package/dist/atlas/poster/derivations.js.map +1 -1
- package/dist/atlas/poster/statements.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +16 -8
- package/dist/atlas/proof-target.d.ts.map +1 -1
- package/dist/atlas/proof-target.js +34 -31
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/atlas/public.d.ts +2 -1
- package/dist/atlas/public.d.ts.map +1 -1
- package/dist/atlas/public.js +2 -1
- package/dist/atlas/public.js.map +1 -1
- package/dist/atlas/regime.js.map +1 -1
- package/dist/atlas/serialize.d.ts +18 -12
- package/dist/atlas/serialize.d.ts.map +1 -1
- package/dist/atlas/serialize.js +28 -18
- package/dist/atlas/serialize.js.map +1 -1
- package/dist/atlas/statement.js.map +1 -1
- package/dist/atlas/translation-registry.js.map +1 -1
- package/dist/atlas/translation.js.map +1 -1
- package/dist/atlas/types.d.ts +9 -2
- package/dist/atlas/types.d.ts.map +1 -1
- package/dist/atlas/types.js +1 -1
- package/dist/atlas/types.js.map +1 -1
- package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/waves/bridges-closure.js +0 -3
- 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 +0 -4
- package/dist/atlas/waves/bridges.js.map +1 -1
- package/dist/atlas/waves/index.d.ts +1 -1
- package/dist/atlas/waves/index.d.ts.map +1 -1
- package/dist/atlas/waves/index.js.map +1 -1
- package/dist/atlas/waves/models.js.map +1 -1
- package/dist/atlas/waves/numerics.js.map +1 -1
- package/dist/atlas/witness-artifact.js.map +1 -1
- package/dist/atlas/witness-dominance.d.ts +4 -3
- package/dist/atlas/witness-dominance.d.ts.map +1 -1
- package/dist/atlas/witness-dominance.js +15 -5
- package/dist/atlas/witness-dominance.js.map +1 -1
- package/dist/atlas/witness-numeric.d.ts +8 -4
- package/dist/atlas/witness-numeric.d.ts.map +1 -1
- package/dist/atlas/witness-numeric.js +27 -2
- package/dist/atlas/witness-numeric.js.map +1 -1
- package/dist/atlas/witness-result.d.ts +7 -1
- package/dist/atlas/witness-result.d.ts.map +1 -1
- package/dist/atlas/witness-result.js.map +1 -1
- package/dist/atlas/witness-specs.js.map +1 -1
- package/dist/atlas/witness-symbolic.js.map +1 -1
- package/dist/atlas/witnesses/quantum-support.js.map +1 -1
- package/dist/bridges/caller-table.d.ts +1 -1
- package/dist/bridges/caller-table.d.ts.map +1 -1
- package/dist/bridges/caller-table.js.map +1 -1
- package/dist/bridges/carrier-sign.d.ts.map +1 -1
- package/dist/bridges/carrier-sign.js +8 -3
- package/dist/bridges/carrier-sign.js.map +1 -1
- package/dist/bridges/catalog-adapter.d.ts +12 -3
- package/dist/bridges/catalog-adapter.d.ts.map +1 -1
- package/dist/bridges/catalog-adapter.js +22 -14
- package/dist/bridges/catalog-adapter.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts +19 -2
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +233 -14
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +96 -27
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/catalog-types.js.map +1 -1
- package/dist/bridges/coefficient-statement.js +1 -5
- package/dist/bridges/coefficient-statement.js.map +1 -1
- package/dist/bridges/confrontation-coverage.js.map +1 -1
- package/dist/bridges/confrontations.d.ts +1 -1
- package/dist/bridges/confrontations.d.ts.map +1 -1
- package/dist/bridges/confrontations.js +1 -1
- package/dist/bridges/confrontations.js.map +1 -1
- package/dist/bridges/evaluation-errors.d.ts +89 -0
- package/dist/bridges/evaluation-errors.d.ts.map +1 -0
- package/dist/bridges/evaluation-errors.js +136 -0
- package/dist/bridges/evaluation-errors.js.map +1 -0
- package/dist/bridges/evaluator-inputs.d.ts +5 -3
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +24 -24
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts +48 -8
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +173 -38
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +38 -7
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +129 -156
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +16 -8
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +130 -236
- package/dist/bridges/holds.js.map +1 -1
- package/dist/bridges/index.d.ts +15 -14
- package/dist/bridges/index.d.ts.map +1 -1
- package/dist/bridges/index.js +14 -15
- package/dist/bridges/index.js.map +1 -1
- package/dist/bridges/input-contract.d.ts +65 -0
- package/dist/bridges/input-contract.d.ts.map +1 -0
- package/dist/bridges/input-contract.js +97 -0
- package/dist/bridges/input-contract.js.map +1 -0
- package/dist/bridges/membership.d.ts +5 -3
- package/dist/bridges/membership.d.ts.map +1 -1
- package/dist/bridges/membership.js +5 -6
- package/dist/bridges/membership.js.map +1 -1
- package/dist/bridges/notices.d.ts +11 -0
- package/dist/bridges/notices.d.ts.map +1 -0
- package/dist/bridges/notices.js +22 -0
- package/dist/bridges/notices.js.map +1 -0
- package/dist/bridges/observations/types.js.map +1 -1
- package/dist/bridges/rejected.d.ts +11 -17
- package/dist/bridges/rejected.d.ts.map +1 -1
- package/dist/bridges/rejected.js +13 -68
- package/dist/bridges/rejected.js.map +1 -1
- package/dist/bridges/relation-eval.d.ts +5 -6
- package/dist/bridges/relation-eval.d.ts.map +1 -1
- package/dist/bridges/relation-eval.js +9 -38
- package/dist/bridges/relation-eval.js.map +1 -1
- package/dist/bridges/rhs-registry.js.map +1 -1
- package/dist/bridges/sensitivity.d.ts +11 -3
- package/dist/bridges/sensitivity.d.ts.map +1 -1
- package/dist/bridges/sensitivity.js +24 -10
- package/dist/bridges/sensitivity.js.map +1 -1
- package/dist/bridges/tensor-index.js.map +1 -1
- package/dist/bridges/types.d.ts +1 -7
- package/dist/bridges/types.d.ts.map +1 -1
- package/dist/bridges/types.js +1 -4
- package/dist/bridges/types.js.map +1 -1
- package/dist/canonical/canonical-equation.d.ts +31 -0
- package/dist/canonical/canonical-equation.d.ts.map +1 -1
- package/dist/canonical/canonical-equation.js.map +1 -1
- package/dist/canonical/dimensional-fields.js.map +1 -1
- package/dist/canonical/entries/_l1-build.js.map +1 -1
- package/dist/canonical/entries/atomic.d.ts.map +1 -1
- package/dist/canonical/entries/atomic.js +11 -1
- 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 +7 -4
- 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 +50 -2
- 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 +32 -2
- 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 +34 -0
- 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 +24 -0
- 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 +42 -24
- 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 -0
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/statistical-mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/statistical-mechanics.js +24 -5
- package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +15 -0
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/linkage.d.ts +29 -4
- package/dist/canonical/linkage.d.ts.map +1 -1
- package/dist/canonical/linkage.js +31 -29
- package/dist/canonical/linkage.js.map +1 -1
- package/dist/canonical/normal-form.d.ts +0 -8
- package/dist/canonical/normal-form.d.ts.map +1 -1
- package/dist/canonical/normal-form.js +17 -12
- package/dist/canonical/normal-form.js.map +1 -1
- package/dist/canonical/registry.js.map +1 -1
- package/dist/canonical/residual.js.map +1 -1
- package/dist/canonical/seed-l-layer.d.ts +7 -1
- package/dist/canonical/seed-l-layer.d.ts.map +1 -1
- package/dist/canonical/seed-l-layer.js +7 -1
- package/dist/canonical/seed-l-layer.js.map +1 -1
- package/dist/canonical/structural.d.ts +21 -0
- package/dist/canonical/structural.d.ts.map +1 -1
- package/dist/canonical/structural.js +24 -4
- package/dist/canonical/structural.js.map +1 -1
- package/dist/cases/brownian-sphere.js +4 -4
- package/dist/cases/brownian-sphere.js.map +1 -1
- package/dist/cases/damped-resonator.js +2 -2
- package/dist/cases/damped-resonator.js.map +1 -1
- package/dist/cases/index.d.ts +9 -2
- package/dist/cases/index.d.ts.map +1 -1
- package/dist/cases/index.js +26 -7
- package/dist/cases/index.js.map +1 -1
- package/dist/cases/kepler-rv.js +6 -6
- package/dist/cases/kepler-rv.js.map +1 -1
- package/dist/cases/lumped-cooling.js +1 -1
- package/dist/cases/lumped-cooling.js.map +1 -1
- package/dist/cases/quadrature.js.map +1 -1
- package/dist/cases/resistor-noise.js +3 -3
- package/dist/cases/resistor-noise.js.map +1 -1
- package/dist/cases/skin-depth.js.map +1 -1
- package/dist/cases/types.js.map +1 -1
- package/dist/cli/args.d.ts +7 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +18 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bindings.d.ts +13 -0
- package/dist/cli/bindings.d.ts.map +1 -0
- package/dist/cli/bindings.js +32 -0
- package/dist/cli/bindings.js.map +1 -0
- package/dist/cli/closed-form-range.js.map +1 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/_atlas-map.d.ts +3 -3
- package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-map.js +43 -18
- package/dist/cli/commands/_atlas-map.js.map +1 -1
- package/dist/cli/commands/_atlas-route.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts +2 -1
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +48 -18
- 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 +7 -12
- 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 +13 -21
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/axes.js.map +1 -1
- package/dist/cli/commands/candidates.d.ts.map +1 -1
- package/dist/cli/commands/candidates.js +16 -8
- package/dist/cli/commands/candidates.js.map +1 -1
- package/dist/cli/commands/canonical.js.map +1 -1
- package/dist/cli/commands/chain.js +1 -1
- package/dist/cli/commands/chain.js.map +1 -1
- package/dist/cli/commands/confront.d.ts.map +1 -1
- package/dist/cli/commands/confront.js +22 -14
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/connectors.d.ts.map +1 -1
- package/dist/cli/commands/connectors.js +8 -9
- package/dist/cli/commands/connectors.js.map +1 -1
- package/dist/cli/commands/coverage.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +50 -26
- 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 +18 -13
- 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 +29 -26
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts +1 -35
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +99 -208
- 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 +57 -45
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/frontier.js.map +1 -1
- package/dist/cli/commands/ground.d.ts.map +1 -1
- package/dist/cli/commands/ground.js +41 -11
- package/dist/cli/commands/ground.js.map +1 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +84 -92
- 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 +53 -15
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/path.js +4 -4
- package/dist/cli/commands/path.js.map +1 -1
- package/dist/cli/commands/predict.js.map +1 -1
- package/dist/cli/commands/priority.js.map +1 -1
- package/dist/cli/commands/probe.d.ts.map +1 -1
- package/dist/cli/commands/probe.js +50 -26
- package/dist/cli/commands/probe.js.map +1 -1
- package/dist/cli/commands/recover.js +1 -1
- package/dist/cli/commands/recover.js.map +1 -1
- package/dist/cli/commands/regime.d.ts +5 -4
- package/dist/cli/commands/regime.d.ts.map +1 -1
- package/dist/cli/commands/regime.js +25 -27
- 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 +22 -14
- 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 +8 -4
- 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 +14 -7
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.js +4 -4
- package/dist/cli/commands/testplan.js.map +1 -1
- package/dist/cli/conventions.d.ts +6 -7
- package/dist/cli/conventions.d.ts.map +1 -1
- package/dist/cli/conventions.js +19 -28
- package/dist/cli/conventions.js.map +1 -1
- package/dist/cli/determination.js.map +1 -1
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/euler-guard.d.ts +13 -2
- package/dist/cli/euler-guard.d.ts.map +1 -1
- package/dist/cli/euler-guard.js +17 -3
- package/dist/cli/euler-guard.js.map +1 -1
- package/dist/cli/eval-numbers.d.ts +4 -9
- package/dist/cli/eval-numbers.d.ts.map +1 -1
- package/dist/cli/eval-numbers.js +11 -41
- package/dist/cli/eval-numbers.js.map +1 -1
- package/dist/cli/expr-print.d.ts +29 -2
- package/dist/cli/expr-print.d.ts.map +1 -1
- package/dist/cli/expr-print.js +46 -2
- package/dist/cli/expr-print.js.map +1 -1
- package/dist/cli/flag-help.js.map +1 -1
- package/dist/cli/graphs.js.map +1 -1
- package/dist/cli/library-defaults.d.ts +19 -0
- package/dist/cli/library-defaults.d.ts.map +1 -0
- package/dist/cli/library-defaults.js +22 -0
- package/dist/cli/library-defaults.js.map +1 -0
- package/dist/cli/main.js +7 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/map-evidence.js.map +1 -1
- package/dist/cli/output.d.ts +3 -6
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/published-url.d.ts +2 -0
- package/dist/cli/published-url.d.ts.map +1 -1
- package/dist/cli/published-url.js +5 -0
- package/dist/cli/published-url.js.map +1 -1
- package/dist/cli/record-reach.d.ts +6 -0
- package/dist/cli/record-reach.d.ts.map +1 -1
- package/dist/cli/record-reach.js +16 -10
- package/dist/cli/record-reach.js.map +1 -1
- package/dist/cli/record-tables.d.ts +2 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +8 -3
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli/record.d.ts.map +1 -1
- package/dist/cli/record.js +31 -12
- package/dist/cli/record.js.map +1 -1
- package/dist/cli/search-index.d.ts +5 -0
- package/dist/cli/search-index.d.ts.map +1 -1
- package/dist/cli/search-index.js +12 -1
- package/dist/cli/search-index.js.map +1 -1
- package/dist/cli/statuses.js.map +1 -1
- package/dist/cli/top-level-help.js.map +1 -1
- package/dist/cli/version.js.map +1 -1
- package/dist/cli-api.d.ts +57 -18
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +49 -21
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/adjudication.d.ts +8 -30
- package/dist/composition/adjudication.d.ts.map +1 -1
- package/dist/composition/adjudication.js +15 -67
- package/dist/composition/adjudication.js.map +1 -1
- package/dist/composition/aliases.d.ts +1 -1
- package/dist/composition/aliases.d.ts.map +1 -1
- package/dist/composition/aliases.js +10 -20
- package/dist/composition/aliases.js.map +1 -1
- package/dist/composition/audit-coverage.d.ts +2 -0
- package/dist/composition/audit-coverage.d.ts.map +1 -1
- package/dist/composition/audit-coverage.js.map +1 -1
- package/dist/composition/axes.d.ts +12 -0
- package/dist/composition/axes.d.ts.map +1 -1
- package/dist/composition/axes.js +18 -6
- package/dist/composition/axes.js.map +1 -1
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +0 -14
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +66 -57
- package/dist/composition/bridge-analysis.js.map +1 -1
- package/dist/composition/bridge-prediction.d.ts +5 -1
- package/dist/composition/bridge-prediction.d.ts.map +1 -1
- package/dist/composition/bridge-prediction.js +12 -16
- package/dist/composition/bridge-prediction.js.map +1 -1
- package/dist/composition/buckingham-filter.js.map +1 -1
- package/dist/composition/canonical-compare.d.ts.map +1 -1
- package/dist/composition/canonical-compare.js +12 -2
- package/dist/composition/canonical-compare.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +15 -18
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +59 -85
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-json.js.map +1 -1
- package/dist/composition/canonical-prefactors.d.ts +10 -29
- package/dist/composition/canonical-prefactors.d.ts.map +1 -1
- package/dist/composition/canonical-prefactors.js +15 -202
- package/dist/composition/canonical-prefactors.js.map +1 -1
- package/dist/composition/catalog-graph.d.ts.map +1 -1
- package/dist/composition/catalog-graph.js +6 -20
- package/dist/composition/catalog-graph.js.map +1 -1
- package/dist/composition/chain-candidate.d.ts +2 -0
- package/dist/composition/chain-candidate.d.ts.map +1 -1
- package/dist/composition/chain-candidate.js +2 -0
- package/dist/composition/chain-candidate.js.map +1 -1
- package/dist/composition/chain-match.js.map +1 -1
- package/dist/composition/chain-regime.js.map +1 -1
- package/dist/composition/chain-result.js.map +1 -1
- package/dist/composition/compose-surface.js.map +1 -1
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +154 -36
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/composition-recovery.js.map +1 -1
- package/dist/composition/consequence.d.ts.map +1 -1
- package/dist/composition/consequence.js +15 -6
- package/dist/composition/consequence.js.map +1 -1
- package/dist/composition/consistency.js.map +1 -1
- package/dist/composition/descriptor.d.ts +1 -1
- package/dist/composition/descriptor.d.ts.map +1 -1
- package/dist/composition/descriptor.js.map +1 -1
- package/dist/composition/dimension-adjacency.js.map +1 -1
- package/dist/composition/discovery.d.ts +67 -7
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +83 -23
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +19 -22
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +25 -28
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/enumerate.d.ts +2 -2
- package/dist/composition/enumerate.d.ts.map +1 -1
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +29 -5
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +100 -72
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +14 -4
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +53 -19
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts.map +1 -1
- package/dist/composition/expr-eval.js +2 -1
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/expr-simplify.d.ts.map +1 -1
- package/dist/composition/expr-simplify.js +9 -39
- package/dist/composition/expr-simplify.js.map +1 -1
- package/dist/composition/expr-subst.js.map +1 -1
- package/dist/composition/formula-shape.d.ts +9 -0
- package/dist/composition/formula-shape.d.ts.map +1 -1
- package/dist/composition/formula-shape.js +54 -0
- package/dist/composition/formula-shape.js.map +1 -1
- package/dist/composition/frontier-account.d.ts +3 -2
- package/dist/composition/frontier-account.d.ts.map +1 -1
- package/dist/composition/frontier-account.js +7 -3
- package/dist/composition/frontier-account.js.map +1 -1
- package/dist/composition/graph-viz-svg.js.map +1 -1
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/grounding.js.map +1 -1
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +9 -5
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +7 -4
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/mathts-quiet.d.ts +28 -0
- package/dist/composition/mathts-quiet.d.ts.map +1 -0
- package/dist/composition/mathts-quiet.js +56 -0
- package/dist/composition/mathts-quiet.js.map +1 -0
- package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
- package/dist/composition/mathts-scalar-symbols.js +18 -34
- package/dist/composition/mathts-scalar-symbols.js.map +1 -1
- package/dist/composition/not-composable-seeds.d.ts +3 -1
- package/dist/composition/not-composable-seeds.d.ts.map +1 -1
- package/dist/composition/not-composable-seeds.js +2 -0
- package/dist/composition/not-composable-seeds.js.map +1 -1
- package/dist/composition/probe/backend-protocol.js.map +1 -1
- package/dist/composition/probe/candidate-store.js.map +1 -1
- package/dist/composition/probe/corpus.js.map +1 -1
- package/dist/composition/probe/dataset.js.map +1 -1
- package/dist/composition/probe/experiment-design.js.map +1 -1
- package/dist/composition/probe/expression-gaps.js.map +1 -1
- package/dist/composition/probe/falsify.d.ts +14 -3
- package/dist/composition/probe/falsify.d.ts.map +1 -1
- package/dist/composition/probe/falsify.js +14 -27
- package/dist/composition/probe/falsify.js.map +1 -1
- package/dist/composition/probe/fingerprint.js.map +1 -1
- package/dist/composition/probe/fit.d.ts +1 -1
- package/dist/composition/probe/fit.d.ts.map +1 -1
- package/dist/composition/probe/fit.js +2 -1
- package/dist/composition/probe/fit.js.map +1 -1
- package/dist/composition/probe/frontier.js.map +1 -1
- package/dist/composition/probe/generator.js.map +1 -1
- package/dist/composition/probe/index.d.ts +4 -2
- package/dist/composition/probe/index.d.ts.map +1 -1
- package/dist/composition/probe/index.js +4 -2
- package/dist/composition/probe/index.js.map +1 -1
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/metadata.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 +13 -6
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/problem.d.ts +8 -0
- package/dist/composition/probe/problem.d.ts.map +1 -1
- package/dist/composition/probe/problem.js +78 -12
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.js.map +1 -1
- package/dist/composition/probe/residual.js.map +1 -1
- package/dist/composition/probe/run-manifest.js +2 -2
- package/dist/composition/probe/run-manifest.js.map +1 -1
- package/dist/composition/probe/scoring.d.ts +2 -1
- package/dist/composition/probe/scoring.d.ts.map +1 -1
- package/dist/composition/probe/scoring.js +21 -7
- package/dist/composition/probe/scoring.js.map +1 -1
- package/dist/composition/probe/search-budget.js.map +1 -1
- package/dist/composition/probe/serialize.js.map +1 -1
- package/dist/composition/probe/structure.js.map +1 -1
- package/dist/composition/probe/study.d.ts +4 -3
- package/dist/composition/probe/study.d.ts.map +1 -1
- package/dist/composition/probe/study.js +5 -3
- package/dist/composition/probe/study.js.map +1 -1
- package/dist/composition/probe/types.d.ts +3 -1
- package/dist/composition/probe/types.d.ts.map +1 -1
- package/dist/composition/probe/types.js +2 -0
- package/dist/composition/probe/types.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts +11 -4
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +14 -6
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/quantities.d.ts +0 -4
- package/dist/composition/quantities.d.ts.map +1 -1
- package/dist/composition/quantities.js +5 -5
- package/dist/composition/quantities.js.map +1 -1
- package/dist/composition/quantity.d.ts +18 -2
- package/dist/composition/quantity.d.ts.map +1 -1
- package/dist/composition/quantity.js +35 -6
- package/dist/composition/quantity.js.map +1 -1
- package/dist/composition/representative-values.js.map +1 -1
- package/dist/composition/retrodiction.d.ts +18 -0
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +37 -7
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/uncertainty.js.map +1 -1
- package/dist/composition/user-equation.d.ts +11 -7
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/composition/user-equation.js +24 -26
- package/dist/composition/user-equation.js.map +1 -1
- package/dist/core/axes-registry.d.ts +8 -5
- package/dist/core/axes-registry.d.ts.map +1 -1
- package/dist/core/axes-registry.js.map +1 -1
- package/dist/core/cell.js.map +1 -1
- package/dist/core/constants.d.ts +35 -12
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +46 -15
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +27 -0
- package/dist/core/data-file.d.ts.map +1 -0
- package/dist/core/data-file.js +48 -0
- package/dist/core/data-file.js.map +1 -0
- package/dist/core/flux-rules.js +1 -1
- package/dist/core/flux-rules.js.map +1 -1
- package/dist/core/json-schema.d.ts +27 -0
- package/dist/core/json-schema.d.ts.map +1 -0
- package/dist/core/json-schema.js +177 -0
- package/dist/core/json-schema.js.map +1 -0
- package/dist/core/labeled-tensor.d.ts +6 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/labeled-tensor.js +18 -8
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/regime-registry.d.ts +6 -2
- package/dist/core/regime-registry.d.ts.map +1 -1
- package/dist/core/regime-registry.js.map +1 -1
- package/dist/core/regime-rule-install.js.map +1 -1
- package/dist/core/regimes-builtins.js.map +1 -1
- package/dist/core/tensor.d.ts +7 -4
- package/dist/core/tensor.d.ts.map +1 -1
- package/dist/core/tensor.js +40 -8
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts +3 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +16 -14
- package/dist/core/types.js.map +1 -1
- package/dist/core/universal-index.js.map +1 -1
- package/dist/diff/bridge-ast-gradient.d.ts +4 -5
- package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-ast-gradient.js +16 -23
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/diff/bridge-gradient.d.ts +24 -80
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +21 -98
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts +18 -6
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +17 -5
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/algebra.js.map +1 -1
- package/dist/dimensional/ast-builders.d.ts +5 -4
- package/dist/dimensional/ast-builders.d.ts.map +1 -1
- package/dist/dimensional/ast-builders.js +6 -5
- package/dist/dimensional/ast-builders.js.map +1 -1
- package/dist/dimensional/ast-types.js.map +1 -1
- package/dist/dimensional/bridge-check.d.ts.map +1 -1
- package/dist/dimensional/bridge-check.js +3 -5
- package/dist/dimensional/bridge-check.js.map +1 -1
- package/dist/dimensional/buckingham.js.map +1 -1
- package/dist/dimensional/connection-validators.d.ts +2 -1
- package/dist/dimensional/connection-validators.d.ts.map +1 -1
- package/dist/dimensional/connection-validators.js.map +1 -1
- package/dist/dimensional/connection.js.map +1 -1
- package/dist/dimensional/constant-rows.d.ts +54 -0
- package/dist/dimensional/constant-rows.d.ts.map +1 -0
- package/dist/dimensional/constant-rows.js +115 -0
- package/dist/dimensional/constant-rows.js.map +1 -0
- package/dist/dimensional/constants.d.ts +7 -17
- package/dist/dimensional/constants.d.ts.map +1 -1
- package/dist/dimensional/constants.js +12 -21
- package/dist/dimensional/constants.js.map +1 -1
- package/dist/dimensional/curvature-composite.js.map +1 -1
- package/dist/dimensional/curvature-invariants.js.map +1 -1
- package/dist/dimensional/curvature.js.map +1 -1
- package/dist/dimensional/dimension-inference.js.map +1 -1
- package/dist/dimensional/dimension-spec.d.ts +21 -6
- package/dist/dimensional/dimension-spec.d.ts.map +1 -1
- package/dist/dimensional/dimension-spec.js +150 -160
- package/dist/dimensional/dimension-spec.js.map +1 -1
- package/dist/dimensional/einstein-equation.js.map +1 -1
- package/dist/dimensional/errors.d.ts +3 -1
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/errors.js +2 -2
- package/dist/dimensional/errors.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +79 -0
- package/dist/dimensional/exact-scale.d.ts.map +1 -0
- package/dist/dimensional/exact-scale.js +222 -0
- package/dist/dimensional/exact-scale.js.map +1 -0
- package/dist/dimensional/field-equation-helpers.js.map +1 -1
- package/dist/dimensional/formula-names.d.ts +13 -12
- package/dist/dimensional/formula-names.d.ts.map +1 -1
- package/dist/dimensional/formula-names.js +28 -51
- package/dist/dimensional/formula-names.js.map +1 -1
- package/dist/dimensional/fresh-label.js.map +1 -1
- package/dist/dimensional/friedmann-equation.d.ts +3 -3
- package/dist/dimensional/friedmann-equation.js +3 -3
- package/dist/dimensional/friedmann-equation.js.map +1 -1
- package/dist/dimensional/gauge-field.d.ts +2 -3
- package/dist/dimensional/gauge-field.d.ts.map +1 -1
- package/dist/dimensional/gauge-field.js +0 -1
- package/dist/dimensional/gauge-field.js.map +1 -1
- package/dist/dimensional/hyphen-names.d.ts.map +1 -1
- package/dist/dimensional/hyphen-names.js +8 -0
- package/dist/dimensional/hyphen-names.js.map +1 -1
- package/dist/dimensional/killing-validators.js.map +1 -1
- package/dist/dimensional/klein-gordon-equation.js.map +1 -1
- package/dist/dimensional/metric-validators.d.ts +2 -1
- package/dist/dimensional/metric-validators.d.ts.map +1 -1
- package/dist/dimensional/metric-validators.js.map +1 -1
- package/dist/dimensional/metric.js.map +1 -1
- package/dist/dimensional/natural-units.js.map +1 -1
- package/dist/dimensional/quantity-registry.d.ts +23 -1
- package/dist/dimensional/quantity-registry.d.ts.map +1 -1
- package/dist/dimensional/quantity-registry.js +55 -18
- package/dist/dimensional/quantity-registry.js.map +1 -1
- package/dist/dimensional/rg-flow.js.map +1 -1
- package/dist/dimensional/stress-energy-validators.js.map +1 -1
- package/dist/dimensional/symbolic-constants.d.ts +63 -19
- package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
- package/dist/dimensional/symbolic-constants.js +114 -92
- package/dist/dimensional/symbolic-constants.js.map +1 -1
- package/dist/dimensional/tensor-trace.js.map +1 -1
- package/dist/dimensional/tensor.js.map +1 -1
- package/dist/dimensional/types.js.map +1 -1
- package/dist/dimensional/unit-convention.d.ts +0 -2
- package/dist/dimensional/unit-convention.d.ts.map +1 -1
- package/dist/dimensional/unit-convention.js +2 -2
- package/dist/dimensional/unit-convention.js.map +1 -1
- package/dist/dimensional/unit-data.d.ts +70 -0
- package/dist/dimensional/unit-data.d.ts.map +1 -0
- package/dist/dimensional/unit-data.js +139 -0
- package/dist/dimensional/unit-data.js.map +1 -0
- package/dist/dimensional/units.d.ts +87 -24
- package/dist/dimensional/units.d.ts.map +1 -1
- package/dist/dimensional/units.js +290 -295
- package/dist/dimensional/units.js.map +1 -1
- package/dist/dimensional/validator-registry.js.map +1 -1
- package/dist/dimensional/validator.d.ts +0 -16
- package/dist/dimensional/validator.d.ts.map +1 -1
- package/dist/dimensional/validator.js +65 -29
- package/dist/dimensional/validator.js.map +1 -1
- package/dist/dimensional/weyl-validators.js.map +1 -1
- package/dist/index.d.ts +65 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -24
- package/dist/index.js.map +1 -1
- package/dist/numerical/bianchi-residual.js.map +1 -1
- package/dist/numerical/binding-value.d.ts +32 -7
- package/dist/numerical/binding-value.d.ts.map +1 -1
- package/dist/numerical/binding-value.js +218 -209
- package/dist/numerical/binding-value.js.map +1 -1
- package/dist/numerical/christoffel-flat.js.map +1 -1
- 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 +2 -2
- package/dist/numerical/covariant-eikonal.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
- package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +6 -3
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/derivative-lowering.js.map +1 -1
- package/dist/numerical/einstein-equation.js.map +1 -1
- package/dist/numerical/engine-registry.js.map +1 -1
- package/dist/numerical/errors.d.ts +7 -3
- package/dist/numerical/errors.d.ts.map +1 -1
- package/dist/numerical/errors.js +5 -5
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/evaluator-uncertainty.d.ts +34 -0
- package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -0
- package/dist/numerical/evaluator-uncertainty.js +134 -0
- package/dist/numerical/evaluator-uncertainty.js.map +1 -0
- package/dist/numerical/formula-contract.d.ts +67 -7
- package/dist/numerical/formula-contract.d.ts.map +1 -1
- package/dist/numerical/formula-contract.js +68 -42
- package/dist/numerical/formula-contract.js.map +1 -1
- package/dist/numerical/formula-dimension.d.ts +17 -7
- package/dist/numerical/formula-dimension.d.ts.map +1 -1
- package/dist/numerical/formula-dimension.js +120 -44
- package/dist/numerical/formula-dimension.js.map +1 -1
- package/dist/numerical/formula-mathts.d.ts.map +1 -1
- package/dist/numerical/formula-mathts.js +10 -3
- package/dist/numerical/formula-mathts.js.map +1 -1
- package/dist/numerical/formula-registry.d.ts +13 -3
- package/dist/numerical/formula-registry.d.ts.map +1 -1
- package/dist/numerical/formula-registry.js +7 -2
- package/dist/numerical/formula-registry.js.map +1 -1
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/geometrized.js.map +1 -1
- package/dist/numerical/gl4-integrator.d.ts +28 -27
- package/dist/numerical/gl4-integrator.d.ts.map +1 -1
- package/dist/numerical/gl4-integrator.js +44 -45
- package/dist/numerical/gl4-integrator.js.map +1 -1
- package/dist/numerical/grid-field.js.map +1 -1
- package/dist/numerical/index.js.map +1 -1
- package/dist/numerical/input-validation.d.ts +3 -6
- package/dist/numerical/input-validation.d.ts.map +1 -1
- package/dist/numerical/input-validation.js +4 -8
- package/dist/numerical/input-validation.js.map +1 -1
- package/dist/numerical/killing.d.ts +8 -5
- package/dist/numerical/killing.d.ts.map +1 -1
- package/dist/numerical/killing.js.map +1 -1
- package/dist/numerical/klein-gordon.js.map +1 -1
- package/dist/numerical/kretschmann.js.map +1 -1
- package/dist/numerical/lowering-utils.js.map +1 -1
- package/dist/numerical/lowering.d.ts.map +1 -1
- package/dist/numerical/lowering.js +7 -17
- package/dist/numerical/lowering.js.map +1 -1
- package/dist/numerical/mathts-engine.d.ts.map +1 -1
- package/dist/numerical/mathts-engine.js +11 -6
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/null-ic.js.map +1 -1
- package/dist/numerical/null-ray-integrator.js +4 -4
- package/dist/numerical/null-ray-integrator.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/pderiv.d.ts.map +1 -1
- package/dist/numerical/pderiv.js +9 -2
- package/dist/numerical/pderiv.js.map +1 -1
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/quadrature.d.ts +5 -2
- package/dist/numerical/quadrature.d.ts.map +1 -1
- package/dist/numerical/quadrature.js +20 -3
- package/dist/numerical/quadrature.js.map +1 -1
- package/dist/numerical/spacetime-metrics.d.ts +17 -19
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +158 -250
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/numerical/strides.js.map +1 -1
- package/dist/numerical/tensor-engine.d.ts +9 -5
- package/dist/numerical/tensor-engine.d.ts.map +1 -1
- package/dist/numerical/tensor-engine.js.map +1 -1
- package/dist/numerical/types.js.map +1 -1
- package/dist/numerical/weyl-lowering.js.map +1 -1
- package/dist/relations/category.js.map +1 -1
- package/dist/relations/composition-table.d.ts +4 -4
- package/dist/relations/composition-table.js +4 -4
- package/dist/relations/composition-table.js.map +1 -1
- package/dist/relations/conventions.js.map +1 -1
- package/dist/relations/domain-regimes.js.map +1 -1
- package/dist/relations/regime-registration.js.map +1 -1
- package/dist/relations/regime-vocabularies.js.map +1 -1
- package/dist/relations/regime.d.ts +18 -8
- package/dist/relations/regime.d.ts.map +1 -1
- package/dist/relations/regime.js +26 -14
- package/dist/relations/regime.js.map +1 -1
- package/dist/relations/types.d.ts +26 -6
- package/dist/relations/types.d.ts.map +1 -1
- package/dist/relations/types.js +15 -3
- package/dist/relations/types.js.map +1 -1
- package/package.json +10 -14
- package/dist/bridges/registry.d.ts +0 -60
- package/dist/bridges/registry.d.ts.map +0 -1
- package/dist/bridges/registry.js +0 -87
- package/dist/bridges/registry.js.map +0 -1
- package/dist/cli/poster-source.d.ts +0 -154
- package/dist/cli/poster-source.d.ts.map +0 -1
- package/dist/cli/poster-source.js +0 -184
- package/dist/cli/poster-source.js.map +0 -1
|
@@ -26,8 +26,9 @@ export interface GL4State {
|
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
28
|
* Per-step snapshot recorded by the integrator. `v` (the contravariant
|
|
29
|
-
* 4-velocity v^μ = g^{μν} p_ν) is optional
|
|
30
|
-
* for it,
|
|
29
|
+
* 4-velocity v^μ = g^{μν} p_ν) is declared optional and is never emitted:
|
|
30
|
+
* no option asks for it, and nothing in `src/` reads it. It stays so a caller's
|
|
31
|
+
* own snapshot type can carry one.
|
|
31
32
|
*
|
|
32
33
|
* @public
|
|
33
34
|
*/
|
|
@@ -90,34 +91,27 @@ export interface GL4Options {
|
|
|
90
91
|
}) => void;
|
|
91
92
|
}
|
|
92
93
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* v0.6.1: dropped export — internal-only result shape (was already
|
|
98
|
-
* @internal-tagged but had no external consumer).
|
|
94
|
+
* The state after one GL4 step, with the Picard iteration count that step
|
|
95
|
+
* consumed. MathTS `gaussLegendre4` does not expose its two internal stage
|
|
96
|
+
* values, so this is the advanced state and nothing else.
|
|
97
|
+
* @internal
|
|
99
98
|
*/
|
|
100
|
-
interface
|
|
101
|
-
readonly
|
|
102
|
-
readonly
|
|
103
|
-
readonly stageDx: readonly [readonly number[], readonly number[]];
|
|
104
|
-
readonly stageDp: readonly [readonly number[], readonly number[]];
|
|
99
|
+
export interface GL4StepResult {
|
|
100
|
+
readonly x: readonly number[];
|
|
101
|
+
readonly p: readonly number[];
|
|
105
102
|
readonly iterations: number;
|
|
106
103
|
}
|
|
107
104
|
/**
|
|
108
|
-
* One GL4 step
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* with a message matching `/Picard iteration did not converge/` when the
|
|
113
|
-
* Picard cap is exhausted.
|
|
114
|
-
*
|
|
105
|
+
* One GL4 step of the geodesic Hamiltonian, via MathTS `gaussLegendre4`.
|
|
106
|
+
* Throws `GL4ConvergenceError` with a message matching
|
|
107
|
+
* `/Picard iteration did not converge/` when the Picard cap is exhausted;
|
|
108
|
+
* any other error from the metric closures propagates unchanged.
|
|
115
109
|
* @internal
|
|
116
110
|
*/
|
|
117
|
-
export declare function
|
|
111
|
+
export declare function gl4Step(state: GL4State, h: number, gInverseFn: (x: readonly number[]) => Float64Array, dgInverseFn: (x: readonly number[]) => Float64Array, opts: {
|
|
118
112
|
picardTol: number;
|
|
119
113
|
picardMaxIter: number;
|
|
120
|
-
}):
|
|
114
|
+
}): GL4StepResult;
|
|
121
115
|
/**
|
|
122
116
|
* GL4 symplectic integrator on the canonical (x, p) geodesic Hamiltonian.
|
|
123
117
|
*
|
|
@@ -163,10 +157,11 @@ export declare function solveGL4Stage(state: GL4State, h: number, gInverseFn: (x
|
|
|
163
157
|
* @param initialState — canonical (x, p) at τ = 0. Units follow the
|
|
164
158
|
* `gInverseFn` convention (see above).
|
|
165
159
|
* @param options — see {@link GL4Options}:
|
|
166
|
-
* - `steps` — integer step count (dimensionless).
|
|
167
|
-
* - `tauMax` — affine-parameter extent (seconds in
|
|
168
|
-
*
|
|
169
|
-
* - `
|
|
160
|
+
* - `steps` — positive integer step count (dimensionless).
|
|
161
|
+
* - `tauMax` — positive finite affine-parameter extent (seconds in
|
|
162
|
+
* canonical SI). The integrator runs forward from τ = 0 only.
|
|
163
|
+
* - `gInverseFn(x)[μ*dim + ν]` — inverse metric g^{μν}(x), row-major flat.
|
|
164
|
+
* - `dgInverseFn(x)[λ*dim² + μ*dim + ν]` — ∂_λ g^{μν}(x), flat.
|
|
170
165
|
* - `picardTol` — convergence tolerance (dimensionless, default 1e-12).
|
|
171
166
|
* - `picardMaxIter` — fixed-point iteration cap (dimensionless, default 50).
|
|
172
167
|
* - `hMin` — step-halving floor (same units as `tauMax / steps`).
|
|
@@ -174,8 +169,14 @@ export declare function solveGL4Stage(state: GL4State, h: number, gInverseFn: (x
|
|
|
174
169
|
* @returns `steps + 1` snapshots: index `0` is the initial state, index `n`
|
|
175
170
|
* is the state after `n` steps (τ = n · h). Each snapshot carries `tau`,
|
|
176
171
|
* `x`, `p` (and optional `v` = g^{μν} p_ν) in the units chosen above.
|
|
177
|
-
* @throws NumericalBackendError if `
|
|
172
|
+
* @throws NumericalBackendError if `steps` is not a positive integer, if
|
|
173
|
+
* `tauMax` is not a positive finite number, or if
|
|
174
|
+
* `initialState.x[1] < domainMinRadius`. The two option checks run before
|
|
175
|
+
* any metric evaluation.
|
|
178
176
|
* @throws GL4ConvergenceError if Picard fails even after step-halving to h_min.
|
|
177
|
+
* Any other error thrown by `gInverseFn` or `dgInverseFn` (a domain
|
|
178
|
+
* crossing the caller signals by throwing, or a programming error) is
|
|
179
|
+
* rethrown unchanged; it is not halved away.
|
|
179
180
|
*
|
|
180
181
|
* @public
|
|
181
182
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gl4-integrator.d.ts","sourceRoot":"","sources":["../../src/numerical/gl4-integrator.ts"],"names":[],"mappings":"AA4BA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,QAAQ;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED
|
|
1
|
+
{"version":3,"file":"gl4-integrator.d.ts","sourceRoot":"","sources":["../../src/numerical/gl4-integrator.ts"],"names":[],"mappings":"AA4BA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,QAAQ;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;qCACiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;gFAC4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,CAAC;IAC5D;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,CAAC;IAC7D,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;qCAEiC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC3F;AAgDD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,QAAQ,EACf,CAAC,EAAE,MAAM,EACT,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,EAClD,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,EACnD,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACjD,aAAa,CA6Bf;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,QAAQ,EACtB,OAAO,EAAE,UAAU,GAClB,SAAS,WAAW,EAAE,CA0GxB"}
|
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
* p_μ = g_μν dx^ν/dτ — not (x, v). This is what makes the flow symplectic
|
|
18
18
|
* on T*M.
|
|
19
19
|
*
|
|
20
|
-
* This module holds the types, the Butcher constants, the
|
|
21
|
-
*
|
|
22
|
-
* `integrateGeodesicGL4`.
|
|
20
|
+
* This module holds the types, the Butcher constants, the one-step driver
|
|
21
|
+
* (`gl4Step`, internal; the implicit Picard stages are MathTS
|
|
22
|
+
* `gaussLegendre4`'s), and the integrator entry point `integrateGeodesicGL4`.
|
|
23
23
|
*
|
|
24
24
|
* @module numerical/gl4-integrator
|
|
25
25
|
*/
|
|
26
|
-
import { gaussLegendre4 } from '@danielsimonjr/mathts-functions';
|
|
26
|
+
import { gaussLegendre4, GL4ConvergenceError as MathTsGL4ConvergenceError } from '@danielsimonjr/mathts-functions';
|
|
27
27
|
import { GL4ConvergenceError, NumericalBackendError } from './errors.js';
|
|
28
28
|
/**
|
|
29
29
|
* Gauss–Legendre order-4 Butcher tableau from MathTS. `GL4_A` is the 2×2
|
|
@@ -41,14 +41,15 @@ export { GL4_A, GL4_B, GL4_C } from '@danielsimonjr/mathts-functions';
|
|
|
41
41
|
*
|
|
42
42
|
* `dg[μ*dim² + ν*dim + ρ] = ∂_μ g^{νρ}`. A coefficient that is exactly 0 is
|
|
43
43
|
* skipped, so `0 * NaN` does not poison a component the term does not enter.
|
|
44
|
+
* `xBuf` is a reused coordinate buffer of length `dim`; it is the array the
|
|
45
|
+
* metric closures receive, so it is a plain `number[]` and needs no cast.
|
|
44
46
|
*/
|
|
45
47
|
function geodesicDeriv(y, gInverseFn, dgInverseFn, xBuf) {
|
|
46
48
|
const dim = xBuf.length;
|
|
47
49
|
for (let i = 0; i < dim; i++)
|
|
48
50
|
xBuf[i] = y[i];
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const dgInv = dgInverseFn(coords);
|
|
51
|
+
const gInv = gInverseFn(xBuf);
|
|
52
|
+
const dgInv = dgInverseFn(xBuf);
|
|
52
53
|
const out = new Array(dim * 2);
|
|
53
54
|
for (let mu = 0; mu < dim; mu++) {
|
|
54
55
|
let dx = 0;
|
|
@@ -76,23 +77,29 @@ function geodesicDeriv(y, gInverseFn, dgInverseFn, xBuf) {
|
|
|
76
77
|
}
|
|
77
78
|
return out;
|
|
78
79
|
}
|
|
79
|
-
/**
|
|
80
|
-
|
|
80
|
+
/**
|
|
81
|
+
* One GL4 step of the geodesic Hamiltonian, via MathTS `gaussLegendre4`.
|
|
82
|
+
* Throws `GL4ConvergenceError` with a message matching
|
|
83
|
+
* `/Picard iteration did not converge/` when the Picard cap is exhausted;
|
|
84
|
+
* any other error from the metric closures propagates unchanged.
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
87
|
+
export function gl4Step(state, h, gInverseFn, dgInverseFn, opts) {
|
|
81
88
|
const dim = state.x.length;
|
|
82
89
|
const y0 = new Array(dim * 2);
|
|
83
90
|
for (let i = 0; i < dim; i++) {
|
|
84
91
|
y0[i] = state.x[i];
|
|
85
92
|
y0[dim + i] = state.p[i];
|
|
86
93
|
}
|
|
87
|
-
const xBuf = new
|
|
94
|
+
const xBuf = new Array(dim).fill(0);
|
|
88
95
|
let solved;
|
|
89
96
|
try {
|
|
90
97
|
solved = gaussLegendre4((_t, y) => geodesicDeriv(y, gInverseFn, dgInverseFn, xBuf), y0, [0, h], { steps: 1, picardTol: opts.picardTol, picardMaxIter: opts.picardMaxIter });
|
|
91
98
|
}
|
|
92
99
|
catch (err) {
|
|
93
|
-
|
|
100
|
+
// MathTS throws its own typed GL4ConvergenceError for a Picard step that does not converge.
|
|
101
|
+
if (err instanceof MathTsGL4ConvergenceError)
|
|
94
102
|
throw new GL4ConvergenceError(err.message);
|
|
95
|
-
}
|
|
96
103
|
throw err;
|
|
97
104
|
}
|
|
98
105
|
const y1 = solved.y[solved.y.length - 1];
|
|
@@ -102,29 +109,6 @@ function advanceGl4(state, h, gInverseFn, dgInverseFn, opts) {
|
|
|
102
109
|
}
|
|
103
110
|
return { x: y1.slice(0, dim), p: y1.slice(dim), iterations };
|
|
104
111
|
}
|
|
105
|
-
/**
|
|
106
|
-
* One GL4 step, reported in the stage-result shape the stage tests read.
|
|
107
|
-
*
|
|
108
|
-
* The step itself is MathTS `gaussLegendre4`. In flat space `p` is constant,
|
|
109
|
-
* so both stage momenta equal that advanced `p`. Throws `GL4ConvergenceError`
|
|
110
|
-
* with a message matching `/Picard iteration did not converge/` when the
|
|
111
|
-
* Picard cap is exhausted.
|
|
112
|
-
*
|
|
113
|
-
* @internal
|
|
114
|
-
*/
|
|
115
|
-
export function solveGL4Stage(state, h, gInverseFn, dgInverseFn, opts) {
|
|
116
|
-
const step = advanceGl4(state, h, gInverseFn, dgInverseFn, opts);
|
|
117
|
-
const dim = step.p.length;
|
|
118
|
-
const zeros = new Array(dim).fill(0);
|
|
119
|
-
// In flat space p is constant, so both stage momenta equal the advanced p.
|
|
120
|
-
return {
|
|
121
|
-
stageX: [step.x.slice(), step.x.slice()],
|
|
122
|
-
stageP: [step.p.slice(), step.p.slice()],
|
|
123
|
-
stageDx: [zeros, zeros.slice()],
|
|
124
|
-
stageDp: [zeros.slice(), zeros.slice()],
|
|
125
|
-
iterations: step.iterations,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
112
|
// ---------------------------------------------------------------------------
|
|
129
113
|
// Integrator entry-point (Task 3, Phase 1a-iii)
|
|
130
114
|
// ---------------------------------------------------------------------------
|
|
@@ -173,10 +157,11 @@ export function solveGL4Stage(state, h, gInverseFn, dgInverseFn, opts) {
|
|
|
173
157
|
* @param initialState — canonical (x, p) at τ = 0. Units follow the
|
|
174
158
|
* `gInverseFn` convention (see above).
|
|
175
159
|
* @param options — see {@link GL4Options}:
|
|
176
|
-
* - `steps` — integer step count (dimensionless).
|
|
177
|
-
* - `tauMax` — affine-parameter extent (seconds in
|
|
178
|
-
*
|
|
179
|
-
* - `
|
|
160
|
+
* - `steps` — positive integer step count (dimensionless).
|
|
161
|
+
* - `tauMax` — positive finite affine-parameter extent (seconds in
|
|
162
|
+
* canonical SI). The integrator runs forward from τ = 0 only.
|
|
163
|
+
* - `gInverseFn(x)[μ*dim + ν]` — inverse metric g^{μν}(x), row-major flat.
|
|
164
|
+
* - `dgInverseFn(x)[λ*dim² + μ*dim + ν]` — ∂_λ g^{μν}(x), flat.
|
|
180
165
|
* - `picardTol` — convergence tolerance (dimensionless, default 1e-12).
|
|
181
166
|
* - `picardMaxIter` — fixed-point iteration cap (dimensionless, default 50).
|
|
182
167
|
* - `hMin` — step-halving floor (same units as `tauMax / steps`).
|
|
@@ -184,21 +169,31 @@ export function solveGL4Stage(state, h, gInverseFn, dgInverseFn, opts) {
|
|
|
184
169
|
* @returns `steps + 1` snapshots: index `0` is the initial state, index `n`
|
|
185
170
|
* is the state after `n` steps (τ = n · h). Each snapshot carries `tau`,
|
|
186
171
|
* `x`, `p` (and optional `v` = g^{μν} p_ν) in the units chosen above.
|
|
187
|
-
* @throws NumericalBackendError if `
|
|
172
|
+
* @throws NumericalBackendError if `steps` is not a positive integer, if
|
|
173
|
+
* `tauMax` is not a positive finite number, or if
|
|
174
|
+
* `initialState.x[1] < domainMinRadius`. The two option checks run before
|
|
175
|
+
* any metric evaluation.
|
|
188
176
|
* @throws GL4ConvergenceError if Picard fails even after step-halving to h_min.
|
|
177
|
+
* Any other error thrown by `gInverseFn` or `dgInverseFn` (a domain
|
|
178
|
+
* crossing the caller signals by throwing, or a programming error) is
|
|
179
|
+
* rethrown unchanged; it is not halved away.
|
|
189
180
|
*
|
|
190
181
|
* @public
|
|
191
182
|
*/
|
|
192
183
|
export function integrateGeodesicGL4(initialState, options) {
|
|
193
184
|
const { steps, tauMax, gInverseFn, dgInverseFn, picardTol = 1e-12, picardMaxIter = 50, hMin, domainMinRadius, onStep, } = options;
|
|
185
|
+
if (!Number.isInteger(steps) || steps <= 0) {
|
|
186
|
+
throw new NumericalBackendError(`GL4 integrator: steps must be a positive integer, got ${steps}`);
|
|
187
|
+
}
|
|
188
|
+
if (!Number.isFinite(tauMax) || tauMax <= 0) {
|
|
189
|
+
throw new NumericalBackendError(`GL4 integrator: tauMax must be a positive finite number, got ${tauMax}`);
|
|
190
|
+
}
|
|
194
191
|
if (domainMinRadius !== undefined && initialState.x[1] < domainMinRadius) {
|
|
195
192
|
throw new NumericalBackendError(`GL4 integrator: initial r=${initialState.x[1]} < domainMinRadius=${domainMinRadius} (domain violation)`);
|
|
196
193
|
}
|
|
197
194
|
const h = tauMax / steps;
|
|
198
195
|
const hFloor = hMin ?? h * 1e-9;
|
|
199
|
-
const snapshots = [
|
|
200
|
-
{ tau: 0, x: initialState.x.slice(), p: initialState.p.slice() },
|
|
201
|
-
];
|
|
196
|
+
const snapshots = [{ tau: 0, x: initialState.x.slice(), p: initialState.p.slice() }];
|
|
202
197
|
let x = initialState.x.slice();
|
|
203
198
|
let p = initialState.p.slice();
|
|
204
199
|
const stateDim = x.length;
|
|
@@ -225,14 +220,18 @@ export function integrateGeodesicGL4(initialState, options) {
|
|
|
225
220
|
let subH = trialH;
|
|
226
221
|
while (subH >= hFloor) {
|
|
227
222
|
try {
|
|
228
|
-
advanced =
|
|
223
|
+
advanced = gl4Step({ x, p }, subH, gInverseFn, dgInverseFn, {
|
|
229
224
|
picardTol,
|
|
230
225
|
picardMaxIter,
|
|
231
226
|
});
|
|
232
227
|
stepSucceeded = true;
|
|
233
228
|
break;
|
|
234
229
|
}
|
|
235
|
-
catch {
|
|
230
|
+
catch (err) {
|
|
231
|
+
// Only a Picard failure is a reason to halve. A throw from the metric
|
|
232
|
+
// closures (a domain crossing the caller signals, or a bug) is that error.
|
|
233
|
+
if (!(err instanceof GL4ConvergenceError))
|
|
234
|
+
throw err;
|
|
236
235
|
subH /= 2;
|
|
237
236
|
halvings++;
|
|
238
237
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gl4-integrator.js","sourceRoot":"","sources":["../../src/numerical/gl4-integrator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gl4-integrator.js","sourceRoot":"","sources":["../../src/numerical/gl4-integrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,cAAc,EAAE,mBAAmB,IAAI,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzE;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAqFtE;;;;;;;;;;GAUG;AACH,SAAS,aAAa,CACpB,CAAoB,EACpB,UAAkD,EAClD,WAAmD,EACnD,IAAc;IAEd,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,GAAG,GAAG,CAAC,CAAC,CAAC;IACvC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;QAChC,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;QAC1B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAE,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAE,CAAC;YAC3B,wFAAwF;YACxF,IAAI,CAAC,KAAK,CAAC;gBAAE,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;YAC3B,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC;YACjC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;gBACnC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAE,CAAC;gBAChC,IAAI,EAAE,KAAK,CAAC;oBAAE,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAE,CAAC;YAC3C,CAAC;YACD,IAAI,IAAI,KAAK,CAAC;gBAAE,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC;QACnC,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAcD;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CACrB,KAAe,EACf,CAAS,EACT,UAAkD,EAClD,WAAmD,EACnD,IAAkD;IAElD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,GAAG,IAAI,KAAK,CAAS,GAAG,GAAG,CAAC,CAAC,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;QACpB,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;IAC5B,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,MAAyC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,cAAc,CACrB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,EAC1D,EAAE,EACF,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAC3E,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4FAA4F;QAC5F,IAAI,GAAG,YAAY,yBAAyB;YAAE,MAAM,IAAI,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzF,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,EAAE,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,mBAAmB,CAC3B,wCAAwC,IAAI,CAAC,aAAa,yCAAyC,IAAI,CAAC,SAAS,GAAG,CACrH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC;AAC/D,CAAC;AAED,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAAsB,EACtB,OAAmB;IAEnB,MAAM,EACJ,KAAK,EACL,MAAM,EACN,UAAU,EACV,WAAW,EACX,SAAS,GAAG,KAAK,EACjB,aAAa,GAAG,EAAE,EAClB,IAAI,EACJ,eAAe,EACf,MAAM,GACP,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,qBAAqB,CAAC,yDAAyD,KAAK,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,qBAAqB,CAAC,gEAAgE,MAAM,EAAE,CAAC,CAAC;IAC5G,CAAC;IACD,IAAI,eAAe,KAAK,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC;QACzE,MAAM,IAAI,qBAAqB,CAC7B,6BAA6B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,eAAe,qBAAqB,CACzG,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,MAAM,SAAS,GAAkB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpG,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAE/B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,IAAI,IAAI,GAAG,IAAI,KAAK,CAAS,QAAQ,CAAC,CAAC;IACvC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAS,QAAQ,CAAC,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,8DAA8D;QAC9D,uEAAuE;QACvE,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,4DAA4D;QAC5D,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,+EAA+E;QAC/E,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC;QAC5B,OAAO,SAAS,GAAG,SAAS,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC1C,IAAI,QAAmC,CAAC;YACxC,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,IAAI,GAAG,MAAM,CAAC;YAClB,OAAO,IAAI,IAAI,MAAM,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE;wBAC1D,SAAS;wBACT,aAAa;qBACd,CAAC,CAAC;oBACH,aAAa,GAAG,IAAI,CAAC;oBACrB,MAAM;gBACR,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sEAAsE;oBACtE,2EAA2E;oBAC3E,IAAI,CAAC,CAAC,GAAG,YAAY,mBAAmB,CAAC;wBAAE,MAAM,GAAG,CAAC;oBACrD,IAAI,IAAI,CAAC,CAAC;oBACV,QAAQ,EAAE,CAAC;gBACb,CAAC;YACH,CAAC;YACD,IAAI,CAAC,aAAa,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,IAAI,mBAAmB,CAC3B,mEAAmE,MAAM,UAAU,CAAC,8CAA8C,CACnI,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBACnD,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBACnD,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBACnD,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC;oBACrC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;oBAC3B,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;gBAC7B,CAAC;YACH,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,CAAC;YACf,CAAC,GAAG,IAAI,CAAC;YACT,IAAI,GAAG,IAAI,CAAC;YAEZ,MAAM,IAAI,GAAG,CAAC,CAAC;YACf,CAAC,GAAG,IAAI,CAAC;YACT,IAAI,GAAG,IAAI,CAAC;YAEZ,SAAS,IAAI,IAAI,CAAC;YAClB,KAAK,GAAG,IAAI,CAAC,CAAC,2DAA2D;YACzE,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["/**\n * Gauss-Legendre 4th-order (GL4) symplectic integrator — types + Butcher\n * tableau scaffold (v0.5.0 Task 1, Phase 1a-i).\n *\n * GL4 is a 2-stage implicit Runge-Kutta method built on the roots of the\n * shifted Legendre polynomial P₂, with order p = 4 and stage order s = 2.\n * It is symplectic for non-separable Hamiltonians — the property that\n * justifies its selection over Ruth-4 for the geodesic Hamiltonian\n *\n * H(x, p) = ½ g^{μν}(x) p_μ p_ν,\n *\n * which is non-separable because g^{μν} depends on x. (v0.5.0 Decision #2,\n * post-adversarial reconciliation; Sanz-Serna 1988; Hairer/Lubich/Wanner\n * \"Geometric Numerical Integration\" §II.1.)\n *\n * The state is canonical (x, p) (Decision #3) — covariant momentum\n * p_μ = g_μν dx^ν/dτ — not (x, v). This is what makes the flow symplectic\n * on T*M.\n *\n * This module holds the types, the Butcher constants, the one-step driver\n * (`gl4Step`, internal; the implicit Picard stages are MathTS\n * `gaussLegendre4`'s), and the integrator entry point `integrateGeodesicGL4`.\n *\n * @module numerical/gl4-integrator\n */\nimport { gaussLegendre4, GL4ConvergenceError as MathTsGL4ConvergenceError } from '@danielsimonjr/mathts-functions';\nimport { GL4ConvergenceError, NumericalBackendError } from './errors.js';\n\n/**\n * Gauss–Legendre order-4 Butcher tableau from MathTS. `GL4_A` is the 2×2\n * stage matrix, `GL4_B` the weights (both ½), and `GL4_C` the two nodes.\n * `integrateGeodesicGL4` does not read these names; the tableau tests do.\n *\n * @internal\n */\nexport { GL4_A, GL4_B, GL4_C } from '@danielsimonjr/mathts-functions';\n\n/**\n * Canonical (x, p) phase-space state for the geodesic flow on T*M.\n *\n * x^μ — coordinate 4-vector\n * p_μ — covariant momentum, p_μ = g_μν dx^ν/dτ\n *\n * Decision #3 (v0.5.0): the canonical state is (x, p), not (x, v). The\n * symplectic 2-form ω = dp_μ ∧ dx^μ is preserved by the GL4 flow only on\n * this representation.\n *\n * @public\n */\nexport interface GL4State {\n /** Coordinate 4-vector x^μ. */\n readonly x: readonly number[];\n /** Covariant momentum p_μ = g_μν v^ν. */\n readonly p: readonly number[];\n}\n\n/**\n * Per-step snapshot recorded by the integrator. `v` (the contravariant\n * 4-velocity v^μ = g^{μν} p_ν) is declared optional and is never emitted:\n * no option asks for it, and nothing in `src/` reads it. It stays so a caller's\n * own snapshot type can carry one.\n *\n * @public\n */\nexport interface GL4Snapshot {\n readonly tau: number;\n readonly x: readonly number[];\n readonly p: readonly number[];\n readonly v?: readonly number[];\n}\n\n/**\n * Options for `integrateGeodesicGL4`.\n *\n * @public\n */\nexport interface GL4Options {\n /** Number of integration steps (uniform-step baseline; may be subdivided\n * by adaptive step-halving). */\n readonly steps: number;\n /** Final proper time τ_max (initial τ = 0). */\n readonly tauMax: number;\n /** Inverse-metric closure (v0.9.0 O-1 flat layout):\n * `gInverseFn(x)[μ*dim + ν] = g^{μν}(x)`, row-major Float64Array(dim²). */\n readonly gInverseFn: (x: readonly number[]) => Float64Array;\n /**\n * Partial derivatives of the inverse metric.\n * Index order (v0.9.0 O-1 flat layout):\n * `dgInverseFn(x)[lambda*dim² + mu*dim + nu] = ∂_lambda g^{mu nu}` at coords x.\n * (I2: axis semantics pinned here to prevent silent transposition bugs.)\n */\n readonly dgInverseFn: (x: readonly number[]) => Float64Array;\n /** Picard fixed-point tolerance (default chosen in Task 2). */\n readonly picardTol?: number;\n /** Picard fixed-point iteration cap (default chosen in Task 2). */\n readonly picardMaxIter?: number;\n /** Adaptive step-halving floor (I4). If step-halving reaches h_min, throws with diagnostic. */\n readonly hMin?: number;\n /** Minimum radial coordinate (or domain analog) — abort integration if\n * the trajectory crosses inside this radius (e.g., the Schwarzschild\n * event horizon at r = r_s). */\n readonly domainMinRadius?: number;\n /**\n * v0.5.1 PD-4: opt-in per-step diagnostics callback. Fires once per\n * successful step with the Picard iteration count consumed and whether\n * adaptive step-halving had to subdivide (an \"exhaustion\" event from the\n * caller's perspective: the original h failed Picard and was halved).\n *\n * Used by the gated `GL4_LONG=1` Mercury 100-orbit Picard-convergence\n * test to measure the failure fraction across millions of steps without\n * polluting the integrator's return shape for normal callers.\n *\n * - `iterations`: Picard iteration count actually consumed at the\n * successful step size (always 1..picardMaxIter).\n * - `halvings`: number of step-halvings the step required before\n * succeeding (0 = first try; ≥1 means original h hit picardMaxIter).\n */\n readonly onStep?: (event: { step: number; iterations: number; halvings: number }) => void;\n}\n\n/**\n * Geodesic Hamiltonian derivative, packed as `y = [x..., p...]`.\n *\n * dx^μ = g^{μν} p_ν\n * dp_μ = −½ (∂_μ g^{νρ}) p_ν p_ρ\n *\n * `dg[μ*dim² + ν*dim + ρ] = ∂_μ g^{νρ}`. A coefficient that is exactly 0 is\n * skipped, so `0 * NaN` does not poison a component the term does not enter.\n * `xBuf` is a reused coordinate buffer of length `dim`; it is the array the\n * metric closures receive, so it is a plain `number[]` and needs no cast.\n */\nfunction geodesicDeriv(\n y: readonly number[],\n gInverseFn: (x: readonly number[]) => Float64Array,\n dgInverseFn: (x: readonly number[]) => Float64Array,\n xBuf: number[],\n): number[] {\n const dim = xBuf.length;\n for (let i = 0; i < dim; i++) xBuf[i] = y[i]!;\n const gInv = gInverseFn(xBuf);\n const dgInv = dgInverseFn(xBuf);\n const out = new Array<number>(dim * 2);\n for (let mu = 0; mu < dim; mu++) {\n let dx = 0;\n let dp = 0;\n const gRow = mu * dim;\n const dgBase = gRow * dim;\n for (let nu = 0; nu < dim; nu++) {\n const pNu = y[dim + nu]!;\n const g = gInv[gRow + nu]!;\n // Skip an exact zero so `0 * NaN` does not poison a component this term does not enter.\n if (g !== 0) dx += g * pNu;\n let pDot = 0;\n const offset = dgBase + nu * dim;\n for (let rho = 0; rho < dim; rho++) {\n const dg = dgInv[offset + rho]!;\n if (dg !== 0) pDot += dg * y[dim + rho]!;\n }\n if (pDot !== 0) dp += pDot * pNu;\n }\n out[mu] = dx;\n out[dim + mu] = dp === 0 ? 0 : -0.5 * dp;\n }\n return out;\n}\n\n/**\n * The state after one GL4 step, with the Picard iteration count that step\n * consumed. MathTS `gaussLegendre4` does not expose its two internal stage\n * values, so this is the advanced state and nothing else.\n * @internal\n */\nexport interface GL4StepResult {\n readonly x: readonly number[];\n readonly p: readonly number[];\n readonly iterations: number;\n}\n\n/**\n * One GL4 step of the geodesic Hamiltonian, via MathTS `gaussLegendre4`.\n * Throws `GL4ConvergenceError` with a message matching\n * `/Picard iteration did not converge/` when the Picard cap is exhausted;\n * any other error from the metric closures propagates unchanged.\n * @internal\n */\nexport function gl4Step(\n state: GL4State,\n h: number,\n gInverseFn: (x: readonly number[]) => Float64Array,\n dgInverseFn: (x: readonly number[]) => Float64Array,\n opts: { picardTol: number; picardMaxIter: number },\n): GL4StepResult {\n const dim = state.x.length;\n const y0 = new Array<number>(dim * 2);\n for (let i = 0; i < dim; i++) {\n y0[i] = state.x[i]!;\n y0[dim + i] = state.p[i]!;\n }\n const xBuf = new Array<number>(dim).fill(0);\n let solved: ReturnType<typeof gaussLegendre4>;\n try {\n solved = gaussLegendre4(\n (_t, y) => geodesicDeriv(y, gInverseFn, dgInverseFn, xBuf),\n y0,\n [0, h],\n { steps: 1, picardTol: opts.picardTol, picardMaxIter: opts.picardMaxIter },\n );\n } catch (err) {\n // MathTS throws its own typed GL4ConvergenceError for a Picard step that does not converge.\n if (err instanceof MathTsGL4ConvergenceError) throw new GL4ConvergenceError(err.message);\n throw err;\n }\n const y1 = solved.y[solved.y.length - 1];\n const iterations = solved.iterations[0];\n if (y1 === undefined || iterations === undefined) {\n throw new GL4ConvergenceError(\n `Picard iteration did not converge in ${opts.picardMaxIter} iterations (maxDelta above picardTol=${opts.picardTol})`,\n );\n }\n return { x: y1.slice(0, dim), p: y1.slice(dim), iterations };\n}\n\n// ---------------------------------------------------------------------------\n// Integrator entry-point (Task 3, Phase 1a-iii)\n// ---------------------------------------------------------------------------\n\n/**\n * GL4 symplectic integrator on the canonical (x, p) geodesic Hamiltonian.\n *\n * H(x, p) = ½ g^{μν}(x) p_μ p_ν\n *\n * Each accepted step is MathTS `gaussLegendre4` on the geodesic Hamiltonian.\n * Adaptive step-halving stays here. `onStep` reads that step's `iterations`.\n * with **adaptive step-halving on Picard non-convergence** (Adam+Eve I4,\n * replaces the single-retry R8): if Picard fails at step size h, retry at\n * h/2, h/4, … down to `hMin` (default `h · 1e-9`); throw\n * `GL4ConvergenceError` with a diagnostic message only when h_min is also\n * exhausted.\n *\n * Symplecticity (preservation of ω = dp_μ ∧ dx^μ) is a property of the\n * Butcher tableau, not of the inner Picard solver — see Sanz-Serna 1988,\n * Hairer/Lubich/Wanner §II.1. Hamiltonian drift over long integrations is\n * bounded; for non-resonant systems it remains O(h^p) over exponentially\n * long times (`p = 4` for GL4).\n *\n * **Domain guard.** If `domainMinRadius` is provided and `initialState.x[1]`\n * (radial coordinate) is below the bound, throws `NumericalBackendError`\n * synchronously with a `/domain/i`-matching message. The mid-trajectory\n * domain crossing is not checked here — callers needing that supply a\n * `gInverseFn` that throws on out-of-domain input.\n *\n * **Units.** The integrator is metric-agnostic — units follow the units of\n * the supplied `gInverseFn` and `initialState`. For UPT's canonical SI\n * Schwarzschild applications (the covariant-eikonal method used by\n * catalog relation be-37, and the perihelion method used by catalog\n * relation be-52):\n * - `initialState.x` — `(t, r, θ, φ)` in **(s, m, rad, rad)** (SI).\n * - `initialState.p` — covariant 4-momentum `p_μ = g_μν v^ν` in\n * **(J·s, kg·m, kg·m², kg·m²)** under the affine normalization\n * `p_t = −c²` used by `evaluateCovariantEikonalNumerical`.\n * - `tauMax` — affine-parameter (proper-time for timelike, coordinate-\n * time-like for the null normalization) extent in **seconds** under\n * the covariant-eikonal method's convention (catalog relation be-37);\n * **dimensionless** if the caller chose\n * geometric units. The integrator does not enforce a choice.\n * - `domainMinRadius` — radial coordinate lower bound in the same length\n * units as `initialState.x[1]` (typically **metres** for SI).\n *\n * @param initialState — canonical (x, p) at τ = 0. Units follow the\n * `gInverseFn` convention (see above).\n * @param options — see {@link GL4Options}:\n * - `steps` — positive integer step count (dimensionless).\n * - `tauMax` — positive finite affine-parameter extent (seconds in\n * canonical SI). The integrator runs forward from τ = 0 only.\n * - `gInverseFn(x)[μ*dim + ν]` — inverse metric g^{μν}(x), row-major flat.\n * - `dgInverseFn(x)[λ*dim² + μ*dim + ν]` — ∂_λ g^{μν}(x), flat.\n * - `picardTol` — convergence tolerance (dimensionless, default 1e-12).\n * - `picardMaxIter` — fixed-point iteration cap (dimensionless, default 50).\n * - `hMin` — step-halving floor (same units as `tauMax / steps`).\n * - `domainMinRadius` — radial cutoff (same units as `initialState.x[1]`).\n * @returns `steps + 1` snapshots: index `0` is the initial state, index `n`\n * is the state after `n` steps (τ = n · h). Each snapshot carries `tau`,\n * `x`, `p` (and optional `v` = g^{μν} p_ν) in the units chosen above.\n * @throws NumericalBackendError if `steps` is not a positive integer, if\n * `tauMax` is not a positive finite number, or if\n * `initialState.x[1] < domainMinRadius`. The two option checks run before\n * any metric evaluation.\n * @throws GL4ConvergenceError if Picard fails even after step-halving to h_min.\n * Any other error thrown by `gInverseFn` or `dgInverseFn` (a domain\n * crossing the caller signals by throwing, or a programming error) is\n * rethrown unchanged; it is not halved away.\n *\n * @public\n */\nexport function integrateGeodesicGL4(\n initialState: GL4State,\n options: GL4Options,\n): readonly GL4Snapshot[] {\n const {\n steps,\n tauMax,\n gInverseFn,\n dgInverseFn,\n picardTol = 1e-12,\n picardMaxIter = 50,\n hMin,\n domainMinRadius,\n onStep,\n } = options;\n\n if (!Number.isInteger(steps) || steps <= 0) {\n throw new NumericalBackendError(`GL4 integrator: steps must be a positive integer, got ${steps}`);\n }\n if (!Number.isFinite(tauMax) || tauMax <= 0) {\n throw new NumericalBackendError(`GL4 integrator: tauMax must be a positive finite number, got ${tauMax}`);\n }\n if (domainMinRadius !== undefined && initialState.x[1] < domainMinRadius) {\n throw new NumericalBackendError(\n `GL4 integrator: initial r=${initialState.x[1]} < domainMinRadius=${domainMinRadius} (domain violation)`,\n );\n }\n\n const h = tauMax / steps;\n const hFloor = hMin ?? h * 1e-9;\n const snapshots: GL4Snapshot[] = [{ tau: 0, x: initialState.x.slice(), p: initialState.p.slice() }];\n let x = initialState.x.slice();\n let p = initialState.p.slice();\n\n const stateDim = x.length;\n let newX = new Array<number>(stateDim);\n let newP = new Array<number>(stateDim);\n\n for (let n = 0; n < steps; n++) {\n // I4: adaptive step-halving loop (not single-retry) on Picard\n // non-convergence. When the full step fails, we advance by the SMALLER\n // converging step and sub-step until the macro-step `h` is covered — the\n // stages are solved at `stepH`, so the state/τ update MUST use `stepH`\n // too (advancing by full `h` after a halved solve destroys accuracy and\n // symplecticity). τ is reported on the fixed `(n+1)·h` grid; only the\n // residual-to-cover accumulator tracks intra-step progress.\n let remaining = h;\n let stepH = h;\n let halvings = 0;\n let lastIterations = 0;\n // Guard against FP residue: treat anything below a tiny fraction of h as done.\n const remainEps = h * 1e-12;\n while (remaining > remainEps) {\n const trialH = Math.min(stepH, remaining);\n let advanced: GL4StepResult | undefined;\n let stepSucceeded = false;\n let subH = trialH;\n while (subH >= hFloor) {\n try {\n advanced = gl4Step({ x, p }, subH, gInverseFn, dgInverseFn, {\n picardTol,\n picardMaxIter,\n });\n stepSucceeded = true;\n break;\n } catch (err) {\n // Only a Picard failure is a reason to halve. A throw from the metric\n // closures (a domain crossing the caller signals, or a bug) is that error.\n if (!(err instanceof GL4ConvergenceError)) throw err;\n subH /= 2;\n halvings++;\n }\n }\n if (!stepSucceeded || advanced === undefined) {\n throw new GL4ConvergenceError(\n `GL4 integrator: Picard iteration did not converge even at h_min=${hFloor} (step ${n}). Diagnose step-size or metric singularity.`,\n );\n }\n if (stateDim === 4) {\n newX[0] = advanced.x[0]!; newP[0] = advanced.p[0]!;\n newX[1] = advanced.x[1]!; newP[1] = advanced.p[1]!;\n newX[2] = advanced.x[2]!; newP[2] = advanced.p[2]!;\n newX[3] = advanced.x[3]!; newP[3] = advanced.p[3]!;\n } else {\n for (let mu = 0; mu < stateDim; mu++) {\n newX[mu] = advanced.x[mu]!;\n newP[mu] = advanced.p[mu]!;\n }\n }\n\n const tmpX = x;\n x = newX;\n newX = tmpX;\n\n const tmpP = p;\n p = newP;\n newP = tmpP;\n\n remaining -= subH;\n stepH = subH; // keep the converging size for the rest of this macro-step\n lastIterations = advanced.iterations;\n }\n snapshots.push({ tau: (n + 1) * h, x: x.slice(), p: p.slice() });\n if (onStep !== undefined) {\n onStep({ step: n, iterations: lastIterations, halvings });\n }\n }\n\n return snapshots;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid-field.js","sourceRoot":"","sources":["../../src/numerical/grid-field.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"grid-field.js","sourceRoot":"","sources":["../../src/numerical/grid-field.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * GridField — a sampled field on a regular grid, for the 'grid' numericalForm\n * finite-difference path. See v0.3.5-Design.md §5.\n *\n * The interface now lives in the leaf `./types.js` module (it only depends on\n * `NestedArray`), which removes the former `types ↔ grid-field` type cycle. This\n * module re-exports it so the established `numerical/grid-field` import path —\n * used by `pderiv.ts`, `numerical/index.ts`, and the public `src/index.ts` — keeps\n * working unchanged.\n *\n * @module numerical/grid-field\n */\nexport type { GridField } from './types.js';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/numerical/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/numerical/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Public surface of the UPT numerical-contraction backend (v0.3.5).\n * See docs/planning/v0.3.5-Design.md §5.\n *\n * @module numerical\n */\nimport type { Dimension } from '../dimensional/types.js';\nimport type { ExprNode, Violation } from '../dimensional/validator.js';\nimport { validate } from '../dimensional/validator.js';\nimport type { EngineTensor, TensorEngine } from './tensor-engine.js';\nimport type { NumericalInputs, NestedArray } from './types.js';\nimport { lowerNode } from './lowering.js';\nimport { getActiveEngine } from './engine-registry.js';\nimport { NumericalBackendError } from './errors.js';\nimport { evaluateMetricInverse, scanForMetricPair } from './metric-inverse.js';\n\n/** @public */\nexport type { TensorEngine, EngineTensor, EinsumSpec, ForwardGradResult, ReverseGradResult } from './tensor-engine.js';\n/** @public */\nexport { hasAutogradSupport, EngineCapabilityError } from './tensor-engine.js';\n/** @public */\nexport type { NumericalInputs, NestedArray } from './types.js';\n/** @public — part of the `NumericalInputs.grids` public contract. */\nexport type { GridField } from './grid-field.js';\n/** @public */\nexport { getActiveEngine, setActiveEngine } from './engine-registry.js';\n/** @public */\nexport { NumericalBackendError } from './errors.js';\n/** @public — re-exported from dimensional/errors to keep numerical/index.ts\n * as the single public API surface, without creating a dimensional→numerical\n * import cycle. See v0.4.0-Implementation-Plan Task 13 for rationale. */\nexport { DuplicateCoordinateWarning } from '../dimensional/errors.js';\n/**\n * Evaluate a metric inverse from a detected pair.\n *\n * @public\n */\nexport { evaluateMetricInverse } from './metric-inverse.js';\n/** Integrate the covariant eikonal on a numerical grid. @public */\nexport {\n evaluateCovariantEikonalNumerical,\n} from './covariant-eikonal.js';\n/** Inputs and the result of the covariant eikonal integrator. */\nexport type {\n CovariantEikonalInputs,\n CovariantEikonalResult,\n} from './covariant-eikonal.js';\n\n/** @public — v0.5.0 GL4 symplectic integrator. */\nexport { integrateGeodesicGL4 } from './gl4-integrator.js';\n/** @public — v0.5.0 GL4 types. */\nexport type { GL4State, GL4Snapshot, GL4Options } from './gl4-integrator.js';\n\n/** @public — v0.5.0 perihelion finder (Task 4, Phase 1b). */\nexport { findPerihelion } from './perihelion-finder.js';\n/** @public — v0.5.0 perihelion-finder types. */\nexport type { PerihelionResult, FindPerihelionOptions } from './perihelion-finder.js';\n\n/**\n * Plain-JS result of `evaluateNumerical`.\n * @public\n */\nexport interface NumericalResult {\n readonly value: NestedArray;\n readonly dim: Dimension;\n readonly freeIndices: ReadonlyMap<string, { upper: number; lower: number }>;\n readonly warnings: ReadonlyArray<Violation>;\n}\n\n/**\n * Result of `evaluateNumericalRaw` — carries a live `EngineTensor` for\n * chaining workloads; the caller must `dispose()` it.\n * @public\n */\nexport interface NumericalRawResult {\n readonly value: EngineTensor;\n readonly dim: Dimension;\n readonly freeIndices: ReadonlyMap<string, { upper: number; lower: number }>;\n readonly warnings: ReadonlyArray<Violation>;\n dispose(): void;\n}\n\n/**\n * Per-call options for the `evaluateNumerical*` entry points.\n * @public\n */\nexport interface EvaluateOptions {\n readonly engine?: TensorEngine;\n}\n\n/** Validate the AST and return (engine, validation result) or throw. */\nasync function prepare(node: ExprNode, options?: EvaluateOptions) {\n const vr = validate(node);\n if (!vr.ok) {\n throw new NumericalBackendError(\n `evaluateNumerical: the AST is not dimensionally valid — `\n + `${vr.violations.length} violation(s): `\n + vr.violations.map((v) => `[${v.location}] ${v.note}`).join('; '),\n );\n }\n const engine = options?.engine ?? await getActiveEngine();\n const warnings = vr.violations.filter((v) => v.severity === 'warning');\n return { engine, dim: vr.inferredDimension as Dimension, freeIndices: vr.freeIndices, warnings };\n}\n\n/** If the AST contains an identifiable lower/upper metric pair, run the\n * numerical inverse-metric check and return any warning (deduplicated —\n * scanForMetricPair returns at most one pair). */\nasync function collectInverseMetricWarnings(\n node: ExprNode,\n inputs: NumericalInputs,\n engine: TensorEngine,\n): Promise<Violation[]> {\n const pair = scanForMetricPair(node);\n if (!pair) return [];\n const { warning } = await evaluateMetricInverse(\n pair.gUpper, pair.gLower, inputs, undefined, { engine },\n );\n return warning ? [warning] : [];\n}\n\n/**\n * Evaluate a validated AST to plain JS.\n * @public\n */\nexport async function evaluateNumerical(\n node: ExprNode,\n inputs: NumericalInputs,\n options?: EvaluateOptions,\n): Promise<NumericalResult> {\n const { engine, dim, freeIndices, warnings } = await prepare(node, options);\n const tensor = lowerNode(node, inputs, engine);\n const inverseMetricWarnings = await collectInverseMetricWarnings(node, inputs, engine);\n return {\n value: engine.toNested(tensor),\n dim,\n freeIndices,\n warnings: [...warnings, ...inverseMetricWarnings],\n };\n}\n\n/**\n * Evaluate to a live EngineTensor for chaining workloads.\n * @public\n */\nexport async function evaluateNumericalRaw(\n node: ExprNode,\n inputs: NumericalInputs,\n options?: EvaluateOptions,\n): Promise<NumericalRawResult> {\n const { engine, dim, freeIndices, warnings } = await prepare(node, options);\n const tensor = lowerNode(node, inputs, engine);\n const inverseMetricWarnings = await collectInverseMetricWarnings(node, inputs, engine);\n return {\n value: tensor,\n dim,\n freeIndices,\n warnings: [...warnings, ...inverseMetricWarnings],\n dispose: () => { engine.dispose?.(tensor); },\n };\n}\n"]}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Runtime input validation for numeric evaluators — `validateFiniteInputs`.
|
|
3
3
|
*
|
|
4
|
-
* A generic, dependency-free finite-and-in-range check
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* which forced the lower numerical layer to import upward from `bridges`; moving
|
|
8
|
-
* it here (a leaf module with no imports) removes that dependency while
|
|
9
|
-
* `_be-helpers.ts` re-exports it so every bridge evaluator is unchanged.
|
|
4
|
+
* A generic, dependency-free finite-and-in-range check for a numeric
|
|
5
|
+
* evaluator's input record (`klein-gordon.ts` reads it). It is a leaf module
|
|
6
|
+
* with no imports, so any layer may read it without an upward edge.
|
|
10
7
|
*
|
|
11
8
|
* @module numerical/input-validation
|
|
12
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-validation.d.ts","sourceRoot":"","sources":["../../src/numerical/input-validation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"input-validation.d.ts","sourceRoot":"","sources":["../../src/numerical/input-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,WAAW,SAAS;IACxB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAgCD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACnD,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,EACpC,aAAa,EAAE,MAAM,GACpB,IAAI,CA+BN"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Runtime input validation for numeric evaluators — `validateFiniteInputs`.
|
|
3
3
|
*
|
|
4
|
-
* A generic, dependency-free finite-and-in-range check
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* which forced the lower numerical layer to import upward from `bridges`; moving
|
|
8
|
-
* it here (a leaf module with no imports) removes that dependency while
|
|
9
|
-
* `_be-helpers.ts` re-exports it so every bridge evaluator is unchanged.
|
|
4
|
+
* A generic, dependency-free finite-and-in-range check for a numeric
|
|
5
|
+
* evaluator's input record (`klein-gordon.ts` reads it). It is a leaf module
|
|
6
|
+
* with no imports, so any layer may read it without an upward edge.
|
|
10
7
|
*
|
|
11
8
|
* @module numerical/input-validation
|
|
12
9
|
*/
|
|
@@ -50,8 +47,7 @@ function describeRange(spec) {
|
|
|
50
47
|
*/
|
|
51
48
|
export function validateFiniteInputs(input, fieldSpecs, evaluatorName) {
|
|
52
49
|
for (const spec of fieldSpecs) {
|
|
53
|
-
const
|
|
54
|
-
const value = raw;
|
|
50
|
+
const value = input[spec.name];
|
|
55
51
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
56
52
|
const range = describeRange(spec);
|
|
57
53
|
throw new RangeError(`${evaluatorName}: ${spec.name} must be a finite ${range}number, got ${String(value)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-validation.js","sourceRoot":"","sources":["../../src/numerical/input-validation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"input-validation.js","sourceRoot":"","sources":["../../src/numerical/input-validation.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime input validation for numeric evaluators — `validateFiniteInputs`.\n *\n * A generic, dependency-free finite-and-in-range check for a numeric\n * evaluator's input record (`klein-gordon.ts` reads it). It is a leaf module\n * with no imports, so any layer may read it without an upward edge.\n *\n * @module numerical/input-validation\n */\n\n/**\n * Declarative spec for a single field of an evaluator's `input` record.\n *\n * The default behaviour (no `min`/`max`) only verifies finiteness\n * (`Number.isFinite`). The bound predicates compose with `Number.isFinite`\n * so the resulting error always reads \"finite ⟨adj⟩ number\" — drop-in\n * compatible with the per-evaluator message format\n * `\"<evaluator>: <field> must be a finite <adjective> number, got <v>\"`.\n *\n * @internal\n */\nexport interface FieldSpec {\n /** Field name on the `input` record (e.g., `'M_kg'`). */\n readonly name: string;\n /** Inclusive lower bound (default `-Infinity`). */\n readonly min?: number;\n /** Inclusive upper bound (default `Infinity`). */\n readonly max?: number;\n /** Strict `>` instead of `≥` at the lower bound. */\n readonly excludeMin?: boolean;\n /** Strict `<` instead of `≤` at the upper bound. */\n readonly excludeMax?: boolean;\n /** Explicit override — when `min === 0` and you want to permit zero. */\n readonly allowZero?: boolean;\n /**\n * Optional domain-specific noun phrase (e.g., 'probability', 'angle').\n * When set, replaces the auto-generated \"in range [a, b]\" prose:\n * \"<evaluator>: <field> must be a finite <description> number, got <v>\"\n * @internal\n */\n readonly description?: string;\n}\n\n/**\n * Compose the adjective phrase that appears in the error message, picked to\n * match the per-evaluator prose conventions:\n * - `min=0, excludeMin=true` → \"positive\" (i.e., `> 0`)\n * - `min=0` → \"non-negative\" (i.e., `≥ 0`)\n * - bounded but not a 0-pin → \"in range [a, b]\" (closed/open as set)\n * - unbounded → \"\" (just \"finite\")\n */\nfunction describeRange(spec: FieldSpec): string {\n if (spec.description !== undefined) return `${spec.description} `;\n\n const hasMin = spec.min !== undefined;\n const hasMax = spec.max !== undefined;\n const lowOpen = !!spec.excludeMin;\n const highOpen = !!spec.excludeMax;\n\n if (hasMin && !hasMax && spec.min === 0 && !spec.allowZero) {\n if (lowOpen) return 'positive ';\n return 'non-negative ';\n }\n\n if (!hasMin && !hasMax) return '';\n\n const lo = hasMin ? spec.min : -Infinity;\n const hi = hasMax ? spec.max : Infinity;\n const lb = lowOpen ? '(' : '[';\n const rb = highOpen ? ')' : ']';\n return `in range ${lb}${lo}, ${hi}${rb} `;\n}\n\n/**\n * Validate every field of `input` named by `fieldSpecs`. Throws a `RangeError`\n * on the first violation with a message containing the keywords (`\"finite\"`,\n * plus `\"positive\"` / `\"non-negative\"` / `\"in range\"`) the per-evaluator tests\n * pattern-match against. Format:\n *\n * `<evaluatorName>: <fieldName> must be a finite <range> number, got <value>`\n *\n * @internal\n */\nexport function validateFiniteInputs<T extends object>(\n input: T,\n fieldSpecs: ReadonlyArray<FieldSpec>,\n evaluatorName: string,\n): void {\n for (const spec of fieldSpecs) {\n const value: unknown = (input as Record<string, unknown>)[spec.name];\n\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n const range = describeRange(spec);\n throw new RangeError(\n `${evaluatorName}: ${spec.name} must be a finite ${range}number, got ${String(value)}`,\n );\n }\n\n if (spec.min !== undefined) {\n const violatesMin = spec.excludeMin ? value <= spec.min : value < spec.min;\n if (violatesMin) {\n const range = describeRange(spec);\n throw new RangeError(\n `${evaluatorName}: ${spec.name} must be a finite ${range}number, got ${value}`,\n );\n }\n }\n\n if (spec.max !== undefined) {\n const violatesMax = spec.excludeMax ? value >= spec.max : value > spec.max;\n if (violatesMax) {\n const range = describeRange(spec);\n throw new RangeError(\n `${evaluatorName}: ${spec.name} must be a finite ${range}number, got ${value}`,\n );\n }\n }\n }\n}\n"]}
|
|
@@ -63,8 +63,10 @@ export interface KillingEquationOptions {
|
|
|
63
63
|
readonly dMetricFn?: (x: ReadonlyArray<number>) => number[][][];
|
|
64
64
|
}
|
|
65
65
|
type Vec4 = [number, number, number, number];
|
|
66
|
-
|
|
67
|
-
type
|
|
66
|
+
/** A Killing-field factory: returns the field ξ^μ(x) as a function of the 4-position. @public */
|
|
67
|
+
export type KillingFn = () => (x: Vec4) => Vec4;
|
|
68
|
+
/** A covariant metric closure for the Killing checks: `g(x)[μ][ν] = g_{μν}(x)`, nested. @public */
|
|
69
|
+
export type KillingMetricFn = (x: ReadonlyArray<number>) => number[][];
|
|
68
70
|
/**
|
|
69
71
|
* Layout-agnostic Christoffel accessor.
|
|
70
72
|
*
|
|
@@ -77,7 +79,8 @@ type MetricFn = (x: ReadonlyArray<number>) => number[][];
|
|
|
77
79
|
* @public
|
|
78
80
|
*/
|
|
79
81
|
export type ChristoffelAccess = (lambda: number, mu: number, nu: number) => number;
|
|
80
|
-
|
|
82
|
+
/** A Christoffel producer: the {@link ChristoffelAccess} at a 4-position. @public */
|
|
83
|
+
export type ChristoffelAtFn = (x: Vec4) => ChristoffelAccess;
|
|
81
84
|
/**
|
|
82
85
|
* Compute `||∇_μ ξ_ν + ∇_ν ξ_μ||_∞` at point `x`, returning the maximum
|
|
83
86
|
* absolute symmetrized residual over all 16 (μ, ν) pairs.
|
|
@@ -128,7 +131,7 @@ type ChristoffelAtFn = (x: Vec4) => ChristoffelAccess;
|
|
|
128
131
|
*
|
|
129
132
|
* @public
|
|
130
133
|
*/
|
|
131
|
-
export declare function verifyKillingEquation(killingFn: KillingFn, metricFn:
|
|
134
|
+
export declare function verifyKillingEquation(killingFn: KillingFn, metricFn: KillingMetricFn, christoffelAt: ChristoffelAtFn, x: Vec4, opts?: KillingEquationOptions): number;
|
|
132
135
|
/**
|
|
133
136
|
* Result of {@link checkKillingEquation}.
|
|
134
137
|
*
|
|
@@ -164,7 +167,7 @@ export interface KillingEquationCheck {
|
|
|
164
167
|
*
|
|
165
168
|
* @public
|
|
166
169
|
*/
|
|
167
|
-
export declare function checkKillingEquation(killingFn: KillingFn, metricFn:
|
|
170
|
+
export declare function checkKillingEquation(killingFn: KillingFn, metricFn: KillingMetricFn, christoffelAt: ChristoffelAtFn, x: Vec4, opts?: KillingEquationOptions): KillingEquationCheck;
|
|
168
171
|
/**
|
|
169
172
|
* Evaluate the conserved charge Q = ξ^μ p_μ at point x along a geodesic.
|
|
170
173
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"killing.d.ts","sourceRoot":"","sources":["../../src/numerical/killing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH;;cAEc;AACd,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,EAAE,CAAC;CACjE;AAED,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,
|
|
1
|
+
{"version":3,"file":"killing.d.ts","sourceRoot":"","sources":["../../src/numerical/killing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH;;cAEc;AACd,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,EAAE,CAAC;CACjE;AAED,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,iGAAiG;AACjG,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AAChD,mGAAmG;AACnG,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnF,qFAAqF;AACrF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,iBAAiB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,eAAe,EAC9B,CAAC,EAAE,IAAI,EACP,IAAI,GAAE,sBAA2B,GAChC,MAAM,CAmIR;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC;wDACoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;qFACiF;IACjF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,uDAAuD;IACvD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,eAAe,EAC9B,CAAC,EAAE,IAAI,EACP,IAAI,GAAE,sBAA2B,GAChC,oBAAoB,CAUtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,IAAI,EACnB,CAAC,EAAE,IAAI,GACN,MAAM,CAKR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"killing.js","sourceRoot":"","sources":["../../src/numerical/killing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"killing.js","sourceRoot":"","sources":["../../src/numerical/killing.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Killing-equation numerical verification (v0.6.0 Phase 1, Task 1.3).\n *\n * F-3 reconciliation (hybrid impl):\n * - Uses EXACT symbolic Christoffels for all Γ terms.\n * - For the outer ∂_μ ξ_α = (∂_μ g_{αβ}) ξ^β + g_{αβ} ∂_μ ξ^β, two paths:\n * 1. constantKilling=true (default for constant ξ^β): uses metric\n * compatibility ∂_μ g_{αβ} = Γ^λ_{μα} g_{λβ} + Γ^λ_{μβ} g_{αλ} to\n * derive ∇_μ ξ_α = Γ^λ_{μβ} g_{αλ} ξ^β without any FD. Achieves\n * machine precision RELATIVE to the metric scale for Schwarzschild.\n * The residual itself is absolute, in the metric's units: with SI\n * Schwarzschild (g_tt ≈ −c² ≈ −9e16) the exact time-translation field\n * leaves 2.44e-4 at r = 3 r_s and 3.05e-5 at 10 r_s (≈ 3e-21 relative).\n * 2. constantKilling=false with dMetricFn supplied: uses exact analytic\n * ∂_μ g_{αβ} + FD for ∂_μ ξ^β. Handles spatially-varying Killing fields.\n * 3. Fallback FD path: differentiates ξ_α(y) = g_{αβ}(y) ξ^β(y) via 4th-\n * order FD. WARNING: suffers c²-cancellation noise for SI-scaled metrics.\n *\n * The Killing equation (Carroll Eq. 3.174):\n * ∇_μ ξ_ν + ∇_ν ξ_μ = 0\n *\n * where ∇_μ ξ_ν = ∂_μ ξ_ν − Γ^λ_{μν} ξ_λ (covariant derivative of the\n * lowered Killing field ξ_ν = g_{νβ} ξ^β).\n *\n * @module numerical/killing\n */\n\nimport { pderivNumericalFn } from './pderiv.js';\nimport { validateFiniteInputs } from './input-validation.js';\n\n/** Options for {@link verifyKillingEquation}.\n *\n * @public */\nexport interface KillingEquationOptions {\n /**\n * Maximum tolerated RELATIVE residual, read only by {@link checkKillingEquation}:\n * ||∇_μ ξ_ν + ∇_ν ξ_μ||_∞ / max(max_{μν} |g_{μν}(x)|, 1) ≤ tolerance. Default 1e-10.\n * Must be finite and > 0. {@link verifyKillingEquation} ignores it and returns the\n * raw (absolute) residual.\n */\n readonly tolerance?: number;\n /**\n * Finite-difference stencil order for the outer ∂_μ ξ_α partials\n * (used only when constantKilling=false and dMetricFn is not supplied).\n * Default 4.\n */\n readonly order?: 2 | 4;\n /**\n * When true (default), assumes ξ^β is coordinate-independent (∂_μ ξ^β = 0)\n * and uses the metric-compatibility identity to compute the covariant\n * derivative purely algebraically:\n *\n * ∇_μ ξ_α = Γ^λ_{μβ} g_{αλ} ξ^β (for constant ξ^β)\n *\n * This avoids all FD and any c²-scale cancellation noise. Exactly correct for\n * the Schwarzschild time-translation (ξ^t = 1) and axial (ξ^φ = 1) fields.\n * Set to false for spatially-varying Killing fields.\n */\n readonly constantKilling?: boolean;\n /**\n * Optional exact partial derivatives of the covariant metric\n * (used only when constantKilling=false).\n * dMetricFn(x)[lambda][mu][nu] = ∂_lambda g_{mu nu}.\n * When supplied with constantKilling=false, ∂_μ g_{αβ} is exact;\n * ∂_μ ξ^β is computed via 4th-order FD.\n */\n readonly dMetricFn?: (x: ReadonlyArray<number>) => number[][][];\n}\n\ntype Vec4 = [number, number, number, number];\n/** A Killing-field factory: returns the field ξ^μ(x) as a function of the 4-position. @public */\nexport type KillingFn = () => (x: Vec4) => Vec4;\n/** A covariant metric closure for the Killing checks: `g(x)[μ][ν] = g_{μν}(x)`, nested. @public */\nexport type KillingMetricFn = (x: ReadonlyArray<number>) => number[][];\n\n/**\n * Layout-agnostic Christoffel accessor.\n *\n * P-3 fix: both nested (number[4][4][4]) and flat (Float64Array(64))\n * Christoffel producers can provide a ChristoffelAccess. This insulates\n * {@link verifyKillingEquation} from the Phase 2 BR-2 migration:\n * Task 2.9 changes how christoffelAt(x) is *constructed*, but consumers\n * only call `christoffelAt(x)(λ, μ, ν)`.\n *\n * @public\n */\nexport type ChristoffelAccess = (lambda: number, mu: number, nu: number) => number;\n\n/** A Christoffel producer: the {@link ChristoffelAccess} at a 4-position. @public */\nexport type ChristoffelAtFn = (x: Vec4) => ChristoffelAccess;\n\n/**\n * Compute `||∇_μ ξ_ν + ∇_ν ξ_μ||_∞` at point `x`, returning the maximum\n * absolute symmetrized residual over all 16 (μ, ν) pairs.\n *\n * For constant Killing fields (constantKilling=true, the default):\n * Uses metric compatibility to derive ∇_μ ξ_α = Γ^λ_{μβ} g_{αλ} ξ^β\n * algebraically — no FD at all. The residual is ABSOLUTE (metric units);\n * for SI Schwarzschild it is at machine precision relative to |g_tt| ≈ c².\n * `opts.tolerance` is not read here; use {@link checkKillingEquation} for a verdict.\n *\n * @param killingFn - Factory returning ξ^μ(x) (upper index).\n * @param metricFn - Covariant metric g_{μν}(x).\n * @param christoffelAt - Christoffel accessor factory (layout-agnostic).\n * @param x - Evaluation point [t, r, θ, φ].\n * @param opts - Optional overrides (see {@link KillingEquationOptions}).\n * @returns Maximum absolute residual of the symmetrized Killing equation.\n *\n * @example\n * ```typescript\n * import { verifyKillingEquation } from 'universal-physics-tensor';\n * import {\n * schwarzschildKillingT,\n * schwarzschildGFn,\n * schwarzschildChristoffelFn,\n * schwarzschildRs,\n * } from '../tests/fixtures/schwarzschild.js'; // or your own metric closures\n *\n * const M = 1.989e30; // solar mass, kg\n * const r_s = schwarzschildRs(M);\n * const x: [number, number, number, number] = [0, 5 * r_s, Math.PI / 2, 0];\n *\n * // Christoffel accessor wrapping the flat Float64Array layout (BR-2)\n * const gammaFn = schwarzschildChristoffelFn(M);\n * const christoffelAccessAt = (pt: [number, number, number, number]) => {\n * const arr = gammaFn(pt);\n * return (lam: number, mu: number, nu: number) => arr[16 * lam + 4 * mu + nu];\n * };\n *\n * const residual = verifyKillingEquation(\n * schwarzschildKillingT,\n * schwarzschildGFn(M),\n * christoffelAccessAt,\n * x,\n * { constantKilling: true },\n * );\n * // residual < 1e-12 for the exact time-translation Killing field\n * ```\n *\n * @public\n */\nexport function verifyKillingEquation(\n killingFn: KillingFn,\n metricFn: KillingMetricFn,\n christoffelAt: ChristoffelAtFn,\n x: Vec4,\n opts: KillingEquationOptions = {},\n): number {\n const order = opts.order ?? 4;\n const constantKilling = opts.constantKilling ?? true;\n const xi = killingFn();\n const g = metricFn(x);\n const xiAtX = xi(x);\n const Gamma = christoffelAt(x);\n\n // Lowered Killing field: ξ_α = g_{αβ} ξ^β\n const xiLower: Vec4 = [0, 0, 0, 0];\n for (let a = 0; a < 4; a++) {\n let s = 0;\n for (let b = 0; b < 4; b++) s += g[a][b] * xiAtX[b];\n xiLower[a] = s;\n }\n\n // Covariant derivative ∇_μ ξ_α (4×4 matrix)\n const cov: number[][] = [\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ];\n\n if (constantKilling) {\n // Algebraic path (metric compatibility, ∂_μ ξ^β = 0):\n // ∇_μ ξ_α = ∂_μ ξ_α − Γ^λ_{μα} ξ_λ\n // where ∂_μ ξ_α = (Γ^λ_{μα} g_{λβ} + Γ^λ_{μβ} g_{αλ}) ξ^β\n // cancelling Γ^λ_{μα} g_{λβ} ξ^β = Γ^λ_{μα} ξ_λ gives:\n // ∇_μ ξ_α = Σ_β Σ_λ Γ^λ_{μβ} g_{αλ} ξ^β\n //\n // Symmetrized: ∇_μ ξ_α + ∇_α ξ_μ = Σ_β [Γ^λ_{μβ} g_{αλ} + Γ^λ_{αβ} g_{μλ}] ξ^β\n // This is the Killing equation in terms of Christoffels only.\n for (let mu = 0; mu < 4; mu++) {\n for (let a = 0; a < 4; a++) {\n let s = 0;\n for (let lam = 0; lam < 4; lam++) {\n for (let b = 0; b < 4; b++) {\n s += Gamma(lam, mu, b) * g[a][lam] * xiAtX[b];\n }\n }\n cov[mu][a] = s;\n }\n }\n } else if (opts.dMetricFn !== undefined) {\n // Exact dMetricFn + FD path for spatially-varying Killing fields.\n // ∂_μ ξ_α = (∂_μ g_{αβ}) ξ^β + g_{αβ} ∂_μ ξ^β\n const dg = opts.dMetricFn(x);\n\n // FD for ∂_μ ξ^β (upper components)\n const dxiUpper: number[][] = [\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ];\n for (let b = 0; b < 4; b++) {\n const xiUpperB = (y: ReadonlyArray<number>): number => xi(y as Vec4)[b];\n for (let mu = 0; mu < 4; mu++) {\n const raw = pderivNumericalFn(xiUpperB, x, mu, { order });\n dxiUpper[mu][b] = typeof raw === 'number' ? raw : (raw as number[])[0];\n }\n }\n\n const partial: number[][] = [\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ];\n for (let mu = 0; mu < 4; mu++) {\n for (let a = 0; a < 4; a++) {\n let s = 0;\n for (let b = 0; b < 4; b++) {\n s += dg[mu][a][b] * xiAtX[b];\n s += g[a][b] * dxiUpper[mu][b];\n }\n partial[mu][a] = s;\n }\n }\n\n for (let mu = 0; mu < 4; mu++) {\n for (let a = 0; a < 4; a++) {\n let connSum = 0;\n for (let lam = 0; lam < 4; lam++) connSum += Gamma(lam, mu, a) * xiLower[lam];\n cov[mu][a] = partial[mu][a] - connSum;\n }\n }\n } else {\n // Pure FD fallback: differentiate ξ_α(y) = g_{αβ}(y) ξ^β(y) numerically.\n // WARNING: large-scale SI metrics (c²·g_tt ~ 6e16) produce cancellation\n // noise at the ~1-10 absolute level. Use constantKilling=true for\n // constant Schwarzschild Killing fields.\n const partial: number[][] = [\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ];\n for (let a = 0; a < 4; a++) {\n const xiLowerA = (y: ReadonlyArray<number>): number => {\n const gy = metricFn(y);\n const xy = xi(y as Vec4);\n let s = 0;\n for (let b = 0; b < 4; b++) s += gy[a][b] * xy[b];\n return s;\n };\n for (let mu = 0; mu < 4; mu++) {\n const raw = pderivNumericalFn(xiLowerA, x, mu, { order });\n partial[mu][a] = typeof raw === 'number' ? raw : (raw as number[])[0];\n }\n }\n for (let mu = 0; mu < 4; mu++) {\n for (let a = 0; a < 4; a++) {\n let connSum = 0;\n for (let lam = 0; lam < 4; lam++) connSum += Gamma(lam, mu, a) * xiLower[lam];\n cov[mu][a] = partial[mu][a] - connSum;\n }\n }\n }\n\n // Symmetrize ∇_μ ξ_ν + ∇_ν ξ_μ and find max|·| over 16 pairs.\n let maxResid = 0;\n for (let mu = 0; mu < 4; mu++) {\n for (let nu = 0; nu < 4; nu++) {\n const sym = cov[mu][nu] + cov[nu][mu];\n const ab = Math.abs(sym);\n if (ab > maxResid) maxResid = ab;\n }\n }\n return maxResid;\n}\n\n/**\n * Result of {@link checkKillingEquation}.\n *\n * @public\n */\nexport interface KillingEquationCheck {\n /** Raw max residual ||∇_μ ξ_ν + ∇_ν ξ_μ||_∞ in the metric's units — identical to\n * {@link verifyKillingEquation}'s return value. */\n readonly residual: number;\n /** `residual / max(max_{μν} |g_{μν}(x)|, 1)`: dimensionless, the quantity the tolerance\n * is applied to (the normalization `evaluateEinsteinEquationResidual` uses). */\n readonly relativeResidual: number;\n /** `relativeResidual <= tolerance` (default 1e-10). */\n readonly withinTolerance: boolean;\n}\n\n/**\n * Check the Killing equation ∇_μ ξ_ν + ∇_ν ξ_μ = 0 at `x` against a tolerance.\n *\n * Runs {@link verifyKillingEquation} with the same arguments and normalizes its absolute\n * residual by the metric scale at `x`: `relativeResidual = residual / max(max|g_μν(x)|, 1)`.\n * The floor of 1 keeps geometrized (order-1) metrics absolute. The verdict is\n * `relativeResidual <= opts.tolerance` (default 1e-10). A relative test matters for SI\n * metrics: an exact Killing field of SI Schwarzschild leaves an absolute residual up to\n * 2.44e-4 (g_tt ≈ −9e16), about 3e-21 relative.\n *\n * @param killingFn - Factory returning ξ^μ(x) (upper index).\n * @param metricFn - Covariant metric g_{μν}(x).\n * @param christoffelAt - Christoffel accessor factory (layout-agnostic).\n * @param x - Evaluation point [t, r, θ, φ].\n * @param opts - {@link KillingEquationOptions}; `tolerance` must be finite and > 0.\n * @returns `{ residual, relativeResidual, withinTolerance }`.\n * @throws RangeError when `opts.tolerance` is not a finite positive number.\n *\n * @public\n */\nexport function checkKillingEquation(\n killingFn: KillingFn,\n metricFn: KillingMetricFn,\n christoffelAt: ChristoffelAtFn,\n x: Vec4,\n opts: KillingEquationOptions = {},\n): KillingEquationCheck {\n if (opts.tolerance !== undefined) {\n validateFiniteInputs(opts, [{ name: 'tolerance', min: 0, excludeMin: true }], 'checkKillingEquation');\n }\n const tolerance = opts.tolerance ?? 1e-10;\n const residual = verifyKillingEquation(killingFn, metricFn, christoffelAt, x, opts);\n let scale = 1;\n for (const row of metricFn(x)) for (const v of row) scale = Math.max(scale, Math.abs(v));\n const relativeResidual = residual / scale;\n return { residual, relativeResidual, withinTolerance: relativeResidual <= tolerance };\n}\n\n/**\n * Evaluate the conserved charge Q = ξ^μ p_μ at point x along a geodesic.\n *\n * Sign convention: raw contraction ξ^μ p_μ. For the time-translation\n * Killing field in (−,+,+,+) signature, p_t < 0 for forward-time motion,\n * so the physical energy of common usage is E = −Q (Carroll Eq. 8.30).\n * Use `|ΔQ / Q|` for drift diagnostics to stay sign-agnostic.\n *\n * @param killingFn - Factory returning ξ^μ(x) (upper index).\n * @param momentumLower - Co-momentum p_μ at the geodesic point (lower index).\n * @param x - Geodesic coordinate [t, r, θ, φ].\n * @returns Q = ξ^μ p_μ (dimensioned as energy if p is 4-momentum).\n *\n * @example\n * ```typescript\n * import { evaluateConservedCharge } from 'universal-physics-tensor';\n * import { schwarzschildKillingT } from '../tests/fixtures/schwarzschild.js';\n *\n * // Co-momentum p_μ at a geodesic snapshot (p_t < 0 for forward-time motion)\n * const pLower: [number, number, number, number] = [-8.988e16, 0, 0, 0];\n * const x: [number, number, number, number] = [0, 1e7, Math.PI / 2, 0];\n *\n * const Q = evaluateConservedCharge(schwarzschildKillingT, pLower, x);\n * // Q = ξ^t · p_t = 1 · p_t = p_t (energy with sign from metric)\n * // Physical energy E = −Q (Carroll sign convention for (−,+,+,+))\n * ```\n *\n * @public\n */\nexport function evaluateConservedCharge(\n killingFn: KillingFn,\n momentumLower: Vec4,\n x: Vec4,\n): number {\n const xi = killingFn()(x);\n let q = 0;\n for (let m = 0; m < 4; m++) q += xi[m] * momentumLower[m];\n return q;\n}\n"]}
|