universal-physics-tensor 10.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 +4 -3
- package/bin/upt.mjs +13 -1
- package/data/atlas/atlas.json +25 -25
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +6 -6
- package/data/atlas/oscillators.json +7 -7
- package/data/atlas/waves.json +14 -14
- package/data/atlas/witness-results.json +11 -11
- package/data/bridge-catalog.json +371 -228
- package/data/bridge-catalog.schema.json +45 -7
- package/dist/atlas/applicability.d.ts.map +1 -1
- package/dist/atlas/applicability.js +21 -15
- package/dist/atlas/applicability.js.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
- package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
- package/dist/atlas/benchmark/loader.js +2 -2
- package/dist/atlas/benchmark/loader.js.map +1 -1
- package/dist/atlas/benchmark/stats.d.ts +2 -2
- package/dist/atlas/benchmark/stats.d.ts.map +1 -1
- package/dist/atlas/benchmark/stats.js +15 -7
- package/dist/atlas/benchmark/stats.js.map +1 -1
- package/dist/atlas/catalog-formal-ref.d.ts +26 -3
- package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
- package/dist/atlas/catalog-formal-ref.js +52 -5
- package/dist/atlas/catalog-formal-ref.js.map +1 -1
- package/dist/atlas/chain-pipeline.d.ts.map +1 -1
- package/dist/atlas/chain-pipeline.js +7 -8
- package/dist/atlas/chain-pipeline.js.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.js +8 -12
- package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
- package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges.js +27 -39
- package/dist/atlas/diffusion/bridges.js.map +1 -1
- package/dist/atlas/diffusion/dimensions.d.ts +6 -14
- package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
- package/dist/atlas/diffusion/dimensions.js +8 -16
- package/dist/atlas/diffusion/dimensions.js.map +1 -1
- package/dist/atlas/diffusion/models.d.ts +3 -3
- package/dist/atlas/diffusion/models.d.ts.map +1 -1
- package/dist/atlas/diffusion/models.js +5 -10
- package/dist/atlas/diffusion/models.js.map +1 -1
- package/dist/atlas/diffusion/numerics.d.ts +16 -4
- package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
- package/dist/atlas/diffusion/numerics.js +38 -24
- package/dist/atlas/diffusion/numerics.js.map +1 -1
- package/dist/atlas/link-prediction.d.ts +106 -3
- package/dist/atlas/link-prediction.d.ts.map +1 -1
- package/dist/atlas/link-prediction.js +212 -66
- package/dist/atlas/link-prediction.js.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.js +7 -11
- package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.js +6 -7
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.js +23 -34
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
- package/dist/atlas/oscillators/dimensions.d.ts +9 -21
- package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
- package/dist/atlas/oscillators/dimensions.js +9 -21
- package/dist/atlas/oscillators/dimensions.js.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
- package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.js +17 -15
- package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
- package/dist/atlas/oscillators/models.d.ts.map +1 -1
- package/dist/atlas/oscillators/models.js +2 -6
- package/dist/atlas/oscillators/models.js.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
- package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.js +60 -40
- package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
- package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
- package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/phase-translation.js +3 -4
- package/dist/atlas/oscillators/phase-translation.js.map +1 -1
- package/dist/atlas/oscillators/position-translation.d.ts +68 -7
- package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/position-translation.js +123 -12
- package/dist/atlas/oscillators/position-translation.js.map +1 -1
- package/dist/atlas/oscillators/rejections.d.ts +0 -2
- package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
- package/dist/atlas/oscillators/rejections.js +0 -7
- package/dist/atlas/oscillators/rejections.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +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 +34 -31
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +55 -53
- package/dist/atlas/physjs-ref.js.map +1 -1
- package/dist/atlas/physjs-reviewed.d.ts +1 -1
- package/dist/atlas/physjs-reviewed.js +15 -15
- package/dist/atlas/physjs-reviewed.js.map +1 -1
- package/dist/atlas/poster/statements.d.ts +0 -19
- package/dist/atlas/poster/statements.d.ts.map +1 -1
- package/dist/atlas/poster/statements.js +1 -1
- package/dist/atlas/poster/statements.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +1 -1
- package/dist/atlas/proof-target.js +1 -1
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/atlas/regime.d.ts +1 -1
- package/dist/atlas/regime.d.ts.map +1 -1
- package/dist/atlas/regime.js +1 -1
- package/dist/atlas/regime.js.map +1 -1
- package/dist/atlas/text-overlap.d.ts +23 -0
- package/dist/atlas/text-overlap.d.ts.map +1 -0
- package/dist/atlas/text-overlap.js +41 -0
- package/dist/atlas/text-overlap.js.map +1 -0
- package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/waves/bridges-closure.js +2 -6
- package/dist/atlas/waves/bridges-closure.js.map +1 -1
- package/dist/atlas/waves/bridges.d.ts.map +1 -1
- package/dist/atlas/waves/bridges.js +32 -48
- package/dist/atlas/waves/bridges.js.map +1 -1
- package/dist/atlas/waves/models.d.ts +5 -6
- package/dist/atlas/waves/models.d.ts.map +1 -1
- package/dist/atlas/waves/models.js +7 -13
- package/dist/atlas/waves/models.js.map +1 -1
- package/dist/atlas/waves/numerics.d.ts.map +1 -1
- package/dist/atlas/waves/numerics.js +10 -3
- package/dist/atlas/waves/numerics.js.map +1 -1
- package/dist/atlas/witness-numeric.d.ts +30 -0
- package/dist/atlas/witness-numeric.d.ts.map +1 -1
- package/dist/atlas/witness-numeric.js +53 -0
- package/dist/atlas/witness-numeric.js.map +1 -1
- package/dist/atlas/witness-specs.d.ts.map +1 -1
- package/dist/atlas/witness-specs.js +19 -0
- package/dist/atlas/witness-specs.js.map +1 -1
- package/dist/atlas/witness-symbolic.d.ts +75 -3
- package/dist/atlas/witness-symbolic.d.ts.map +1 -1
- package/dist/atlas/witness-symbolic.js +116 -10
- package/dist/atlas/witness-symbolic.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +13 -8
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +26 -2
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/catalog-types.js +11 -1
- package/dist/bridges/catalog-types.js.map +1 -1
- package/dist/bridges/evaluation-errors.d.ts +31 -1
- package/dist/bridges/evaluation-errors.d.ts.map +1 -1
- package/dist/bridges/evaluation-errors.js +20 -2
- package/dist/bridges/evaluation-errors.js.map +1 -1
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +7 -5
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +27 -12
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +11 -0
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +14 -5
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +35 -3
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +117 -23
- package/dist/bridges/holds.js.map +1 -1
- package/dist/bridges/notices.d.ts.map +1 -1
- package/dist/bridges/notices.js +5 -5
- package/dist/bridges/notices.js.map +1 -1
- package/dist/bridges/relation-eval.d.ts +4 -4
- package/dist/bridges/relation-eval.d.ts.map +1 -1
- package/dist/bridges/relation-eval.js +15 -16
- package/dist/bridges/relation-eval.js.map +1 -1
- package/dist/bridges/sensitivity.d.ts.map +1 -1
- package/dist/bridges/sensitivity.js +3 -3
- package/dist/bridges/sensitivity.js.map +1 -1
- package/dist/bridges/validity.d.ts +33 -0
- package/dist/bridges/validity.d.ts.map +1 -0
- package/dist/bridges/validity.js +67 -0
- package/dist/bridges/validity.js.map +1 -0
- package/dist/canonical/entries/atomic.js +1 -3
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
- package/dist/canonical/entries/condensed-matter.js +4 -5
- package/dist/canonical/entries/condensed-matter.js.map +1 -1
- package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
- package/dist/canonical/entries/dimensional-classics.js +3 -4
- package/dist/canonical/entries/dimensional-classics.js.map +1 -1
- package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
- package/dist/canonical/entries/electromagnetism.js +4 -10
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +3 -7
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/mechanics.js +4 -6
- package/dist/canonical/entries/mechanics.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +9 -17
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/entries/relativity.d.ts.map +1 -1
- package/dist/canonical/entries/relativity.js +6 -6
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/fixed-points.d.ts +94 -0
- package/dist/canonical/fixed-points.d.ts.map +1 -0
- package/dist/canonical/fixed-points.js +81 -0
- package/dist/canonical/fixed-points.js.map +1 -0
- package/dist/canonical/linkage.d.ts.map +1 -1
- package/dist/canonical/linkage.js +25 -44
- package/dist/canonical/linkage.js.map +1 -1
- package/dist/canonical/normal-form.d.ts.map +1 -1
- package/dist/canonical/normal-form.js +5 -11
- package/dist/canonical/normal-form.js.map +1 -1
- package/dist/canonical/structural.d.ts +21 -21
- package/dist/canonical/structural.d.ts.map +1 -1
- package/dist/canonical/structural.js +40 -19
- package/dist/canonical/structural.js.map +1 -1
- package/dist/cases/brownian-sphere.d.ts +3 -3
- package/dist/cases/brownian-sphere.d.ts.map +1 -1
- package/dist/cases/brownian-sphere.js +6 -5
- 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 +6 -9
- package/dist/cases/damped-resonator.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 +21 -23
- 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 +4 -4
- 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/cli/args.d.ts +23 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +30 -8
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bindings.d.ts.map +1 -1
- package/dist/cli/bindings.js +5 -4
- package/dist/cli/bindings.js.map +1 -1
- package/dist/cli/command.d.ts +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 +0 -9
- package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-map.js +8 -18
- package/dist/cli/commands/_atlas-map.js.map +1 -1
- package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-route.js +6 -2
- package/dist/cli/commands/_atlas-route.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +8 -9
- package/dist/cli/commands/_discovery-opts.js.map +1 -1
- package/dist/cli/commands/atlas.d.ts.map +1 -1
- package/dist/cli/commands/atlas.js +8 -5
- package/dist/cli/commands/atlas.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +8 -1
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/axes.d.ts.map +1 -1
- package/dist/cli/commands/axes.js +20 -1
- package/dist/cli/commands/axes.js.map +1 -1
- package/dist/cli/commands/confront.d.ts.map +1 -1
- package/dist/cli/commands/confront.js +8 -14
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +22 -22
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +6 -2
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +1 -0
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +65 -37
- 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 +2 -1
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/ground.d.ts.map +1 -1
- package/dist/cli/commands/ground.js +1 -0
- package/dist/cli/commands/ground.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +75 -5
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli/commands/metric.d.ts.map +1 -1
- package/dist/cli/commands/metric.js +12 -9
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/path.d.ts +10 -0
- package/dist/cli/commands/path.d.ts.map +1 -1
- package/dist/cli/commands/path.js +25 -3
- package/dist/cli/commands/path.js.map +1 -1
- package/dist/cli/commands/probe.d.ts.map +1 -1
- package/dist/cli/commands/probe.js +59 -16
- package/dist/cli/commands/probe.js.map +1 -1
- package/dist/cli/commands/regime.d.ts.map +1 -1
- package/dist/cli/commands/regime.js +1 -0
- package/dist/cli/commands/regime.js.map +1 -1
- package/dist/cli/commands/retrieve.d.ts.map +1 -1
- package/dist/cli/commands/retrieve.js +1 -0
- package/dist/cli/commands/retrieve.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +1 -0
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/symbolic.d.ts.map +1 -1
- package/dist/cli/commands/symbolic.js +19 -28
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.d.ts.map +1 -1
- package/dist/cli/commands/testplan.js +4 -2
- package/dist/cli/commands/testplan.js.map +1 -1
- package/dist/cli/expr-print.d.ts +0 -2
- package/dist/cli/expr-print.d.ts.map +1 -1
- package/dist/cli/expr-print.js +7 -31
- package/dist/cli/expr-print.js.map +1 -1
- package/dist/cli/main.d.ts +7 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +18 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/numeric-flag.d.ts +12 -0
- package/dist/cli/numeric-flag.d.ts.map +1 -0
- package/dist/cli/numeric-flag.js +44 -0
- package/dist/cli/numeric-flag.js.map +1 -0
- package/dist/cli/output.d.ts +20 -0
- 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/record-reach.js +2 -2
- package/dist/cli/record-reach.js.map +1 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +6 -5
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli/record.d.ts +1 -5
- package/dist/cli/record.d.ts.map +1 -1
- package/dist/cli/record.js +9 -8
- package/dist/cli/record.js.map +1 -1
- package/dist/cli/search-index.d.ts.map +1 -1
- package/dist/cli/search-index.js +7 -6
- package/dist/cli/search-index.js.map +1 -1
- package/dist/cli/statuses.d.ts +0 -2
- package/dist/cli/statuses.d.ts.map +1 -1
- package/dist/cli/statuses.js +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/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 +34 -5
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +28 -4
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/algebraic-equivalence.d.ts +43 -0
- package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
- package/dist/composition/algebraic-equivalence.js +115 -0
- package/dist/composition/algebraic-equivalence.js.map +1 -0
- package/dist/composition/axes.d.ts +0 -6
- package/dist/composition/axes.d.ts.map +1 -1
- package/dist/composition/axes.js +6 -6
- package/dist/composition/axes.js.map +1 -1
- package/dist/composition/axis-audit.d.ts +47 -20
- package/dist/composition/axis-audit.d.ts.map +1 -1
- package/dist/composition/axis-audit.js +82 -9
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +17 -0
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +102 -55
- package/dist/composition/bridge-analysis.js.map +1 -1
- package/dist/composition/canonical-compare.d.ts +40 -0
- package/dist/composition/canonical-compare.d.ts.map +1 -1
- package/dist/composition/canonical-compare.js +122 -24
- package/dist/composition/canonical-compare.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +1 -1
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +9 -36
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-json.js +2 -2
- package/dist/composition/canonical-json.js.map +1 -1
- package/dist/composition/catalog-graph.d.ts.map +1 -1
- package/dist/composition/catalog-graph.js +2 -5
- package/dist/composition/catalog-graph.js.map +1 -1
- package/dist/composition/chain-candidate.d.ts +8 -0
- package/dist/composition/chain-candidate.d.ts.map +1 -1
- package/dist/composition/chain-candidate.js +9 -2
- package/dist/composition/chain-candidate.js.map +1 -1
- package/dist/composition/chain-match.d.ts +6 -3
- package/dist/composition/chain-match.d.ts.map +1 -1
- package/dist/composition/chain-match.js +4 -1
- package/dist/composition/chain-match.js.map +1 -1
- package/dist/composition/chain-result.d.ts.map +1 -1
- package/dist/composition/chain-result.js +2 -14
- package/dist/composition/chain-result.js.map +1 -1
- package/dist/composition/compose-symbolic.d.ts.map +1 -1
- package/dist/composition/compose-symbolic.js +3 -2
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +13 -5
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/composition-recovery.d.ts.map +1 -1
- package/dist/composition/composition-recovery.js +4 -7
- package/dist/composition/composition-recovery.js.map +1 -1
- package/dist/composition/discovery.d.ts +56 -0
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +114 -60
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +21 -2
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +23 -1
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/enumerate.d.ts.map +1 -1
- package/dist/composition/enumerate.js +18 -3
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +35 -11
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +60 -39
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +3 -12
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +7 -20
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts.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 +15 -20
- package/dist/composition/expr-simplify.js.map +1 -1
- package/dist/composition/formula-shape.d.ts +23 -4
- package/dist/composition/formula-shape.d.ts.map +1 -1
- package/dist/composition/formula-shape.js +57 -17
- package/dist/composition/formula-shape.js.map +1 -1
- package/dist/composition/graph-structure.d.ts +98 -0
- package/dist/composition/graph-structure.d.ts.map +1 -0
- package/dist/composition/graph-structure.js +167 -0
- package/dist/composition/graph-structure.js.map +1 -0
- package/dist/composition/graph-viz-svg.d.ts.map +1 -1
- package/dist/composition/graph-viz-svg.js +1 -1
- package/dist/composition/graph-viz-svg.js.map +1 -1
- package/dist/composition/graph-viz.d.ts.map +1 -1
- package/dist/composition/graph-viz.js +8 -37
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/identifiability.d.ts +91 -4
- package/dist/composition/identifiability.d.ts.map +1 -1
- package/dist/composition/identifiability.js +363 -6
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +8 -4
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +3 -2
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/mathts-quiet.d.ts +4 -3
- package/dist/composition/mathts-quiet.d.ts.map +1 -1
- package/dist/composition/mathts-quiet.js +4 -3
- package/dist/composition/mathts-quiet.js.map +1 -1
- package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
- package/dist/composition/mathts-scalar-symbols.js +2 -1
- package/dist/composition/mathts-scalar-symbols.js.map +1 -1
- package/dist/composition/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/falsify.d.ts.map +1 -1
- package/dist/composition/probe/falsify.js +2 -0
- package/dist/composition/probe/falsify.js.map +1 -1
- package/dist/composition/probe/fit.d.ts +6 -0
- package/dist/composition/probe/fit.d.ts.map +1 -1
- package/dist/composition/probe/fit.js +46 -22
- package/dist/composition/probe/fit.js.map +1 -1
- package/dist/composition/probe/frontier.d.ts.map +1 -1
- package/dist/composition/probe/frontier.js +33 -15
- package/dist/composition/probe/frontier.js.map +1 -1
- package/dist/composition/probe/generator.d.ts +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 +14 -0
- package/dist/composition/probe/index.d.ts.map +1 -1
- package/dist/composition/probe/index.js +6 -0
- package/dist/composition/probe/index.js.map +1 -1
- package/dist/composition/probe/limits.d.ts +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/pipeline.d.ts.map +1 -1
- package/dist/composition/probe/pipeline.js +10 -4
- 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 +7 -4
- package/dist/composition/probe/problem.d.ts.map +1 -1
- package/dist/composition/probe/problem.js +177 -49
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.js +1 -1
- package/dist/composition/probe/report.js.map +1 -1
- package/dist/composition/probe/residual.d.ts +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/structure.d.ts +82 -17
- package/dist/composition/probe/structure.d.ts.map +1 -1
- package/dist/composition/probe/structure.js +129 -55
- package/dist/composition/probe/structure.js.map +1 -1
- package/dist/composition/probe/study.d.ts +31 -9
- package/dist/composition/probe/study.d.ts.map +1 -1
- package/dist/composition/probe/study.js +236 -181
- 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 +3 -0
- package/dist/composition/probe/types.d.ts.map +1 -1
- package/dist/composition/probe/types.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts +41 -10
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +100 -55
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/quantity-clusters.d.ts +48 -0
- package/dist/composition/quantity-clusters.d.ts.map +1 -0
- package/dist/composition/quantity-clusters.js +98 -0
- package/dist/composition/quantity-clusters.js.map +1 -0
- package/dist/composition/rational-exponent.d.ts +40 -0
- package/dist/composition/rational-exponent.d.ts.map +1 -0
- package/dist/composition/rational-exponent.js +65 -0
- package/dist/composition/rational-exponent.js.map +1 -0
- package/dist/composition/representative-values.d.ts +22 -0
- package/dist/composition/representative-values.d.ts.map +1 -1
- package/dist/composition/representative-values.js +23 -0
- package/dist/composition/representative-values.js.map +1 -1
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +2 -1
- package/dist/composition/retrodiction.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/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 +30 -30
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +47 -30
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +7 -0
- package/dist/core/data-file.d.ts.map +1 -1
- package/dist/core/data-file.js +17 -0
- package/dist/core/data-file.js.map +1 -1
- package/dist/core/format.d.ts +36 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +39 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/hash.d.ts +14 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +17 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/json-schema.d.ts +2 -0
- package/dist/core/json-schema.d.ts.map +1 -1
- package/dist/core/json-schema.js +14 -13
- package/dist/core/json-schema.js.map +1 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/labeled-tensor.js +0 -8
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/mathts-read.d.ts +25 -0
- package/dist/core/mathts-read.d.ts.map +1 -0
- package/dist/core/mathts-read.js +51 -0
- package/dist/core/mathts-read.js.map +1 -0
- package/dist/core/tensor.d.ts.map +1 -1
- package/dist/core/tensor.js +24 -0
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts +5 -5
- package/dist/diff/bridge-gradient.d.ts +19 -6
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +19 -11
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +3 -0
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/algebra.d.ts +18 -0
- package/dist/dimensional/algebra.d.ts.map +1 -1
- package/dist/dimensional/algebra.js +41 -1
- package/dist/dimensional/algebra.js.map +1 -1
- package/dist/dimensional/ast-builders.d.ts +7 -0
- package/dist/dimensional/ast-builders.d.ts.map +1 -1
- package/dist/dimensional/ast-builders.js +11 -0
- package/dist/dimensional/ast-builders.js.map +1 -1
- package/dist/dimensional/ast-leaves.d.ts +81 -0
- package/dist/dimensional/ast-leaves.d.ts.map +1 -0
- package/dist/dimensional/ast-leaves.js +146 -0
- package/dist/dimensional/ast-leaves.js.map +1 -0
- package/dist/dimensional/buckingham.d.ts.map +1 -1
- package/dist/dimensional/buckingham.js +15 -27
- package/dist/dimensional/buckingham.js.map +1 -1
- package/dist/dimensional/constant-rows.js +9 -9
- package/dist/dimensional/constant-rows.js.map +1 -1
- package/dist/dimensional/dimension-inference.d.ts.map +1 -1
- package/dist/dimensional/dimension-inference.js +1 -2
- package/dist/dimensional/dimension-inference.js.map +1 -1
- package/dist/dimensional/errors.d.ts +1 -1
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/errors.js +1 -15
- package/dist/dimensional/errors.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +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/gauge-field.d.ts.map +1 -1
- package/dist/dimensional/gauge-field.js +2 -2
- package/dist/dimensional/gauge-field.js.map +1 -1
- package/dist/dimensional/hyphen-names.d.ts +12 -2
- package/dist/dimensional/hyphen-names.d.ts.map +1 -1
- package/dist/dimensional/hyphen-names.js +44 -19
- package/dist/dimensional/hyphen-names.js.map +1 -1
- package/dist/dimensional/metric.d.ts.map +1 -1
- package/dist/dimensional/metric.js +0 -1
- package/dist/dimensional/metric.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 +13 -1
- package/dist/dimensional/symbolic-constants.js.map +1 -1
- package/dist/dimensional/types.d.ts +36 -0
- package/dist/dimensional/types.d.ts.map +1 -1
- package/dist/dimensional/types.js +45 -7
- package/dist/dimensional/types.js.map +1 -1
- package/dist/dimensional/unit-data.js +2 -2
- package/dist/dimensional/unit-data.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/numerical/christoffel-flat.d.ts.map +1 -1
- package/dist/numerical/christoffel-flat.js +3 -2
- package/dist/numerical/christoffel-flat.js.map +1 -1
- package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
- package/dist/numerical/covariant-eikonal.js +34 -11
- package/dist/numerical/covariant-eikonal.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +3 -2
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/errors.d.ts.map +1 -1
- package/dist/numerical/errors.js +0 -3
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/finite-difference.d.ts +22 -0
- package/dist/numerical/finite-difference.d.ts.map +1 -0
- package/dist/numerical/finite-difference.js +27 -0
- package/dist/numerical/finite-difference.js.map +1 -0
- package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
- package/dist/numerical/geodesic-integrator.js +22 -14
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/geometrized.d.ts.map +1 -1
- package/dist/numerical/geometrized.js +0 -1
- package/dist/numerical/geometrized.js.map +1 -1
- package/dist/numerical/mathts-engine.d.ts.map +1 -1
- package/dist/numerical/mathts-engine.js +10 -24
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.d.ts.map +1 -1
- package/dist/numerical/metric-inverse.js +83 -46
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/null-ray-integrator.d.ts +2 -1
- package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
- package/dist/numerical/null-ray-integrator.js +12 -12
- package/dist/numerical/null-ray-integrator.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js +2 -2
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +0 -36
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +41 -87
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/quadrature.d.ts.map +1 -1
- package/dist/numerical/quadrature.js +8 -10
- package/dist/numerical/quadrature.js.map +1 -1
- package/dist/numerical/rk4-trajectory.d.ts +10 -0
- package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
- package/dist/numerical/rk4-trajectory.js +37 -0
- package/dist/numerical/rk4-trajectory.js.map +1 -0
- package/dist/numerical/schwarzschild.d.ts +14 -0
- package/dist/numerical/schwarzschild.d.ts.map +1 -0
- package/dist/numerical/schwarzschild.js +17 -0
- package/dist/numerical/schwarzschild.js.map +1 -0
- package/dist/numerical/spacetime-metrics.d.ts +12 -0
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +72 -56
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/numerical/statistics.d.ts +24 -0
- package/dist/numerical/statistics.d.ts.map +1 -0
- package/dist/numerical/statistics.js +52 -0
- package/dist/numerical/statistics.js.map +1 -0
- package/dist/numerical/tensor-engine.d.ts +21 -0
- package/dist/numerical/tensor-engine.d.ts.map +1 -1
- package/dist/numerical/tensor-engine.js +12 -0
- package/dist/numerical/tensor-engine.js.map +1 -1
- package/dist/relations/regime.d.ts +10 -0
- package/dist/relations/regime.d.ts.map +1 -1
- package/dist/relations/regime.js +18 -1
- package/dist/relations/regime.js.map +1 -1
- package/package.json +7 -7
|
@@ -7,7 +7,11 @@ const HELP = `upt axes
|
|
|
7
7
|
Axis-discrimination audit — which tensor classification axes actually
|
|
8
8
|
GATE the discovery funnel. Each axis measures FIRES (candidate clashes)
|
|
9
9
|
vs ABSTAINS over the funnel; an axis gates only when it fires. Reproduces
|
|
10
|
-
the rank-7 measurement (topology/statistics/symmetry classify but don't gate)
|
|
10
|
+
the rank-7 measurement (topology/statistics/symmetry classify but don't gate).
|
|
11
|
+
Beside each axis: Fisher's exact test of its fires against the
|
|
12
|
+
independent magnitude falsifier's clashes (table, odds ratio, p, n),
|
|
13
|
+
and EARNED when p < 0.05 with a positive association. Firing is
|
|
14
|
+
activity, not evidence: a gated axis that is not earned is named.`;
|
|
11
15
|
const EPISTEMICS = `(rank grows on measured evidence: an axis gates only when it fires — ${publishedUrl('docs/research/rank7-axis-measurement.md')})`;
|
|
12
16
|
async function run(ctx) {
|
|
13
17
|
const { args, api, out } = ctx;
|
|
@@ -22,10 +26,25 @@ async function run(ctx) {
|
|
|
22
26
|
out(` ${r.axis.padEnd(12)} ${r.gated ? 'GATED ' : 'ungated '}` +
|
|
23
27
|
` checked ${String(r.checked).padStart(3)} · fires ${String(r.fires).padStart(3)} · ` +
|
|
24
28
|
(r.discriminates ? 'discriminates ✓' : 'does not gate'));
|
|
29
|
+
const { table, oddsRatio, pValue, n } = r.evidence;
|
|
30
|
+
const odds = oddsRatio === null ? 'undefined' : api.formatQuantity(oddsRatio, 3);
|
|
31
|
+
out(` vs the magnitude falsifier: [[${table[0][0]}, ${table[0][1]}], [${table[1][0]}, ${table[1][1]}]] · ` +
|
|
32
|
+
`odds ratio ${odds} · p = ${api.formatQuantity(pValue, 3)} · n = ${n} · ${r.earned ? 'EARNED' : 'NOT earned'}`);
|
|
25
33
|
}
|
|
26
34
|
const gated = report.filter((r) => r.gated).map((r) => r.axis);
|
|
27
35
|
out(`\n ${gated.length} of ${report.length} axes gate (${gated.join(', ')}); ` +
|
|
28
36
|
'the rest classify but do not gate (their physics is closed-form-isolated or already-connected).');
|
|
37
|
+
// Firing is activity; agreeing with an independent falsifier more often than chance is evidence.
|
|
38
|
+
out(` Evidence: Fisher's exact test of each axis's fires against the magnitude falsifier's clashes, over the ` +
|
|
39
|
+
`pairs where both ran (table rows fires/silent, columns clash/no clash). EARNED means p < ${api.AUDIT_ALPHA} ` +
|
|
40
|
+
'with a positive association; it changes no gate.');
|
|
41
|
+
const unearned = report.filter((r) => r.gated && !r.earned).map((r) => r.axis);
|
|
42
|
+
const earned = report.filter((r) => r.earned).map((r) => r.axis);
|
|
43
|
+
if (unearned.length > 0) {
|
|
44
|
+
out(` The gated axes ${unearned.join(', ')} are NOT earned: they gate because they fire, and their fires do not ` +
|
|
45
|
+
'coincide with the magnitude falsifier more often than chance.');
|
|
46
|
+
}
|
|
47
|
+
out(` Earned axes: ${earned.length === 0 ? 'none' : earned.join(', ')}.`);
|
|
29
48
|
return 0;
|
|
30
49
|
}
|
|
31
50
|
export const command = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axes.js","sourceRoot":"","sources":["../../../src/cli/commands/axes.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAiC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,KAAK,GAAe,CAAC,SAAS,CAAC,CAAC;AAEtC,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"axes.js","sourceRoot":"","sources":["../../../src/cli/commands/axes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt axes` — the axis-discrimination audit. Reproduces from the CLI the\n * measurement behind the rank-7 finding: which tensor classification axes actually\n * GATE the discovery funnel (an axis stays ungated until it MEASURABLY fires on\n * real candidates). Closes the reproducibility gap for\n * docs/research/rank7-axis-measurement.md.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson } from '../output.js';\nimport { publishedUrl } from '../published-url.js';\n\nconst FLAGS: FlagSpec[] = [JSON_FLAG];\n\nconst HELP = `upt axes\n Axis-discrimination audit — which tensor classification axes actually\n GATE the discovery funnel. Each axis measures FIRES (candidate clashes)\n vs ABSTAINS over the funnel; an axis gates only when it fires. Reproduces\n the rank-7 measurement (topology/statistics/symmetry classify but don't gate).\n Beside each axis: Fisher's exact test of its fires against the\n independent magnitude falsifier's clashes (table, odds ratio, p, n),\n and EARNED when p < 0.05 with a positive association. Firing is\n activity, not evidence: a gated axis that is not earned is named.`;\n\nconst EPISTEMICS =\n `(rank grows on measured evidence: an axis gates only when it fires — ${publishedUrl('docs/research/rank7-axis-measurement.md')})`;\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const report = api.auditAxisDiscrimination(api.CATALOG_GRAPH);\n\n if (args.flags.has('json')) {\n emitJson({ command: 'axes', epistemics: EPISTEMICS, result: report }, ctx.write);\n return 0;\n }\n\n out('\\nTensor-axis discrimination audit — which axes gate the discovery funnel');\n out(EPISTEMICS + '\\n');\n for (const r of report) {\n out(\n ` ${r.axis.padEnd(12)} ${r.gated ? 'GATED ' : 'ungated '}` +\n ` checked ${String(r.checked).padStart(3)} · fires ${String(r.fires).padStart(3)} · ` +\n (r.discriminates ? 'discriminates ✓' : 'does not gate'),\n );\n const { table, oddsRatio, pValue, n } = r.evidence;\n const odds = oddsRatio === null ? 'undefined' : api.formatQuantity(oddsRatio, 3);\n out(\n ` vs the magnitude falsifier: [[${table[0][0]}, ${table[0][1]}], [${table[1][0]}, ${table[1][1]}]] · ` +\n `odds ratio ${odds} · p = ${api.formatQuantity(pValue, 3)} · n = ${n} · ${r.earned ? 'EARNED' : 'NOT earned'}`,\n );\n }\n const gated = report.filter((r) => r.gated).map((r) => r.axis);\n out(\n `\\n ${gated.length} of ${report.length} axes gate (${gated.join(', ')}); ` +\n 'the rest classify but do not gate (their physics is closed-form-isolated or already-connected).',\n );\n // Firing is activity; agreeing with an independent falsifier more often than chance is evidence.\n out(\n ` Evidence: Fisher's exact test of each axis's fires against the magnitude falsifier's clashes, over the ` +\n `pairs where both ran (table rows fires/silent, columns clash/no clash). EARNED means p < ${api.AUDIT_ALPHA} ` +\n 'with a positive association; it changes no gate.',\n );\n const unearned = report.filter((r) => r.gated && !r.earned).map((r) => r.axis);\n const earned = report.filter((r) => r.earned).map((r) => r.axis);\n if (unearned.length > 0) {\n out(\n ` The gated axes ${unearned.join(', ')} are NOT earned: they gate because they fire, and their fires do not ` +\n 'coincide with the magnitude falsifier more often than chance.',\n );\n }\n out(` Earned axes: ${earned.length === 0 ? 'none' : earned.join(', ')}.`);\n return 0;\n}\n\nexport const command: Command = {\n name: 'axes',\n aliases: ['axis-audit'],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Report which tensor classification axes gate the discovery funnel.',\n example: 'upt axes',\n group: 'discovery',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confront.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/confront.ts"],"names":[],"mappings":"AAMA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"confront.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/confront.ts"],"names":[],"mappings":"AAMA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AA4Y/E,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
|
|
@@ -53,22 +53,20 @@ function frontierMarginSigma(outcome) {
|
|
|
53
53
|
const EPISTEMICS = 'confrontation is consistency, not confirmation; a passing confrontation does not prove the bridge.';
|
|
54
54
|
const SENSITIVITY_EPISTEMICS = ' sensitivity (elasticity) ranks which input the prediction depends on most STRONGLY; ' +
|
|
55
55
|
'it is NOT which input dominates the uncertainty budget (that needs input sigma).';
|
|
56
|
+
/** A malformed id is a malformed invocation (exit 2), as `upt evaluate be-abc` is; an unregistered one is refused later (exit 1). */
|
|
56
57
|
function parseSelection(api, raw, via) {
|
|
57
58
|
try {
|
|
58
59
|
return api.parseBridgeId(raw);
|
|
59
60
|
}
|
|
60
61
|
catch {
|
|
61
|
-
throw new
|
|
62
|
+
throw new UsageError(via === 'flag'
|
|
62
63
|
? `upt confront: invalid --bridge='${raw}' (expected be-<id>)`
|
|
63
64
|
: `upt confront: '${raw}' is not a bridge id (expected be-<id>). A positional is not ignored.`);
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
/** The bridge a positional id and/or `--bridge` select, or undefined for the full list. */
|
|
67
68
|
function selectedBridgeId(api, args) {
|
|
68
|
-
|
|
69
|
-
throw new UsageError(`upt confront: unexpected extra arguments (${args.positionals.slice(1).join(', ')}). ` +
|
|
70
|
-
'Give one bridge id, e.g. `upt confront be-58`, or `--bridge=be-58`.');
|
|
71
|
-
}
|
|
69
|
+
// One bridge at a time: the parser refused a second positional (`positionals: { max: 1 }`).
|
|
72
70
|
const flag = args.flags.get('bridge');
|
|
73
71
|
const fromFlag = flag && flag.length > 0 ? parseSelection(api, flag[flag.length - 1], 'flag') : undefined;
|
|
74
72
|
const fromPositional = args.positionals.length === 1 ? parseSelection(api, args.positionals[0], 'positional') : undefined;
|
|
@@ -119,13 +117,8 @@ function statisticDistribution(outcomes) {
|
|
|
119
117
|
const n = (k) => outcomes.filter((o) => o.kind === k).length;
|
|
120
118
|
return { sigmaTests: n('value'), limits: n('upper-bound'), consistencyRatios: n('consistency'), tables: n('table') };
|
|
121
119
|
}
|
|
122
|
-
/** A fraction as a percentage
|
|
123
|
-
|
|
124
|
-
return `${fmt(x * 100, 3)}%`;
|
|
125
|
-
}
|
|
126
|
-
function signedPercent(fmt, x) {
|
|
127
|
-
return `${x > 0 ? '+' : ''}${percent(fmt, x)}`;
|
|
128
|
-
}
|
|
120
|
+
/** A fraction printed as a percentage is a statistic: three significant digits (`-43.7%`, `±150%`), never fifteen. */
|
|
121
|
+
const STATISTIC = { significant: 3 };
|
|
129
122
|
/** Count by rigor tier, over the confrontations given. */
|
|
130
123
|
function rigorDistributionOf(tiers) {
|
|
131
124
|
const counts = { stringent: 0, moderate: 0, loose: 0 };
|
|
@@ -324,10 +317,10 @@ async function run(ctx) {
|
|
|
324
317
|
? `rule: ${c.rule} · ${c.withinBound ? 'compatible ✓' : 'BELOW THE LIMIT'}`
|
|
325
318
|
: c.agreementBound === null
|
|
326
319
|
? 'no agreement bound in this outcome, so no compatibility decision'
|
|
327
|
-
: `agreement bound ±${
|
|
320
|
+
: `agreement bound ±${api.formatPercent(c.agreementBound, STATISTIC)} (the record's stated tolerance, not a measured difference) · ` +
|
|
328
321
|
`|difference| ≤ bound: ${c.withinBound ? 'compatible ✓' : 'OUTSIDE BOUND'}`;
|
|
329
322
|
out(` predicted ${outcome.predicted} approaches ${outcome.approaches} ${outcome.units} · ` +
|
|
330
|
-
`actual difference ${
|
|
323
|
+
`actual difference ${api.formatPercent(c.relativeDifference, { ...STATISTIC, signed: true })} = ${c.definition} · ${verdict}`);
|
|
331
324
|
if (wantSensitivity)
|
|
332
325
|
out(` sensitivity: n/a for ${outcome.kind}-kind`);
|
|
333
326
|
break;
|
|
@@ -354,6 +347,7 @@ async function run(ctx) {
|
|
|
354
347
|
export const command = {
|
|
355
348
|
name: 'confront',
|
|
356
349
|
aliases: [],
|
|
350
|
+
positionals: { max: 1 },
|
|
357
351
|
flags: FLAGS,
|
|
358
352
|
help: commandHelp(HELP, FLAGS),
|
|
359
353
|
summary: 'Run the committed predicted-versus-observed confrontations.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confront.js","sourceRoot":"","sources":["../../../src/cli/commands/confront.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt confront` — run the catalog's committed real-data confrontations and\n * report predicted-vs-observed with the epistemics that confrontation ≠\n * confirmation. Not graph-parameterized (no --source).\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { CliError, UsageError } from '../errors.js';\nimport { emitJson } from '../output.js';\nimport { publishedUrl } from '../published-url.js';\nimport type { RigorTier } from '../../cli-api.js';\n\nconst FLAGS: FlagSpec[] = [\n { name: '--bridge', valueStyle: 'attached', description: 'Select one bridge id, the same selection as a positional be-XX.' },\n { name: '--sensitivity', valueStyle: 'none', description: 'Rank the prediction\\'s input elasticities. Value-kind records only.' },\n { name: '--rigor', valueStyle: 'attached', description: 'Show one rigor tier: stringent, moderate, or loose.' },\n {\n name: '--frontier',\n valueStyle: 'none',\n description: 'Rank the σ-tests by margin to this tool\\'s 1σ acceptance line. That line is a software criterion.',\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt confront [be-XX] [--bridge=be-XX] [--rigor=stringent|moderate|loose] [--frontier] [--sensitivity] [--json]\n Run the catalog's committed real-data confrontations (predicted vs\n observed), each tagged with its RIGOR tier. A positional be-XX is the\n same selection as --bridge (the form \\`upt explain be-XX\\` prints);\n the two must name the same bridge when both are given. A positional\n that is not a bridge id is an error. It is not ignored.\n --rigor=<tier> shows only that tier (the precision core, or the loose\n tail that needs better data); --frontier ranks the σ-tests by margin to\n this tool's 1σ acceptance threshold (a software criterion, not a\n scientific exclusion level; the smallest margin is the most at-risk\n under new data);\n --sensitivity adds an input-elasticity ranking (value-kind only).\n Each record states its statistical object (point estimate ± 1σ,\n one-sided limit, or a consistency ratio with no σ), the criterion\n applied, whether the observed number is derived, its preprocessing,\n its independence from the prediction (no fitted parameter, a shared\n input, or not recorded — never implied), and the record's notes.\n Each statement cites the GitHub URL of the file it quotes, with a\n verbatim quote or a declared symbol; that the cited text exists\n does not make the statement true.\n Consistency ratios are counted apart and never as precision tests;\n each prints its actual difference (observed − predicted)/predicted\n separately from its stated agreement bound.\n be-53 is not in that registry. \\`upt confront be-53\\` refuses: a\n confrontation needs a caller-supplied measured-coupling table and a\n running procedure, neither of which the library ships. The refusal names\n each missing input, prints no residual, and does not change the\n catalog status. It is not a pass and not a fail. The one-loop\n coefficient's sign is oneLoopCoefficientStatement, not this command.`;\n\nconst RIGOR_TIERS = new Set(['stringent', 'moderate', 'loose']);\n\n/** σ-headroom to the 1σ acceptance threshold for a value outcome; null for others. */\nfunction frontierMarginSigma(\n outcome: { kind: string; residualInSigma?: number } | undefined,\n): number | null {\n return outcome && outcome.kind === 'value' && typeof outcome.residualInSigma === 'number'\n ? 1 - outcome.residualInSigma\n : null;\n}\n\nconst EPISTEMICS =\n 'confrontation is consistency, not confirmation; a passing confrontation does not prove the bridge.';\nconst SENSITIVITY_EPISTEMICS =\n ' sensitivity (elasticity) ranks which input the prediction depends on most STRONGLY; ' +\n 'it is NOT which input dominates the uncertainty budget (that needs input sigma).';\n\nfunction parseSelection(api: CommandCtx['api'], raw: string, via: 'flag' | 'positional'): number {\n try {\n return api.parseBridgeId(raw);\n } catch {\n throw new CliError(\n via === 'flag'\n ? `upt confront: invalid --bridge='${raw}' (expected be-<id>)`\n : `upt confront: '${raw}' is not a bridge id (expected be-<id>). A positional is not ignored.`,\n );\n }\n}\n\n/** The bridge a positional id and/or `--bridge` select, or undefined for the full list. */\nfunction selectedBridgeId(api: CommandCtx['api'], args: CommandCtx['args']): number | undefined {\n if (args.positionals.length > 1) {\n throw new UsageError(\n `upt confront: unexpected extra arguments (${args.positionals.slice(1).join(', ')}). ` +\n 'Give one bridge id, e.g. `upt confront be-58`, or `--bridge=be-58`.',\n );\n }\n const flag = args.flags.get('bridge');\n const fromFlag = flag && flag.length > 0 ? parseSelection(api, flag[flag.length - 1]!, 'flag') : undefined;\n const fromPositional = args.positionals.length === 1 ? parseSelection(api, args.positionals[0]!, 'positional') : undefined;\n if (fromFlag !== undefined && fromPositional !== undefined && fromFlag !== fromPositional) {\n throw new UsageError(\n `upt confront: positional be-${fromPositional} and --bridge=be-${fromFlag} name different bridges`,\n );\n }\n return fromFlag ?? fromPositional;\n}\n\nconst SENSITIVITY_NOTE = 'strongest dependence, not uncertainty budget';\n\ntype Outcome = ReturnType<CommandCtx['api']['listConfrontations']>[number]['run'] extends () => infer O ? O : never;\n\n/**\n * The statistical object a confrontation compares, the criterion it applies,\n * and where its observed number comes from — read from the outcome's kind and\n * fields only.\n */\nfunction statisticOf(o: Outcome): { object: string; criterion: string; observed: string } {\n const reported = 'as reported by the source (no derivation recorded)';\n switch (o.kind) {\n case 'value':\n return {\n object: 'point estimate ± 1σ',\n criterion: 'residual ≤ 1σ',\n observed: o.measured ? `derived from ${o.measured.quantity} by ${o.measured.derivation}` : reported,\n };\n case 'upper-bound':\n return o.predictedIs === 'encoded-bound'\n ? { object: 'one-sided upper limit against an encoded range', criterion: 'observed limit ≤ encoded bound', observed: reported }\n : { object: 'one-sided upper limit', criterion: 'predicted ≤ limit', observed: reported };\n case 'consistency':\n if (o.predictedIs === 'lower-limit') {\n return {\n object: 'lower limit claimed by the bridge, against a reference value with no σ',\n criterion: 'observed ≥ predicted lower limit — one-sided, not a σ-residual; not a precision test',\n observed: reported,\n };\n }\n return {\n object: 'reference value with no σ',\n criterion:\n o.fractionalGapIs === 'agreement-bound'\n ? \"|actual difference| ≤ the record's stated agreement bound — a tolerance, not a σ-residual; not a precision test\"\n : 'none — the outcome carries no agreement bound; the difference is reported, not thresholded; not a precision test',\n observed: reported,\n };\n case 'table':\n return { object: 'per-row point estimate ± 1σ', criterion: 'residual per row, reported not thresholded', observed: reported };\n }\n}\n\nfunction statisticDistribution(outcomes: readonly Outcome[]) {\n const n = (k: Outcome['kind']) => outcomes.filter((o) => o.kind === k).length;\n return { sigmaTests: n('value'), limits: n('upper-bound'), consistencyRatios: n('consistency'), tables: n('table') };\n}\n\n/** The one number formatter, as every command reads it: through `ctx.api`. */\ntype Fmt = CommandCtx['api']['formatQuantity'];\n\n/** A fraction as a percentage: a statistic, three significant digits (`-43.7%`, `±150%`), never fifteen. */\nfunction percent(fmt: Fmt, x: number): string {\n return `${fmt(x * 100, 3)}%`;\n}\n\nfunction signedPercent(fmt: Fmt, x: number): string {\n return `${x > 0 ? '+' : ''}${percent(fmt, x)}`;\n}\n\n/** Count by rigor tier, over the confrontations given. */\nfunction rigorDistributionOf(tiers: readonly RigorTier[]): Record<RigorTier, number> {\n const counts: Record<RigorTier, number> = { stringent: 0, moderate: 0, loose: 0 };\n for (const tier of tiers) counts[tier] += 1;\n return counts;\n}\n\nconst NOT_RECORDED = 'not recorded — the record states nothing on this; that is not \"none\"';\n\ntype SourceRefs = Extract<Outcome['preprocessing'], { state: 'recorded' }>['source'];\n\nfunction sourceLine(refs: SourceRefs): string {\n return `[source: ${refs.map((r) => ('quote' in r ? `${publishedUrl(r.file)} \"${r.quote}\"` : `${publishedUrl(r.file)} #${r.symbol}`)).join('; ')}]`;\n}\n\nfunction preprocessingLine(o: Outcome): string {\n const p = o.preprocessing;\n return p.state === 'recorded' ? `${p.statement} ${sourceLine(p.source)}` : NOT_RECORDED;\n}\n\nfunction independenceLine(o: Outcome): string {\n const i = o.independence;\n switch (i.state) {\n case 'no-fitted-parameter':\n return `no parameter fitted to this measurement — ${i.statement} ${sourceLine(i.source)}`;\n case 'shares-input':\n return `shares ${i.shared} — ${i.statement} ${sourceLine(i.source)}`;\n case 'not-recorded':\n return NOT_RECORDED;\n }\n}\n\nfunction dataHandlingDistribution(outcomes: readonly Outcome[]) {\n const pre = (s: Outcome['preprocessing']['state']) => outcomes.filter((o) => o.preprocessing.state === s).length;\n const ind = (s: Outcome['independence']['state']) => outcomes.filter((o) => o.independence.state === s).length;\n return {\n preprocessing: { recorded: pre('recorded'), notRecorded: pre('not-recorded') },\n independence: {\n noFittedParameter: ind('no-fitted-parameter'),\n sharesInput: ind('shares-input'),\n notRecorded: ind('not-recorded'),\n },\n };\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const bridgeId = selectedBridgeId(api, args);\n const wantJson = args.flags.has('json');\n const wantSensitivity = args.flags.has('sensitivity');\n const wantFrontier = args.flags.has('frontier');\n const rigorFlag = args.flags.get('rigor');\n const rigorTier = rigorFlag && rigorFlag.length ? rigorFlag[rigorFlag.length - 1] : undefined;\n if (rigorTier !== undefined && !RIGOR_TIERS.has(rigorTier)) {\n throw new CliError(`upt confront: invalid --rigor='${rigorTier}' (expected stringent|moderate|loose)`);\n }\n\n if (bridgeId !== undefined && api.catalogEntry(bridgeId)?.callerTable === true) {\n const refusal = api.requestCallerTableConfrontation({});\n if (refusal.status !== 'refused') {\n throw new CliError(`upt confront: catalog id ${bridgeId} without a table and a running procedure did not refuse`);\n }\n const missing = refusal.missing.join('; ');\n if (wantJson) {\n emitJson(\n {\n command: 'confront',\n result: {\n bridgeId,\n status: 'refused',\n missing: refusal.missing,\n pass: false,\n fail: false,\n catalogStatus: 'unchanged',\n },\n },\n ctx.write,\n );\n } else {\n out(`catalog id ${bridgeId} refused. Missing: ${missing}.`);\n out(`This is not a pass and not a fail. The catalog status of catalog id ${bridgeId} is unchanged.`);\n }\n // The refusal is the result the command computed: exit 0, as a path with no composite claim.\n return 0;\n }\n\n let entries =\n bridgeId === undefined\n ? api.listConfrontations()\n : (() => {\n const one = api.listConfrontations().find((e) => e.bridgeId === bridgeId);\n if (!one) throw new CliError(`upt confront: no confrontation registered for be-${bridgeId}`);\n return [one];\n })();\n\n if (rigorTier !== undefined) {\n entries = entries.filter((e) => api.confrontationRigor(e.bridgeId) === rigorTier);\n }\n\n const results = entries.map((e) => ({\n bridgeId: e.bridgeId,\n title: e.title,\n outcome: e.run(),\n rigor: api.confrontationRigor(e.bridgeId),\n }));\n\n if (wantFrontier) {\n // Frontier = closest to the threshold: value-kind by σ-headroom ASCENDING (smallest\n // margin = most at-risk under new data); non-σ outcomes (bounds/consistency) after.\n results.sort((a, b) => {\n const ma = frontierMarginSigma(a.outcome);\n const mb = frontierMarginSigma(b.outcome);\n if (ma === null && mb === null) return 0;\n if (ma === null) return 1;\n if (mb === null) return -1;\n return ma - mb;\n });\n }\n\n if (wantJson) {\n const jsonResults = results.map((r) => ({\n bridgeId: r.bridgeId,\n rigor: r.rigor,\n ...(wantSensitivity && r.outcome.kind === 'value'\n ? { ...r.outcome, sensitivity: api.decidingMeasurement(r.bridgeId) }\n : r.outcome),\n ...(r.outcome.kind === 'consistency' ? { comparison: api.consistencyComparison(r.outcome) } : {}),\n statistic: statisticOf(r.outcome),\n }));\n const epistemics = wantSensitivity ? EPISTEMICS + SENSITIVITY_EPISTEMICS : EPISTEMICS;\n emitJson(\n {\n command: 'confront',\n epistemics,\n // Over the confrontations this invocation ran, as the other two distributions are.\n rigorDistribution: rigorDistributionOf(results.map((r) => r.rigor)),\n statisticDistribution: statisticDistribution(results.map((r) => r.outcome)),\n dataHandlingDistribution: dataHandlingDistribution(results.map((r) => r.outcome)),\n result: jsonResults,\n },\n ctx.write,\n );\n return 0;\n }\n\n out('\\nReal-data confrontations — predicted vs observed');\n out('(' + EPISTEMICS + (wantSensitivity ? SENSITIVITY_EPISTEMICS : '') + ')');\n // The spine is a RIGOR HIERARCHY, not N equal confirmations (docs/research/pi-instrument-results.md).\n if (results.length > 1) {\n const d = { stringent: 0, moderate: 0, loose: 0 };\n for (const r of results) d[r.rigor]++;\n out(\n `rigor: ${d.stringent} stringent · ${d.moderate} moderate · ${d.loose} loose — NOT ${results.length} equal confirmations`,\n );\n const s = statisticDistribution(results.map((r) => r.outcome));\n out(\n `by statistic: ${s.sigmaTests} σ-residual tests · ${s.limits} limits · ${s.consistencyRatios} consistency ratios ` +\n `(no σ; never counted as precision tests)${s.tables ? ` · ${s.tables} tables` : ''}`,\n );\n const h = dataHandlingDistribution(results.map((r) => r.outcome));\n out(\n `preprocessing: recorded for ${h.preprocessing.recorded} · not recorded for ${h.preprocessing.notRecorded}; ` +\n `independence: ${h.independence.noFittedParameter} no fitted parameter · ${h.independence.sharesInput} share an input ` +\n `· ${h.independence.notRecorded} not recorded (independence is not goodness of fit)`,\n );\n if (wantFrontier) {\n out(\n 'frontier: σ-tests ordered by margin to the 1σ acceptance threshold (residual ≤ 1σ passes; a software ' +\n 'criterion, not a scientific exclusion level; smallest = most at-risk under new data)',\n );\n }\n out('');\n } else {\n out('');\n }\n for (const { bridgeId, title, rigor, outcome } of results) {\n out(` be-${bridgeId} [${rigor}]: ${title}`);\n switch (outcome.kind) {\n case 'value': {\n const margin = wantFrontier ? ` · margin ${api.formatQuantity(1 - outcome.residualInSigma, 3)}σ to the 1σ acceptance threshold` : '';\n // A derived \"observed\" value is labelled derived, and the quantity that\n // was actually measured is shown beside it (persona finding L6).\n const m = outcome.measured;\n const observedLabel = m ? `derived ${m.derivation} =` : 'observed';\n out(\n ` predicted ${api.formatQuantity(outcome.predicted)} · ${observedLabel} ${api.formatQuantity(outcome.observed)} ± ${api.formatQuantity(outcome.sigma)} ${outcome.units} · residual ${api.formatQuantity(outcome.residualInSigma, 3)}σ · ${outcome.withinObserved ? 'within 1σ ✓' : 'outside 1σ'}${margin}`\n );\n if (m) {\n out(` measured: ${m.quantity} = ${m.value} ± ${m.sigma} (${m.source}); the value above is derived from it, not observed`);\n }\n if (wantSensitivity) {\n const ranked = api.decidingMeasurement(bridgeId);\n if (ranked.length) {\n out(` sensitivity (elasticity, ${SENSITIVITY_NOTE}):`);\n for (const { input, elasticity } of ranked) {\n out(` ${input}: ${elasticity}`);\n }\n } else {\n out(` sensitivity: no ranked-input model for be-${bridgeId}`);\n }\n }\n break;\n }\n case 'upper-bound': {\n const caveat = outcome.caveat ? ` · ${outcome.caveat}` : '';\n out(\n outcome.predictedIs === 'encoded-bound'\n ? ` encoded bound |x| ≤ ${outcome.predicted}, x = ${outcome.units} (a range, not a point prediction) · ` +\n `observed upper limit ${outcome.bound} · rule: observed limit ≤ encoded bound · ` +\n `${outcome.satisfied ? 'compatible ✓' : 'INCOMPATIBLE'}${caveat}`\n : ` predicted ${outcome.predicted} ${outcome.units} · observed upper limit ${outcome.bound} · ` +\n `rule: predicted ≤ limit · ${outcome.satisfied ? 'not excluded ✓' : 'EXCLUDED'}${caveat}`,\n );\n if (wantSensitivity) out(` sensitivity: n/a for ${outcome.kind}-kind`);\n break;\n }\n case 'consistency': {\n const c = api.consistencyComparison(outcome);\n const verdict =\n c.rule === 'observed ≥ predicted lower limit'\n ? `rule: ${c.rule} · ${c.withinBound ? 'compatible ✓' : 'BELOW THE LIMIT'}`\n : c.agreementBound === null\n ? 'no agreement bound in this outcome, so no compatibility decision'\n : `agreement bound ±${percent(api.formatQuantity, c.agreementBound)} (the record's stated tolerance, not a measured difference) · ` +\n `|difference| ≤ bound: ${c.withinBound ? 'compatible ✓' : 'OUTSIDE BOUND'}`;\n out(\n ` predicted ${outcome.predicted} approaches ${outcome.approaches} ${outcome.units} · ` +\n `actual difference ${signedPercent(api.formatQuantity, c.relativeDifference)} = ${c.definition} · ${verdict}`,\n );\n if (wantSensitivity) out(` sensitivity: n/a for ${outcome.kind}-kind`);\n break;\n }\n case 'table':\n out(` ${outcome.rows.length} rows (${outcome.units}):`);\n for (const row of outcome.rows) {\n out(\n ` ${row.label}: predicted ${api.formatQuantity(row.predicted)} · observed ${api.formatQuantity(row.observed)} ± ${api.formatQuantity(row.sigma)} · ${api.formatQuantity(row.residualInSigma, 3)}σ`\n );\n }\n if (wantSensitivity) out(` sensitivity: n/a for ${outcome.kind}-kind`);\n break;\n }\n const st = statisticOf(outcome);\n out(` statistic: ${st.object} · criterion: ${st.criterion} · observed: ${st.observed}`);\n out(` preprocessing: ${preprocessingLine(outcome)}`);\n out(` independence: ${independenceLine(outcome)}`);\n if (outcome.provenance.note) out(` notes: ${outcome.provenance.note}`);\n out(` source: ${outcome.provenance.citation}`);\n }\n return 0;\n}\n\nexport const command: Command = {\n name: 'confront',\n aliases: [],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Run the committed predicted-versus-observed confrontations.',\n example: 'upt confront be-58',\n group: 'data',\n run,\n};\nregisterCommand(command);\n"]}
|
|
1
|
+
{"version":3,"file":"confront.js","sourceRoot":"","sources":["../../../src/cli/commands/confront.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt confront` — run the catalog's committed real-data confrontations and\n * report predicted-vs-observed with the epistemics that confrontation ≠\n * confirmation. Not graph-parameterized (no --source).\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { CliError, UsageError } from '../errors.js';\nimport { emitJson } from '../output.js';\nimport { publishedUrl } from '../published-url.js';\nimport type { RigorTier } from '../../cli-api.js';\n\nconst FLAGS: FlagSpec[] = [\n { name: '--bridge', valueStyle: 'attached', description: 'Select one bridge id, the same selection as a positional be-XX.' },\n { name: '--sensitivity', valueStyle: 'none', description: 'Rank the prediction\\'s input elasticities. Value-kind records only.' },\n { name: '--rigor', valueStyle: 'attached', description: 'Show one rigor tier: stringent, moderate, or loose.' },\n {\n name: '--frontier',\n valueStyle: 'none',\n description: 'Rank the σ-tests by margin to this tool\\'s 1σ acceptance line. That line is a software criterion.',\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt confront [be-XX] [--bridge=be-XX] [--rigor=stringent|moderate|loose] [--frontier] [--sensitivity] [--json]\n Run the catalog's committed real-data confrontations (predicted vs\n observed), each tagged with its RIGOR tier. A positional be-XX is the\n same selection as --bridge (the form \\`upt explain be-XX\\` prints);\n the two must name the same bridge when both are given. A positional\n that is not a bridge id is an error. It is not ignored.\n --rigor=<tier> shows only that tier (the precision core, or the loose\n tail that needs better data); --frontier ranks the σ-tests by margin to\n this tool's 1σ acceptance threshold (a software criterion, not a\n scientific exclusion level; the smallest margin is the most at-risk\n under new data);\n --sensitivity adds an input-elasticity ranking (value-kind only).\n Each record states its statistical object (point estimate ± 1σ,\n one-sided limit, or a consistency ratio with no σ), the criterion\n applied, whether the observed number is derived, its preprocessing,\n its independence from the prediction (no fitted parameter, a shared\n input, or not recorded — never implied), and the record's notes.\n Each statement cites the GitHub URL of the file it quotes, with a\n verbatim quote or a declared symbol; that the cited text exists\n does not make the statement true.\n Consistency ratios are counted apart and never as precision tests;\n each prints its actual difference (observed − predicted)/predicted\n separately from its stated agreement bound.\n be-53 is not in that registry. \\`upt confront be-53\\` refuses: a\n confrontation needs a caller-supplied measured-coupling table and a\n running procedure, neither of which the library ships. The refusal names\n each missing input, prints no residual, and does not change the\n catalog status. It is not a pass and not a fail. The one-loop\n coefficient's sign is oneLoopCoefficientStatement, not this command.`;\n\nconst RIGOR_TIERS = new Set(['stringent', 'moderate', 'loose']);\n\n/** σ-headroom to the 1σ acceptance threshold for a value outcome; null for others. */\nfunction frontierMarginSigma(\n outcome: { kind: string; residualInSigma?: number } | undefined,\n): number | null {\n return outcome && outcome.kind === 'value' && typeof outcome.residualInSigma === 'number'\n ? 1 - outcome.residualInSigma\n : null;\n}\n\nconst EPISTEMICS =\n 'confrontation is consistency, not confirmation; a passing confrontation does not prove the bridge.';\nconst SENSITIVITY_EPISTEMICS =\n ' sensitivity (elasticity) ranks which input the prediction depends on most STRONGLY; ' +\n 'it is NOT which input dominates the uncertainty budget (that needs input sigma).';\n\n/** A malformed id is a malformed invocation (exit 2), as `upt evaluate be-abc` is; an unregistered one is refused later (exit 1). */\nfunction parseSelection(api: CommandCtx['api'], raw: string, via: 'flag' | 'positional'): number {\n try {\n return api.parseBridgeId(raw);\n } catch {\n throw new UsageError(\n via === 'flag'\n ? `upt confront: invalid --bridge='${raw}' (expected be-<id>)`\n : `upt confront: '${raw}' is not a bridge id (expected be-<id>). A positional is not ignored.`,\n );\n }\n}\n\n/** The bridge a positional id and/or `--bridge` select, or undefined for the full list. */\nfunction selectedBridgeId(api: CommandCtx['api'], args: CommandCtx['args']): number | undefined {\n // One bridge at a time: the parser refused a second positional (`positionals: { max: 1 }`).\n const flag = args.flags.get('bridge');\n const fromFlag = flag && flag.length > 0 ? parseSelection(api, flag[flag.length - 1]!, 'flag') : undefined;\n const fromPositional = args.positionals.length === 1 ? parseSelection(api, args.positionals[0]!, 'positional') : undefined;\n if (fromFlag !== undefined && fromPositional !== undefined && fromFlag !== fromPositional) {\n throw new UsageError(\n `upt confront: positional be-${fromPositional} and --bridge=be-${fromFlag} name different bridges`,\n );\n }\n return fromFlag ?? fromPositional;\n}\n\nconst SENSITIVITY_NOTE = 'strongest dependence, not uncertainty budget';\n\ntype Outcome = ReturnType<CommandCtx['api']['listConfrontations']>[number]['run'] extends () => infer O ? O : never;\n\n/**\n * The statistical object a confrontation compares, the criterion it applies,\n * and where its observed number comes from — read from the outcome's kind and\n * fields only.\n */\nfunction statisticOf(o: Outcome): { object: string; criterion: string; observed: string } {\n const reported = 'as reported by the source (no derivation recorded)';\n switch (o.kind) {\n case 'value':\n return {\n object: 'point estimate ± 1σ',\n criterion: 'residual ≤ 1σ',\n observed: o.measured ? `derived from ${o.measured.quantity} by ${o.measured.derivation}` : reported,\n };\n case 'upper-bound':\n return o.predictedIs === 'encoded-bound'\n ? { object: 'one-sided upper limit against an encoded range', criterion: 'observed limit ≤ encoded bound', observed: reported }\n : { object: 'one-sided upper limit', criterion: 'predicted ≤ limit', observed: reported };\n case 'consistency':\n if (o.predictedIs === 'lower-limit') {\n return {\n object: 'lower limit claimed by the bridge, against a reference value with no σ',\n criterion: 'observed ≥ predicted lower limit — one-sided, not a σ-residual; not a precision test',\n observed: reported,\n };\n }\n return {\n object: 'reference value with no σ',\n criterion:\n o.fractionalGapIs === 'agreement-bound'\n ? \"|actual difference| ≤ the record's stated agreement bound — a tolerance, not a σ-residual; not a precision test\"\n : 'none — the outcome carries no agreement bound; the difference is reported, not thresholded; not a precision test',\n observed: reported,\n };\n case 'table':\n return { object: 'per-row point estimate ± 1σ', criterion: 'residual per row, reported not thresholded', observed: reported };\n }\n}\n\nfunction statisticDistribution(outcomes: readonly Outcome[]) {\n const n = (k: Outcome['kind']) => outcomes.filter((o) => o.kind === k).length;\n return { sigmaTests: n('value'), limits: n('upper-bound'), consistencyRatios: n('consistency'), tables: n('table') };\n}\n\n/** A fraction printed as a percentage is a statistic: three significant digits (`-43.7%`, `±150%`), never fifteen. */\nconst STATISTIC = { significant: 3 } as const;\n\n/** Count by rigor tier, over the confrontations given. */\nfunction rigorDistributionOf(tiers: readonly RigorTier[]): Record<RigorTier, number> {\n const counts: Record<RigorTier, number> = { stringent: 0, moderate: 0, loose: 0 };\n for (const tier of tiers) counts[tier] += 1;\n return counts;\n}\n\nconst NOT_RECORDED = 'not recorded — the record states nothing on this; that is not \"none\"';\n\ntype SourceRefs = Extract<Outcome['preprocessing'], { state: 'recorded' }>['source'];\n\nfunction sourceLine(refs: SourceRefs): string {\n return `[source: ${refs.map((r) => ('quote' in r ? `${publishedUrl(r.file)} \"${r.quote}\"` : `${publishedUrl(r.file)} #${r.symbol}`)).join('; ')}]`;\n}\n\nfunction preprocessingLine(o: Outcome): string {\n const p = o.preprocessing;\n return p.state === 'recorded' ? `${p.statement} ${sourceLine(p.source)}` : NOT_RECORDED;\n}\n\nfunction independenceLine(o: Outcome): string {\n const i = o.independence;\n switch (i.state) {\n case 'no-fitted-parameter':\n return `no parameter fitted to this measurement — ${i.statement} ${sourceLine(i.source)}`;\n case 'shares-input':\n return `shares ${i.shared} — ${i.statement} ${sourceLine(i.source)}`;\n case 'not-recorded':\n return NOT_RECORDED;\n }\n}\n\nfunction dataHandlingDistribution(outcomes: readonly Outcome[]) {\n const pre = (s: Outcome['preprocessing']['state']) => outcomes.filter((o) => o.preprocessing.state === s).length;\n const ind = (s: Outcome['independence']['state']) => outcomes.filter((o) => o.independence.state === s).length;\n return {\n preprocessing: { recorded: pre('recorded'), notRecorded: pre('not-recorded') },\n independence: {\n noFittedParameter: ind('no-fitted-parameter'),\n sharesInput: ind('shares-input'),\n notRecorded: ind('not-recorded'),\n },\n };\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const bridgeId = selectedBridgeId(api, args);\n const wantJson = args.flags.has('json');\n const wantSensitivity = args.flags.has('sensitivity');\n const wantFrontier = args.flags.has('frontier');\n const rigorFlag = args.flags.get('rigor');\n const rigorTier = rigorFlag && rigorFlag.length ? rigorFlag[rigorFlag.length - 1] : undefined;\n if (rigorTier !== undefined && !RIGOR_TIERS.has(rigorTier)) {\n throw new CliError(`upt confront: invalid --rigor='${rigorTier}' (expected stringent|moderate|loose)`);\n }\n\n if (bridgeId !== undefined && api.catalogEntry(bridgeId)?.callerTable === true) {\n const refusal = api.requestCallerTableConfrontation({});\n if (refusal.status !== 'refused') {\n throw new CliError(`upt confront: catalog id ${bridgeId} without a table and a running procedure did not refuse`);\n }\n const missing = refusal.missing.join('; ');\n if (wantJson) {\n emitJson(\n {\n command: 'confront',\n result: {\n bridgeId,\n status: 'refused',\n missing: refusal.missing,\n pass: false,\n fail: false,\n catalogStatus: 'unchanged',\n },\n },\n ctx.write,\n );\n } else {\n out(`catalog id ${bridgeId} refused. Missing: ${missing}.`);\n out(`This is not a pass and not a fail. The catalog status of catalog id ${bridgeId} is unchanged.`);\n }\n // The refusal is the result the command computed: exit 0, as a path with no composite claim.\n return 0;\n }\n\n let entries =\n bridgeId === undefined\n ? api.listConfrontations()\n : (() => {\n const one = api.listConfrontations().find((e) => e.bridgeId === bridgeId);\n if (!one) throw new CliError(`upt confront: no confrontation registered for be-${bridgeId}`);\n return [one];\n })();\n\n if (rigorTier !== undefined) {\n entries = entries.filter((e) => api.confrontationRigor(e.bridgeId) === rigorTier);\n }\n\n const results = entries.map((e) => ({\n bridgeId: e.bridgeId,\n title: e.title,\n outcome: e.run(),\n rigor: api.confrontationRigor(e.bridgeId),\n }));\n\n if (wantFrontier) {\n // Frontier = closest to the threshold: value-kind by σ-headroom ASCENDING (smallest\n // margin = most at-risk under new data); non-σ outcomes (bounds/consistency) after.\n results.sort((a, b) => {\n const ma = frontierMarginSigma(a.outcome);\n const mb = frontierMarginSigma(b.outcome);\n if (ma === null && mb === null) return 0;\n if (ma === null) return 1;\n if (mb === null) return -1;\n return ma - mb;\n });\n }\n\n if (wantJson) {\n const jsonResults = results.map((r) => ({\n bridgeId: r.bridgeId,\n rigor: r.rigor,\n ...(wantSensitivity && r.outcome.kind === 'value'\n ? { ...r.outcome, sensitivity: api.decidingMeasurement(r.bridgeId) }\n : r.outcome),\n ...(r.outcome.kind === 'consistency' ? { comparison: api.consistencyComparison(r.outcome) } : {}),\n statistic: statisticOf(r.outcome),\n }));\n const epistemics = wantSensitivity ? EPISTEMICS + SENSITIVITY_EPISTEMICS : EPISTEMICS;\n emitJson(\n {\n command: 'confront',\n epistemics,\n // Over the confrontations this invocation ran, as the other two distributions are.\n rigorDistribution: rigorDistributionOf(results.map((r) => r.rigor)),\n statisticDistribution: statisticDistribution(results.map((r) => r.outcome)),\n dataHandlingDistribution: dataHandlingDistribution(results.map((r) => r.outcome)),\n result: jsonResults,\n },\n ctx.write,\n );\n return 0;\n }\n\n out('\\nReal-data confrontations — predicted vs observed');\n out('(' + EPISTEMICS + (wantSensitivity ? SENSITIVITY_EPISTEMICS : '') + ')');\n // The spine is a RIGOR HIERARCHY, not N equal confirmations (docs/research/pi-instrument-results.md).\n if (results.length > 1) {\n const d = { stringent: 0, moderate: 0, loose: 0 };\n for (const r of results) d[r.rigor]++;\n out(\n `rigor: ${d.stringent} stringent · ${d.moderate} moderate · ${d.loose} loose — NOT ${results.length} equal confirmations`,\n );\n const s = statisticDistribution(results.map((r) => r.outcome));\n out(\n `by statistic: ${s.sigmaTests} σ-residual tests · ${s.limits} limits · ${s.consistencyRatios} consistency ratios ` +\n `(no σ; never counted as precision tests)${s.tables ? ` · ${s.tables} tables` : ''}`,\n );\n const h = dataHandlingDistribution(results.map((r) => r.outcome));\n out(\n `preprocessing: recorded for ${h.preprocessing.recorded} · not recorded for ${h.preprocessing.notRecorded}; ` +\n `independence: ${h.independence.noFittedParameter} no fitted parameter · ${h.independence.sharesInput} share an input ` +\n `· ${h.independence.notRecorded} not recorded (independence is not goodness of fit)`,\n );\n if (wantFrontier) {\n out(\n 'frontier: σ-tests ordered by margin to the 1σ acceptance threshold (residual ≤ 1σ passes; a software ' +\n 'criterion, not a scientific exclusion level; smallest = most at-risk under new data)',\n );\n }\n out('');\n } else {\n out('');\n }\n for (const { bridgeId, title, rigor, outcome } of results) {\n out(` be-${bridgeId} [${rigor}]: ${title}`);\n switch (outcome.kind) {\n case 'value': {\n const margin = wantFrontier ? ` · margin ${api.formatQuantity(1 - outcome.residualInSigma, 3)}σ to the 1σ acceptance threshold` : '';\n // A derived \"observed\" value is labelled derived, and the quantity that\n // was actually measured is shown beside it (persona finding L6).\n const m = outcome.measured;\n const observedLabel = m ? `derived ${m.derivation} =` : 'observed';\n out(\n ` predicted ${api.formatQuantity(outcome.predicted)} · ${observedLabel} ${api.formatQuantity(outcome.observed)} ± ${api.formatQuantity(outcome.sigma)} ${outcome.units} · residual ${api.formatQuantity(outcome.residualInSigma, 3)}σ · ${outcome.withinObserved ? 'within 1σ ✓' : 'outside 1σ'}${margin}`\n );\n if (m) {\n out(` measured: ${m.quantity} = ${m.value} ± ${m.sigma} (${m.source}); the value above is derived from it, not observed`);\n }\n if (wantSensitivity) {\n const ranked = api.decidingMeasurement(bridgeId);\n if (ranked.length) {\n out(` sensitivity (elasticity, ${SENSITIVITY_NOTE}):`);\n for (const { input, elasticity } of ranked) {\n out(` ${input}: ${elasticity}`);\n }\n } else {\n out(` sensitivity: no ranked-input model for be-${bridgeId}`);\n }\n }\n break;\n }\n case 'upper-bound': {\n const caveat = outcome.caveat ? ` · ${outcome.caveat}` : '';\n out(\n outcome.predictedIs === 'encoded-bound'\n ? ` encoded bound |x| ≤ ${outcome.predicted}, x = ${outcome.units} (a range, not a point prediction) · ` +\n `observed upper limit ${outcome.bound} · rule: observed limit ≤ encoded bound · ` +\n `${outcome.satisfied ? 'compatible ✓' : 'INCOMPATIBLE'}${caveat}`\n : ` predicted ${outcome.predicted} ${outcome.units} · observed upper limit ${outcome.bound} · ` +\n `rule: predicted ≤ limit · ${outcome.satisfied ? 'not excluded ✓' : 'EXCLUDED'}${caveat}`,\n );\n if (wantSensitivity) out(` sensitivity: n/a for ${outcome.kind}-kind`);\n break;\n }\n case 'consistency': {\n const c = api.consistencyComparison(outcome);\n const verdict =\n c.rule === 'observed ≥ predicted lower limit'\n ? `rule: ${c.rule} · ${c.withinBound ? 'compatible ✓' : 'BELOW THE LIMIT'}`\n : c.agreementBound === null\n ? 'no agreement bound in this outcome, so no compatibility decision'\n : `agreement bound ±${api.formatPercent(c.agreementBound, STATISTIC)} (the record's stated tolerance, not a measured difference) · ` +\n `|difference| ≤ bound: ${c.withinBound ? 'compatible ✓' : 'OUTSIDE BOUND'}`;\n out(\n ` predicted ${outcome.predicted} approaches ${outcome.approaches} ${outcome.units} · ` +\n `actual difference ${api.formatPercent(c.relativeDifference, { ...STATISTIC, signed: true })} = ${c.definition} · ${verdict}`,\n );\n if (wantSensitivity) out(` sensitivity: n/a for ${outcome.kind}-kind`);\n break;\n }\n case 'table':\n out(` ${outcome.rows.length} rows (${outcome.units}):`);\n for (const row of outcome.rows) {\n out(\n ` ${row.label}: predicted ${api.formatQuantity(row.predicted)} · observed ${api.formatQuantity(row.observed)} ± ${api.formatQuantity(row.sigma)} · ${api.formatQuantity(row.residualInSigma, 3)}σ`\n );\n }\n if (wantSensitivity) out(` sensitivity: n/a for ${outcome.kind}-kind`);\n break;\n }\n const st = statisticOf(outcome);\n out(` statistic: ${st.object} · criterion: ${st.criterion} · observed: ${st.observed}`);\n out(` preprocessing: ${preprocessingLine(outcome)}`);\n out(` independence: ${independenceLine(outcome)}`);\n if (outcome.provenance.note) out(` notes: ${outcome.provenance.note}`);\n out(` source: ${outcome.provenance.citation}`);\n }\n return 0;\n}\n\nexport const command: Command = {\n name: 'confront',\n aliases: [],\n positionals: { max: 1 },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Run the committed predicted-versus-observed confrontations.',\n example: 'upt confront be-58',\n group: 'data',\n run,\n};\nregisterCommand(command);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/derive.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/derive.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AA+Q/E,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
|
|
@@ -53,8 +53,6 @@ const fmtMono = (m) => Object.entries(m)
|
|
|
53
53
|
.filter(([, e]) => Math.abs(e) > 1e-9)
|
|
54
54
|
.map(([n, e]) => (e === 1 ? n : `${n}^${e}`))
|
|
55
55
|
.join('·') || '(dimensionless)';
|
|
56
|
-
const BASES = ['L', 'M', 'T', 'I', 'Theta', 'N', 'J'];
|
|
57
|
-
const dimsEqualTol = (a, b) => BASES.every((k) => Math.abs((a[k] || 0) - (b[k] || 0)) < 1e-9);
|
|
58
56
|
async function run(ctx) {
|
|
59
57
|
const { args, api, out, err } = ctx;
|
|
60
58
|
const isJson = args.flags.has('json');
|
|
@@ -148,7 +146,7 @@ async function run(ctx) {
|
|
|
148
146
|
}
|
|
149
147
|
}
|
|
150
148
|
else {
|
|
151
|
-
const matches =
|
|
149
|
+
const matches = api.dimensionsEqual(r.dim, target.dim);
|
|
152
150
|
if (!matches)
|
|
153
151
|
failed = true;
|
|
154
152
|
textOut(` formula dimension: ${api.format(r.dim)}`
|
|
@@ -168,20 +166,27 @@ async function run(ctx) {
|
|
|
168
166
|
// named after a registered constant is that constant, as in `upt map --equation`.
|
|
169
167
|
const isConstant = (g) => {
|
|
170
168
|
const c = api.CONSTANTS[g.name];
|
|
171
|
-
return c !== undefined &&
|
|
169
|
+
return c !== undefined && api.dimensionsEqual(c.dim, g.dim);
|
|
172
170
|
};
|
|
173
171
|
const variables = governing.filter((g) => !isConstant(g));
|
|
174
172
|
const compiled = cf;
|
|
175
173
|
canonicalComparisons = api.compareWithCanonical(target.name, variables.map((g) => ({ name: g.name, dim: g.dim })), (values) => compiled.evaluate(Object.fromEntries(governing.map((g) => [
|
|
176
174
|
formulaSymbol(g.name),
|
|
177
|
-
isConstant(g) ? api.CONSTANTS[g.name].value : values[g.name
|
|
175
|
+
isConstant(g) ? api.CONSTANTS[g.name].value : values[api.foldName(g.name)],
|
|
178
176
|
]))));
|
|
179
177
|
const relationSources = variables.map((g) => ({ name: g.name, dim: g.dim }));
|
|
180
178
|
catalogEdges = api.matchingCatalogEdges(target.name, relationSources);
|
|
181
179
|
const printComparisons = () => {
|
|
182
|
-
|
|
180
|
+
// describeKnownRelation's first lines are one per comparison, in order (then the catalog
|
|
181
|
+
// edges), so line i belongs to comparison i when i is below the comparison count.
|
|
182
|
+
api.describeKnownRelation(canonicalComparisons, target.name, relationSources).forEach((line, i) => {
|
|
183
183
|
textOut(` ${line}`);
|
|
184
|
-
|
|
184
|
+
// A form mismatch names which exponent differs (the log-design fit), beneath its line.
|
|
185
|
+
const c = canonicalComparisons[i];
|
|
186
|
+
if (c?.kind === 'form' && c.exponentDifference !== undefined) {
|
|
187
|
+
textOut(` ${api.describeExponentDifference(c.exponentDifference)}`);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
185
190
|
for (const line of conventionLines(canonicalComparisons.map((c) => c.id)))
|
|
186
191
|
textOut(` ${line}`);
|
|
187
192
|
};
|
|
@@ -202,17 +207,13 @@ async function run(ctx) {
|
|
|
202
207
|
unresolved: [],
|
|
203
208
|
}).exit;
|
|
204
209
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
});
|
|
211
|
-
let cand = 1;
|
|
212
|
-
for (const g of governing)
|
|
213
|
-
cand *= Math.pow(scope[formulaSymbol(g.name)], det.monomial?.[g.name] || 0);
|
|
210
|
+
// Variable i takes (1.7 + i)^p at p = 1, 1.3, 1.6, and the ratio to the monomial is one
|
|
211
|
+
// constant when its coefficient of variation is under 1e-9: this command's own scheme,
|
|
212
|
+
// through the one fixed-point owner (canonical/fixed-points.ts).
|
|
213
|
+
const recovered = api.recoverMonomialPrefactor((point) => {
|
|
214
|
+
const scope = Object.fromEntries(governing.map((g) => [formulaSymbol(g.name), point[g.name]]));
|
|
214
215
|
try {
|
|
215
|
-
|
|
216
|
+
return cf.evaluate(scope);
|
|
216
217
|
}
|
|
217
218
|
catch (e) {
|
|
218
219
|
// Every symbol is declared (checked above). The scope is this command's own generic
|
|
@@ -220,12 +221,10 @@ async function run(ctx) {
|
|
|
220
221
|
// an unknown function), not a value the caller gave: a malformed formula, exit 2.
|
|
221
222
|
throw new UsageError('upt derive: the formula could not be evaluated at generic inputs: ' + e.message);
|
|
222
223
|
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
const cv = Math.sqrt(ratios.reduce((a, b) => a + (b - ratioMean) ** 2, 0) / ratios.length) / Math.abs(ratioMean);
|
|
226
|
-
matchesMonomial = cv < 1e-9;
|
|
224
|
+
}, det.monomial ?? {}, governing.map((g) => g.name), { base: 1.7, step: 1, exponents: [0, 1, 2].map((j) => 1 + 0.3 * j), tolerance: 1e-9, statistic: 'cv' });
|
|
225
|
+
matchesMonomial = recovered.matches;
|
|
227
226
|
if (matchesMonomial)
|
|
228
|
-
mean =
|
|
227
|
+
mean = recovered.prefactor;
|
|
229
228
|
else
|
|
230
229
|
failed = true;
|
|
231
230
|
textOut(matchesMonomial
|
|
@@ -248,6 +247,7 @@ async function run(ctx) {
|
|
|
248
247
|
export const command = {
|
|
249
248
|
name: 'derive',
|
|
250
249
|
aliases: ['dim'],
|
|
250
|
+
positionals: { max: Infinity },
|
|
251
251
|
flags: FLAGS,
|
|
252
252
|
help: commandHelp(HELP, FLAGS),
|
|
253
253
|
summary: 'Derive the dimensional form of your own equation and, with --formula, the prefactor.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../../src/cli/commands/derive.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAiC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG1E;kFACkF;AAClF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAExE;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,KAAsE,EAAE,OAAe;IACpH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7D,OAAO,GAAG,KAAK,0FAA0F,CAAC;AAC5G,CAAC;AAED,MAAM,KAAK,GAAe;IACxB;QACE,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,qFAAqF;KACnG;IACD,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,sDAAsD,EAAE;IAC5G,SAAS;CACV,CAAC;AAEF,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;6DAiBgD,CAAC;AAE9D,MAAM,OAAO,GAAG,CAAC,CAAmC,EAAU,EAAE,CAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;KACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;KACrC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC;AAEpC,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAC/D,MAAM,YAAY,GAAG,CAAC,CAAY,EAAE,CAAY,EAAW,EAAE,CAC3D,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAEjE,KAAK,UAAU,GAAG,CAAC,GAAe;IAChC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAClB,iGAAiG,CAClG,CAAC;IACJ,CAAC;IAED,IAAI,KAAyC,CAAC;IAC9C,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACrB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC/E,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,UAAU,CAAC,IAAI,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE3D,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,IAAI,IAAqD,CAAC;IAC1D,IAAI,YAAyG,CAAC;IAC9G,wFAAwF;IACxF,kGAAkG;IAClG,IAAI,IAAwB,CAAC;IAC7B,IAAI,eAAoC,CAAC;IACzC,IAAI,oBAA6E,CAAC;IAClF,IAAI,YAAqE,CAAC;IAC1E,wFAAwF;IACxF,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,QAAQ,CACN;YACE,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE;gBACN,aAAa,EAAE,GAAG;gBAClB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,IAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxG,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD;SACF,EACD,GAAG,CAAC,KAAK,CACV,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CAAC,OAAO,MAAM,CAAC,IAAI,WAAW,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjF,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,OAAO,CAAC,iDAAiD,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,QAAS,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,6BAA6B,IAAI,CAAC,YAAY,iCAAiC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;QACzG,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC5C,IAAI,KAAK;YAAE,GAAG,CAAC,cAAc,kBAAkB,CAAC,MAAM,GAAG,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,CAAC;QAEtF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,0BAA0B,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,GAAG,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC9C,YAAY,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,GAAG,IAAI,CAAC;YACd,OAAO,CAAC,kCAAkC,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/E,8EAA8E;YAC9E,iFAAiF;YACjF,IAAI,CAAC,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,CAAC,CAAC,gBAAgB,CAAC;gBAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,kCAAkC,CAAC;gBAC5G,iFAAiF;gBACjF,sFAAsF;gBACtF,uBAAuB;gBACvB,MAAM,IAAI,UAAU,CAAC,eAAe,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,+BAA+B,UAAU,IAAI,GAAG,eAAe,CAAC,CAAC;YACxI,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO;gBAAE,MAAM,GAAG,IAAI,CAAC;YAC5B,OAAO,CACL,wBAAwB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,CAAC,EAAE;kBACxC,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,gCAAgC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAC7G,CAAC;QACJ,CAAC;QAED,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,6DAA6D;YAC7D,MAAM,IAAI,iBAAiB,CAAC,yBAAyB,GAAI,CAAW,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAClH,CAAC;QACD,8EAA8E;QAC9E,2EAA2E;QAC3E,0EAA0E;QAC1E,kFAAkF;QAClF,MAAM,UAAU,GAAG,CAAC,CAAmC,EAAW,EAAE;YAClE,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,oBAAoB,GAAG,GAAG,CAAC,oBAAoB,CAC7C,MAAM,CAAC,IAAI,EACX,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EACpD,CAAC,MAAM,EAAE,EAAE,CACT,QAAQ,CAAC,QAAQ,CACf,MAAM,CAAC,WAAW,CAChB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACnB,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;YACrB,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAE;SAClF,CAAC,CACH,CACF,CACJ,CAAC;QACF,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7E,YAAY,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,GAAS,EAAE;YAClC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,qBAAqB,CAAC,oBAAqB,EAAE,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;gBAClG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACvB,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,oBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACnG,CAAC,CAAC;QACF,IAAI,oBAAoB,CAAC,oBAAoB,CAAC;YAAE,MAAM,GAAG,IAAI,CAAC;QAE9D,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,uFAAuF,CAAC,CAAC;YACjG,gBAAgB,EAAE,CAAC;YACnB,IAAI,MAAM;gBAAE,YAAY,EAAE,CAAC;;gBACtB,KAAK,EAAE,CAAC;YACb,OAAO,qBAAqB,CAAC;gBAC3B,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAC7D,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,EAAE;aACf,CAAC,CAAC,IAAI,CAAC;QACV,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YACH,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,SAAS;gBAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxG,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,oFAAoF;gBACpF,wFAAwF;gBACxF,kFAAkF;gBAClF,MAAM,IAAI,UAAU,CAAC,oEAAoE,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;YACpH,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACpE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjH,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;QAC5B,IAAI,eAAe;YAAE,IAAI,GAAG,SAAS,CAAC;;YACjC,MAAM,GAAG,IAAI,CAAC;QACnB,OAAO,CACL,eAAe;YACb,CAAC,CAAC,kEAAkE,GAAG,CAAC,cAAc,CAAC,IAAK,CAAC,EAAE;YAC/F,CAAC,CAAC,gHAAgH,CACrH,CAAC;QACF,gBAAgB,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,MAAM;QAAE,YAAY,EAAE,CAAC;;QACtB,KAAK,EAAE,CAAC;IACb,OAAO,qBAAqB,CAAC;QAC3B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;QACrE,WAAW,EAAE,MAAM;QACnB,SAAS,EAAE,CAAC,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,EAAE;KACf,CAAC,CAAC,IAAI,CAAC;AACV,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;IAC9B,OAAO,EAAE,sFAAsF;IAC/F,OAAO,EAAE,iGAAiG;IAC1G,KAAK,EAAE,UAAU;IACjB,GAAG;CACJ,CAAC;AAEF,eAAe,CAAC,OAAO,CAAC,CAAC","sourcesContent":["/**\n * `upt derive` — derive the caller's own equation's dimensional form, and\n * (with `--formula`) verify it and recover the dimensionless prefactor.\n * Transposed verbatim from bin/upt.mjs's `derive()` (lines 313-385, the\n * post-crash-fix body — `format(r.dim)`/`format(target.dim)` on the\n * dimension-check line), plus `--json`. `fmtMono`/`BASES`/`dimsEqualTol`\n * move here with it.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson } from '../output.js';\nimport { UsageError } from '../errors.js';\nimport { classifyDetermination } from '../determination.js';\nimport { formulaParserLabel } from '../version.js';\nimport { FormulaUsageError } from '../euler-guard.js';\nimport { canonicalCheckFailed, conventionLines } from '../conventions.js';\nimport type { Dimension } from '../../dimensional/types.js';\n\n/** The parser's symbol for a declared name. A hyphen is subtraction, so a\n * declared `reduced-planck-constant` is the symbol `reduced_planck_constant`. */\nconst formulaSymbol = (name: string): string => name.replace(/-/g, '_');\n\n/**\n * A hyphen that remains after declared names are rewritten is subtraction.\n * The undeclared-symbol error otherwise names only the first piece. The\n * checker says the symbol was undeclared on its own field, not in its text.\n */\nfunction hyphenSubtractionNote(check: { readonly error?: string; readonly undeclaredSymbol?: string }, formula: string): string {\n const error = check.error ?? '';\n if (check.undeclaredSymbol === undefined) return error;\n if (!/[A-Za-z0-9_]-[A-Za-z0-9_]/.test(formula)) return error;\n return `${error}. A hyphen between names is subtraction. A name from a dimension argument is one symbol.`;\n}\n\nconst FLAGS: FlagSpec[] = [\n {\n name: '--formula',\n valueStyle: 'next',\n description: 'Check EXPR against the declared dimensions and recover the dimensionless prefactor.',\n },\n { name: '--debug', valueStyle: 'none', description: 'Print the formula parser name and version on stderr.' },\n JSON_FLAG,\n];\n\nconst HELP = `upt derive <target:dim> <var:dim> ... [--formula \"<expr>\"] [--debug]\n Derive YOUR OWN equation's dimensional form. <dim> is a named\n dimension (length, time, mass, velocity, ...), a constant (hbar, c,\n G, k_B, e — e here is the elementary charge's dimension), a named\n product/quotient (power/area, length*temperature),\n or explicit (L^3.M^-1.T^-2). Parentheses group a factor\n (power/(area*temperature^4)); pressure, density, volume, viscosity,\n resistance, magnetic_field and permeability are names; mass/length^3 and M/L^3 work.\n In --formula, a bare e is the elementary charge and E is energy.\n A name from a dimension argument is one symbol, hyphens included.\n A hyphen between other names is subtraction.\n Euler's number is exp(x), for example exp(1). The name euler is refused.\n With --formula, also verify it and\n recover the dimensionless prefactor. A target that is not a unique\n monomial of the variables exits 3. --debug prints the formula parser\n and its version to stderr.\n e.g. upt derive period:time length:length gravity:acceleration \\\\\n --formula \"2*pi*sqrt(length/gravity)\"`;\n\nconst fmtMono = (m: Readonly<Record<string, number>>): string =>\n Object.entries(m)\n .filter(([, e]) => Math.abs(e) > 1e-9)\n .map(([n, e]) => (e === 1 ? n : `${n}^${e}`))\n .join('·') || '(dimensionless)';\n\nconst BASES = ['L', 'M', 'T', 'I', 'Theta', 'N', 'J'] as const;\nconst dimsEqualTol = (a: Dimension, b: Dimension): boolean =>\n BASES.every((k) => Math.abs((a[k] || 0) - (b[k] || 0)) < 1e-9);\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out, err } = ctx;\n const isJson = args.flags.has('json');\n const debug = args.flags.has('debug');\n const formulaFlag = args.flags.get('formula');\n const formula = formulaFlag ? formulaFlag[formulaFlag.length - 1] : undefined;\n\n const rest = args.positionals;\n if (rest.length < 1) {\n throw new UsageError(\n 'upt derive needs a target spec, e.g. upt derive period:time length:length gravity:acceleration'\n );\n }\n\n let specs: { name: string; dim: Dimension }[];\n try {\n specs = rest.map((a) => {\n const c = a.indexOf(':');\n if (c < 1) throw new Error(`'${a}' must be name:dimension (e.g. period:time)`);\n return { name: a.slice(0, c), dim: api.parseDimensionSpec(a.slice(c + 1)) };\n });\n } catch (e) {\n throw new UsageError(' ' + (e as Error).message);\n }\n\n const target = specs[0];\n const governing = specs.slice(1);\n const det = api.dimensionallyDetermines(target, governing);\n\n // Text is buffered and written only when the command reaches a result, so an\n // error (exit 1 or 2) leaves stdout empty, as every command's does; a result,\n // exit 0 or 3, prints the whole report. In --json mode text is suppressed.\n const lines: string[] = [];\n const textOut = isJson ? () => {} : (line: string) => void lines.push(line);\n const flush = (): void => {\n for (const line of lines) out(line);\n };\n\n let full: ReturnType<typeof api.buckinghamPi> | undefined;\n let formulaCheck: ReturnType<Awaited<ReturnType<typeof api.getFormulaDimensionChecker>>['check']> | undefined;\n // The recovered prefactor, and whether the formula has the monomial's input-dependence.\n // `mean` is kept only when it does: a prefactor of a formula that does not match is not a number.\n let mean: number | undefined;\n let matchesMonomial: boolean | undefined;\n let canonicalComparisons: ReturnType<typeof api.compareWithCanonical> | undefined;\n let catalogEdges: ReturnType<typeof api.matchingCatalogEdges> | undefined;\n // The formula's checks: dimension, monomial, canonical comparison. Any failure exits 3.\n let failed = false;\n\n const emitEnvelope = (): void => {\n emitJson(\n {\n command: 'derive',\n result: {\n determination: det,\n ...(full !== undefined ? { buckingham: full } : {}),\n ...(formulaCheck !== undefined ? { formulaCheck } : {}),\n ...(matchesMonomial === undefined ? {} : { matchesMonomial, prefactor: matchesMonomial ? mean! : null }),\n ...(canonicalComparisons !== undefined ? { canonicalComparisons } : {}),\n ...(catalogEdges !== undefined ? { catalogEdges } : {}),\n },\n },\n ctx.write\n );\n };\n\n textOut(`\\n● ${target.name} from {${governing.map((g) => g.name).join(', ')}}`);\n if (det.determined) {\n textOut(` dimensionally determined up to a constant: ${target.name} ∝ ${fmtMono(det.monomial!)}`);\n } else {\n full = api.buckinghamPi([target, ...governing]);\n textOut(` NOT a unique monomial — ${full.piGroupCount} free dimensionless group(s) (${full.verdict}):`);\n for (const g of full.piGroups) textOut(` ${g.formula}`);\n textOut(` (${det.reason})`);\n }\n\n if (formula) {\n const parser = await api.getFormulaParser();\n if (debug) err(` [parser: ${formulaParserLabel(await api.getFormulaParserKind())}]`);\n\n const checker = await api.getFormulaDimensionChecker();\n const declared = new Set(governing.map((g) => g.name));\n const formulaSymbols = api.rewriteCatalogHyphens(formula, declared);\n const dims = Object.fromEntries(governing.map((g) => [formulaSymbol(g.name), g.dim]));\n const r = checker.check(formulaSymbols, dims);\n formulaCheck = r;\n if (!r.ok) {\n failed = true;\n textOut(` formula dimensional check: ✗ ${hyphenSubtractionNote(r, formula)}`);\n // An undeclared symbol is a malformed invocation on either branch: the caller\n // declares it as an argument. A registered constant is declared as itself (c:c).\n if (r.undeclaredSymbol !== undefined) {\n const sym = r.undeclaredSymbol;\n const asConstant = api.CONSTANTS[sym] === undefined ? '' : ` ${sym}:${sym} for the registered constant, or`;\n // The checker's own sentence first (with the hyphen note when one remains in the\n // formula), then how to declare the symbol. The report above is not printed: an error\n // leaves stdout empty.\n throw new UsageError(`upt derive: ${hyphenSubtractionNote(r, formula)}. Declare it as an argument:${asConstant} ${sym}:<dimension>.`);\n }\n } else {\n const matches = dimsEqualTol(r.dim!, target.dim);\n if (!matches) failed = true;\n textOut(\n ` formula dimension: ${api.format(r.dim!)}`\n + (matches ? ` ✓ homogeneous, matches target` : ` ⚠ homogeneous but ≠ target ${api.format(target.dim)}`)\n );\n }\n\n let cf;\n try {\n cf = parser.parse(formulaSymbols);\n } catch (e) {\n // The parser's message carries its own `parse error:` label.\n throw new FormulaUsageError('upt derive: --formula: ' + (e as Error).message, await api.getFormulaParserKind());\n }\n // Dimensions cannot see a prefactor: compare with the canonical equation this\n // formula restates, when the registry holds one (persona finding L2). This\n // needs no unique monomial, so it runs on both branches below. A variable\n // named after a registered constant is that constant, as in `upt map --equation`.\n const isConstant = (g: { name: string; dim: Dimension }): boolean => {\n const c = api.CONSTANTS[g.name];\n return c !== undefined && dimsEqualTol(c.dim, g.dim);\n };\n const variables = governing.filter((g) => !isConstant(g));\n const compiled = cf;\n canonicalComparisons = api.compareWithCanonical(\n target.name,\n variables.map((g) => ({ name: g.name, dim: g.dim })),\n (values) =>\n compiled.evaluate(\n Object.fromEntries(\n governing.map((g) => [\n formulaSymbol(g.name),\n isConstant(g) ? api.CONSTANTS[g.name]!.value : values[g.name.replace(/_/g, '-')]!,\n ]),\n ),\n ),\n );\n const relationSources = variables.map((g) => ({ name: g.name, dim: g.dim }));\n catalogEdges = api.matchingCatalogEdges(target.name, relationSources);\n const printComparisons = (): void => {\n for (const line of api.describeKnownRelation(canonicalComparisons!, target.name, relationSources)) {\n textOut(` ${line}`);\n }\n for (const line of conventionLines(canonicalComparisons!.map((c) => c.id))) textOut(` ${line}`);\n };\n if (canonicalCheckFailed(canonicalComparisons)) failed = true;\n\n if (!det.determined) {\n textOut(' formula given, but with no unique monomial there is no single prefactor to recover.');\n printComparisons();\n if (isJson) emitEnvelope();\n else flush();\n return classifyDetermination({\n asked: true,\n agrees: canonicalComparisons.some((c) => c.kind === 'agrees'),\n checkFailed: failed,\n notUnique: true,\n unresolved: [],\n }).exit;\n }\n\n const ratios: number[] = [];\n for (let j = 0; j < 3; j++) {\n const scope: Record<string, number> = {};\n governing.forEach((g, i) => {\n scope[formulaSymbol(g.name)] = Math.pow(1.7 + i, 1 + 0.3 * j);\n });\n let cand = 1;\n for (const g of governing) cand *= Math.pow(scope[formulaSymbol(g.name)]!, det.monomial?.[g.name] || 0);\n try {\n ratios.push(cf.evaluate(scope) / cand);\n } catch (e) {\n // Every symbol is declared (checked above). The scope is this command's own generic\n // positive inputs, so a failure here is the formula itself (a literal division by zero,\n // an unknown function), not a value the caller gave: a malformed formula, exit 2.\n throw new UsageError('upt derive: the formula could not be evaluated at generic inputs: ' + (e as Error).message);\n }\n }\n const ratioMean = ratios.reduce((a, b) => a + b, 0) / ratios.length;\n const cv = Math.sqrt(ratios.reduce((a, b) => a + (b - ratioMean) ** 2, 0) / ratios.length) / Math.abs(ratioMean);\n matchesMonomial = cv < 1e-9;\n if (matchesMonomial) mean = ratioMean;\n else failed = true;\n textOut(\n matchesMonomial\n ? ` formula MATCHES the dimensional form — recovered prefactor ≈ ${api.formatQuantity(mean!)}`\n : ` formula does NOT match the dimensional monomial (different input-dependence — a decoy or different physics).`\n );\n printComparisons();\n }\n\n if (isJson) emitEnvelope();\n else flush();\n return classifyDetermination({\n asked: true,\n agrees: (canonicalComparisons ?? []).some((c) => c.kind === 'agrees'),\n checkFailed: failed,\n notUnique: !det.determined,\n unresolved: [],\n }).exit;\n}\n\nexport const command: Command = {\n name: 'derive',\n aliases: ['dim'],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Derive the dimensional form of your own equation and, with --formula, the prefactor.',\n example: 'upt derive period:time length:length gravity:acceleration --formula \"2*pi*sqrt(length/gravity)\"',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
1
|
+
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../../src/cli/commands/derive.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt derive` — derive the caller's own equation's dimensional form, and\n * (with `--formula`) verify it and recover the dimensionless prefactor.\n * Transposed verbatim from bin/upt.mjs's `derive()` (lines 313-385, the\n * post-crash-fix body — `format(r.dim)`/`format(target.dim)` on the\n * dimension-check line), plus `--json`. `fmtMono` moves here with it; the\n * dimension equality is the library's `equals` (through `api.dimensionsEqual`).\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson } from '../output.js';\nimport { UsageError } from '../errors.js';\nimport { classifyDetermination } from '../determination.js';\nimport { formulaParserLabel } from '../version.js';\nimport { FormulaUsageError } from '../euler-guard.js';\nimport { canonicalCheckFailed, conventionLines } from '../conventions.js';\nimport type { Dimension } from '../../dimensional/types.js';\n\n/** The parser's symbol for a declared name. A hyphen is subtraction, so a\n * declared `reduced-planck-constant` is the symbol `reduced_planck_constant`. */\nconst formulaSymbol = (name: string): string => name.replace(/-/g, '_');\n\n/**\n * A hyphen that remains after declared names are rewritten is subtraction.\n * The undeclared-symbol error otherwise names only the first piece. The\n * checker says the symbol was undeclared on its own field, not in its text.\n */\nfunction hyphenSubtractionNote(check: { readonly error?: string; readonly undeclaredSymbol?: string }, formula: string): string {\n const error = check.error ?? '';\n if (check.undeclaredSymbol === undefined) return error;\n if (!/[A-Za-z0-9_]-[A-Za-z0-9_]/.test(formula)) return error;\n return `${error}. A hyphen between names is subtraction. A name from a dimension argument is one symbol.`;\n}\n\nconst FLAGS: FlagSpec[] = [\n {\n name: '--formula',\n valueStyle: 'next',\n description: 'Check EXPR against the declared dimensions and recover the dimensionless prefactor.',\n },\n { name: '--debug', valueStyle: 'none', description: 'Print the formula parser name and version on stderr.' },\n JSON_FLAG,\n];\n\nconst HELP = `upt derive <target:dim> <var:dim> ... [--formula \"<expr>\"] [--debug]\n Derive YOUR OWN equation's dimensional form. <dim> is a named\n dimension (length, time, mass, velocity, ...), a constant (hbar, c,\n G, k_B, e — e here is the elementary charge's dimension), a named\n product/quotient (power/area, length*temperature),\n or explicit (L^3.M^-1.T^-2). Parentheses group a factor\n (power/(area*temperature^4)); pressure, density, volume, viscosity,\n resistance, magnetic_field and permeability are names; mass/length^3 and M/L^3 work.\n In --formula, a bare e is the elementary charge and E is energy.\n A name from a dimension argument is one symbol, hyphens included.\n A hyphen between other names is subtraction.\n Euler's number is exp(x), for example exp(1). The name euler is refused.\n With --formula, also verify it and\n recover the dimensionless prefactor. A target that is not a unique\n monomial of the variables exits 3. --debug prints the formula parser\n and its version to stderr.\n e.g. upt derive period:time length:length gravity:acceleration \\\\\n --formula \"2*pi*sqrt(length/gravity)\"`;\n\nconst fmtMono = (m: Readonly<Record<string, number>>): string =>\n Object.entries(m)\n .filter(([, e]) => Math.abs(e) > 1e-9)\n .map(([n, e]) => (e === 1 ? n : `${n}^${e}`))\n .join('·') || '(dimensionless)';\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out, err } = ctx;\n const isJson = args.flags.has('json');\n const debug = args.flags.has('debug');\n const formulaFlag = args.flags.get('formula');\n const formula = formulaFlag ? formulaFlag[formulaFlag.length - 1] : undefined;\n\n const rest = args.positionals;\n if (rest.length < 1) {\n throw new UsageError(\n 'upt derive needs a target spec, e.g. upt derive period:time length:length gravity:acceleration'\n );\n }\n\n let specs: { name: string; dim: Dimension }[];\n try {\n specs = rest.map((a) => {\n const c = a.indexOf(':');\n if (c < 1) throw new Error(`'${a}' must be name:dimension (e.g. period:time)`);\n return { name: a.slice(0, c), dim: api.parseDimensionSpec(a.slice(c + 1)) };\n });\n } catch (e) {\n throw new UsageError(' ' + (e as Error).message);\n }\n\n const target = specs[0];\n const governing = specs.slice(1);\n const det = api.dimensionallyDetermines(target, governing);\n\n // Text is buffered and written only when the command reaches a result, so an\n // error (exit 1 or 2) leaves stdout empty, as every command's does; a result,\n // exit 0 or 3, prints the whole report. In --json mode text is suppressed.\n const lines: string[] = [];\n const textOut = isJson ? () => {} : (line: string) => void lines.push(line);\n const flush = (): void => {\n for (const line of lines) out(line);\n };\n\n let full: ReturnType<typeof api.buckinghamPi> | undefined;\n let formulaCheck: ReturnType<Awaited<ReturnType<typeof api.getFormulaDimensionChecker>>['check']> | undefined;\n // The recovered prefactor, and whether the formula has the monomial's input-dependence.\n // `mean` is kept only when it does: a prefactor of a formula that does not match is not a number.\n let mean: number | undefined;\n let matchesMonomial: boolean | undefined;\n let canonicalComparisons: ReturnType<typeof api.compareWithCanonical> | undefined;\n let catalogEdges: ReturnType<typeof api.matchingCatalogEdges> | undefined;\n // The formula's checks: dimension, monomial, canonical comparison. Any failure exits 3.\n let failed = false;\n\n const emitEnvelope = (): void => {\n emitJson(\n {\n command: 'derive',\n result: {\n determination: det,\n ...(full !== undefined ? { buckingham: full } : {}),\n ...(formulaCheck !== undefined ? { formulaCheck } : {}),\n ...(matchesMonomial === undefined ? {} : { matchesMonomial, prefactor: matchesMonomial ? mean! : null }),\n ...(canonicalComparisons !== undefined ? { canonicalComparisons } : {}),\n ...(catalogEdges !== undefined ? { catalogEdges } : {}),\n },\n },\n ctx.write\n );\n };\n\n textOut(`\\n● ${target.name} from {${governing.map((g) => g.name).join(', ')}}`);\n if (det.determined) {\n textOut(` dimensionally determined up to a constant: ${target.name} ∝ ${fmtMono(det.monomial!)}`);\n } else {\n full = api.buckinghamPi([target, ...governing]);\n textOut(` NOT a unique monomial — ${full.piGroupCount} free dimensionless group(s) (${full.verdict}):`);\n for (const g of full.piGroups) textOut(` ${g.formula}`);\n textOut(` (${det.reason})`);\n }\n\n if (formula) {\n const parser = await api.getFormulaParser();\n if (debug) err(` [parser: ${formulaParserLabel(await api.getFormulaParserKind())}]`);\n\n const checker = await api.getFormulaDimensionChecker();\n const declared = new Set(governing.map((g) => g.name));\n const formulaSymbols = api.rewriteCatalogHyphens(formula, declared);\n const dims = Object.fromEntries(governing.map((g) => [formulaSymbol(g.name), g.dim]));\n const r = checker.check(formulaSymbols, dims);\n formulaCheck = r;\n if (!r.ok) {\n failed = true;\n textOut(` formula dimensional check: ✗ ${hyphenSubtractionNote(r, formula)}`);\n // An undeclared symbol is a malformed invocation on either branch: the caller\n // declares it as an argument. A registered constant is declared as itself (c:c).\n if (r.undeclaredSymbol !== undefined) {\n const sym = r.undeclaredSymbol;\n const asConstant = api.CONSTANTS[sym] === undefined ? '' : ` ${sym}:${sym} for the registered constant, or`;\n // The checker's own sentence first (with the hyphen note when one remains in the\n // formula), then how to declare the symbol. The report above is not printed: an error\n // leaves stdout empty.\n throw new UsageError(`upt derive: ${hyphenSubtractionNote(r, formula)}. Declare it as an argument:${asConstant} ${sym}:<dimension>.`);\n }\n } else {\n const matches = api.dimensionsEqual(r.dim!, target.dim);\n if (!matches) failed = true;\n textOut(\n ` formula dimension: ${api.format(r.dim!)}`\n + (matches ? ` ✓ homogeneous, matches target` : ` ⚠ homogeneous but ≠ target ${api.format(target.dim)}`)\n );\n }\n\n let cf;\n try {\n cf = parser.parse(formulaSymbols);\n } catch (e) {\n // The parser's message carries its own `parse error:` label.\n throw new FormulaUsageError('upt derive: --formula: ' + (e as Error).message, await api.getFormulaParserKind());\n }\n // Dimensions cannot see a prefactor: compare with the canonical equation this\n // formula restates, when the registry holds one (persona finding L2). This\n // needs no unique monomial, so it runs on both branches below. A variable\n // named after a registered constant is that constant, as in `upt map --equation`.\n const isConstant = (g: { name: string; dim: Dimension }): boolean => {\n const c = api.CONSTANTS[g.name];\n return c !== undefined && api.dimensionsEqual(c.dim, g.dim);\n };\n const variables = governing.filter((g) => !isConstant(g));\n const compiled = cf;\n canonicalComparisons = api.compareWithCanonical(\n target.name,\n variables.map((g) => ({ name: g.name, dim: g.dim })),\n (values) =>\n compiled.evaluate(\n Object.fromEntries(\n governing.map((g) => [\n formulaSymbol(g.name),\n isConstant(g) ? api.CONSTANTS[g.name]!.value : values[api.foldName(g.name)]!,\n ]),\n ),\n ),\n );\n const relationSources = variables.map((g) => ({ name: g.name, dim: g.dim }));\n catalogEdges = api.matchingCatalogEdges(target.name, relationSources);\n const printComparisons = (): void => {\n // describeKnownRelation's first lines are one per comparison, in order (then the catalog\n // edges), so line i belongs to comparison i when i is below the comparison count.\n api.describeKnownRelation(canonicalComparisons!, target.name, relationSources).forEach((line, i) => {\n textOut(` ${line}`);\n // A form mismatch names which exponent differs (the log-design fit), beneath its line.\n const c = canonicalComparisons![i];\n if (c?.kind === 'form' && c.exponentDifference !== undefined) {\n textOut(` ${api.describeExponentDifference(c.exponentDifference)}`);\n }\n });\n for (const line of conventionLines(canonicalComparisons!.map((c) => c.id))) textOut(` ${line}`);\n };\n if (canonicalCheckFailed(canonicalComparisons)) failed = true;\n\n if (!det.determined) {\n textOut(' formula given, but with no unique monomial there is no single prefactor to recover.');\n printComparisons();\n if (isJson) emitEnvelope();\n else flush();\n return classifyDetermination({\n asked: true,\n agrees: canonicalComparisons.some((c) => c.kind === 'agrees'),\n checkFailed: failed,\n notUnique: true,\n unresolved: [],\n }).exit;\n }\n\n // Variable i takes (1.7 + i)^p at p = 1, 1.3, 1.6, and the ratio to the monomial is one\n // constant when its coefficient of variation is under 1e-9: this command's own scheme,\n // through the one fixed-point owner (canonical/fixed-points.ts).\n const recovered = api.recoverMonomialPrefactor(\n (point) => {\n const scope = Object.fromEntries(governing.map((g) => [formulaSymbol(g.name), point[g.name]!]));\n try {\n return cf.evaluate(scope);\n } catch (e) {\n // Every symbol is declared (checked above). The scope is this command's own generic\n // positive inputs, so a failure here is the formula itself (a literal division by zero,\n // an unknown function), not a value the caller gave: a malformed formula, exit 2.\n throw new UsageError('upt derive: the formula could not be evaluated at generic inputs: ' + (e as Error).message);\n }\n },\n det.monomial ?? {},\n governing.map((g) => g.name),\n { base: 1.7, step: 1, exponents: [0, 1, 2].map((j) => 1 + 0.3 * j), tolerance: 1e-9, statistic: 'cv' },\n );\n matchesMonomial = recovered.matches;\n if (matchesMonomial) mean = recovered.prefactor;\n else failed = true;\n textOut(\n matchesMonomial\n ? ` formula MATCHES the dimensional form — recovered prefactor ≈ ${api.formatQuantity(mean!)}`\n : ` formula does NOT match the dimensional monomial (different input-dependence — a decoy or different physics).`\n );\n printComparisons();\n }\n\n if (isJson) emitEnvelope();\n else flush();\n return classifyDetermination({\n asked: true,\n agrees: (canonicalComparisons ?? []).some((c) => c.kind === 'agrees'),\n checkFailed: failed,\n notUnique: !det.determined,\n unresolved: [],\n }).exit;\n}\n\nexport const command: Command = {\n name: 'derive',\n aliases: ['dim'],\n positionals: { max: Infinity },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Derive the dimensional form of your own equation and, with --formula, the prefactor.',\n example: 'upt derive period:time length:length gravity:acceleration --formula \"2*pi*sqrt(length/gravity)\"',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAmc/E,eAAO,MAAM,OAAO,EAAE,OASrB,CAAC"}
|
|
@@ -350,11 +350,15 @@ async function run(ctx) {
|
|
|
350
350
|
out(' no candidate is `promising` from the anchor above.');
|
|
351
351
|
}
|
|
352
352
|
if (clash.length) {
|
|
353
|
-
out(`\n MAGNITUDE-CLASH (representative values differ by > N orders — a falsifier
|
|
353
|
+
out(`\n MAGNITUDE-CLASH (representative values differ by > N orders — a falsifier; p is the falsifier's strength ` +
|
|
354
|
+
`at the values' stated σ, 2Φ(−orders/√(σa²+σb²)), not a credibility score):`);
|
|
354
355
|
for (const r of clash) {
|
|
355
356
|
const basis = r.magnitudeUsedAnchor ? ' (anchor-derived)' : '';
|
|
357
|
+
// A p that underflows a double is not zero: it is below the smallest normal double.
|
|
358
|
+
const p = r.magnitudeP;
|
|
359
|
+
const strength = p === undefined || p === null ? '' : p === 0 ? ', p < 1e-300' : `, p = ${api.formatQuantity(p, 3)}`;
|
|
356
360
|
// A magnitude estimate is a statistic: three digits, marked approximate.
|
|
357
|
-
out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ~${api.formatQuantity(r.ordersApart, 3)} orders apart${basis}`);
|
|
361
|
+
out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ~${api.formatQuantity(r.ordersApart, 3)} orders apart${strength}${basis}`);
|
|
358
362
|
}
|
|
359
363
|
}
|
|
360
364
|
const subsumed = inert.filter((r) => r.subsuming);
|