universal-physics-tensor 9.0.0 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -17
- package/bin/upt.mjs +13 -1
- package/data/atlas/atlas.json +79 -68
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +24 -23
- package/data/atlas/oscillators.json +21 -16
- package/data/atlas/waves.json +36 -31
- package/data/atlas/witness-results.json +11 -11
- package/data/bridge-catalog.json +1192 -1636
- package/data/bridge-catalog.schema.json +390 -135
- package/data/quantities.json +53 -19
- package/data/schemas/atlas-record.v0.json +184 -46
- package/data/units.json +33 -4
- package/dist/atlas/applicability.d.ts.map +1 -1
- package/dist/atlas/applicability.js +35 -18
- package/dist/atlas/applicability.js.map +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 +12 -3
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +30 -21
- 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 +2 -2
- 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 +3 -3
- package/dist/atlas/benchmark/stats.d.ts.map +1 -1
- package/dist/atlas/benchmark/stats.js +16 -8
- 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.d.ts +26 -3
- package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
- package/dist/atlas/catalog-formal-ref.js +52 -5
- package/dist/atlas/catalog-formal-ref.js.map +1 -1
- package/dist/atlas/chain-pipeline.d.ts +0 -11
- package/dist/atlas/chain-pipeline.d.ts.map +1 -1
- package/dist/atlas/chain-pipeline.js +12 -24
- 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 +0 -4
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.js +8 -17
- package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
- package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges.js +27 -42
- package/dist/atlas/diffusion/bridges.js.map +1 -1
- package/dist/atlas/diffusion/dimensions.d.ts +6 -14
- package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
- package/dist/atlas/diffusion/dimensions.js +8 -16
- package/dist/atlas/diffusion/dimensions.js.map +1 -1
- package/dist/atlas/diffusion/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.d.ts +3 -3
- package/dist/atlas/diffusion/models.d.ts.map +1 -1
- package/dist/atlas/diffusion/models.js +5 -10
- package/dist/atlas/diffusion/models.js.map +1 -1
- package/dist/atlas/diffusion/numerics.d.ts +16 -4
- package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
- package/dist/atlas/diffusion/numerics.js +38 -24
- package/dist/atlas/diffusion/numerics.js.map +1 -1
- package/dist/atlas/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 +107 -4
- package/dist/atlas/link-prediction.d.ts.map +1 -1
- package/dist/atlas/link-prediction.js +212 -66
- package/dist/atlas/link-prediction.js.map +1 -1
- package/dist/atlas/model.js.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.js +7 -12
- package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.js +6 -10
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.js +23 -36
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
- package/dist/atlas/oscillators/dimensions.d.ts +9 -21
- package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
- package/dist/atlas/oscillators/dimensions.js +9 -21
- package/dist/atlas/oscillators/dimensions.js.map +1 -1
- package/dist/atlas/oscillators/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.d.ts +2 -2
- package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.js +17 -15
- package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
- package/dist/atlas/oscillators/models.d.ts.map +1 -1
- package/dist/atlas/oscillators/models.js +2 -6
- package/dist/atlas/oscillators/models.js.map +1 -1
- package/dist/atlas/oscillators/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.d.ts +29 -6
- package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.js +60 -40
- package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
- package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
- package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
- package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/phase-translation.js +3 -4
- package/dist/atlas/oscillators/phase-translation.js.map +1 -1
- package/dist/atlas/oscillators/position-translation.d.ts +68 -7
- package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/position-translation.js +123 -12
- package/dist/atlas/oscillators/position-translation.js.map +1 -1
- package/dist/atlas/oscillators/rejections.d.ts +0 -2
- package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
- package/dist/atlas/oscillators/rejections.js +0 -7
- package/dist/atlas/oscillators/rejections.js.map +1 -1
- package/dist/atlas/path-bound.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +25 -24
- package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
- package/dist/atlas/physjs-entries.generated.js +25 -24
- package/dist/atlas/physjs-entries.generated.js.map +1 -1
- package/dist/atlas/physjs-ref.d.ts +107 -70
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +184 -101
- 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.d.ts +0 -19
- package/dist/atlas/poster/statements.d.ts.map +1 -1
- package/dist/atlas/poster/statements.js +1 -1
- package/dist/atlas/poster/statements.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +1 -1
- package/dist/atlas/proof-target.js +1 -1
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/atlas/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.d.ts +1 -1
- package/dist/atlas/regime.d.ts.map +1 -1
- package/dist/atlas/regime.js +1 -1
- package/dist/atlas/regime.js.map +1 -1
- package/dist/atlas/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/text-overlap.d.ts +23 -0
- package/dist/atlas/text-overlap.d.ts.map +1 -0
- package/dist/atlas/text-overlap.js +41 -0
- package/dist/atlas/text-overlap.js.map +1 -0
- package/dist/atlas/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 +2 -9
- package/dist/atlas/waves/bridges-closure.js.map +1 -1
- package/dist/atlas/waves/bridges.d.ts.map +1 -1
- package/dist/atlas/waves/bridges.js +32 -52
- 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.d.ts +5 -6
- package/dist/atlas/waves/models.d.ts.map +1 -1
- package/dist/atlas/waves/models.js +7 -13
- package/dist/atlas/waves/models.js.map +1 -1
- package/dist/atlas/waves/numerics.d.ts.map +1 -1
- package/dist/atlas/waves/numerics.js +10 -3
- package/dist/atlas/waves/numerics.js.map +1 -1
- package/dist/atlas/witness-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 +38 -4
- package/dist/atlas/witness-numeric.d.ts.map +1 -1
- package/dist/atlas/witness-numeric.js +80 -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.d.ts.map +1 -1
- package/dist/atlas/witness-specs.js +19 -0
- package/dist/atlas/witness-specs.js.map +1 -1
- package/dist/atlas/witness-symbolic.d.ts +75 -3
- package/dist/atlas/witness-symbolic.d.ts.map +1 -1
- package/dist/atlas/witness-symbolic.js +116 -10
- package/dist/atlas/witness-symbolic.js.map +1 -1
- package/dist/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 +17 -9
- package/dist/bridges/catalog-adapter.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts +12 -2
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +181 -13
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +74 -26
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/catalog-types.js +11 -1
- package/dist/bridges/catalog-types.js.map +1 -1
- package/dist/bridges/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 +46 -3
- package/dist/bridges/evaluation-errors.d.ts.map +1 -1
- package/dist/bridges/evaluation-errors.js +40 -4
- package/dist/bridges/evaluation-errors.js.map +1 -1
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +7 -5
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts +17 -2
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +76 -28
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +38 -4
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +101 -12
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +40 -4
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +128 -19
- 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.js.map +1 -1
- 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.map +1 -1
- package/dist/bridges/notices.js +5 -5
- package/dist/bridges/notices.js.map +1 -1
- 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 +6 -7
- package/dist/bridges/relation-eval.d.ts.map +1 -1
- package/dist/bridges/relation-eval.js +20 -50
- 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 +27 -13
- 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/bridges/validity.d.ts +33 -0
- package/dist/bridges/validity.d.ts.map +1 -0
- package/dist/bridges/validity.js +67 -0
- package/dist/bridges/validity.js.map +1 -0
- package/dist/canonical/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.js +1 -3
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
- package/dist/canonical/entries/condensed-matter.js +8 -9
- 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 +5 -6
- 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 +6 -12
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +3 -7
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/mechanics.js +4 -6
- package/dist/canonical/entries/mechanics.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +38 -39
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/entries/relativity.d.ts.map +1 -1
- package/dist/canonical/entries/relativity.js +6 -6
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/statistical-mechanics.js +5 -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 +6 -10
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/fixed-points.d.ts +94 -0
- package/dist/canonical/fixed-points.d.ts.map +1 -0
- package/dist/canonical/fixed-points.js +81 -0
- package/dist/canonical/fixed-points.js.map +1 -0
- package/dist/canonical/linkage.d.ts +29 -4
- package/dist/canonical/linkage.d.ts.map +1 -1
- package/dist/canonical/linkage.js +47 -64
- 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 +22 -23
- 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 +42 -21
- package/dist/canonical/structural.d.ts.map +1 -1
- package/dist/canonical/structural.js +64 -23
- package/dist/canonical/structural.js.map +1 -1
- package/dist/cases/brownian-sphere.d.ts +3 -3
- package/dist/cases/brownian-sphere.d.ts.map +1 -1
- package/dist/cases/brownian-sphere.js +10 -9
- package/dist/cases/brownian-sphere.js.map +1 -1
- package/dist/cases/damped-resonator.d.ts.map +1 -1
- package/dist/cases/damped-resonator.js +8 -11
- package/dist/cases/damped-resonator.js.map +1 -1
- package/dist/cases/index.js.map +1 -1
- package/dist/cases/kepler-rv.d.ts +1 -1
- package/dist/cases/kepler-rv.d.ts.map +1 -1
- package/dist/cases/kepler-rv.js +3 -2
- package/dist/cases/kepler-rv.js.map +1 -1
- package/dist/cases/lumped-cooling.d.ts +8 -3
- package/dist/cases/lumped-cooling.d.ts.map +1 -1
- package/dist/cases/lumped-cooling.js +22 -24
- package/dist/cases/lumped-cooling.js.map +1 -1
- package/dist/cases/quadrature.d.ts +7 -9
- package/dist/cases/quadrature.d.ts.map +1 -1
- package/dist/cases/quadrature.js +28 -32
- package/dist/cases/quadrature.js.map +1 -1
- package/dist/cases/resistor-noise.js +7 -7
- package/dist/cases/resistor-noise.js.map +1 -1
- package/dist/cases/skin-depth.d.ts +0 -4
- package/dist/cases/skin-depth.d.ts.map +1 -1
- package/dist/cases/skin-depth.js +3 -7
- package/dist/cases/skin-depth.js.map +1 -1
- package/dist/cases/types.js.map +1 -1
- package/dist/cli/args.d.ts +30 -3
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +47 -9
- 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 +33 -0
- package/dist/cli/bindings.js.map +1 -0
- package/dist/cli/closed-form-range.js.map +1 -1
- package/dist/cli/command.d.ts +8 -1
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/_atlas-map.d.ts +2 -11
- package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-map.js +50 -35
- package/dist/cli/commands/_atlas-map.js.map +1 -1
- package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-route.js +6 -2
- package/dist/cli/commands/_atlas-route.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +48 -14
- 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 +9 -8
- 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 +20 -20
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/axes.d.ts.map +1 -1
- package/dist/cli/commands/axes.js +20 -1
- package/dist/cli/commands/axes.js.map +1 -1
- package/dist/cli/commands/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 -20
- package/dist/cli/commands/confront.js.map +1 -1
- 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 +60 -35
- 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 +20 -10
- 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 +14 -10
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +108 -58
- 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 +16 -8
- 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 -10
- 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 +155 -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 +58 -20
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/path.d.ts +10 -0
- package/dist/cli/commands/path.d.ts.map +1 -1
- package/dist/cli/commands/path.js +29 -7
- 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 +105 -38
- 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 -26
- 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 +23 -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 +9 -4
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/symbolic.js +31 -36
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.d.ts.map +1 -1
- package/dist/cli/commands/testplan.js +5 -3
- package/dist/cli/commands/testplan.js.map +1 -1
- 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.js.map +1 -1
- package/dist/cli/eval-numbers.js.map +1 -1
- package/dist/cli/expr-print.d.ts +28 -3
- package/dist/cli/expr-print.d.ts.map +1 -1
- package/dist/cli/expr-print.js +42 -22
- 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.d.ts +7 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +25 -6
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/map-evidence.js.map +1 -1
- package/dist/cli/numeric-flag.d.ts +12 -0
- package/dist/cli/numeric-flag.d.ts.map +1 -0
- package/dist/cli/numeric-flag.js +44 -0
- package/dist/cli/numeric-flag.js.map +1 -0
- package/dist/cli/output.d.ts +23 -6
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +15 -0
- package/dist/cli/output.js.map +1 -1
- 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 +17 -11
- package/dist/cli/record-reach.js.map +1 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +7 -6
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli/record.d.ts +1 -5
- package/dist/cli/record.d.ts.map +1 -1
- package/dist/cli/record.js +40 -20
- 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 +19 -7
- package/dist/cli/search-index.js.map +1 -1
- package/dist/cli/statuses.d.ts +0 -2
- package/dist/cli/statuses.d.ts.map +1 -1
- package/dist/cli/statuses.js +0 -7
- package/dist/cli/statuses.js.map +1 -1
- package/dist/cli/stored-results.d.ts +7 -0
- package/dist/cli/stored-results.d.ts.map +1 -0
- package/dist/cli/stored-results.js +23 -0
- package/dist/cli/stored-results.js.map +1 -0
- package/dist/cli/top-level-help.js.map +1 -1
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +7 -5
- package/dist/cli/version.js.map +1 -1
- package/dist/cli-api.d.ts +49 -14
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +42 -17
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/adjudication.js.map +1 -1
- package/dist/composition/algebraic-equivalence.d.ts +43 -0
- package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
- package/dist/composition/algebraic-equivalence.js +115 -0
- package/dist/composition/algebraic-equivalence.js.map +1 -0
- package/dist/composition/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 +6 -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.d.ts +47 -20
- package/dist/composition/axis-audit.d.ts.map +1 -1
- package/dist/composition/axis-audit.js +82 -9
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +14 -15
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +148 -91
- 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 +40 -0
- package/dist/composition/canonical-compare.d.ts.map +1 -1
- package/dist/composition/canonical-compare.js +134 -26
- package/dist/composition/canonical-compare.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +9 -10
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +33 -102
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-json.js +2 -2
- package/dist/composition/canonical-json.js.map +1 -1
- package/dist/composition/canonical-prefactors.js.map +1 -1
- package/dist/composition/catalog-graph.d.ts.map +1 -1
- package/dist/composition/catalog-graph.js +8 -25
- package/dist/composition/catalog-graph.js.map +1 -1
- package/dist/composition/chain-candidate.d.ts +10 -0
- package/dist/composition/chain-candidate.d.ts.map +1 -1
- package/dist/composition/chain-candidate.js +11 -2
- package/dist/composition/chain-candidate.js.map +1 -1
- package/dist/composition/chain-match.d.ts +6 -3
- package/dist/composition/chain-match.d.ts.map +1 -1
- package/dist/composition/chain-match.js +4 -1
- package/dist/composition/chain-match.js.map +1 -1
- package/dist/composition/chain-regime.js.map +1 -1
- package/dist/composition/chain-result.d.ts.map +1 -1
- package/dist/composition/chain-result.js +2 -14
- package/dist/composition/chain-result.js.map +1 -1
- package/dist/composition/compose-surface.js.map +1 -1
- package/dist/composition/compose-symbolic.d.ts.map +1 -1
- package/dist/composition/compose-symbolic.js +3 -2
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +166 -41
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/composition-recovery.d.ts.map +1 -1
- package/dist/composition/composition-recovery.js +4 -7
- package/dist/composition/composition-recovery.js.map +1 -1
- package/dist/composition/consequence.d.ts.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 +77 -11
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +194 -80
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +40 -10
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +47 -12
- 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 +18 -3
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +35 -11
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +60 -39
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +5 -9
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +38 -18
- 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 -11
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/expr-simplify.d.ts +16 -0
- package/dist/composition/expr-simplify.d.ts.map +1 -1
- package/dist/composition/expr-simplify.js +24 -59
- 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 +28 -0
- package/dist/composition/formula-shape.d.ts.map +1 -1
- package/dist/composition/formula-shape.js +96 -2
- 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-structure.d.ts +98 -0
- package/dist/composition/graph-structure.d.ts.map +1 -0
- package/dist/composition/graph-structure.js +167 -0
- package/dist/composition/graph-structure.js.map +1 -0
- package/dist/composition/graph-viz-svg.d.ts.map +1 -1
- package/dist/composition/graph-viz-svg.js +1 -1
- package/dist/composition/graph-viz-svg.js.map +1 -1
- package/dist/composition/graph-viz.d.ts.map +1 -1
- package/dist/composition/graph-viz.js +8 -37
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/grounding.js.map +1 -1
- package/dist/composition/identifiability.d.ts +91 -4
- package/dist/composition/identifiability.d.ts.map +1 -1
- package/dist/composition/identifiability.js +363 -6
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +14 -8
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +7 -5
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/mathts-quiet.d.ts +29 -0
- package/dist/composition/mathts-quiet.d.ts.map +1 -0
- package/dist/composition/mathts-quiet.js +57 -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 +20 -35
- 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.d.ts +4 -2
- package/dist/composition/probe/corpus.d.ts.map +1 -1
- package/dist/composition/probe/corpus.js +20 -9
- package/dist/composition/probe/corpus.js.map +1 -1
- package/dist/composition/probe/dataset.d.ts +17 -0
- package/dist/composition/probe/dataset.d.ts.map +1 -1
- package/dist/composition/probe/dataset.js +95 -50
- package/dist/composition/probe/dataset.js.map +1 -1
- package/dist/composition/probe/experiment-design.d.ts +5 -1
- package/dist/composition/probe/experiment-design.d.ts.map +1 -1
- package/dist/composition/probe/experiment-design.js +44 -24
- package/dist/composition/probe/experiment-design.js.map +1 -1
- package/dist/composition/probe/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 +16 -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 +7 -1
- package/dist/composition/probe/fit.d.ts.map +1 -1
- package/dist/composition/probe/fit.js +48 -23
- package/dist/composition/probe/fit.js.map +1 -1
- package/dist/composition/probe/frontier.d.ts.map +1 -1
- package/dist/composition/probe/frontier.js +33 -15
- package/dist/composition/probe/frontier.js.map +1 -1
- package/dist/composition/probe/generator.d.ts +27 -1
- package/dist/composition/probe/generator.d.ts.map +1 -1
- package/dist/composition/probe/generator.js +53 -30
- package/dist/composition/probe/generator.js.map +1 -1
- package/dist/composition/probe/index.d.ts +18 -2
- package/dist/composition/probe/index.d.ts.map +1 -1
- package/dist/composition/probe/index.js +10 -2
- package/dist/composition/probe/index.js.map +1 -1
- package/dist/composition/probe/limits.d.ts +24 -1
- package/dist/composition/probe/limits.d.ts.map +1 -1
- package/dist/composition/probe/limits.js +53 -11
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/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 +22 -9
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/power-law.d.ts +121 -0
- package/dist/composition/probe/power-law.d.ts.map +1 -0
- package/dist/composition/probe/power-law.js +255 -0
- package/dist/composition/probe/power-law.js.map +1 -0
- package/dist/composition/probe/problem.d.ts +12 -1
- package/dist/composition/probe/problem.d.ts.map +1 -1
- package/dist/composition/probe/problem.js +242 -48
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.js +1 -1
- package/dist/composition/probe/report.js.map +1 -1
- package/dist/composition/probe/residual.d.ts +6 -1
- package/dist/composition/probe/residual.d.ts.map +1 -1
- package/dist/composition/probe/residual.js +9 -7
- 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.d.ts +82 -17
- package/dist/composition/probe/structure.d.ts.map +1 -1
- package/dist/composition/probe/structure.js +129 -55
- package/dist/composition/probe/structure.js.map +1 -1
- package/dist/composition/probe/study.d.ts +35 -12
- package/dist/composition/probe/study.d.ts.map +1 -1
- package/dist/composition/probe/study.js +241 -184
- package/dist/composition/probe/study.js.map +1 -1
- package/dist/composition/probe/t-tail.d.ts +17 -0
- package/dist/composition/probe/t-tail.d.ts.map +1 -0
- package/dist/composition/probe/t-tail.js +32 -0
- package/dist/composition/probe/t-tail.js.map +1 -0
- package/dist/composition/probe/types.d.ts +6 -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 +51 -13
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +110 -58
- 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-clusters.d.ts +48 -0
- package/dist/composition/quantity-clusters.d.ts.map +1 -0
- package/dist/composition/quantity-clusters.js +98 -0
- package/dist/composition/quantity-clusters.js.map +1 -0
- package/dist/composition/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/rational-exponent.d.ts +40 -0
- package/dist/composition/rational-exponent.d.ts.map +1 -0
- package/dist/composition/rational-exponent.js +65 -0
- package/dist/composition/rational-exponent.js.map +1 -0
- package/dist/composition/representative-values.d.ts +22 -0
- package/dist/composition/representative-values.d.ts.map +1 -1
- package/dist/composition/representative-values.js +23 -0
- package/dist/composition/representative-values.js.map +1 -1
- package/dist/composition/retrodiction.d.ts +16 -6
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +36 -10
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/uncertainty.js.map +1 -1
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/composition/user-equation.js +2 -2
- package/dist/composition/user-equation.js.map +1 -1
- package/dist/core/assignment.d.ts +19 -0
- package/dist/core/assignment.d.ts.map +1 -0
- package/dist/core/assignment.js +19 -0
- package/dist/core/assignment.js.map +1 -0
- package/dist/core/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/compare.d.ts +32 -0
- package/dist/core/compare.d.ts.map +1 -0
- package/dist/core/compare.js +46 -0
- package/dist/core/compare.js.map +1 -0
- package/dist/core/constants.d.ts +35 -35
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +52 -37
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +7 -0
- package/dist/core/data-file.d.ts.map +1 -1
- package/dist/core/data-file.js +17 -0
- package/dist/core/data-file.js.map +1 -1
- package/dist/core/flux-rules.js +1 -1
- package/dist/core/flux-rules.js.map +1 -1
- package/dist/core/format.d.ts +36 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +39 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/hash.d.ts +14 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +17 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/json-schema.d.ts +3 -1
- package/dist/core/json-schema.d.ts.map +1 -1
- package/dist/core/json-schema.js +41 -16
- package/dist/core/json-schema.js.map +1 -1
- 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 -16
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/mathts-read.d.ts +25 -0
- package/dist/core/mathts-read.d.ts.map +1 -0
- package/dist/core/mathts-read.js +51 -0
- package/dist/core/mathts-read.js.map +1 -0
- package/dist/core/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 +64 -8
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts +5 -5
- 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 +10 -6
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/diff/bridge-gradient.d.ts +43 -86
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +40 -109
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts +16 -5
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +19 -4
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/algebra.d.ts +18 -0
- package/dist/dimensional/algebra.d.ts.map +1 -1
- package/dist/dimensional/algebra.js +41 -1
- package/dist/dimensional/algebra.js.map +1 -1
- package/dist/dimensional/ast-builders.d.ts +12 -4
- package/dist/dimensional/ast-builders.d.ts.map +1 -1
- package/dist/dimensional/ast-builders.js +17 -5
- package/dist/dimensional/ast-builders.js.map +1 -1
- package/dist/dimensional/ast-leaves.d.ts +81 -0
- package/dist/dimensional/ast-leaves.d.ts.map +1 -0
- package/dist/dimensional/ast-leaves.js +146 -0
- package/dist/dimensional/ast-leaves.js.map +1 -0
- package/dist/dimensional/ast-types.js.map +1 -1
- package/dist/dimensional/bridge-check.js.map +1 -1
- package/dist/dimensional/buckingham.d.ts.map +1 -1
- package/dist/dimensional/buckingham.js +15 -27
- package/dist/dimensional/buckingham.js.map +1 -1
- package/dist/dimensional/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.map +1 -1
- package/dist/dimensional/constant-rows.js +17 -13
- package/dist/dimensional/constant-rows.js.map +1 -1
- package/dist/dimensional/constants.d.ts +5 -6
- package/dist/dimensional/constants.d.ts.map +1 -1
- package/dist/dimensional/constants.js +5 -6
- 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.d.ts.map +1 -1
- package/dist/dimensional/dimension-inference.js +1 -2
- package/dist/dimensional/dimension-inference.js.map +1 -1
- package/dist/dimensional/dimension-spec.d.ts +13 -7
- package/dist/dimensional/dimension-spec.d.ts.map +1 -1
- package/dist/dimensional/dimension-spec.js +49 -23
- package/dist/dimensional/dimension-spec.js.map +1 -1
- package/dist/dimensional/einstein-equation.js.map +1 -1
- package/dist/dimensional/errors.d.ts +4 -2
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/errors.js +3 -17
- package/dist/dimensional/errors.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +0 -17
- package/dist/dimensional/exact-scale.d.ts.map +1 -1
- package/dist/dimensional/exact-scale.js +8 -8
- package/dist/dimensional/exact-scale.js.map +1 -1
- package/dist/dimensional/field-equation-helpers.js.map +1 -1
- 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 +2 -3
- package/dist/dimensional/gauge-field.js.map +1 -1
- package/dist/dimensional/hyphen-names.d.ts +12 -2
- package/dist/dimensional/hyphen-names.d.ts.map +1 -1
- package/dist/dimensional/hyphen-names.js +45 -12
- 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.d.ts.map +1 -1
- package/dist/dimensional/metric.js +0 -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 +13 -0
- package/dist/dimensional/quantity-registry.d.ts.map +1 -1
- package/dist/dimensional/quantity-registry.js +14 -6
- 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 +9 -0
- package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
- package/dist/dimensional/symbolic-constants.js +20 -3
- 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.d.ts +36 -0
- package/dist/dimensional/types.d.ts.map +1 -1
- package/dist/dimensional/types.js +45 -7
- package/dist/dimensional/types.js.map +1 -1
- package/dist/dimensional/unit-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.map +1 -1
- package/dist/dimensional/unit-data.js +11 -7
- package/dist/dimensional/unit-data.js.map +1 -1
- package/dist/dimensional/units.d.ts.map +1 -1
- package/dist/dimensional/units.js +38 -20
- 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 +59 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -24
- package/dist/index.js.map +1 -1
- package/dist/numerical/bianchi-residual.js.map +1 -1
- package/dist/numerical/binding-value.d.ts +11 -6
- package/dist/numerical/binding-value.d.ts.map +1 -1
- package/dist/numerical/binding-value.js +126 -122
- package/dist/numerical/binding-value.js.map +1 -1
- package/dist/numerical/christoffel-flat.d.ts.map +1 -1
- package/dist/numerical/christoffel-flat.js +3 -2
- package/dist/numerical/christoffel-flat.js.map +1 -1
- package/dist/numerical/connection-lowering-helpers.js.map +1 -1
- package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
- package/dist/numerical/covariant-eikonal.js +36 -13
- 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 +9 -5
- 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 -8
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -1
- package/dist/numerical/evaluator-uncertainty.js +19 -2
- package/dist/numerical/evaluator-uncertainty.js.map +1 -1
- package/dist/numerical/finite-difference.d.ts +22 -0
- package/dist/numerical/finite-difference.d.ts.map +1 -0
- package/dist/numerical/finite-difference.js +27 -0
- package/dist/numerical/finite-difference.js.map +1 -0
- package/dist/numerical/formula-contract.d.ts +63 -7
- package/dist/numerical/formula-contract.d.ts.map +1 -1
- package/dist/numerical/formula-contract.js +61 -42
- package/dist/numerical/formula-contract.js.map +1 -1
- package/dist/numerical/formula-dimension.d.ts +8 -7
- package/dist/numerical/formula-dimension.d.ts.map +1 -1
- package/dist/numerical/formula-dimension.js +58 -36
- 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 +5 -2
- 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.d.ts.map +1 -1
- package/dist/numerical/geodesic-integrator.js +22 -14
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/geometrized.d.ts.map +1 -1
- package/dist/numerical/geometrized.js +0 -1
- package/dist/numerical/geometrized.js.map +1 -1
- package/dist/numerical/gl4-integrator.d.ts +28 -27
- package/dist/numerical/gl4-integrator.d.ts.map +1 -1
- package/dist/numerical/gl4-integrator.js +41 -42
- 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 +16 -25
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.d.ts.map +1 -1
- package/dist/numerical/metric-inverse.js +83 -46
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/null-ic.js.map +1 -1
- package/dist/numerical/null-ray-integrator.d.ts +2 -1
- package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
- package/dist/numerical/null-ray-integrator.js +12 -12
- package/dist/numerical/null-ray-integrator.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js +2 -2
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/pderiv.d.ts.map +1 -1
- package/dist/numerical/pderiv.js +9 -2
- package/dist/numerical/pderiv.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +0 -36
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +41 -87
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/quadrature.d.ts +5 -2
- package/dist/numerical/quadrature.d.ts.map +1 -1
- package/dist/numerical/quadrature.js +19 -4
- package/dist/numerical/quadrature.js.map +1 -1
- package/dist/numerical/rk4-trajectory.d.ts +10 -0
- package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
- package/dist/numerical/rk4-trajectory.js +37 -0
- package/dist/numerical/rk4-trajectory.js.map +1 -0
- package/dist/numerical/schwarzschild.d.ts +14 -0
- package/dist/numerical/schwarzschild.d.ts.map +1 -0
- package/dist/numerical/schwarzschild.js +17 -0
- package/dist/numerical/schwarzschild.js.map +1 -0
- package/dist/numerical/spacetime-metrics.d.ts +25 -19
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +180 -286
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/numerical/statistics.d.ts +24 -0
- package/dist/numerical/statistics.d.ts.map +1 -0
- package/dist/numerical/statistics.js +52 -0
- package/dist/numerical/statistics.js.map +1 -0
- package/dist/numerical/strides.js.map +1 -1
- package/dist/numerical/tensor-engine.d.ts +30 -5
- package/dist/numerical/tensor-engine.d.ts.map +1 -1
- package/dist/numerical/tensor-engine.js +12 -0
- package/dist/numerical/tensor-engine.js.map +1 -1
- package/dist/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 +28 -8
- package/dist/relations/regime.d.ts.map +1 -1
- package/dist/relations/regime.js +44 -15
- package/dist/relations/regime.js.map +1 -1
- package/dist/relations/types.d.ts +18 -5
- package/dist/relations/types.d.ts.map +1 -1
- package/dist/relations/types.js +5 -3
- package/dist/relations/types.js.map +1 -1
- package/package.json +16 -20
- 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
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One owner for the scalar-leaf walk of an `ExprNode` and the literal rule.
|
|
3
|
+
*
|
|
4
|
+
* Thirteen walks over the leaves and six spellings of "is this name a number"
|
|
5
|
+
* once lived in the funnel, the probe and the canonical layer, and they
|
|
6
|
+
* disagreed on the edges: one accepted `0x2`, one rejected `1e3`, and several
|
|
7
|
+
* accepted the empty string (`Number('')` is `0`). The rule here is the
|
|
8
|
+
* validator's decimal-literal grammar, so a formula is read the same way
|
|
9
|
+
* everywhere it is read.
|
|
10
|
+
*
|
|
11
|
+
* The walker descends into `op` arguments always. Every other arm is opted
|
|
12
|
+
* into by the caller through {@link LeafWalkArms}, because the callers it
|
|
13
|
+
* replaced did not agree on which arms they walked (the evaluator reads
|
|
14
|
+
* `transcendental` and `abs`; the simplifier reads an integral's measure and
|
|
15
|
+
* integrand but not its bounds), and the behaviour of each is kept by passing
|
|
16
|
+
* its own set.
|
|
17
|
+
*
|
|
18
|
+
* @module dimensional/ast-leaves
|
|
19
|
+
*/
|
|
20
|
+
import type { ExprNode } from './ast-types.js';
|
|
21
|
+
/** A scalar leaf: a symbol with its dimension. @internal */
|
|
22
|
+
export type ScalarLeaf = Extract<ExprNode, {
|
|
23
|
+
kind: 'symbol';
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* The decimal-literal grammar: an optional sign, digits with an optional
|
|
27
|
+
* fraction (or a bare fraction), and an optional exponent. `1e3` and `2.` are
|
|
28
|
+
* literals; `0x2`, `Infinity` and the empty string are not. This is the
|
|
29
|
+
* validator's rule for a literal exponent.
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export declare const DECIMAL_LITERAL: RegExp;
|
|
34
|
+
/** True when `name` is a decimal literal under {@link DECIMAL_LITERAL}. @internal */
|
|
35
|
+
export declare function isDecimalLiteral(name: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* The number a decimal-literal symbol names, or `undefined` for any other
|
|
38
|
+
* node. The dimension stored on the symbol is not read: a caller that needs
|
|
39
|
+
* the literal to be dimensionless checks that itself.
|
|
40
|
+
*
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
export declare function literalValue(node: ExprNode): number | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Which non-`op` arms a walk descends into. `op` arguments are always walked.
|
|
46
|
+
* An arm left out is not entered, and its leaves are not visited.
|
|
47
|
+
*
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
export interface LeafWalkArms {
|
|
51
|
+
/** `exp`, `ln`, the trigonometric functions: their argument. */
|
|
52
|
+
readonly transcendental?: boolean;
|
|
53
|
+
/** `abs`: its argument. */
|
|
54
|
+
readonly abs?: boolean;
|
|
55
|
+
/** `dirac-delta`: its argument. */
|
|
56
|
+
readonly diracDelta?: boolean;
|
|
57
|
+
/** `integral`: the measure and the integrand, or those and both bounds. */
|
|
58
|
+
readonly integral?: 'over+integrand' | 'all';
|
|
59
|
+
/** `derivative`: `of` and `wrt`. */
|
|
60
|
+
readonly derivative?: boolean;
|
|
61
|
+
/** `variational-derivative`: the functional, the field and the measure. */
|
|
62
|
+
readonly variationalDerivative?: boolean;
|
|
63
|
+
/** `tensor-product`: its arguments. */
|
|
64
|
+
readonly tensorProduct?: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Visit every scalar leaf of `node` reachable through `op` arguments and the
|
|
68
|
+
* arms in `arms`, in source order. A leaf is visited once per occurrence.
|
|
69
|
+
*
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
export declare function forEachScalarLeaf(node: ExprNode, visit: (leaf: ScalarLeaf) => void, arms: LeafWalkArms): void;
|
|
73
|
+
/**
|
|
74
|
+
* Replace each scalar leaf reachable under `arms` by `f(leaf)`. A subtree in
|
|
75
|
+
* which no leaf changed is returned by reference, so an arm the walk did not
|
|
76
|
+
* enter, and an unchanged tree, are the same objects the caller passed.
|
|
77
|
+
*
|
|
78
|
+
* @internal
|
|
79
|
+
*/
|
|
80
|
+
export declare function mapScalarLeaves(node: ExprNode, f: (leaf: ScalarLeaf) => ExprNode, arms: LeafWalkArms): ExprNode;
|
|
81
|
+
//# sourceMappingURL=ast-leaves.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-leaves.d.ts","sourceRoot":"","sources":["../../src/dimensional/ast-leaves.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,QAAgD,CAAC;AAE7E,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAG/D;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,2BAA2B;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;IAC7C,oCAAoC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,uCAAuC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAiCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,EACjC,IAAI,EAAE,YAAY,GACjB,IAAI,CAMN;AAmCD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,EACjC,IAAI,EAAE,YAAY,GACjB,QAAQ,CAWV"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One owner for the scalar-leaf walk of an `ExprNode` and the literal rule.
|
|
3
|
+
*
|
|
4
|
+
* Thirteen walks over the leaves and six spellings of "is this name a number"
|
|
5
|
+
* once lived in the funnel, the probe and the canonical layer, and they
|
|
6
|
+
* disagreed on the edges: one accepted `0x2`, one rejected `1e3`, and several
|
|
7
|
+
* accepted the empty string (`Number('')` is `0`). The rule here is the
|
|
8
|
+
* validator's decimal-literal grammar, so a formula is read the same way
|
|
9
|
+
* everywhere it is read.
|
|
10
|
+
*
|
|
11
|
+
* The walker descends into `op` arguments always. Every other arm is opted
|
|
12
|
+
* into by the caller through {@link LeafWalkArms}, because the callers it
|
|
13
|
+
* replaced did not agree on which arms they walked (the evaluator reads
|
|
14
|
+
* `transcendental` and `abs`; the simplifier reads an integral's measure and
|
|
15
|
+
* integrand but not its bounds), and the behaviour of each is kept by passing
|
|
16
|
+
* its own set.
|
|
17
|
+
*
|
|
18
|
+
* @module dimensional/ast-leaves
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* The decimal-literal grammar: an optional sign, digits with an optional
|
|
22
|
+
* fraction (or a bare fraction), and an optional exponent. `1e3` and `2.` are
|
|
23
|
+
* literals; `0x2`, `Infinity` and the empty string are not. This is the
|
|
24
|
+
* validator's rule for a literal exponent.
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export const DECIMAL_LITERAL = /^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/;
|
|
29
|
+
/** True when `name` is a decimal literal under {@link DECIMAL_LITERAL}. @internal */
|
|
30
|
+
export function isDecimalLiteral(name) {
|
|
31
|
+
return DECIMAL_LITERAL.test(name);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The number a decimal-literal symbol names, or `undefined` for any other
|
|
35
|
+
* node. The dimension stored on the symbol is not read: a caller that needs
|
|
36
|
+
* the literal to be dimensionless checks that itself.
|
|
37
|
+
*
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export function literalValue(node) {
|
|
41
|
+
if (node.kind !== 'symbol' || !isDecimalLiteral(node.name))
|
|
42
|
+
return undefined;
|
|
43
|
+
return Number(node.name);
|
|
44
|
+
}
|
|
45
|
+
/** The children a walk enters under `arms`, in source order. */
|
|
46
|
+
function walkedChildren(node, arms) {
|
|
47
|
+
switch (node.kind) {
|
|
48
|
+
case 'op':
|
|
49
|
+
return node.args;
|
|
50
|
+
case 'transcendental':
|
|
51
|
+
return arms.transcendental ? [node.arg] : [];
|
|
52
|
+
case 'abs':
|
|
53
|
+
return arms.abs ? [node.arg] : [];
|
|
54
|
+
case 'dirac-delta':
|
|
55
|
+
return arms.diracDelta ? [node.arg] : [];
|
|
56
|
+
case 'integral':
|
|
57
|
+
if (arms.integral === undefined)
|
|
58
|
+
return [];
|
|
59
|
+
if (arms.integral === 'over+integrand')
|
|
60
|
+
return [node.over, node.integrand];
|
|
61
|
+
return [
|
|
62
|
+
node.over,
|
|
63
|
+
node.integrand,
|
|
64
|
+
...(node.lower === undefined ? [] : [node.lower]),
|
|
65
|
+
...(node.upper === undefined ? [] : [node.upper]),
|
|
66
|
+
];
|
|
67
|
+
case 'derivative':
|
|
68
|
+
return arms.derivative ? [node.of, node.wrt] : [];
|
|
69
|
+
case 'variational-derivative':
|
|
70
|
+
return arms.variationalDerivative ? [node.functional, node.field, node.over] : [];
|
|
71
|
+
case 'tensor-product':
|
|
72
|
+
return arms.tensorProduct ? node.args : [];
|
|
73
|
+
default:
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Visit every scalar leaf of `node` reachable through `op` arguments and the
|
|
79
|
+
* arms in `arms`, in source order. A leaf is visited once per occurrence.
|
|
80
|
+
*
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
export function forEachScalarLeaf(node, visit, arms) {
|
|
84
|
+
if (node.kind === 'symbol') {
|
|
85
|
+
visit(node);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
for (const child of walkedChildren(node, arms))
|
|
89
|
+
forEachScalarLeaf(child, visit, arms);
|
|
90
|
+
}
|
|
91
|
+
/** Rebuild `node` with the walked children replaced, keeping the node when none changed. */
|
|
92
|
+
function rebuild(node, arms, children) {
|
|
93
|
+
switch (node.kind) {
|
|
94
|
+
case 'op':
|
|
95
|
+
return { ...node, args: [...children] };
|
|
96
|
+
case 'transcendental':
|
|
97
|
+
case 'abs':
|
|
98
|
+
case 'dirac-delta':
|
|
99
|
+
return { ...node, arg: children[0] };
|
|
100
|
+
case 'integral': {
|
|
101
|
+
if (arms.integral === 'over+integrand')
|
|
102
|
+
return { ...node, over: children[0], integrand: children[1] };
|
|
103
|
+
let i = 2;
|
|
104
|
+
const lower = node.lower === undefined ? undefined : children[i++];
|
|
105
|
+
const upper = node.upper === undefined ? undefined : children[i++];
|
|
106
|
+
return {
|
|
107
|
+
...node,
|
|
108
|
+
over: children[0],
|
|
109
|
+
integrand: children[1],
|
|
110
|
+
...(lower === undefined ? {} : { lower }),
|
|
111
|
+
...(upper === undefined ? {} : { upper }),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
case 'derivative':
|
|
115
|
+
return { ...node, of: children[0], wrt: children[1] };
|
|
116
|
+
case 'variational-derivative':
|
|
117
|
+
return { ...node, functional: children[0], field: children[1], over: children[2] };
|
|
118
|
+
case 'tensor-product':
|
|
119
|
+
return { ...node, args: [...children] };
|
|
120
|
+
default:
|
|
121
|
+
return node;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Replace each scalar leaf reachable under `arms` by `f(leaf)`. A subtree in
|
|
126
|
+
* which no leaf changed is returned by reference, so an arm the walk did not
|
|
127
|
+
* enter, and an unchanged tree, are the same objects the caller passed.
|
|
128
|
+
*
|
|
129
|
+
* @internal
|
|
130
|
+
*/
|
|
131
|
+
export function mapScalarLeaves(node, f, arms) {
|
|
132
|
+
if (node.kind === 'symbol')
|
|
133
|
+
return f(node);
|
|
134
|
+
const children = walkedChildren(node, arms);
|
|
135
|
+
if (children.length === 0)
|
|
136
|
+
return node;
|
|
137
|
+
let changed = false;
|
|
138
|
+
const mapped = children.map((child) => {
|
|
139
|
+
const next = mapScalarLeaves(child, f, arms);
|
|
140
|
+
if (next !== child)
|
|
141
|
+
changed = true;
|
|
142
|
+
return next;
|
|
143
|
+
});
|
|
144
|
+
return changed ? rebuild(node, arms, mapped) : node;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=ast-leaves.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-leaves.js","sourceRoot":"","sources":["../../src/dimensional/ast-leaves.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * One owner for the scalar-leaf walk of an `ExprNode` and the literal rule.\n *\n * Thirteen walks over the leaves and six spellings of \"is this name a number\"\n * once lived in the funnel, the probe and the canonical layer, and they\n * disagreed on the edges: one accepted `0x2`, one rejected `1e3`, and several\n * accepted the empty string (`Number('')` is `0`). The rule here is the\n * validator's decimal-literal grammar, so a formula is read the same way\n * everywhere it is read.\n *\n * The walker descends into `op` arguments always. Every other arm is opted\n * into by the caller through {@link LeafWalkArms}, because the callers it\n * replaced did not agree on which arms they walked (the evaluator reads\n * `transcendental` and `abs`; the simplifier reads an integral's measure and\n * integrand but not its bounds), and the behaviour of each is kept by passing\n * its own set.\n *\n * @module dimensional/ast-leaves\n */\n\nimport type { ExprNode } from './ast-types.js';\n\n/** A scalar leaf: a symbol with its dimension. @internal */\nexport type ScalarLeaf = Extract<ExprNode, { kind: 'symbol' }>;\n\n/**\n * The decimal-literal grammar: an optional sign, digits with an optional\n * fraction (or a bare fraction), and an optional exponent. `1e3` and `2.` are\n * literals; `0x2`, `Infinity` and the empty string are not. This is the\n * validator's rule for a literal exponent.\n *\n * @internal\n */\nexport const DECIMAL_LITERAL = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?$/;\n\n/** True when `name` is a decimal literal under {@link DECIMAL_LITERAL}. @internal */\nexport function isDecimalLiteral(name: string): boolean {\n return DECIMAL_LITERAL.test(name);\n}\n\n/**\n * The number a decimal-literal symbol names, or `undefined` for any other\n * node. The dimension stored on the symbol is not read: a caller that needs\n * the literal to be dimensionless checks that itself.\n *\n * @internal\n */\nexport function literalValue(node: ExprNode): number | undefined {\n if (node.kind !== 'symbol' || !isDecimalLiteral(node.name)) return undefined;\n return Number(node.name);\n}\n\n/**\n * Which non-`op` arms a walk descends into. `op` arguments are always walked.\n * An arm left out is not entered, and its leaves are not visited.\n *\n * @internal\n */\nexport interface LeafWalkArms {\n /** `exp`, `ln`, the trigonometric functions: their argument. */\n readonly transcendental?: boolean;\n /** `abs`: its argument. */\n readonly abs?: boolean;\n /** `dirac-delta`: its argument. */\n readonly diracDelta?: boolean;\n /** `integral`: the measure and the integrand, or those and both bounds. */\n readonly integral?: 'over+integrand' | 'all';\n /** `derivative`: `of` and `wrt`. */\n readonly derivative?: boolean;\n /** `variational-derivative`: the functional, the field and the measure. */\n readonly variationalDerivative?: boolean;\n /** `tensor-product`: its arguments. */\n readonly tensorProduct?: boolean;\n}\n\n/** The children a walk enters under `arms`, in source order. */\nfunction walkedChildren(node: ExprNode, arms: LeafWalkArms): readonly ExprNode[] {\n switch (node.kind) {\n case 'op':\n return node.args;\n case 'transcendental':\n return arms.transcendental ? [node.arg] : [];\n case 'abs':\n return arms.abs ? [node.arg] : [];\n case 'dirac-delta':\n return arms.diracDelta ? [node.arg] : [];\n case 'integral':\n if (arms.integral === undefined) return [];\n if (arms.integral === 'over+integrand') return [node.over, node.integrand];\n return [\n node.over,\n node.integrand,\n ...(node.lower === undefined ? [] : [node.lower]),\n ...(node.upper === undefined ? [] : [node.upper]),\n ];\n case 'derivative':\n return arms.derivative ? [node.of, node.wrt] : [];\n case 'variational-derivative':\n return arms.variationalDerivative ? [node.functional, node.field, node.over] : [];\n case 'tensor-product':\n return arms.tensorProduct ? node.args : [];\n default:\n return [];\n }\n}\n\n/**\n * Visit every scalar leaf of `node` reachable through `op` arguments and the\n * arms in `arms`, in source order. A leaf is visited once per occurrence.\n *\n * @internal\n */\nexport function forEachScalarLeaf(\n node: ExprNode,\n visit: (leaf: ScalarLeaf) => void,\n arms: LeafWalkArms,\n): void {\n if (node.kind === 'symbol') {\n visit(node);\n return;\n }\n for (const child of walkedChildren(node, arms)) forEachScalarLeaf(child, visit, arms);\n}\n\n/** Rebuild `node` with the walked children replaced, keeping the node when none changed. */\nfunction rebuild(node: ExprNode, arms: LeafWalkArms, children: readonly ExprNode[]): ExprNode {\n switch (node.kind) {\n case 'op':\n return { ...node, args: [...children] };\n case 'transcendental':\n case 'abs':\n case 'dirac-delta':\n return { ...node, arg: children[0]! };\n case 'integral': {\n if (arms.integral === 'over+integrand') return { ...node, over: children[0]!, integrand: children[1]! };\n let i = 2;\n const lower = node.lower === undefined ? undefined : children[i++];\n const upper = node.upper === undefined ? undefined : children[i++];\n return {\n ...node,\n over: children[0]!,\n integrand: children[1]!,\n ...(lower === undefined ? {} : { lower }),\n ...(upper === undefined ? {} : { upper }),\n };\n }\n case 'derivative':\n return { ...node, of: children[0]!, wrt: children[1]! };\n case 'variational-derivative':\n return { ...node, functional: children[0]!, field: children[1]!, over: children[2]! };\n case 'tensor-product':\n return { ...node, args: [...children] };\n default:\n return node;\n }\n}\n\n/**\n * Replace each scalar leaf reachable under `arms` by `f(leaf)`. A subtree in\n * which no leaf changed is returned by reference, so an arm the walk did not\n * enter, and an unchanged tree, are the same objects the caller passed.\n *\n * @internal\n */\nexport function mapScalarLeaves(\n node: ExprNode,\n f: (leaf: ScalarLeaf) => ExprNode,\n arms: LeafWalkArms,\n): ExprNode {\n if (node.kind === 'symbol') return f(node);\n const children = walkedChildren(node, arms);\n if (children.length === 0) return node;\n let changed = false;\n const mapped = children.map((child) => {\n const next = mapScalarLeaves(child, f, arms);\n if (next !== child) changed = true;\n return next;\n });\n return changed ? rebuild(node, arms, mapped) : node;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-types.js","sourceRoot":"","sources":["../../src/dimensional/ast-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
1
|
+
{"version":3,"file":"ast-types.js","sourceRoot":"","sources":["../../src/dimensional/ast-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG","sourcesContent":["/**\n * The dimensional AST type system — `ExprNode` and every node/index interface\n * it unions, in ONE leaf module.\n *\n * Previously `ExprNode` lived in `validator.ts` and pulled its member node types\n * from ~9 sibling modules (`tensor`, `metric-validators`, `connection-\n * validators`, `curvature`, …). Two of those (`tensor`, `curvature`) imported\n * `ExprNode` back, forming type-only cycles, and several node interfaces used\n * `of: unknown` casts to dodge importing `ExprNode`. Consolidating the *types*\n * here (this module imports only `types.ts` + the leaf `curvature-composite.ts`,\n * so it has no back-edges) breaks both cycles and lets the derivative nodes type\n * `of`/`wrt` as real `ExprNode`.\n *\n * Each origin module now re-exports its types from here (so existing importers\n * are unchanged) and keeps only its validation FUNCTIONS.\n *\n * @module dimensional/ast-types\n */\n\nimport type { Dimension } from './types.js';\nimport type { CurvatureCompositeNode } from './curvature-composite.js';\n\n// ── index types ─────────────────────────────────────────────────────────────\n\nexport type Variance = 'upper' | 'lower';\nexport type Role = 'coordinate' | 'field' | 'constant';\n\nexport interface TensorIndex {\n readonly label: string;\n readonly variance: Variance;\n}\n\n/** A strictly-lower tensor index. */\nexport interface CovariantIndex {\n readonly label: string;\n readonly variance: 'lower';\n}\n\n/** A strictly-upper tensor index. */\nexport interface UpperIndex {\n readonly label: string;\n readonly variance: 'upper';\n}\n\n// ── transcendental functions ────────────────────────────────────────────────\n\n/**\n * Elementwise transcendental functions usable in a `transcendental` node. All\n * take a DIMENSIONLESS argument and return a DIMENSIONLESS result. (`sqrt`/`cbrt`\n * are excluded — they produce fractional dimensions.)\n */\nexport type TranscendentalFn =\n | 'exp'\n | 'ln'\n | 'log2'\n | 'log10'\n | 'sin'\n | 'cos'\n | 'tan'\n | 'sinh'\n | 'cosh'\n | 'tanh';\n\n// ── tensor nodes ────────────────────────────────────────────────────────────\n\nexport interface TensorSymbolNode {\n readonly kind: 'tensor-symbol';\n readonly name: string;\n readonly indices: ReadonlyArray<TensorIndex>;\n readonly dim: Dimension;\n /** Semantic classification (default 'field'). Structural metadata only. */\n readonly role?: Role;\n /** v0.3.5 numerical pderiv strategy when this is a partial-derivative `of`\n * operand (default 'symbolic'). */\n readonly numericalForm?: 'symbolic' | 'numerical-fn' | 'grid';\n}\n\nexport interface TensorProductNode {\n readonly kind: 'tensor-product';\n readonly args: ReadonlyArray<ExprNode>;\n}\n\n// ── metric nodes ────────────────────────────────────────────────────────────\n\nexport interface MetricTensorNode {\n readonly kind: 'metric-tensor';\n readonly name: string;\n readonly indices: ReadonlyArray<TensorIndex>;\n readonly signature: string;\n readonly dim: Dimension;\n /** v0.4.0 numerical-lowering hint for ∂g (default 'computed'). */\n readonly derivativeStrategy?: 'computed' | 'zero' | 'supplied';\n}\n\nexport interface KroneckerDeltaNode {\n readonly kind: 'kronecker-delta';\n readonly indices: ReadonlyArray<TensorIndex>;\n readonly dim: Dimension;\n}\n\nexport interface TensorPartialDerivativeNode {\n readonly kind: 'tensor-partial-derivative';\n readonly of: ExprNode;\n readonly wrt: ExprNode;\n readonly wrtIndex: CovariantIndex;\n}\n\n// ── connection / curvature nodes ────────────────────────────────────────────\n\n/**\n * AST node for the covariant derivative ∇_μ of a tensor expression.\n *\n * @public\n */\nexport interface CovariantDerivativeNode {\n readonly kind: 'covariant-derivative';\n readonly of: ExprNode;\n readonly wrt: ExprNode;\n readonly wrtIndex: CovariantIndex;\n readonly gLower: MetricTensorNode;\n readonly gInverse: MetricTensorNode;\n}\n\nexport type RiemannTensorNode = CurvatureCompositeNode<'riemann-tensor', {\n readonly upperIndex: UpperIndex;\n readonly lowerIndices: readonly [CovariantIndex, CovariantIndex, CovariantIndex];\n readonly gLower: MetricTensorNode;\n readonly gInverse: MetricTensorNode;\n readonly xCoord: TensorSymbolNode;\n}>;\n\n/**\n * AST node for the Ricci tensor R_μν, built by `ricci`.\n *\n * @public\n */\nexport type RicciTensorNode = CurvatureCompositeNode<'ricci-tensor', {\n /** The Riemann tensor, contracted on its upper index and its second lower index: R_μν = R^λ_{μλν}. */\n readonly riemann: RiemannTensorNode;\n}>;\n\n/**\n * AST node for the Einstein tensor G_μν, built by `einstein`.\n *\n * @public\n */\nexport type EinsteinTensorNode = CurvatureCompositeNode<'einstein-tensor', {\n /** The Riemann tensor whose contraction yields the inner Ricci R_μν. */\n readonly riemann: RiemannTensorNode;\n /** Lower metric g_μν — supplies the `½ R g_μν` subtraction tensor. */\n readonly gLower: MetricTensorNode;\n /** Upper metric g^μν — supplies the scalar trace `R = g^μν R_μν`. */\n readonly gInverse: MetricTensorNode;\n}>;\n\n/**\n * AST node for the cyclic second-Bianchi-identity residual, built by `bianchiResidual`.\n *\n * @public\n */\nexport type BianchiResidualNode = CurvatureCompositeNode<'bianchi-residual', {\n /** The Riemann tensor whose cyclic-derivative identity is checked. */\n readonly riemann: RiemannTensorNode;\n}>;\n\nexport type WeylTensorNode = CurvatureCompositeNode<'weyl-tensor', {\n /** Metric g_{μν} (both-lower). Present for numerical lowering consumers. */\n readonly metric: MetricTensorNode;\n /** Contravariant (upper) index ρ. */\n readonly upperIndex: UpperIndex;\n /** Three covariant (lower) indices [σ, μ, ν]. */\n readonly lowerIndices: readonly [CovariantIndex, CovariantIndex, CovariantIndex];\n /** Dimensional signature of each component: [L⁻²], same as Riemann. */\n readonly componentDim: Dimension;\n}>;\n\n/**\n * AST node for the Kretschmann scalar K = R_{ρσμν} R^{ρσμν}.\n *\n * @public\n */\nexport type KretschmannScalarNode = CurvatureCompositeNode<'kretschmann-scalar', {\n /** Riemann tensor R^ρ_{σμν}. */\n readonly riemann: RiemannTensorNode;\n /** Metric (both-lower preferred). */\n readonly metric: MetricTensorNode;\n}>;\n\n// ── Killing / stress-energy / field-equation nodes ──────────────────────────\n\nexport interface KillingVectorNode {\n readonly kind: 'killing-vector';\n readonly vector: TensorSymbolNode;\n readonly metric: MetricTensorNode;\n}\n\nexport interface ConservedChargeNode {\n readonly kind: 'conserved-charge';\n /** The Killing vector ξ^μ (rank-1, upper variance). */\n readonly killing: KillingVectorNode;\n /** The covariant momentum p_μ (rank-1, lower variance), sharing the Killing\n * vector's index label so ξ^μ p_μ is well-formed. */\n readonly momentum: TensorSymbolNode;\n}\n\nexport interface StressEnergyTensorNode {\n readonly kind: 'stress-energy';\n readonly symbol: 'T';\n readonly indices: readonly [CovariantIndex, CovariantIndex];\n readonly symmetry: 'symmetric';\n readonly componentDim: Dimension;\n}\n\nexport interface CosmologicalConstantNode {\n readonly kind: 'cosmological-constant';\n readonly symbol: 'Λ';\n readonly dim: Dimension; // [L⁻²]\n readonly value?: number; // optional numeric value (e.g., 1.1056e-52 m⁻²)\n}\n\n/**\n * AST node for the Einstein field equation G_μν + Λ g_μν = (8πG/c⁴) T_μν.\n *\n * @public\n */\nexport interface EinsteinFieldEquationNode {\n readonly kind: 'einstein-equation';\n readonly lhs: EinsteinTensorNode;\n readonly cosmological: CosmologicalConstantNode | null;\n readonly metric: MetricTensorNode;\n readonly rhs: StressEnergyTensorNode;\n readonly coupling: 'einstein';\n}\n\n// ── the ExprNode union ──────────────────────────────────────────────────────\n\nexport type ExprNode =\n | { kind: 'symbol'; name: string; dim: Dimension }\n | { kind: 'op'; op: '+' | '-' | '*' | '/' | '^'; args: ExprNode[] }\n // ∫ integrand d(over); optional lower/upper bounds make it a DEFINITE integral.\n | { kind: 'integral'; over: ExprNode; integrand: ExprNode; lower?: ExprNode; upper?: ExprNode }\n | { kind: 'derivative'; of: ExprNode; wrt: ExprNode }\n // Dirac-δ correlator: ∫δ(x)dx=1 ⟹ [δ(x)]=[x]⁻¹.\n | { kind: 'dirac-delta'; arg: ExprNode }\n // Functional derivative δF/δφ \"over\" the measure dμ: [δF/δφ]=[F]/([φ]·[μ]).\n | { kind: 'variational-derivative'; functional: ExprNode; field: ExprNode; over: ExprNode }\n // Elementwise transcendental of a DIMENSIONLESS arg → DIMENSIONLESS result.\n | { kind: 'transcendental'; fn: TranscendentalFn; arg: ExprNode }\n // Absolute value |x| — dimension-PRESERVING (unlike the transcendentals).\n | { kind: 'abs'; arg: ExprNode }\n | TensorSymbolNode\n | TensorProductNode\n | MetricTensorNode\n | KroneckerDeltaNode\n | TensorPartialDerivativeNode\n | CovariantDerivativeNode\n | RiemannTensorNode\n | RicciTensorNode\n | EinsteinTensorNode\n | BianchiResidualNode\n | KillingVectorNode\n | ConservedChargeNode\n | StressEnergyTensorNode\n | CosmologicalConstantNode\n | EinsteinFieldEquationNode\n | WeylTensorNode\n | KretschmannScalarNode;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-check.js","sourceRoot":"","sources":["../../src/dimensional/bridge-check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM1C,SAAS,YAAY;IACnB,4FAA4F;IAC5F,MAAM,MAAM,GAAG,eAAe,CAAC,qBAAqB,CAAyB,CAAC;IAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAmC,YAAY,EAAE,CAAC;AAE3F;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,IAAc;IAEd,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,iBAAiB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,QAAQ,GAAG,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,CAAC,iBAAiB,CAAC;AAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"bridge-check.js","sourceRoot":"","sources":["../../src/dimensional/bridge-check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM1C,SAAS,YAAY;IACnB,4FAA4F;IAC5F,MAAM,MAAM,GAAG,eAAe,CAAC,qBAAqB,CAAyB,CAAC;IAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAmC,YAAY,EAAE,CAAC;AAE3F;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,IAAc;IAEd,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,iBAAiB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,QAAQ,GAAG,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,CAAC,iBAAiB,CAAC;AAC7B,CAAC","sourcesContent":["/**\n * Expected catalog dimensions, projected from the catalog record.\n * A mismatch between a parsed expression and that record returns null.\n *\n * @module dimensional/bridge-check\n */\n\nimport { checkedDataFile } from '../core/data-file.js';\nimport type { Dimension } from './types.js';\nimport { equals } from './algebra.js';\nimport type { ExprNode } from './validator.js';\nimport { validate } from './validator.js';\n\ninterface CatalogDimensionFile {\n readonly entries: readonly { readonly id: number; readonly dimension?: Dimension }[];\n}\n\nfunction loadExpected(): ReadonlyMap<number, Dimension> {\n // The same checked read as `bridges/catalog-load.ts`; this layer cannot import that module.\n const parsed = checkedDataFile('bridge-catalog.json') as CatalogDimensionFile;\n const map = new Map<number, Dimension>();\n for (const entry of parsed.entries) {\n if (entry.dimension !== undefined) map.set(entry.id, entry.dimension);\n }\n return map;\n}\n\n/** Catalog id → dimension recorded on that row. */\nexport const EXPECTED_DIMENSION_BY_BRIDGE: ReadonlyMap<number, Dimension> = loadExpected();\n\n/**\n * Infer the SI dimension of a bridge expression and cross-check it against\n * the catalog record when that record declares one.\n *\n * @returns The inferred dimension, or `null` when the expression is\n * dimensionally inconsistent or disagrees with the catalog record.\n */\nexport function inferDimensionForBridge(\n bridgeId: number,\n expr: ExprNode,\n): Dimension | null {\n const r = validate(expr);\n if (!r.ok || r.inferredDimension === null) return null;\n const expected = EXPECTED_DIMENSION_BY_BRIDGE.get(bridgeId);\n if (expected !== undefined && !equals(r.inferredDimension, expected)) {\n return null;\n }\n return r.inferredDimension;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buckingham.d.ts","sourceRoot":"","sources":["../../src/dimensional/buckingham.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"buckingham.d.ts","sourceRoot":"","sources":["../../src/dimensional/buckingham.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;kEACkE;AAClE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;CACzB;AAED;;6BAE6B;AAC7B,MAAM,WAAW,OAAO;IACtB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,yDAAyD;AACzD,MAAM,MAAM,iBAAiB,GACzB,2BAA2B,GAC3B,kBAAkB,GAClB,qBAAqB,CAAC;AAE1B,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,yDAAyD;IACzD,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACrC;AAED,yDAAyD;AACzD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;oDACgD;IAChD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,oEAAoE;IACpE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;cACc;AACd,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AA+ED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,SAAS,mBAAmB,EAAE,GACxC,gBAAgB,CAsClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,SAAS,mBAAmB,EAAE,GACxC,8BAA8B,CAmEhC"}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import { Fraction } from '@danielsimonjr/mathts-core';
|
|
28
28
|
import { rationalNullspace } from '@danielsimonjr/mathts-functions';
|
|
29
|
-
|
|
29
|
+
import { BASES } from './algebra.js';
|
|
30
30
|
/** Rationalization failed: a dimension exponent is not a small rational.
|
|
31
31
|
* @public */
|
|
32
32
|
export class RationalizationError extends Error {
|
|
@@ -35,39 +35,28 @@ export class RationalizationError extends Error {
|
|
|
35
35
|
this.name = 'RationalizationError';
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
[a, b] = [b, a % b];
|
|
43
|
-
}
|
|
44
|
-
return a || 1;
|
|
45
|
-
}
|
|
46
|
-
function frac(n, d) {
|
|
47
|
-
if (d === 0)
|
|
48
|
-
throw new RationalizationError('zero denominator');
|
|
49
|
-
if (d < 0) {
|
|
50
|
-
n = -n;
|
|
51
|
-
d = -d;
|
|
52
|
-
}
|
|
53
|
-
const g = gcd(n, d);
|
|
54
|
-
return { n: n / g, d: d / g };
|
|
55
|
-
}
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Exact rational arithmetic: MathTS core `Fraction` (bigint-backed, reduced by
|
|
40
|
+
// its constructor). Dimension exponents are small rationals.
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
56
42
|
const MAX_DEN = 720;
|
|
57
|
-
/**
|
|
58
|
-
*
|
|
43
|
+
/**
|
|
44
|
+
* Convert a (possibly rational) exponent to an exact {@link Fraction} by
|
|
45
|
+
* scanning small denominators; throws if none matches within tolerance. The
|
|
46
|
+
* scan, not `Fraction.fromNumber`'s continued fraction, is what refuses an
|
|
47
|
+
* irrational exponent instead of approximating it.
|
|
48
|
+
*/
|
|
59
49
|
function toFrac(x) {
|
|
60
50
|
if (Number.isInteger(x))
|
|
61
|
-
return
|
|
51
|
+
return new Fraction(x, 1);
|
|
62
52
|
for (let d = 2; d <= MAX_DEN; d++) {
|
|
63
53
|
const n = x * d;
|
|
64
54
|
if (Math.abs(n - Math.round(n)) < 1e-9 * Math.max(1, Math.abs(n))) {
|
|
65
|
-
return
|
|
55
|
+
return new Fraction(Math.round(n), d);
|
|
66
56
|
}
|
|
67
57
|
}
|
|
68
58
|
throw new RationalizationError(`dimension exponent ${x} is not a rational with denominator ≤ ${MAX_DEN}`);
|
|
69
59
|
}
|
|
70
|
-
const fZero = (a) => a.n === 0;
|
|
71
60
|
/**
|
|
72
61
|
* Exact null space of the dimension matrix. Exponents pass through as
|
|
73
62
|
* {@link Fraction} values after {@link toFrac}, so an irrational is still
|
|
@@ -76,8 +65,7 @@ const fZero = (a) => a.n === 0;
|
|
|
76
65
|
* MathTS integerizes each vector (content 1, first nonzero entry positive).
|
|
77
66
|
*/
|
|
78
67
|
function nullSpace(matrix, cols) {
|
|
79
|
-
const
|
|
80
|
-
const solved = rationalNullspace(entries, { columns: cols });
|
|
68
|
+
const solved = rationalNullspace(matrix, { columns: cols });
|
|
81
69
|
const basis = solved.basis.map((vec) => vec.map((entry) => {
|
|
82
70
|
if (entry.denominator !== 1n) {
|
|
83
71
|
throw new RationalizationError(`null-space entry ${entry.toString()} is not an integer`);
|
|
@@ -91,7 +79,7 @@ function buildMatrix(variables) {
|
|
|
91
79
|
const matrix = [];
|
|
92
80
|
for (const base of BASES) {
|
|
93
81
|
const row = variables.map((v) => toFrac(v.dim[base]));
|
|
94
|
-
if (row.some((f) => !
|
|
82
|
+
if (row.some((f) => !f.isZero())) {
|
|
95
83
|
spannedBases.push(base);
|
|
96
84
|
matrix.push(row);
|
|
97
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buckingham.js","sourceRoot":"","sources":["../../src/dimensional/buckingham.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"buckingham.js","sourceRoot":"","sources":["../../src/dimensional/buckingham.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAkErC;cACc;AACd,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,8EAA8E;AAC9E,+EAA+E;AAC/E,6DAA6D;AAC7D,8EAA8E;AAE9E,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB;;;;;GAKG;AACH,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,MAAM,IAAI,oBAAoB,CAC5B,sBAAsB,CAAC,yCAAyC,OAAO,EAAE,CAC1E,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,MAAoB,EAAE,IAAY;IACnD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACrC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAChB,IAAI,KAAK,CAAC,WAAW,KAAK,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,oBAAoB,CAC5B,oBAAoB,KAAK,CAAC,QAAQ,EAAE,oBAAoB,CACzD,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CACH,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,WAAW,CAAC,SAAyC;IAI5D,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,aAAa,CACpB,SAAiC,EACjC,KAAwB;IAExB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QACtB,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAyC;IAEzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,oBAAoB,CAAC,6CAA6C,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,oBAAoB,CAC5B,qDAAqD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAExD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAc,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC5C,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC;IAC9B,MAAM,OAAO,GACX,YAAY,KAAK,CAAC;QAChB,CAAC,CAAC,2BAA2B;QAC7B,CAAC,CAAC,YAAY,KAAK,CAAC;YAClB,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,qBAAqB,CAAC;IAE9B,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,YAAY;QAC5B,aAAa,EAAE,CAAC;QAChB,IAAI;QACJ,YAAY;QACZ,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA2B,EAC3B,SAAyC;IAEzC,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEpD,MAAM,WAAW,GAAG,YAAY,CAC9B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAC5C,CAAC;IACF,uEAAuE;IACvE,mEAAmE;IACnE,8BAA8B;IAC9B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,SAAS,EAAE,cAAc;YACzB,UAAU,EAAE,KAAK;YACjB,oBAAoB,EAAE,KAAK;YAC3B,MAAM,EACJ,kDAAkD;gBAClD,IAAI,WAAW,CAAC,YAAY,6CAA6C;gBACzE,wCAAwC;SAC3C,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,SAAS,EAAE,cAAc;YACzB,UAAU,EAAE,KAAK;YACjB,oBAAoB,EAAE,IAAI,CAAC,YAAY,KAAK,CAAC;YAC7C,MAAM,EACJ,IAAI,CAAC,YAAY,KAAK,CAAC;gBACrB,CAAC,CAAC,6DAA6D;oBAC7D,yEAAyE;gBAC3E,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,8CAA8C;oBAClE,wEAAwE;SAC/E,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,SAAS,EAAE,cAAc;YACzB,UAAU,EAAE,KAAK;YACjB,oBAAoB,EAAE,KAAK;YAC3B,MAAM,EACJ,2DAA2D;gBAC3D,gEAAgE;SACnE,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACnD,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,IAAI;QACnB,SAAS,EAAE,cAAc;QACzB,UAAU,EAAE,IAAI;QAChB,QAAQ;QACR,yBAAyB,EAAE,IAAI;QAC/B,oBAAoB,EAAE,KAAK;QAC3B,MAAM,EACJ,4EAA4E;KAC/E,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Buckingham-π enumerator (build target 1 of\n * docs/planning/Bridge-Inference-Epistemics-Note.md — the principled\n * primitive for the classifier's EXACTLY-DETERMINED case).\n *\n * Given a set of dimensional variables presumed to obey one\n * dimensionally-homogeneous relation, the Buckingham-π theorem says that\n * relation re-expresses as F(π₁,…,π_{n−r}) = 0, where each πᵢ is a\n * dimensionless power-product of the variables and there are exactly\n * n − r of them (n = variables, r = rank of the dimension matrix). The\n * π-groups are a basis of the NULL SPACE of the dimension matrix.\n *\n * THE HONEST BOUNDARY (enforced by the result types — there is no value\n * or constant field anywhere): this returns the FORM only. It yields the\n * π-groups and, for a target, the monomial that determines it UP TO A\n * DIMENSIONLESS CONSTANT (the 2π, the ½, α). It does NOT and cannot\n * supply that constant, nor the function F. That boundary is exactly what\n * separates dimensional analysis from numerology — see the epistemics\n * note.\n *\n * Computation is EXACT (rational arithmetic), not floating Gaussian\n * elimination: physics dimension exponents are small rationals, and the\n * null-space basis must be exact to be trustworthy.\n *\n * @module dimensional/buckingham\n */\n\nimport { Fraction } from '@danielsimonjr/mathts-core';\nimport { rationalNullspace } from '@danielsimonjr/mathts-functions';\nimport type { Dimension } from './types.js';\nimport { BASES } from './algebra.js';\n\n/** A named physical quantity with a dimension — the enumerator's input.\n * Structurally satisfied by a composition `Quantity`. @public */\nexport interface DimensionalVariable {\n readonly name: string;\n readonly dim: Dimension;\n}\n\n/** A dimensionless power-product of the input variables (integer\n * exponents; the conventional form). No value — π-groups carry FORM,\n * not magnitude. @public */\nexport interface PiGroup {\n /** Integer exponent of each variable in this dimensionless product. */\n readonly exponents: Readonly<Record<string, number>>;\n /** Display form, e.g. `period^2 · gravity · length^-1`. */\n readonly formula: string;\n}\n\n/** The dimensional closure of a variable set. @public */\nexport type BuckinghamVerdict =\n | 'dimensionally-independent' // 0 π-groups: no dimensionless product exists\n | 'single-invariant' // 1 π-group: one dimensionless invariant\n | 'multiple-invariants'; // ≥2 π-groups: a family F(π₁,…)\n\n/** Result of {@link buckinghamPi}. @public */\nexport interface BuckinghamResult {\n readonly variables: readonly string[];\n /** Base SI dimensions actually spanned by the inputs. */\n readonly baseDimensions: readonly string[];\n /** n — the number of variables. */\n readonly variableCount: number;\n /** r — the rank of the dimension matrix. */\n readonly rank: number;\n /** n − r — the number of independent dimensionless groups. */\n readonly piGroupCount: number;\n readonly piGroups: readonly PiGroup[];\n readonly verdict: BuckinghamVerdict;\n}\n\n/** Result of {@link dimensionallyDetermines}. @public */\nexport interface DimensionalDeterminationResult {\n readonly target: string;\n readonly governing: readonly string[];\n /** True iff the target is fixed by the governing variables UP TO A\n * DIMENSIONLESS CONSTANT (unique monomial). */\n readonly determined: boolean;\n /**\n * When determined: target = const · Π(governingⱼ ^ monomial[j]). The\n * exponents may be rational (e.g. 0.5 for a √ law). Always read with\n * `upToDimensionlessConstant` — the leading constant is NOT supplied.\n */\n readonly monomial?: Readonly<Record<string, number>>;\n /** Always true when `monomial` is present — a standing reminder. */\n readonly upToDimensionlessConstant?: true;\n /**\n * True only when the target's dimension is not in the span of the governing\n * variables, so a monomial needs dimensionful constants the inputs do not\n * name. False when the governing variables are dimensionally dependent or\n * leave more than one π-group: that failure is not a missing constant.\n */\n readonly outsideGoverningSpan: boolean;\n /** Plain-language reason for the verdict. */\n readonly reason: string;\n}\n\n/** Rationalization failed: a dimension exponent is not a small rational.\n * @public */\nexport class RationalizationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'RationalizationError';\n }\n}\n\n// ---------------------------------------------------------------------------\n// Exact rational arithmetic: MathTS core `Fraction` (bigint-backed, reduced by\n// its constructor). Dimension exponents are small rationals.\n// ---------------------------------------------------------------------------\n\nconst MAX_DEN = 720;\n\n/**\n * Convert a (possibly rational) exponent to an exact {@link Fraction} by\n * scanning small denominators; throws if none matches within tolerance. The\n * scan, not `Fraction.fromNumber`'s continued fraction, is what refuses an\n * irrational exponent instead of approximating it.\n */\nfunction toFrac(x: number): Fraction {\n if (Number.isInteger(x)) return new Fraction(x, 1);\n for (let d = 2; d <= MAX_DEN; d++) {\n const n = x * d;\n if (Math.abs(n - Math.round(n)) < 1e-9 * Math.max(1, Math.abs(n))) {\n return new Fraction(Math.round(n), d);\n }\n }\n throw new RationalizationError(\n `dimension exponent ${x} is not a rational with denominator ≤ ${MAX_DEN}`,\n );\n}\n\n/**\n * Exact null space of the dimension matrix. Exponents pass through as\n * {@link Fraction} values after {@link toFrac}, so an irrational is still\n * {@link RationalizationError} and is not accepted by a continued fraction.\n * A matrix with no rows is `0×n`: `{ columns: n }` is the standard basis.\n * MathTS integerizes each vector (content 1, first nonzero entry positive).\n */\nfunction nullSpace(matrix: Fraction[][], cols: number): { basis: number[][]; rank: number } {\n const solved = rationalNullspace(matrix, { columns: cols });\n const basis = solved.basis.map((vec) =>\n vec.map((entry) => {\n if (entry.denominator !== 1n) {\n throw new RationalizationError(\n `null-space entry ${entry.toString()} is not an integer`,\n );\n }\n return Number(entry.numerator);\n }),\n );\n return { basis, rank: solved.rank };\n}\n\nfunction buildMatrix(variables: readonly DimensionalVariable[]): {\n matrix: Fraction[][];\n spannedBases: string[];\n} {\n const spannedBases: string[] = [];\n const matrix: Fraction[][] = [];\n for (const base of BASES) {\n const row = variables.map((v) => toFrac(v.dim[base]));\n if (row.some((f) => !f.isZero())) {\n spannedBases.push(base);\n matrix.push(row);\n }\n }\n return { matrix, spannedBases };\n}\n\nfunction formatPiGroup(\n exponents: Record<string, number>,\n order: readonly string[],\n): string {\n const parts: string[] = [];\n for (const name of order) {\n const e = exponents[name];\n if (e === 0) continue;\n parts.push(e === 1 ? name : `${name}^${e}`);\n }\n return parts.join(' · ') || '1';\n}\n\n/**\n * Enumerate the Buckingham-π groups of a dimensional variable set. Returns\n * the rank, the count n − r, and a null-space basis of dimensionless\n * groups. FORM only — no constants (see module docs).\n *\n * @public\n */\nexport function buckinghamPi(\n variables: readonly DimensionalVariable[],\n): BuckinghamResult {\n if (variables.length === 0) {\n throw new RationalizationError('buckinghamPi requires at least one variable');\n }\n const names = variables.map((v) => v.name);\n if (new Set(names).size !== names.length) {\n throw new RationalizationError(\n `buckinghamPi requires unique variable names; got [${names.join(', ')}]`,\n );\n }\n\n const n = variables.length;\n const { matrix, spannedBases } = buildMatrix(variables);\n\n const { basis, rank } = nullSpace(matrix, n);\n const piGroups: PiGroup[] = basis.map((vec) => {\n const exponents: Record<string, number> = {};\n for (let j = 0; j < n; j++) exponents[names[j]] = vec[j];\n return { exponents, formula: formatPiGroup(exponents, names) };\n });\n\n const piGroupCount = n - rank;\n const verdict: BuckinghamVerdict =\n piGroupCount === 0\n ? 'dimensionally-independent'\n : piGroupCount === 1\n ? 'single-invariant'\n : 'multiple-invariants';\n\n return {\n variables: names,\n baseDimensions: spannedBases,\n variableCount: n,\n rank,\n piGroupCount,\n piGroups,\n verdict,\n };\n}\n\n/**\n * Does the governing set fix the target UP TO A DIMENSIONLESS CONSTANT?\n *\n * True iff the governing variables are dimensionally independent and the\n * target's dimension lies in their span — equivalently, the full set has\n * exactly one π-group and the governing set has none. When determined,\n * returns the (possibly rational) monomial exponents such that\n * target = const · Π(governingⱼ ^ monomial[j]). The constant is NOT\n * supplied — dimensional analysis cannot.\n *\n * @public\n */\nexport function dimensionallyDetermines(\n target: DimensionalVariable,\n governing: readonly DimensionalVariable[],\n): DimensionalDeterminationResult {\n const governingNames = governing.map((v) => v.name);\n\n const governingPi = buckinghamPi(\n governing.length > 0 ? governing : [target],\n );\n // A redundancy among the governing variables means the monomial is not\n // unique (any dimensionless governing combo can be folded into the\n // constant) → not determined.\n if (governing.length > 0 && governingPi.piGroupCount > 0) {\n return {\n target: target.name,\n governing: governingNames,\n determined: false,\n outsideGoverningSpan: false,\n reason:\n 'governing variables are dimensionally dependent ' +\n `(${governingPi.piGroupCount} dimensionless combination(s) among them); ` +\n 'the determining monomial is not unique',\n };\n }\n\n const full = buckinghamPi([target, ...governing]);\n if (full.piGroupCount !== 1) {\n return {\n target: target.name,\n governing: governingNames,\n determined: false,\n outsideGoverningSpan: full.piGroupCount === 0,\n reason:\n full.piGroupCount === 0\n ? \"the target's dimension is not in the span of the governing \" +\n 'variables — no dimensionless group exists, so no monomial determines it'\n : `${full.piGroupCount} independent π-groups — the target is fixed ` +\n 'only as a function of several dimensionless ratios (under-constrained)',\n };\n }\n\n // The single π-group involves the target; solve it for the target.\n const group = full.piGroups[0].exponents;\n const targetExp = group[target.name];\n if (!targetExp) {\n return {\n target: target.name,\n governing: governingNames,\n determined: false,\n outsideGoverningSpan: false,\n reason:\n 'the sole dimensionless group does not involve the target ' +\n '(the target is dimensionally redundant with the governing set)',\n };\n }\n const monomial: Record<string, number> = {};\n for (const name of governingNames) {\n monomial[name] = -(group[name] ?? 0) / targetExp;\n }\n\n return {\n target: target.name,\n governing: governingNames,\n determined: true,\n monomial,\n upToDimensionlessConstant: true,\n outsideGoverningSpan: false,\n reason:\n 'unique dimensionless group fixes the target up to a dimensionless constant',\n };\n}\n"]}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* @module dimensional/connection-validators
|
|
12
12
|
*/
|
|
13
13
|
import type { Dimension } from './types.js';
|
|
14
|
+
import type { ExprNode } from './ast-types.js';
|
|
14
15
|
import type { Role, CovariantDerivativeNode, RiemannTensorNode } from './ast-types.js';
|
|
15
16
|
import type { PartialDerivativeChildResult } from './metric-validators.js';
|
|
16
17
|
export type { UpperIndex, CovariantDerivativeNode, RiemannTensorNode } from './ast-types.js';
|
|
@@ -37,7 +38,7 @@ interface CovariantDerivativeValidationResult {
|
|
|
37
38
|
* output freeIndices is just `of.freeIndices ∪ {wrtIndex.label: lower}`
|
|
38
39
|
* (same structural rule as tensor-partial-derivative).
|
|
39
40
|
*/
|
|
40
|
-
export declare function validateCovariantDerivative(node: CovariantDerivativeNode, validateChild: (child:
|
|
41
|
+
export declare function validateCovariantDerivative(node: CovariantDerivativeNode, validateChild: (child: ExprNode) => PartialDerivativeChildResult): CovariantDerivativeValidationResult;
|
|
41
42
|
/**
|
|
42
43
|
* v0.5.0 (Task 1c-i): Riemann curvature tensor AST node R^ρ_{σμν}.
|
|
43
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-validators.d.ts","sourceRoot":"","sources":["../../src/dimensional/connection-validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EACV,IAAI,EAKJ,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAU3E,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG7F,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,uBAAuB,EAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"connection-validators.d.ts","sourceRoot":"","sources":["../../src/dimensional/connection-validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACV,IAAI,EAKJ,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAU3E,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG7F,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,uBAAuB,EAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,4BAA4B,GAC/D,mCAAmC,CAqErC;AAMD;;;;;;;;;;;;;;;GAeG;AAEH,UAAU,6BAA6B;IACrC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,GACtB,6BAA6B,CAyE/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-validators.js","sourceRoot":"","sources":["../../src/dimensional/connection-validators.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection-validators.js","sourceRoot":"","sources":["../../src/dimensional/connection-validators.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Per-kind validation for v0.4.0 connection-layer AST nodes.\n *\n * Mirrors the pattern of `metric-validators.ts`: each validator is a pure\n * function returning a local `{dim, freeIndices, role?}` carrier that\n * validator.ts merges into its InferContext accumulator.\n *\n * Per v0.4.0-Design.md §4 + §7 (docs/specification/Part-IX-Connection-Layer.md\n * — pending).\n *\n * @module dimensional/connection-validators\n */\n\nimport type { Dimension } from './types.js';\nimport type { ExprNode } from './ast-types.js';\nimport type {\n Role,\n TensorSymbolNode,\n MetricTensorNode,\n CovariantIndex,\n UpperIndex,\n CovariantDerivativeNode,\n RiemannTensorNode,\n} from './ast-types.js';\nimport { divide } from './algebra.js';\nimport type { PartialDerivativeChildResult } from './metric-validators.js';\nimport {\n PartialDerivativeIndexVarianceError,\n MetricSignatureError,\n DuplicateCoordinateWarning,\n IndexLabelCollisionError,\n} from './errors.js';\n\n// Node/index types now live in the leaf `ast-types.ts`; re-exported so existing\n// importers of `… from './connection-validators.js'` are unchanged.\nexport type { UpperIndex, CovariantDerivativeNode, RiemannTensorNode } from './ast-types.js';\n\n// v0.6.1: dropped export — internal-only validation-result shape.\ninterface CovariantDerivativeValidationResult {\n readonly dim: Dimension;\n readonly freeIndices: Map<string, { upper: number; lower: number }>;\n readonly role?: Role;\n}\n\n/**\n * Validate a covariant-derivative node. Pure-function module-cycle-free\n * pattern (matches validatePartialDerivative). Recursion via the\n * `validateChild` callback supplied by the caller (validator.ts's\n * `infer()` dispatch).\n *\n * Throws:\n * - PartialDerivativeIndexVarianceError if wrtIndex.variance !== 'lower'\n * - MetricSignatureError if gLower is not both-lower or gInverse is not both-upper\n *\n * Note: the gLower / gInverse free indices are CONSUMED INTERNALLY by the\n * Christoffel formula's contractions and do NOT propagate upward. The\n * output freeIndices is just `of.freeIndices ∪ {wrtIndex.label: lower}`\n * (same structural rule as tensor-partial-derivative).\n */\nexport function validateCovariantDerivative(\n node: CovariantDerivativeNode,\n validateChild: (child: ExprNode) => PartialDerivativeChildResult,\n): CovariantDerivativeValidationResult {\n if (node.wrtIndex.variance !== 'lower') {\n throw new PartialDerivativeIndexVarianceError(node.wrtIndex.label);\n }\n if (\n node.gLower.indices[0].variance !== 'lower' ||\n node.gLower.indices[1].variance !== 'lower'\n ) {\n throw new MetricSignatureError(\n node.gLower.name,\n `covariant-derivative requires gLower to be both-lower (got ` +\n `[${node.gLower.indices[0].variance}, ${node.gLower.indices[1].variance}])`,\n );\n }\n if (\n node.gInverse.indices[0].variance !== 'upper' ||\n node.gInverse.indices[1].variance !== 'upper'\n ) {\n throw new MetricSignatureError(\n node.gInverse.name,\n `covariant-derivative requires gInverse to be both-upper (got ` +\n `[${node.gInverse.indices[0].variance}, ${node.gInverse.indices[1].variance}])`,\n );\n }\n\n const ofResult = validateChild(node.of);\n const wrtResult = validateChild(node.wrt);\n\n // gLower and gInverse are NOT validated via validateChild — their dims are\n // structurally fixed (known from the signature checks above at lines 71-88),\n // and any malformed metric would have already thrown there. Their free\n // indices are deliberately discarded: the Christoffel contractions inside\n // ∇_μ consume them internally.\n\n // Per §VIII.4 (pderiv-label-collision-rejected analog):\n // wrtIndex.label must not collide with of.freeIndices.\n //\n // I1 HYBRID DECISION: throw by default (soundness > friendliness);\n // env var UPT_ALLOW_COORD_SHADOW=1 downgrades to process.emitWarning.\n // Task 13 covers BOTH paths (default throws; env=1 warns).\n if (ofResult.freeIndices.has(node.wrtIndex.label)) {\n const conflict = node.wrtIndex.label;\n if (typeof process !== 'undefined' && process.env?.UPT_ALLOW_COORD_SHADOW === '1') {\n process.emitWarning(new DuplicateCoordinateWarning(conflict, conflict));\n } else {\n throw new MetricSignatureError(\n `covariant-derivative`,\n `wrt='${conflict}' shadows an existing free index '${conflict}'. ` +\n `Rename the operand's free index or set UPT_ALLOW_COORD_SHADOW=1 to ` +\n `downgrade to a warning.`,\n );\n }\n }\n\n // Output freeIndices = of.freeIndices ∪ {wrtIndex.label: lower}.\n const freeIndices = new Map<string, { upper: number; lower: number }>();\n for (const [label, counts] of ofResult.freeIndices) freeIndices.set(label, counts);\n freeIndices.set(node.wrtIndex.label, { upper: 0, lower: 1 });\n\n // Output dim = divide(of.dim, wrt.dim) — same as pderiv.\n const dim = divide(ofResult.dim, wrtResult.dim);\n\n // Role passthrough: propagate of.role only when the child has one; omit\n // otherwise. Mirrors the `role?: Role` optional declaration on\n // CovariantDerivativeValidationResult — don't force a 'field' default when\n // the child has no role (e.g. a plain scalar operand).\n return ofResult.role !== undefined\n ? { dim, freeIndices, role: ofResult.role }\n : { dim, freeIndices };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.5.0 Task 5: RiemannTensorNode\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * v0.5.0 (Task 1c-i): Riemann curvature tensor AST node R^ρ_{σμν}.\n *\n * Index convention per Carroll Ch. 3 §3.4 (Adam+Eve F4/S3):\n * R^ρ_σμν = ∂_μ Γ^ρ_σν − ∂_ν Γ^ρ_σμ + Γ^ρ_λμ Γ^λ_σν − Γ^ρ_λν Γ^λ_σμ\n * (σ in SECOND lower slot of each Γ.)\n *\n * Dimension F8/I3: Riemann is 1/L² (inverse length squared), NOT\n * dimensionless. Carroll Ch. 3 §3.4: R^ρ_σμν has units of (∂Γ) where\n * Γ ~ 1/L and ∂ ~ 1/L → R ~ 1/L².\n *\n * H1 (v0.4.0 pattern): gLower, gInverse, xCoord sub-nodes are present for\n * downstream consumers (numerical lowering at Task 6), but their free\n * indices are NOT propagated — the Riemann formula's contractions consume\n * them internally. Same rule as CovariantDerivativeNode.\n */\n// v0.6.1: dropped export — internal-only validation-result shape.\ninterface RiemannTensorValidationResult {\n readonly dim: Dimension;\n readonly freeIndices: Map<string, { upper: number; lower: number }>;\n}\n\n/**\n * Validate a riemann-tensor node.\n *\n * Throws:\n * - PartialDerivativeIndexVarianceError if upperIndex.variance !== 'upper'\n * or any lowerIndices[i].variance !== 'lower'\n * - MetricSignatureError if gLower / gInverse signature is wrong (reuses\n * CovariantDerivativeNode's structural checks)\n * - IndexLabelCollisionError if the 4 free-index labels {ρ, σ, μ, ν} are\n * not pairwise distinct (M9: disjointness only on the riemann node's\n * own free labels; raise/lower aliasing in surrounding algebra remains\n * legal — we do NOT compare against gLower/gInverse/xCoord labels).\n *\n * H1 (v0.4.0 pattern): gLower/gInverse/xCoord are NOT validated via the\n * validateChild callback, so their free indices do not propagate. They are\n * signature-checked here for early structural error reporting; their\n * numerical contents are consumed by Task 6's lowering helper.\n */\nexport function validateRiemannTensor(\n node: RiemannTensorNode,\n): RiemannTensorValidationResult {\n if (node.upperIndex.variance !== 'upper') {\n throw new PartialDerivativeIndexVarianceError(\n `riemann-tensor: upperIndex '${node.upperIndex.label}' must be 'upper', ` +\n `got '${(node.upperIndex as { variance: string }).variance}'`,\n );\n }\n for (let i = 0; i < 3; i++) {\n const idx = node.lowerIndices[i] as { label: string; variance: string };\n if (idx.variance !== 'lower') {\n throw new PartialDerivativeIndexVarianceError(\n `riemann-tensor: lowerIndices[${i}] '${idx.label}' must be 'lower', ` +\n `got '${idx.variance}'`,\n );\n }\n }\n if (\n node.gLower.indices[0].variance !== 'lower' ||\n node.gLower.indices[1].variance !== 'lower'\n ) {\n throw new MetricSignatureError(\n node.gLower.name,\n `riemann-tensor requires gLower to be both-lower (got ` +\n `[${node.gLower.indices[0].variance}, ${node.gLower.indices[1].variance}])`,\n );\n }\n if (\n node.gInverse.indices[0].variance !== 'upper' ||\n node.gInverse.indices[1].variance !== 'upper'\n ) {\n throw new MetricSignatureError(\n node.gInverse.name,\n `riemann-tensor requires gInverse to be both-upper (got ` +\n `[${node.gInverse.indices[0].variance}, ${node.gInverse.indices[1].variance}])`,\n );\n }\n\n // M9: disjointness on the riemann-tensor's own 4 free labels only.\n // Repeated labels across {ρ, σ, μ, ν} would imply an implicit contraction\n // (e.g. R^μ_μνλ = R_νλ), which is the Ricci-tensor node's job — not the\n // bare Riemann node's. We deliberately do NOT compare against gLower /\n // gInverse / xCoord labels: those are H1-suppressed dummies, and legal\n // post-raise/lower algebra may reuse those labels (see plan §M9).\n const labels = [\n node.upperIndex.label,\n node.lowerIndices[0].label,\n node.lowerIndices[1].label,\n node.lowerIndices[2].label,\n ];\n const seen = new Set<string>();\n for (const label of labels) {\n if (seen.has(label)) {\n throw new IndexLabelCollisionError(label, 2, ['riemann-tensor']);\n }\n seen.add(label);\n }\n\n const freeIndices = new Map<string, { upper: number; lower: number }>();\n freeIndices.set(node.upperIndex.label, { upper: 1, lower: 0 });\n for (const idx of node.lowerIndices) {\n freeIndices.set(idx.label, { upper: 0, lower: 1 });\n }\n\n // F8/I3: Riemann carries inverse-length-squared. Hard-coded — same shape\n // as the dim is structurally fixed for every Riemann tensor regardless of\n // metric dim. (The metric is treated as dimensionless per our convention.)\n const dim: Dimension = { L: -2, M: 0, T: 0, I: 0, Theta: 0, N: 0, J: 0 };\n\n // Role intentionally omitted — Riemann is a derived curvature object,\n // not a primary field; downstream tensor-product / equation consumers\n // don't need a role tag here. Mirrors CovariantDerivativeNode's\n // role-on-passthrough-only pattern.\n return { dim, freeIndices };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/dimensional/connection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/dimensional/connection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * v0.4.0 connection-layer helpers (composite-formula builders that produce\n * trees of v0.3.0 AST nodes). The substantive new operator (∇_μ) is a\n * dedicated ExprNode kind defined in connection-validators.ts; this module\n * holds the Christoffel formula builder (a composite, like raise/lower).\n *\n * Per docs/specification/Part-IX-Connection-Layer.md (Task 18) and\n * v0.4.0-Design.md §5.\n *\n * @module dimensional/connection\n */\n\nimport { DIMENSIONLESS } from './types.js';\nimport { equals, format } from './algebra.js';\nimport { contract, tsym } from './tensor.js';\nimport type { TensorSymbolNode } from './tensor.js';\nimport { metric, pderiv } from './metric.js';\nimport type { MetricTensorNode } from './metric-validators.js';\nimport type { ExprNode } from './validator.js';\nimport { freshLabel } from './fresh-label.js';\n\n/**\n * Christoffel symbol Γ^λ_μν = (1/2) g^λρ (∂_μ g_ρν + ∂_ν g_ρμ − ∂_ρ g_μν).\n *\n * Builds a composite tree of v0.3.0 nodes. The negation is encoded as binary\n * subtraction at the outer level: (∂_μ g_ρν + ∂_ν g_ρμ) − ∂_ρ g_μν.\n * Unary minus is NOT supported in v0.4.0 (validator special-cases '-' as\n * binary-only).\n *\n * The fresh dummy label ρ is generated via the deterministic freshLabel scheme\n * (Part-VIII §VIII.5 TENSOR-RULE raise-lower-fresh-label-deterministic):\n * tries 'ρ' first; falls back to 'ρ_1', 'ρ_2', … until non-colliding.\n *\n * Per v0.4.0-Design.md §5; Levi-Civita connection only.\n *\n * @param gLower Covariant metric g_ab (both indices lower).\n * @param gInverse Contravariant inverse metric g^ab (both indices upper).\n * @param upper Free upper index label λ.\n * @param lowerA First free lower index label μ.\n * @param lowerB Second free lower index label ν.\n * @param xCoord Coordinate tensor x^α — used as the wrt argument for pderiv.\n *\n * @public\n */\nexport function christoffel(\n gLower: MetricTensorNode,\n gInverse: MetricTensorNode,\n upper: string, // λ\n lowerA: string, // μ\n lowerB: string, // ν\n xCoord: TensorSymbolNode,\n): ExprNode {\n // Geometrized-convention precondition: this builder's Γ ~ 1/LENGTH dimension\n // and the numerical lowering both assume a DIMENSIONLESS metric. A dimensionful\n // metric would silently produce a wrong-dimensioned connection — assert rather\n // than let it through.\n if (!equals(gLower.dim, DIMENSIONLESS) || !equals(gInverse.dim, DIMENSIONLESS)) {\n throw new TypeError(\n `christoffel: requires a geometrized (dimensionless) metric — got ` +\n `gLower.dim=${format(gLower.dim)}, gInverse.dim=${format(gInverse.dim)}.`,\n );\n }\n\n // Collect labels in use to generate a fresh dummy.\n const taken = new Set<string>([upper, lowerA, lowerB]);\n for (const idx of gLower.indices) taken.add(idx.label);\n for (const idx of gInverse.indices) taken.add(idx.label);\n // Finding #2 fix: include xCoord's own index labels so the fresh dummy\n // cannot alias a coordinate-tensor index (e.g. xCoord with label 'ρ').\n for (const idx of xCoord.indices) taken.add(idx.label);\n const rho = freshLabel('ρ', taken);\n\n // Renamed inverse metric so its indices match: g^{λ rho}.\n const gInverseRenamed: MetricTensorNode = metric(\n gInverse.name,\n [\n { label: upper, variance: 'upper' },\n { label: rho, variance: 'upper' },\n ],\n gInverse.dim,\n gInverse.signature,\n gInverse.derivativeStrategy,\n );\n\n // The three lowered metrics: g_{ρ ν}, g_{ρ μ}, g_{μ ν}.\n const gRho_nu: MetricTensorNode = metric(gLower.name,\n [{ label: rho, variance: 'lower' }, { label: lowerB, variance: 'lower' }],\n gLower.dim, gLower.signature, gLower.derivativeStrategy);\n const gRho_mu: MetricTensorNode = metric(gLower.name,\n [{ label: rho, variance: 'lower' }, { label: lowerA, variance: 'lower' }],\n gLower.dim, gLower.signature, gLower.derivativeStrategy);\n const gMu_nu: MetricTensorNode = metric(gLower.name,\n [{ label: lowerA, variance: 'lower' }, { label: lowerB, variance: 'lower' }],\n gLower.dim, gLower.signature, gLower.derivativeStrategy);\n\n // The three pderiv terms: ∂_μ g_{ρν}, ∂_ν g_{ρμ}, ∂_ρ g_{μν}.\n const dmu_gRhoNu = pderiv(gRho_nu, xCoord, { label: lowerA, variance: 'lower' });\n const dnu_gRhoMu = pderiv(gRho_mu, xCoord, { label: lowerB, variance: 'lower' });\n const drho_gMuNu = pderiv(gMu_nu, xCoord, { label: rho, variance: 'lower' });\n\n // Sum: (∂_μ g_{ρν} + ∂_ν g_{ρμ}) − ∂_ρ g_{μν}.\n // Binary subtraction — unary minus is NOT supported in v0.4.0.\n const innerSum: ExprNode = {\n kind: 'op', op: '+',\n args: [dmu_gRhoNu, dnu_gRhoMu],\n };\n const sumExpr: ExprNode = {\n kind: 'op', op: '-',\n args: [innerSum, drho_gMuNu], // binary subtraction\n };\n\n // Half-factor: dimensionless scalar.\n const half: ExprNode = { kind: 'symbol', name: '(1/2)', dim: DIMENSIONLESS };\n\n // Final: (1/2) · g^{λρ} · sumExpr\n // Γ has units 1/LENGTH (geometrized DIMENSIONLESS metric).\n return contract(half, gInverseRenamed, sumExpr);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constant-rows.d.ts","sourceRoot":"","sources":["../../src/dimensional/constant-rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA0BH,qIAAqI;AACrI,MAAM,WAAW,WAAW;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,0IAA0I;IAC1I,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,sGAAsG;IACtG,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;CAC5B;AAoBD,2FAA2F;AAC3F,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,
|
|
1
|
+
{"version":3,"file":"constant-rows.d.ts","sourceRoot":"","sources":["../../src/dimensional/constant-rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA0BH,qIAAqI;AACrI,MAAM,WAAW,WAAW;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,0IAA0I;IAC1I,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,sGAAsG;IACtG,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;CAC5B;AAoBD,2FAA2F;AAC3F,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EA6E/C,CAAC;AAUF,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAErE"}
|