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
|
@@ -1,97 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Bridge-parameter differentiation
|
|
2
|
+
* Bridge-parameter differentiation by central finite differences.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* named-field struct
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* outputScalar`. Returns gradients with respect to a chosen subset
|
|
9
|
-
* of the bridge's input parameters.
|
|
4
|
+
* A {@link BridgeDiffSpec} wraps one catalog closed form (a plain-JS scalar
|
|
5
|
+
* function over a named-field struct) and names which fields vary.
|
|
6
|
+
* {@link bridgeGradientNumerical} perturbs those fields and returns the
|
|
7
|
+
* gradient keyed by field name.
|
|
10
8
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
9
|
+
* There is no engine-AD path over a spec. `evaluate` returns a `number`, and
|
|
10
|
+
* a number carries no autograd tape, so reverse- or forward-mode AD of a spec
|
|
11
|
+
* is unreachable by construction; the function that once offered it
|
|
12
|
+
* (`bridgeGradient`) threw for every shipped spec and was removed. The exact
|
|
13
|
+
* AD path is {@link bridgeGradientAST} in `bridge-ast-gradient.ts`, which
|
|
14
|
+
* lowers the bridge's symbolic RHS through `@danielsimonjr/mathts-autograd`.
|
|
16
15
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* Decision #1 keeps those evaluators as plain-JS scalar functions
|
|
20
|
-
* (`Math.*` / raw arithmetic on numbers), neither reverse-mode (tape)
|
|
21
|
-
* nor forward-mode (dual) AD can trace them — the tape/dual instrument
|
|
22
|
-
* only sees ops routed through engine-traced tensors. With
|
|
23
|
-
* `MathTSEngine` the autograd `TapedTensor` does not survive
|
|
24
|
-
* `engine.toNested`. `bridgeGradient` therefore only works for
|
|
25
|
-
* functions written in engine ops — not the plain-JS bridges.
|
|
26
|
-
*
|
|
27
|
-
* The SUPPORTED way to differentiate a plain-JS bridge evaluator is
|
|
28
|
-
* {@link bridgeGradientNumerical} (central finite differences, no engine).
|
|
16
|
+
* This module lives in `src/diff/` (P8 Decision #1), not in `src/bridges/`,
|
|
17
|
+
* so the catalog closed forms stay untouched.
|
|
29
18
|
*
|
|
30
19
|
* @module diff/bridge-gradient
|
|
31
20
|
*/
|
|
32
|
-
import {
|
|
33
|
-
import { EngineCapabilityError } from '../numerical/errors.js';
|
|
34
|
-
/**
|
|
35
|
-
* Compute the gradient of a bridge evaluator with respect to its
|
|
36
|
-
* differentiable parameters via reverse-mode AD. The supplied
|
|
37
|
-
* `params` map must contain every key in `spec.paramNames`.
|
|
38
|
-
*
|
|
39
|
-
* Throws `EngineCapabilityError` if the engine doesn't support
|
|
40
|
-
* autograd (the standard graceful-degradation path from v0.4.0;
|
|
41
|
-
* see `MathTSEngine.reverseGrad`).
|
|
42
|
-
*
|
|
43
|
-
* @public
|
|
44
|
-
*/
|
|
45
|
-
export async function bridgeGradient(spec, engine, params) {
|
|
46
|
-
if (!hasAutogradSupport(engine)) {
|
|
47
|
-
throw new EngineCapabilityError(engine.name, 'reverseGrad');
|
|
48
|
-
}
|
|
49
|
-
// Pack params into a 1-D tensor in spec.paramNames order.
|
|
50
|
-
const packed = spec.paramNames.map((k) => {
|
|
51
|
-
const v = params[k];
|
|
52
|
-
if (typeof v !== 'number') {
|
|
53
|
-
throw new TypeError(`bridgeGradient: ${spec.bridgeId}: missing or non-numeric param '${k}' ` +
|
|
54
|
-
`(got ${typeof v}). All paramNames must be numbers in the params object.`);
|
|
55
|
-
}
|
|
56
|
-
return v;
|
|
57
|
-
});
|
|
58
|
-
const paramTensor = engine.fromNested(packed, [packed.length]);
|
|
59
|
-
// Build the (paramTensor) → scalar function the engine's
|
|
60
|
-
// reverseGrad expects. The function unpacks the tensor back
|
|
61
|
-
// into the bridge's Input struct, calls evaluate, and returns
|
|
62
|
-
// a rank-0 tensor.
|
|
63
|
-
const fn = (x) => {
|
|
64
|
-
const unpacked = engine.toNested(x);
|
|
65
|
-
const input = { ...spec.defaults };
|
|
66
|
-
spec.paramNames.forEach((k, i) => {
|
|
67
|
-
input[k] = unpacked[i];
|
|
68
|
-
});
|
|
69
|
-
const scalar = spec.evaluate(input);
|
|
70
|
-
return engine.fromNested(scalar, []);
|
|
71
|
-
};
|
|
72
|
-
const { value, gradient } = await engine.reverseGrad(fn, paramTensor);
|
|
73
|
-
const valueNumber = engine.toNested(value);
|
|
74
|
-
return { value: valueNumber, gradient };
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Convenience: unpack a 1-D gradient tensor into a named-field
|
|
78
|
-
* record matching the spec's `paramNames` order.
|
|
79
|
-
*
|
|
80
|
-
* @public
|
|
81
|
-
*/
|
|
82
|
-
export function gradientToNamed(spec, gradient, engine) {
|
|
83
|
-
const arr = engine.toNested(gradient);
|
|
84
|
-
if (arr.length !== spec.paramNames.length) {
|
|
85
|
-
throw new RangeError(`gradientToNamed: ${spec.bridgeId}: gradient length ${arr.length} does not ` +
|
|
86
|
-
`match paramNames length ${spec.paramNames.length} — a mismatch would ` +
|
|
87
|
-
`silently leave some params undefined or drop gradient entries.`);
|
|
88
|
-
}
|
|
89
|
-
const out = {};
|
|
90
|
-
spec.paramNames.forEach((k, i) => {
|
|
91
|
-
out[k] = arr[i];
|
|
92
|
-
});
|
|
93
|
-
return out;
|
|
94
|
-
}
|
|
21
|
+
import { centralPartial } from '../numerical/finite-difference.js';
|
|
95
22
|
/**
|
|
96
23
|
* Relative step for central differences: `cbrt(eps)` balances the `O(h²)`
|
|
97
24
|
* truncation error against the `O(eps/h)` round-off error (the central-diff
|
|
@@ -101,20 +28,20 @@ export function gradientToNamed(spec, gradient, engine) {
|
|
|
101
28
|
const CENTRAL_DIFF_REL_STEP = Math.cbrt(Number.EPSILON); // ≈ 6.06e-6
|
|
102
29
|
/**
|
|
103
30
|
* Gradient of a bridge evaluator by **central finite differences** — the
|
|
104
|
-
*
|
|
31
|
+
* way to differentiate the catalog's plain-JS closed forms without
|
|
32
|
+
* rewriting them. Needs no engine and is synchronous.
|
|
105
33
|
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* `
|
|
117
|
-
* fields come from `spec.defaults`.
|
|
34
|
+
* For each differentiable param with value `x` it uses the relative step
|
|
35
|
+
* `h = max(|x|, floor)·cbrt(eps)`, where `floor` is the spec's
|
|
36
|
+
* {@link BridgeDiffSpec.stepFloors} entry for that param (0 when the spec
|
|
37
|
+
* states none), and the ACTUAL representable denominator
|
|
38
|
+
* `dx = (x + h) − (x − h)` (`numerical/finite-difference`) — so the
|
|
39
|
+
* perturbation survives floating-point rounding at astrophysical scales
|
|
40
|
+
* (`M ≈ 2e30 kg`) and stays relative at atomic ones (a charge of 1.6e-19
|
|
41
|
+
* takes a step of 1e-24, not the 6e-6 an absolute floor of 1 gave). A param
|
|
42
|
+
* at exactly 0 with no stated floor is refused with a `RangeError`: there is
|
|
43
|
+
* no scale to step by. The supplied `params` must contain every key in
|
|
44
|
+
* `spec.paramNames`; non-differentiable fields come from `spec.defaults`.
|
|
118
45
|
*
|
|
119
46
|
* @public
|
|
120
47
|
*/
|
|
@@ -124,9 +51,8 @@ export function bridgeGradientNumerical(spec, params, opts) {
|
|
|
124
51
|
throw new RangeError(`bridgeGradientNumerical: ${spec.bridgeId}: relStep must be a positive finite number, got ${relStep} ` +
|
|
125
52
|
`(a zero/non-finite step collapses the central-difference denominator to 0 → NaN gradients).`);
|
|
126
53
|
}
|
|
127
|
-
//
|
|
128
|
-
//
|
|
129
|
-
// silently non-finite gradient.)
|
|
54
|
+
// Every paramName must be a FINITE number. (`typeof NaN === 'number'`, so a
|
|
55
|
+
// bare typeof check let NaN/∞ flow into a silently non-finite gradient.)
|
|
130
56
|
for (const k of spec.paramNames) {
|
|
131
57
|
if (!Number.isFinite(params[k])) {
|
|
132
58
|
throw new TypeError(`bridgeGradientNumerical: ${spec.bridgeId}: missing or non-finite param '${k}' ` +
|
|
@@ -134,7 +60,10 @@ export function bridgeGradientNumerical(spec, params, opts) {
|
|
|
134
60
|
}
|
|
135
61
|
}
|
|
136
62
|
// Build the full Input struct (defaults + differentiable params), with an
|
|
137
|
-
// optional single-param override for the perturbed evaluations.
|
|
63
|
+
// optional single-param override for the perturbed evaluations. The
|
|
64
|
+
// `Input` generic has no runtime schema: `spec.paramNames` is declared as
|
|
65
|
+
// keys of `Input`, and `defaults` is a `Partial<Input>`, so the merged
|
|
66
|
+
// record is an `Input` by the spec's own contract; the cast states that.
|
|
138
67
|
const buildInput = (override) => {
|
|
139
68
|
const input = { ...spec.defaults };
|
|
140
69
|
for (const k of spec.paramNames)
|
|
@@ -147,11 +76,13 @@ export function bridgeGradientNumerical(spec, params, opts) {
|
|
|
147
76
|
const gradient = {};
|
|
148
77
|
for (const k of spec.paramNames) {
|
|
149
78
|
const x = params[k];
|
|
150
|
-
const
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
79
|
+
const floor = spec.stepFloors?.[k] ?? 0;
|
|
80
|
+
const h = Math.max(Math.abs(x), floor) * relStep;
|
|
81
|
+
if (!(h > 0)) {
|
|
82
|
+
throw new RangeError(`bridgeGradientNumerical: ${spec.bridgeId}: param '${k}' is ${x} and the spec states no stepFloors['${k}'], ` +
|
|
83
|
+
`so a relative central-difference step has no scale; state the parameter's scale in the spec's stepFloors.`);
|
|
84
|
+
}
|
|
85
|
+
gradient[k] = centralPartial((p) => spec.evaluate(buildInput({ key: k, val: p[k] })), { [k]: x }, k, h);
|
|
155
86
|
}
|
|
156
87
|
return { value, gradient };
|
|
157
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-gradient.js","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bridge-gradient.js","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAoDnE;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;AAErE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAA2B,EAC3B,MAA8B,EAC9B,IAAoC;IAEpC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,qBAAqB,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,UAAU,CAClB,4BAA4B,IAAI,CAAC,QAAQ,mDAAmD,OAAO,GAAG;YACtG,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,SAAS,CACjB,4BAA4B,IAAI,CAAC,QAAQ,kCAAkC,CAAC,IAAI;gBAChF,QAAQ,MAAM,CAAC,CAAC,CAAC,gEAAgE,CAClF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,oEAAoE;IACpE,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,UAAU,GAAG,CAAC,QAAuC,EAAS,EAAE;QACpE,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAA6B,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,QAAQ;YAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC;QACjD,OAAO,KAAyB,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;QACjD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACb,MAAM,IAAI,UAAU,CAClB,4BAA4B,IAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,CAAC,uCAAuC,CAAC,MAAM;gBAC7G,2GAA2G,CAC5G,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC","sourcesContent":["/**\n * Bridge-parameter differentiation by central finite differences.\n *\n * A {@link BridgeDiffSpec} wraps one catalog closed form (a plain-JS scalar\n * function over a named-field struct) and names which fields vary.\n * {@link bridgeGradientNumerical} perturbs those fields and returns the\n * gradient keyed by field name.\n *\n * There is no engine-AD path over a spec. `evaluate` returns a `number`, and\n * a number carries no autograd tape, so reverse- or forward-mode AD of a spec\n * is unreachable by construction; the function that once offered it\n * (`bridgeGradient`) threw for every shipped spec and was removed. The exact\n * AD path is {@link bridgeGradientAST} in `bridge-ast-gradient.ts`, which\n * lowers the bridge's symbolic RHS through `@danielsimonjr/mathts-autograd`.\n *\n * This module lives in `src/diff/` (P8 Decision #1), not in `src/bridges/`,\n * so the catalog closed forms stay untouched.\n *\n * @module diff/bridge-gradient\n */\n\nimport { centralPartial } from '../numerical/finite-difference.js';\n\n/**\n * Specification of a differentiable bridge: which parameters can vary, in\n * what order the gradient reports them, the fixed inputs, and the bridge's\n * scalar evaluator.\n *\n * `paramNames` is the report order. For a Shapiro-delay spec with\n * `paramNames: ['M_kg', 'R_far_m', 'R_near_m']`, the gradient returned by\n * `bridgeGradientNumerical` has keys in that insertion order.\n *\n * @public\n */\nexport interface BridgeDiffSpec<Input> {\n /** Catalog id used in error messages (for example the relation that uses the covariant-eikonal method). */\n readonly bridgeId: string;\n /** Display name (e.g., 'Shapiro time delay'). */\n readonly name: string;\n /**\n * Which Input keys vary, in report order. All names must be present in the\n * frozen `Input` struct as `number`-valued keys.\n */\n readonly paramNames: ReadonlyArray<keyof Input & string>;\n /**\n * The non-differentiable input fields (those NOT in `paramNames`). The\n * evaluator receives `defaults` merged with the varying params.\n */\n readonly defaults: Partial<Input>;\n /** The bridge's scalar evaluator. */\n readonly evaluate: (input: Input) => number;\n /**\n * The smallest magnitude the relative step is taken against, per parameter:\n * for `|x| < floor` the step is `floor·relStep`. A parameter that is zero at\n * a point of interest (an eccentricity on a circular orbit) needs its scale\n * stated here, because a relative step at zero is no step. A parameter not\n * named here has no floor: the step is `|x|·relStep`, and `x = 0` is refused.\n */\n readonly stepFloors?: Readonly<Partial<Record<keyof Input & string, number>>>;\n}\n\n/**\n * Result of {@link bridgeGradientNumerical}: the bridge's scalar `value`\n * at the supplied point, plus the `gradient` of partial derivatives keyed\n * by `paramName` (insertion follows `spec.paramNames` order).\n *\n * @public\n */\nexport interface BridgeNumericalGradientResult {\n readonly value: number;\n readonly gradient: Readonly<Record<string, number>>;\n}\n\n/**\n * Relative step for central differences: `cbrt(eps)` balances the `O(h²)`\n * truncation error against the `O(eps/h)` round-off error (the central-diff\n * optimum). `sqrt(eps)` — the FORWARD-diff optimum — would leave precision on\n * the table for central differences.\n */\nconst CENTRAL_DIFF_REL_STEP = Math.cbrt(Number.EPSILON); // ≈ 6.06e-6\n\n/**\n * Gradient of a bridge evaluator by **central finite differences** — the\n * way to differentiate the catalog's plain-JS closed forms without\n * rewriting them. Needs no engine and is synchronous.\n *\n * For each differentiable param with value `x` it uses the relative step\n * `h = max(|x|, floor)·cbrt(eps)`, where `floor` is the spec's\n * {@link BridgeDiffSpec.stepFloors} entry for that param (0 when the spec\n * states none), and the ACTUAL representable denominator\n * `dx = (x + h) − (x − h)` (`numerical/finite-difference`) — so the\n * perturbation survives floating-point rounding at astrophysical scales\n * (`M ≈ 2e30 kg`) and stays relative at atomic ones (a charge of 1.6e-19\n * takes a step of 1e-24, not the 6e-6 an absolute floor of 1 gave). A param\n * at exactly 0 with no stated floor is refused with a `RangeError`: there is\n * no scale to step by. The supplied `params` must contain every key in\n * `spec.paramNames`; non-differentiable fields come from `spec.defaults`.\n *\n * @public\n */\nexport function bridgeGradientNumerical<Input>(\n spec: BridgeDiffSpec<Input>,\n params: Record<string, number>,\n opts?: { readonly relStep?: number },\n): BridgeNumericalGradientResult {\n const relStep = opts?.relStep ?? CENTRAL_DIFF_REL_STEP;\n if (!Number.isFinite(relStep) || relStep <= 0) {\n throw new RangeError(\n `bridgeGradientNumerical: ${spec.bridgeId}: relStep must be a positive finite number, got ${relStep} ` +\n `(a zero/non-finite step collapses the central-difference denominator to 0 → NaN gradients).`,\n );\n }\n\n // Every paramName must be a FINITE number. (`typeof NaN === 'number'`, so a\n // bare typeof check let NaN/∞ flow into a silently non-finite gradient.)\n for (const k of spec.paramNames) {\n if (!Number.isFinite(params[k])) {\n throw new TypeError(\n `bridgeGradientNumerical: ${spec.bridgeId}: missing or non-finite param '${k}' ` +\n `(got ${params[k]}). All paramNames must be finite numbers in the params object.`,\n );\n }\n }\n\n // Build the full Input struct (defaults + differentiable params), with an\n // optional single-param override for the perturbed evaluations. The\n // `Input` generic has no runtime schema: `spec.paramNames` is declared as\n // keys of `Input`, and `defaults` is a `Partial<Input>`, so the merged\n // record is an `Input` by the spec's own contract; the cast states that.\n const buildInput = (override?: { key: string; val: number }): Input => {\n const input = { ...spec.defaults } as Record<string, unknown>;\n for (const k of spec.paramNames) input[k] = params[k];\n if (override) input[override.key] = override.val;\n return input as unknown as Input;\n };\n\n const value = spec.evaluate(buildInput());\n\n const gradient: Record<string, number> = {};\n for (const k of spec.paramNames) {\n const x = params[k];\n const floor = spec.stepFloors?.[k] ?? 0;\n const h = Math.max(Math.abs(x), floor) * relStep;\n if (!(h > 0)) {\n throw new RangeError(\n `bridgeGradientNumerical: ${spec.bridgeId}: param '${k}' is ${x} and the spec states no stepFloors['${k}'], ` +\n `so a relative central-difference step has no scale; state the parameter's scale in the spec's stepFloors.`,\n );\n }\n gradient[k] = centralPartial((p) => spec.evaluate(buildInput({ key: k, val: p[k]! })), { [k]: x }, k, h);\n }\n\n return { value, gradient };\n}\n"]}
|
|
@@ -5,22 +5,34 @@
|
|
|
5
5
|
* @module diff/bridge-specs
|
|
6
6
|
*/
|
|
7
7
|
import type { BridgeDiffSpec } from './bridge-gradient.js';
|
|
8
|
-
|
|
8
|
+
import type { CatalogRelation } from '../bridges/catalog-types.js';
|
|
9
|
+
/**
|
|
10
|
+
* The catalog id a differentiable relation is labelled by. A relation with no
|
|
11
|
+
* catalog id is not a catalog bridge and gets no `be-<n>` label; it throws
|
|
12
|
+
* rather than defaulting to `be-0`.
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare function requireCatalogId(relation: CatalogRelation): number;
|
|
16
|
+
/** Inputs of {@link SHAPIRO_DELAY_DIFF}: the mass and the two radii. @public */
|
|
17
|
+
export interface ShapiroInput {
|
|
9
18
|
readonly M_kg: number;
|
|
10
19
|
readonly R_far_m: number;
|
|
11
20
|
readonly R_near_m: number;
|
|
12
21
|
}
|
|
13
|
-
|
|
22
|
+
/** Inputs of {@link PERIHELION_ADVANCE_DIFF}: mass, semi-major axis, eccentricity, optional period. @public */
|
|
23
|
+
export interface PerihelionInput {
|
|
14
24
|
readonly M_kg: number;
|
|
15
25
|
readonly a_m: number;
|
|
16
26
|
/** Orbital eccentricity, 0 ≤ e < 1. A bare `e` is the elementary charge, so it is not this key. */
|
|
17
27
|
readonly eccentricity: number;
|
|
18
28
|
readonly T_yr?: number;
|
|
19
29
|
}
|
|
20
|
-
|
|
30
|
+
/** Inputs of {@link HAWKING_TEMPERATURE_DIFF}: the mass. @public */
|
|
31
|
+
export interface HawkingInput {
|
|
21
32
|
readonly M_kg: number;
|
|
22
33
|
}
|
|
23
|
-
|
|
34
|
+
/** Inputs of {@link DECOHERENCE_RATE_DIFF}: the rate and the two couplings. @public */
|
|
35
|
+
export interface DecoherenceInput {
|
|
24
36
|
readonly gamma0_per_s: number;
|
|
25
37
|
readonly lambda: number;
|
|
26
38
|
readonly lambda0: number;
|
|
@@ -35,5 +47,4 @@ export declare const HAWKING_TEMPERATURE_DIFF: BridgeDiffSpec<HawkingInput>;
|
|
|
35
47
|
export declare const DECOHERENCE_RATE_DIFF: BridgeDiffSpec<DecoherenceInput>;
|
|
36
48
|
/** Catalog relations this module differentiates. @public */
|
|
37
49
|
export declare const DIFFERENTIABLE_RELATIONS: readonly [BridgeDiffSpec<ShapiroInput>, BridgeDiffSpec<PerihelionInput>, BridgeDiffSpec<HawkingInput>, BridgeDiffSpec<DecoherenceInput>];
|
|
38
|
-
export {};
|
|
39
50
|
//# sourceMappingURL=bridge-specs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-specs.d.ts","sourceRoot":"","sources":["../../src/diff/bridge-specs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge-specs.d.ts","sourceRoot":"","sources":["../../src/diff/bridge-specs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAKlE;AAsBD,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,+GAA+G;AAC/G,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,uFAAuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAUD,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,YAAY,CAM3D,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,eAAe,CASnE,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,YAAY,CAMjE,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,gBAAgB,CAMlE,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,0IAK3B,CAAC"}
|
|
@@ -6,6 +6,18 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { catalogEdgeKey, catalogRelations } from '../bridges/catalog-load.js';
|
|
8
8
|
import { evaluateCatalogRelation } from '../bridges/relation-eval.js';
|
|
9
|
+
/**
|
|
10
|
+
* The catalog id a differentiable relation is labelled by. A relation with no
|
|
11
|
+
* catalog id is not a catalog bridge and gets no `be-<n>` label; it throws
|
|
12
|
+
* rather than defaulting to `be-0`.
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export function requireCatalogId(relation) {
|
|
16
|
+
if (relation.catalogId === null) {
|
|
17
|
+
throw new Error(`bridge-specs: relation '${relation.id}' has no catalog id and cannot be labelled be-<n>`);
|
|
18
|
+
}
|
|
19
|
+
return relation.catalogId;
|
|
20
|
+
}
|
|
9
21
|
function relationWithSource(source) {
|
|
10
22
|
const found = catalogRelations().find((row) => row.sources.includes(source));
|
|
11
23
|
if (found === undefined)
|
|
@@ -35,7 +47,7 @@ if (hawking === undefined)
|
|
|
35
47
|
const decoherence = relationWithSource('system-environment-coupling');
|
|
36
48
|
/** Shapiro delay. Differentiable in mass and the two radii. @public */
|
|
37
49
|
export const SHAPIRO_DELAY_DIFF = {
|
|
38
|
-
bridgeId: catalogEdgeKey(shapiro
|
|
50
|
+
bridgeId: catalogEdgeKey(requireCatalogId(shapiro)),
|
|
39
51
|
name: 'Shapiro time delay',
|
|
40
52
|
paramNames: ['M_kg', 'R_far_m', 'R_near_m'],
|
|
41
53
|
defaults: {},
|
|
@@ -43,15 +55,18 @@ export const SHAPIRO_DELAY_DIFF = {
|
|
|
43
55
|
};
|
|
44
56
|
/** Perihelion advance in radians per orbit. @public */
|
|
45
57
|
export const PERIHELION_ADVANCE_DIFF = {
|
|
46
|
-
bridgeId: catalogEdgeKey(perihelion
|
|
58
|
+
bridgeId: catalogEdgeKey(requireCatalogId(perihelion)),
|
|
47
59
|
name: 'Perihelion advance (radian per orbit)',
|
|
48
60
|
paramNames: ['M_kg', 'a_m', 'eccentricity'],
|
|
49
61
|
defaults: {},
|
|
50
62
|
evaluate: (input) => evaluateAliased(perihelion, input),
|
|
63
|
+
// The eccentricity is a dimensionless number in [0, 1): its scale is 1, so a circular orbit
|
|
64
|
+
// (eccentricity 0) still takes the step 1·∛ε, the step every orbit took before the floor was stated.
|
|
65
|
+
stepFloors: { eccentricity: 1 },
|
|
51
66
|
};
|
|
52
67
|
/** Hawking temperature. Differentiable in mass. @public */
|
|
53
68
|
export const HAWKING_TEMPERATURE_DIFF = {
|
|
54
|
-
bridgeId: catalogEdgeKey(hawking
|
|
69
|
+
bridgeId: catalogEdgeKey(requireCatalogId(hawking)),
|
|
55
70
|
name: 'Hawking temperature',
|
|
56
71
|
paramNames: ['M_kg'],
|
|
57
72
|
defaults: {},
|
|
@@ -59,7 +74,7 @@ export const HAWKING_TEMPERATURE_DIFF = {
|
|
|
59
74
|
};
|
|
60
75
|
/** Decoherence rate. Differentiable in the rate and the two couplings. @public */
|
|
61
76
|
export const DECOHERENCE_RATE_DIFF = {
|
|
62
|
-
bridgeId: catalogEdgeKey(decoherence
|
|
77
|
+
bridgeId: catalogEdgeKey(requireCatalogId(decoherence)),
|
|
63
78
|
name: 'Decoherence rate',
|
|
64
79
|
paramNames: ['gamma0_per_s', 'lambda', 'lambda0'],
|
|
65
80
|
defaults: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-specs.js","sourceRoot":"","sources":["../../src/diff/bridge-specs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,GAAG,CAAC,CAAC;IAC7F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,QAAyB,EAAE,KAAa;IAC/D,MAAM,MAAM,GAAG,KAA2C,CAAC;IAC3D,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;QACxF,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzE,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,aAAa,MAAM,EAAE,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,aAAa,MAAM,EAAE,CAAC,CAAC;QAC9E,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge-specs.js","sourceRoot":"","sources":["../../src/diff/bridge-specs.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Differentiable relations projected from the catalog. The scalar is the\n * catalog expression. Parameter names are the relation's aliases.\n *\n * @module diff/bridge-specs\n */\n\nimport type { BridgeDiffSpec } from './bridge-gradient.js';\nimport { catalogEdgeKey, catalogRelations } from '../bridges/catalog-load.js';\nimport type { CatalogRelation } from '../bridges/catalog-types.js';\nimport { evaluateCatalogRelation } from '../bridges/relation-eval.js';\n\n/**\n * The catalog id a differentiable relation is labelled by. A relation with no\n * catalog id is not a catalog bridge and gets no `be-<n>` label; it throws\n * rather than defaulting to `be-0`.\n * @internal\n */\nexport function requireCatalogId(relation: CatalogRelation): number {\n if (relation.catalogId === null) {\n throw new Error(`bridge-specs: relation '${relation.id}' has no catalog id and cannot be labelled be-<n>`);\n }\n return relation.catalogId;\n}\n\nfunction relationWithSource(source: string): CatalogRelation {\n const found = catalogRelations().find((row) => row.sources.includes(source));\n if (found === undefined) throw new Error(`bridge-specs: no relation has source '${source}'`);\n return found;\n}\n\nfunction evaluateAliased(relation: CatalogRelation, input: object): number {\n const record = input as Record<string, number | undefined>;\n const bound: Record<string, number> = {};\n for (const source of relation.sources) {\n const alias = (relation.aliases[source] ?? []).find((key) => record[key] !== undefined);\n const key = alias ?? (record[source] !== undefined ? source : undefined);\n if (key === undefined) throw new Error(`${relation.id}: missing ${source}`);\n const value = record[key];\n if (value === undefined) throw new Error(`${relation.id}: missing ${source}`);\n bound[source] = value;\n }\n return evaluateCatalogRelation(relation, bound);\n}\n\n/** Inputs of {@link SHAPIRO_DELAY_DIFF}: the mass and the two radii. @public */\nexport interface ShapiroInput {\n readonly M_kg: number;\n readonly R_far_m: number;\n readonly R_near_m: number;\n}\n\n/** Inputs of {@link PERIHELION_ADVANCE_DIFF}: mass, semi-major axis, eccentricity, optional period. @public */\nexport interface PerihelionInput {\n readonly M_kg: number;\n readonly a_m: number;\n /** Orbital eccentricity, 0 ≤ e < 1. A bare `e` is the elementary charge, so it is not this key. */\n readonly eccentricity: number;\n readonly T_yr?: number;\n}\n\n/** Inputs of {@link HAWKING_TEMPERATURE_DIFF}: the mass. @public */\nexport interface HawkingInput {\n readonly M_kg: number;\n}\n\n/** Inputs of {@link DECOHERENCE_RATE_DIFF}: the rate and the two couplings. @public */\nexport interface DecoherenceInput {\n readonly gamma0_per_s: number;\n readonly lambda: number;\n readonly lambda0: number;\n}\n\nconst shapiro = relationWithSource('far-radius');\nconst perihelion = relationWithSource('semi-major-axis');\nconst hawking = catalogRelations().find(\n (row) => row.target === 'hawking-temperature' && row.sources.length === 1 && row.sources[0] === 'mass',\n);\nif (hawking === undefined) throw new Error('bridge-specs: no Hawking temperature relation');\nconst decoherence = relationWithSource('system-environment-coupling');\n\n/** Shapiro delay. Differentiable in mass and the two radii. @public */\nexport const SHAPIRO_DELAY_DIFF: BridgeDiffSpec<ShapiroInput> = {\n bridgeId: catalogEdgeKey(requireCatalogId(shapiro)),\n name: 'Shapiro time delay',\n paramNames: ['M_kg', 'R_far_m', 'R_near_m'],\n defaults: {},\n evaluate: (input) => evaluateAliased(shapiro, input),\n};\n\n/** Perihelion advance in radians per orbit. @public */\nexport const PERIHELION_ADVANCE_DIFF: BridgeDiffSpec<PerihelionInput> = {\n bridgeId: catalogEdgeKey(requireCatalogId(perihelion)),\n name: 'Perihelion advance (radian per orbit)',\n paramNames: ['M_kg', 'a_m', 'eccentricity'],\n defaults: {},\n evaluate: (input) => evaluateAliased(perihelion, input),\n // The eccentricity is a dimensionless number in [0, 1): its scale is 1, so a circular orbit\n // (eccentricity 0) still takes the step 1·∛ε, the step every orbit took before the floor was stated.\n stepFloors: { eccentricity: 1 },\n};\n\n/** Hawking temperature. Differentiable in mass. @public */\nexport const HAWKING_TEMPERATURE_DIFF: BridgeDiffSpec<HawkingInput> = {\n bridgeId: catalogEdgeKey(requireCatalogId(hawking)),\n name: 'Hawking temperature',\n paramNames: ['M_kg'],\n defaults: {},\n evaluate: (input) => evaluateAliased(hawking, input),\n};\n\n/** Decoherence rate. Differentiable in the rate and the two couplings. @public */\nexport const DECOHERENCE_RATE_DIFF: BridgeDiffSpec<DecoherenceInput> = {\n bridgeId: catalogEdgeKey(requireCatalogId(decoherence)),\n name: 'Decoherence rate',\n paramNames: ['gamma0_per_s', 'lambda', 'lambda0'],\n defaults: {},\n evaluate: (input) => evaluateAliased(decoherence, input),\n};\n\n/** Catalog relations this module differentiates. @public */\nexport const DIFFERENTIABLE_RELATIONS = [\n SHAPIRO_DELAY_DIFF,\n PERIHELION_ADVANCE_DIFF,\n HAWKING_TEMPERATURE_DIFF,\n DECOHERENCE_RATE_DIFF,\n] as const;\n"]}
|
|
@@ -17,6 +17,17 @@ import { Dimension } from './types.js';
|
|
|
17
17
|
* @public
|
|
18
18
|
*/
|
|
19
19
|
export { DimensionMismatchError } from './errors.js';
|
|
20
|
+
/** The seven SI bases, in the order every exponent list is written. @internal */
|
|
21
|
+
export declare const BASES: readonly ['L', 'M', 'T', 'I', 'Theta', 'N', 'J'];
|
|
22
|
+
/** Exact zero on every base; a base missing from a partial object reads as 0. @internal */
|
|
23
|
+
export declare function isDimensionless(d: Dimension): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Exact equality on every base, no tolerance: the predicate for exponents that
|
|
26
|
+
* were never computed. {@link equals} is the tolerant one for exponents that
|
|
27
|
+
* were (a fractional power reached by different op chains).
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export declare function exactlyEquals(a: Dimension, b: Dimension): boolean;
|
|
20
31
|
/** Product of two dimensions: exponents add per base. */
|
|
21
32
|
export declare function multiply(a: Dimension, b: Dimension): Dimension;
|
|
22
33
|
/** Quotient of two dimensions: exponents subtract per base. */
|
|
@@ -57,4 +68,11 @@ export declare function subtract(a: Dimension, b: Dimension): Dimension;
|
|
|
57
68
|
* Bases with exponent 0 are omitted; exponent 1 is written without "^1".
|
|
58
69
|
*/
|
|
59
70
|
export declare function format(d: Dimension): string;
|
|
71
|
+
/** Each base with its coherent SI unit, kilogram first (the order `siUnitOf` prints). @internal */
|
|
72
|
+
export declare const SI_BASE: readonly (readonly [keyof Dimension, string])[];
|
|
73
|
+
/**
|
|
74
|
+
* A dimension as SI base units, numerator before one `/` (`m^3/(kg*s^2)`), a bare denominator as
|
|
75
|
+
* negative powers (`s^-1`), and `1` when dimensionless: the forms `parseUnit` reads back.
|
|
76
|
+
*/
|
|
77
|
+
export declare function siUnitOf(dim: Dimension): string;
|
|
60
78
|
//# sourceMappingURL=algebra.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algebra.d.ts","sourceRoot":"","sources":["../../src/dimensional/algebra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAoB,MAAM,YAAY,CAAC;AAGzD;;;;;GAKG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"algebra.d.ts","sourceRoot":"","sources":["../../src/dimensional/algebra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAoB,MAAM,YAAY,CAAC;AAGzD;;;;;GAKG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,iFAAiF;AACjF,eAAO,MAAM,KAAK,YAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAGtE,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CAEjE;AAED,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CAM9D;AAED,+DAA+D;AAC/D,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CAM5D;AAED,kFAAkF;AAClF,wBAAgB,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAMxD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CAU1D;AAED,wFAAwF;AACxF,wBAAgB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CASzD;AAED,+FAA+F;AAC/F,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CAS9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAgB3C;AAED,mGAAmG;AACnG,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,SAAS,EAAE,MAAM,CAAC,CAAC,EAQlE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAQ/C"}
|
|
@@ -18,7 +18,21 @@ import { DimensionMismatchError } from './errors.js';
|
|
|
18
18
|
* @public
|
|
19
19
|
*/
|
|
20
20
|
export { DimensionMismatchError } from './errors.js';
|
|
21
|
-
|
|
21
|
+
/** The seven SI bases, in the order every exponent list is written. @internal */
|
|
22
|
+
export const BASES = ['L', 'M', 'T', 'I', 'Theta', 'N', 'J'];
|
|
23
|
+
/** Exact zero on every base; a base missing from a partial object reads as 0. @internal */
|
|
24
|
+
export function isDimensionless(d) {
|
|
25
|
+
return BASES.every((base) => (d[base] ?? 0) === 0);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Exact equality on every base, no tolerance: the predicate for exponents that
|
|
29
|
+
* were never computed. {@link equals} is the tolerant one for exponents that
|
|
30
|
+
* were (a fractional power reached by different op chains).
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export function exactlyEquals(a, b) {
|
|
34
|
+
return BASES.every((base) => (a[base] ?? 0) === (b[base] ?? 0));
|
|
35
|
+
}
|
|
22
36
|
/** Product of two dimensions: exponents add per base. */
|
|
23
37
|
export function multiply(a, b) {
|
|
24
38
|
const out = {};
|
|
@@ -116,4 +130,30 @@ export function format(d) {
|
|
|
116
130
|
return '[1]';
|
|
117
131
|
return `[${parts.join(' ')}]`;
|
|
118
132
|
}
|
|
133
|
+
/** Each base with its coherent SI unit, kilogram first (the order `siUnitOf` prints). @internal */
|
|
134
|
+
export const SI_BASE = [
|
|
135
|
+
['M', 'kg'],
|
|
136
|
+
['L', 'm'],
|
|
137
|
+
['T', 's'],
|
|
138
|
+
['I', 'A'],
|
|
139
|
+
['Theta', 'K'],
|
|
140
|
+
['N', 'mol'],
|
|
141
|
+
['J', 'cd'],
|
|
142
|
+
];
|
|
143
|
+
/**
|
|
144
|
+
* A dimension as SI base units, numerator before one `/` (`m^3/(kg*s^2)`), a bare denominator as
|
|
145
|
+
* negative powers (`s^-1`), and `1` when dimensionless: the forms `parseUnit` reads back.
|
|
146
|
+
*/
|
|
147
|
+
export function siUnitOf(dim) {
|
|
148
|
+
const factor = (u, e) => (e === 1 ? u : `${u}^${e}`);
|
|
149
|
+
const num = SI_BASE.filter(([k]) => dim[k] > 0).map(([k, u]) => factor(u, dim[k]));
|
|
150
|
+
const den = SI_BASE.filter(([k]) => dim[k] < 0).map(([k, u]) => factor(u, -dim[k]));
|
|
151
|
+
if (num.length === 0 && den.length === 0)
|
|
152
|
+
return '1';
|
|
153
|
+
if (num.length === 0)
|
|
154
|
+
return SI_BASE.filter(([k]) => dim[k] < 0).map(([k, u]) => factor(u, dim[k])).join('*');
|
|
155
|
+
if (den.length === 0)
|
|
156
|
+
return num.join('*');
|
|
157
|
+
return `${num.join('*')}/${den.length === 1 ? den[0] : `(${den.join('*')})`}`;
|
|
158
|
+
}
|
|
119
159
|
//# sourceMappingURL=algebra.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algebra.js","sourceRoot":"","sources":["../../src/dimensional/algebra.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"algebra.js","sourceRoot":"","sources":["../../src/dimensional/algebra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAa,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;GAKG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,iFAAiF;AACjF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAGtE,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAAC,CAAY;IAC1C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,CAAY,EAAE,CAAY;IACtD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,QAAQ,CAAC,CAAY,EAAE,CAAY;IACjD,MAAM,GAAG,GAAG,EAAe,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC,IAAY,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,MAAM,CAAC,CAAY,EAAE,CAAY;IAC/C,MAAM,GAAG,GAAG,EAAe,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC,IAAY,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,KAAK,CAAC,CAAY,EAAE,CAAS;IAC3C,MAAM,GAAG,GAAG,EAAe,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM,CAAC,CAAY,EAAE,CAAY;IAC/C,OAAO,CACL,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,YAAY;QAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CACpC,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,GAAG,CAAC,CAAY,EAAE,CAAY;IAC5C,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,sBAAsB,CAC9B,iCAAiC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,EAC3D,CAAC,EACD,CAAC,CACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;AAClB,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,QAAQ,CAAC,CAAY,EAAE,CAAY;IACjD,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,sBAAsB,CAC9B,sCAAsC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,EAChE,CAAC,EACD,CAAC,CACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,MAAM,CAAC,CAAY;IACjC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,IAAI,KAAK,eAAe;gBAAE,OAAO,KAAK,CAAC;YAC3C,OAAO,IAAI,IAAI,GAAG,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAY,CAAC,CAAC;QAC5B,IAAI,GAAG,KAAK,CAAC;YAAE,SAAS;QACxB,IAAI,GAAG,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAChC,CAAC;AAED,mGAAmG;AACnG,MAAM,CAAC,MAAM,OAAO,GAAoD;IACtE,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,OAAO,EAAE,GAAG,CAAC;IACd,CAAC,GAAG,EAAE,KAAK,CAAC;IACZ,CAAC,GAAG,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAc;IACrC,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACrD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9G,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAChF,CAAC","sourcesContent":["/**\n * Dimensional algebra: per-base-exponent arithmetic.\n *\n * Operations follow standard dimensional analysis (Bridgman, \"Dimensional Analysis\", 1922):\n * - multiply: add exponents per base\n * - divide: subtract exponents per base\n * - power: scale exponents by the scalar `n`\n * - add/sub: permitted only when both operands have the same dimension\n *\n * @module dimensional/algebra\n */\n\nimport { Dimension, NAMED_DIMENSIONS } from './types.js';\nimport { DimensionMismatchError } from './errors.js';\n\n/**\n * Re-exported for callers that import the error from the algebra module.\n * The definition lives in `errors.ts`.\n *\n * @public\n */\nexport { DimensionMismatchError } from './errors.js';\n\n/** The seven SI bases, in the order every exponent list is written. @internal */\nexport const BASES = ['L', 'M', 'T', 'I', 'Theta', 'N', 'J'] as const;\ntype Base = typeof BASES[number];\n\n/** Exact zero on every base; a base missing from a partial object reads as 0. @internal */\nexport function isDimensionless(d: Dimension): boolean {\n return BASES.every((base) => (d[base] ?? 0) === 0);\n}\n\n/**\n * Exact equality on every base, no tolerance: the predicate for exponents that\n * were never computed. {@link equals} is the tolerant one for exponents that\n * were (a fractional power reached by different op chains).\n * @internal\n */\nexport function exactlyEquals(a: Dimension, b: Dimension): boolean {\n return BASES.every((base) => (a[base] ?? 0) === (b[base] ?? 0));\n}\n\n/** Product of two dimensions: exponents add per base. */\nexport function multiply(a: Dimension, b: Dimension): Dimension {\n const out = {} as Dimension;\n for (const base of BASES) {\n out[base as Base] = a[base as Base] + b[base as Base];\n }\n return out;\n}\n\n/** Quotient of two dimensions: exponents subtract per base. */\nexport function divide(a: Dimension, b: Dimension): Dimension {\n const out = {} as Dimension;\n for (const base of BASES) {\n out[base as Base] = a[base as Base] - b[base as Base];\n }\n return out;\n}\n\n/** Raise a dimension to a (possibly fractional) power: exponents scale by `n`. */\nexport function power(a: Dimension, n: number): Dimension {\n const out = {} as Dimension;\n for (const base of BASES) {\n out[base as Base] = a[base as Base] * n;\n }\n return out;\n}\n\n/**\n * Largest exponent difference still treated as equal. Physical dimension\n * exponents are integers or simple rationals (halves, thirds), so any genuine\n * distinction is ≥ ~1/3 — far above this tolerance, which only absorbs\n * floating-point round-off in fractional powers (v0.20 dimensionful `M^0.5`\n * reached by different op chains, e.g. 0.30000000000000004 vs 0.3).\n */\nexport const EXPONENT_TOL = 1e-9;\n\n/**\n * True iff two dimensions have equal exponents on every base, within\n * `EXPONENT_TOL` so floating-point round-off in fractional exponents does not\n * read as unequal.\n *\n * Unrolled over the 7 bases (no iterator / dynamic-key access) and\n * short-circuiting — `equals` is on the hot path (every `add`/`subtract`, and\n * `format`'s named-dimension scan calls it per entry). Stays distinct from\n * `linkage.ts`'s exact `dimEqual`: this one is tolerant by design (the v0.20\n * fractional-power round-off fix), so they are NOT the same predicate.\n */\nexport function equals(a: Dimension, b: Dimension): boolean {\n return (\n Math.abs(a.L - b.L) <= EXPONENT_TOL &&\n Math.abs(a.M - b.M) <= EXPONENT_TOL &&\n Math.abs(a.T - b.T) <= EXPONENT_TOL &&\n Math.abs(a.I - b.I) <= EXPONENT_TOL &&\n Math.abs(a.Theta - b.Theta) <= EXPONENT_TOL &&\n Math.abs(a.N - b.N) <= EXPONENT_TOL &&\n Math.abs(a.J - b.J) <= EXPONENT_TOL\n );\n}\n\n/** Dimensional sum: requires equal dimensions, else throws `DimensionMismatchError`. */\nexport function add(a: Dimension, b: Dimension): Dimension {\n if (!equals(a, b)) {\n throw new DimensionMismatchError(\n `Cannot add unlike dimensions: ${format(a)} + ${format(b)}`,\n a,\n b,\n );\n }\n return { ...a };\n}\n\n/** Dimensional difference: requires equal dimensions, else throws `DimensionMismatchError`. */\nexport function subtract(a: Dimension, b: Dimension): Dimension {\n if (!equals(a, b)) {\n throw new DimensionMismatchError(\n `Cannot subtract unlike dimensions: ${format(a)} - ${format(b)}`,\n a,\n b,\n );\n }\n return { ...a };\n}\n\n/**\n * Format a `Dimension` for human display.\n *\n * Strategy:\n * 1. If `d` matches a named SI dimension exactly, return e.g. \"[energy]\".\n * \"dimensionless\" is rendered as \"[1]\" for compactness.\n * 2. Otherwise emit the bracketed product form, e.g. \"[M L^2 T^-2]\".\n * Bases with exponent 0 are omitted; exponent 1 is written without \"^1\".\n */\nexport function format(d: Dimension): string {\n for (const [name, ref] of NAMED_DIMENSIONS) {\n if (equals(d, ref)) {\n if (name === 'dimensionless') return '[1]';\n return `[${name}]`;\n }\n }\n const parts: string[] = [];\n for (const base of BASES) {\n const exp = d[base as Base];\n if (exp === 0) continue;\n if (exp === 1) parts.push(base);\n else parts.push(`${base}^${exp}`);\n }\n if (parts.length === 0) return '[1]';\n return `[${parts.join(' ')}]`;\n}\n\n/** Each base with its coherent SI unit, kilogram first (the order `siUnitOf` prints). @internal */\nexport const SI_BASE: readonly (readonly [keyof Dimension, string])[] = [\n ['M', 'kg'],\n ['L', 'm'],\n ['T', 's'],\n ['I', 'A'],\n ['Theta', 'K'],\n ['N', 'mol'],\n ['J', 'cd'],\n];\n\n/**\n * A dimension as SI base units, numerator before one `/` (`m^3/(kg*s^2)`), a bare denominator as\n * negative powers (`s^-1`), and `1` when dimensionless: the forms `parseUnit` reads back.\n */\nexport function siUnitOf(dim: Dimension): string {\n const factor = (u: string, e: number): string => (e === 1 ? u : `${u}^${e}`);\n const num = SI_BASE.filter(([k]) => dim[k] > 0).map(([k, u]) => factor(u, dim[k]));\n const den = SI_BASE.filter(([k]) => dim[k] < 0).map(([k, u]) => factor(u, -dim[k]));\n if (num.length === 0 && den.length === 0) return '1';\n if (num.length === 0) return SI_BASE.filter(([k]) => dim[k] < 0).map(([k, u]) => factor(u, dim[k])).join('*');\n if (den.length === 0) return num.join('*');\n return `${num.join('*')}/${den.length === 1 ? den[0] : `(${den.join('*')})`}`;\n}\n"]}
|
|
@@ -17,9 +17,17 @@ import type { Dimension } from './types.js';
|
|
|
17
17
|
/** A symbol-leaf `ExprNode` carrying its name and SI dimension. */
|
|
18
18
|
export declare function sym(name: string, dim: Dimension): ExprNode;
|
|
19
19
|
/**
|
|
20
|
-
* Build a `Dimension` from its
|
|
21
|
-
* (L, M, T, **I**,
|
|
22
|
-
* luminous-intensity (J) exponents
|
|
20
|
+
* Build a `Dimension` from its base exponents. Arg order is
|
|
21
|
+
* (L, M, T, **I**, **Θ**, N, J) — note I precedes Θ; every omitted exponent
|
|
22
|
+
* is 0, so the amount-of-substance (N) and luminous-intensity (J) exponents
|
|
23
|
+
* are reachable from the one builder.
|
|
23
24
|
*/
|
|
24
|
-
export declare function dim(L?: number, M?: number, T?: number, I?: number, Theta?: number): Dimension;
|
|
25
|
+
export declare function dim(L?: number, M?: number, T?: number, I?: number, Theta?: number, N?: number, J?: number): Dimension;
|
|
26
|
+
/**
|
|
27
|
+
* `base ^ exponent`, with the exponent a dimensionless literal written `String(exponent)`;
|
|
28
|
+
* exponent 1 returns `base` itself. The factor both monomial builders share
|
|
29
|
+
* (`monomialToExpr` in composition/probe/generator.ts, `fromMonomial` in
|
|
30
|
+
* composition/proposed-bridges.ts), which arrange their factors differently.
|
|
31
|
+
*/
|
|
32
|
+
export declare function symbolPower(base: ExprNode, exponent: number): ExprNode;
|
|
25
33
|
//# sourceMappingURL=ast-builders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-builders.d.ts","sourceRoot":"","sources":["../../src/dimensional/ast-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,mEAAmE;AACnE,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,QAAQ,CAE1D;AAED
|
|
1
|
+
{"version":3,"file":"ast-builders.d.ts","sourceRoot":"","sources":["../../src/dimensional/ast-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,mEAAmE;AACnE,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,QAAQ,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,KAAK,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,GAAG,SAAS,CAElF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAGtE"}
|
|
@@ -17,11 +17,23 @@ export function sym(name, dim) {
|
|
|
17
17
|
return { kind: 'symbol', name, dim };
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* Build a `Dimension` from its
|
|
21
|
-
* (L, M, T, **I**,
|
|
22
|
-
* luminous-intensity (J) exponents
|
|
20
|
+
* Build a `Dimension` from its base exponents. Arg order is
|
|
21
|
+
* (L, M, T, **I**, **Θ**, N, J) — note I precedes Θ; every omitted exponent
|
|
22
|
+
* is 0, so the amount-of-substance (N) and luminous-intensity (J) exponents
|
|
23
|
+
* are reachable from the one builder.
|
|
23
24
|
*/
|
|
24
|
-
export function dim(L = 0, M = 0, T = 0, I = 0, Theta = 0) {
|
|
25
|
-
return { L, M, T, I, Theta, N
|
|
25
|
+
export function dim(L = 0, M = 0, T = 0, I = 0, Theta = 0, N = 0, J = 0) {
|
|
26
|
+
return { L, M, T, I, Theta, N, J };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* `base ^ exponent`, with the exponent a dimensionless literal written `String(exponent)`;
|
|
30
|
+
* exponent 1 returns `base` itself. The factor both monomial builders share
|
|
31
|
+
* (`monomialToExpr` in composition/probe/generator.ts, `fromMonomial` in
|
|
32
|
+
* composition/proposed-bridges.ts), which arrange their factors differently.
|
|
33
|
+
*/
|
|
34
|
+
export function symbolPower(base, exponent) {
|
|
35
|
+
if (exponent === 1)
|
|
36
|
+
return base;
|
|
37
|
+
return { kind: 'op', op: '^', args: [base, sym(String(exponent), dim())] };
|
|
26
38
|
}
|
|
27
39
|
//# sourceMappingURL=ast-builders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-builders.js","sourceRoot":"","sources":["../../src/dimensional/ast-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,mEAAmE;AACnE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,GAAc;IAC9C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"ast-builders.js","sourceRoot":"","sources":["../../src/dimensional/ast-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,mEAAmE;AACnE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,GAAc;IAC9C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;IACrE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,QAAgB;IAC1D,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC","sourcesContent":["/**\n * Tiny pure builders for dimensional ASTs — `sym` (a symbol leaf) and `dim`\n * (a `Dimension` from its first five base exponents). These were copy-pasted\n * across the bridge-equation helpers, the canonical L1 builder, the\n * composition layer, and the formula transpiler; this module is their single\n * source of truth.\n *\n * Deliberately depends only on TYPES (`ExprNode`, `Dimension`), so it has no\n * runtime imports and can be imported from any layer without risking a cycle.\n * `_be-helpers` and `_l1-build` re-export `sym`/`dim` for their existing\n * importers, so most call sites are unchanged.\n *\n * @module dimensional/ast-builders\n */\n\nimport type { ExprNode } from './validator.js';\nimport type { Dimension } from './types.js';\n\n/** A symbol-leaf `ExprNode` carrying its name and SI dimension. */\nexport function sym(name: string, dim: Dimension): ExprNode {\n return { kind: 'symbol', name, dim };\n}\n\n/**\n * Build a `Dimension` from its base exponents. Arg order is\n * (L, M, T, **I**, **Θ**, N, J) — note I precedes Θ; every omitted exponent\n * is 0, so the amount-of-substance (N) and luminous-intensity (J) exponents\n * are reachable from the one builder.\n */\nexport function dim(L = 0, M = 0, T = 0, I = 0, Theta = 0, N = 0, J = 0): Dimension {\n return { L, M, T, I, Theta, N, J };\n}\n\n/**\n * `base ^ exponent`, with the exponent a dimensionless literal written `String(exponent)`;\n * exponent 1 returns `base` itself. The factor both monomial builders share\n * (`monomialToExpr` in composition/probe/generator.ts, `fromMonomial` in\n * composition/proposed-bridges.ts), which arrange their factors differently.\n */\nexport function symbolPower(base: ExprNode, exponent: number): ExprNode {\n if (exponent === 1) return base;\n return { kind: 'op', op: '^', args: [base, sym(String(exponent), dim())] };\n}\n"]}
|