universal-physics-tensor 10.0.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -36
- package/bin/upt.mjs +13 -1
- package/data/applied-cases.json +1892 -0
- package/data/applied-cases.schema.json +194 -0
- package/data/atlas/atlas.json +25 -25
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +6 -6
- package/data/atlas/oscillators.json +7 -7
- package/data/atlas/waves.json +14 -14
- package/data/atlas/witness-results.json +11 -11
- package/data/bridge-catalog.json +389 -230
- package/data/bridge-catalog.schema.json +45 -7
- package/data/units.json +6 -25
- package/dist/atlas/applicability.d.ts.map +1 -1
- package/dist/atlas/applicability.js +21 -15
- package/dist/atlas/applicability.js.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
- package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
- package/dist/atlas/benchmark/loader.js +2 -2
- package/dist/atlas/benchmark/loader.js.map +1 -1
- package/dist/atlas/benchmark/stats.d.ts +2 -2
- package/dist/atlas/benchmark/stats.d.ts.map +1 -1
- package/dist/atlas/benchmark/stats.js +9 -15
- package/dist/atlas/benchmark/stats.js.map +1 -1
- package/dist/atlas/catalog-formal-ref.d.ts +26 -3
- package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
- package/dist/atlas/catalog-formal-ref.js +52 -5
- package/dist/atlas/catalog-formal-ref.js.map +1 -1
- package/dist/atlas/chain-pipeline.d.ts.map +1 -1
- package/dist/atlas/chain-pipeline.js +7 -8
- package/dist/atlas/chain-pipeline.js.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.js +8 -12
- package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
- package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges.js +27 -39
- package/dist/atlas/diffusion/bridges.js.map +1 -1
- package/dist/atlas/diffusion/dimensions.d.ts +6 -14
- package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
- package/dist/atlas/diffusion/dimensions.js +8 -16
- package/dist/atlas/diffusion/dimensions.js.map +1 -1
- package/dist/atlas/diffusion/models.d.ts +3 -3
- package/dist/atlas/diffusion/models.d.ts.map +1 -1
- package/dist/atlas/diffusion/models.js +5 -10
- package/dist/atlas/diffusion/models.js.map +1 -1
- package/dist/atlas/diffusion/numerics.d.ts +16 -4
- package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
- package/dist/atlas/diffusion/numerics.js +38 -24
- package/dist/atlas/diffusion/numerics.js.map +1 -1
- package/dist/atlas/link-prediction.d.ts +106 -3
- package/dist/atlas/link-prediction.d.ts.map +1 -1
- package/dist/atlas/link-prediction.js +212 -66
- package/dist/atlas/link-prediction.js.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.js +7 -11
- package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.js +6 -7
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.js +23 -34
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
- package/dist/atlas/oscillators/dimensions.d.ts +9 -21
- package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
- package/dist/atlas/oscillators/dimensions.js +9 -21
- package/dist/atlas/oscillators/dimensions.js.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
- package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.js +17 -15
- package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
- package/dist/atlas/oscillators/models.d.ts.map +1 -1
- package/dist/atlas/oscillators/models.js +2 -6
- package/dist/atlas/oscillators/models.js.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
- package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.js +60 -40
- package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
- package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
- package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/phase-translation.js +3 -4
- package/dist/atlas/oscillators/phase-translation.js.map +1 -1
- package/dist/atlas/oscillators/position-translation.d.ts +68 -7
- package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/position-translation.js +123 -12
- package/dist/atlas/oscillators/position-translation.js.map +1 -1
- package/dist/atlas/oscillators/rejections.d.ts +0 -2
- package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
- package/dist/atlas/oscillators/rejections.js +0 -7
- package/dist/atlas/oscillators/rejections.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +35 -25
- package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
- package/dist/atlas/physjs-entries.generated.js +37 -25
- package/dist/atlas/physjs-entries.generated.js.map +1 -1
- package/dist/atlas/physjs-ref.d.ts +34 -31
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +55 -53
- package/dist/atlas/physjs-ref.js.map +1 -1
- package/dist/atlas/physjs-reviewed.d.ts +1 -1
- package/dist/atlas/physjs-reviewed.js +15 -15
- package/dist/atlas/physjs-reviewed.js.map +1 -1
- package/dist/atlas/poster/statements.d.ts +0 -19
- package/dist/atlas/poster/statements.d.ts.map +1 -1
- package/dist/atlas/poster/statements.js +1 -1
- package/dist/atlas/poster/statements.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +1 -1
- package/dist/atlas/proof-target.js +1 -1
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/atlas/regime.d.ts +1 -1
- package/dist/atlas/regime.d.ts.map +1 -1
- package/dist/atlas/regime.js +1 -1
- package/dist/atlas/regime.js.map +1 -1
- package/dist/atlas/text-overlap.d.ts +23 -0
- package/dist/atlas/text-overlap.d.ts.map +1 -0
- package/dist/atlas/text-overlap.js +41 -0
- package/dist/atlas/text-overlap.js.map +1 -0
- package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/waves/bridges-closure.js +2 -6
- package/dist/atlas/waves/bridges-closure.js.map +1 -1
- package/dist/atlas/waves/bridges.d.ts.map +1 -1
- package/dist/atlas/waves/bridges.js +32 -48
- package/dist/atlas/waves/bridges.js.map +1 -1
- package/dist/atlas/waves/models.d.ts +5 -6
- package/dist/atlas/waves/models.d.ts.map +1 -1
- package/dist/atlas/waves/models.js +7 -13
- package/dist/atlas/waves/models.js.map +1 -1
- package/dist/atlas/waves/numerics.d.ts.map +1 -1
- package/dist/atlas/waves/numerics.js +10 -3
- package/dist/atlas/waves/numerics.js.map +1 -1
- package/dist/atlas/witness-numeric.d.ts +30 -0
- package/dist/atlas/witness-numeric.d.ts.map +1 -1
- package/dist/atlas/witness-numeric.js +53 -0
- package/dist/atlas/witness-numeric.js.map +1 -1
- package/dist/atlas/witness-specs.d.ts.map +1 -1
- package/dist/atlas/witness-specs.js +19 -0
- package/dist/atlas/witness-specs.js.map +1 -1
- package/dist/atlas/witness-symbolic.d.ts +75 -3
- package/dist/atlas/witness-symbolic.d.ts.map +1 -1
- package/dist/atlas/witness-symbolic.js +116 -10
- package/dist/atlas/witness-symbolic.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +13 -8
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +26 -2
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/catalog-types.js +11 -1
- package/dist/bridges/catalog-types.js.map +1 -1
- package/dist/bridges/evaluation-errors.d.ts +31 -1
- package/dist/bridges/evaluation-errors.d.ts.map +1 -1
- package/dist/bridges/evaluation-errors.js +20 -2
- package/dist/bridges/evaluation-errors.js.map +1 -1
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +7 -5
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +27 -12
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +11 -0
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +14 -5
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +35 -3
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +117 -23
- package/dist/bridges/holds.js.map +1 -1
- package/dist/bridges/notices.d.ts.map +1 -1
- package/dist/bridges/notices.js +5 -5
- package/dist/bridges/notices.js.map +1 -1
- package/dist/bridges/relation-eval.d.ts +4 -4
- package/dist/bridges/relation-eval.d.ts.map +1 -1
- package/dist/bridges/relation-eval.js +15 -16
- package/dist/bridges/relation-eval.js.map +1 -1
- package/dist/bridges/sensitivity.d.ts.map +1 -1
- package/dist/bridges/sensitivity.js +3 -3
- package/dist/bridges/sensitivity.js.map +1 -1
- package/dist/bridges/validity.d.ts +33 -0
- package/dist/bridges/validity.d.ts.map +1 -0
- package/dist/bridges/validity.js +67 -0
- package/dist/bridges/validity.js.map +1 -0
- package/dist/canonical/entries/atomic.js +1 -3
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
- package/dist/canonical/entries/condensed-matter.js +4 -5
- package/dist/canonical/entries/condensed-matter.js.map +1 -1
- package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
- package/dist/canonical/entries/dimensional-classics.js +3 -4
- package/dist/canonical/entries/dimensional-classics.js.map +1 -1
- package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
- package/dist/canonical/entries/electromagnetism.js +4 -10
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +3 -7
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/mechanics.js +4 -6
- package/dist/canonical/entries/mechanics.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +9 -17
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/entries/relativity.d.ts.map +1 -1
- package/dist/canonical/entries/relativity.js +6 -6
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/fixed-points.d.ts +94 -0
- package/dist/canonical/fixed-points.d.ts.map +1 -0
- package/dist/canonical/fixed-points.js +81 -0
- package/dist/canonical/fixed-points.js.map +1 -0
- package/dist/canonical/linkage.d.ts.map +1 -1
- package/dist/canonical/linkage.js +25 -44
- package/dist/canonical/linkage.js.map +1 -1
- package/dist/canonical/normal-form.d.ts.map +1 -1
- package/dist/canonical/normal-form.js +5 -11
- package/dist/canonical/normal-form.js.map +1 -1
- package/dist/canonical/structural.d.ts +21 -21
- package/dist/canonical/structural.d.ts.map +1 -1
- package/dist/canonical/structural.js +40 -19
- package/dist/canonical/structural.js.map +1 -1
- package/dist/cases/catalog-checks.d.ts +10 -0
- package/dist/cases/catalog-checks.d.ts.map +1 -0
- package/dist/cases/catalog-checks.js +241 -0
- package/dist/cases/catalog-checks.js.map +1 -0
- package/dist/cases/catalog.d.ts +83 -0
- package/dist/cases/catalog.d.ts.map +1 -0
- package/dist/cases/catalog.js +118 -0
- package/dist/cases/catalog.js.map +1 -0
- package/dist/cases/engine.d.ts +13 -0
- package/dist/cases/engine.d.ts.map +1 -0
- package/dist/cases/engine.js +179 -0
- package/dist/cases/engine.js.map +1 -0
- package/dist/cases/index.d.ts.map +1 -1
- package/dist/cases/index.js +5 -7
- package/dist/cases/index.js.map +1 -1
- package/dist/cases/methods.d.ts +215 -0
- package/dist/cases/methods.d.ts.map +1 -0
- package/dist/cases/methods.js +743 -0
- package/dist/cases/methods.js.map +1 -0
- package/dist/cases/quadrature.d.ts +7 -9
- package/dist/cases/quadrature.d.ts.map +1 -1
- package/dist/cases/quadrature.js +28 -32
- package/dist/cases/quadrature.js.map +1 -1
- package/dist/cases/types.d.ts +12 -0
- package/dist/cases/types.d.ts.map +1 -1
- package/dist/cases/types.js.map +1 -1
- package/dist/cli/args.d.ts +25 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +30 -8
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bindings.d.ts.map +1 -1
- package/dist/cli/bindings.js +5 -4
- package/dist/cli/bindings.js.map +1 -1
- package/dist/cli/command.d.ts +11 -1
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/_atlas-map.d.ts +0 -9
- package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-map.js +8 -18
- package/dist/cli/commands/_atlas-map.js.map +1 -1
- package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-route.js +6 -2
- package/dist/cli/commands/_atlas-route.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts +1 -0
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +9 -9
- package/dist/cli/commands/_discovery-opts.js.map +1 -1
- package/dist/cli/commands/atlas.d.ts.map +1 -1
- package/dist/cli/commands/atlas.js +8 -5
- package/dist/cli/commands/atlas.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +8 -1
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/axes.d.ts.map +1 -1
- package/dist/cli/commands/axes.js +20 -1
- package/dist/cli/commands/axes.js.map +1 -1
- package/dist/cli/commands/confront.d.ts.map +1 -1
- package/dist/cli/commands/confront.js +8 -14
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +22 -22
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +122 -73
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +1 -0
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +67 -39
- package/dist/cli/commands/evaluate.js.map +1 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +24 -3
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/ground.d.ts.map +1 -1
- package/dist/cli/commands/ground.js +7 -1
- package/dist/cli/commands/ground.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +84 -11
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli/commands/metric.d.ts.map +1 -1
- package/dist/cli/commands/metric.js +12 -9
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/path.d.ts +10 -0
- package/dist/cli/commands/path.d.ts.map +1 -1
- package/dist/cli/commands/path.js +25 -3
- package/dist/cli/commands/path.js.map +1 -1
- package/dist/cli/commands/probe.d.ts.map +1 -1
- package/dist/cli/commands/probe.js +59 -16
- package/dist/cli/commands/probe.js.map +1 -1
- package/dist/cli/commands/regime.d.ts.map +1 -1
- package/dist/cli/commands/regime.js +1 -0
- package/dist/cli/commands/regime.js.map +1 -1
- package/dist/cli/commands/retrieve.d.ts.map +1 -1
- package/dist/cli/commands/retrieve.js +1 -0
- package/dist/cli/commands/retrieve.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +1 -0
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/symbolic.d.ts.map +1 -1
- package/dist/cli/commands/symbolic.js +19 -28
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.d.ts.map +1 -1
- package/dist/cli/commands/testplan.js +4 -2
- package/dist/cli/commands/testplan.js.map +1 -1
- package/dist/cli/determination.d.ts +1 -0
- package/dist/cli/determination.d.ts.map +1 -1
- package/dist/cli/determination.js.map +1 -1
- package/dist/cli/expr-print.d.ts +0 -2
- package/dist/cli/expr-print.d.ts.map +1 -1
- package/dist/cli/expr-print.js +7 -31
- package/dist/cli/expr-print.js.map +1 -1
- package/dist/cli/flag-help.d.ts +1 -0
- package/dist/cli/flag-help.d.ts.map +1 -1
- package/dist/cli/flag-help.js +1 -0
- package/dist/cli/flag-help.js.map +1 -1
- package/dist/cli/graphs.d.ts +2 -0
- package/dist/cli/graphs.d.ts.map +1 -1
- package/dist/cli/graphs.js +1 -0
- package/dist/cli/graphs.js.map +1 -1
- package/dist/cli/main.d.ts +8 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +19 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/numeric-flag.d.ts +12 -0
- package/dist/cli/numeric-flag.d.ts.map +1 -0
- package/dist/cli/numeric-flag.js +44 -0
- package/dist/cli/numeric-flag.js.map +1 -0
- package/dist/cli/output.d.ts +28 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +23 -0
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/record-reach.js +2 -2
- package/dist/cli/record-reach.js.map +1 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +6 -5
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli/record.d.ts +1 -5
- package/dist/cli/record.d.ts.map +1 -1
- package/dist/cli/record.js +9 -8
- package/dist/cli/record.js.map +1 -1
- package/dist/cli/search-index.d.ts.map +1 -1
- package/dist/cli/search-index.js +7 -6
- package/dist/cli/search-index.js.map +1 -1
- package/dist/cli/statuses.d.ts +0 -2
- package/dist/cli/statuses.d.ts.map +1 -1
- package/dist/cli/statuses.js +12 -9
- package/dist/cli/statuses.js.map +1 -1
- package/dist/cli/stored-results.d.ts +7 -0
- package/dist/cli/stored-results.d.ts.map +1 -0
- package/dist/cli/stored-results.js +23 -0
- package/dist/cli/stored-results.js.map +1 -0
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +8 -5
- package/dist/cli/version.js.map +1 -1
- package/dist/cli-api.d.ts +36 -5
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +30 -4
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/algebraic-equivalence.d.ts +43 -0
- package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
- package/dist/composition/algebraic-equivalence.js +115 -0
- package/dist/composition/algebraic-equivalence.js.map +1 -0
- package/dist/composition/axes.d.ts +0 -6
- package/dist/composition/axes.d.ts.map +1 -1
- package/dist/composition/axes.js +6 -6
- package/dist/composition/axes.js.map +1 -1
- package/dist/composition/axis-audit.d.ts +47 -20
- package/dist/composition/axis-audit.d.ts.map +1 -1
- package/dist/composition/axis-audit.js +82 -9
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +17 -0
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +102 -55
- package/dist/composition/bridge-analysis.js.map +1 -1
- package/dist/composition/canonical-compare.d.ts +40 -0
- package/dist/composition/canonical-compare.d.ts.map +1 -1
- package/dist/composition/canonical-compare.js +122 -24
- package/dist/composition/canonical-compare.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +3 -3
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +11 -38
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-json.js +2 -2
- package/dist/composition/canonical-json.js.map +1 -1
- package/dist/composition/catalog-graph.d.ts.map +1 -1
- package/dist/composition/catalog-graph.js +2 -5
- package/dist/composition/catalog-graph.js.map +1 -1
- package/dist/composition/chain-candidate.d.ts +8 -0
- package/dist/composition/chain-candidate.d.ts.map +1 -1
- package/dist/composition/chain-candidate.js +9 -2
- package/dist/composition/chain-candidate.js.map +1 -1
- package/dist/composition/chain-match.d.ts +6 -3
- package/dist/composition/chain-match.d.ts.map +1 -1
- package/dist/composition/chain-match.js +4 -1
- package/dist/composition/chain-match.js.map +1 -1
- package/dist/composition/chain-result.d.ts.map +1 -1
- package/dist/composition/chain-result.js +2 -14
- package/dist/composition/chain-result.js.map +1 -1
- package/dist/composition/compose-symbolic.d.ts.map +1 -1
- package/dist/composition/compose-symbolic.js +3 -2
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +13 -5
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/composition-recovery.d.ts.map +1 -1
- package/dist/composition/composition-recovery.js +4 -7
- package/dist/composition/composition-recovery.js.map +1 -1
- package/dist/composition/consequence.d.ts +15 -5
- package/dist/composition/consequence.d.ts.map +1 -1
- package/dist/composition/consequence.js +6 -4
- package/dist/composition/consequence.js.map +1 -1
- package/dist/composition/discovery.d.ts +129 -9
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +171 -67
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +21 -2
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +23 -1
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/enumerate.d.ts.map +1 -1
- package/dist/composition/enumerate.js +18 -3
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +35 -11
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +60 -39
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +3 -12
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +7 -20
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts +1 -1
- package/dist/composition/expr-eval.d.ts.map +1 -1
- package/dist/composition/expr-eval.js +6 -15
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/expr-simplify.d.ts +26 -14
- package/dist/composition/expr-simplify.d.ts.map +1 -1
- package/dist/composition/expr-simplify.js +64 -72
- package/dist/composition/expr-simplify.js.map +1 -1
- package/dist/composition/formula-shape.d.ts +23 -4
- package/dist/composition/formula-shape.d.ts.map +1 -1
- package/dist/composition/formula-shape.js +57 -17
- package/dist/composition/formula-shape.js.map +1 -1
- package/dist/composition/graph-structure.d.ts +98 -0
- package/dist/composition/graph-structure.d.ts.map +1 -0
- package/dist/composition/graph-structure.js +167 -0
- package/dist/composition/graph-structure.js.map +1 -0
- package/dist/composition/graph-viz-svg.d.ts.map +1 -1
- package/dist/composition/graph-viz-svg.js +1 -1
- package/dist/composition/graph-viz-svg.js.map +1 -1
- package/dist/composition/graph-viz.d.ts.map +1 -1
- package/dist/composition/graph-viz.js +8 -37
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/grounding.d.ts.map +1 -1
- package/dist/composition/grounding.js +19 -7
- package/dist/composition/grounding.js.map +1 -1
- package/dist/composition/identifiability.d.ts +91 -4
- package/dist/composition/identifiability.d.ts.map +1 -1
- package/dist/composition/identifiability.js +363 -6
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +8 -4
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +3 -2
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/mathts-quiet.d.ts +7 -8
- package/dist/composition/mathts-quiet.d.ts.map +1 -1
- package/dist/composition/mathts-quiet.js +7 -16
- package/dist/composition/mathts-quiet.js.map +1 -1
- package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
- package/dist/composition/mathts-scalar-symbols.js +2 -1
- package/dist/composition/mathts-scalar-symbols.js.map +1 -1
- package/dist/composition/own-equation-magnitude.d.ts +95 -0
- package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
- package/dist/composition/own-equation-magnitude.js +270 -0
- package/dist/composition/own-equation-magnitude.js.map +1 -0
- package/dist/composition/probe/backend-protocol.d.ts +3 -0
- package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
- package/dist/composition/probe/backend-protocol.js.map +1 -1
- package/dist/composition/probe/candidate-store.d.ts +1 -0
- package/dist/composition/probe/candidate-store.d.ts.map +1 -1
- package/dist/composition/probe/candidate-store.js +1 -0
- package/dist/composition/probe/candidate-store.js.map +1 -1
- package/dist/composition/probe/corpus.d.ts +8 -4
- package/dist/composition/probe/corpus.d.ts.map +1 -1
- package/dist/composition/probe/corpus.js +23 -12
- package/dist/composition/probe/corpus.js.map +1 -1
- package/dist/composition/probe/dataset.d.ts +18 -0
- package/dist/composition/probe/dataset.d.ts.map +1 -1
- package/dist/composition/probe/dataset.js +95 -50
- package/dist/composition/probe/dataset.js.map +1 -1
- package/dist/composition/probe/experiment-design.d.ts +7 -1
- package/dist/composition/probe/experiment-design.d.ts.map +1 -1
- package/dist/composition/probe/experiment-design.js +44 -24
- package/dist/composition/probe/experiment-design.js.map +1 -1
- package/dist/composition/probe/falsify.d.ts +2 -0
- package/dist/composition/probe/falsify.d.ts.map +1 -1
- package/dist/composition/probe/falsify.js +2 -0
- package/dist/composition/probe/falsify.js.map +1 -1
- package/dist/composition/probe/fit.d.ts +7 -0
- package/dist/composition/probe/fit.d.ts.map +1 -1
- package/dist/composition/probe/fit.js +46 -22
- package/dist/composition/probe/fit.js.map +1 -1
- package/dist/composition/probe/frontier.d.ts.map +1 -1
- package/dist/composition/probe/frontier.js +33 -15
- package/dist/composition/probe/frontier.js.map +1 -1
- package/dist/composition/probe/generator.d.ts +30 -1
- package/dist/composition/probe/generator.d.ts.map +1 -1
- package/dist/composition/probe/generator.js +58 -36
- package/dist/composition/probe/generator.js.map +1 -1
- package/dist/composition/probe/index.d.ts +14 -0
- package/dist/composition/probe/index.d.ts.map +1 -1
- package/dist/composition/probe/index.js +6 -0
- package/dist/composition/probe/index.js.map +1 -1
- package/dist/composition/probe/limits.d.ts +25 -1
- package/dist/composition/probe/limits.d.ts.map +1 -1
- package/dist/composition/probe/limits.js +53 -11
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/pipeline.d.ts +5 -0
- package/dist/composition/probe/pipeline.d.ts.map +1 -1
- package/dist/composition/probe/pipeline.js +73 -24
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/power-law.d.ts +121 -0
- package/dist/composition/probe/power-law.d.ts.map +1 -0
- package/dist/composition/probe/power-law.js +251 -0
- package/dist/composition/probe/power-law.js.map +1 -0
- package/dist/composition/probe/problem.d.ts +8 -4
- package/dist/composition/probe/problem.d.ts.map +1 -1
- package/dist/composition/probe/problem.js +177 -49
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.js +1 -1
- package/dist/composition/probe/report.js.map +1 -1
- package/dist/composition/probe/residual.d.ts +7 -1
- package/dist/composition/probe/residual.d.ts.map +1 -1
- package/dist/composition/probe/residual.js +10 -7
- package/dist/composition/probe/residual.js.map +1 -1
- package/dist/composition/probe/run-manifest.d.ts +1 -0
- package/dist/composition/probe/run-manifest.d.ts.map +1 -1
- package/dist/composition/probe/run-manifest.js.map +1 -1
- package/dist/composition/probe/scalar-search.d.ts +50 -0
- package/dist/composition/probe/scalar-search.d.ts.map +1 -0
- package/dist/composition/probe/scalar-search.js +169 -0
- package/dist/composition/probe/scalar-search.js.map +1 -0
- package/dist/composition/probe/scoring.d.ts +1 -0
- package/dist/composition/probe/scoring.d.ts.map +1 -1
- package/dist/composition/probe/scoring.js.map +1 -1
- package/dist/composition/probe/structure.d.ts +82 -17
- package/dist/composition/probe/structure.d.ts.map +1 -1
- package/dist/composition/probe/structure.js +129 -55
- package/dist/composition/probe/structure.js.map +1 -1
- package/dist/composition/probe/study.d.ts +31 -9
- package/dist/composition/probe/study.d.ts.map +1 -1
- package/dist/composition/probe/study.js +235 -184
- package/dist/composition/probe/study.js.map +1 -1
- package/dist/composition/probe/t-tail.d.ts +16 -0
- package/dist/composition/probe/t-tail.d.ts.map +1 -0
- package/dist/composition/probe/t-tail.js +29 -0
- package/dist/composition/probe/t-tail.js.map +1 -0
- package/dist/composition/probe/types.d.ts +3 -0
- package/dist/composition/probe/types.d.ts.map +1 -1
- package/dist/composition/probe/types.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts +52 -12
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +107 -60
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/quantity-clusters.d.ts +48 -0
- package/dist/composition/quantity-clusters.d.ts.map +1 -0
- package/dist/composition/quantity-clusters.js +98 -0
- package/dist/composition/quantity-clusters.js.map +1 -0
- package/dist/composition/rational-exponent.d.ts +40 -0
- package/dist/composition/rational-exponent.d.ts.map +1 -0
- package/dist/composition/rational-exponent.js +65 -0
- package/dist/composition/rational-exponent.js.map +1 -0
- package/dist/composition/representative-values.d.ts +22 -0
- package/dist/composition/representative-values.d.ts.map +1 -1
- package/dist/composition/representative-values.js +29 -0
- package/dist/composition/representative-values.js.map +1 -1
- package/dist/composition/retrodiction.d.ts +15 -0
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +12 -4
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/user-equation.d.ts +1 -0
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/composition/user-equation.js +3 -2
- package/dist/composition/user-equation.js.map +1 -1
- package/dist/core/assignment.d.ts +19 -0
- package/dist/core/assignment.d.ts.map +1 -0
- package/dist/core/assignment.js +19 -0
- package/dist/core/assignment.js.map +1 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.d.ts.map +1 -0
- package/dist/core/compare.js +46 -0
- package/dist/core/compare.js.map +1 -0
- package/dist/core/constants.d.ts +42 -41
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +71 -51
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +7 -0
- package/dist/core/data-file.d.ts.map +1 -1
- package/dist/core/data-file.js +17 -0
- package/dist/core/data-file.js.map +1 -1
- package/dist/core/format.d.ts +36 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +39 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/hash.d.ts +14 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +17 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/json-schema.d.ts +2 -0
- package/dist/core/json-schema.d.ts.map +1 -1
- package/dist/core/json-schema.js +14 -13
- package/dist/core/json-schema.js.map +1 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/labeled-tensor.js +0 -8
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/mathts-read.d.ts +25 -0
- package/dist/core/mathts-read.d.ts.map +1 -0
- package/dist/core/mathts-read.js +51 -0
- package/dist/core/mathts-read.js.map +1 -0
- package/dist/core/tensor.d.ts.map +1 -1
- package/dist/core/tensor.js +24 -0
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts +5 -5
- package/dist/diff/bridge-ast-gradient.d.ts +27 -23
- package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-ast-gradient.js +75 -173
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/diff/bridge-gradient.d.ts +19 -6
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +19 -11
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +3 -0
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/algebra.d.ts +18 -0
- package/dist/dimensional/algebra.d.ts.map +1 -1
- package/dist/dimensional/algebra.js +41 -1
- package/dist/dimensional/algebra.js.map +1 -1
- package/dist/dimensional/ast-builders.d.ts +7 -0
- package/dist/dimensional/ast-builders.d.ts.map +1 -1
- package/dist/dimensional/ast-builders.js +11 -0
- package/dist/dimensional/ast-builders.js.map +1 -1
- package/dist/dimensional/ast-leaves.d.ts +81 -0
- package/dist/dimensional/ast-leaves.d.ts.map +1 -0
- package/dist/dimensional/ast-leaves.js +146 -0
- package/dist/dimensional/ast-leaves.js.map +1 -0
- package/dist/dimensional/ast-types.d.ts +15 -0
- package/dist/dimensional/ast-types.d.ts.map +1 -1
- package/dist/dimensional/ast-types.js.map +1 -1
- package/dist/dimensional/buckingham.d.ts.map +1 -1
- package/dist/dimensional/buckingham.js +15 -27
- package/dist/dimensional/buckingham.js.map +1 -1
- package/dist/dimensional/constant-rows.js +9 -9
- package/dist/dimensional/constant-rows.js.map +1 -1
- package/dist/dimensional/curvature-composite.d.ts +1 -1
- package/dist/dimensional/curvature-composite.js.map +1 -1
- package/dist/dimensional/dimension-inference.d.ts.map +1 -1
- package/dist/dimensional/dimension-inference.js +1 -2
- package/dist/dimensional/dimension-inference.js.map +1 -1
- package/dist/dimensional/errors.d.ts +1 -1
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/errors.js +1 -15
- package/dist/dimensional/errors.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +24 -11
- package/dist/dimensional/exact-scale.d.ts.map +1 -1
- package/dist/dimensional/exact-scale.js +122 -130
- package/dist/dimensional/exact-scale.js.map +1 -1
- package/dist/dimensional/gauge-field.d.ts.map +1 -1
- package/dist/dimensional/gauge-field.js +2 -2
- package/dist/dimensional/gauge-field.js.map +1 -1
- package/dist/dimensional/hyphen-names.d.ts +12 -2
- package/dist/dimensional/hyphen-names.d.ts.map +1 -1
- package/dist/dimensional/hyphen-names.js +44 -19
- package/dist/dimensional/hyphen-names.js.map +1 -1
- package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
- package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
- package/dist/dimensional/mathts-unit-delegation.js +187 -0
- package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
- package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
- package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
- package/dist/dimensional/mathts-unit-wrapper.js +190 -0
- package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
- package/dist/dimensional/metric.d.ts.map +1 -1
- package/dist/dimensional/metric.js +0 -1
- package/dist/dimensional/metric.js.map +1 -1
- package/dist/dimensional/scalar-lowering.d.ts +21 -0
- package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
- package/dist/dimensional/scalar-lowering.js +45 -0
- package/dist/dimensional/scalar-lowering.js.map +1 -0
- package/dist/dimensional/symbolic-constants.d.ts +9 -0
- package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
- package/dist/dimensional/symbolic-constants.js +13 -1
- package/dist/dimensional/symbolic-constants.js.map +1 -1
- package/dist/dimensional/types.d.ts +36 -0
- package/dist/dimensional/types.d.ts.map +1 -1
- package/dist/dimensional/types.js +45 -7
- package/dist/dimensional/types.js.map +1 -1
- package/dist/dimensional/unit-data.d.ts +5 -1
- package/dist/dimensional/unit-data.d.ts.map +1 -1
- package/dist/dimensional/unit-data.js +30 -6
- package/dist/dimensional/unit-data.js.map +1 -1
- package/dist/dimensional/units.d.ts +2 -0
- package/dist/dimensional/units.d.ts.map +1 -1
- package/dist/dimensional/units.js +59 -3
- package/dist/dimensional/units.js.map +1 -1
- package/dist/dimensional/validator.d.ts +2 -0
- package/dist/dimensional/validator.d.ts.map +1 -1
- package/dist/dimensional/validator.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/numerical/christoffel-flat.d.ts.map +1 -1
- package/dist/numerical/christoffel-flat.js +3 -2
- package/dist/numerical/christoffel-flat.js.map +1 -1
- package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
- package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
- package/dist/numerical/connection-lowering-helpers.js +11 -15
- package/dist/numerical/connection-lowering-helpers.js.map +1 -1
- package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
- package/dist/numerical/covariant-eikonal.js +34 -11
- package/dist/numerical/covariant-eikonal.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +3 -2
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/errors.d.ts.map +1 -1
- package/dist/numerical/errors.js +0 -3
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/finite-difference.d.ts +22 -0
- package/dist/numerical/finite-difference.d.ts.map +1 -0
- package/dist/numerical/finite-difference.js +27 -0
- package/dist/numerical/finite-difference.js.map +1 -0
- package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
- package/dist/numerical/geodesic-integrator.js +22 -14
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/geometrized.d.ts.map +1 -1
- package/dist/numerical/geometrized.js +0 -1
- package/dist/numerical/geometrized.js.map +1 -1
- package/dist/numerical/mathts-engine.d.ts.map +1 -1
- package/dist/numerical/mathts-engine.js +10 -24
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.d.ts.map +1 -1
- package/dist/numerical/metric-inverse.js +83 -46
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/null-ray-integrator.d.ts +2 -1
- package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
- package/dist/numerical/null-ray-integrator.js +12 -12
- package/dist/numerical/null-ray-integrator.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js +2 -2
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/pderiv.d.ts.map +1 -1
- package/dist/numerical/pderiv.js +2 -6
- package/dist/numerical/pderiv.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +0 -36
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +41 -87
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/quadrature.d.ts.map +1 -1
- package/dist/numerical/quadrature.js +11 -13
- package/dist/numerical/quadrature.js.map +1 -1
- package/dist/numerical/rk4-trajectory.d.ts +10 -0
- package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
- package/dist/numerical/rk4-trajectory.js +37 -0
- package/dist/numerical/rk4-trajectory.js.map +1 -0
- package/dist/numerical/schwarzschild.d.ts +14 -0
- package/dist/numerical/schwarzschild.d.ts.map +1 -0
- package/dist/numerical/schwarzschild.js +17 -0
- package/dist/numerical/schwarzschild.js.map +1 -0
- package/dist/numerical/spacetime-metrics.d.ts +12 -0
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +72 -56
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/numerical/statistics.d.ts +24 -0
- package/dist/numerical/statistics.d.ts.map +1 -0
- package/dist/numerical/statistics.js +52 -0
- package/dist/numerical/statistics.js.map +1 -0
- package/dist/numerical/strides.d.ts +3 -2
- package/dist/numerical/strides.d.ts.map +1 -1
- package/dist/numerical/strides.js +3 -10
- package/dist/numerical/strides.js.map +1 -1
- package/dist/numerical/tensor-engine.d.ts +21 -0
- package/dist/numerical/tensor-engine.d.ts.map +1 -1
- package/dist/numerical/tensor-engine.js +12 -0
- package/dist/numerical/tensor-engine.js.map +1 -1
- package/dist/relations/regime.d.ts +10 -0
- package/dist/relations/regime.d.ts.map +1 -1
- package/dist/relations/regime.js +18 -1
- package/dist/relations/regime.js.map +1 -1
- package/package.json +9 -12
- package/dist/cases/brownian-sphere.d.ts +0 -68
- package/dist/cases/brownian-sphere.d.ts.map +0 -1
- package/dist/cases/brownian-sphere.js +0 -354
- package/dist/cases/brownian-sphere.js.map +0 -1
- package/dist/cases/damped-resonator.d.ts +0 -23
- package/dist/cases/damped-resonator.d.ts.map +0 -1
- package/dist/cases/damped-resonator.js +0 -224
- package/dist/cases/damped-resonator.js.map +0 -1
- package/dist/cases/kepler-rv.d.ts +0 -13
- package/dist/cases/kepler-rv.d.ts.map +0 -1
- package/dist/cases/kepler-rv.js +0 -172
- package/dist/cases/kepler-rv.js.map +0 -1
- package/dist/cases/lumped-cooling.d.ts +0 -46
- package/dist/cases/lumped-cooling.d.ts.map +0 -1
- package/dist/cases/lumped-cooling.js +0 -261
- package/dist/cases/lumped-cooling.js.map +0 -1
- package/dist/cases/resistor-noise.d.ts +0 -14
- package/dist/cases/resistor-noise.d.ts.map +0 -1
- package/dist/cases/resistor-noise.js +0 -215
- package/dist/cases/resistor-noise.js.map +0 -1
- package/dist/cases/skin-depth.d.ts +0 -21
- package/dist/cases/skin-depth.d.ts.map +0 -1
- package/dist/cases/skin-depth.js +0 -174
- package/dist/cases/skin-depth.js.map +0 -1
|
@@ -24,14 +24,16 @@
|
|
|
24
24
|
* @module composition/bridge-analysis
|
|
25
25
|
*/
|
|
26
26
|
import { constantRecord } from '../dimensional/symbolic-constants.js';
|
|
27
|
+
import { constantRatio, fixedPoint } from '../canonical/fixed-points.js';
|
|
28
|
+
import { rationalize } from './rational-exponent.js';
|
|
27
29
|
import { buckinghamPi, dimensionallyDetermines } from '../dimensional/buckingham.js';
|
|
28
30
|
import { DIMENSIONLESS } from '../dimensional/types.js';
|
|
29
31
|
import { equals, format } from '../dimensional/algebra.js';
|
|
30
32
|
import { formulaShape } from './formula-shape.js';
|
|
31
33
|
import { BRIDGE_EQUATIONS } from '../bridges/index.js';
|
|
32
|
-
import { QUANTITY_IDENTIFICATIONS } from './compose.js';
|
|
33
34
|
import { enumerateCompositions } from './enumerate.js';
|
|
34
35
|
import { DATA_CONFRONTED_IDS } from '../bridges/confrontation-coverage.js';
|
|
36
|
+
import { clusterBySharedKeys, quantityCanonicalizer } from './quantity-clusters.js';
|
|
35
37
|
/** ℏ, c, G, k_B, e — the constants the audit/triage may invoke, from the registry. */
|
|
36
38
|
// The constants a canonical or catalog relation bakes: a closure is searched over every subset.
|
|
37
39
|
// `epsilon_0` and `m_e` joined on 2026-10-09, when the canonical entries that spelled them as
|
|
@@ -128,10 +130,8 @@ function makeInputs(e) {
|
|
|
128
130
|
}
|
|
129
131
|
};
|
|
130
132
|
for (let j = 0; j < 3; j++) {
|
|
131
|
-
|
|
132
|
-
e.sources.
|
|
133
|
-
magnitudes[s.name] = Math.pow(1.6 + i, 1 + 0.27 * j);
|
|
134
|
-
});
|
|
133
|
+
// Source i takes (1.6 + i)^(1 + 0.27 j): this audit's own scheme, stated here.
|
|
134
|
+
const magnitudes = fixedPoint(e.sources.map((s) => s.name), 1 + 0.27 * j, { base: 1.6, step: 1 });
|
|
135
135
|
// A negated source is tried only when the DOMAIN refuses the positive point (a carrier
|
|
136
136
|
// charge that must be negative). A positive point the domain admits but the evaluator
|
|
137
137
|
// cannot finish (an exponential that overflows, be-82) is a degenerate sample and not a
|
|
@@ -150,20 +150,91 @@ function makeInputs(e) {
|
|
|
150
150
|
}
|
|
151
151
|
return sets;
|
|
152
152
|
}
|
|
153
|
-
/**
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
];
|
|
160
|
-
|
|
153
|
+
/** The denominator cap of a clean rational: the Buckingham enumerator's. */
|
|
154
|
+
const CLEAN_MAX_DENOMINATOR = 720;
|
|
155
|
+
/** The relative tolerance of a clean hit: the one the derivation fit uses. */
|
|
156
|
+
const CLEAN_TOLERANCE = 1e-9;
|
|
157
|
+
/** The (a, b) pairs of π^a · ln2^b, the simplest first. */
|
|
158
|
+
const CLEAN_EXPONENT_PAIRS = (() => {
|
|
159
|
+
const pairs = [];
|
|
160
|
+
for (let a = -2; a <= 2; a++)
|
|
161
|
+
for (let b = -1; b <= 1; b++)
|
|
162
|
+
pairs.push([a, b]);
|
|
163
|
+
pairs.sort((x, y) => Math.abs(x[0]) + Math.abs(x[1]) - (Math.abs(y[0]) + Math.abs(y[1])) || Math.abs(x[0]) - Math.abs(y[0]));
|
|
164
|
+
return pairs;
|
|
165
|
+
})();
|
|
166
|
+
/** `π`, `π²`, `ln 2`, `(ln 2)²`, as a product string. */
|
|
167
|
+
function symbolicFactor(a, b) {
|
|
168
|
+
const parts = [];
|
|
169
|
+
if (a === 1)
|
|
170
|
+
parts.push('π');
|
|
171
|
+
else if (a === 2)
|
|
172
|
+
parts.push('π²');
|
|
173
|
+
if (b === 1)
|
|
174
|
+
parts.push('ln 2');
|
|
175
|
+
else if (b === 2)
|
|
176
|
+
parts.push('(ln 2)²');
|
|
177
|
+
return parts.join(' ');
|
|
178
|
+
}
|
|
179
|
+
/** `r = p / (π^a · ln2^b)`, with `p = n/d`, as the exact form string. */
|
|
180
|
+
function renderCleanForm(n, d, a, b, root) {
|
|
181
|
+
// Negative exponents put the symbol in the numerator.
|
|
182
|
+
const numSym = symbolicFactor(a < 0 ? -a : 0, b < 0 ? -b : 0);
|
|
183
|
+
const denSym = symbolicFactor(a > 0 ? a : 0, b > 0 ? b : 0);
|
|
184
|
+
const numParts = [...(n === 1n && numSym !== '' ? [] : [n.toString()]), ...(numSym === '' ? [] : [numSym])];
|
|
185
|
+
const denParts = [...(d === 1n ? [] : [d.toString()]), ...(denSym === '' ? [] : [denSym])];
|
|
186
|
+
// `2π` stays joined; a number before `ln 2` is spaced (`2 ln 2`), as `π ln 2` is.
|
|
187
|
+
const join = (parts) => parts.reduce((acc, part) => (acc === '' ? part : part.startsWith('ln') || part.startsWith('(ln') ? `${acc} ${part}` : acc + part), '');
|
|
188
|
+
const numerator = join(numParts);
|
|
189
|
+
if (denParts.length === 0)
|
|
190
|
+
return root ? (numerator === 'π' ? '√π' : /^[0-9]+$/.test(numerator) && numParts.length === 1 ? `√${numerator}` : `√(${numerator})`) : numerator;
|
|
191
|
+
const denominator = denParts.length === 1 ? denParts[0] : `(${join(denParts)})`;
|
|
192
|
+
const form = `${numerator}/${denominator}`;
|
|
193
|
+
return root ? `√(${form})` : form;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* The exact form of a clean dimensionless prefactor, or `undefined` when
|
|
197
|
+
* the number is not one. A prefactor `r` is clean when `r = p / (π^a · ln2^b)`
|
|
198
|
+
* for `a ∈ −2..2`, `b ∈ −1..1` and a rational `p` with denominator at most
|
|
199
|
+
* 720, and numerator at most 720, that reproduces it to the relative 1e-9 the
|
|
200
|
+
* derivation fit uses; or
|
|
201
|
+
* when `r²` is, which names `√π`, `√(2π)` and their kin. The simplest
|
|
202
|
+
* `(a, b)` that fits is the one reported, so `2` is `2` and not `2π/π`.
|
|
203
|
+
* The rule replaces a list of seventeen constants matched at 1e-3; `9/8`
|
|
204
|
+
* (be-80) and `π/ln 2` (be-84) were not on it, and `π²/60`, the
|
|
205
|
+
* Stefan–Boltzmann closed form, is a hit under this rule.
|
|
206
|
+
*
|
|
207
|
+
* @internal
|
|
208
|
+
*/
|
|
209
|
+
export function cleanPrefactorForm(p) {
|
|
210
|
+
if (!Number.isFinite(p) || p === 0)
|
|
211
|
+
return undefined;
|
|
212
|
+
const sign = p < 0 ? '-' : '';
|
|
213
|
+
const r = Math.abs(p);
|
|
214
|
+
for (const root of [false, true]) {
|
|
215
|
+
const value = root ? r * r : r;
|
|
216
|
+
for (const [a, b] of CLEAN_EXPONENT_PAIRS) {
|
|
217
|
+
const scaled = value * Math.pow(Math.PI, a) * Math.pow(Math.LN2, b);
|
|
218
|
+
const q = rationalize(scaled, { maxDenominator: CLEAN_MAX_DENOMINATOR, tolerance: CLEAN_TOLERANCE });
|
|
219
|
+
// The cap bounds the numerator too. With it free, every integer-valued double
|
|
220
|
+
// (a G-closure of 3.6e21) is a rational over 1, and 21791/563 reproduced the
|
|
221
|
+
// BCS ratio 1.7639 to 1e-9 by chance: a small rational has a small numerator.
|
|
222
|
+
if (q !== undefined && (q.numerator < 0n ? -q.numerator : q.numerator) <= BigInt(CLEAN_MAX_DENOMINATOR)) {
|
|
223
|
+
return sign + renderCleanForm(q.numerator, q.denominator, a, b, root);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
const isCleanPrefactor = (p) => cleanPrefactorForm(p) !== undefined;
|
|
161
230
|
/**
|
|
162
231
|
* A canonical closure more than ten times away from 1 is not a recovered
|
|
163
|
-
* prefactor.
|
|
164
|
-
* window and
|
|
165
|
-
*
|
|
166
|
-
*
|
|
232
|
+
* prefactor. Wien (≈1.265, 2π over the root of a transcendental equation)
|
|
233
|
+
* stays inside that window and keeps the empirical/tuned mark;
|
|
234
|
+
* Stefan–Boltzmann's π²/60 is a clean form under `cleanPrefactorForm`. A
|
|
235
|
+
* G-closure of an atomic law (10^21–10^25) does not pass. A recognized
|
|
236
|
+
* constant (2π, ln 2, 4π, 1/(6π), …) stays even when it sits outside the
|
|
237
|
+
* window. The search includes ε₀, so the
|
|
167
238
|
* field energy density derives on {ε₀} with its sourced ½; the {ℏ, c, e}
|
|
168
239
|
* stand-in it once closed on, μ0 rewritten through α, no longer arises, and
|
|
169
240
|
* the guard that rejected it is gone (it changed no row of either graph).
|
|
@@ -216,16 +287,17 @@ export function attemptDerivation(e) {
|
|
|
216
287
|
cand *= Math.pow(i[name], exp);
|
|
217
288
|
return e.evaluate(i) / cand;
|
|
218
289
|
});
|
|
219
|
-
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
290
|
+
// The coefficient of variation under 1e-9: this audit's own statistic and tolerance.
|
|
291
|
+
const decided = constantRatio(ratios, 1e-9, { statistic: 'cv' });
|
|
292
|
+
if (decided.constant && recoveredCanonicalPrefactor(e.id, decided.value)) {
|
|
293
|
+
const form = cleanPrefactorForm(decided.value);
|
|
223
294
|
return {
|
|
224
295
|
status: 'derived',
|
|
225
296
|
subset: S.map((x) => x.name),
|
|
226
297
|
monomial: r.monomial,
|
|
227
|
-
prefactor:
|
|
228
|
-
cleanPrefactor:
|
|
298
|
+
prefactor: decided.value,
|
|
299
|
+
cleanPrefactor: form !== undefined,
|
|
300
|
+
...(form === undefined ? {} : { prefactorForm: form }),
|
|
229
301
|
};
|
|
230
302
|
}
|
|
231
303
|
}
|
|
@@ -327,17 +399,10 @@ export function bridgePriority(edges) {
|
|
|
327
399
|
// ---------------------------------------------------------------------------
|
|
328
400
|
// Catalog linkage map — how the equations connect via shared quantities.
|
|
329
401
|
// ---------------------------------------------------------------------------
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
* `proposeLinkCandidates`. NOTE: `anchoringDistance` deliberately does NOT
|
|
335
|
-
* use this — it links on raw names (its distance-0/∞ contract is pinned).
|
|
336
|
-
*/
|
|
337
|
-
function quantityCanonicalizer() {
|
|
338
|
-
const alias = new Map(QUANTITY_IDENTIFICATIONS.map((id) => [id.from, id.to]));
|
|
339
|
-
return (n) => alias.get(n) ?? n;
|
|
340
|
-
}
|
|
402
|
+
// The quantity-name canonicalizer (`QUANTITY_IDENTIFICATIONS`) and the component partition are
|
|
403
|
+
// `quantity-clusters.ts`, the one owner shared with the visual map and the discovery funnel.
|
|
404
|
+
// NOTE: `anchoringDistance` deliberately does NOT canonicalize — it links on raw names (its
|
|
405
|
+
// distance-0/∞ contract is pinned).
|
|
341
406
|
/** An edge's distinct (canonical) quantity names — sources ∪ target. */
|
|
342
407
|
function quantitiesOf(e, canon) {
|
|
343
408
|
return [...new Set([...e.sources.map((s) => canon(s.name)), canon(e.target.name)])];
|
|
@@ -356,26 +421,9 @@ function quantitiesOf(e, canon) {
|
|
|
356
421
|
function clusterMap(edges) {
|
|
357
422
|
const statusOf = new Map(BRIDGE_EQUATIONS.map((b) => [b.id, b.status]));
|
|
358
423
|
const canon = quantityCanonicalizer();
|
|
359
|
-
//
|
|
360
|
-
|
|
361
|
-
const
|
|
362
|
-
const union = (a, b) => { parent[find(a)] = find(b); };
|
|
363
|
-
const qToEdges = new Map();
|
|
364
|
-
edges.forEach((e, i) => {
|
|
365
|
-
for (const q of quantitiesOf(e, canon)) {
|
|
366
|
-
mapGetOrInsert(qToEdges, q, () => []).push(i);
|
|
367
|
-
}
|
|
368
|
-
});
|
|
369
|
-
for (const idxs of qToEdges.values()) {
|
|
370
|
-
for (let k = 1; k < idxs.length; k++)
|
|
371
|
-
union(idxs[0], idxs[k]);
|
|
372
|
-
}
|
|
373
|
-
const groups = new Map();
|
|
374
|
-
edges.forEach((_, i) => {
|
|
375
|
-
mapGetOrInsert(groups, find(i), () => []).push(i);
|
|
376
|
-
});
|
|
377
|
-
const clusters = [...groups.values()].map((idxs) => {
|
|
378
|
-
const es = idxs.map((i) => edges[i]);
|
|
424
|
+
// Edges sharing a (canonical) quantity are one cluster: the shared partition, already in
|
|
425
|
+
// the order this map always had (largest first, then by first edge id; input order inside).
|
|
426
|
+
const clusters = clusterBySharedKeys(edges, (e) => quantitiesOf(e, canon), (e) => e.id).map((es) => {
|
|
379
427
|
const statusMix = {};
|
|
380
428
|
const qcount = {};
|
|
381
429
|
for (const e of es) {
|
|
@@ -392,7 +440,6 @@ function clusterMap(edges) {
|
|
|
392
440
|
hubs: Object.entries(qcount).filter(([, c]) => c >= 2).map(([q]) => q).sort(),
|
|
393
441
|
};
|
|
394
442
|
});
|
|
395
|
-
clusters.sort((a, b) => b.size - a.size || a.edges[0].localeCompare(b.edges[0]));
|
|
396
443
|
return {
|
|
397
444
|
clusters,
|
|
398
445
|
componentCount: clusters.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-analysis.js","sourceRoot":"","sources":["../../src/composition/bridge-analysis.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Bridge-analysis — structural triage signals over the composition graph.\n *\n * INTERNAL (deliberately NOT on the public surface — not re-exported from\n * src/index.ts). A meta/analysis layer, like the catalog adjudicator, that\n * combines the dimensional engine with the graph to PRIORITIZE which\n * speculative bridges are closest to being DECIDABLE against established\n * physics — most anchored to the established core and most checkable.\n *\n * ⚠ This is a TRIAGE ranking (review/confrontation priority), NOT a\n * credibility ranking. The dimensional signals are orthogonal to whether a\n * bridge is true (see docs/research/Bridge-Equation-Dimensional-Audit.md:\n * the established Mercury perihelion is \"unclosable\"; the highly-speculative\n * Hawking-via-r_s derives cleanly). Do not prune, rank, or score the\n * catalog's credibility with this.\n *\n * Three engine signals + one catalog signal:\n * - grounding — does the equation re-derive as a recognized monomial\n * with a CLEAN dimensionless constant (ln2, 1/4π, √2π)?\n * - complexity — free dimensionless parameters (lower = more tractable).\n * - anchoring — graph distance to the established-confidence core.\n * - status / data-confrontation — joined from the catalog (NOT engine).\n *\n * @module composition/bridge-analysis\n */\n\nimport { constantRecord } from '../dimensional/symbolic-constants.js';\nimport { buckinghamPi, dimensionallyDetermines } from '../dimensional/buckingham.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport { DIMENSIONLESS } from '../dimensional/types.js';\nimport { equals, format } from '../dimensional/algebra.js';\nimport type { BridgeEdge } from './edge.js';\nimport { formulaShape } from './formula-shape.js';\nimport { BRIDGE_EQUATIONS } from '../bridges/index.js';\nimport { QUANTITY_IDENTIFICATIONS } from './compose.js';\nimport { enumerateCompositions } from './enumerate.js';\nimport { DATA_CONFRONTED_IDS } from '../bridges/confrontation-coverage.js';\n\n/** A fundamental constant the derivation search may add (with SI value). */\ninterface NamedConstant {\n readonly name: string;\n readonly dim: Dimension;\n readonly si: number;\n}\n\n/** ℏ, c, G, k_B, e — the constants the audit/triage may invoke, from the registry. */\n// The constants a canonical or catalog relation bakes: a closure is searched over every subset.\n// `epsilon_0` and `m_e` joined on 2026-10-09, when the canonical entries that spelled them as\n// governing inputs (`vacuum-permittivity`, `electron-mass`) started baking them like every other\n// constant; without them CE-plasma-frequency read as a reconstruction mismatch.\nconst FUNDAMENTAL_CONSTANTS: readonly NamedConstant[] = ['ℏ', 'c', 'G', 'k_B', 'e', 'epsilon_0', 'm_e'].map((name) => {\n const record = constantRecord(name)!;\n return { name, dim: record.dim, si: record.value };\n});\n\nfunction subsetsBySize<T>(arr: readonly T[]): T[][] {\n let out: T[][] = [[]];\n for (const x of arr) {\n const n = out.length;\n for (let i = 0; i < n; i++) out.push([...out[i], x]);\n }\n return out.sort((a, b) => a.length - b.length);\n}\n\n/**\n * All 2⁵ = 32 size-ordered subsets of `FUNDAMENTAL_CONSTANTS`, computed once.\n * `dimensionalFreedom` and `attemptDerivation` iterate these on every bridge,\n * and the set is invariant — consumers only read each subset (spread into a\n * `gov` list), never mutate it.\n */\nconst FUNDAMENTAL_CONSTANT_SUBSETS: readonly NamedConstant[][] =\n subsetsBySize(FUNDAMENTAL_CONSTANTS);\n\n/**\n * Get `m[k]`, inserting `make()` first when absent — replaces the\n * `if (!m.has(k)) m.set(k, …); m.get(k)!` two-step (and its `!` assertion) with\n * one call that returns a non-null value.\n */\nfunction mapGetOrInsert<K, V>(m: Map<K, V>, k: K, make: () => V): V {\n let v = m.get(k);\n if (v === undefined) {\n v = make();\n m.set(k, v);\n }\n return v;\n}\n\ntype DV = { name: string; dim: Dimension };\nconst asVars = (e: BridgeEdge): { target: DV; sources: DV[] } => {\n const factors = e.formulaFactors ?? {};\n return {\n target: { name: e.target.name, dim: e.target.dim },\n // A dimensionless count is not a Buckingham governor. Folding it in\n // makes the monomial non-unique and the audit leaves DERIVED.\n sources: e.sources\n .filter((s) => factors[s.name] === undefined)\n .map((s) => ({ name: s.name, dim: s.dim })),\n };\n};\n\nconst rankOf = (vars: DV[]): number => (vars.length ? buckinghamPi(vars).rank : 0);\nconst inSpan = (t: DV, gov: DV[]): boolean =>\n gov.length === 0 ? buckinghamPi([t]).rank === 0 : rankOf([t, ...gov]) === rankOf(gov);\n\n/**\n * Free dimensionless parameters: minimal constant subset that puts the\n * target in span, then the leftover π-group count − 1. 0 = a single\n * dimensionless statement (monomial or decoy); k = monomial × F(k ratios).\n */\nexport function dimensionalFreedom(e: BridgeEdge): number {\n const { target, sources } = asVars(e);\n for (const S of FUNDAMENTAL_CONSTANT_SUBSETS) {\n const gov = [...sources, ...S];\n if (inSpan(target, gov)) return buckinghamPi([target, ...gov]).piGroupCount - 1;\n }\n return Infinity;\n}\n\n/**\n * Deterministic, domain-valid input sets with per-source variation.\n *\n * Each magnitude set is tried with every source positive first, then with\n * each single source negated: a domain that holds only for a negative input\n * (a signed charge, a potential below zero) once got positives only and was\n * reported `no-samples` (9.0.0 audit §4 Low). The first sign pattern the\n * domain admits is kept for that magnitude set, so a domain that admits the\n * positives is sampled exactly as before.\n */\nfunction makeInputs(e: BridgeEdge): Array<Record<string, number>> {\n if (e.sources.length === 0) return [{}];\n const sets: Array<Record<string, number>> = [];\n const inDomain = (inp: Record<string, number>): boolean => {\n try {\n return e.domain.predicate(inp);\n } catch {\n return false;\n }\n };\n const finite = (inp: Record<string, number>): boolean => {\n try {\n return Number.isFinite(e.evaluate(inp));\n } catch {\n return false;\n }\n };\n for (let j = 0; j < 3; j++) {\n const magnitudes: Record<string, number> = {};\n e.sources.forEach((s, i) => {\n magnitudes[s.name] = Math.pow(1.6 + i, 1 + 0.27 * j);\n });\n // A negated source is tried only when the DOMAIN refuses the positive point (a carrier\n // charge that must be negative). A positive point the domain admits but the evaluator\n // cannot finish (an exponential that overflows, be-82) is a degenerate sample and not a\n // reason to look for a sign at which the function happens to be flat: a monomial fitted\n // on a saturated regime is not a derivation.\n if (inDomain(magnitudes)) {\n if (finite(magnitudes)) sets.push(magnitudes);\n continue;\n }\n const negated = e.sources\n .map((s) => ({ ...magnitudes, [s.name]: -magnitudes[s.name]! }))\n .find((inp) => inDomain(inp) && finite(inp));\n if (negated !== undefined) sets.push(negated);\n }\n return sets;\n}\n\n/** Recognizable dimensionless prefactors (small rationals, 1/nπ, √, π). */\nconst CLEAN_PREFACTORS: readonly number[] = [\n 1, 2, 3, 4, 0.5, 0.25, Math.log(2),\n 1 / (2 * Math.PI), 1 / (4 * Math.PI), 1 / (8 * Math.PI),\n Math.sqrt(2 * Math.PI), Math.sqrt(Math.PI),\n Math.PI, 2 * Math.PI, 4 * Math.PI, 6 * Math.PI, 1 / (6 * Math.PI),\n];\nconst isCleanPrefactor = (p: number): boolean =>\n CLEAN_PREFACTORS.some((c) => Math.abs(Math.abs(p) - c) < 1e-3 * c);\n\n/**\n * A canonical closure more than ten times away from 1 is not a recovered\n * prefactor. Stefan–Boltzmann (≈0.1645) and Wien (≈1.265) stay inside that\n * window and keep the empirical/tuned mark. A G-closure of an atomic law\n * (10^21–10^25) does not. A recognized constant (2π, ln 2, 4π, 1/(6π), …)\n * stays even when it sits outside the window. The search includes ε₀, so the\n * field energy density derives on {ε₀} with its sourced ½; the {ℏ, c, e}\n * stand-in it once closed on, μ0 rewritten through α, no longer arises, and\n * the guard that rejected it is gone (it changed no row of either graph).\n */\nfunction recoveredCanonicalPrefactor(id: string, prefactor: number): boolean {\n if (!id.startsWith('CE-') || isCleanPrefactor(prefactor)) return true;\n const mag = Math.abs(prefactor);\n if (!(mag > 0) || !Number.isFinite(mag)) return false;\n return Math.abs(Math.log10(mag)) <= 1;\n}\n\n/**\n * The outcome of trying to derive a bridge dimensionally + verify it.\n * `not-a-monomial` means the encoded formula adds dimensionful terms, so a\n * monomial reconstruction does not apply. It is not a failed reconstruction.\n */\ntype DerivationStatus =\n | 'derived'\n | 'decoy'\n | 'open'\n | 'no-samples'\n | 'not-a-monomial'\n | 'coefficient-unset';\ninterface DerivationResult {\n readonly status: DerivationStatus;\n readonly subset?: readonly string[];\n readonly monomial?: Readonly<Record<string, number>>;\n readonly prefactor?: number;\n /** True when derived AND the prefactor is a recognizable constant. */\n readonly cleanPrefactor?: boolean;\n}\n\n/**\n * Attempt to derive a bridge: the first constant-subset that dimensionally\n * closes the target AND reproduces the evaluator up to a constant ratio.\n */\nexport function attemptDerivation(e: BridgeEdge): DerivationResult {\n // A sum of dimensionful terms is not a proportionality. The constant search\n // below would report a decoy, or a derived constant, for a monomial the\n // formula is not. Proof status is separate and is not read here.\n if (e.symbolic !== undefined && formulaShape(e.symbolic) === 'dimensional-sum') {\n return { status: 'not-a-monomial' };\n }\n // A missing coefficient is not the constant 1. The evaluator returns\n // no number, so a ratio against that number is not a recovered prefactor.\n if (e.coefficientUnset === true) return { status: 'coefficient-unset' };\n const { target, sources } = asVars(e);\n const inputs = makeInputs(e);\n const need = e.sources.length === 0 ? 1 : 2;\n let anyClosure = false;\n for (const S of FUNDAMENTAL_CONSTANT_SUBSETS) {\n const r = dimensionallyDetermines(target, [...sources, ...S]);\n if (!r.determined) continue;\n anyClosure = true;\n if (inputs.length < need) continue;\n const ratios = inputs.map((i) => {\n let cand = 1;\n const factors = e.formulaFactors ?? {};\n for (const s of e.sources) {\n if (factors[s.name] !== undefined) continue;\n cand *= Math.pow(i[s.name], r.monomial![s.name] ?? 0);\n }\n for (const k of S) cand *= Math.pow(k.si, r.monomial![k.name] ?? 0);\n for (const [name, exp] of Object.entries(factors)) cand *= Math.pow(i[name]!, exp);\n return e.evaluate(i) / cand;\n });\n const mean = ratios.reduce((a, b) => a + b, 0) / ratios.length;\n const cv =\n Math.sqrt(ratios.reduce((a, b) => a + (b - mean) ** 2, 0) / ratios.length) /\n Math.abs(mean);\n if (cv < 1e-9 && recoveredCanonicalPrefactor(e.id, mean)) {\n return {\n status: 'derived',\n subset: S.map((x) => x.name),\n monomial: r.monomial,\n prefactor: mean,\n cleanPrefactor: isCleanPrefactor(mean),\n };\n }\n }\n if (inputs.length < need) return { status: 'no-samples' };\n return { status: anyClosure ? 'decoy' : 'open' };\n}\n\n/**\n * Graph distance from a bridge's quantities to the established-confidence\n * core (BFS over quantity co-occurrence). 0 = shares a quantity with an\n * established edge; Infinity = structurally isolated from it. Read by\n * `bridgePriority` only; it was exported with no caller outside this file.\n */\nfunction anchoringDistance(\n edges: readonly BridgeEdge[],\n e: BridgeEdge,\n): number {\n const adj = new Map<string, Set<string>>();\n const link = (a: string, b: string) => {\n mapGetOrInsert(adj, a, () => new Set<string>()).add(b);\n };\n const core = new Set<string>();\n for (const edge of edges) {\n const q = [...edge.sources.map((s) => s.name), edge.target.name];\n for (const a of q) for (const b of q) if (a !== b) link(a, b);\n if (edge.confidence === 'established') for (const n of q) core.add(n);\n }\n const distOf = new Map<string, number>();\n const queue = [...core];\n for (const c of core) distOf.set(c, 0);\n while (queue.length) {\n const x = queue.shift()!;\n for (const y of adj.get(x) ?? []) {\n if (!distOf.has(y)) {\n distOf.set(y, distOf.get(x)! + 1);\n queue.push(y);\n }\n }\n }\n const qs = [...e.sources.map((s) => s.name), e.target.name];\n return Math.min(...qs.map((n) => (distOf.has(n) ? distOf.get(n)! : Infinity)));\n}\n\n/** How grounded the equation is, as a structural signal. */\ntype Grounding = 'grounded' | 'empirical' | 'decoy' | 'open';\n/** Review-priority tier (1 = highest structural decidability). */\ntype Tier = 1 | 2 | 3;\n\n/** One bridge's triage profile. */\ninterface BridgePriorityEntry {\n readonly id: string;\n readonly beId: number | null;\n readonly status: string;\n /** `grounded` (recognized monomial+clean constant) → `open` (multi-param). */\n readonly grounding: Grounding;\n /** Free dimensionless parameters (lower = more tractable). */\n readonly complexity: number;\n /** Graph distance to the established core (Infinity = isolated). */\n readonly anchoring: number;\n /** A committed data confrontation exists (catalog signal, NOT engine). */\n readonly hasDataConfrontation: boolean;\n readonly tier: Tier;\n}\n\nfunction grounding(e: BridgeEdge): Grounding {\n const d = attemptDerivation(e);\n if (d.status === 'derived') return d.cleanPrefactor ? 'grounded' : 'empirical';\n if (d.status === 'decoy') return 'decoy';\n // A dimensional sum has no recognized monomial. It is not a decoy.\n return 'open';\n}\n\nconst GROUND_RANK: Record<Grounding, number> = {\n grounded: 0,\n empirical: 1,\n decoy: 2,\n open: 3,\n};\n\n/**\n * Triage the non-established bridges by structural decidability against the\n * established core. Returns profiles sorted best-first (Tier, then anchoring,\n * grounding, complexity). NOT a credibility ranking — see module docstring.\n */\nexport function bridgePriority(\n edges: readonly BridgeEdge[],\n): BridgePriorityEntry[] {\n const statusOf = new Map<number, string>(\n BRIDGE_EQUATIONS.map((b) => [b.id, b.status]),\n );\n const entries: BridgePriorityEntry[] = [];\n for (const e of edges) {\n if (e.confidence === 'established') continue; // already in the core\n const g = grounding(e);\n const complexity = dimensionalFreedom(e);\n const anchoring = anchoringDistance(edges, e);\n const anchored = Number.isFinite(anchoring);\n const tier: Tier =\n anchored && (g === 'grounded' || complexity <= 1)\n ? 1\n : anchored || g === 'grounded'\n ? 2\n : 3;\n entries.push({\n id: e.id,\n beId: e.beId,\n status: e.beId == null ? 'law' : (statusOf.get(e.beId) ?? 'unknown'),\n grounding: g,\n complexity,\n anchoring,\n hasDataConfrontation: e.beId != null && DATA_CONFRONTED_IDS.has(e.beId),\n tier,\n });\n }\n entries.sort(\n (a, b) =>\n a.tier - b.tier ||\n a.anchoring - b.anchoring ||\n GROUND_RANK[a.grounding] - GROUND_RANK[b.grounding] ||\n a.complexity - b.complexity ||\n a.id.localeCompare(b.id),\n );\n return entries;\n}\n\n// ---------------------------------------------------------------------------\n// Catalog linkage map — how the equations connect via shared quantities.\n// ---------------------------------------------------------------------------\n\n/**\n * Quantity-name canonicalizer honoring `QUANTITY_IDENTIFICATIONS`: maps each\n * name to its identified representative (e.g. hawking-temperature →\n * temperature). The shared linkage substrate for `linkageMap` /\n * `proposeLinkCandidates`. NOTE: `anchoringDistance` deliberately does NOT\n * use this — it links on raw names (its distance-0/∞ contract is pinned).\n */\nfunction quantityCanonicalizer(): (n: string) => string {\n const alias = new Map<string, string>(\n QUANTITY_IDENTIFICATIONS.map((id) => [id.from, id.to]),\n );\n return (n: string): string => alias.get(n) ?? n;\n}\n\n/** An edge's distinct (canonical) quantity names — sources ∪ target. */\nfunction quantitiesOf(e: BridgeEdge, canon: (n: string) => string): string[] {\n return [...new Set([...e.sources.map((s) => canon(s.name)), canon(e.target.name)])];\n}\n\n/** One connected cluster of equations linked by shared quantities. */\ninterface LinkageCluster {\n /** Edge ids in this cluster. */\n readonly edges: readonly string[];\n readonly size: number;\n /** Contains an established-confidence edge (anchored to known physics). */\n readonly anchored: boolean;\n /** Catalog-status histogram across the cluster's edges. */\n readonly statusMix: Readonly<Record<string, number>>;\n /** Quantities that appear in ≥2 of the cluster's edges (the link hubs). */\n readonly hubs: readonly string[];\n}\n\n/** The catalog's linkage structure. */\ninterface LinkageMap {\n /** Clusters, largest first. */\n readonly clusters: readonly LinkageCluster[];\n readonly componentCount: number;\n /** Single-edge cluster ids (structurally isolated). */\n readonly isolated: readonly string[];\n /** Number of valid pairwise compositions over the edge set (directed links). */\n readonly compositions: number;\n}\n\n/** The cluster structure WITHOUT the composition count — the cheap core every\n * linkage consumer except `upt map`'s headline needs. */\ntype ClusterMap = Omit<LinkageMap, 'compositions'>;\n\n/**\n * The cluster structure of the catalog graph: connected components whose nodes\n * are edges and whose links are shared quantities (honoring\n * `QUANTITY_IDENTIFICATIONS`). Reveals a dominant anchored core hubbed on a few\n * quantities, plus thematic clusters and a long isolated tail. A descriptive\n * structural map, NOT a credibility signal (see bridgePriority's caveat).\n *\n * This is the cheap core: it does NOT run the O(E²) pairwise-composition count.\n * The candidate/connector proposers (which never read `.compositions`) call\n * this directly; `linkageMap` adds the count for `upt map`'s headline.\n */\nfunction clusterMap(edges: readonly BridgeEdge[]): ClusterMap {\n const statusOf = new Map<number, string>(\n BRIDGE_EQUATIONS.map((b) => [b.id, b.status]),\n );\n const canon = quantityCanonicalizer();\n\n // Union-find over edges sharing a (canonical) quantity.\n const parent = edges.map((_, i) => i);\n const find = (x: number): number => (parent[x] === x ? x : (parent[x] = find(parent[x])));\n const union = (a: number, b: number): void => { parent[find(a)] = find(b); };\n const qToEdges = new Map<string, number[]>();\n edges.forEach((e, i) => {\n for (const q of quantitiesOf(e, canon)) {\n mapGetOrInsert(qToEdges, q, () => []).push(i);\n }\n });\n for (const idxs of qToEdges.values()) {\n for (let k = 1; k < idxs.length; k++) union(idxs[0], idxs[k]);\n }\n\n const groups = new Map<number, number[]>();\n edges.forEach((_, i) => {\n mapGetOrInsert(groups, find(i), () => []).push(i);\n });\n\n const clusters: LinkageCluster[] = [...groups.values()].map((idxs) => {\n const es = idxs.map((i) => edges[i]);\n const statusMix: Record<string, number> = {};\n const qcount: Record<string, number> = {};\n for (const e of es) {\n const s = e.beId == null ? 'law' : (statusOf.get(e.beId) ?? 'unknown');\n statusMix[s] = (statusMix[s] ?? 0) + 1;\n for (const q of quantitiesOf(e, canon)) qcount[q] = (qcount[q] ?? 0) + 1;\n }\n return {\n edges: es.map((e) => e.id),\n size: es.length,\n anchored: es.some((e) => e.confidence === 'established'),\n statusMix,\n hubs: Object.entries(qcount).filter(([, c]) => c >= 2).map(([q]) => q).sort(),\n };\n });\n clusters.sort((a, b) => b.size - a.size || a.edges[0].localeCompare(b.edges[0]));\n\n return {\n clusters,\n componentCount: clusters.length,\n isolated: clusters.filter((c) => c.size === 1).flatMap((c) => c.edges).sort(),\n };\n}\n\n/**\n * The full linkage map: the {@link clusterMap} structure plus the (O(E²))\n * pairwise-composition count. Only `upt map`'s headline needs the count, so\n * everything else calls `clusterMap` directly. Internal — not on the public\n * surface (mirrors the rest of bridge-analysis).\n */\nexport function linkageMap(edges: readonly BridgeEdge[]): LinkageMap {\n return {\n ...clusterMap(edges),\n compositions: enumerateCompositions(edges).all.length,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Link-candidate proposals — cross-cluster same-dimension quantity pairs.\n// ---------------------------------------------------------------------------\n\n/**\n * A candidate identification surfaced by the linkage map: two quantities in\n * DIFFERENT clusters with the SAME (non-dimensionless) dimension — a\n * potential \"missing link\" of the kind the Hawking-temperature ≡\n * temperature identification was.\n */\nexport interface LinkCandidate {\n /** Quantity in cluster A. */\n readonly a: string;\n /** Quantity in cluster B (a ≠ b; different clusters). */\n readonly b: string;\n /** Shared SI dimension (formatted). */\n readonly dim: string;\n /** One side is in the anchored (known-physics) cluster. */\n readonly touchesCore: boolean;\n /** The names share a word token (same physical KIND, e.g. both `*-mass`). */\n readonly sameKind: boolean;\n /** The shared token, when `sameKind`. */\n readonly sharedToken: string | null;\n}\n\nfunction sharedNameToken(a: string, b: string): string | null {\n const tb = new Set(b.split('-'));\n for (const t of a.split('-')) if (tb.has(t)) return t;\n return null;\n}\n\n/**\n * Propose candidate cross-cluster identifications from the linkage map:\n * every pair of quantities in different clusters that share a\n * non-dimensionless dimension. ⚠ This is a coincidence-heavy REVIEW SURFACE\n * (same dimension is a weak signal — see the dimensional audit's decoy\n * finding), NOT a list of discovered bridges. Ranked: core-touching first,\n * then same-kind. The output's only path is human adjudication\n * (Part-VI §XXVII-B).\n *\n * Internal — not on the public surface.\n */\nexport function proposeLinkCandidates(edges: readonly BridgeEdge[]): LinkCandidate[] {\n const m = clusterMap(edges); // clusters only — skips the O(E²) composition count\n const canon = quantityCanonicalizer();\n const edgeCluster = new Map<string, number>();\n m.clusters.forEach((c, ci) => c.edges.forEach((id) => edgeCluster.set(id, ci)));\n\n const qCluster = new Map<string, number>();\n const qDim = new Map<string, Dimension>();\n const qAnchored = new Map<string, boolean>();\n for (const e of edges) {\n const ci = edgeCluster.get(e.id)!;\n const anchored = m.clusters[ci].anchored;\n for (const s of [...e.sources, e.target]) {\n const n = canon(s.name);\n qCluster.set(n, ci);\n qDim.set(n, s.dim);\n if (anchored) qAnchored.set(n, true);\n }\n }\n\n const names = [...qDim.keys()];\n const out: LinkCandidate[] = [];\n for (let i = 0; i < names.length; i++) {\n for (let j = i + 1; j < names.length; j++) {\n const a = names[i];\n const b = names[j];\n if (qCluster.get(a) === qCluster.get(b)) continue; // already linked\n const da = qDim.get(a)!;\n if (equals(da, DIMENSIONLESS)) continue; // dimensionless = too generic\n if (!equals(da, qDim.get(b)!)) continue;\n const token = sharedNameToken(a, b);\n out.push({\n a,\n b,\n dim: format(da),\n touchesCore: !!(qAnchored.get(a) || qAnchored.get(b)),\n sameKind: token !== null,\n sharedToken: token,\n });\n }\n }\n out.sort(\n (x, y) =>\n Number(y.touchesCore) - Number(x.touchesCore) ||\n Number(y.sameKind) - Number(x.sameKind) ||\n x.a.localeCompare(y.a) ||\n x.b.localeCompare(y.b),\n );\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Orphan connectors — candidate identifications that pull an ISOLATED bridge\n// into the anchored core.\n// ---------------------------------------------------------------------------\n\n/**\n * A candidate identification with ONE endpoint on an isolated (single-edge)\n * bridge and the OTHER on an anchored-cluster bridge — accepting it would\n * connect orphaned physics to the established core.\n */\ninterface OrphanConnector {\n /** The isolated bridge's edge id (the orphan). */\n readonly orphanEdge: string;\n /** The orphan-side quantity. */\n readonly orphanQuantity: string;\n /** The core-side quantity it shares a dimension with. */\n readonly coreQuantity: string;\n /** An anchored-cluster edge touching `coreQuantity`. */\n readonly coreEdge: string;\n /** Shared SI dimension (formatted). */\n readonly dim: string;\n /** The two names share a word token. A token is not a verdict. */\n readonly sameKind: boolean;\n /** The shared token, when `sameKind`. */\n readonly sharedToken: string | null;\n}\n\n/** Orphan-connector report. */\ninterface OrphanConnectorReport {\n /** Connectors, same-kind first then by orphan id. */\n readonly connectors: readonly OrphanConnector[];\n /** Of those, how many share a name token. A token is not a verdict. */\n readonly sameKindCount: number;\n /** Isolated bridges with ≥1 same-kind connector to the core, sorted. */\n readonly connectedOrphans: readonly string[];\n /** Isolated bridges with NO connector at all (truly unconnected), sorted. */\n readonly unconnectedOrphans: readonly string[];\n}\n\n/**\n * Of the catalog's isolated bridges, which could connect to the anchored core\n * via a same-dimension quantity identification? This intersects\n * `proposeLinkCandidates` with the linkage map's isolated/anchored partition:\n * a connector is a cross-cluster candidate whose one side sits on an isolated\n * bridge and whose other side touches an anchored cluster. The same-kind\n * subset (shared name token) is the least-implausible set worth a physicist's\n * review — the structural frontier of the catalog (the 20 orphaned bridges).\n *\n * ⚠ Same dimension is a WEAK prior (the dimensional audit's decoy finding):\n * most connectors are coincidences (a Förster radius is not a Schwarzschild\n * radius). A REVIEW SURFACE only — Part-VI §XXVII-B. Internal.\n */\nexport function proposeOrphanConnectors(\n edges: readonly BridgeEdge[],\n): OrphanConnectorReport {\n const m = clusterMap(edges); // clusters/isolated only — skips the composition count\n const isolated = new Set(m.isolated);\n const edgeAnchored = new Map<string, boolean>();\n m.clusters.forEach((c) => c.edges.forEach((id) => edgeAnchored.set(id, c.anchored)));\n\n // quantity (raw name) → the edges touching it. Isolated bridges carry no\n // registered identifications, so raw names suffice for the orphan side.\n const qToEdges = new Map<string, string[]>();\n for (const e of edges) {\n for (const q of [...e.sources, e.target]) {\n mapGetOrInsert(qToEdges, q.name, () => []).push(e.id);\n }\n }\n const orphanEdgeOf = (q: string): string | undefined =>\n (qToEdges.get(q) ?? []).find((id) => isolated.has(id));\n // The core is an anchored cluster of more than one edge. An established\n // bridge that is itself isolated is an orphan, not the core, so a pair of\n // orphans is not a connector.\n const anchoredEdgeOf = (q: string): string | undefined =>\n (qToEdges.get(q) ?? []).find((id) => edgeAnchored.get(id) === true && !isolated.has(id));\n\n const connectors: OrphanConnector[] = [];\n for (const c of proposeLinkCandidates(edges)) {\n const aOrphan = orphanEdgeOf(c.a);\n const bOrphan = orphanEdgeOf(c.b);\n const aAnchored = anchoredEdgeOf(c.a);\n const bAnchored = anchoredEdgeOf(c.b);\n let conn: OrphanConnector | null = null;\n if (aOrphan && bAnchored) {\n conn = { orphanEdge: aOrphan, orphanQuantity: c.a, coreQuantity: c.b, coreEdge: bAnchored, dim: c.dim, sameKind: c.sameKind, sharedToken: c.sharedToken };\n } else if (bOrphan && aAnchored) {\n conn = { orphanEdge: bOrphan, orphanQuantity: c.b, coreQuantity: c.a, coreEdge: aAnchored, dim: c.dim, sameKind: c.sameKind, sharedToken: c.sharedToken };\n }\n if (conn) connectors.push(conn);\n }\n connectors.sort(\n (x, y) =>\n Number(y.sameKind) - Number(x.sameKind) ||\n x.orphanEdge.localeCompare(y.orphanEdge) ||\n x.orphanQuantity.localeCompare(y.orphanQuantity) ||\n x.coreQuantity.localeCompare(y.coreQuantity),\n );\n\n const connectedSameKind = new Set(\n connectors.filter((c) => c.sameKind).map((c) => c.orphanEdge),\n );\n const anyConnector = new Set(connectors.map((c) => c.orphanEdge));\n return {\n connectors,\n sameKindCount: connectors.filter((c) => c.sameKind).length,\n connectedOrphans: [...connectedSameKind].sort(),\n unconnectedOrphans: m.isolated.filter((id) => !anyConnector.has(id)).sort(),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bridge-analysis.js","sourceRoot":"","sources":["../../src/composition/bridge-analysis.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Bridge-analysis — structural triage signals over the composition graph.\n *\n * INTERNAL (deliberately NOT on the public surface — not re-exported from\n * src/index.ts). A meta/analysis layer, like the catalog adjudicator, that\n * combines the dimensional engine with the graph to PRIORITIZE which\n * speculative bridges are closest to being DECIDABLE against established\n * physics — most anchored to the established core and most checkable.\n *\n * ⚠ This is a TRIAGE ranking (review/confrontation priority), NOT a\n * credibility ranking. The dimensional signals are orthogonal to whether a\n * bridge is true (see docs/research/Bridge-Equation-Dimensional-Audit.md:\n * the established Mercury perihelion is \"unclosable\"; the highly-speculative\n * Hawking-via-r_s derives cleanly). Do not prune, rank, or score the\n * catalog's credibility with this.\n *\n * Three engine signals + one catalog signal:\n * - grounding — does the equation re-derive as a recognized monomial\n * with a CLEAN dimensionless constant (ln2, 1/4π, √2π)?\n * - complexity — free dimensionless parameters (lower = more tractable).\n * - anchoring — graph distance to the established-confidence core.\n * - status / data-confrontation — joined from the catalog (NOT engine).\n *\n * @module composition/bridge-analysis\n */\n\nimport { constantRecord } from '../dimensional/symbolic-constants.js';\nimport { constantRatio, fixedPoint } from '../canonical/fixed-points.js';\nimport { formatRational, rationalize } from './rational-exponent.js';\nimport { buckinghamPi, dimensionallyDetermines } from '../dimensional/buckingham.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport { DIMENSIONLESS } from '../dimensional/types.js';\nimport { equals, format } from '../dimensional/algebra.js';\nimport type { BridgeEdge } from './edge.js';\nimport { formulaShape } from './formula-shape.js';\nimport { BRIDGE_EQUATIONS } from '../bridges/index.js';\nimport { enumerateCompositions } from './enumerate.js';\nimport { DATA_CONFRONTED_IDS } from '../bridges/confrontation-coverage.js';\nimport { clusterBySharedKeys, quantityCanonicalizer } from './quantity-clusters.js';\n\n/** A fundamental constant the derivation search may add (with SI value). */\ninterface NamedConstant {\n readonly name: string;\n readonly dim: Dimension;\n readonly si: number;\n}\n\n/** ℏ, c, G, k_B, e — the constants the audit/triage may invoke, from the registry. */\n// The constants a canonical or catalog relation bakes: a closure is searched over every subset.\n// `epsilon_0` and `m_e` joined on 2026-10-09, when the canonical entries that spelled them as\n// governing inputs (`vacuum-permittivity`, `electron-mass`) started baking them like every other\n// constant; without them CE-plasma-frequency read as a reconstruction mismatch.\nconst FUNDAMENTAL_CONSTANTS: readonly NamedConstant[] = ['ℏ', 'c', 'G', 'k_B', 'e', 'epsilon_0', 'm_e'].map((name) => {\n const record = constantRecord(name)!;\n return { name, dim: record.dim, si: record.value };\n});\n\nfunction subsetsBySize<T>(arr: readonly T[]): T[][] {\n let out: T[][] = [[]];\n for (const x of arr) {\n const n = out.length;\n for (let i = 0; i < n; i++) out.push([...out[i], x]);\n }\n return out.sort((a, b) => a.length - b.length);\n}\n\n/**\n * All 2⁵ = 32 size-ordered subsets of `FUNDAMENTAL_CONSTANTS`, computed once.\n * `dimensionalFreedom` and `attemptDerivation` iterate these on every bridge,\n * and the set is invariant — consumers only read each subset (spread into a\n * `gov` list), never mutate it.\n */\nconst FUNDAMENTAL_CONSTANT_SUBSETS: readonly NamedConstant[][] =\n subsetsBySize(FUNDAMENTAL_CONSTANTS);\n\n/**\n * Get `m[k]`, inserting `make()` first when absent — replaces the\n * `if (!m.has(k)) m.set(k, …); m.get(k)!` two-step (and its `!` assertion) with\n * one call that returns a non-null value.\n */\nfunction mapGetOrInsert<K, V>(m: Map<K, V>, k: K, make: () => V): V {\n let v = m.get(k);\n if (v === undefined) {\n v = make();\n m.set(k, v);\n }\n return v;\n}\n\ntype DV = { name: string; dim: Dimension };\nconst asVars = (e: BridgeEdge): { target: DV; sources: DV[] } => {\n const factors = e.formulaFactors ?? {};\n return {\n target: { name: e.target.name, dim: e.target.dim },\n // A dimensionless count is not a Buckingham governor. Folding it in\n // makes the monomial non-unique and the audit leaves DERIVED.\n sources: e.sources\n .filter((s) => factors[s.name] === undefined)\n .map((s) => ({ name: s.name, dim: s.dim })),\n };\n};\n\nconst rankOf = (vars: DV[]): number => (vars.length ? buckinghamPi(vars).rank : 0);\nconst inSpan = (t: DV, gov: DV[]): boolean =>\n gov.length === 0 ? buckinghamPi([t]).rank === 0 : rankOf([t, ...gov]) === rankOf(gov);\n\n/**\n * Free dimensionless parameters: minimal constant subset that puts the\n * target in span, then the leftover π-group count − 1. 0 = a single\n * dimensionless statement (monomial or decoy); k = monomial × F(k ratios).\n */\nexport function dimensionalFreedom(e: BridgeEdge): number {\n const { target, sources } = asVars(e);\n for (const S of FUNDAMENTAL_CONSTANT_SUBSETS) {\n const gov = [...sources, ...S];\n if (inSpan(target, gov)) return buckinghamPi([target, ...gov]).piGroupCount - 1;\n }\n return Infinity;\n}\n\n/**\n * Deterministic, domain-valid input sets with per-source variation.\n *\n * Each magnitude set is tried with every source positive first, then with\n * each single source negated: a domain that holds only for a negative input\n * (a signed charge, a potential below zero) once got positives only and was\n * reported `no-samples` (9.0.0 audit §4 Low). The first sign pattern the\n * domain admits is kept for that magnitude set, so a domain that admits the\n * positives is sampled exactly as before.\n */\nfunction makeInputs(e: BridgeEdge): Array<Record<string, number>> {\n if (e.sources.length === 0) return [{}];\n const sets: Array<Record<string, number>> = [];\n const inDomain = (inp: Record<string, number>): boolean => {\n try {\n return e.domain.predicate(inp);\n } catch {\n return false;\n }\n };\n const finite = (inp: Record<string, number>): boolean => {\n try {\n return Number.isFinite(e.evaluate(inp));\n } catch {\n return false;\n }\n };\n for (let j = 0; j < 3; j++) {\n // Source i takes (1.6 + i)^(1 + 0.27 j): this audit's own scheme, stated here.\n const magnitudes = fixedPoint(\n e.sources.map((s) => s.name),\n 1 + 0.27 * j,\n { base: 1.6, step: 1 },\n );\n // A negated source is tried only when the DOMAIN refuses the positive point (a carrier\n // charge that must be negative). A positive point the domain admits but the evaluator\n // cannot finish (an exponential that overflows, be-82) is a degenerate sample and not a\n // reason to look for a sign at which the function happens to be flat: a monomial fitted\n // on a saturated regime is not a derivation.\n if (inDomain(magnitudes)) {\n if (finite(magnitudes)) sets.push(magnitudes);\n continue;\n }\n const negated = e.sources\n .map((s) => ({ ...magnitudes, [s.name]: -magnitudes[s.name]! }))\n .find((inp) => inDomain(inp) && finite(inp));\n if (negated !== undefined) sets.push(negated);\n }\n return sets;\n}\n\n/** The denominator cap of a clean rational: the Buckingham enumerator's. */\nconst CLEAN_MAX_DENOMINATOR = 720;\n/** The relative tolerance of a clean hit: the one the derivation fit uses. */\nconst CLEAN_TOLERANCE = 1e-9;\n/** The (a, b) pairs of π^a · ln2^b, the simplest first. */\nconst CLEAN_EXPONENT_PAIRS: readonly (readonly [number, number])[] = (() => {\n const pairs: [number, number][] = [];\n for (let a = -2; a <= 2; a++) for (let b = -1; b <= 1; b++) pairs.push([a, b]);\n pairs.sort((x, y) => Math.abs(x[0]) + Math.abs(x[1]) - (Math.abs(y[0]) + Math.abs(y[1])) || Math.abs(x[0]) - Math.abs(y[0]));\n return pairs;\n})();\n\n/** `π`, `π²`, `ln 2`, `(ln 2)²`, as a product string. */\nfunction symbolicFactor(a: number, b: number): string {\n const parts: string[] = [];\n if (a === 1) parts.push('π');\n else if (a === 2) parts.push('π²');\n if (b === 1) parts.push('ln 2');\n else if (b === 2) parts.push('(ln 2)²');\n return parts.join(' ');\n}\n\n/** `r = p / (π^a · ln2^b)`, with `p = n/d`, as the exact form string. */\nfunction renderCleanForm(n: bigint, d: bigint, a: number, b: number, root: boolean): string {\n // Negative exponents put the symbol in the numerator.\n const numSym = symbolicFactor(a < 0 ? -a : 0, b < 0 ? -b : 0);\n const denSym = symbolicFactor(a > 0 ? a : 0, b > 0 ? b : 0);\n const numParts = [...(n === 1n && numSym !== '' ? [] : [n.toString()]), ...(numSym === '' ? [] : [numSym])];\n const denParts = [...(d === 1n ? [] : [d.toString()]), ...(denSym === '' ? [] : [denSym])];\n // `2π` stays joined; a number before `ln 2` is spaced (`2 ln 2`), as `π ln 2` is.\n const join = (parts: readonly string[]): string =>\n parts.reduce((acc, part) => (acc === '' ? part : part.startsWith('ln') || part.startsWith('(ln') ? `${acc} ${part}` : acc + part), '');\n const numerator = join(numParts);\n if (denParts.length === 0) return root ? (numerator === 'π' ? '√π' : /^[0-9]+$/.test(numerator) && numParts.length === 1 ? `√${numerator}` : `√(${numerator})`) : numerator;\n const denominator = denParts.length === 1 ? denParts[0]! : `(${join(denParts)})`;\n const form = `${numerator}/${denominator}`;\n return root ? `√(${form})` : form;\n}\n\n/**\n * The exact form of a clean dimensionless prefactor, or `undefined` when\n * the number is not one. A prefactor `r` is clean when `r = p / (π^a · ln2^b)`\n * for `a ∈ −2..2`, `b ∈ −1..1` and a rational `p` with denominator at most\n * 720, and numerator at most 720, that reproduces it to the relative 1e-9 the\n * derivation fit uses; or\n * when `r²` is, which names `√π`, `√(2π)` and their kin. The simplest\n * `(a, b)` that fits is the one reported, so `2` is `2` and not `2π/π`.\n * The rule replaces a list of seventeen constants matched at 1e-3; `9/8`\n * (be-80) and `π/ln 2` (be-84) were not on it, and `π²/60`, the\n * Stefan–Boltzmann closed form, is a hit under this rule.\n *\n * @internal\n */\nexport function cleanPrefactorForm(p: number): string | undefined {\n if (!Number.isFinite(p) || p === 0) return undefined;\n const sign = p < 0 ? '-' : '';\n const r = Math.abs(p);\n for (const root of [false, true]) {\n const value = root ? r * r : r;\n for (const [a, b] of CLEAN_EXPONENT_PAIRS) {\n const scaled = value * Math.pow(Math.PI, a) * Math.pow(Math.LN2, b);\n const q = rationalize(scaled, { maxDenominator: CLEAN_MAX_DENOMINATOR, tolerance: CLEAN_TOLERANCE });\n // The cap bounds the numerator too. With it free, every integer-valued double\n // (a G-closure of 3.6e21) is a rational over 1, and 21791/563 reproduced the\n // BCS ratio 1.7639 to 1e-9 by chance: a small rational has a small numerator.\n if (q !== undefined && (q.numerator < 0n ? -q.numerator : q.numerator) <= BigInt(CLEAN_MAX_DENOMINATOR)) {\n return sign + renderCleanForm(q.numerator, q.denominator, a, b, root);\n }\n }\n }\n return undefined;\n}\n\nconst isCleanPrefactor = (p: number): boolean => cleanPrefactorForm(p) !== undefined;\n\n/**\n * A canonical closure more than ten times away from 1 is not a recovered\n * prefactor. Wien (≈1.265, 2π over the root of a transcendental equation)\n * stays inside that window and keeps the empirical/tuned mark;\n * Stefan–Boltzmann's π²/60 is a clean form under `cleanPrefactorForm`. A\n * G-closure of an atomic law (10^21–10^25) does not pass. A recognized\n * constant (2π, ln 2, 4π, 1/(6π), …) stays even when it sits outside the\n * window. The search includes ε₀, so the\n * field energy density derives on {ε₀} with its sourced ½; the {ℏ, c, e}\n * stand-in it once closed on, μ0 rewritten through α, no longer arises, and\n * the guard that rejected it is gone (it changed no row of either graph).\n */\nfunction recoveredCanonicalPrefactor(id: string, prefactor: number): boolean {\n if (!id.startsWith('CE-') || isCleanPrefactor(prefactor)) return true;\n const mag = Math.abs(prefactor);\n if (!(mag > 0) || !Number.isFinite(mag)) return false;\n return Math.abs(Math.log10(mag)) <= 1;\n}\n\n/**\n * The outcome of trying to derive a bridge dimensionally + verify it.\n * `not-a-monomial` means the encoded formula adds dimensionful terms, so a\n * monomial reconstruction does not apply. It is not a failed reconstruction.\n */\ntype DerivationStatus =\n | 'derived'\n | 'decoy'\n | 'open'\n | 'no-samples'\n | 'not-a-monomial'\n | 'coefficient-unset';\ninterface DerivationResult {\n readonly status: DerivationStatus;\n readonly subset?: readonly string[];\n readonly monomial?: Readonly<Record<string, number>>;\n readonly prefactor?: number;\n /** True when derived AND the prefactor is a recognizable constant. */\n readonly cleanPrefactor?: boolean;\n /** The exact form of a clean prefactor (`9/8`, `π/ln 2`); absent when it is not clean. */\n readonly prefactorForm?: string;\n}\n\n/**\n * Attempt to derive a bridge: the first constant-subset that dimensionally\n * closes the target AND reproduces the evaluator up to a constant ratio.\n */\nexport function attemptDerivation(e: BridgeEdge): DerivationResult {\n // A sum of dimensionful terms is not a proportionality. The constant search\n // below would report a decoy, or a derived constant, for a monomial the\n // formula is not. Proof status is separate and is not read here.\n if (e.symbolic !== undefined && formulaShape(e.symbolic) === 'dimensional-sum') {\n return { status: 'not-a-monomial' };\n }\n // A missing coefficient is not the constant 1. The evaluator returns\n // no number, so a ratio against that number is not a recovered prefactor.\n if (e.coefficientUnset === true) return { status: 'coefficient-unset' };\n const { target, sources } = asVars(e);\n const inputs = makeInputs(e);\n const need = e.sources.length === 0 ? 1 : 2;\n let anyClosure = false;\n for (const S of FUNDAMENTAL_CONSTANT_SUBSETS) {\n const r = dimensionallyDetermines(target, [...sources, ...S]);\n if (!r.determined) continue;\n anyClosure = true;\n if (inputs.length < need) continue;\n const ratios = inputs.map((i) => {\n let cand = 1;\n const factors = e.formulaFactors ?? {};\n for (const s of e.sources) {\n if (factors[s.name] !== undefined) continue;\n cand *= Math.pow(i[s.name], r.monomial![s.name] ?? 0);\n }\n for (const k of S) cand *= Math.pow(k.si, r.monomial![k.name] ?? 0);\n for (const [name, exp] of Object.entries(factors)) cand *= Math.pow(i[name]!, exp);\n return e.evaluate(i) / cand;\n });\n // The coefficient of variation under 1e-9: this audit's own statistic and tolerance.\n const decided = constantRatio(ratios, 1e-9, { statistic: 'cv' });\n if (decided.constant && recoveredCanonicalPrefactor(e.id, decided.value)) {\n const form = cleanPrefactorForm(decided.value);\n return {\n status: 'derived',\n subset: S.map((x) => x.name),\n monomial: r.monomial,\n prefactor: decided.value,\n cleanPrefactor: form !== undefined,\n ...(form === undefined ? {} : { prefactorForm: form }),\n };\n }\n }\n if (inputs.length < need) return { status: 'no-samples' };\n return { status: anyClosure ? 'decoy' : 'open' };\n}\n\n/**\n * Graph distance from a bridge's quantities to the established-confidence\n * core (BFS over quantity co-occurrence). 0 = shares a quantity with an\n * established edge; Infinity = structurally isolated from it. Read by\n * `bridgePriority` only; it was exported with no caller outside this file.\n */\nfunction anchoringDistance(\n edges: readonly BridgeEdge[],\n e: BridgeEdge,\n): number {\n const adj = new Map<string, Set<string>>();\n const link = (a: string, b: string) => {\n mapGetOrInsert(adj, a, () => new Set<string>()).add(b);\n };\n const core = new Set<string>();\n for (const edge of edges) {\n const q = [...edge.sources.map((s) => s.name), edge.target.name];\n for (const a of q) for (const b of q) if (a !== b) link(a, b);\n if (edge.confidence === 'established') for (const n of q) core.add(n);\n }\n const distOf = new Map<string, number>();\n const queue = [...core];\n for (const c of core) distOf.set(c, 0);\n while (queue.length) {\n const x = queue.shift()!;\n for (const y of adj.get(x) ?? []) {\n if (!distOf.has(y)) {\n distOf.set(y, distOf.get(x)! + 1);\n queue.push(y);\n }\n }\n }\n const qs = [...e.sources.map((s) => s.name), e.target.name];\n return Math.min(...qs.map((n) => (distOf.has(n) ? distOf.get(n)! : Infinity)));\n}\n\n/** How grounded the equation is, as a structural signal. */\ntype Grounding = 'grounded' | 'empirical' | 'decoy' | 'open';\n/** Review-priority tier (1 = highest structural decidability). */\ntype Tier = 1 | 2 | 3;\n\n/** One bridge's triage profile. */\ninterface BridgePriorityEntry {\n readonly id: string;\n readonly beId: number | null;\n readonly status: string;\n /** `grounded` (recognized monomial+clean constant) → `open` (multi-param). */\n readonly grounding: Grounding;\n /** Free dimensionless parameters (lower = more tractable). */\n readonly complexity: number;\n /** Graph distance to the established core (Infinity = isolated). */\n readonly anchoring: number;\n /** A committed data confrontation exists (catalog signal, NOT engine). */\n readonly hasDataConfrontation: boolean;\n readonly tier: Tier;\n}\n\nfunction grounding(e: BridgeEdge): Grounding {\n const d = attemptDerivation(e);\n if (d.status === 'derived') return d.cleanPrefactor ? 'grounded' : 'empirical';\n if (d.status === 'decoy') return 'decoy';\n // A dimensional sum has no recognized monomial. It is not a decoy.\n return 'open';\n}\n\nconst GROUND_RANK: Record<Grounding, number> = {\n grounded: 0,\n empirical: 1,\n decoy: 2,\n open: 3,\n};\n\n/**\n * Triage the non-established bridges by structural decidability against the\n * established core. Returns profiles sorted best-first (Tier, then anchoring,\n * grounding, complexity). NOT a credibility ranking — see module docstring.\n */\nexport function bridgePriority(\n edges: readonly BridgeEdge[],\n): BridgePriorityEntry[] {\n const statusOf = new Map<number, string>(\n BRIDGE_EQUATIONS.map((b) => [b.id, b.status]),\n );\n const entries: BridgePriorityEntry[] = [];\n for (const e of edges) {\n if (e.confidence === 'established') continue; // already in the core\n const g = grounding(e);\n const complexity = dimensionalFreedom(e);\n const anchoring = anchoringDistance(edges, e);\n const anchored = Number.isFinite(anchoring);\n const tier: Tier =\n anchored && (g === 'grounded' || complexity <= 1)\n ? 1\n : anchored || g === 'grounded'\n ? 2\n : 3;\n entries.push({\n id: e.id,\n beId: e.beId,\n status: e.beId == null ? 'law' : (statusOf.get(e.beId) ?? 'unknown'),\n grounding: g,\n complexity,\n anchoring,\n hasDataConfrontation: e.beId != null && DATA_CONFRONTED_IDS.has(e.beId),\n tier,\n });\n }\n entries.sort(\n (a, b) =>\n a.tier - b.tier ||\n a.anchoring - b.anchoring ||\n GROUND_RANK[a.grounding] - GROUND_RANK[b.grounding] ||\n a.complexity - b.complexity ||\n a.id.localeCompare(b.id),\n );\n return entries;\n}\n\n// ---------------------------------------------------------------------------\n// Catalog linkage map — how the equations connect via shared quantities.\n// ---------------------------------------------------------------------------\n\n// The quantity-name canonicalizer (`QUANTITY_IDENTIFICATIONS`) and the component partition are\n// `quantity-clusters.ts`, the one owner shared with the visual map and the discovery funnel.\n// NOTE: `anchoringDistance` deliberately does NOT canonicalize — it links on raw names (its\n// distance-0/∞ contract is pinned).\n\n/** An edge's distinct (canonical) quantity names — sources ∪ target. */\nfunction quantitiesOf(e: BridgeEdge, canon: (n: string) => string): string[] {\n return [...new Set([...e.sources.map((s) => canon(s.name)), canon(e.target.name)])];\n}\n\n/** One connected cluster of equations linked by shared quantities. */\ninterface LinkageCluster {\n /** Edge ids in this cluster. */\n readonly edges: readonly string[];\n readonly size: number;\n /** Contains an established-confidence edge (anchored to known physics). */\n readonly anchored: boolean;\n /** Catalog-status histogram across the cluster's edges. */\n readonly statusMix: Readonly<Record<string, number>>;\n /** Quantities that appear in ≥2 of the cluster's edges (the link hubs). */\n readonly hubs: readonly string[];\n}\n\n/** The catalog's linkage structure. */\ninterface LinkageMap {\n /** Clusters, largest first. */\n readonly clusters: readonly LinkageCluster[];\n readonly componentCount: number;\n /** Single-edge cluster ids (structurally isolated). */\n readonly isolated: readonly string[];\n /** Number of valid pairwise compositions over the edge set (directed links). */\n readonly compositions: number;\n}\n\n/** The cluster structure WITHOUT the composition count — the cheap core every\n * linkage consumer except `upt map`'s headline needs. */\ntype ClusterMap = Omit<LinkageMap, 'compositions'>;\n\n/**\n * The cluster structure of the catalog graph: connected components whose nodes\n * are edges and whose links are shared quantities (honoring\n * `QUANTITY_IDENTIFICATIONS`). Reveals a dominant anchored core hubbed on a few\n * quantities, plus thematic clusters and a long isolated tail. A descriptive\n * structural map, NOT a credibility signal (see bridgePriority's caveat).\n *\n * This is the cheap core: it does NOT run the O(E²) pairwise-composition count.\n * The candidate/connector proposers (which never read `.compositions`) call\n * this directly; `linkageMap` adds the count for `upt map`'s headline.\n */\nfunction clusterMap(edges: readonly BridgeEdge[]): ClusterMap {\n const statusOf = new Map<number, string>(\n BRIDGE_EQUATIONS.map((b) => [b.id, b.status]),\n );\n const canon = quantityCanonicalizer();\n\n // Edges sharing a (canonical) quantity are one cluster: the shared partition, already in\n // the order this map always had (largest first, then by first edge id; input order inside).\n const clusters: LinkageCluster[] = clusterBySharedKeys(\n edges,\n (e) => quantitiesOf(e, canon),\n (e) => e.id,\n ).map((es) => {\n const statusMix: Record<string, number> = {};\n const qcount: Record<string, number> = {};\n for (const e of es) {\n const s = e.beId == null ? 'law' : (statusOf.get(e.beId) ?? 'unknown');\n statusMix[s] = (statusMix[s] ?? 0) + 1;\n for (const q of quantitiesOf(e, canon)) qcount[q] = (qcount[q] ?? 0) + 1;\n }\n return {\n edges: es.map((e) => e.id),\n size: es.length,\n anchored: es.some((e) => e.confidence === 'established'),\n statusMix,\n hubs: Object.entries(qcount).filter(([, c]) => c >= 2).map(([q]) => q).sort(),\n };\n });\n\n return {\n clusters,\n componentCount: clusters.length,\n isolated: clusters.filter((c) => c.size === 1).flatMap((c) => c.edges).sort(),\n };\n}\n\n/**\n * The full linkage map: the {@link clusterMap} structure plus the (O(E²))\n * pairwise-composition count. Only `upt map`'s headline needs the count, so\n * everything else calls `clusterMap` directly. Internal — not on the public\n * surface (mirrors the rest of bridge-analysis).\n */\nexport function linkageMap(edges: readonly BridgeEdge[]): LinkageMap {\n return {\n ...clusterMap(edges),\n compositions: enumerateCompositions(edges).all.length,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Link-candidate proposals — cross-cluster same-dimension quantity pairs.\n// ---------------------------------------------------------------------------\n\n/**\n * A candidate identification surfaced by the linkage map: two quantities in\n * DIFFERENT clusters with the SAME (non-dimensionless) dimension — a\n * potential \"missing link\" of the kind the Hawking-temperature ≡\n * temperature identification was.\n */\nexport interface LinkCandidate {\n /** Quantity in cluster A. */\n readonly a: string;\n /** Quantity in cluster B (a ≠ b; different clusters). */\n readonly b: string;\n /** Shared SI dimension (formatted). */\n readonly dim: string;\n /** One side is in the anchored (known-physics) cluster. */\n readonly touchesCore: boolean;\n /** The names share a word token (same physical KIND, e.g. both `*-mass`). */\n readonly sameKind: boolean;\n /** The shared token, when `sameKind`. */\n readonly sharedToken: string | null;\n}\n\nfunction sharedNameToken(a: string, b: string): string | null {\n const tb = new Set(b.split('-'));\n for (const t of a.split('-')) if (tb.has(t)) return t;\n return null;\n}\n\n/**\n * Propose candidate cross-cluster identifications from the linkage map:\n * every pair of quantities in different clusters that share a\n * non-dimensionless dimension. ⚠ This is a coincidence-heavy REVIEW SURFACE\n * (same dimension is a weak signal — see the dimensional audit's decoy\n * finding), NOT a list of discovered bridges. Ranked: core-touching first,\n * then same-kind. The output's only path is human adjudication\n * (Part-VI §XXVII-B).\n *\n * Internal — not on the public surface.\n */\nexport function proposeLinkCandidates(edges: readonly BridgeEdge[]): LinkCandidate[] {\n const m = clusterMap(edges); // clusters only — skips the O(E²) composition count\n const canon = quantityCanonicalizer();\n const edgeCluster = new Map<string, number>();\n m.clusters.forEach((c, ci) => c.edges.forEach((id) => edgeCluster.set(id, ci)));\n\n const qCluster = new Map<string, number>();\n const qDim = new Map<string, Dimension>();\n const qAnchored = new Map<string, boolean>();\n for (const e of edges) {\n const ci = edgeCluster.get(e.id)!;\n const anchored = m.clusters[ci].anchored;\n for (const s of [...e.sources, e.target]) {\n const n = canon(s.name);\n qCluster.set(n, ci);\n qDim.set(n, s.dim);\n if (anchored) qAnchored.set(n, true);\n }\n }\n\n const names = [...qDim.keys()];\n const out: LinkCandidate[] = [];\n for (let i = 0; i < names.length; i++) {\n for (let j = i + 1; j < names.length; j++) {\n const a = names[i];\n const b = names[j];\n if (qCluster.get(a) === qCluster.get(b)) continue; // already linked\n const da = qDim.get(a)!;\n if (equals(da, DIMENSIONLESS)) continue; // dimensionless = too generic\n if (!equals(da, qDim.get(b)!)) continue;\n const token = sharedNameToken(a, b);\n out.push({\n a,\n b,\n dim: format(da),\n touchesCore: !!(qAnchored.get(a) || qAnchored.get(b)),\n sameKind: token !== null,\n sharedToken: token,\n });\n }\n }\n out.sort(\n (x, y) =>\n Number(y.touchesCore) - Number(x.touchesCore) ||\n Number(y.sameKind) - Number(x.sameKind) ||\n x.a.localeCompare(y.a) ||\n x.b.localeCompare(y.b),\n );\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Orphan connectors — candidate identifications that pull an ISOLATED bridge\n// into the anchored core.\n// ---------------------------------------------------------------------------\n\n/**\n * A candidate identification with ONE endpoint on an isolated (single-edge)\n * bridge and the OTHER on an anchored-cluster bridge — accepting it would\n * connect orphaned physics to the established core.\n */\ninterface OrphanConnector {\n /** The isolated bridge's edge id (the orphan). */\n readonly orphanEdge: string;\n /** The orphan-side quantity. */\n readonly orphanQuantity: string;\n /** The core-side quantity it shares a dimension with. */\n readonly coreQuantity: string;\n /** An anchored-cluster edge touching `coreQuantity`. */\n readonly coreEdge: string;\n /** Shared SI dimension (formatted). */\n readonly dim: string;\n /** The two names share a word token. A token is not a verdict. */\n readonly sameKind: boolean;\n /** The shared token, when `sameKind`. */\n readonly sharedToken: string | null;\n}\n\n/** Orphan-connector report. */\ninterface OrphanConnectorReport {\n /** Connectors, same-kind first then by orphan id. */\n readonly connectors: readonly OrphanConnector[];\n /** Of those, how many share a name token. A token is not a verdict. */\n readonly sameKindCount: number;\n /** Isolated bridges with ≥1 same-kind connector to the core, sorted. */\n readonly connectedOrphans: readonly string[];\n /** Isolated bridges with NO connector at all (truly unconnected), sorted. */\n readonly unconnectedOrphans: readonly string[];\n}\n\n/**\n * Of the catalog's isolated bridges, which could connect to the anchored core\n * via a same-dimension quantity identification? This intersects\n * `proposeLinkCandidates` with the linkage map's isolated/anchored partition:\n * a connector is a cross-cluster candidate whose one side sits on an isolated\n * bridge and whose other side touches an anchored cluster. The same-kind\n * subset (shared name token) is the least-implausible set worth a physicist's\n * review — the structural frontier of the catalog (the 20 orphaned bridges).\n *\n * ⚠ Same dimension is a WEAK prior (the dimensional audit's decoy finding):\n * most connectors are coincidences (a Förster radius is not a Schwarzschild\n * radius). A REVIEW SURFACE only — Part-VI §XXVII-B. Internal.\n */\nexport function proposeOrphanConnectors(\n edges: readonly BridgeEdge[],\n): OrphanConnectorReport {\n const m = clusterMap(edges); // clusters/isolated only — skips the composition count\n const isolated = new Set(m.isolated);\n const edgeAnchored = new Map<string, boolean>();\n m.clusters.forEach((c) => c.edges.forEach((id) => edgeAnchored.set(id, c.anchored)));\n\n // quantity (raw name) → the edges touching it. Isolated bridges carry no\n // registered identifications, so raw names suffice for the orphan side.\n const qToEdges = new Map<string, string[]>();\n for (const e of edges) {\n for (const q of [...e.sources, e.target]) {\n mapGetOrInsert(qToEdges, q.name, () => []).push(e.id);\n }\n }\n const orphanEdgeOf = (q: string): string | undefined =>\n (qToEdges.get(q) ?? []).find((id) => isolated.has(id));\n // The core is an anchored cluster of more than one edge. An established\n // bridge that is itself isolated is an orphan, not the core, so a pair of\n // orphans is not a connector.\n const anchoredEdgeOf = (q: string): string | undefined =>\n (qToEdges.get(q) ?? []).find((id) => edgeAnchored.get(id) === true && !isolated.has(id));\n\n const connectors: OrphanConnector[] = [];\n for (const c of proposeLinkCandidates(edges)) {\n const aOrphan = orphanEdgeOf(c.a);\n const bOrphan = orphanEdgeOf(c.b);\n const aAnchored = anchoredEdgeOf(c.a);\n const bAnchored = anchoredEdgeOf(c.b);\n let conn: OrphanConnector | null = null;\n if (aOrphan && bAnchored) {\n conn = { orphanEdge: aOrphan, orphanQuantity: c.a, coreQuantity: c.b, coreEdge: bAnchored, dim: c.dim, sameKind: c.sameKind, sharedToken: c.sharedToken };\n } else if (bOrphan && aAnchored) {\n conn = { orphanEdge: bOrphan, orphanQuantity: c.b, coreQuantity: c.a, coreEdge: aAnchored, dim: c.dim, sameKind: c.sameKind, sharedToken: c.sharedToken };\n }\n if (conn) connectors.push(conn);\n }\n connectors.sort(\n (x, y) =>\n Number(y.sameKind) - Number(x.sameKind) ||\n x.orphanEdge.localeCompare(y.orphanEdge) ||\n x.orphanQuantity.localeCompare(y.orphanQuantity) ||\n x.coreQuantity.localeCompare(y.coreQuantity),\n );\n\n const connectedSameKind = new Set(\n connectors.filter((c) => c.sameKind).map((c) => c.orphanEdge),\n );\n const anyConnector = new Set(connectors.map((c) => c.orphanEdge));\n return {\n connectors,\n sameKindCount: connectors.filter((c) => c.sameKind).length,\n connectedOrphans: [...connectedSameKind].sort(),\n unconnectedOrphans: m.isolated.filter((id) => !anyConnector.has(id)).sort(),\n };\n}\n"]}
|
|
@@ -24,6 +24,24 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import type { Dimension } from '../dimensional/types.js';
|
|
26
26
|
import type { CanonicalEquation } from '../canonical/canonical-equation.js';
|
|
27
|
+
/**
|
|
28
|
+
* Which exponent differs, when a formula differs in FORM from the canonical
|
|
29
|
+
* monomial (proposal 4): the fit of `log|yours/canonical|` on the logs of the
|
|
30
|
+
* variables over a full-rank design. `exponents` are the fitted powers,
|
|
31
|
+
* replaced by the small rational they stand for when one fits; `exact` is the
|
|
32
|
+
* rational spelled (`-1`, `1/2`, `0`) or the fitted decimal when none fits.
|
|
33
|
+
* `r2` is the fit's coefficient of determination: 1 means the ratio IS a
|
|
34
|
+
* monomial in these variables, below 1 it is not.
|
|
35
|
+
*
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export interface ExponentDifference {
|
|
39
|
+
readonly exponents: Readonly<Record<string, number>>;
|
|
40
|
+
readonly exact: Readonly<Record<string, string>>;
|
|
41
|
+
readonly r2: number;
|
|
42
|
+
/** True when `r2` is 1 to within 1e-9: the difference is a monomial. */
|
|
43
|
+
readonly monomial: boolean;
|
|
44
|
+
}
|
|
27
45
|
/** How a user formula compares with one canonical equation. @internal */
|
|
28
46
|
export interface CanonicalComparison {
|
|
29
47
|
readonly id: string;
|
|
@@ -33,6 +51,8 @@ export interface CanonicalComparison {
|
|
|
33
51
|
readonly ratio?: number;
|
|
34
52
|
/** Why the prefactor is unchecked, or why no comparison was made. */
|
|
35
53
|
readonly detail?: string;
|
|
54
|
+
/** For `form` only: which exponent differs, from a log-design fit. Absent when the fit could not run. */
|
|
55
|
+
readonly exponentDifference?: ExponentDifference;
|
|
36
56
|
/** `[yours, canonical]` for each variable paired by dimension, not by name (persona finding N1). */
|
|
37
57
|
readonly paired?: readonly (readonly [string, string])[];
|
|
38
58
|
/**
|
|
@@ -60,6 +80,26 @@ export type ComparisonSource = string | {
|
|
|
60
80
|
readonly name: string;
|
|
61
81
|
readonly dim: Dimension;
|
|
62
82
|
};
|
|
83
|
+
/**
|
|
84
|
+
* Fit `log|ratio|` on the logs of the variables over a full-rank design: the
|
|
85
|
+
* base point of the comparison scheme, each variable doubled, each variable
|
|
86
|
+
* quadrupled, and all of them doubled together (2k + 2 rows for k variables,
|
|
87
|
+
* so a difference that is not a monomial has rows to fail on). The design's
|
|
88
|
+
* rank is checked before the fit. `undefined` when there is no variable, when
|
|
89
|
+
* the ratio is zero, negative or not finite at a point, or when the fit
|
|
90
|
+
* cannot run.
|
|
91
|
+
*
|
|
92
|
+
* @internal
|
|
93
|
+
*/
|
|
94
|
+
export declare function diagnoseExponentDifference(names: readonly string[], ratioAt: (point: Readonly<Record<string, number>>) => number): ExponentDifference | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* One line for an exponent difference: `yours/canonical ∝ mass^-1 (R² = 1):
|
|
97
|
+
* the difference is a monomial in these variables`. A rational exponent is
|
|
98
|
+
* braced (`speed^{1/2}`), a unit one is bare, a zero one is omitted.
|
|
99
|
+
*
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
export declare function describeExponentDifference(d: ExponentDifference): string;
|
|
63
103
|
/** Compare a user expression against the canonical equations that share its target and source quantities. `evaluateUser` is called only for the user's expression; each canonical value comes from that entry's `scalarAst` or from its registry monomial. */
|
|
64
104
|
export declare function compareWithCanonical(target: string, sources: readonly ComparisonSource[], evaluateUser: (values: Readonly<Record<string, number>>) => number, entries?: readonly CanonicalEquation[], constantOverrides?: Readonly<Record<string, number>>): CanonicalComparison[];
|
|
65
105
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-compare.d.ts","sourceRoot":"","sources":["../../src/composition/canonical-compare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"canonical-compare.d.ts","sourceRoot":"","sources":["../../src/composition/canonical-compare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAiC5E;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,qBAAqB,GAAG,cAAc,CAAC;IACrF,mEAAmE;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,yGAAyG;IACzG,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACjD,oGAAoG;IACpG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IACzD;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,wGAAwG;AACxG,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;CAAE,CAAC;AA0N3F;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,GAC3D,kBAAkB,GAAG,SAAS,CAoDhC;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAcxE;AAuED,8PAA8P;AAC9P,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,EAClE,OAAO,GAAE,SAAS,iBAAiB,EAAwB,EAC3D,iBAAiB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACnD,mBAAmB,EAAE,CAqNvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAC3C,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,GAC7G,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA2DhC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAIhF;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAAC;CACxC;AAED,qDAAqD;AACrD,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;IAChF,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAChE;AAmCD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,CAAC,EAAE,EAClF,KAAK,GAAE,SAAS,WAAW,EAAkB,GAC5C,gBAAgB,EAAE,CAwBpB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,SAAS,mBAAmB,EAAE,EAC3C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,CAAC,EAAE,EAClF,KAAK,GAAE,SAAS,WAAW,EAAkB,GAC5C,MAAM,EAAE,CAWV;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAwBjE"}
|