universal-physics-tensor 9.0.0 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -17
- package/bin/upt.mjs +13 -1
- package/data/atlas/atlas.json +79 -68
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +24 -23
- package/data/atlas/oscillators.json +21 -16
- package/data/atlas/waves.json +36 -31
- package/data/atlas/witness-results.json +11 -11
- package/data/bridge-catalog.json +1192 -1636
- package/data/bridge-catalog.schema.json +390 -135
- package/data/quantities.json +53 -19
- package/data/schemas/atlas-record.v0.json +184 -46
- package/data/units.json +33 -4
- package/dist/atlas/applicability.d.ts.map +1 -1
- package/dist/atlas/applicability.js +35 -18
- package/dist/atlas/applicability.js.map +1 -1
- package/dist/atlas/association.js.map +1 -1
- package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
- package/dist/atlas/benchmark/backend-shapes.js +5 -1
- package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
- package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
- package/dist/atlas/benchmark/baselines.js +8 -0
- package/dist/atlas/benchmark/baselines.js.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts +12 -3
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +30 -21
- package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
- package/dist/atlas/benchmark/leakage.js.map +1 -1
- package/dist/atlas/benchmark/loader.js +2 -2
- package/dist/atlas/benchmark/loader.js.map +1 -1
- package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
- package/dist/atlas/benchmark/run-atlas.js +14 -2
- package/dist/atlas/benchmark/run-atlas.js.map +1 -1
- package/dist/atlas/benchmark/stats.d.ts +3 -3
- package/dist/atlas/benchmark/stats.d.ts.map +1 -1
- package/dist/atlas/benchmark/stats.js +16 -8
- package/dist/atlas/benchmark/stats.js.map +1 -1
- package/dist/atlas/benchmark/study.js.map +1 -1
- package/dist/atlas/benchmark/types.js.map +1 -1
- package/dist/atlas/bridge-record.d.ts +4 -4
- package/dist/atlas/bridge-record.d.ts.map +1 -1
- package/dist/atlas/bridge-record.js +6 -6
- package/dist/atlas/bridge-record.js.map +1 -1
- package/dist/atlas/catalog-formal-ref.d.ts +26 -3
- package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
- package/dist/atlas/catalog-formal-ref.js +52 -5
- package/dist/atlas/catalog-formal-ref.js.map +1 -1
- package/dist/atlas/chain-pipeline.d.ts +0 -11
- package/dist/atlas/chain-pipeline.d.ts.map +1 -1
- package/dist/atlas/chain-pipeline.js +12 -24
- package/dist/atlas/chain-pipeline.js.map +1 -1
- package/dist/atlas/composition-table.js.map +1 -1
- package/dist/atlas/conventions.js.map +1 -1
- package/dist/atlas/coverage.d.ts +2 -2
- package/dist/atlas/coverage.js.map +1 -1
- package/dist/atlas/derivation.js.map +1 -1
- package/dist/atlas/derive-evidence.d.ts +6 -4
- package/dist/atlas/derive-evidence.d.ts.map +1 -1
- package/dist/atlas/derive-evidence.js +7 -2
- package/dist/atlas/derive-evidence.js.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.js +8 -17
- package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
- package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges.js +27 -42
- package/dist/atlas/diffusion/bridges.js.map +1 -1
- package/dist/atlas/diffusion/dimensions.d.ts +6 -14
- package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
- package/dist/atlas/diffusion/dimensions.js +8 -16
- package/dist/atlas/diffusion/dimensions.js.map +1 -1
- package/dist/atlas/diffusion/index.d.ts +1 -1
- package/dist/atlas/diffusion/index.d.ts.map +1 -1
- package/dist/atlas/diffusion/index.js.map +1 -1
- package/dist/atlas/diffusion/models.d.ts +3 -3
- package/dist/atlas/diffusion/models.d.ts.map +1 -1
- package/dist/atlas/diffusion/models.js +5 -10
- package/dist/atlas/diffusion/models.js.map +1 -1
- package/dist/atlas/diffusion/numerics.d.ts +16 -4
- package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
- package/dist/atlas/diffusion/numerics.js +38 -24
- package/dist/atlas/diffusion/numerics.js.map +1 -1
- package/dist/atlas/error-algebra.d.ts +6 -0
- package/dist/atlas/error-algebra.d.ts.map +1 -1
- package/dist/atlas/error-algebra.js +26 -0
- package/dist/atlas/error-algebra.js.map +1 -1
- package/dist/atlas/export.d.ts +18 -2
- package/dist/atlas/export.d.ts.map +1 -1
- package/dist/atlas/export.js +9 -3
- package/dist/atlas/export.js.map +1 -1
- package/dist/atlas/families.d.ts +19 -2
- package/dist/atlas/families.d.ts.map +1 -1
- package/dist/atlas/families.js +26 -3
- package/dist/atlas/families.js.map +1 -1
- package/dist/atlas/family.d.ts +27 -0
- package/dist/atlas/family.d.ts.map +1 -0
- package/dist/atlas/family.js +12 -0
- package/dist/atlas/family.js.map +1 -0
- package/dist/atlas/index.d.ts +3 -2
- package/dist/atlas/index.d.ts.map +1 -1
- package/dist/atlas/index.js +2 -1
- package/dist/atlas/index.js.map +1 -1
- package/dist/atlas/link-prediction.d.ts +107 -4
- package/dist/atlas/link-prediction.d.ts.map +1 -1
- package/dist/atlas/link-prediction.js +212 -66
- package/dist/atlas/link-prediction.js.map +1 -1
- package/dist/atlas/model.js.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.js +7 -12
- package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.js +6 -10
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.js +23 -36
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
- package/dist/atlas/oscillators/dimensions.d.ts +9 -21
- package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
- package/dist/atlas/oscillators/dimensions.js +9 -21
- package/dist/atlas/oscillators/dimensions.js.map +1 -1
- package/dist/atlas/oscillators/index.d.ts +1 -16
- package/dist/atlas/oscillators/index.d.ts.map +1 -1
- package/dist/atlas/oscillators/index.js.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
- package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.js +17 -15
- package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
- package/dist/atlas/oscillators/models.d.ts.map +1 -1
- package/dist/atlas/oscillators/models.js +2 -6
- package/dist/atlas/oscillators/models.js.map +1 -1
- package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
- package/dist/atlas/oscillators/norm-transport.js.map +1 -1
- package/dist/atlas/oscillators/norms.js.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
- package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.js +60 -40
- package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
- package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
- package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
- package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/phase-translation.js +3 -4
- package/dist/atlas/oscillators/phase-translation.js.map +1 -1
- package/dist/atlas/oscillators/position-translation.d.ts +68 -7
- package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/position-translation.js +123 -12
- package/dist/atlas/oscillators/position-translation.js.map +1 -1
- package/dist/atlas/oscillators/rejections.d.ts +0 -2
- package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
- package/dist/atlas/oscillators/rejections.js +0 -7
- package/dist/atlas/oscillators/rejections.js.map +1 -1
- package/dist/atlas/path-bound.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +25 -24
- package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
- package/dist/atlas/physjs-entries.generated.js +25 -24
- package/dist/atlas/physjs-entries.generated.js.map +1 -1
- package/dist/atlas/physjs-ref.d.ts +107 -70
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +184 -101
- package/dist/atlas/physjs-ref.js.map +1 -1
- package/dist/atlas/physjs-reviewed.d.ts +31 -0
- package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
- package/dist/atlas/physjs-reviewed.js +194 -0
- package/dist/atlas/physjs-reviewed.js.map +1 -0
- package/dist/atlas/poster/associations.js.map +1 -1
- package/dist/atlas/poster/derivations.js.map +1 -1
- package/dist/atlas/poster/statements.d.ts +0 -19
- package/dist/atlas/poster/statements.d.ts.map +1 -1
- package/dist/atlas/poster/statements.js +1 -1
- package/dist/atlas/poster/statements.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +1 -1
- package/dist/atlas/proof-target.js +1 -1
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/atlas/public.d.ts +2 -1
- package/dist/atlas/public.d.ts.map +1 -1
- package/dist/atlas/public.js +2 -1
- package/dist/atlas/public.js.map +1 -1
- package/dist/atlas/regime.d.ts +1 -1
- package/dist/atlas/regime.d.ts.map +1 -1
- package/dist/atlas/regime.js +1 -1
- package/dist/atlas/regime.js.map +1 -1
- package/dist/atlas/serialize.d.ts +18 -12
- package/dist/atlas/serialize.d.ts.map +1 -1
- package/dist/atlas/serialize.js +28 -18
- package/dist/atlas/serialize.js.map +1 -1
- package/dist/atlas/statement.js.map +1 -1
- package/dist/atlas/text-overlap.d.ts +23 -0
- package/dist/atlas/text-overlap.d.ts.map +1 -0
- package/dist/atlas/text-overlap.js +41 -0
- package/dist/atlas/text-overlap.js.map +1 -0
- package/dist/atlas/translation-registry.js.map +1 -1
- package/dist/atlas/translation.js.map +1 -1
- package/dist/atlas/types.d.ts +9 -2
- package/dist/atlas/types.d.ts.map +1 -1
- package/dist/atlas/types.js +1 -1
- package/dist/atlas/types.js.map +1 -1
- package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/waves/bridges-closure.js +2 -9
- package/dist/atlas/waves/bridges-closure.js.map +1 -1
- package/dist/atlas/waves/bridges.d.ts.map +1 -1
- package/dist/atlas/waves/bridges.js +32 -52
- package/dist/atlas/waves/bridges.js.map +1 -1
- package/dist/atlas/waves/index.d.ts +1 -1
- package/dist/atlas/waves/index.d.ts.map +1 -1
- package/dist/atlas/waves/index.js.map +1 -1
- package/dist/atlas/waves/models.d.ts +5 -6
- package/dist/atlas/waves/models.d.ts.map +1 -1
- package/dist/atlas/waves/models.js +7 -13
- package/dist/atlas/waves/models.js.map +1 -1
- package/dist/atlas/waves/numerics.d.ts.map +1 -1
- package/dist/atlas/waves/numerics.js +10 -3
- package/dist/atlas/waves/numerics.js.map +1 -1
- package/dist/atlas/witness-artifact.js.map +1 -1
- package/dist/atlas/witness-dominance.d.ts +4 -3
- package/dist/atlas/witness-dominance.d.ts.map +1 -1
- package/dist/atlas/witness-dominance.js +15 -5
- package/dist/atlas/witness-dominance.js.map +1 -1
- package/dist/atlas/witness-numeric.d.ts +38 -4
- package/dist/atlas/witness-numeric.d.ts.map +1 -1
- package/dist/atlas/witness-numeric.js +80 -2
- package/dist/atlas/witness-numeric.js.map +1 -1
- package/dist/atlas/witness-result.d.ts +7 -1
- package/dist/atlas/witness-result.d.ts.map +1 -1
- package/dist/atlas/witness-result.js.map +1 -1
- package/dist/atlas/witness-specs.d.ts.map +1 -1
- package/dist/atlas/witness-specs.js +19 -0
- package/dist/atlas/witness-specs.js.map +1 -1
- package/dist/atlas/witness-symbolic.d.ts +75 -3
- package/dist/atlas/witness-symbolic.d.ts.map +1 -1
- package/dist/atlas/witness-symbolic.js +116 -10
- package/dist/atlas/witness-symbolic.js.map +1 -1
- package/dist/atlas/witnesses/quantum-support.js.map +1 -1
- package/dist/bridges/caller-table.d.ts +1 -1
- package/dist/bridges/caller-table.d.ts.map +1 -1
- package/dist/bridges/caller-table.js.map +1 -1
- package/dist/bridges/carrier-sign.d.ts.map +1 -1
- package/dist/bridges/carrier-sign.js +8 -3
- package/dist/bridges/carrier-sign.js.map +1 -1
- package/dist/bridges/catalog-adapter.d.ts +12 -3
- package/dist/bridges/catalog-adapter.d.ts.map +1 -1
- package/dist/bridges/catalog-adapter.js +17 -9
- package/dist/bridges/catalog-adapter.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts +12 -2
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +181 -13
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +74 -26
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/catalog-types.js +11 -1
- package/dist/bridges/catalog-types.js.map +1 -1
- package/dist/bridges/coefficient-statement.js +1 -5
- package/dist/bridges/coefficient-statement.js.map +1 -1
- package/dist/bridges/confrontation-coverage.js.map +1 -1
- package/dist/bridges/confrontations.d.ts +1 -1
- package/dist/bridges/confrontations.d.ts.map +1 -1
- package/dist/bridges/confrontations.js +1 -1
- package/dist/bridges/confrontations.js.map +1 -1
- package/dist/bridges/evaluation-errors.d.ts +46 -3
- package/dist/bridges/evaluation-errors.d.ts.map +1 -1
- package/dist/bridges/evaluation-errors.js +40 -4
- package/dist/bridges/evaluation-errors.js.map +1 -1
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +7 -5
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts +17 -2
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +76 -28
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +38 -4
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +101 -12
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +40 -4
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +128 -19
- package/dist/bridges/holds.js.map +1 -1
- package/dist/bridges/index.d.ts +15 -14
- package/dist/bridges/index.d.ts.map +1 -1
- package/dist/bridges/index.js +14 -15
- package/dist/bridges/index.js.map +1 -1
- package/dist/bridges/input-contract.js.map +1 -1
- package/dist/bridges/membership.d.ts +5 -3
- package/dist/bridges/membership.d.ts.map +1 -1
- package/dist/bridges/membership.js +5 -6
- package/dist/bridges/membership.js.map +1 -1
- package/dist/bridges/notices.d.ts.map +1 -1
- package/dist/bridges/notices.js +5 -5
- package/dist/bridges/notices.js.map +1 -1
- package/dist/bridges/observations/types.js.map +1 -1
- package/dist/bridges/rejected.d.ts +11 -17
- package/dist/bridges/rejected.d.ts.map +1 -1
- package/dist/bridges/rejected.js +13 -68
- package/dist/bridges/rejected.js.map +1 -1
- package/dist/bridges/relation-eval.d.ts +6 -7
- package/dist/bridges/relation-eval.d.ts.map +1 -1
- package/dist/bridges/relation-eval.js +20 -50
- package/dist/bridges/relation-eval.js.map +1 -1
- package/dist/bridges/rhs-registry.js.map +1 -1
- package/dist/bridges/sensitivity.d.ts +11 -3
- package/dist/bridges/sensitivity.d.ts.map +1 -1
- package/dist/bridges/sensitivity.js +27 -13
- package/dist/bridges/sensitivity.js.map +1 -1
- package/dist/bridges/tensor-index.js.map +1 -1
- package/dist/bridges/types.d.ts +1 -7
- package/dist/bridges/types.d.ts.map +1 -1
- package/dist/bridges/types.js +1 -4
- package/dist/bridges/types.js.map +1 -1
- package/dist/bridges/validity.d.ts +33 -0
- package/dist/bridges/validity.d.ts.map +1 -0
- package/dist/bridges/validity.js +67 -0
- package/dist/bridges/validity.js.map +1 -0
- package/dist/canonical/canonical-equation.js.map +1 -1
- package/dist/canonical/dimensional-fields.js.map +1 -1
- package/dist/canonical/entries/_l1-build.js.map +1 -1
- package/dist/canonical/entries/atomic.js +1 -3
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
- package/dist/canonical/entries/condensed-matter.js +8 -9
- package/dist/canonical/entries/condensed-matter.js.map +1 -1
- package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
- package/dist/canonical/entries/dimensional-classics.js +5 -6
- package/dist/canonical/entries/dimensional-classics.js.map +1 -1
- package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
- package/dist/canonical/entries/electromagnetism.js +6 -12
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +3 -7
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/mechanics.js +4 -6
- package/dist/canonical/entries/mechanics.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +38 -39
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/entries/relativity.d.ts.map +1 -1
- package/dist/canonical/entries/relativity.js +6 -6
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/statistical-mechanics.js +5 -5
- package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/fixed-points.d.ts +94 -0
- package/dist/canonical/fixed-points.d.ts.map +1 -0
- package/dist/canonical/fixed-points.js +81 -0
- package/dist/canonical/fixed-points.js.map +1 -0
- package/dist/canonical/linkage.d.ts +29 -4
- package/dist/canonical/linkage.d.ts.map +1 -1
- package/dist/canonical/linkage.js +47 -64
- package/dist/canonical/linkage.js.map +1 -1
- package/dist/canonical/normal-form.d.ts +0 -8
- package/dist/canonical/normal-form.d.ts.map +1 -1
- package/dist/canonical/normal-form.js +22 -23
- package/dist/canonical/normal-form.js.map +1 -1
- package/dist/canonical/registry.js.map +1 -1
- package/dist/canonical/residual.js.map +1 -1
- package/dist/canonical/seed-l-layer.d.ts +7 -1
- package/dist/canonical/seed-l-layer.d.ts.map +1 -1
- package/dist/canonical/seed-l-layer.js +7 -1
- package/dist/canonical/seed-l-layer.js.map +1 -1
- package/dist/canonical/structural.d.ts +42 -21
- package/dist/canonical/structural.d.ts.map +1 -1
- package/dist/canonical/structural.js +64 -23
- package/dist/canonical/structural.js.map +1 -1
- package/dist/cases/brownian-sphere.d.ts +3 -3
- package/dist/cases/brownian-sphere.d.ts.map +1 -1
- package/dist/cases/brownian-sphere.js +10 -9
- package/dist/cases/brownian-sphere.js.map +1 -1
- package/dist/cases/damped-resonator.d.ts.map +1 -1
- package/dist/cases/damped-resonator.js +8 -11
- package/dist/cases/damped-resonator.js.map +1 -1
- package/dist/cases/index.js.map +1 -1
- package/dist/cases/kepler-rv.d.ts +1 -1
- package/dist/cases/kepler-rv.d.ts.map +1 -1
- package/dist/cases/kepler-rv.js +3 -2
- package/dist/cases/kepler-rv.js.map +1 -1
- package/dist/cases/lumped-cooling.d.ts +8 -3
- package/dist/cases/lumped-cooling.d.ts.map +1 -1
- package/dist/cases/lumped-cooling.js +22 -24
- package/dist/cases/lumped-cooling.js.map +1 -1
- package/dist/cases/quadrature.d.ts +7 -9
- package/dist/cases/quadrature.d.ts.map +1 -1
- package/dist/cases/quadrature.js +28 -32
- package/dist/cases/quadrature.js.map +1 -1
- package/dist/cases/resistor-noise.js +7 -7
- package/dist/cases/resistor-noise.js.map +1 -1
- package/dist/cases/skin-depth.d.ts +0 -4
- package/dist/cases/skin-depth.d.ts.map +1 -1
- package/dist/cases/skin-depth.js +3 -7
- package/dist/cases/skin-depth.js.map +1 -1
- package/dist/cases/types.js.map +1 -1
- package/dist/cli/args.d.ts +30 -3
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +47 -9
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bindings.d.ts +13 -0
- package/dist/cli/bindings.d.ts.map +1 -0
- package/dist/cli/bindings.js +33 -0
- package/dist/cli/bindings.js.map +1 -0
- package/dist/cli/closed-form-range.js.map +1 -1
- package/dist/cli/command.d.ts +8 -1
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/_atlas-map.d.ts +2 -11
- package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-map.js +50 -35
- package/dist/cli/commands/_atlas-map.js.map +1 -1
- package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-route.js +6 -2
- package/dist/cli/commands/_atlas-route.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +48 -14
- package/dist/cli/commands/_discovery-opts.js.map +1 -1
- package/dist/cli/commands/atlas.d.ts.map +1 -1
- package/dist/cli/commands/atlas.js +9 -8
- package/dist/cli/commands/atlas.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +20 -20
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/axes.d.ts.map +1 -1
- package/dist/cli/commands/axes.js +20 -1
- package/dist/cli/commands/axes.js.map +1 -1
- package/dist/cli/commands/candidates.d.ts.map +1 -1
- package/dist/cli/commands/candidates.js +16 -8
- package/dist/cli/commands/candidates.js.map +1 -1
- package/dist/cli/commands/canonical.js.map +1 -1
- package/dist/cli/commands/chain.js +1 -1
- package/dist/cli/commands/chain.js.map +1 -1
- package/dist/cli/commands/confront.d.ts.map +1 -1
- package/dist/cli/commands/confront.js +22 -20
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/connectors.js.map +1 -1
- package/dist/cli/commands/coverage.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +60 -35
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +20 -10
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +14 -10
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +108 -58
- package/dist/cli/commands/evaluate.js.map +1 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +16 -8
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/frontier.js.map +1 -1
- package/dist/cli/commands/ground.d.ts.map +1 -1
- package/dist/cli/commands/ground.js +41 -10
- package/dist/cli/commands/ground.js.map +1 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +155 -92
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli/commands/metric.d.ts.map +1 -1
- package/dist/cli/commands/metric.js +58 -20
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/path.d.ts +10 -0
- package/dist/cli/commands/path.d.ts.map +1 -1
- package/dist/cli/commands/path.js +29 -7
- package/dist/cli/commands/path.js.map +1 -1
- package/dist/cli/commands/predict.js.map +1 -1
- package/dist/cli/commands/priority.js.map +1 -1
- package/dist/cli/commands/probe.d.ts.map +1 -1
- package/dist/cli/commands/probe.js +105 -38
- package/dist/cli/commands/probe.js.map +1 -1
- package/dist/cli/commands/recover.js +1 -1
- package/dist/cli/commands/recover.js.map +1 -1
- package/dist/cli/commands/regime.d.ts +5 -4
- package/dist/cli/commands/regime.d.ts.map +1 -1
- package/dist/cli/commands/regime.js +25 -26
- package/dist/cli/commands/regime.js.map +1 -1
- package/dist/cli/commands/retrieve.d.ts.map +1 -1
- package/dist/cli/commands/retrieve.js +23 -14
- package/dist/cli/commands/retrieve.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +9 -4
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/symbolic.js +31 -36
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.d.ts.map +1 -1
- package/dist/cli/commands/testplan.js +5 -3
- package/dist/cli/commands/testplan.js.map +1 -1
- package/dist/cli/conventions.js.map +1 -1
- package/dist/cli/determination.js.map +1 -1
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/euler-guard.js.map +1 -1
- package/dist/cli/eval-numbers.js.map +1 -1
- package/dist/cli/expr-print.d.ts +28 -3
- package/dist/cli/expr-print.d.ts.map +1 -1
- package/dist/cli/expr-print.js +42 -22
- package/dist/cli/expr-print.js.map +1 -1
- package/dist/cli/flag-help.js.map +1 -1
- package/dist/cli/graphs.js.map +1 -1
- package/dist/cli/library-defaults.d.ts +19 -0
- package/dist/cli/library-defaults.d.ts.map +1 -0
- package/dist/cli/library-defaults.js +22 -0
- package/dist/cli/library-defaults.js.map +1 -0
- package/dist/cli/main.d.ts +7 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +25 -6
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/map-evidence.js.map +1 -1
- package/dist/cli/numeric-flag.d.ts +12 -0
- package/dist/cli/numeric-flag.d.ts.map +1 -0
- package/dist/cli/numeric-flag.js +44 -0
- package/dist/cli/numeric-flag.js.map +1 -0
- package/dist/cli/output.d.ts +23 -6
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +15 -0
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/published-url.js.map +1 -1
- package/dist/cli/record-reach.d.ts +6 -0
- package/dist/cli/record-reach.d.ts.map +1 -1
- package/dist/cli/record-reach.js +17 -11
- package/dist/cli/record-reach.js.map +1 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +7 -6
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli/record.d.ts +1 -5
- package/dist/cli/record.d.ts.map +1 -1
- package/dist/cli/record.js +40 -20
- package/dist/cli/record.js.map +1 -1
- package/dist/cli/search-index.d.ts +5 -0
- package/dist/cli/search-index.d.ts.map +1 -1
- package/dist/cli/search-index.js +19 -7
- package/dist/cli/search-index.js.map +1 -1
- package/dist/cli/statuses.d.ts +0 -2
- package/dist/cli/statuses.d.ts.map +1 -1
- package/dist/cli/statuses.js +0 -7
- package/dist/cli/statuses.js.map +1 -1
- package/dist/cli/stored-results.d.ts +7 -0
- package/dist/cli/stored-results.d.ts.map +1 -0
- package/dist/cli/stored-results.js +23 -0
- package/dist/cli/stored-results.js.map +1 -0
- package/dist/cli/top-level-help.js.map +1 -1
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +7 -5
- package/dist/cli/version.js.map +1 -1
- package/dist/cli-api.d.ts +49 -14
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +42 -17
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/adjudication.js.map +1 -1
- package/dist/composition/algebraic-equivalence.d.ts +43 -0
- package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
- package/dist/composition/algebraic-equivalence.js +115 -0
- package/dist/composition/algebraic-equivalence.js.map +1 -0
- package/dist/composition/aliases.js.map +1 -1
- package/dist/composition/audit-coverage.d.ts +2 -0
- package/dist/composition/audit-coverage.d.ts.map +1 -1
- package/dist/composition/audit-coverage.js.map +1 -1
- package/dist/composition/axes.d.ts +6 -0
- package/dist/composition/axes.d.ts.map +1 -1
- package/dist/composition/axes.js +18 -6
- package/dist/composition/axes.js.map +1 -1
- package/dist/composition/axis-audit.d.ts +47 -20
- package/dist/composition/axis-audit.d.ts.map +1 -1
- package/dist/composition/axis-audit.js +82 -9
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +14 -15
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +148 -91
- package/dist/composition/bridge-analysis.js.map +1 -1
- package/dist/composition/bridge-prediction.d.ts +5 -1
- package/dist/composition/bridge-prediction.d.ts.map +1 -1
- package/dist/composition/bridge-prediction.js +12 -16
- package/dist/composition/bridge-prediction.js.map +1 -1
- package/dist/composition/buckingham-filter.js.map +1 -1
- package/dist/composition/canonical-compare.d.ts +40 -0
- package/dist/composition/canonical-compare.d.ts.map +1 -1
- package/dist/composition/canonical-compare.js +134 -26
- package/dist/composition/canonical-compare.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +9 -10
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +33 -102
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-json.js +2 -2
- package/dist/composition/canonical-json.js.map +1 -1
- package/dist/composition/canonical-prefactors.js.map +1 -1
- package/dist/composition/catalog-graph.d.ts.map +1 -1
- package/dist/composition/catalog-graph.js +8 -25
- package/dist/composition/catalog-graph.js.map +1 -1
- package/dist/composition/chain-candidate.d.ts +10 -0
- package/dist/composition/chain-candidate.d.ts.map +1 -1
- package/dist/composition/chain-candidate.js +11 -2
- package/dist/composition/chain-candidate.js.map +1 -1
- package/dist/composition/chain-match.d.ts +6 -3
- package/dist/composition/chain-match.d.ts.map +1 -1
- package/dist/composition/chain-match.js +4 -1
- package/dist/composition/chain-match.js.map +1 -1
- package/dist/composition/chain-regime.js.map +1 -1
- package/dist/composition/chain-result.d.ts.map +1 -1
- package/dist/composition/chain-result.js +2 -14
- package/dist/composition/chain-result.js.map +1 -1
- package/dist/composition/compose-surface.js.map +1 -1
- package/dist/composition/compose-symbolic.d.ts.map +1 -1
- package/dist/composition/compose-symbolic.js +3 -2
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +166 -41
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/composition-recovery.d.ts.map +1 -1
- package/dist/composition/composition-recovery.js +4 -7
- package/dist/composition/composition-recovery.js.map +1 -1
- package/dist/composition/consequence.d.ts.map +1 -1
- package/dist/composition/consequence.js +15 -6
- package/dist/composition/consequence.js.map +1 -1
- package/dist/composition/consistency.js.map +1 -1
- package/dist/composition/descriptor.d.ts +1 -1
- package/dist/composition/descriptor.d.ts.map +1 -1
- package/dist/composition/descriptor.js.map +1 -1
- package/dist/composition/dimension-adjacency.js.map +1 -1
- package/dist/composition/discovery.d.ts +77 -11
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +194 -80
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +40 -10
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +47 -12
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/enumerate.d.ts +2 -2
- package/dist/composition/enumerate.d.ts.map +1 -1
- package/dist/composition/enumerate.js +18 -3
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +35 -11
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +60 -39
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +5 -9
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +38 -18
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts.map +1 -1
- package/dist/composition/expr-eval.js +2 -11
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/expr-simplify.d.ts +16 -0
- package/dist/composition/expr-simplify.d.ts.map +1 -1
- package/dist/composition/expr-simplify.js +24 -59
- package/dist/composition/expr-simplify.js.map +1 -1
- package/dist/composition/expr-subst.js.map +1 -1
- package/dist/composition/formula-shape.d.ts +28 -0
- package/dist/composition/formula-shape.d.ts.map +1 -1
- package/dist/composition/formula-shape.js +96 -2
- package/dist/composition/formula-shape.js.map +1 -1
- package/dist/composition/frontier-account.d.ts +3 -2
- package/dist/composition/frontier-account.d.ts.map +1 -1
- package/dist/composition/frontier-account.js +7 -3
- package/dist/composition/frontier-account.js.map +1 -1
- package/dist/composition/graph-structure.d.ts +98 -0
- package/dist/composition/graph-structure.d.ts.map +1 -0
- package/dist/composition/graph-structure.js +167 -0
- package/dist/composition/graph-structure.js.map +1 -0
- package/dist/composition/graph-viz-svg.d.ts.map +1 -1
- package/dist/composition/graph-viz-svg.js +1 -1
- package/dist/composition/graph-viz-svg.js.map +1 -1
- package/dist/composition/graph-viz.d.ts.map +1 -1
- package/dist/composition/graph-viz.js +8 -37
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/grounding.js.map +1 -1
- package/dist/composition/identifiability.d.ts +91 -4
- package/dist/composition/identifiability.d.ts.map +1 -1
- package/dist/composition/identifiability.js +363 -6
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +14 -8
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +7 -5
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/mathts-quiet.d.ts +29 -0
- package/dist/composition/mathts-quiet.d.ts.map +1 -0
- package/dist/composition/mathts-quiet.js +57 -0
- package/dist/composition/mathts-quiet.js.map +1 -0
- package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
- package/dist/composition/mathts-scalar-symbols.js +20 -35
- package/dist/composition/mathts-scalar-symbols.js.map +1 -1
- package/dist/composition/not-composable-seeds.d.ts +3 -1
- package/dist/composition/not-composable-seeds.d.ts.map +1 -1
- package/dist/composition/not-composable-seeds.js +2 -0
- package/dist/composition/not-composable-seeds.js.map +1 -1
- package/dist/composition/probe/backend-protocol.js.map +1 -1
- package/dist/composition/probe/candidate-store.js.map +1 -1
- package/dist/composition/probe/corpus.d.ts +4 -2
- package/dist/composition/probe/corpus.d.ts.map +1 -1
- package/dist/composition/probe/corpus.js +20 -9
- package/dist/composition/probe/corpus.js.map +1 -1
- package/dist/composition/probe/dataset.d.ts +17 -0
- package/dist/composition/probe/dataset.d.ts.map +1 -1
- package/dist/composition/probe/dataset.js +95 -50
- package/dist/composition/probe/dataset.js.map +1 -1
- package/dist/composition/probe/experiment-design.d.ts +5 -1
- package/dist/composition/probe/experiment-design.d.ts.map +1 -1
- package/dist/composition/probe/experiment-design.js +44 -24
- package/dist/composition/probe/experiment-design.js.map +1 -1
- package/dist/composition/probe/expression-gaps.js.map +1 -1
- package/dist/composition/probe/falsify.d.ts +14 -3
- package/dist/composition/probe/falsify.d.ts.map +1 -1
- package/dist/composition/probe/falsify.js +16 -27
- package/dist/composition/probe/falsify.js.map +1 -1
- package/dist/composition/probe/fingerprint.js.map +1 -1
- package/dist/composition/probe/fit.d.ts +7 -1
- package/dist/composition/probe/fit.d.ts.map +1 -1
- package/dist/composition/probe/fit.js +48 -23
- package/dist/composition/probe/fit.js.map +1 -1
- package/dist/composition/probe/frontier.d.ts.map +1 -1
- package/dist/composition/probe/frontier.js +33 -15
- package/dist/composition/probe/frontier.js.map +1 -1
- package/dist/composition/probe/generator.d.ts +27 -1
- package/dist/composition/probe/generator.d.ts.map +1 -1
- package/dist/composition/probe/generator.js +53 -30
- package/dist/composition/probe/generator.js.map +1 -1
- package/dist/composition/probe/index.d.ts +18 -2
- package/dist/composition/probe/index.d.ts.map +1 -1
- package/dist/composition/probe/index.js +10 -2
- package/dist/composition/probe/index.js.map +1 -1
- package/dist/composition/probe/limits.d.ts +24 -1
- package/dist/composition/probe/limits.d.ts.map +1 -1
- package/dist/composition/probe/limits.js +53 -11
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/metadata.js.map +1 -1
- package/dist/composition/probe/pipeline.d.ts +5 -0
- package/dist/composition/probe/pipeline.d.ts.map +1 -1
- package/dist/composition/probe/pipeline.js +22 -9
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/power-law.d.ts +121 -0
- package/dist/composition/probe/power-law.d.ts.map +1 -0
- package/dist/composition/probe/power-law.js +255 -0
- package/dist/composition/probe/power-law.js.map +1 -0
- package/dist/composition/probe/problem.d.ts +12 -1
- package/dist/composition/probe/problem.d.ts.map +1 -1
- package/dist/composition/probe/problem.js +242 -48
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.js +1 -1
- package/dist/composition/probe/report.js.map +1 -1
- package/dist/composition/probe/residual.d.ts +6 -1
- package/dist/composition/probe/residual.d.ts.map +1 -1
- package/dist/composition/probe/residual.js +9 -7
- package/dist/composition/probe/residual.js.map +1 -1
- package/dist/composition/probe/run-manifest.js +2 -2
- package/dist/composition/probe/run-manifest.js.map +1 -1
- package/dist/composition/probe/scoring.d.ts +2 -1
- package/dist/composition/probe/scoring.d.ts.map +1 -1
- package/dist/composition/probe/scoring.js +21 -7
- package/dist/composition/probe/scoring.js.map +1 -1
- package/dist/composition/probe/search-budget.js.map +1 -1
- package/dist/composition/probe/serialize.js.map +1 -1
- package/dist/composition/probe/structure.d.ts +82 -17
- package/dist/composition/probe/structure.d.ts.map +1 -1
- package/dist/composition/probe/structure.js +129 -55
- package/dist/composition/probe/structure.js.map +1 -1
- package/dist/composition/probe/study.d.ts +35 -12
- package/dist/composition/probe/study.d.ts.map +1 -1
- package/dist/composition/probe/study.js +241 -184
- package/dist/composition/probe/study.js.map +1 -1
- package/dist/composition/probe/t-tail.d.ts +17 -0
- package/dist/composition/probe/t-tail.d.ts.map +1 -0
- package/dist/composition/probe/t-tail.js +32 -0
- package/dist/composition/probe/t-tail.js.map +1 -0
- package/dist/composition/probe/types.d.ts +6 -1
- package/dist/composition/probe/types.d.ts.map +1 -1
- package/dist/composition/probe/types.js +2 -0
- package/dist/composition/probe/types.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts +51 -13
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +110 -58
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/quantities.d.ts +0 -4
- package/dist/composition/quantities.d.ts.map +1 -1
- package/dist/composition/quantities.js +5 -5
- package/dist/composition/quantities.js.map +1 -1
- package/dist/composition/quantity-clusters.d.ts +48 -0
- package/dist/composition/quantity-clusters.d.ts.map +1 -0
- package/dist/composition/quantity-clusters.js +98 -0
- package/dist/composition/quantity-clusters.js.map +1 -0
- package/dist/composition/quantity.d.ts +18 -2
- package/dist/composition/quantity.d.ts.map +1 -1
- package/dist/composition/quantity.js +35 -6
- package/dist/composition/quantity.js.map +1 -1
- package/dist/composition/rational-exponent.d.ts +40 -0
- package/dist/composition/rational-exponent.d.ts.map +1 -0
- package/dist/composition/rational-exponent.js +65 -0
- package/dist/composition/rational-exponent.js.map +1 -0
- package/dist/composition/representative-values.d.ts +22 -0
- package/dist/composition/representative-values.d.ts.map +1 -1
- package/dist/composition/representative-values.js +23 -0
- package/dist/composition/representative-values.js.map +1 -1
- package/dist/composition/retrodiction.d.ts +16 -6
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +36 -10
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/uncertainty.js.map +1 -1
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/composition/user-equation.js +2 -2
- package/dist/composition/user-equation.js.map +1 -1
- package/dist/core/assignment.d.ts +19 -0
- package/dist/core/assignment.d.ts.map +1 -0
- package/dist/core/assignment.js +19 -0
- package/dist/core/assignment.js.map +1 -0
- package/dist/core/axes-registry.d.ts +8 -5
- package/dist/core/axes-registry.d.ts.map +1 -1
- package/dist/core/axes-registry.js.map +1 -1
- package/dist/core/cell.js.map +1 -1
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.d.ts.map +1 -0
- package/dist/core/compare.js +46 -0
- package/dist/core/compare.js.map +1 -0
- package/dist/core/constants.d.ts +35 -35
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +52 -37
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +7 -0
- package/dist/core/data-file.d.ts.map +1 -1
- package/dist/core/data-file.js +17 -0
- package/dist/core/data-file.js.map +1 -1
- package/dist/core/flux-rules.js +1 -1
- package/dist/core/flux-rules.js.map +1 -1
- package/dist/core/format.d.ts +36 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +39 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/hash.d.ts +14 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +17 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/json-schema.d.ts +3 -1
- package/dist/core/json-schema.d.ts.map +1 -1
- package/dist/core/json-schema.js +41 -16
- package/dist/core/json-schema.js.map +1 -1
- package/dist/core/labeled-tensor.d.ts +6 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/labeled-tensor.js +18 -16
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/mathts-read.d.ts +25 -0
- package/dist/core/mathts-read.d.ts.map +1 -0
- package/dist/core/mathts-read.js +51 -0
- package/dist/core/mathts-read.js.map +1 -0
- package/dist/core/regime-registry.d.ts +6 -2
- package/dist/core/regime-registry.d.ts.map +1 -1
- package/dist/core/regime-registry.js.map +1 -1
- package/dist/core/regime-rule-install.js.map +1 -1
- package/dist/core/regimes-builtins.js.map +1 -1
- package/dist/core/tensor.d.ts +7 -4
- package/dist/core/tensor.d.ts.map +1 -1
- package/dist/core/tensor.js +64 -8
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts +5 -5
- package/dist/core/types.js.map +1 -1
- package/dist/core/universal-index.js.map +1 -1
- package/dist/diff/bridge-ast-gradient.d.ts +4 -5
- package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-ast-gradient.js +10 -6
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/diff/bridge-gradient.d.ts +43 -86
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +40 -109
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts +16 -5
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +19 -4
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/algebra.d.ts +18 -0
- package/dist/dimensional/algebra.d.ts.map +1 -1
- package/dist/dimensional/algebra.js +41 -1
- package/dist/dimensional/algebra.js.map +1 -1
- package/dist/dimensional/ast-builders.d.ts +12 -4
- package/dist/dimensional/ast-builders.d.ts.map +1 -1
- package/dist/dimensional/ast-builders.js +17 -5
- package/dist/dimensional/ast-builders.js.map +1 -1
- package/dist/dimensional/ast-leaves.d.ts +81 -0
- package/dist/dimensional/ast-leaves.d.ts.map +1 -0
- package/dist/dimensional/ast-leaves.js +146 -0
- package/dist/dimensional/ast-leaves.js.map +1 -0
- package/dist/dimensional/ast-types.js.map +1 -1
- package/dist/dimensional/bridge-check.js.map +1 -1
- package/dist/dimensional/buckingham.d.ts.map +1 -1
- package/dist/dimensional/buckingham.js +15 -27
- package/dist/dimensional/buckingham.js.map +1 -1
- package/dist/dimensional/connection-validators.d.ts +2 -1
- package/dist/dimensional/connection-validators.d.ts.map +1 -1
- package/dist/dimensional/connection-validators.js.map +1 -1
- package/dist/dimensional/connection.js.map +1 -1
- package/dist/dimensional/constant-rows.d.ts.map +1 -1
- package/dist/dimensional/constant-rows.js +17 -13
- package/dist/dimensional/constant-rows.js.map +1 -1
- package/dist/dimensional/constants.d.ts +5 -6
- package/dist/dimensional/constants.d.ts.map +1 -1
- package/dist/dimensional/constants.js +5 -6
- package/dist/dimensional/constants.js.map +1 -1
- package/dist/dimensional/curvature-composite.js.map +1 -1
- package/dist/dimensional/curvature-invariants.js.map +1 -1
- package/dist/dimensional/curvature.js.map +1 -1
- package/dist/dimensional/dimension-inference.d.ts.map +1 -1
- package/dist/dimensional/dimension-inference.js +1 -2
- package/dist/dimensional/dimension-inference.js.map +1 -1
- package/dist/dimensional/dimension-spec.d.ts +13 -7
- package/dist/dimensional/dimension-spec.d.ts.map +1 -1
- package/dist/dimensional/dimension-spec.js +49 -23
- package/dist/dimensional/dimension-spec.js.map +1 -1
- package/dist/dimensional/einstein-equation.js.map +1 -1
- package/dist/dimensional/errors.d.ts +4 -2
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/errors.js +3 -17
- package/dist/dimensional/errors.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +0 -17
- package/dist/dimensional/exact-scale.d.ts.map +1 -1
- package/dist/dimensional/exact-scale.js +8 -8
- package/dist/dimensional/exact-scale.js.map +1 -1
- package/dist/dimensional/field-equation-helpers.js.map +1 -1
- package/dist/dimensional/formula-names.js.map +1 -1
- package/dist/dimensional/fresh-label.js.map +1 -1
- package/dist/dimensional/friedmann-equation.d.ts +3 -3
- package/dist/dimensional/friedmann-equation.js +3 -3
- package/dist/dimensional/friedmann-equation.js.map +1 -1
- package/dist/dimensional/gauge-field.d.ts +2 -3
- package/dist/dimensional/gauge-field.d.ts.map +1 -1
- package/dist/dimensional/gauge-field.js +2 -3
- package/dist/dimensional/gauge-field.js.map +1 -1
- package/dist/dimensional/hyphen-names.d.ts +12 -2
- package/dist/dimensional/hyphen-names.d.ts.map +1 -1
- package/dist/dimensional/hyphen-names.js +45 -12
- package/dist/dimensional/hyphen-names.js.map +1 -1
- package/dist/dimensional/killing-validators.js.map +1 -1
- package/dist/dimensional/klein-gordon-equation.js.map +1 -1
- package/dist/dimensional/metric-validators.d.ts +2 -1
- package/dist/dimensional/metric-validators.d.ts.map +1 -1
- package/dist/dimensional/metric-validators.js.map +1 -1
- package/dist/dimensional/metric.d.ts.map +1 -1
- package/dist/dimensional/metric.js +0 -1
- package/dist/dimensional/metric.js.map +1 -1
- package/dist/dimensional/natural-units.js.map +1 -1
- package/dist/dimensional/quantity-registry.d.ts +13 -0
- package/dist/dimensional/quantity-registry.d.ts.map +1 -1
- package/dist/dimensional/quantity-registry.js +14 -6
- package/dist/dimensional/quantity-registry.js.map +1 -1
- package/dist/dimensional/rg-flow.js.map +1 -1
- package/dist/dimensional/stress-energy-validators.js.map +1 -1
- package/dist/dimensional/symbolic-constants.d.ts +9 -0
- package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
- package/dist/dimensional/symbolic-constants.js +20 -3
- package/dist/dimensional/symbolic-constants.js.map +1 -1
- package/dist/dimensional/tensor-trace.js.map +1 -1
- package/dist/dimensional/tensor.js.map +1 -1
- package/dist/dimensional/types.d.ts +36 -0
- package/dist/dimensional/types.d.ts.map +1 -1
- package/dist/dimensional/types.js +45 -7
- package/dist/dimensional/types.js.map +1 -1
- package/dist/dimensional/unit-convention.d.ts +0 -2
- package/dist/dimensional/unit-convention.d.ts.map +1 -1
- package/dist/dimensional/unit-convention.js +2 -2
- package/dist/dimensional/unit-convention.js.map +1 -1
- package/dist/dimensional/unit-data.d.ts.map +1 -1
- package/dist/dimensional/unit-data.js +11 -7
- package/dist/dimensional/unit-data.js.map +1 -1
- package/dist/dimensional/units.d.ts.map +1 -1
- package/dist/dimensional/units.js +38 -20
- package/dist/dimensional/units.js.map +1 -1
- package/dist/dimensional/validator-registry.js.map +1 -1
- package/dist/dimensional/validator.d.ts +0 -16
- package/dist/dimensional/validator.d.ts.map +1 -1
- package/dist/dimensional/validator.js +65 -29
- package/dist/dimensional/validator.js.map +1 -1
- package/dist/dimensional/weyl-validators.js.map +1 -1
- package/dist/index.d.ts +59 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -24
- package/dist/index.js.map +1 -1
- package/dist/numerical/bianchi-residual.js.map +1 -1
- package/dist/numerical/binding-value.d.ts +11 -6
- package/dist/numerical/binding-value.d.ts.map +1 -1
- package/dist/numerical/binding-value.js +126 -122
- package/dist/numerical/binding-value.js.map +1 -1
- package/dist/numerical/christoffel-flat.d.ts.map +1 -1
- package/dist/numerical/christoffel-flat.js +3 -2
- package/dist/numerical/christoffel-flat.js.map +1 -1
- package/dist/numerical/connection-lowering-helpers.js.map +1 -1
- package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
- package/dist/numerical/covariant-eikonal.js +36 -13
- package/dist/numerical/covariant-eikonal.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
- package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +9 -5
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/derivative-lowering.js.map +1 -1
- package/dist/numerical/einstein-equation.js.map +1 -1
- package/dist/numerical/engine-registry.js.map +1 -1
- package/dist/numerical/errors.d.ts +7 -3
- package/dist/numerical/errors.d.ts.map +1 -1
- package/dist/numerical/errors.js +5 -8
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -1
- package/dist/numerical/evaluator-uncertainty.js +19 -2
- package/dist/numerical/evaluator-uncertainty.js.map +1 -1
- package/dist/numerical/finite-difference.d.ts +22 -0
- package/dist/numerical/finite-difference.d.ts.map +1 -0
- package/dist/numerical/finite-difference.js +27 -0
- package/dist/numerical/finite-difference.js.map +1 -0
- package/dist/numerical/formula-contract.d.ts +63 -7
- package/dist/numerical/formula-contract.d.ts.map +1 -1
- package/dist/numerical/formula-contract.js +61 -42
- package/dist/numerical/formula-contract.js.map +1 -1
- package/dist/numerical/formula-dimension.d.ts +8 -7
- package/dist/numerical/formula-dimension.d.ts.map +1 -1
- package/dist/numerical/formula-dimension.js +58 -36
- package/dist/numerical/formula-dimension.js.map +1 -1
- package/dist/numerical/formula-mathts.d.ts.map +1 -1
- package/dist/numerical/formula-mathts.js +5 -2
- package/dist/numerical/formula-mathts.js.map +1 -1
- package/dist/numerical/formula-registry.d.ts +13 -3
- package/dist/numerical/formula-registry.d.ts.map +1 -1
- package/dist/numerical/formula-registry.js +7 -2
- package/dist/numerical/formula-registry.js.map +1 -1
- package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
- package/dist/numerical/geodesic-integrator.js +22 -14
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/geometrized.d.ts.map +1 -1
- package/dist/numerical/geometrized.js +0 -1
- package/dist/numerical/geometrized.js.map +1 -1
- package/dist/numerical/gl4-integrator.d.ts +28 -27
- package/dist/numerical/gl4-integrator.d.ts.map +1 -1
- package/dist/numerical/gl4-integrator.js +41 -42
- package/dist/numerical/gl4-integrator.js.map +1 -1
- package/dist/numerical/grid-field.js.map +1 -1
- package/dist/numerical/index.js.map +1 -1
- package/dist/numerical/input-validation.d.ts +3 -6
- package/dist/numerical/input-validation.d.ts.map +1 -1
- package/dist/numerical/input-validation.js +4 -8
- package/dist/numerical/input-validation.js.map +1 -1
- package/dist/numerical/killing.d.ts +8 -5
- package/dist/numerical/killing.d.ts.map +1 -1
- package/dist/numerical/killing.js.map +1 -1
- package/dist/numerical/klein-gordon.js.map +1 -1
- package/dist/numerical/kretschmann.js.map +1 -1
- package/dist/numerical/lowering-utils.js.map +1 -1
- package/dist/numerical/lowering.d.ts.map +1 -1
- package/dist/numerical/lowering.js +7 -17
- package/dist/numerical/lowering.js.map +1 -1
- package/dist/numerical/mathts-engine.d.ts.map +1 -1
- package/dist/numerical/mathts-engine.js +16 -25
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.d.ts.map +1 -1
- package/dist/numerical/metric-inverse.js +83 -46
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/null-ic.js.map +1 -1
- package/dist/numerical/null-ray-integrator.d.ts +2 -1
- package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
- package/dist/numerical/null-ray-integrator.js +12 -12
- package/dist/numerical/null-ray-integrator.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js +2 -2
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/pderiv.d.ts.map +1 -1
- package/dist/numerical/pderiv.js +9 -2
- package/dist/numerical/pderiv.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +0 -36
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +41 -87
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/quadrature.d.ts +5 -2
- package/dist/numerical/quadrature.d.ts.map +1 -1
- package/dist/numerical/quadrature.js +19 -4
- package/dist/numerical/quadrature.js.map +1 -1
- package/dist/numerical/rk4-trajectory.d.ts +10 -0
- package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
- package/dist/numerical/rk4-trajectory.js +37 -0
- package/dist/numerical/rk4-trajectory.js.map +1 -0
- package/dist/numerical/schwarzschild.d.ts +14 -0
- package/dist/numerical/schwarzschild.d.ts.map +1 -0
- package/dist/numerical/schwarzschild.js +17 -0
- package/dist/numerical/schwarzschild.js.map +1 -0
- package/dist/numerical/spacetime-metrics.d.ts +25 -19
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +180 -286
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/numerical/statistics.d.ts +24 -0
- package/dist/numerical/statistics.d.ts.map +1 -0
- package/dist/numerical/statistics.js +52 -0
- package/dist/numerical/statistics.js.map +1 -0
- package/dist/numerical/strides.js.map +1 -1
- package/dist/numerical/tensor-engine.d.ts +30 -5
- package/dist/numerical/tensor-engine.d.ts.map +1 -1
- package/dist/numerical/tensor-engine.js +12 -0
- package/dist/numerical/tensor-engine.js.map +1 -1
- package/dist/numerical/types.js.map +1 -1
- package/dist/numerical/weyl-lowering.js.map +1 -1
- package/dist/relations/category.js.map +1 -1
- package/dist/relations/composition-table.d.ts +4 -4
- package/dist/relations/composition-table.js +4 -4
- package/dist/relations/composition-table.js.map +1 -1
- package/dist/relations/conventions.js.map +1 -1
- package/dist/relations/domain-regimes.js.map +1 -1
- package/dist/relations/regime-registration.js.map +1 -1
- package/dist/relations/regime-vocabularies.js.map +1 -1
- package/dist/relations/regime.d.ts +28 -8
- package/dist/relations/regime.d.ts.map +1 -1
- package/dist/relations/regime.js +44 -15
- package/dist/relations/regime.js.map +1 -1
- package/dist/relations/types.d.ts +18 -5
- package/dist/relations/types.d.ts.map +1 -1
- package/dist/relations/types.js +5 -3
- package/dist/relations/types.js.map +1 -1
- package/package.json +16 -20
- package/dist/bridges/registry.d.ts +0 -60
- package/dist/bridges/registry.d.ts.map +0 -1
- package/dist/bridges/registry.js +0 -87
- package/dist/bridges/registry.js.map +0 -1
- package/dist/cli/poster-source.d.ts +0 -154
- package/dist/cli/poster-source.d.ts.map +0 -1
- package/dist/cli/poster-source.js +0 -184
- package/dist/cli/poster-source.js.map +0 -1
|
@@ -9,9 +9,37 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @module composition/formula-shape
|
|
11
11
|
*/
|
|
12
|
+
import { Fraction } from '@danielsimonjr/mathts-core';
|
|
12
13
|
import type { ExprNode } from '../dimensional/ast-types.js';
|
|
13
14
|
/** `monomial` is a product of powers. `dimensional-sum` adds dimensionful terms. */
|
|
14
15
|
type FormulaShape = 'monomial' | 'dimensional-sum';
|
|
16
|
+
/**
|
|
17
|
+
* The rational a literal exponent stands for: a bounded-denominator scan at
|
|
18
|
+
* the fit's tolerance reads `0.3333333333333333` as `1/3`; a decimal that
|
|
19
|
+
* is no such rational (`0.3333`) is kept as the exact decimal it spells.
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export declare function rationalExponentOf(name: string): Fraction | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Exact exponents of every symbol in a product, quotient, or literal power,
|
|
26
|
+
* as core `Fraction`s. Undefined for a sum or any node that is not that
|
|
27
|
+
* monomial. A cancellation is an exact zero: `(x^(1/3))^3 / x` carries `x`
|
|
28
|
+
* at `0`, not at `2.2e-16`.
|
|
29
|
+
*
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
export declare function monomialExponentsExact(node: ExprNode | undefined): Map<string, Fraction> | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Exponents of every symbol in a product, quotient, or literal power, as
|
|
35
|
+
* numbers: the projection of {@link monomialExponentsExact}. Undefined for a
|
|
36
|
+
* sum or any node that is not that monomial. The canonical graph reads a
|
|
37
|
+
* count's exponent from it, and a composed edge reads the junction's
|
|
38
|
+
* exponent from it.
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export declare function monomialExponents(node: ExprNode | undefined): Map<string, number> | undefined;
|
|
15
43
|
/**
|
|
16
44
|
* Classify `expr`. A node this walker does not understand, and that is not
|
|
17
45
|
* itself a sum, stays a monomial so an unread tensor equation is not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formula-shape.d.ts","sourceRoot":"","sources":["../../src/composition/formula-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"formula-shape.d.ts","sourceRoot":"","sources":["../../src/composition/formula-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAO5D,oFAAoF;AACpF,KAAK,YAAY,GAAG,UAAU,GAAG,iBAAiB,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAWrE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,SAAS,CAiCpG;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAI7F;AAuFD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAEzD"}
|
|
@@ -9,12 +9,106 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @module composition/formula-shape
|
|
11
11
|
*/
|
|
12
|
+
import { Fraction } from '@danielsimonjr/mathts-core';
|
|
13
|
+
import { isDecimalLiteral } from '../dimensional/ast-leaves.js';
|
|
12
14
|
import { divide, equals, multiply, power } from '../dimensional/algebra.js';
|
|
13
15
|
import { DIMENSIONLESS } from '../dimensional/types.js';
|
|
14
|
-
|
|
16
|
+
import { fractionToNumber, rationalize } from './rational-exponent.js';
|
|
17
|
+
/**
|
|
18
|
+
* The rational a literal exponent stands for: a bounded-denominator scan at
|
|
19
|
+
* the fit's tolerance reads `0.3333333333333333` as `1/3`; a decimal that
|
|
20
|
+
* is no such rational (`0.3333`) is kept as the exact decimal it spells.
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export function rationalExponentOf(name) {
|
|
25
|
+
if (!isDecimalLiteral(name))
|
|
26
|
+
return undefined;
|
|
27
|
+
const value = Number(name);
|
|
28
|
+
if (!Number.isFinite(value))
|
|
29
|
+
return undefined;
|
|
30
|
+
const scanned = rationalize(value);
|
|
31
|
+
if (scanned !== undefined)
|
|
32
|
+
return scanned;
|
|
33
|
+
try {
|
|
34
|
+
return Fraction.parse(name);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return Fraction.fromNumber(value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Exact exponents of every symbol in a product, quotient, or literal power,
|
|
42
|
+
* as core `Fraction`s. Undefined for a sum or any node that is not that
|
|
43
|
+
* monomial. A cancellation is an exact zero: `(x^(1/3))^3 / x` carries `x`
|
|
44
|
+
* at `0`, not at `2.2e-16`.
|
|
45
|
+
*
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
export function monomialExponentsExact(node) {
|
|
49
|
+
if (node === undefined)
|
|
50
|
+
return undefined;
|
|
51
|
+
if (node.kind === 'symbol')
|
|
52
|
+
return new Map([[node.name, new Fraction(1)]]);
|
|
53
|
+
if (node.kind !== 'op')
|
|
54
|
+
return undefined;
|
|
55
|
+
if (node.op === '*') {
|
|
56
|
+
const acc = new Map();
|
|
57
|
+
for (const arg of node.args) {
|
|
58
|
+
const part = monomialExponentsExact(arg);
|
|
59
|
+
if (part === undefined)
|
|
60
|
+
return undefined;
|
|
61
|
+
for (const [name, exp] of part)
|
|
62
|
+
acc.set(name, (acc.get(name) ?? new Fraction(0)).add(exp));
|
|
63
|
+
}
|
|
64
|
+
return acc;
|
|
65
|
+
}
|
|
66
|
+
if (node.op === '/') {
|
|
67
|
+
if (node.args.length !== 2)
|
|
68
|
+
return undefined;
|
|
69
|
+
const numerator = monomialExponentsExact(node.args[0]);
|
|
70
|
+
const denominator = monomialExponentsExact(node.args[1]);
|
|
71
|
+
if (numerator === undefined || denominator === undefined)
|
|
72
|
+
return undefined;
|
|
73
|
+
for (const [name, exp] of denominator)
|
|
74
|
+
numerator.set(name, (numerator.get(name) ?? new Fraction(0)).sub(exp));
|
|
75
|
+
return numerator;
|
|
76
|
+
}
|
|
77
|
+
if (node.op === '^') {
|
|
78
|
+
const base = node.args[0];
|
|
79
|
+
const expNode = node.args[1];
|
|
80
|
+
if (base === undefined || expNode === undefined || expNode.kind !== 'symbol')
|
|
81
|
+
return undefined;
|
|
82
|
+
const exp = rationalExponentOf(expNode.name);
|
|
83
|
+
if (exp === undefined)
|
|
84
|
+
return undefined;
|
|
85
|
+
const inner = monomialExponentsExact(base);
|
|
86
|
+
if (inner === undefined)
|
|
87
|
+
return undefined;
|
|
88
|
+
for (const [name, innerExp] of inner)
|
|
89
|
+
inner.set(name, innerExp.multiply(exp));
|
|
90
|
+
return inner;
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Exponents of every symbol in a product, quotient, or literal power, as
|
|
96
|
+
* numbers: the projection of {@link monomialExponentsExact}. Undefined for a
|
|
97
|
+
* sum or any node that is not that monomial. The canonical graph reads a
|
|
98
|
+
* count's exponent from it, and a composed edge reads the junction's
|
|
99
|
+
* exponent from it.
|
|
100
|
+
*
|
|
101
|
+
* @internal
|
|
102
|
+
*/
|
|
103
|
+
export function monomialExponents(node) {
|
|
104
|
+
const exact = monomialExponentsExact(node);
|
|
105
|
+
if (exact === undefined)
|
|
106
|
+
return undefined;
|
|
107
|
+
return new Map([...exact].map(([name, exp]) => [name, fractionToNumber(exp)]));
|
|
108
|
+
}
|
|
15
109
|
/** A dimensionless symbol whose name is a number, the way a literal exponent is written. */
|
|
16
110
|
function numericExponent(node) {
|
|
17
|
-
if (node.kind !== 'symbol' || !
|
|
111
|
+
if (node.kind !== 'symbol' || !isDecimalLiteral(node.name))
|
|
18
112
|
return undefined;
|
|
19
113
|
if (!equals(node.dim, DIMENSIONLESS))
|
|
20
114
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formula-shape.js","sourceRoot":"","sources":["../../src/composition/formula-shape.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formula-shape.js","sourceRoot":"","sources":["../../src/composition/formula-shape.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Whether an encoded formula is a product of powers, or a sum of dimensionful terms.\n *\n * Buckingham-π returns a monomial. A formula that adds dimensionful terms is\n * not that monomial, even when a unique monomial exists in the same variables\n * (fast magnetosonic speed: the monomial is the sound speed; the formula is\n * √(c_s² + v_A²)). A sum whose every addend is dimensionless is still a\n * factor in a monomial: (1+R), (1−e²), (1 + E/(kT)).\n *\n * @module composition/formula-shape\n */\n\nimport { Fraction } from '@danielsimonjr/mathts-core';\nimport type { ExprNode } from '../dimensional/ast-types.js';\nimport { isDecimalLiteral } from '../dimensional/ast-leaves.js';\nimport { divide, equals, multiply, power } from '../dimensional/algebra.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport { DIMENSIONLESS } from '../dimensional/types.js';\nimport { fractionToNumber, rationalize } from './rational-exponent.js';\n\n/** `monomial` is a product of powers. `dimensional-sum` adds dimensionful terms. */\ntype FormulaShape = 'monomial' | 'dimensional-sum';\n\n/**\n * The rational a literal exponent stands for: a bounded-denominator scan at\n * the fit's tolerance reads `0.3333333333333333` as `1/3`; a decimal that\n * is no such rational (`0.3333`) is kept as the exact decimal it spells.\n *\n * @internal\n */\nexport function rationalExponentOf(name: string): Fraction | undefined {\n if (!isDecimalLiteral(name)) return undefined;\n const value = Number(name);\n if (!Number.isFinite(value)) return undefined;\n const scanned = rationalize(value);\n if (scanned !== undefined) return scanned;\n try {\n return Fraction.parse(name);\n } catch {\n return Fraction.fromNumber(value);\n }\n}\n\n/**\n * Exact exponents of every symbol in a product, quotient, or literal power,\n * as core `Fraction`s. Undefined for a sum or any node that is not that\n * monomial. A cancellation is an exact zero: `(x^(1/3))^3 / x` carries `x`\n * at `0`, not at `2.2e-16`.\n *\n * @internal\n */\nexport function monomialExponentsExact(node: ExprNode | undefined): Map<string, Fraction> | undefined {\n if (node === undefined) return undefined;\n if (node.kind === 'symbol') return new Map([[node.name, new Fraction(1)]]);\n if (node.kind !== 'op') return undefined;\n if (node.op === '*') {\n const acc = new Map<string, Fraction>();\n for (const arg of node.args) {\n const part = monomialExponentsExact(arg);\n if (part === undefined) return undefined;\n for (const [name, exp] of part) acc.set(name, (acc.get(name) ?? new Fraction(0)).add(exp));\n }\n return acc;\n }\n if (node.op === '/') {\n if (node.args.length !== 2) return undefined;\n const numerator = monomialExponentsExact(node.args[0]);\n const denominator = monomialExponentsExact(node.args[1]);\n if (numerator === undefined || denominator === undefined) return undefined;\n for (const [name, exp] of denominator) numerator.set(name, (numerator.get(name) ?? new Fraction(0)).sub(exp));\n return numerator;\n }\n if (node.op === '^') {\n const base = node.args[0];\n const expNode = node.args[1];\n if (base === undefined || expNode === undefined || expNode.kind !== 'symbol') return undefined;\n const exp = rationalExponentOf(expNode.name);\n if (exp === undefined) return undefined;\n const inner = monomialExponentsExact(base);\n if (inner === undefined) return undefined;\n for (const [name, innerExp] of inner) inner.set(name, innerExp.multiply(exp));\n return inner;\n }\n return undefined;\n}\n\n/**\n * Exponents of every symbol in a product, quotient, or literal power, as\n * numbers: the projection of {@link monomialExponentsExact}. Undefined for a\n * sum or any node that is not that monomial. The canonical graph reads a\n * count's exponent from it, and a composed edge reads the junction's\n * exponent from it.\n *\n * @internal\n */\nexport function monomialExponents(node: ExprNode | undefined): Map<string, number> | undefined {\n const exact = monomialExponentsExact(node);\n if (exact === undefined) return undefined;\n return new Map([...exact].map(([name, exp]) => [name, fractionToNumber(exp)]));\n}\n\n/** A dimensionless symbol whose name is a number, the way a literal exponent is written. */\nfunction numericExponent(node: ExprNode): number | undefined {\n if (node.kind !== 'symbol' || !isDecimalLiteral(node.name)) return undefined;\n if (!equals(node.dim, DIMENSIONLESS)) return undefined;\n const n = Number(node.name);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/**\n * Dimension of a scalar node this classifier understands. `undefined` means\n * the node is not a product of powers of dimensioned symbols. A sum that\n * cannot be dimensioned is treated as dimensionful.\n */\nfunction dimOf(node: ExprNode): Dimension | undefined {\n if (node.kind === 'symbol') return node.dim;\n if (node.kind === 'abs') return dimOf(node.arg);\n if (node.kind === 'transcendental') {\n const arg = dimOf(node.arg);\n if (arg === undefined || !equals(arg, DIMENSIONLESS)) return undefined;\n return DIMENSIONLESS;\n }\n if (node.kind !== 'op') return undefined;\n if (node.op === '+' || node.op === '-') {\n if (node.args.length === 0) return undefined;\n const dims = node.args.map(dimOf);\n if (dims.some((d) => d === undefined)) return undefined;\n const first = dims[0]!;\n if (!dims.every((d) => equals(d!, first))) return undefined;\n return first;\n }\n if (node.op === '*') {\n let acc: Dimension = DIMENSIONLESS;\n for (const arg of node.args) {\n const d = dimOf(arg);\n if (d === undefined) return undefined;\n acc = multiply(acc, d);\n }\n return acc;\n }\n if (node.op === '/') {\n if (node.args.length !== 2) return undefined;\n const num = dimOf(node.args[0]!);\n const den = dimOf(node.args[1]!);\n if (num === undefined || den === undefined) return undefined;\n return divide(num, den);\n }\n if (node.op === '^') {\n if (node.args.length !== 2) return undefined;\n const base = dimOf(node.args[0]!);\n const exp = numericExponent(node.args[1]!);\n if (base === undefined || exp === undefined) return undefined;\n return power(base, exp);\n }\n return undefined;\n}\n\n/** Scalar children. A tensor node this walker does not understand contributes none. */\nfunction children(node: ExprNode): readonly ExprNode[] {\n if (node.kind === 'op') return node.args;\n if (node.kind === 'abs' || node.kind === 'transcendental' || node.kind === 'dirac-delta') return [node.arg];\n if (node.kind === 'integral') {\n return [node.over, node.integrand, ...(node.lower === undefined ? [] : [node.lower]), ...(node.upper === undefined ? [] : [node.upper])];\n }\n if (node.kind === 'derivative') return [node.of, node.wrt];\n if (node.kind === 'variational-derivative') return [node.functional, node.field, node.over];\n return [];\n}\n\n/**\n * True when `node` adds terms that are not all dimensionless. An addend whose\n * dimension cannot be read counts as dimensionful: a sum we cannot see is not\n * reported as a monomial.\n */\nfunction isDimensionalSum(node: ExprNode): boolean {\n if (node.kind !== 'op' || (node.op !== '+' && node.op !== '-')) return false;\n const dims = node.args.map(dimOf);\n if (dims.some((d) => d === undefined)) return true;\n return dims.some((d) => !equals(d!, DIMENSIONLESS));\n}\n\nfunction hasDimensionalSum(node: ExprNode): boolean {\n if (isDimensionalSum(node)) return true;\n return children(node).some(hasDimensionalSum);\n}\n\n/**\n * Classify `expr`. A node this walker does not understand, and that is not\n * itself a sum, stays a monomial so an unread tensor equation is not\n * reclassified.\n */\nexport function formulaShape(expr: ExprNode): FormulaShape {\n return hasDimensionalSum(expr) ? 'dimensional-sum' : 'monomial';\n}\n"]}
|
|
@@ -7,9 +7,10 @@ import type { BridgeEdge } from './edge.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export declare const CANDIDATE_NOT_A_BRIDGE_REASON = "a coincidence-heavy REVIEW SURFACE, NOT discovered bridges";
|
|
9
9
|
/**
|
|
10
|
-
* Bridge ids
|
|
10
|
+
* Bridge ids whose catalog row is marked `contested` in `data/bridge-catalog.json`.
|
|
11
11
|
* A contested row stays out of the null-result list until an adjudication
|
|
12
|
-
* exists. A membership rejection is that adjudication.
|
|
12
|
+
* exists. A membership rejection is that adjudication. Derived from the data,
|
|
13
|
+
* never typed here (the owner's decision of 2026-10-09).
|
|
13
14
|
*
|
|
14
15
|
* @internal
|
|
15
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontier-account.d.ts","sourceRoot":"","sources":["../../src/composition/frontier-account.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"frontier-account.d.ts","sourceRoot":"","sources":["../../src/composition/frontier-account.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAO5C;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,+DACoB,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAEf,CAAC;AAEpC,oGAAoG;AACpG,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAExE,8FAA8F;AAC9F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,0HAA0H;AAC1H,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,GAAG,WAAW,GAAG,eAAe,CAAC;CACzE;AAED,wGAAwG;AACxG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,uGAAuG;AACvG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,EAAE,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAClD;AAED,8JAA8J;AAC9J,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAC1C;AAQD,wFAAwF;AACxF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GACxF,iBAAiB,EAAE,CAQrB;AAoBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,GAAE,sBAA2B,GACnC,eAAe,CA4BjB;AAED,qGAAqG;AACrG,wBAAgB,sBAAsB,IAAI,eAAe,CAUxD;AAED,iGAAiG;AACjG,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAatE"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
10
10
|
import { proposeLinkCandidates } from './bridge-analysis.js';
|
|
11
|
+
import { catalogEntries } from '../bridges/catalog-load.js';
|
|
11
12
|
import { CATALOG_GRAPH } from './catalog-graph.js';
|
|
12
13
|
import { scanFrontier } from './probe/frontier.js';
|
|
13
14
|
import { expressionSearchGaps } from './probe/expression-gaps.js';
|
|
@@ -21,13 +22,16 @@ import { listConfrontations } from '../bridges/confrontations.js';
|
|
|
21
22
|
*/
|
|
22
23
|
export const CANDIDATE_NOT_A_BRIDGE_REASON = 'a coincidence-heavy REVIEW SURFACE, NOT discovered bridges';
|
|
23
24
|
/**
|
|
24
|
-
* Bridge ids
|
|
25
|
+
* Bridge ids whose catalog row is marked `contested` in `data/bridge-catalog.json`.
|
|
25
26
|
* A contested row stays out of the null-result list until an adjudication
|
|
26
|
-
* exists. A membership rejection is that adjudication.
|
|
27
|
+
* exists. A membership rejection is that adjudication. Derived from the data,
|
|
28
|
+
* never typed here (the owner's decision of 2026-10-09).
|
|
27
29
|
*
|
|
28
30
|
* @internal
|
|
29
31
|
*/
|
|
30
|
-
export const CONTESTED_BRIDGE_IDS =
|
|
32
|
+
export const CONTESTED_BRIDGE_IDS = catalogEntries()
|
|
33
|
+
.filter((entry) => entry.contested === true)
|
|
34
|
+
.map((entry) => `be-${entry.id}`);
|
|
31
35
|
const OBSERVATION_ABSENT = 'observation absent';
|
|
32
36
|
function byId(rows) {
|
|
33
37
|
return [...rows].sort((a, b) => a.id.localeCompare(b.id) || a.id.localeCompare(b.id));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontier-account.js","sourceRoot":"","sources":["../../src/composition/frontier-account.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"frontier-account.js","sourceRoot":"","sources":["../../src/composition/frontier-account.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Two lists the catalog already knows how to tell apart: records that were\n * examined and did not become an accepted connection, and connections the\n * catalog does not contain. Neither list is a verdict and neither list\n * changes a score.\n *\n * @module composition/frontier-account\n * @internal\n */\nimport { proposeLinkCandidates } from './bridge-analysis.js';\nimport { catalogEntries } from '../bridges/catalog-load.js';\nimport { CATALOG_GRAPH } from './catalog-graph.js';\nimport type { BridgeEdge } from './edge.js';\nimport { scanFrontier } from './probe/frontier.js';\nimport { expressionSearchGaps } from './probe/expression-gaps.js';\nimport type { FrontierGap } from './probe/types.js';\nimport { REJECTED_BRIDGE_ADJUDICATIONS } from '../bridges/rejected.js';\nimport { listConfrontations } from '../bridges/confrontations.js';\n\n/**\n * The link proposer's existing label, quoted from `upt candidates`.\n * Not a new verdict.\n *\n * @internal\n */\nexport const CANDIDATE_NOT_A_BRIDGE_REASON =\n 'a coincidence-heavy REVIEW SURFACE, NOT discovered bridges';\n\n/**\n * Bridge ids whose catalog row is marked `contested` in `data/bridge-catalog.json`.\n * A contested row stays out of the null-result list until an adjudication\n * exists. A membership rejection is that adjudication. Derived from the data,\n * never typed here (the owner's decision of 2026-10-09).\n *\n * @internal\n */\nexport const CONTESTED_BRIDGE_IDS: readonly string[] = catalogEntries()\n .filter((entry) => entry.contested === true)\n .map((entry) => `be-${entry.id}`);\n\n/** Why an entry cannot be confronted yet: no comparison exists, or its data is absent. @internal */\nexport type ConfrontationMarkStatus = 'unconfrontable' | 'data-pending';\n\n/** One entry's confrontation status, with the reason that entry already carries. @internal */\nexport interface ConfrontationMark {\n readonly id: string;\n readonly status: ConfrontationMarkStatus;\n readonly reason: string;\n}\n\n/** One record that was examined and did not become an accepted connection, and where that finding came from. @internal */\nexport interface NullResultRow {\n readonly id: string;\n readonly reason: string;\n readonly source: 'membership-rejection' | 'candidate' | 'confrontation';\n}\n\n/** One connection the catalog does not contain, named by the two quantities it would join. @internal */\nexport interface FrontierAccountRow {\n readonly id: string;\n readonly left: string;\n readonly right: string;\n readonly reason: string;\n /** A registered observation id, or the words `observation absent`. */\n readonly observation: string;\n}\n\n/** The two lists together: the null results, and the frontier the catalog does not cover. @internal */\nexport interface FrontierAccount {\n readonly nullResults: readonly NullResultRow[];\n readonly frontier: readonly FrontierAccountRow[];\n}\n\n/** Inputs the account reads rather than derives: rejections, contested ids, confrontation marks, and whether catalog-wide expression gaps count. @internal */\nexport interface FrontierAccountOptions {\n readonly rejections?: readonly { id: string; reason: string }[];\n readonly contestedIds?: readonly string[];\n readonly marks?: readonly ConfrontationMark[];\n /**\n * Expression gaps are catalog-wide applied-case templates, not missing\n * edges of a fixture graph. The live catalog includes them because\n * `upt probe scan` emits them. A fixture with no missing edges does not.\n */\n readonly includeExpressionGaps?: boolean;\n}\n\nconst OBSERVATION_ABSENT = 'observation absent';\n\nfunction byId<T extends { id: string }>(rows: readonly T[]): T[] {\n return [...rows].sort((a, b) => a.id.localeCompare(b.id) || a.id.localeCompare(b.id));\n}\n\n/** Read marks only where an entry already carries the status. Invent none. @internal */\nexport function marksFromEntries(\n entries: readonly { bridgeId: number; title: string; status?: string; reason?: string }[],\n): ConfrontationMark[] {\n const out: ConfrontationMark[] = [];\n for (const entry of entries) {\n if (entry.status !== 'unconfrontable' && entry.status !== 'data-pending') continue;\n const reason = entry.reason?.trim() ? entry.reason : entry.title;\n out.push({ id: `be-${entry.bridgeId}`, status: entry.status, reason });\n }\n return out;\n}\n\nfunction sidesOf(gap: FrontierGap): { left: string; right: string } {\n const participants = gap.participants.map((p) => p.id).filter((id) => id !== '');\n if (participants.length >= 2) return { left: participants[0]!, right: participants[1]! };\n if (gap.regimes.length >= 2) return { left: gap.regimes[0]!, right: gap.regimes[1]! };\n return { left: gap.id, right: gap.evidence.summary };\n}\n\nfunction frontierRow(gap: FrontierGap): FrontierAccountRow {\n const sides = sidesOf(gap);\n return {\n id: gap.id,\n left: sides.left,\n right: sides.right,\n reason: gap.kind,\n observation: gap.observations.length > 0 ? gap.observations.join(', ') : OBSERVATION_ABSENT,\n };\n}\n\n/**\n * Null results and frontier rows for one graph. Rejections, contested ids,\n * and confrontation marks are inputs: the function does not invent them.\n *\n * @internal\n */\nexport function accountFromGraph(\n edges: readonly BridgeEdge[],\n options: FrontierAccountOptions = {},\n): FrontierAccount {\n const contested = new Set(options.contestedIds ?? []);\n const rejectionIds = new Set((options.rejections ?? []).map((row) => row.id));\n const nullResults: NullResultRow[] = [];\n\n for (const rejection of options.rejections ?? []) {\n nullResults.push({ id: rejection.id, reason: rejection.reason, source: 'membership-rejection' });\n }\n for (const candidate of proposeLinkCandidates(edges)) {\n nullResults.push({\n id: `candidate:${candidate.a}:${candidate.b}`,\n reason: CANDIDATE_NOT_A_BRIDGE_REASON,\n source: 'candidate',\n });\n }\n for (const mark of options.marks ?? []) {\n if (contested.has(mark.id) && !rejectionIds.has(mark.id)) continue;\n nullResults.push({ id: mark.id, reason: mark.reason, source: 'confrontation' });\n }\n\n const gaps = [\n ...scanFrontier(edges),\n ...(options.includeExpressionGaps ? expressionSearchGaps() : []),\n ];\n return {\n nullResults: byId(nullResults),\n frontier: byId(gaps.map(frontierRow)),\n };\n}\n\n/** The catalog's two lists. Expression gaps are included because probe scan emits them. @internal */\nexport function catalogFrontierAccount(): FrontierAccount {\n return accountFromGraph(CATALOG_GRAPH, {\n rejections: REJECTED_BRIDGE_ADJUDICATIONS.map((row) => ({\n id: `be-${row.beId}`,\n reason: row.reason,\n })),\n contestedIds: CONTESTED_BRIDGE_IDS,\n marks: marksFromEntries(listConfrontations()),\n includeExpressionGaps: true,\n });\n}\n\n/** Both headings and both counts. An empty list is the word `(empty)`, not silence. @internal */\nexport function formatFrontierAccount(account: FrontierAccount): string {\n const lines: string[] = [];\n lines.push(`Null results (${account.nullResults.length})`);\n if (account.nullResults.length === 0) lines.push(' (empty)');\n for (const row of account.nullResults) {\n lines.push(` ${row.id} ${row.reason}`);\n }\n lines.push(`Frontier (${account.frontier.length})`);\n if (account.frontier.length === 0) lines.push(' (empty)');\n for (const row of account.frontier) {\n lines.push(` ${row.left} — ${row.right} ${row.reason} ${row.observation}`);\n }\n return lines.join('\\n');\n}\n"]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map structure from graph algorithms, over the QUANTITY graph of a composition graph.
|
|
3
|
+
*
|
|
4
|
+
* The quantity graph has one node per canonical quantity name (`quantityCanonicalizer`). Two
|
|
5
|
+
* quantities are linked, undirected, when they occur in one equation together (sources and
|
|
6
|
+
* target), weighted by how many equations hold both. A directed arc runs from each source
|
|
7
|
+
* quantity to its equation's target. Three readings of it, each stated for what it is:
|
|
8
|
+
*
|
|
9
|
+
* - {@link communitiesOf} — LAYOUT communities of the largest component (MathTS
|
|
10
|
+
* `louvainCommunities`, a modularity heuristic). A community is where a drawing may place
|
|
11
|
+
* quantities near each other. It is never a physics claim: two quantities in one community
|
|
12
|
+
* share equations, which the map already showed; a community boundary is not a regime
|
|
13
|
+
* boundary and not a cluster of related physics.
|
|
14
|
+
* - {@link derivationCycles} — strongly connected components (MathTS
|
|
15
|
+
* `stronglyConnectedComponents`) of the directed source→target graph: the sets of quantities
|
|
16
|
+
* each of which can be derived from the others round a loop. That is where over-determination
|
|
17
|
+
* lives, and where `retrodict` has two routes to compare.
|
|
18
|
+
* - {@link rankHubs} — betweenness centrality (MathTS `betweennessCentrality`, normalised),
|
|
19
|
+
* ON DEMAND ONLY: Brandes' algorithm is O(n·m) per call over about five hundred quantity nodes,
|
|
20
|
+
* so the default `upt map` path does not call it. A hub by betweenness is a cut quantity of
|
|
21
|
+
* the drawing, not a central quantity of physics.
|
|
22
|
+
*
|
|
23
|
+
* @module composition/graph-structure
|
|
24
|
+
*/
|
|
25
|
+
import type { BridgeEdge } from './edge.js';
|
|
26
|
+
/** The label every community report and printout carries, so a reader never takes a layout for physics. @internal */
|
|
27
|
+
export declare const COMMUNITY_METHOD: 'layout communities (Louvain, heuristic)';
|
|
28
|
+
/** The quantity graph of a composition graph. @internal */
|
|
29
|
+
export interface QuantityGraph {
|
|
30
|
+
/** Canonical quantity names, in first-seen order; the index of each is its node. */
|
|
31
|
+
readonly names: readonly string[];
|
|
32
|
+
/** Symmetric co-occurrence weights: `undirected[i][j]` is the number of equations holding both. */
|
|
33
|
+
readonly undirected: number[][];
|
|
34
|
+
/** Directed arcs: `directed[i][j]` is 1 when an equation derives `j` from a source set containing `i`. */
|
|
35
|
+
readonly directed: number[][];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Build the quantity graph of `edges` (canonical names). An equation whose target is also one of
|
|
39
|
+
* its sources contributes no self-arc and no self-link.
|
|
40
|
+
*
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
export declare function quantityGraph(edges: readonly BridgeEdge[]): QuantityGraph;
|
|
44
|
+
/** One layout community: a set of quantities a drawing may place together. @internal */
|
|
45
|
+
export interface LayoutCommunity {
|
|
46
|
+
/** Sorted canonical quantity names. */
|
|
47
|
+
readonly quantities: readonly string[];
|
|
48
|
+
readonly size: number;
|
|
49
|
+
}
|
|
50
|
+
/** The community report of the largest connected component. @internal */
|
|
51
|
+
export interface CommunityReport {
|
|
52
|
+
/** Always {@link COMMUNITY_METHOD}: the reading is a layout heuristic. */
|
|
53
|
+
readonly method: typeof COMMUNITY_METHOD;
|
|
54
|
+
/** Quantity nodes in the largest component (0 on an empty graph). */
|
|
55
|
+
readonly componentSize: number;
|
|
56
|
+
/** Communities, largest first, then by first quantity. */
|
|
57
|
+
readonly communities: readonly LayoutCommunity[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Layout communities (Louvain, heuristic) of the largest component's quantity graph, over the
|
|
61
|
+
* co-occurrence weights. MathTS's Louvain is deterministic (no seed is taken, none is offered)
|
|
62
|
+
* and not guaranteed optimal. Presented as layout, never as physics: see the module note.
|
|
63
|
+
*
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
export declare function communitiesOf(edges: readonly BridgeEdge[]): CommunityReport;
|
|
67
|
+
/** One derivation cycle: quantities each derivable from the others round a loop, and the equations closing it. @internal */
|
|
68
|
+
export interface DerivationCycle {
|
|
69
|
+
/** Sorted canonical quantity names of the strongly connected component (at least two). */
|
|
70
|
+
readonly quantities: readonly string[];
|
|
71
|
+
/** Ids of the equations with a source and the target inside the component, in graph order. */
|
|
72
|
+
readonly edges: readonly string[];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The derivation cycles of `edges`: strongly connected components of size two or more in the
|
|
76
|
+
* directed source→target quantity graph (MathTS `stronglyConnectedComponents`). An equation
|
|
77
|
+
* whose target is one of its own sources is not a cycle. Largest first, then by first quantity.
|
|
78
|
+
*
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
export declare function derivationCycles(edges: readonly BridgeEdge[]): DerivationCycle[];
|
|
82
|
+
/** One quantity's hub rank. @internal */
|
|
83
|
+
export interface HubRank {
|
|
84
|
+
readonly quantity: string;
|
|
85
|
+
/** Normalised betweenness centrality in the undirected quantity graph: 0 for a leaf, 1 for the centre of a star. */
|
|
86
|
+
readonly betweenness: number;
|
|
87
|
+
/** Distinct quantities it shares an equation with. */
|
|
88
|
+
readonly degree: number;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Rank quantities by betweenness centrality (MathTS `betweennessCentrality`, Brandes, normalised
|
|
92
|
+
* by `(n−1)(n−2)`), highest first, ties by name. ON DEMAND ONLY: not called by the default map
|
|
93
|
+
* path. A graph of fewer than three quantities has no interior path, so every score is 0.
|
|
94
|
+
*
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
export declare function rankHubs(edges: readonly BridgeEdge[]): Promise<HubRank[]>;
|
|
98
|
+
//# sourceMappingURL=graph-structure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-structure.d.ts","sourceRoot":"","sources":["../../src/composition/graph-structure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5C,qHAAqH;AACrH,eAAO,MAAM,gBAAgB,EAAG,yCAAkD,CAAC;AAEnF,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,mGAAmG;IACnG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IAChC,0GAA0G;IAC1G,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,aAAa,CAgCzE;AAED,wFAAwF;AACxF,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,OAAO,gBAAgB,CAAC;IACzC,qEAAqE;IACrE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;CAClD;AAeD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,eAAe,CAa3E;AAED,4HAA4H;AAC5H,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,eAAe,EAAE,CAwBhF;AAED,yCAAyC;AACzC,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oHAAoH;IACpH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAmB/E"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map structure from graph algorithms, over the QUANTITY graph of a composition graph.
|
|
3
|
+
*
|
|
4
|
+
* The quantity graph has one node per canonical quantity name (`quantityCanonicalizer`). Two
|
|
5
|
+
* quantities are linked, undirected, when they occur in one equation together (sources and
|
|
6
|
+
* target), weighted by how many equations hold both. A directed arc runs from each source
|
|
7
|
+
* quantity to its equation's target. Three readings of it, each stated for what it is:
|
|
8
|
+
*
|
|
9
|
+
* - {@link communitiesOf} — LAYOUT communities of the largest component (MathTS
|
|
10
|
+
* `louvainCommunities`, a modularity heuristic). A community is where a drawing may place
|
|
11
|
+
* quantities near each other. It is never a physics claim: two quantities in one community
|
|
12
|
+
* share equations, which the map already showed; a community boundary is not a regime
|
|
13
|
+
* boundary and not a cluster of related physics.
|
|
14
|
+
* - {@link derivationCycles} — strongly connected components (MathTS
|
|
15
|
+
* `stronglyConnectedComponents`) of the directed source→target graph: the sets of quantities
|
|
16
|
+
* each of which can be derived from the others round a loop. That is where over-determination
|
|
17
|
+
* lives, and where `retrodict` has two routes to compare.
|
|
18
|
+
* - {@link rankHubs} — betweenness centrality (MathTS `betweennessCentrality`, normalised),
|
|
19
|
+
* ON DEMAND ONLY: Brandes' algorithm is O(n·m) per call over about five hundred quantity nodes,
|
|
20
|
+
* so the default `upt map` path does not call it. A hub by betweenness is a cut quantity of
|
|
21
|
+
* the drawing, not a central quantity of physics.
|
|
22
|
+
*
|
|
23
|
+
* @module composition/graph-structure
|
|
24
|
+
*/
|
|
25
|
+
import { betweennessCentrality, connectedComponents, louvainCommunities, stronglyConnectedComponents, } from '@danielsimonjr/mathts-functions';
|
|
26
|
+
import { quantityCanonicalizer } from './quantity-clusters.js';
|
|
27
|
+
/** The label every community report and printout carries, so a reader never takes a layout for physics. @internal */
|
|
28
|
+
export const COMMUNITY_METHOD = 'layout communities (Louvain, heuristic)';
|
|
29
|
+
/**
|
|
30
|
+
* Build the quantity graph of `edges` (canonical names). An equation whose target is also one of
|
|
31
|
+
* its sources contributes no self-arc and no self-link.
|
|
32
|
+
*
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
export function quantityGraph(edges) {
|
|
36
|
+
const canon = quantityCanonicalizer();
|
|
37
|
+
const index = new Map();
|
|
38
|
+
const names = [];
|
|
39
|
+
const nodeOf = (raw) => {
|
|
40
|
+
const name = canon(raw);
|
|
41
|
+
let i = index.get(name);
|
|
42
|
+
if (i === undefined) {
|
|
43
|
+
i = names.length;
|
|
44
|
+
names.push(name);
|
|
45
|
+
index.set(name, i);
|
|
46
|
+
}
|
|
47
|
+
return i;
|
|
48
|
+
};
|
|
49
|
+
const members = edges.map((e) => ({
|
|
50
|
+
sources: [...new Set(e.sources.map((s) => nodeOf(s.name)))],
|
|
51
|
+
target: nodeOf(e.target.name),
|
|
52
|
+
}));
|
|
53
|
+
const n = names.length;
|
|
54
|
+
const undirected = Array.from({ length: n }, () => new Array(n).fill(0));
|
|
55
|
+
const directed = Array.from({ length: n }, () => new Array(n).fill(0));
|
|
56
|
+
for (const m of members) {
|
|
57
|
+
const all = [...new Set([...m.sources, m.target])];
|
|
58
|
+
for (let a = 0; a < all.length; a++) {
|
|
59
|
+
for (let b = a + 1; b < all.length; b++) {
|
|
60
|
+
undirected[all[a]][all[b]] += 1;
|
|
61
|
+
undirected[all[b]][all[a]] += 1;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
for (const s of m.sources)
|
|
65
|
+
if (s !== m.target)
|
|
66
|
+
directed[s][m.target] = 1;
|
|
67
|
+
}
|
|
68
|
+
return { names, undirected, directed };
|
|
69
|
+
}
|
|
70
|
+
/** 0/1 copy of a weighted adjacency. */
|
|
71
|
+
function binary(weighted) {
|
|
72
|
+
return weighted.map((row) => row.map((w) => (w > 0 ? 1 : 0)));
|
|
73
|
+
}
|
|
74
|
+
/** The connected components of the undirected quantity graph, largest first, each sorted by node index. */
|
|
75
|
+
function undirectedComponents(g) {
|
|
76
|
+
if (g.names.length === 0)
|
|
77
|
+
return [];
|
|
78
|
+
const comps = connectedComponents(binary(g.undirected)).map((c) => [...c].sort((a, b) => a - b));
|
|
79
|
+
comps.sort((a, b) => b.length - a.length || g.names[a[0]].localeCompare(g.names[b[0]]));
|
|
80
|
+
return comps;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Layout communities (Louvain, heuristic) of the largest component's quantity graph, over the
|
|
84
|
+
* co-occurrence weights. MathTS's Louvain is deterministic (no seed is taken, none is offered)
|
|
85
|
+
* and not guaranteed optimal. Presented as layout, never as physics: see the module note.
|
|
86
|
+
*
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
export function communitiesOf(edges) {
|
|
90
|
+
const g = quantityGraph(edges);
|
|
91
|
+
const comps = undirectedComponents(g);
|
|
92
|
+
if (comps.length === 0)
|
|
93
|
+
return { method: COMMUNITY_METHOD, componentSize: 0, communities: [] };
|
|
94
|
+
const largest = comps[0];
|
|
95
|
+
const sub = largest.map((i) => largest.map((j) => g.undirected[i][j]));
|
|
96
|
+
const partition = louvainCommunities(sub);
|
|
97
|
+
const communities = partition.map((group) => {
|
|
98
|
+
const quantities = group.map((k) => g.names[largest[k]]).sort();
|
|
99
|
+
return { quantities, size: quantities.length };
|
|
100
|
+
});
|
|
101
|
+
communities.sort((a, b) => b.size - a.size || a.quantities[0].localeCompare(b.quantities[0]));
|
|
102
|
+
return { method: COMMUNITY_METHOD, componentSize: largest.length, communities };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The derivation cycles of `edges`: strongly connected components of size two or more in the
|
|
106
|
+
* directed source→target quantity graph (MathTS `stronglyConnectedComponents`). An equation
|
|
107
|
+
* whose target is one of its own sources is not a cycle. Largest first, then by first quantity.
|
|
108
|
+
*
|
|
109
|
+
* @internal
|
|
110
|
+
*/
|
|
111
|
+
export function derivationCycles(edges) {
|
|
112
|
+
const g = quantityGraph(edges);
|
|
113
|
+
if (g.names.length === 0)
|
|
114
|
+
return [];
|
|
115
|
+
const canon = quantityCanonicalizer();
|
|
116
|
+
const index = new Map(g.names.map((name, i) => [name, i]));
|
|
117
|
+
const cycles = [];
|
|
118
|
+
for (const scc of stronglyConnectedComponents(g.directed)) {
|
|
119
|
+
if (scc.length < 2)
|
|
120
|
+
continue;
|
|
121
|
+
const inside = new Set(scc);
|
|
122
|
+
const quantities = scc.map((i) => g.names[i]).sort();
|
|
123
|
+
const closing = edges
|
|
124
|
+
.filter((e) => {
|
|
125
|
+
const t = index.get(canon(e.target.name));
|
|
126
|
+
if (t === undefined || !inside.has(t))
|
|
127
|
+
return false;
|
|
128
|
+
return e.sources.some((s) => {
|
|
129
|
+
const si = index.get(canon(s.name));
|
|
130
|
+
return si !== undefined && si !== t && inside.has(si);
|
|
131
|
+
});
|
|
132
|
+
})
|
|
133
|
+
.map((e) => e.id);
|
|
134
|
+
cycles.push({ quantities, edges: closing });
|
|
135
|
+
}
|
|
136
|
+
cycles.sort((a, b) => b.quantities.length - a.quantities.length || a.quantities[0].localeCompare(b.quantities[0]));
|
|
137
|
+
return cycles;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Rank quantities by betweenness centrality (MathTS `betweennessCentrality`, Brandes, normalised
|
|
141
|
+
* by `(n−1)(n−2)`), highest first, ties by name. ON DEMAND ONLY: not called by the default map
|
|
142
|
+
* path. A graph of fewer than three quantities has no interior path, so every score is 0.
|
|
143
|
+
*
|
|
144
|
+
* @internal
|
|
145
|
+
*/
|
|
146
|
+
export async function rankHubs(edges) {
|
|
147
|
+
const g = quantityGraph(edges);
|
|
148
|
+
const n = g.names.length;
|
|
149
|
+
const adjacency = binary(g.undirected);
|
|
150
|
+
const degree = adjacency.map((row) => row.reduce((acc, x) => acc + x, 0));
|
|
151
|
+
let scores;
|
|
152
|
+
if (n < 3) {
|
|
153
|
+
scores = new Array(n).fill(0);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const result = await betweennessCentrality(adjacency, { directed: false, normalized: true });
|
|
157
|
+
const centrality = result.centrality;
|
|
158
|
+
if (!(centrality instanceof Float64Array) || centrality.length !== n) {
|
|
159
|
+
throw new TypeError(`betweennessCentrality returned ${String(centrality)} for ${n} nodes`);
|
|
160
|
+
}
|
|
161
|
+
scores = Array.from(centrality);
|
|
162
|
+
}
|
|
163
|
+
const ranks = g.names.map((quantity, i) => ({ quantity, betweenness: scores[i], degree: degree[i] }));
|
|
164
|
+
ranks.sort((a, b) => b.betweenness - a.betweenness || a.quantity.localeCompare(b.quantity));
|
|
165
|
+
return ranks;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=graph-structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-structure.js","sourceRoot":"","sources":["../../src/composition/graph-structure.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Map structure from graph algorithms, over the QUANTITY graph of a composition graph.\n *\n * The quantity graph has one node per canonical quantity name (`quantityCanonicalizer`). Two\n * quantities are linked, undirected, when they occur in one equation together (sources and\n * target), weighted by how many equations hold both. A directed arc runs from each source\n * quantity to its equation's target. Three readings of it, each stated for what it is:\n *\n * - {@link communitiesOf} — LAYOUT communities of the largest component (MathTS\n * `louvainCommunities`, a modularity heuristic). A community is where a drawing may place\n * quantities near each other. It is never a physics claim: two quantities in one community\n * share equations, which the map already showed; a community boundary is not a regime\n * boundary and not a cluster of related physics.\n * - {@link derivationCycles} — strongly connected components (MathTS\n * `stronglyConnectedComponents`) of the directed source→target graph: the sets of quantities\n * each of which can be derived from the others round a loop. That is where over-determination\n * lives, and where `retrodict` has two routes to compare.\n * - {@link rankHubs} — betweenness centrality (MathTS `betweennessCentrality`, normalised),\n * ON DEMAND ONLY: Brandes' algorithm is O(n·m) per call over about five hundred quantity nodes,\n * so the default `upt map` path does not call it. A hub by betweenness is a cut quantity of\n * the drawing, not a central quantity of physics.\n *\n * @module composition/graph-structure\n */\n\nimport {\n betweennessCentrality,\n connectedComponents,\n louvainCommunities,\n stronglyConnectedComponents,\n} from '@danielsimonjr/mathts-functions';\nimport type { BridgeEdge } from './edge.js';\nimport { quantityCanonicalizer } from './quantity-clusters.js';\n\n/** The label every community report and printout carries, so a reader never takes a layout for physics. @internal */\nexport const COMMUNITY_METHOD = 'layout communities (Louvain, heuristic)' as const;\n\n/** The quantity graph of a composition graph. @internal */\nexport interface QuantityGraph {\n /** Canonical quantity names, in first-seen order; the index of each is its node. */\n readonly names: readonly string[];\n /** Symmetric co-occurrence weights: `undirected[i][j]` is the number of equations holding both. */\n readonly undirected: number[][];\n /** Directed arcs: `directed[i][j]` is 1 when an equation derives `j` from a source set containing `i`. */\n readonly directed: number[][];\n}\n\n/**\n * Build the quantity graph of `edges` (canonical names). An equation whose target is also one of\n * its sources contributes no self-arc and no self-link.\n *\n * @internal\n */\nexport function quantityGraph(edges: readonly BridgeEdge[]): QuantityGraph {\n const canon = quantityCanonicalizer();\n const index = new Map<string, number>();\n const names: string[] = [];\n const nodeOf = (raw: string): number => {\n const name = canon(raw);\n let i = index.get(name);\n if (i === undefined) {\n i = names.length;\n names.push(name);\n index.set(name, i);\n }\n return i;\n };\n const members = edges.map((e) => ({\n sources: [...new Set(e.sources.map((s) => nodeOf(s.name)))],\n target: nodeOf(e.target.name),\n }));\n const n = names.length;\n const undirected = Array.from({ length: n }, () => new Array<number>(n).fill(0));\n const directed = Array.from({ length: n }, () => new Array<number>(n).fill(0));\n for (const m of members) {\n const all = [...new Set([...m.sources, m.target])];\n for (let a = 0; a < all.length; a++) {\n for (let b = a + 1; b < all.length; b++) {\n undirected[all[a]][all[b]] += 1;\n undirected[all[b]][all[a]] += 1;\n }\n }\n for (const s of m.sources) if (s !== m.target) directed[s][m.target] = 1;\n }\n return { names, undirected, directed };\n}\n\n/** One layout community: a set of quantities a drawing may place together. @internal */\nexport interface LayoutCommunity {\n /** Sorted canonical quantity names. */\n readonly quantities: readonly string[];\n readonly size: number;\n}\n\n/** The community report of the largest connected component. @internal */\nexport interface CommunityReport {\n /** Always {@link COMMUNITY_METHOD}: the reading is a layout heuristic. */\n readonly method: typeof COMMUNITY_METHOD;\n /** Quantity nodes in the largest component (0 on an empty graph). */\n readonly componentSize: number;\n /** Communities, largest first, then by first quantity. */\n readonly communities: readonly LayoutCommunity[];\n}\n\n/** 0/1 copy of a weighted adjacency. */\nfunction binary(weighted: readonly (readonly number[])[]): number[][] {\n return weighted.map((row) => row.map((w) => (w > 0 ? 1 : 0)));\n}\n\n/** The connected components of the undirected quantity graph, largest first, each sorted by node index. */\nfunction undirectedComponents(g: QuantityGraph): number[][] {\n if (g.names.length === 0) return [];\n const comps = connectedComponents(binary(g.undirected)).map((c) => [...c].sort((a, b) => a - b));\n comps.sort((a, b) => b.length - a.length || g.names[a[0]].localeCompare(g.names[b[0]]));\n return comps;\n}\n\n/**\n * Layout communities (Louvain, heuristic) of the largest component's quantity graph, over the\n * co-occurrence weights. MathTS's Louvain is deterministic (no seed is taken, none is offered)\n * and not guaranteed optimal. Presented as layout, never as physics: see the module note.\n *\n * @internal\n */\nexport function communitiesOf(edges: readonly BridgeEdge[]): CommunityReport {\n const g = quantityGraph(edges);\n const comps = undirectedComponents(g);\n if (comps.length === 0) return { method: COMMUNITY_METHOD, componentSize: 0, communities: [] };\n const largest = comps[0];\n const sub = largest.map((i) => largest.map((j) => g.undirected[i][j]));\n const partition = louvainCommunities(sub);\n const communities: LayoutCommunity[] = partition.map((group) => {\n const quantities = group.map((k) => g.names[largest[k]]).sort();\n return { quantities, size: quantities.length };\n });\n communities.sort((a, b) => b.size - a.size || a.quantities[0].localeCompare(b.quantities[0]));\n return { method: COMMUNITY_METHOD, componentSize: largest.length, communities };\n}\n\n/** One derivation cycle: quantities each derivable from the others round a loop, and the equations closing it. @internal */\nexport interface DerivationCycle {\n /** Sorted canonical quantity names of the strongly connected component (at least two). */\n readonly quantities: readonly string[];\n /** Ids of the equations with a source and the target inside the component, in graph order. */\n readonly edges: readonly string[];\n}\n\n/**\n * The derivation cycles of `edges`: strongly connected components of size two or more in the\n * directed source→target quantity graph (MathTS `stronglyConnectedComponents`). An equation\n * whose target is one of its own sources is not a cycle. Largest first, then by first quantity.\n *\n * @internal\n */\nexport function derivationCycles(edges: readonly BridgeEdge[]): DerivationCycle[] {\n const g = quantityGraph(edges);\n if (g.names.length === 0) return [];\n const canon = quantityCanonicalizer();\n const index = new Map(g.names.map((name, i) => [name, i]));\n const cycles: DerivationCycle[] = [];\n for (const scc of stronglyConnectedComponents(g.directed)) {\n if (scc.length < 2) continue;\n const inside = new Set(scc);\n const quantities = scc.map((i) => g.names[i]).sort();\n const closing = edges\n .filter((e) => {\n const t = index.get(canon(e.target.name));\n if (t === undefined || !inside.has(t)) return false;\n return e.sources.some((s) => {\n const si = index.get(canon(s.name));\n return si !== undefined && si !== t && inside.has(si);\n });\n })\n .map((e) => e.id);\n cycles.push({ quantities, edges: closing });\n }\n cycles.sort((a, b) => b.quantities.length - a.quantities.length || a.quantities[0].localeCompare(b.quantities[0]));\n return cycles;\n}\n\n/** One quantity's hub rank. @internal */\nexport interface HubRank {\n readonly quantity: string;\n /** Normalised betweenness centrality in the undirected quantity graph: 0 for a leaf, 1 for the centre of a star. */\n readonly betweenness: number;\n /** Distinct quantities it shares an equation with. */\n readonly degree: number;\n}\n\n/**\n * Rank quantities by betweenness centrality (MathTS `betweennessCentrality`, Brandes, normalised\n * by `(n−1)(n−2)`), highest first, ties by name. ON DEMAND ONLY: not called by the default map\n * path. A graph of fewer than three quantities has no interior path, so every score is 0.\n *\n * @internal\n */\nexport async function rankHubs(edges: readonly BridgeEdge[]): Promise<HubRank[]> {\n const g = quantityGraph(edges);\n const n = g.names.length;\n const adjacency = binary(g.undirected);\n const degree = adjacency.map((row) => row.reduce((acc, x) => acc + x, 0));\n let scores: number[];\n if (n < 3) {\n scores = new Array<number>(n).fill(0);\n } else {\n const result = await betweennessCentrality(adjacency, { directed: false, normalized: true });\n const centrality: unknown = result.centrality;\n if (!(centrality instanceof Float64Array) || centrality.length !== n) {\n throw new TypeError(`betweennessCentrality returned ${String(centrality)} for ${n} nodes`);\n }\n scores = Array.from(centrality);\n }\n const ranks = g.names.map((quantity, i) => ({ quantity, betweenness: scores[i], degree: degree[i] }));\n ranks.sort((a, b) => b.betweenness - a.betweenness || a.quantity.localeCompare(b.quantity));\n return ranks;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-viz-svg.d.ts","sourceRoot":"","sources":["../../src/composition/graph-viz-svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"graph-viz-svg.d.ts","sourceRoot":"","sources":["../../src/composition/graph-viz-svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;;;;;GAMG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,YACE,OAAO,SAC8B,EAItC;CACF;AAWD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASjE"}
|
|
@@ -34,7 +34,7 @@ export class SvgRendererUnavailableError extends Error {
|
|
|
34
34
|
export async function renderDotToSvg(dot) {
|
|
35
35
|
let viz;
|
|
36
36
|
try {
|
|
37
|
-
viz =
|
|
37
|
+
viz = await import('@viz-js/viz');
|
|
38
38
|
}
|
|
39
39
|
catch {
|
|
40
40
|
throw new SvgRendererUnavailableError();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-viz-svg.js","sourceRoot":"","sources":["../../src/composition/graph-viz-svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"graph-viz-svg.js","sourceRoot":"","sources":["../../src/composition/graph-viz-svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;;;;;GAMG;AACH,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IACpD,YACE,OAAO,GAAG,+DAA+D;QACvE,mCAAmC;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAWD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,IAAI,GAAc,CAAC;IACnB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,2BAA2B,EAAE,CAAC;IAC1C,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;IACtC,OAAO,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC","sourcesContent":["/**\n * SVG rendering for the physics map — render Graphviz DOT source to an SVG\n * string via the optional **`@viz-js/viz`** peer (the real Graphviz compiled to\n * WebAssembly: same `dot` output, in-process, no native binary, no subprocess).\n *\n * Kept separate from `graph-viz.ts` so that module stays pure, synchronous, and\n * dependency-free (text only). The optional-renderer concern — a lazy dynamic\n * import with graceful fallback, mirroring `numerical/formula-registry.ts`'s\n * MathTS-peer pattern — lives here.\n *\n * @module composition/graph-viz-svg\n */\n\nimport type { Viz } from '@viz-js/viz';\n\n/**\n * Thrown by {@link renderDotToSvg} when the optional `@viz-js/viz` peer is not\n * installed. The message names the install command and the no-install\n * alternative.\n *\n * @public\n */\nexport class SvgRendererUnavailableError extends Error {\n constructor(\n message = 'SVG rendering needs the optional renderer: npm i @viz-js/viz ' +\n '(or use --format=dot | dot -Tsvg)',\n ) {\n super(message);\n this.name = 'SvgRendererUnavailableError';\n }\n}\n\n/**\n * The part of `@viz-js/viz` this module uses: `instance()` resolves the renderer, whose\n * `renderString` is the peer's own declared type. The peer's types are a devDependency, so the\n * dynamic import is typed without a cast; at runtime the peer stays optional.\n */\ninterface VizModule {\n instance(): Promise<Viz>;\n}\n\n/**\n * Render Graphviz DOT source (e.g. {@link buildVizModel}'s `toDot()`) to an SVG\n * document string. Lazy-loads the optional `@viz-js/viz` peer.\n *\n * @throws {SvgRendererUnavailableError} if the peer is not installed.\n * @public\n */\nexport async function renderDotToSvg(dot: string): Promise<string> {\n let viz: VizModule;\n try {\n viz = await import('@viz-js/viz');\n } catch {\n throw new SvgRendererUnavailableError();\n }\n const renderer = await viz.instance();\n return renderer.renderString(dot, { format: 'svg' });\n}\n"]}
|