universal-physics-tensor 10.0.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -36
- package/bin/upt.mjs +13 -1
- package/data/applied-cases.json +1892 -0
- package/data/applied-cases.schema.json +194 -0
- package/data/atlas/atlas.json +25 -25
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +6 -6
- package/data/atlas/oscillators.json +7 -7
- package/data/atlas/waves.json +14 -14
- package/data/atlas/witness-results.json +11 -11
- package/data/bridge-catalog.json +389 -230
- package/data/bridge-catalog.schema.json +45 -7
- package/data/units.json +6 -25
- package/dist/atlas/applicability.d.ts.map +1 -1
- package/dist/atlas/applicability.js +21 -15
- package/dist/atlas/applicability.js.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
- package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
- package/dist/atlas/benchmark/loader.js +2 -2
- package/dist/atlas/benchmark/loader.js.map +1 -1
- package/dist/atlas/benchmark/stats.d.ts +2 -2
- package/dist/atlas/benchmark/stats.d.ts.map +1 -1
- package/dist/atlas/benchmark/stats.js +9 -15
- package/dist/atlas/benchmark/stats.js.map +1 -1
- package/dist/atlas/catalog-formal-ref.d.ts +26 -3
- package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
- package/dist/atlas/catalog-formal-ref.js +52 -5
- package/dist/atlas/catalog-formal-ref.js.map +1 -1
- package/dist/atlas/chain-pipeline.d.ts.map +1 -1
- package/dist/atlas/chain-pipeline.js +7 -8
- package/dist/atlas/chain-pipeline.js.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.js +8 -12
- package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
- package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges.js +27 -39
- package/dist/atlas/diffusion/bridges.js.map +1 -1
- package/dist/atlas/diffusion/dimensions.d.ts +6 -14
- package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
- package/dist/atlas/diffusion/dimensions.js +8 -16
- package/dist/atlas/diffusion/dimensions.js.map +1 -1
- package/dist/atlas/diffusion/models.d.ts +3 -3
- package/dist/atlas/diffusion/models.d.ts.map +1 -1
- package/dist/atlas/diffusion/models.js +5 -10
- package/dist/atlas/diffusion/models.js.map +1 -1
- package/dist/atlas/diffusion/numerics.d.ts +16 -4
- package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
- package/dist/atlas/diffusion/numerics.js +38 -24
- package/dist/atlas/diffusion/numerics.js.map +1 -1
- package/dist/atlas/link-prediction.d.ts +106 -3
- package/dist/atlas/link-prediction.d.ts.map +1 -1
- package/dist/atlas/link-prediction.js +212 -66
- package/dist/atlas/link-prediction.js.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.js +7 -11
- package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.js +6 -7
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.js +23 -34
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
- package/dist/atlas/oscillators/dimensions.d.ts +9 -21
- package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
- package/dist/atlas/oscillators/dimensions.js +9 -21
- package/dist/atlas/oscillators/dimensions.js.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
- package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.js +17 -15
- package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
- package/dist/atlas/oscillators/models.d.ts.map +1 -1
- package/dist/atlas/oscillators/models.js +2 -6
- package/dist/atlas/oscillators/models.js.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
- package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.js +60 -40
- package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
- package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
- package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/phase-translation.js +3 -4
- package/dist/atlas/oscillators/phase-translation.js.map +1 -1
- package/dist/atlas/oscillators/position-translation.d.ts +68 -7
- package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/position-translation.js +123 -12
- package/dist/atlas/oscillators/position-translation.js.map +1 -1
- package/dist/atlas/oscillators/rejections.d.ts +0 -2
- package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
- package/dist/atlas/oscillators/rejections.js +0 -7
- package/dist/atlas/oscillators/rejections.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +35 -25
- package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
- package/dist/atlas/physjs-entries.generated.js +37 -25
- package/dist/atlas/physjs-entries.generated.js.map +1 -1
- package/dist/atlas/physjs-ref.d.ts +34 -31
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +55 -53
- package/dist/atlas/physjs-ref.js.map +1 -1
- package/dist/atlas/physjs-reviewed.d.ts +1 -1
- package/dist/atlas/physjs-reviewed.js +15 -15
- package/dist/atlas/physjs-reviewed.js.map +1 -1
- package/dist/atlas/poster/statements.d.ts +0 -19
- package/dist/atlas/poster/statements.d.ts.map +1 -1
- package/dist/atlas/poster/statements.js +1 -1
- package/dist/atlas/poster/statements.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +1 -1
- package/dist/atlas/proof-target.js +1 -1
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/atlas/regime.d.ts +1 -1
- package/dist/atlas/regime.d.ts.map +1 -1
- package/dist/atlas/regime.js +1 -1
- package/dist/atlas/regime.js.map +1 -1
- package/dist/atlas/text-overlap.d.ts +23 -0
- package/dist/atlas/text-overlap.d.ts.map +1 -0
- package/dist/atlas/text-overlap.js +41 -0
- package/dist/atlas/text-overlap.js.map +1 -0
- package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/waves/bridges-closure.js +2 -6
- package/dist/atlas/waves/bridges-closure.js.map +1 -1
- package/dist/atlas/waves/bridges.d.ts.map +1 -1
- package/dist/atlas/waves/bridges.js +32 -48
- package/dist/atlas/waves/bridges.js.map +1 -1
- package/dist/atlas/waves/models.d.ts +5 -6
- package/dist/atlas/waves/models.d.ts.map +1 -1
- package/dist/atlas/waves/models.js +7 -13
- package/dist/atlas/waves/models.js.map +1 -1
- package/dist/atlas/waves/numerics.d.ts.map +1 -1
- package/dist/atlas/waves/numerics.js +10 -3
- package/dist/atlas/waves/numerics.js.map +1 -1
- package/dist/atlas/witness-numeric.d.ts +30 -0
- package/dist/atlas/witness-numeric.d.ts.map +1 -1
- package/dist/atlas/witness-numeric.js +53 -0
- package/dist/atlas/witness-numeric.js.map +1 -1
- package/dist/atlas/witness-specs.d.ts.map +1 -1
- package/dist/atlas/witness-specs.js +19 -0
- package/dist/atlas/witness-specs.js.map +1 -1
- package/dist/atlas/witness-symbolic.d.ts +75 -3
- package/dist/atlas/witness-symbolic.d.ts.map +1 -1
- package/dist/atlas/witness-symbolic.js +116 -10
- package/dist/atlas/witness-symbolic.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +13 -8
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +26 -2
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/catalog-types.js +11 -1
- package/dist/bridges/catalog-types.js.map +1 -1
- package/dist/bridges/evaluation-errors.d.ts +31 -1
- package/dist/bridges/evaluation-errors.d.ts.map +1 -1
- package/dist/bridges/evaluation-errors.js +20 -2
- package/dist/bridges/evaluation-errors.js.map +1 -1
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +7 -5
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +27 -12
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +11 -0
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +14 -5
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +35 -3
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +117 -23
- package/dist/bridges/holds.js.map +1 -1
- package/dist/bridges/notices.d.ts.map +1 -1
- package/dist/bridges/notices.js +5 -5
- package/dist/bridges/notices.js.map +1 -1
- package/dist/bridges/relation-eval.d.ts +4 -4
- package/dist/bridges/relation-eval.d.ts.map +1 -1
- package/dist/bridges/relation-eval.js +15 -16
- package/dist/bridges/relation-eval.js.map +1 -1
- package/dist/bridges/sensitivity.d.ts.map +1 -1
- package/dist/bridges/sensitivity.js +3 -3
- package/dist/bridges/sensitivity.js.map +1 -1
- package/dist/bridges/validity.d.ts +33 -0
- package/dist/bridges/validity.d.ts.map +1 -0
- package/dist/bridges/validity.js +67 -0
- package/dist/bridges/validity.js.map +1 -0
- package/dist/canonical/entries/atomic.js +1 -3
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
- package/dist/canonical/entries/condensed-matter.js +4 -5
- package/dist/canonical/entries/condensed-matter.js.map +1 -1
- package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
- package/dist/canonical/entries/dimensional-classics.js +3 -4
- package/dist/canonical/entries/dimensional-classics.js.map +1 -1
- package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
- package/dist/canonical/entries/electromagnetism.js +4 -10
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +3 -7
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/mechanics.js +4 -6
- package/dist/canonical/entries/mechanics.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +9 -17
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/entries/relativity.d.ts.map +1 -1
- package/dist/canonical/entries/relativity.js +6 -6
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/fixed-points.d.ts +94 -0
- package/dist/canonical/fixed-points.d.ts.map +1 -0
- package/dist/canonical/fixed-points.js +81 -0
- package/dist/canonical/fixed-points.js.map +1 -0
- package/dist/canonical/linkage.d.ts.map +1 -1
- package/dist/canonical/linkage.js +25 -44
- package/dist/canonical/linkage.js.map +1 -1
- package/dist/canonical/normal-form.d.ts.map +1 -1
- package/dist/canonical/normal-form.js +5 -11
- package/dist/canonical/normal-form.js.map +1 -1
- package/dist/canonical/structural.d.ts +21 -21
- package/dist/canonical/structural.d.ts.map +1 -1
- package/dist/canonical/structural.js +40 -19
- package/dist/canonical/structural.js.map +1 -1
- package/dist/cases/catalog-checks.d.ts +10 -0
- package/dist/cases/catalog-checks.d.ts.map +1 -0
- package/dist/cases/catalog-checks.js +241 -0
- package/dist/cases/catalog-checks.js.map +1 -0
- package/dist/cases/catalog.d.ts +83 -0
- package/dist/cases/catalog.d.ts.map +1 -0
- package/dist/cases/catalog.js +118 -0
- package/dist/cases/catalog.js.map +1 -0
- package/dist/cases/engine.d.ts +13 -0
- package/dist/cases/engine.d.ts.map +1 -0
- package/dist/cases/engine.js +179 -0
- package/dist/cases/engine.js.map +1 -0
- package/dist/cases/index.d.ts.map +1 -1
- package/dist/cases/index.js +5 -7
- package/dist/cases/index.js.map +1 -1
- package/dist/cases/methods.d.ts +215 -0
- package/dist/cases/methods.d.ts.map +1 -0
- package/dist/cases/methods.js +743 -0
- package/dist/cases/methods.js.map +1 -0
- package/dist/cases/quadrature.d.ts +7 -9
- package/dist/cases/quadrature.d.ts.map +1 -1
- package/dist/cases/quadrature.js +28 -32
- package/dist/cases/quadrature.js.map +1 -1
- package/dist/cases/types.d.ts +12 -0
- package/dist/cases/types.d.ts.map +1 -1
- package/dist/cases/types.js.map +1 -1
- package/dist/cli/args.d.ts +25 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +30 -8
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bindings.d.ts.map +1 -1
- package/dist/cli/bindings.js +5 -4
- package/dist/cli/bindings.js.map +1 -1
- package/dist/cli/command.d.ts +11 -1
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/_atlas-map.d.ts +0 -9
- package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-map.js +8 -18
- package/dist/cli/commands/_atlas-map.js.map +1 -1
- package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-route.js +6 -2
- package/dist/cli/commands/_atlas-route.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts +1 -0
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +9 -9
- package/dist/cli/commands/_discovery-opts.js.map +1 -1
- package/dist/cli/commands/atlas.d.ts.map +1 -1
- package/dist/cli/commands/atlas.js +8 -5
- package/dist/cli/commands/atlas.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +8 -1
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/axes.d.ts.map +1 -1
- package/dist/cli/commands/axes.js +20 -1
- package/dist/cli/commands/axes.js.map +1 -1
- package/dist/cli/commands/confront.d.ts.map +1 -1
- package/dist/cli/commands/confront.js +8 -14
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +22 -22
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +122 -73
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +1 -0
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +67 -39
- package/dist/cli/commands/evaluate.js.map +1 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +24 -3
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/ground.d.ts.map +1 -1
- package/dist/cli/commands/ground.js +7 -1
- package/dist/cli/commands/ground.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +84 -11
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli/commands/metric.d.ts.map +1 -1
- package/dist/cli/commands/metric.js +12 -9
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/path.d.ts +10 -0
- package/dist/cli/commands/path.d.ts.map +1 -1
- package/dist/cli/commands/path.js +25 -3
- package/dist/cli/commands/path.js.map +1 -1
- package/dist/cli/commands/probe.d.ts.map +1 -1
- package/dist/cli/commands/probe.js +59 -16
- package/dist/cli/commands/probe.js.map +1 -1
- package/dist/cli/commands/regime.d.ts.map +1 -1
- package/dist/cli/commands/regime.js +1 -0
- package/dist/cli/commands/regime.js.map +1 -1
- package/dist/cli/commands/retrieve.d.ts.map +1 -1
- package/dist/cli/commands/retrieve.js +1 -0
- package/dist/cli/commands/retrieve.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +1 -0
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/symbolic.d.ts.map +1 -1
- package/dist/cli/commands/symbolic.js +19 -28
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.d.ts.map +1 -1
- package/dist/cli/commands/testplan.js +4 -2
- package/dist/cli/commands/testplan.js.map +1 -1
- package/dist/cli/determination.d.ts +1 -0
- package/dist/cli/determination.d.ts.map +1 -1
- package/dist/cli/determination.js.map +1 -1
- package/dist/cli/expr-print.d.ts +0 -2
- package/dist/cli/expr-print.d.ts.map +1 -1
- package/dist/cli/expr-print.js +7 -31
- package/dist/cli/expr-print.js.map +1 -1
- package/dist/cli/flag-help.d.ts +1 -0
- package/dist/cli/flag-help.d.ts.map +1 -1
- package/dist/cli/flag-help.js +1 -0
- package/dist/cli/flag-help.js.map +1 -1
- package/dist/cli/graphs.d.ts +2 -0
- package/dist/cli/graphs.d.ts.map +1 -1
- package/dist/cli/graphs.js +1 -0
- package/dist/cli/graphs.js.map +1 -1
- package/dist/cli/main.d.ts +8 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +19 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/numeric-flag.d.ts +12 -0
- package/dist/cli/numeric-flag.d.ts.map +1 -0
- package/dist/cli/numeric-flag.js +44 -0
- package/dist/cli/numeric-flag.js.map +1 -0
- package/dist/cli/output.d.ts +28 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +23 -0
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/record-reach.js +2 -2
- package/dist/cli/record-reach.js.map +1 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +6 -5
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli/record.d.ts +1 -5
- package/dist/cli/record.d.ts.map +1 -1
- package/dist/cli/record.js +9 -8
- package/dist/cli/record.js.map +1 -1
- package/dist/cli/search-index.d.ts.map +1 -1
- package/dist/cli/search-index.js +7 -6
- package/dist/cli/search-index.js.map +1 -1
- package/dist/cli/statuses.d.ts +0 -2
- package/dist/cli/statuses.d.ts.map +1 -1
- package/dist/cli/statuses.js +12 -9
- package/dist/cli/statuses.js.map +1 -1
- package/dist/cli/stored-results.d.ts +7 -0
- package/dist/cli/stored-results.d.ts.map +1 -0
- package/dist/cli/stored-results.js +23 -0
- package/dist/cli/stored-results.js.map +1 -0
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +8 -5
- package/dist/cli/version.js.map +1 -1
- package/dist/cli-api.d.ts +36 -5
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +30 -4
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/algebraic-equivalence.d.ts +43 -0
- package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
- package/dist/composition/algebraic-equivalence.js +115 -0
- package/dist/composition/algebraic-equivalence.js.map +1 -0
- package/dist/composition/axes.d.ts +0 -6
- package/dist/composition/axes.d.ts.map +1 -1
- package/dist/composition/axes.js +6 -6
- package/dist/composition/axes.js.map +1 -1
- package/dist/composition/axis-audit.d.ts +47 -20
- package/dist/composition/axis-audit.d.ts.map +1 -1
- package/dist/composition/axis-audit.js +82 -9
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +17 -0
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +102 -55
- package/dist/composition/bridge-analysis.js.map +1 -1
- package/dist/composition/canonical-compare.d.ts +40 -0
- package/dist/composition/canonical-compare.d.ts.map +1 -1
- package/dist/composition/canonical-compare.js +122 -24
- package/dist/composition/canonical-compare.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +3 -3
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +11 -38
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-json.js +2 -2
- package/dist/composition/canonical-json.js.map +1 -1
- package/dist/composition/catalog-graph.d.ts.map +1 -1
- package/dist/composition/catalog-graph.js +2 -5
- package/dist/composition/catalog-graph.js.map +1 -1
- package/dist/composition/chain-candidate.d.ts +8 -0
- package/dist/composition/chain-candidate.d.ts.map +1 -1
- package/dist/composition/chain-candidate.js +9 -2
- package/dist/composition/chain-candidate.js.map +1 -1
- package/dist/composition/chain-match.d.ts +6 -3
- package/dist/composition/chain-match.d.ts.map +1 -1
- package/dist/composition/chain-match.js +4 -1
- package/dist/composition/chain-match.js.map +1 -1
- package/dist/composition/chain-result.d.ts.map +1 -1
- package/dist/composition/chain-result.js +2 -14
- package/dist/composition/chain-result.js.map +1 -1
- package/dist/composition/compose-symbolic.d.ts.map +1 -1
- package/dist/composition/compose-symbolic.js +3 -2
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +13 -5
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/composition-recovery.d.ts.map +1 -1
- package/dist/composition/composition-recovery.js +4 -7
- package/dist/composition/composition-recovery.js.map +1 -1
- package/dist/composition/consequence.d.ts +15 -5
- package/dist/composition/consequence.d.ts.map +1 -1
- package/dist/composition/consequence.js +6 -4
- package/dist/composition/consequence.js.map +1 -1
- package/dist/composition/discovery.d.ts +129 -9
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +171 -67
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +21 -2
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +23 -1
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/enumerate.d.ts.map +1 -1
- package/dist/composition/enumerate.js +18 -3
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +35 -11
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +60 -39
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +3 -12
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +7 -20
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts +1 -1
- package/dist/composition/expr-eval.d.ts.map +1 -1
- package/dist/composition/expr-eval.js +6 -15
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/expr-simplify.d.ts +26 -14
- package/dist/composition/expr-simplify.d.ts.map +1 -1
- package/dist/composition/expr-simplify.js +64 -72
- package/dist/composition/expr-simplify.js.map +1 -1
- package/dist/composition/formula-shape.d.ts +23 -4
- package/dist/composition/formula-shape.d.ts.map +1 -1
- package/dist/composition/formula-shape.js +57 -17
- package/dist/composition/formula-shape.js.map +1 -1
- package/dist/composition/graph-structure.d.ts +98 -0
- package/dist/composition/graph-structure.d.ts.map +1 -0
- package/dist/composition/graph-structure.js +167 -0
- package/dist/composition/graph-structure.js.map +1 -0
- package/dist/composition/graph-viz-svg.d.ts.map +1 -1
- package/dist/composition/graph-viz-svg.js +1 -1
- package/dist/composition/graph-viz-svg.js.map +1 -1
- package/dist/composition/graph-viz.d.ts.map +1 -1
- package/dist/composition/graph-viz.js +8 -37
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/grounding.d.ts.map +1 -1
- package/dist/composition/grounding.js +19 -7
- package/dist/composition/grounding.js.map +1 -1
- package/dist/composition/identifiability.d.ts +91 -4
- package/dist/composition/identifiability.d.ts.map +1 -1
- package/dist/composition/identifiability.js +363 -6
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +8 -4
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +3 -2
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/mathts-quiet.d.ts +7 -8
- package/dist/composition/mathts-quiet.d.ts.map +1 -1
- package/dist/composition/mathts-quiet.js +7 -16
- package/dist/composition/mathts-quiet.js.map +1 -1
- package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
- package/dist/composition/mathts-scalar-symbols.js +2 -1
- package/dist/composition/mathts-scalar-symbols.js.map +1 -1
- package/dist/composition/own-equation-magnitude.d.ts +95 -0
- package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
- package/dist/composition/own-equation-magnitude.js +270 -0
- package/dist/composition/own-equation-magnitude.js.map +1 -0
- package/dist/composition/probe/backend-protocol.d.ts +3 -0
- package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
- package/dist/composition/probe/backend-protocol.js.map +1 -1
- package/dist/composition/probe/candidate-store.d.ts +1 -0
- package/dist/composition/probe/candidate-store.d.ts.map +1 -1
- package/dist/composition/probe/candidate-store.js +1 -0
- package/dist/composition/probe/candidate-store.js.map +1 -1
- package/dist/composition/probe/corpus.d.ts +8 -4
- package/dist/composition/probe/corpus.d.ts.map +1 -1
- package/dist/composition/probe/corpus.js +23 -12
- package/dist/composition/probe/corpus.js.map +1 -1
- package/dist/composition/probe/dataset.d.ts +18 -0
- package/dist/composition/probe/dataset.d.ts.map +1 -1
- package/dist/composition/probe/dataset.js +95 -50
- package/dist/composition/probe/dataset.js.map +1 -1
- package/dist/composition/probe/experiment-design.d.ts +7 -1
- package/dist/composition/probe/experiment-design.d.ts.map +1 -1
- package/dist/composition/probe/experiment-design.js +44 -24
- package/dist/composition/probe/experiment-design.js.map +1 -1
- package/dist/composition/probe/falsify.d.ts +2 -0
- package/dist/composition/probe/falsify.d.ts.map +1 -1
- package/dist/composition/probe/falsify.js +2 -0
- package/dist/composition/probe/falsify.js.map +1 -1
- package/dist/composition/probe/fit.d.ts +7 -0
- package/dist/composition/probe/fit.d.ts.map +1 -1
- package/dist/composition/probe/fit.js +46 -22
- package/dist/composition/probe/fit.js.map +1 -1
- package/dist/composition/probe/frontier.d.ts.map +1 -1
- package/dist/composition/probe/frontier.js +33 -15
- package/dist/composition/probe/frontier.js.map +1 -1
- package/dist/composition/probe/generator.d.ts +30 -1
- package/dist/composition/probe/generator.d.ts.map +1 -1
- package/dist/composition/probe/generator.js +58 -36
- package/dist/composition/probe/generator.js.map +1 -1
- package/dist/composition/probe/index.d.ts +14 -0
- package/dist/composition/probe/index.d.ts.map +1 -1
- package/dist/composition/probe/index.js +6 -0
- package/dist/composition/probe/index.js.map +1 -1
- package/dist/composition/probe/limits.d.ts +25 -1
- package/dist/composition/probe/limits.d.ts.map +1 -1
- package/dist/composition/probe/limits.js +53 -11
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/pipeline.d.ts +5 -0
- package/dist/composition/probe/pipeline.d.ts.map +1 -1
- package/dist/composition/probe/pipeline.js +73 -24
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/power-law.d.ts +121 -0
- package/dist/composition/probe/power-law.d.ts.map +1 -0
- package/dist/composition/probe/power-law.js +251 -0
- package/dist/composition/probe/power-law.js.map +1 -0
- package/dist/composition/probe/problem.d.ts +8 -4
- package/dist/composition/probe/problem.d.ts.map +1 -1
- package/dist/composition/probe/problem.js +177 -49
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.js +1 -1
- package/dist/composition/probe/report.js.map +1 -1
- package/dist/composition/probe/residual.d.ts +7 -1
- package/dist/composition/probe/residual.d.ts.map +1 -1
- package/dist/composition/probe/residual.js +10 -7
- package/dist/composition/probe/residual.js.map +1 -1
- package/dist/composition/probe/run-manifest.d.ts +1 -0
- package/dist/composition/probe/run-manifest.d.ts.map +1 -1
- package/dist/composition/probe/run-manifest.js.map +1 -1
- package/dist/composition/probe/scalar-search.d.ts +50 -0
- package/dist/composition/probe/scalar-search.d.ts.map +1 -0
- package/dist/composition/probe/scalar-search.js +169 -0
- package/dist/composition/probe/scalar-search.js.map +1 -0
- package/dist/composition/probe/scoring.d.ts +1 -0
- package/dist/composition/probe/scoring.d.ts.map +1 -1
- package/dist/composition/probe/scoring.js.map +1 -1
- package/dist/composition/probe/structure.d.ts +82 -17
- package/dist/composition/probe/structure.d.ts.map +1 -1
- package/dist/composition/probe/structure.js +129 -55
- package/dist/composition/probe/structure.js.map +1 -1
- package/dist/composition/probe/study.d.ts +31 -9
- package/dist/composition/probe/study.d.ts.map +1 -1
- package/dist/composition/probe/study.js +235 -184
- package/dist/composition/probe/study.js.map +1 -1
- package/dist/composition/probe/t-tail.d.ts +16 -0
- package/dist/composition/probe/t-tail.d.ts.map +1 -0
- package/dist/composition/probe/t-tail.js +29 -0
- package/dist/composition/probe/t-tail.js.map +1 -0
- package/dist/composition/probe/types.d.ts +3 -0
- package/dist/composition/probe/types.d.ts.map +1 -1
- package/dist/composition/probe/types.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts +52 -12
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +107 -60
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/quantity-clusters.d.ts +48 -0
- package/dist/composition/quantity-clusters.d.ts.map +1 -0
- package/dist/composition/quantity-clusters.js +98 -0
- package/dist/composition/quantity-clusters.js.map +1 -0
- package/dist/composition/rational-exponent.d.ts +40 -0
- package/dist/composition/rational-exponent.d.ts.map +1 -0
- package/dist/composition/rational-exponent.js +65 -0
- package/dist/composition/rational-exponent.js.map +1 -0
- package/dist/composition/representative-values.d.ts +22 -0
- package/dist/composition/representative-values.d.ts.map +1 -1
- package/dist/composition/representative-values.js +29 -0
- package/dist/composition/representative-values.js.map +1 -1
- package/dist/composition/retrodiction.d.ts +15 -0
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +12 -4
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/user-equation.d.ts +1 -0
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/composition/user-equation.js +3 -2
- package/dist/composition/user-equation.js.map +1 -1
- package/dist/core/assignment.d.ts +19 -0
- package/dist/core/assignment.d.ts.map +1 -0
- package/dist/core/assignment.js +19 -0
- package/dist/core/assignment.js.map +1 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.d.ts.map +1 -0
- package/dist/core/compare.js +46 -0
- package/dist/core/compare.js.map +1 -0
- package/dist/core/constants.d.ts +42 -41
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +71 -51
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +7 -0
- package/dist/core/data-file.d.ts.map +1 -1
- package/dist/core/data-file.js +17 -0
- package/dist/core/data-file.js.map +1 -1
- package/dist/core/format.d.ts +36 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +39 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/hash.d.ts +14 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +17 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/json-schema.d.ts +2 -0
- package/dist/core/json-schema.d.ts.map +1 -1
- package/dist/core/json-schema.js +14 -13
- package/dist/core/json-schema.js.map +1 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/labeled-tensor.js +0 -8
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/mathts-read.d.ts +25 -0
- package/dist/core/mathts-read.d.ts.map +1 -0
- package/dist/core/mathts-read.js +51 -0
- package/dist/core/mathts-read.js.map +1 -0
- package/dist/core/tensor.d.ts.map +1 -1
- package/dist/core/tensor.js +24 -0
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts +5 -5
- package/dist/diff/bridge-ast-gradient.d.ts +27 -23
- package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-ast-gradient.js +75 -173
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/diff/bridge-gradient.d.ts +19 -6
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +19 -11
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +3 -0
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/algebra.d.ts +18 -0
- package/dist/dimensional/algebra.d.ts.map +1 -1
- package/dist/dimensional/algebra.js +41 -1
- package/dist/dimensional/algebra.js.map +1 -1
- package/dist/dimensional/ast-builders.d.ts +7 -0
- package/dist/dimensional/ast-builders.d.ts.map +1 -1
- package/dist/dimensional/ast-builders.js +11 -0
- package/dist/dimensional/ast-builders.js.map +1 -1
- package/dist/dimensional/ast-leaves.d.ts +81 -0
- package/dist/dimensional/ast-leaves.d.ts.map +1 -0
- package/dist/dimensional/ast-leaves.js +146 -0
- package/dist/dimensional/ast-leaves.js.map +1 -0
- package/dist/dimensional/ast-types.d.ts +15 -0
- package/dist/dimensional/ast-types.d.ts.map +1 -1
- package/dist/dimensional/ast-types.js.map +1 -1
- package/dist/dimensional/buckingham.d.ts.map +1 -1
- package/dist/dimensional/buckingham.js +15 -27
- package/dist/dimensional/buckingham.js.map +1 -1
- package/dist/dimensional/constant-rows.js +9 -9
- package/dist/dimensional/constant-rows.js.map +1 -1
- package/dist/dimensional/curvature-composite.d.ts +1 -1
- package/dist/dimensional/curvature-composite.js.map +1 -1
- package/dist/dimensional/dimension-inference.d.ts.map +1 -1
- package/dist/dimensional/dimension-inference.js +1 -2
- package/dist/dimensional/dimension-inference.js.map +1 -1
- package/dist/dimensional/errors.d.ts +1 -1
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/errors.js +1 -15
- package/dist/dimensional/errors.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +24 -11
- package/dist/dimensional/exact-scale.d.ts.map +1 -1
- package/dist/dimensional/exact-scale.js +122 -130
- package/dist/dimensional/exact-scale.js.map +1 -1
- package/dist/dimensional/gauge-field.d.ts.map +1 -1
- package/dist/dimensional/gauge-field.js +2 -2
- package/dist/dimensional/gauge-field.js.map +1 -1
- package/dist/dimensional/hyphen-names.d.ts +12 -2
- package/dist/dimensional/hyphen-names.d.ts.map +1 -1
- package/dist/dimensional/hyphen-names.js +44 -19
- package/dist/dimensional/hyphen-names.js.map +1 -1
- package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
- package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
- package/dist/dimensional/mathts-unit-delegation.js +187 -0
- package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
- package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
- package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
- package/dist/dimensional/mathts-unit-wrapper.js +190 -0
- package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
- package/dist/dimensional/metric.d.ts.map +1 -1
- package/dist/dimensional/metric.js +0 -1
- package/dist/dimensional/metric.js.map +1 -1
- package/dist/dimensional/scalar-lowering.d.ts +21 -0
- package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
- package/dist/dimensional/scalar-lowering.js +45 -0
- package/dist/dimensional/scalar-lowering.js.map +1 -0
- package/dist/dimensional/symbolic-constants.d.ts +9 -0
- package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
- package/dist/dimensional/symbolic-constants.js +13 -1
- package/dist/dimensional/symbolic-constants.js.map +1 -1
- package/dist/dimensional/types.d.ts +36 -0
- package/dist/dimensional/types.d.ts.map +1 -1
- package/dist/dimensional/types.js +45 -7
- package/dist/dimensional/types.js.map +1 -1
- package/dist/dimensional/unit-data.d.ts +5 -1
- package/dist/dimensional/unit-data.d.ts.map +1 -1
- package/dist/dimensional/unit-data.js +30 -6
- package/dist/dimensional/unit-data.js.map +1 -1
- package/dist/dimensional/units.d.ts +2 -0
- package/dist/dimensional/units.d.ts.map +1 -1
- package/dist/dimensional/units.js +59 -3
- package/dist/dimensional/units.js.map +1 -1
- package/dist/dimensional/validator.d.ts +2 -0
- package/dist/dimensional/validator.d.ts.map +1 -1
- package/dist/dimensional/validator.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/numerical/christoffel-flat.d.ts.map +1 -1
- package/dist/numerical/christoffel-flat.js +3 -2
- package/dist/numerical/christoffel-flat.js.map +1 -1
- package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
- package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
- package/dist/numerical/connection-lowering-helpers.js +11 -15
- package/dist/numerical/connection-lowering-helpers.js.map +1 -1
- package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
- package/dist/numerical/covariant-eikonal.js +34 -11
- package/dist/numerical/covariant-eikonal.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +3 -2
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/errors.d.ts.map +1 -1
- package/dist/numerical/errors.js +0 -3
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/finite-difference.d.ts +22 -0
- package/dist/numerical/finite-difference.d.ts.map +1 -0
- package/dist/numerical/finite-difference.js +27 -0
- package/dist/numerical/finite-difference.js.map +1 -0
- package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
- package/dist/numerical/geodesic-integrator.js +22 -14
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/geometrized.d.ts.map +1 -1
- package/dist/numerical/geometrized.js +0 -1
- package/dist/numerical/geometrized.js.map +1 -1
- package/dist/numerical/mathts-engine.d.ts.map +1 -1
- package/dist/numerical/mathts-engine.js +10 -24
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.d.ts.map +1 -1
- package/dist/numerical/metric-inverse.js +83 -46
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/null-ray-integrator.d.ts +2 -1
- package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
- package/dist/numerical/null-ray-integrator.js +12 -12
- package/dist/numerical/null-ray-integrator.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js +2 -2
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/pderiv.d.ts.map +1 -1
- package/dist/numerical/pderiv.js +2 -6
- package/dist/numerical/pderiv.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +0 -36
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +41 -87
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/quadrature.d.ts.map +1 -1
- package/dist/numerical/quadrature.js +11 -13
- package/dist/numerical/quadrature.js.map +1 -1
- package/dist/numerical/rk4-trajectory.d.ts +10 -0
- package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
- package/dist/numerical/rk4-trajectory.js +37 -0
- package/dist/numerical/rk4-trajectory.js.map +1 -0
- package/dist/numerical/schwarzschild.d.ts +14 -0
- package/dist/numerical/schwarzschild.d.ts.map +1 -0
- package/dist/numerical/schwarzschild.js +17 -0
- package/dist/numerical/schwarzschild.js.map +1 -0
- package/dist/numerical/spacetime-metrics.d.ts +12 -0
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +72 -56
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/numerical/statistics.d.ts +24 -0
- package/dist/numerical/statistics.d.ts.map +1 -0
- package/dist/numerical/statistics.js +52 -0
- package/dist/numerical/statistics.js.map +1 -0
- package/dist/numerical/strides.d.ts +3 -2
- package/dist/numerical/strides.d.ts.map +1 -1
- package/dist/numerical/strides.js +3 -10
- package/dist/numerical/strides.js.map +1 -1
- package/dist/numerical/tensor-engine.d.ts +21 -0
- package/dist/numerical/tensor-engine.d.ts.map +1 -1
- package/dist/numerical/tensor-engine.js +12 -0
- package/dist/numerical/tensor-engine.js.map +1 -1
- package/dist/relations/regime.d.ts +10 -0
- package/dist/relations/regime.d.ts.map +1 -1
- package/dist/relations/regime.js +18 -1
- package/dist/relations/regime.js.map +1 -1
- package/package.json +9 -12
- package/dist/cases/brownian-sphere.d.ts +0 -68
- package/dist/cases/brownian-sphere.d.ts.map +0 -1
- package/dist/cases/brownian-sphere.js +0 -354
- package/dist/cases/brownian-sphere.js.map +0 -1
- package/dist/cases/damped-resonator.d.ts +0 -23
- package/dist/cases/damped-resonator.d.ts.map +0 -1
- package/dist/cases/damped-resonator.js +0 -224
- package/dist/cases/damped-resonator.js.map +0 -1
- package/dist/cases/kepler-rv.d.ts +0 -13
- package/dist/cases/kepler-rv.d.ts.map +0 -1
- package/dist/cases/kepler-rv.js +0 -172
- package/dist/cases/kepler-rv.js.map +0 -1
- package/dist/cases/lumped-cooling.d.ts +0 -46
- package/dist/cases/lumped-cooling.d.ts.map +0 -1
- package/dist/cases/lumped-cooling.js +0 -261
- package/dist/cases/lumped-cooling.js.map +0 -1
- package/dist/cases/resistor-noise.d.ts +0 -14
- package/dist/cases/resistor-noise.d.ts.map +0 -1
- package/dist/cases/resistor-noise.js +0 -215
- package/dist/cases/resistor-noise.js.map +0 -1
- package/dist/cases/skin-depth.d.ts +0 -21
- package/dist/cases/skin-depth.d.ts.map +0 -1
- package/dist/cases/skin-depth.js +0 -174
- package/dist/cases/skin-depth.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAiC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,mFAAmF;AACnF,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,MAAM,KAAK,GAAe;IACxB,UAAU,CAAC,SAAS,EAAE,mDAAmD,CAAC;IAC1E,SAAS;CACV,CAAC;AAEF,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;4DAwB+C,CAAC;AAE7D;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,GAAsB,EAAE,IAAuB;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,aAAa;IAE9E,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,IAAI,UAAU,CAClB,+BAA+B,IAAI,4BAA4B;cAC3D,+EAA+E,CACpF,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtH,MAAM,QAAQ,GAAG,WAAW,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;IACxE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,IAAuD,CAAC;QAC5D,IAAI,CAAC;YACH,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,GAAG,CAAC,wBAAwB;gBAAE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/F,IAAI,CAAC,YAAY,GAAG,CAAC,uBAAuB,EAAE,CAAC;gBAC7C,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC,UAAU,2BAA2B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1F,CAAC;YACD,4FAA4F;YAC5F,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC,UAAU,6CAA8C,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACvH,CAAC;QACD,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC,UAAU,sCAAsC,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC;QACpH,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,wEAAwE;QACxE,2EAA2E;QAC3E,wBAAwB;QACxB,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CACrB,GAAsB,EACtB,MAAc;IAEd,MAAM,EAAE,GAAG,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpB,IAAI,IAAI,GAAG,GAAG,MAAM,0IAA0I,CAAC;IAC/J,IAAI,IAAI,CAAC,CAAC,YAAY;QACpB,CAAC,CAAC,oFAAoF;QACtF,CAAC,CAAC,sHAAsH,CAAC;IAC3H,IAAI,IAAI,CAAC,CAAC,oBAAoB;QAC5B,CAAC,CAAC,uBAAuB,MAAM,qCAAqC;QACpE,CAAC,CAAC,iEAAiE,CAAC;IACtE,OAAO;QACL,EAAE;QACF,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;QAC5C,IAAI;KACL,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,SAAS,kBAAkB,CACzB,GAAsB,EACtB,MAAc;IAEd,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACzC,IAAI,EAAE,CAAC,cAAc,KAAK,SAAS;YAAE,SAAS;QAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACnE,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACpC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC;YAAE,SAAS;QAChD,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC;QACrF,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAsB,EACtB,GAAsB,EACtB,MAAc,EACd,KAAa,EACb,CAAmD;IAEnD,GAAG,CAAC,OAAO,MAAM,cAAc,KAAK,GAAG,CAAC,CAAC;IACzC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACzB,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,MAAM,KAAK,GACT,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,CAAC,eAAe;gBAAE,GAAG,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,IAAI,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC9B,GAAG,CAAC,mCAAmC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,SAAS,WAAW,CAAC,CAAqB,EAAE,CAAqB;IAC/D,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACvG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,SAAS,MAAM,CACb,GAAsB,EACtB,KAAwC,EACxC,OAAoC,EACpC,UAA+B;IAE/B,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE;QACtC,MAAM,GAAG,GAAG,GAAG,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,QAAQ,CAChB,iBAAiB,GAAG,mCAAmC;gBACrD,wEAAwE,CAC3E,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/D,oEAAoE;YACpE,+DAA+D;YAC/D,IAAI,QAAuB,CAAC;YAC5B,IAAI,CAAC;gBACH,QAAQ,GAAG,GAAG,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,GAAG,CAAC,yBAAyB;oBAAE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChG,MAAM,CAAC,CAAC;YACV,CAAC;YACD,IAAI,QAAQ,KAAK,IAAI;gBAAE,SAAS;QAClC,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YACpD,MAAM,IAAI,QAAQ,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,CAAC;QAC/D,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,GAAe;IAChC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAE/B,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,UAAU,CAAC,oDAAoD,CAAC,CAAC;IAC7E,CAAC;IAED,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,QAAQ,EAAE,CAAC;QACb,+GAA+G;QAC/G,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACjH,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,CAAC,OAAO,MAAM,gGAAgG,CAAC,CAAC;QACnH,GAAG,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,8EAA8E;IAC9E,8EAA8E;IAC9E,yEAAyE;IACzE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,4EAA4E;IAC5E,kFAAkF;IAClF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,0BAA0B,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,cAAc,GAAG,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5D,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAClD,sEAAsE;QACtE,sEAAsE;QACtE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,cAAc,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAClD,sFAAsF;QACtF,uEAAuE;QACvE,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,UAAU,GACd,KAAK,KAAK,IAAI;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,oBAAoB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG;gBAC5E,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7G,MAAM,IAAI,QAAQ,CAChB,iBAAiB,MAAM,8BAA8B,MAAM,sBAAsB;YAC/E,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACd,CAAC,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACtC,CAAC,CAAC,qDAAqD,CAAC;YAC1D,UAAU,CACb,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;QAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,GAAG,CAAC,wBAAwB;gBAAE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/F,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC;IACN,IAAI,CAAC;QACH,CAAC,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,GAAG,CAAC,gBAAgB,IAAI,CAAC,YAAY,GAAG,CAAC,wBAAwB,EAAE,CAAC;YACnF,MAAM,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IACD,2FAA2F;IAC3F,yFAAyF;IACzF,sFAAsF;IACtF,wFAAwF;IACxF,oEAAoE;IACpE,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,EAAE,CAAC;QACnH,MAAM,IAAI,QAAQ,CAAC,gBAAgB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,MAAM,YAAY,GAAG,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,kBAAkB,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,OAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAEhF,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,QAAQ,CACN;YACE,OAAO,EAAE,SAAS;YAClB,MAAM;YACN,MAAM,EACJ,OAAO,KAAK,IAAI,IAAI,kBAAkB,KAAK,SAAS;gBAClD,CAAC,CAAC;oBACE,GAAG,CAAC;oBACJ,WAAW,EAAE;wBACX,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,SAAS,EAAE,OAAO,CAAC,IAAI;wBACvB,WAAW,EAAE,KAAK;wBAClB,WAAW,EAAE,kBAAkB;qBAChC;iBACF;gBACH,CAAC,CAAC,CAAC;SACR,EACD,GAAG,CAAC,KAAK,CACV,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,IAAI,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACzD,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,WAAW,gBAAgB,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,GAAG,CAAC,KAAK,cAAc,QAAQ,OAAO,CAAC,IAAI,yBAAyB,GAAG,kBAAkB,CAAC,CAAC;QAC7F,CAAC;aAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,cAAe,GAAG,kBAAkB,CAAC,cAAe,CAAC;YACrE,GAAG,CACD,KAAK,cAAc,QAAQ,OAAO,CAAC,IAAI,yBAAyB,GAAG,KAAK;gBACtE,oBAAoB,cAAc,MAAM,OAAO,CAAC,IAAI,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CACzF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,cAAc,QAAQ,OAAO,CAAC,IAAI,yBAAyB,GAAG,IAAI,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;IAC9B,OAAO,EAAE,oFAAoF;IAC7F,OAAO,EAAE,4CAA4C;IACrD,KAAK,EAAE,SAAS;IAChB,GAAG;CACJ,CAAC;AAEF,eAAe,CAAC,OAAO,CAAC,CAAC","sourcesContent":["/**\n * `upt explain` — explain how the graph determines a quantity: the\n * identifiability verdict, recovered value, derivation chains, and whether\n * the inputs are dimensionally sufficient. Transposed verbatim from\n * bin/upt.mjs's `explain()` + `parseKnown()` (lines 183-235), plus\n * `--source` (the old CLI's module-level `GRAPH` was always the catalog\n * graph) and `--json`.\n *\n * `parseKnown`'s two-mode positional contract (bare names XOR name=value,\n * never mixed) and its malformed-input rejections are pinned by\n * `tests/cli/upt-explain-inputs.test.ts` against the old bin — ported here\n * unchanged, with `process.exit(2)` sites converted to `UsageError` (same\n * message text; `main.ts`'s catch maps it to exit 2).\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { splitAssignments } from '../bindings.js';\nimport { UsageError, CliError } from '../errors.js';\nimport { searchNameWords } from '../search-index.js';\n\n/** How many `upt search` hits a NOT COVERED answer lists before \"… and N more\". */\nconst SEARCH_HITS_SHOWN = 5;\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph to read: catalog, canonical, or both.'),\n JSON_FLAG,\n];\n\nconst HELP = `upt explain <quantity> [name=value | name] ...\n [--source=catalog|canonical|both] [--json]\n Explain how the graph determines a quantity: the identifiability\n verdict, recovered value, derivation chains, and whether the inputs\n are dimensionally sufficient. A name that is not a quantity of the\n graph is reported NOT COVERED, with a one-edit name and what \\`upt search\\`\n finds for its words, and exits 1. A shared token such as \\`length\\` is\n not a near name. An evaluate key (\\`I_W_per_m2\\`, \\`B_T\\`, \\`T_K\\`, \\`g_00\\`)\n is the graph quantity that edge records. A name that does not resolve\n exits 1. --source picks the graph (default\n catalog); the result names the source it used.\n --source=both also prints the other quantity name when a canonical\n equation restates a catalog bridge under a different name, and says\n whether the two recovered values agree.\n A value is a number, a unit (mass=1Msun) or a constant expression\n (mass=1*M_sun). A bare number is already in the quantity's unit.\n T, temperature, temp, and T_K are kelvin: an energy on that name is\n k_B T, using boltzmann-constant, k_B, or kB when one of those is\n bound, and any other dimension is an error.\n A tagged quantity converts into that unit (GeV, bit, nat, J/K).\n magnetic-field and magnetic-flux-density are one vacuum B: a value\n given under either name is available under the other. The same\n number under both spellings is one input. Two different numbers\n are an error, and no frequency is recovered.\n e.g. upt explain hawking-temperature mass=1.989e30`;\n\n/**\n * Two modes, never mixed: bare names (structural analysis) OR name=value\n * (adds value recovery). Malformed inputs are rejected with a `UsageError`\n * rather than silently coerced — `mass=abc`→dropped, `mass=`→0,\n * `mass=1e500`→∞, and a bare name alongside a valued one were all silent\n * wrong-physics footguns.\n */\nfunction parseKnown(api: CommandCtx['api'], args: readonly string[]): { known: string[] | Record<string, number>; notes: string[] } {\n const valued = args.filter((a) => a.includes('='));\n if (valued.length === 0) return { known: [...args], notes: [] }; // names mode\n\n if (valued.length !== args.length) {\n const bare = args.filter((a) => !a.includes('=')).join(', ');\n throw new UsageError(\n `upt: cannot mix bare names (${bare}) with name=value inputs. `\n + 'Use all names (structural) or all name=value (with recovery). See `upt help`.'\n );\n }\n\n const assignments = splitAssignments('explain', args).map((a) => ({ name: a.name, raw: a.raw, assignment: a.token }));\n const siblings = assignments.map((a) => ({ name: a.name, raw: a.raw }));\n const values: Record<string, number> = {};\n const notes: string[] = [];\n for (const a of assignments) {\n let read: ReturnType<CommandCtx['api']['readNamedBinding']>;\n try {\n read = api.readNamedBinding(a.name, a.raw, { siblings });\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt explain: ${e.message}`);\n if (e instanceof api.TemperatureBindingError) {\n throw new CliError(`upt explain: '${a.assignment}' is not a temperature. ${e.message}`);\n }\n // A bad value is exit 1, as on eval and evaluate; a missing `=` was refused as usage above.\n throw new CliError(`upt explain: '${a.assignment}' is not a finite number or a known unit. ${(e as Error).message}`);\n }\n if (a.raw === '' || !Number.isFinite(read.value)) {\n throw new CliError(`upt explain: '${a.assignment}' is not a finite number. Expected ${a.name}=<number or unit>.`);\n }\n values[a.name] = read.value;\n // Unit-convention notes were already on the binding and explain did not\n // print them. The temperature reading adds a note; the reader returns that\n // one on its own field.\n if (read.temperatureNote !== undefined && !notes.includes(read.temperatureNote)) notes.push(read.temperatureNote);\n }\n return { known: values, notes };\n}\n\n/**\n * A bridge id (`be-NN`) is a graph EDGE, not a quantity NODE — `explain`\n * derives quantities, so it can never resolve a bridge id and would emit a bare\n * \"no derivation path\". Recognise a catalog bridge id and redirect helpfully,\n * tailored by grounding tier (closed-form evaluator vs graph-computable,\n * data-confronted or not). Returns `null` for non-bridge targets (fall through\n * to the normal graph explain).\n */\nfunction bridgeRedirect(\n api: CommandCtx['api'],\n target: string,\n): { id: number; tier: string; hasGraphEdge: boolean; hasDataConfrontation: boolean; hint: string } | null {\n const id = api.catalogIdNumber(target);\n if (id === undefined) return null;\n const b = api.auditCoverage().bridges.find((x) => x.id === id);\n if (!b) return null;\n\n let hint = `${target} is a bridge equation (a relation between quantities), not a graph quantity — \\`explain\\` derives quantities from the composition graph.`;\n hint += b.hasGraphEdge\n ? ` Its quantities appear in \\`upt map\\`; explain one of them to see its derivations.`\n : ` It is a closed-form evaluator bridge (no composition-graph edge), evaluated directly rather than through the graph.`;\n hint += b.hasDataConfrontation\n ? ` See \\`upt confront ${target}\\` for its real-data confrontation.`\n : ` It has no committed data confrontation (see \\`upt coverage\\`).`;\n return {\n id,\n tier: b.tier,\n hasGraphEdge: b.hasGraphEdge,\n hasDataConfrontation: b.hasDataConfrontation,\n hint,\n };\n}\n\n/** A canonical equation and the catalog bridge it restates, when those two target names differ. */\nfunction restatementPartner(\n api: CommandCtx['api'],\n target: string,\n): { name: string; canonicalId: string; bridgeId: number } | null {\n const norm = (s: string): string => s.replaceAll('_', '-').toLowerCase();\n const want = norm(target);\n for (const eq of api.CANONICAL_EQUATIONS) {\n if (eq.restatesBridge === undefined) continue;\n const bridgeId = Number(eq.restatesBridge);\n if (!Number.isInteger(bridgeId)) continue;\n const catalog = api.CATALOG_GRAPH.find((e) => e.beId === bridgeId);\n if (catalog === undefined) continue;\n const canonName = eq.dimensional.target.name;\n const catName = catalog.target.name;\n if (norm(canonName) === norm(catName)) continue;\n if (norm(canonName) === want) return { name: catName, canonicalId: eq.id, bridgeId };\n if (norm(catName) === want) return { name: canonName, canonicalId: eq.id, bridgeId };\n }\n return null;\n}\n\nfunction printExplanation(\n api: CommandCtx['api'],\n out: CommandCtx['out'],\n target: string,\n label: string,\n x: ReturnType<CommandCtx['api']['explainQuantity']>,\n): void {\n out(`\\n● ${target} [source: ${label}]`);\n out(` ${x.summary}`);\n if (x.derivations.length) {\n out(' derivations:');\n for (const d of x.derivations) {\n const val = d.value !== undefined ? ` = ${api.formatQuantity(d.value)}` : '';\n const chain =\n d.leafInputs.join(',') !== d.sources.join(',') ? ` [from leaves: ${d.leafInputs.join(', ')}]` : '';\n out(` - ${d.edge} (${d.label})${val}${chain}`);\n if (d.dimensionalForm) out(` ${d.dimensionalForm.formula}`);\n }\n }\n if (x.blockingFrontier.length) {\n out(` to determine it, also supply: ${x.blockingFrontier.join(', ')}`);\n }\n}\n\n/** Relative agreement of two recovered values. Absent when either value is missing. */\nfunction valuesAgree(a: number | undefined, b: number | undefined): boolean | undefined {\n if (a === undefined || b === undefined || !Number.isFinite(a) || !Number.isFinite(b)) return undefined;\n const scale = Math.max(Math.abs(a), Math.abs(b));\n if (scale === 0) return a === b;\n return Math.abs(a - b) / scale <= 1e-6;\n}\n\nfunction rebind(\n api: CommandCtx['api'],\n known: string[] | Record<string, number>,\n aliases: ReadonlyMap<string, string>,\n graphNames: ReadonlySet<string>,\n): string[] | Record<string, number> {\n const rewrite = (key: string): string => {\n const hit = api.resolveQuantityName(key, graphNames, aliases);\n if (hit === null) {\n throw new CliError(\n `upt explain: '${key}' did not resolve to a quantity. ` +\n 'A failed lookup is not a derivation, and this command does not exit 0.',\n );\n }\n return hit;\n };\n if (Array.isArray(known)) return known.map(rewrite);\n const out: Record<string, number> = {};\n for (const [key, value] of Object.entries(known)) {\n if (api.resolveQuantityName(key, graphNames, aliases) === null) {\n // A constant is not a graph quantity: the equation already uses the\n // registered value, so a stated value is checked, never bound.\n let constant: string | null;\n try {\n constant = api.constantAgreement(key, value);\n } catch (e) {\n if (e instanceof api.ConstantDisagreementError) throw new CliError(`upt explain: ${e.message}`);\n throw e;\n }\n if (constant !== null) continue;\n }\n const name = rewrite(key);\n if (Object.hasOwn(out, name) && out[name] !== value) {\n throw new CliError(`upt explain: '${name}' is given twice.`);\n }\n out[name] = value;\n }\n return out;\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n\n const [target, ...rest] = args.positionals;\n if (!target) {\n throw new UsageError('upt explain needs a quantity name. See `upt help`.');\n }\n\n // A bridge id is an edge, not a quantity — redirect before touching the graph.\n const redirect = bridgeRedirect(api, target);\n if (redirect) {\n // A bridge id names a CATALOG bridge whatever --source says; say so rather than print a source it did not use.\n if (args.flags.has('json')) {\n emitJson({ command: 'explain', source: 'catalog', result: { kind: 'bridge-redirect', ...redirect } }, ctx.write);\n return 0;\n }\n out(`\\n● ${target} [source: catalog bridge registry; a bridge id names a catalog bridge whatever --source says]`);\n out(` ${redirect.hint}`);\n return 0;\n }\n\n const { graph, label, source } = resolveGraph(api, args.flags);\n // A name that is not a quantity of this graph is NOT COVERED (persona finding\n // C4). It used to get the same \"no derivation path\" answer as a real quantity\n // the inputs cannot reach, and exit 0. Underscores resolve like hyphens.\n const names = new Set(graph.flatMap((e) => [e.target.name, ...e.sources.map((s) => s.name)]));\n // A dimensionless group the equation multiplies (sound-speed's gamma) is an\n // optional input, not a graph node. It resolves as a binding and not as a target.\n const inputNames = new Set(names);\n const edgeIds = new Set(graph.map((e) => e.id));\n for (const group of api.CANONICAL_GROUP_PREFACTORS) {\n if (edgeIds.has(group.id)) inputNames.add(group.group);\n }\n let resolvedTarget = api.resolveQuantityName(target, names);\n if (resolvedTarget === null) {\n const near = api.nearQuantityNames(target, names);\n // A single token one edit from exactly one quantity is that quantity.\n // A hyphenated miss stays a suggestion: `hawkng-temperature` exits 1.\n if (!/[-_\\s]/.test(target) && near.length === 1) {\n resolvedTarget = near[0]!;\n }\n }\n if (resolvedTarget === null) {\n const near = api.nearQuantityNames(target, names);\n // Audit I5: a law or model name (`schrodinger-equation`) is not a quantity; name what\n // `upt search` finds for its words. A shared token is not a near name.\n const found = searchNameWords(api, target);\n const shown = found?.matches.slice(0, SEARCH_HITS_SHOWN) ?? [];\n const searchLine =\n found === null\n ? ''\n : `\\n \\`upt search ${found.words.join(' ')}\\` finds ${found.matches.length}:` +\n shown.map((m) => `\\n ${m.entry.id} (${m.entry.kind.replace('-', ' ')}) — ${m.entry.command}`).join('') +\n (found.matches.length > shown.length ? `\\n … and ${found.matches.length - shown.length} more` : '');\n throw new CliError(\n `upt explain: '${target}' is not a quantity in the ${source} graph: NOT COVERED.` +\n (near.length > 0\n ? ` did you mean: ${near.join(', ')}?`\n : ' `upt canonical` and `upt map` list the vocabulary.') +\n searchLine,\n );\n }\n const aliases = api.aliasesForTarget(graph, resolvedTarget);\n const parsed = parseKnown(api, rest);\n for (const note of parsed.notes) ctx.err(note);\n if (!Array.isArray(parsed.known)) {\n try {\n api.assertSynonymAgreement(parsed.known);\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt explain: ${e.message}`);\n throw e;\n }\n }\n const rebound = rebind(api, parsed.known, aliases, inputNames);\n const known = api.shareSynonyms(rebound, names);\n let x;\n try {\n x = api.explainQuantity(graph, resolvedTarget, known);\n } catch (e) {\n if (e instanceof api.CarrierSignError || e instanceof api.SynonymDisagreementError) {\n throw new CliError(`upt explain: ${e.message}`);\n }\n throw e;\n }\n // Every route refused the point (a validity domain, opposite carrier signs, a formula with\n // no finite value there) and no value recovered: the inputs are a bad value, exit 1, the\n // code `upt evaluate` gives the same failure. A refusal beside a recovered value from\n // another route stays in the report, and an unset coefficient is not a bad value: it is\n // the edge's own state, reported as \"no recovered number\" (exit 0).\n const refusals = x.refusals ?? [];\n if (x.recoveredValue === undefined && refusals.length > 0 && refusals.every((r) => r.kind !== 'coefficient-unset')) {\n throw new CliError(`upt explain: ${refusals.map((r) => r.reason).join('; ')}`);\n }\n const partner = source === 'both' ? restatementPartner(api, resolvedTarget) : null;\n const partnerKnown = partner !== null && names.has(partner.name);\n const partnerExplanation = partnerKnown ? api.explainQuantity(graph, partner!.name, known) : undefined;\n const agree = valuesAgree(x.recoveredValue, partnerExplanation?.recoveredValue);\n\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'explain',\n source,\n result:\n partner !== null && partnerExplanation !== undefined\n ? {\n ...x,\n restatement: {\n canonicalId: partner.canonicalId,\n bridgeId: partner.bridgeId,\n otherName: partner.name,\n valuesAgree: agree,\n explanation: partnerExplanation,\n },\n }\n : x,\n },\n ctx.write,\n );\n return 0;\n }\n\n printExplanation(api, out, target, label, x);\n if (partner !== null && partnerExplanation !== undefined) {\n printExplanation(api, out, partner.name, label, partnerExplanation);\n const who = `${partner.canonicalId} restates be-${partner.bridgeId}`;\n if (agree === true) {\n out(` ${resolvedTarget} and ${partner.name} are one restatement (${who}). Values agree.`);\n } else if (agree === false) {\n const ratio = x.recoveredValue! / partnerExplanation.recoveredValue!;\n out(\n ` ${resolvedTarget} and ${partner.name} are one restatement (${who}). ` +\n `Values DISAGREE: ${resolvedTarget} / ${partner.name} = ${api.formatQuantity(ratio)}.`,\n );\n } else {\n out(` ${resolvedTarget} and ${partner.name} are one restatement (${who}).`);\n }\n }\n return 0;\n}\n\nexport const command: Command = {\n name: 'explain',\n aliases: [],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Show how the graph determines a quantity, or say that it does not cover that name.',\n example: 'upt explain hawking-temperature mass=1Msun',\n group: 'explore',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt explain` — explain how the graph determines a quantity: the\n * identifiability verdict, recovered value, derivation chains, and whether\n * the inputs are dimensionally sufficient. Transposed verbatim from\n * bin/upt.mjs's `explain()` + `parseKnown()` (lines 183-235), plus\n * `--source` (the old CLI's module-level `GRAPH` was always the catalog\n * graph) and `--json`.\n *\n * `parseKnown`'s two-mode positional contract (bare names XOR name=value,\n * never mixed) and its malformed-input rejections are pinned by\n * `tests/cli/upt-explain-inputs.test.ts` against the old bin — ported here\n * unchanged, with `process.exit(2)` sites converted to `UsageError` (same\n * message text; `main.ts`'s catch maps it to exit 2).\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { splitAssignments } from '../bindings.js';\nimport { UsageError, CliError } from '../errors.js';\nimport { searchNameWords } from '../search-index.js';\n\n/** The exact SI dimension, as the barrel's `dimensionsEqual` takes it. */\ntype QuantityDimension = Parameters<CommandCtx['api']['dimensionsEqual']>[0];\n\n/** How many `upt search` hits a NOT COVERED answer lists before \"… and N more\". */\nconst SEARCH_HITS_SHOWN = 5;\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph to read: catalog, canonical, or both.'),\n JSON_FLAG,\n];\n\nconst HELP = `upt explain <quantity> [name=value | name] ...\n [--source=catalog|canonical|both] [--json]\n Explain how the graph determines a quantity: the identifiability\n verdict, recovered value, derivation chains, and whether the inputs\n are dimensionally sufficient. A name that is not a quantity of the\n graph is reported NOT COVERED, with a one-edit name and what \\`upt search\\`\n finds for its words, and exits 1. A shared token such as \\`length\\` is\n not a near name. An evaluate key (\\`I_W_per_m2\\`, \\`B_T\\`, \\`T_K\\`, \\`g_00\\`)\n is the graph quantity that edge records. A name that does not resolve\n exits 1. --source picks the graph (default\n catalog); the result names the source it used.\n --source=both also prints the other quantity name when a canonical\n equation restates a catalog bridge under a different name, and says\n whether the two recovered values agree.\n A value is a number, a unit (mass=1Msun) or a constant expression\n (mass=1*M_sun). A bare number is already in the quantity's unit.\n T, temperature, temp, and T_K are kelvin: an energy on that name is\n k_B T, using boltzmann-constant, k_B, or kB when one of those is\n bound, and any other dimension is an error.\n A tagged quantity converts into that unit (GeV, bit, nat, J/K).\n magnetic-field and magnetic-flux-density are one vacuum B: a value\n given under either name is available under the other. The same\n number under both spellings is one input. Two different numbers\n are an error, and no frequency is recovered.\n e.g. upt explain hawking-temperature mass=1.989e30`;\n\n/**\n * The quantity dimension the graph carries for a resolved input name.\n * `inputNames` and `aliases` are the same lookups `rebind` uses, so a name the\n * rebind accepts is checked, and a name outside the graph (a dimensionless\n * group such as `gamma`) has no dimension and is not checked here.\n */\ninterface BindingDimensions {\n readonly inputNames: ReadonlySet<string>;\n readonly aliases: ReadonlyMap<string, string>;\n readonly dims: ReadonlyMap<string, QuantityDimension>;\n}\n\n/**\n * Two modes, never mixed: bare names (structural analysis) OR name=value\n * (adds value recovery). Malformed inputs are rejected with a `UsageError`\n * rather than silently coerced — `mass=abc`→dropped, `mass=`→0,\n * `mass=1e500`→∞, and a bare name alongside a valued one were all silent\n * wrong-physics footguns.\n */\nfunction parseKnown(\n api: CommandCtx['api'],\n args: readonly string[],\n dimensions: BindingDimensions,\n): { known: string[] | Record<string, number>; notes: string[] } {\n const valued = args.filter((a) => a.includes('='));\n if (valued.length === 0) return { known: [...args], notes: [] }; // names mode\n\n if (valued.length !== args.length) {\n const bare = args.filter((a) => !a.includes('=')).join(', ');\n throw new UsageError(\n `upt: cannot mix bare names (${bare}) with name=value inputs. `\n + 'Use all names (structural) or all name=value (with recovery). See `upt help`.'\n );\n }\n\n const assignments = splitAssignments('explain', args).map((a) => ({ name: a.name, raw: a.raw, assignment: a.token }));\n const siblings = assignments.map((a) => ({ name: a.name, raw: a.raw }));\n const values: Record<string, number> = {};\n const notes: string[] = [];\n for (const a of assignments) {\n let read: ReturnType<CommandCtx['api']['readNamedBinding']>;\n try {\n read = api.readNamedBinding(a.name, a.raw, { siblings });\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt explain: ${e.message}`);\n if (e instanceof api.TemperatureBindingError) {\n throw new CliError(`upt explain: '${a.assignment}' is not a temperature. ${e.message}`);\n }\n // A bad value is exit 1, as on eval and evaluate; a missing `=` was refused as usage above.\n throw new CliError(`upt explain: '${a.assignment}' is not a finite number or a known unit. ${(e as Error).message}`);\n }\n if (a.raw === '' || !Number.isFinite(read.value)) {\n throw new CliError(`upt explain: '${a.assignment}' is not a finite number. Expected ${a.name}=<number or unit>.`);\n }\n values[a.name] = read.value;\n // A dimensioned value must be the quantity's dimension (issues #542, #537):\n // `nu=500nm` used to keep the 5e-7 scale and drop the length, so a metre\n // was read as a hertz. A bare number is already in the quantity's unit.\n // The message is the same sentence `bindingInUnit` gives `upt evaluate`,\n // with the quantity's own dimension where evaluate states a declared unit.\n const resolved = api.resolveQuantityName(a.name, dimensions.inputNames, dimensions.aliases);\n const quantityDim = resolved === null ? undefined : dimensions.dims.get(resolved);\n if (read.dimensioned && quantityDim !== undefined && !api.dimensionsEqual(read.dimension, quantityDim)) {\n throw new CliError(\n `upt explain: '${a.assignment}': '${a.raw.trim()}' is ${api.format(read.dimension)}, ` +\n `but this input is ${api.format(quantityDim)} (${resolved})`,\n );\n }\n // Unit-convention notes were already on the binding and explain did not\n // print them. The temperature reading adds a note; the reader returns that\n // one on its own field.\n if (read.temperatureNote !== undefined && !notes.includes(read.temperatureNote)) notes.push(read.temperatureNote);\n }\n return { known: values, notes };\n}\n\n/**\n * A bridge id (`be-NN`) is a graph EDGE, not a quantity NODE — `explain`\n * derives quantities, so it can never resolve a bridge id and would emit a bare\n * \"no derivation path\". Recognise a catalog bridge id and redirect helpfully,\n * tailored by grounding tier (closed-form evaluator vs graph-computable,\n * data-confronted or not). Returns `null` for non-bridge targets (fall through\n * to the normal graph explain).\n */\nfunction bridgeRedirect(\n api: CommandCtx['api'],\n target: string,\n): { id: number; tier: string; hasGraphEdge: boolean; hasDataConfrontation: boolean; hint: string } | null {\n const id = api.catalogIdNumber(target);\n if (id === undefined) return null;\n const b = api.auditCoverage().bridges.find((x) => x.id === id);\n if (!b) return null;\n\n let hint = `${target} is a bridge equation (a relation between quantities), not a graph quantity — \\`explain\\` derives quantities from the composition graph.`;\n hint += b.hasGraphEdge\n ? ` Its quantities appear in \\`upt map\\`; explain one of them to see its derivations.`\n : ` It is a closed-form evaluator bridge (no composition-graph edge), evaluated directly rather than through the graph.`;\n hint += b.hasDataConfrontation\n ? ` See \\`upt confront ${target}\\` for its real-data confrontation.`\n : ` It has no committed data confrontation (see \\`upt coverage\\`).`;\n return {\n id,\n tier: b.tier,\n hasGraphEdge: b.hasGraphEdge,\n hasDataConfrontation: b.hasDataConfrontation,\n hint,\n };\n}\n\n/** A canonical equation and the catalog bridge it restates, when those two target names differ. */\nfunction restatementPartner(\n api: CommandCtx['api'],\n target: string,\n): { name: string; canonicalId: string; bridgeId: number } | null {\n const norm = (s: string): string => api.foldName(s).toLowerCase();\n const want = norm(target);\n for (const eq of api.CANONICAL_EQUATIONS) {\n if (eq.restatesBridge === undefined) continue;\n const bridgeId = Number(eq.restatesBridge);\n if (!Number.isInteger(bridgeId)) continue;\n const catalog = api.CATALOG_GRAPH.find((e) => e.beId === bridgeId);\n if (catalog === undefined) continue;\n const canonName = eq.dimensional.target.name;\n const catName = catalog.target.name;\n if (norm(canonName) === norm(catName)) continue;\n if (norm(canonName) === want) return { name: catName, canonicalId: eq.id, bridgeId };\n if (norm(catName) === want) return { name: canonName, canonicalId: eq.id, bridgeId };\n }\n return null;\n}\n\nfunction printExplanation(\n api: CommandCtx['api'],\n out: CommandCtx['out'],\n target: string,\n label: string,\n x: ReturnType<CommandCtx['api']['explainQuantity']>,\n): void {\n out(`\\n● ${target} [source: ${label}]`);\n out(` ${x.summary}`);\n if (x.derivations.length) {\n out(' derivations:');\n for (const d of x.derivations) {\n const val = d.value !== undefined ? ` = ${api.formatQuantity(d.value)}` : '';\n const chain =\n d.leafInputs.join(',') !== d.sources.join(',') ? ` [from leaves: ${d.leafInputs.join(', ')}]` : '';\n out(` - ${d.edge} (${d.label})${val}${chain}`);\n if (d.dimensionalForm) out(` ${d.dimensionalForm.formula}`);\n }\n }\n if (x.blockingFrontier.length) {\n out(` to determine it, also supply: ${x.blockingFrontier.join(', ')}`);\n }\n}\n\n/** Relative agreement of two recovered values. Absent when either value is missing. */\nfunction valuesAgree(a: number | undefined, b: number | undefined): boolean | undefined {\n if (a === undefined || b === undefined || !Number.isFinite(a) || !Number.isFinite(b)) return undefined;\n const scale = Math.max(Math.abs(a), Math.abs(b));\n if (scale === 0) return a === b;\n return Math.abs(a - b) / scale <= 1e-6;\n}\n\nfunction rebind(\n api: CommandCtx['api'],\n known: string[] | Record<string, number>,\n aliases: ReadonlyMap<string, string>,\n graphNames: ReadonlySet<string>,\n): string[] | Record<string, number> {\n const rewrite = (key: string): string => {\n const hit = api.resolveQuantityName(key, graphNames, aliases);\n if (hit === null) {\n throw new CliError(\n `upt explain: '${key}' did not resolve to a quantity. ` +\n 'A failed lookup is not a derivation, and this command does not exit 0.',\n );\n }\n return hit;\n };\n if (Array.isArray(known)) return known.map(rewrite);\n const out: Record<string, number> = {};\n for (const [key, value] of Object.entries(known)) {\n if (api.resolveQuantityName(key, graphNames, aliases) === null) {\n // A constant is not a graph quantity: the equation already uses the\n // registered value, so a stated value is checked, never bound.\n let constant: string | null;\n try {\n constant = api.constantAgreement(key, value);\n } catch (e) {\n if (e instanceof api.ConstantDisagreementError) throw new CliError(`upt explain: ${e.message}`);\n throw e;\n }\n if (constant !== null) continue;\n }\n const name = rewrite(key);\n if (Object.hasOwn(out, name) && out[name] !== value) {\n throw new CliError(`upt explain: '${name}' is given twice.`);\n }\n out[name] = value;\n }\n return out;\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n\n const [target, ...rest] = args.positionals;\n if (!target) {\n throw new UsageError('upt explain needs a quantity name. See `upt help`.');\n }\n\n // A bridge id is an edge, not a quantity — redirect before touching the graph.\n const redirect = bridgeRedirect(api, target);\n if (redirect) {\n // A bridge id names a CATALOG bridge whatever --source says; say so rather than print a source it did not use.\n if (args.flags.has('json')) {\n emitJson({ command: 'explain', source: 'catalog', result: { kind: 'bridge-redirect', ...redirect } }, ctx.write);\n return 0;\n }\n out(`\\n● ${target} [source: catalog bridge registry; a bridge id names a catalog bridge whatever --source says]`);\n out(` ${redirect.hint}`);\n return 0;\n }\n\n const { graph, label, source } = resolveGraph(api, args.flags);\n // A name that is not a quantity of this graph is NOT COVERED (persona finding\n // C4). It used to get the same \"no derivation path\" answer as a real quantity\n // the inputs cannot reach, and exit 0. Underscores resolve like hyphens.\n const names = new Set(graph.flatMap((e) => [e.target.name, ...e.sources.map((s) => s.name)]));\n // A dimensionless group the equation multiplies (sound-speed's gamma) is an\n // optional input, not a graph node. It resolves as a binding and not as a target.\n const inputNames = new Set(names);\n const edgeIds = new Set(graph.map((e) => e.id));\n for (const group of api.CANONICAL_GROUP_PREFACTORS) {\n if (edgeIds.has(group.id)) inputNames.add(group.group);\n }\n let resolvedTarget = api.resolveQuantityName(target, names);\n if (resolvedTarget === null) {\n const near = api.nearQuantityNames(target, names);\n // A single token one edit from exactly one quantity is that quantity.\n // A hyphenated miss stays a suggestion: `hawkng-temperature` exits 1.\n if (!/[-_\\s]/.test(target) && near.length === 1) {\n resolvedTarget = near[0]!;\n }\n }\n if (resolvedTarget === null) {\n const near = api.nearQuantityNames(target, names);\n // Audit I5: a law or model name (`schrodinger-equation`) is not a quantity; name what\n // `upt search` finds for its words. A shared token is not a near name.\n const found = searchNameWords(api, target);\n const shown = found?.matches.slice(0, SEARCH_HITS_SHOWN) ?? [];\n const searchLine =\n found === null\n ? ''\n : `\\n \\`upt search ${found.words.join(' ')}\\` finds ${found.matches.length}:` +\n shown.map((m) => `\\n ${m.entry.id} (${m.entry.kind.replace('-', ' ')}) — ${m.entry.command}`).join('') +\n (found.matches.length > shown.length ? `\\n … and ${found.matches.length - shown.length} more` : '');\n throw new CliError(\n `upt explain: '${target}' is not a quantity in the ${source} graph: NOT COVERED.` +\n (near.length > 0\n ? ` did you mean: ${near.join(', ')}?`\n : ' `upt canonical` and `upt map` list the vocabulary.') +\n searchLine,\n );\n }\n const aliases = api.aliasesForTarget(graph, resolvedTarget);\n // The dimension of each graph quantity, from the nodes the edges already\n // carry (projected from `data/quantities.json`): the check\n // `parseKnown` makes for a dimensioned binding, in the terms this graph uses.\n const dims = new Map<string, QuantityDimension>();\n for (const e of graph) {\n dims.set(e.target.name, e.target.dim);\n for (const s of e.sources) dims.set(s.name, s.dim);\n }\n const parsed = parseKnown(api, rest, { inputNames, aliases, dims });\n for (const note of parsed.notes) ctx.err(note);\n if (!Array.isArray(parsed.known)) {\n try {\n api.assertSynonymAgreement(parsed.known);\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt explain: ${e.message}`);\n throw e;\n }\n }\n const rebound = rebind(api, parsed.known, aliases, inputNames);\n const known = api.shareSynonyms(rebound, names);\n let x;\n try {\n x = api.explainQuantity(graph, resolvedTarget, known);\n } catch (e) {\n if (e instanceof api.CarrierSignError || e instanceof api.SynonymDisagreementError) {\n throw new CliError(`upt explain: ${e.message}`);\n }\n throw e;\n }\n // Every route refused the point (a validity domain, opposite carrier signs, a formula with\n // no finite value there) and no value recovered: the inputs are a bad value, exit 1, the\n // code `upt evaluate` gives the same failure. A refusal beside a recovered value from\n // another route stays in the report, and an unset coefficient is not a bad value: it is\n // the edge's own state, reported as \"no recovered number\" (exit 0).\n const refusals = x.refusals ?? [];\n if (x.recoveredValue === undefined && refusals.length > 0 && refusals.every((r) => r.kind !== 'coefficient-unset')) {\n throw new CliError(`upt explain: ${refusals.map((r) => r.reason).join('; ')}`);\n }\n const partner = source === 'both' ? restatementPartner(api, resolvedTarget) : null;\n const partnerKnown = partner !== null && names.has(partner.name);\n const partnerExplanation = partnerKnown ? api.explainQuantity(graph, partner!.name, known) : undefined;\n const agree = valuesAgree(x.recoveredValue, partnerExplanation?.recoveredValue);\n\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'explain',\n source,\n result:\n partner !== null && partnerExplanation !== undefined\n ? {\n ...x,\n restatement: {\n canonicalId: partner.canonicalId,\n bridgeId: partner.bridgeId,\n otherName: partner.name,\n valuesAgree: agree,\n explanation: partnerExplanation,\n },\n }\n : x,\n },\n ctx.write,\n );\n return 0;\n }\n\n printExplanation(api, out, target, label, x);\n if (partner !== null && partnerExplanation !== undefined) {\n printExplanation(api, out, partner.name, label, partnerExplanation);\n const who = `${partner.canonicalId} restates be-${partner.bridgeId}`;\n if (agree === true) {\n out(` ${resolvedTarget} and ${partner.name} are one restatement (${who}). Values agree.`);\n } else if (agree === false) {\n const ratio = x.recoveredValue! / partnerExplanation.recoveredValue!;\n out(\n ` ${resolvedTarget} and ${partner.name} are one restatement (${who}). ` +\n `Values DISAGREE: ${resolvedTarget} / ${partner.name} = ${api.formatQuantity(ratio)}.`,\n );\n } else {\n out(` ${resolvedTarget} and ${partner.name} are one restatement (${who}).`);\n }\n }\n return 0;\n}\n\nexport const command: Command = {\n name: 'explain',\n aliases: [],\n positionals: { max: Infinity },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Show how the graph determines a quantity, or say that it does not cover that name.',\n example: 'upt explain hawking-temperature mass=1Msun',\n group: 'explore',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ground.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ground.ts"],"names":[],"mappings":"AAaA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ground.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ground.ts"],"names":[],"mappings":"AAaA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAkI/E,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
|
|
@@ -91,7 +91,7 @@ async function run(ctx) {
|
|
|
91
91
|
source,
|
|
92
92
|
anchor: { groundTruth: groundTruthAnchor(api, opts) },
|
|
93
93
|
options: { ...opts },
|
|
94
|
-
result: { a: cand.a, b: cand.b, verdict: cand.verdict, grounding: g },
|
|
94
|
+
result: { a: cand.a, b: cand.b, verdict: cand.verdict, grounding: g, magnitudeDerived: cand.magnitudeDerived ?? [] },
|
|
95
95
|
}, ctx.write);
|
|
96
96
|
return 0;
|
|
97
97
|
}
|
|
@@ -100,6 +100,11 @@ async function run(ctx) {
|
|
|
100
100
|
out(EPISTEMICS + '\n');
|
|
101
101
|
out(` passed: ${g.passed.join(', ') || '—'}`);
|
|
102
102
|
out(` gaps: ${g.gaps.join(', ') || '—'}`);
|
|
103
|
+
// A magnitude-clash row's grounding states no magnitude line, so where a magnitude came from its
|
|
104
|
+
// own equation is said here, for every verdict.
|
|
105
|
+
if ((cand.magnitudeDerived ?? []).length > 0) {
|
|
106
|
+
out(` magnitude: ${cand.magnitudeDerived.join(', ')} from its own equation (the sourced table and the constants, not the anchor)`);
|
|
107
|
+
}
|
|
103
108
|
out(` ceiling: mechanism-tested ${g.mechanismTested} · data-tested ${g.dataTested} ` +
|
|
104
109
|
'(permanent for a dimensional candidate — see `upt confront`)');
|
|
105
110
|
return 0;
|
|
@@ -107,6 +112,7 @@ async function run(ctx) {
|
|
|
107
112
|
export const command = {
|
|
108
113
|
name: 'ground',
|
|
109
114
|
aliases: [],
|
|
115
|
+
positionals: { max: 2 },
|
|
110
116
|
flags: FLAGS,
|
|
111
117
|
help: commandHelp(HELP, FLAGS),
|
|
112
118
|
summary: 'Show which falsifiers ran on one discovery candidate, and which abstained.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ground.js","sourceRoot":"","sources":["../../../src/cli/commands/ground.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt ground <quantityA> <quantityB>` — the epistemic-grounding ledger for a\n * single discovery candidate a≡b: which falsifiers passed, which abstained (gaps),\n * and the honest permanent ceiling (no mechanism test, no data test). Lets you\n * interrogate one candidate directly instead of scanning all of `upt discover`.\n *\n * It runs the same funnel as `upt discover` over the same `--source` graph and\n * `--anchor`/`--max-orders` options, so a pair `discover` printed can be\n * grounded by repeating those flags. A pair missing from the selected graph is\n * looked up in the others, and a hit is named: a candidate of another scope\n * must not be reported as though it never existed.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph, groundTruthAnchor, groundTruthLine, type SourceName } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { UsageError, CliError } from '../errors.js';\nimport { parseDiscoveryOpts } from './_discovery-opts.js';\nimport { DISCOVER_MAX_ORDERS_DEFAULT } from '../library-defaults.js';\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph to read: catalog, canonical, or both. Use the same value as the discover run.'),\n {\n name: '--anchor',\n valueStyle: 'attached',\n repeatable: true,\n description: 'Override a numeric anchor as k=v or k=v,k2=v2.',\n defaultValue: 'mass=M_sun',\n },\n {\n name: '--max-orders',\n valueStyle: 'attached',\n description: 'Magnitude-clash threshold. A larger value keeps more pairs promising.',\n defaultValue: DISCOVER_MAX_ORDERS_DEFAULT,\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt ground <quantityA> <quantityB> [--source=catalog|canonical|both]\n [--anchor=k=v,...] [--max-orders=N] [--json]\n The epistemic-grounding ledger for one discovery candidate a≡b: which\n falsifiers PASSED, which ABSTAINED (gaps), and the honest ceiling — no\n mechanism test, no data test (permanent for a dimensional candidate;\n real mechanism/data live in \\`upt confront\\`).\n Pass the same --source (default catalog), --anchor and --max-orders\n as the \\`upt discover\\` run that listed the pair.`;\n\nconst EPISTEMICS =\n '(candidate grounding is a review surface; mechanism/data live in `upt confront`, not candidate space)';\n\nconst ALL_SOURCES: readonly SourceName[] = ['catalog', 'canonical', 'both'];\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const { graph, label, source } = resolveGraph(api, args.flags);\n const opts = parseDiscoveryOpts(api, args.flags);\n const [a, b] = args.positionals;\n if (!a || !b) {\n throw new UsageError('upt ground needs two quantity names (a b). See `upt help`.');\n }\n\n const pairs = (c: { a: string; b: string }) => (c.a === a && c.b === b) || (c.a === b && c.b === a);\n // A graph's funnel runs only when both names are quantities of that graph: a\n // name no graph carries is answered without running three funnels.\n const quantities = (edges: readonly { target: { name: string }; sources: readonly { name: string }[] }[]): Set<string> =>\n new Set(edges.flatMap((e) => [e.target.name, ...e.sources.map((q) => q.name)]));\n const bothNamed = (edges: Parameters<typeof quantities>[0]): boolean => {\n const names = quantities(edges);\n return names.has(a) && names.has(b);\n };\n // A name no graph holds is a bad argument (exit 1). A pair every graph holds and no\n // funnel pairs is a computed absence: exit 0 with its envelope, the rule `search` with no\n // match and `confront` with a refusal follow (Tom's review of #502).\n const graphs = ALL_SOURCES.map((s) => (s === source ? graph : resolveGraph(api, new Map([['source', [s]]])).graph));\n const held = new Set(graphs.flatMap((g) => [...quantities(g)]));\n for (const name of [a, b]) {\n if (!held.has(name)) throw new CliError(`upt ground: '${name}' is not a quantity of any graph (${ALL_SOURCES.join(', ')})`);\n }\n const cand = bothNamed(graph) ? api.rankDiscoveries(graph, opts).find(pairs) : undefined;\n if (!cand) {\n const elsewhere = ALL_SOURCES.filter((s) => s !== source).filter((s) => {\n const other = graphs[ALL_SOURCES.indexOf(s)]!;\n return bothNamed(other) && api.rankDiscoveries(other, opts).some(pairs);\n });\n const anchorFlags = (args.flags.get('anchor') ?? []).map((v) => ` --anchor=${v}`).join('');\n const ordersFlag = args.flags.has('max-orders') ? ` --max-orders=${args.flags.get('max-orders')!.at(-1)}` : '';\n const sentence =\n elsewhere.length > 0\n ? `'${a}' ≟ '${b}' is not a candidate in the ${source} graph, but it is in ` +\n `${elsewhere.join(' and ')}: upt ground --source=${elsewhere[0]}${anchorFlags}${ordersFlag} ${a} ${b}`\n : `no discovery candidate pairs '${a}' with '${b}' in any of ${ALL_SOURCES.join(', ')} — ` +\n 'they may not share a dimension, or are already connected (not a cross-cluster coincidence).';\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'ground',\n source,\n anchor: { groundTruth: groundTruthAnchor(api, opts) },\n options: { ...opts },\n result: { a, b, candidate: null, searched: [...ALL_SOURCES], elsewhere, note: sentence },\n },\n ctx.write,\n );\n return 0;\n }\n out(`\\n● ${a} ≟ ${b} [no candidate] [source: ${label}]`);\n out(` ${sentence}`);\n return 0;\n }\n\n const g = api.describeGrounding(cand);\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'ground',\n source,\n anchor: { groundTruth: groundTruthAnchor(api, opts) },\n options: { ...opts },\n result: { a: cand.a, b: cand.b, verdict: cand.verdict, grounding: g },\n },\n ctx.write,\n );\n return 0;\n }\n\n out(`\\n● ${cand.a} ≟ ${cand.b} [${cand.verdict}] [source: ${label}]`);\n out(` ${groundTruthLine(groundTruthAnchor(api, opts))}`);\n out(EPISTEMICS + '\\n');\n out(` passed: ${g.passed.join(', ') || '—'}`);\n out(` gaps: ${g.gaps.join(', ') || '—'}`);\n out(\n ` ceiling: mechanism-tested ${g.mechanismTested} · data-tested ${g.dataTested} ` +\n '(permanent for a dimensional candidate — see `upt confront`)',\n );\n return 0;\n}\n\nexport const command: Command = {\n name: 'ground',\n aliases: [],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Show which falsifiers ran on one discovery candidate, and which abstained.',\n example: 'upt ground landauer-erasure-energy gap-energy',\n group: 'discovery',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
1
|
+
{"version":3,"file":"ground.js","sourceRoot":"","sources":["../../../src/cli/commands/ground.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt ground <quantityA> <quantityB>` — the epistemic-grounding ledger for a\n * single discovery candidate a≡b: which falsifiers passed, which abstained (gaps),\n * and the honest permanent ceiling (no mechanism test, no data test). Lets you\n * interrogate one candidate directly instead of scanning all of `upt discover`.\n *\n * It runs the same funnel as `upt discover` over the same `--source` graph and\n * `--anchor`/`--max-orders` options, so a pair `discover` printed can be\n * grounded by repeating those flags. A pair missing from the selected graph is\n * looked up in the others, and a hit is named: a candidate of another scope\n * must not be reported as though it never existed.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph, groundTruthAnchor, groundTruthLine, type SourceName } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { UsageError, CliError } from '../errors.js';\nimport { parseDiscoveryOpts } from './_discovery-opts.js';\nimport { DISCOVER_MAX_ORDERS_DEFAULT } from '../library-defaults.js';\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph to read: catalog, canonical, or both. Use the same value as the discover run.'),\n {\n name: '--anchor',\n valueStyle: 'attached',\n repeatable: true,\n description: 'Override a numeric anchor as k=v or k=v,k2=v2.',\n defaultValue: 'mass=M_sun',\n },\n {\n name: '--max-orders',\n valueStyle: 'attached',\n description: 'Magnitude-clash threshold. A larger value keeps more pairs promising.',\n defaultValue: DISCOVER_MAX_ORDERS_DEFAULT,\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt ground <quantityA> <quantityB> [--source=catalog|canonical|both]\n [--anchor=k=v,...] [--max-orders=N] [--json]\n The epistemic-grounding ledger for one discovery candidate a≡b: which\n falsifiers PASSED, which ABSTAINED (gaps), and the honest ceiling — no\n mechanism test, no data test (permanent for a dimensional candidate;\n real mechanism/data live in \\`upt confront\\`).\n Pass the same --source (default catalog), --anchor and --max-orders\n as the \\`upt discover\\` run that listed the pair.`;\n\nconst EPISTEMICS =\n '(candidate grounding is a review surface; mechanism/data live in `upt confront`, not candidate space)';\n\nconst ALL_SOURCES: readonly SourceName[] = ['catalog', 'canonical', 'both'];\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const { graph, label, source } = resolveGraph(api, args.flags);\n const opts = parseDiscoveryOpts(api, args.flags);\n const [a, b] = args.positionals;\n if (!a || !b) {\n throw new UsageError('upt ground needs two quantity names (a b). See `upt help`.');\n }\n\n const pairs = (c: { a: string; b: string }) => (c.a === a && c.b === b) || (c.a === b && c.b === a);\n // A graph's funnel runs only when both names are quantities of that graph: a\n // name no graph carries is answered without running three funnels.\n const quantities = (edges: readonly { target: { name: string }; sources: readonly { name: string }[] }[]): Set<string> =>\n new Set(edges.flatMap((e) => [e.target.name, ...e.sources.map((q) => q.name)]));\n const bothNamed = (edges: Parameters<typeof quantities>[0]): boolean => {\n const names = quantities(edges);\n return names.has(a) && names.has(b);\n };\n // A name no graph holds is a bad argument (exit 1). A pair every graph holds and no\n // funnel pairs is a computed absence: exit 0 with its envelope, the rule `search` with no\n // match and `confront` with a refusal follow (Tom's review of #502).\n const graphs = ALL_SOURCES.map((s) => (s === source ? graph : resolveGraph(api, new Map([['source', [s]]])).graph));\n const held = new Set(graphs.flatMap((g) => [...quantities(g)]));\n for (const name of [a, b]) {\n if (!held.has(name)) throw new CliError(`upt ground: '${name}' is not a quantity of any graph (${ALL_SOURCES.join(', ')})`);\n }\n const cand = bothNamed(graph) ? api.rankDiscoveries(graph, opts).find(pairs) : undefined;\n if (!cand) {\n const elsewhere = ALL_SOURCES.filter((s) => s !== source).filter((s) => {\n const other = graphs[ALL_SOURCES.indexOf(s)]!;\n return bothNamed(other) && api.rankDiscoveries(other, opts).some(pairs);\n });\n const anchorFlags = (args.flags.get('anchor') ?? []).map((v) => ` --anchor=${v}`).join('');\n const ordersFlag = args.flags.has('max-orders') ? ` --max-orders=${args.flags.get('max-orders')!.at(-1)}` : '';\n const sentence =\n elsewhere.length > 0\n ? `'${a}' ≟ '${b}' is not a candidate in the ${source} graph, but it is in ` +\n `${elsewhere.join(' and ')}: upt ground --source=${elsewhere[0]}${anchorFlags}${ordersFlag} ${a} ${b}`\n : `no discovery candidate pairs '${a}' with '${b}' in any of ${ALL_SOURCES.join(', ')} — ` +\n 'they may not share a dimension, or are already connected (not a cross-cluster coincidence).';\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'ground',\n source,\n anchor: { groundTruth: groundTruthAnchor(api, opts) },\n options: { ...opts },\n result: { a, b, candidate: null, searched: [...ALL_SOURCES], elsewhere, note: sentence },\n },\n ctx.write,\n );\n return 0;\n }\n out(`\\n● ${a} ≟ ${b} [no candidate] [source: ${label}]`);\n out(` ${sentence}`);\n return 0;\n }\n\n const g = api.describeGrounding(cand);\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'ground',\n source,\n anchor: { groundTruth: groundTruthAnchor(api, opts) },\n options: { ...opts },\n result: { a: cand.a, b: cand.b, verdict: cand.verdict, grounding: g, magnitudeDerived: cand.magnitudeDerived ?? [] },\n },\n ctx.write,\n );\n return 0;\n }\n\n out(`\\n● ${cand.a} ≟ ${cand.b} [${cand.verdict}] [source: ${label}]`);\n out(` ${groundTruthLine(groundTruthAnchor(api, opts))}`);\n out(EPISTEMICS + '\\n');\n out(` passed: ${g.passed.join(', ') || '—'}`);\n out(` gaps: ${g.gaps.join(', ') || '—'}`);\n // A magnitude-clash row's grounding states no magnitude line, so where a magnitude came from its\n // own equation is said here, for every verdict.\n if ((cand.magnitudeDerived ?? []).length > 0) {\n out(` magnitude: ${cand.magnitudeDerived!.join(', ')} from its own equation (the sourced table and the constants, not the anchor)`);\n }\n out(\n ` ceiling: mechanism-tested ${g.mechanismTested} · data-tested ${g.dataTested} ` +\n '(permanent for a dimensional candidate — see `upt confront`)',\n );\n return 0;\n}\n\nexport const command: Command = {\n name: 'ground',\n aliases: [],\n positionals: { max: 2 },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Show which falsifiers ran on one discovery candidate, and which abstained.',\n example: 'upt ground landauer-erasure-energy gap-energy',\n group: 'discovery',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/map.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/map.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAU/E,OAAO,KAAK,EACV,UAAU,EAUX,MAAM,kBAAkB,CAAC;AAoJ1B;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAazG;AA6qBD,eAAO,MAAM,OAAO,EAAE,OASrB,CAAC"}
|
package/dist/cli/commands/map.js
CHANGED
|
@@ -19,6 +19,7 @@ import { resolveGraph, coreAnchor, coreLine, groundTruthAnchor, groundTruthLine
|
|
|
19
19
|
import { emitJson } from '../output.js';
|
|
20
20
|
import { publishedUrl } from '../published-url.js';
|
|
21
21
|
import { UsageError, CliError, EXIT_CHECK_FAILED } from '../errors.js';
|
|
22
|
+
import { integerFlag } from '../numeric-flag.js';
|
|
22
23
|
import { classifyDetermination } from '../determination.js';
|
|
23
24
|
import { parseDiscoveryOpts } from './_discovery-opts.js';
|
|
24
25
|
import * as atlasMap from './_atlas-map.js';
|
|
@@ -55,8 +56,15 @@ const FLAGS = [
|
|
|
55
56
|
{ name: '--bind-short', valueStyle: 'none', description: 'Bind a one-letter catalog name in --equation. Without it, those names are reported and not bound.' },
|
|
56
57
|
{ name: '--natural', valueStyle: 'none', description: 'Set ħ = c = 1 when a dimension difference is a power of those constants.' },
|
|
57
58
|
{ name: '--geometrized', valueStyle: 'none', description: 'With the natural-unit rules, also set G = 1.' },
|
|
59
|
+
{ name: '--communities', valueStyle: 'none', description: 'Also print the layout communities (Louvain, heuristic) of the largest component. A drawing aid, not physics.' },
|
|
60
|
+
{ name: '--cycles', valueStyle: 'none', description: 'Also print the derivation cycles: strongly connected components of the directed source→target quantity graph.' },
|
|
61
|
+
{ name: '--rank-hubs', valueStyle: 'none', description: 'Also rank quantities by betweenness centrality (normalised). Computed only when asked.' },
|
|
58
62
|
JSON_FLAG,
|
|
59
63
|
];
|
|
64
|
+
/** How many hubs `--rank-hubs` prints in text; `--json` carries every quantity. */
|
|
65
|
+
const HUBS_SHOWN = 10;
|
|
66
|
+
/** Flags that add a structure section to the text and --json forms, and mean nothing on a diagram. */
|
|
67
|
+
const STRUCTURE_FLAGS = ['communities', 'cycles', 'rank-hubs'];
|
|
60
68
|
const HELP = `upt map [--source=catalog|canonical|both] [--format=text|mermaid|dot|svg]
|
|
61
69
|
[--proposed [--anchor=k=v,...] [--max-orders=N]] [--out=PATH]
|
|
62
70
|
[--equation "TARGET = EXPR" [--equation-only] [--verbose] [--bind-short]
|
|
@@ -141,6 +149,14 @@ const HELP = `upt map [--source=catalog|canonical|both] [--format=text|mermaid|d
|
|
|
141
149
|
unresolved are counted apart.
|
|
142
150
|
Every atlas view states how many of the atlas's models and bridges it
|
|
143
151
|
shows, in text, --json and --format=mermaid|dot|svg.
|
|
152
|
+
--communities, --cycles and --rank-hubs each add one section to the
|
|
153
|
+
text report (and a key to --json); they do not apply to a diagram.
|
|
154
|
+
--communities lists the layout communities (Louvain, heuristic) of the
|
|
155
|
+
largest component: where a drawing may place quantities together, never
|
|
156
|
+
a physics claim. --cycles lists the derivation cycles (strongly
|
|
157
|
+
connected components of the directed source→target quantity graph),
|
|
158
|
+
where over-determination lives. --rank-hubs ranks quantities by
|
|
159
|
+
betweenness centrality (normalised; computed only when asked).
|
|
144
160
|
e.g. upt map --relation=derivation --source=both
|
|
145
161
|
upt map --around=temperature --depth=2 --source=catalog
|
|
146
162
|
upt map --route=model-pendulum,model-lc
|
|
@@ -208,9 +224,6 @@ function parseFilter(raw, allowed, flag) {
|
|
|
208
224
|
}
|
|
209
225
|
return raw;
|
|
210
226
|
}
|
|
211
|
-
// Convert the derived identity-consequence proposals into viz junctions
|
|
212
|
-
// (gray-dashed, status 'proposed'). The library never imports proposed-bridges;
|
|
213
|
-
// the CLI does the conversion, keeping the epistemic firewall intact.
|
|
214
227
|
function proposedJunctions(api, graph, flags) {
|
|
215
228
|
const opts = parseDiscoveryOpts(api, flags);
|
|
216
229
|
const ranked = api.rankDiscoveries(graph, opts);
|
|
@@ -220,6 +233,7 @@ function proposedJunctions(api, graph, flags) {
|
|
|
220
233
|
status: 'proposed',
|
|
221
234
|
sources: (p.governing || []).map((g) => g.name),
|
|
222
235
|
target: p.target.name,
|
|
236
|
+
magnitudeEvidence: p.derivedFrom.identification.magnitudeEvidence,
|
|
223
237
|
}));
|
|
224
238
|
}
|
|
225
239
|
// Build the catalog quantity name→dimension map for the chosen graph, then run
|
|
@@ -346,8 +360,46 @@ function printEquationReport(api, model, user, out, comparisons = []) {
|
|
|
346
360
|
}
|
|
347
361
|
}
|
|
348
362
|
}
|
|
363
|
+
/** Compute only the sections asked for; `rankHubs` is the betweenness pass the default path never runs. */
|
|
364
|
+
async function structureSections(api, graph, flags) {
|
|
365
|
+
return {
|
|
366
|
+
...(flags.has('communities') ? { communities: api.communitiesOf(graph) } : {}),
|
|
367
|
+
...(flags.has('cycles') ? { cycles: api.derivationCycles(graph) } : {}),
|
|
368
|
+
...(flags.has('rank-hubs') ? { hubs: await api.rankHubs(graph) } : {}),
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
/** The text of the structure sections, in flag order; empty when none was asked for. A number goes through `formatQuantity`. */
|
|
372
|
+
function structureLines(s, formatQuantity) {
|
|
373
|
+
const lines = [];
|
|
374
|
+
if (s.communities !== undefined) {
|
|
375
|
+
const c = s.communities;
|
|
376
|
+
lines.push(` ${c.method} of the largest component (${c.componentSize} quantities) — a drawing aid, not physics:`);
|
|
377
|
+
if (c.communities.length === 0)
|
|
378
|
+
lines.push(' none (the graph has no component)');
|
|
379
|
+
c.communities.forEach((com, i) => lines.push(` ${i + 1}. (${com.size}) ${com.quantities.join(', ')}`));
|
|
380
|
+
lines.push('');
|
|
381
|
+
}
|
|
382
|
+
if (s.cycles !== undefined) {
|
|
383
|
+
const head = s.cycles.length === 0 ? 'none — the quantity graph is acyclic' : String(s.cycles.length);
|
|
384
|
+
lines.push(` derivation cycles (strongly connected components of source→target, where over-determination lives): ${head}`);
|
|
385
|
+
for (const cyc of s.cycles)
|
|
386
|
+
lines.push(` {${cyc.quantities.join(', ')}} closed by ${cyc.edges.join(', ')}`);
|
|
387
|
+
lines.push('');
|
|
388
|
+
}
|
|
389
|
+
if (s.hubs !== undefined) {
|
|
390
|
+
const shown = Math.min(HUBS_SHOWN, s.hubs.length);
|
|
391
|
+
lines.push(` hubs by betweenness centrality (normalised; top ${shown} of ${s.hubs.length} quantities; a cut quantity of the drawing, not a central law):`);
|
|
392
|
+
for (const h of s.hubs.slice(0, shown))
|
|
393
|
+
lines.push(` ${h.quantity.padEnd(40)} ${formatQuantity(h.betweenness, 3)} (degree ${h.degree})`);
|
|
394
|
+
lines.push('');
|
|
395
|
+
}
|
|
396
|
+
// Sections are separated by one blank line; the closing line of the report brings its own.
|
|
397
|
+
while (lines.length > 0 && lines[lines.length - 1] === '')
|
|
398
|
+
lines.pop();
|
|
399
|
+
return lines;
|
|
400
|
+
}
|
|
349
401
|
/** Flags that shape the equation graph, and so mean nothing on an atlas view. */
|
|
350
|
-
const GRAPH_ONLY_FLAGS = ['source', 'around', 'depth', 'equation', 'equation-only', 'proposed', 'max-orders', 'anchor'];
|
|
402
|
+
const GRAPH_ONLY_FLAGS = ['source', 'around', 'depth', 'equation', 'equation-only', 'proposed', 'max-orders', 'anchor', ...STRUCTURE_FLAGS];
|
|
351
403
|
/** Flags that only an atlas view reads. */
|
|
352
404
|
const ATLAS_ONLY_FLAGS = ['all-routes', 'max-routes', 'stored', 'run'];
|
|
353
405
|
async function runAtlasView(ctx, route, family, observable) {
|
|
@@ -371,8 +423,9 @@ async function runAtlasView(ctx, route, family, observable) {
|
|
|
371
423
|
const maxRaw = lastValue(args.flags, 'max-routes');
|
|
372
424
|
if (maxRaw !== undefined && !allRoutes)
|
|
373
425
|
throw new CliError('upt map: --max-routes needs --all-routes');
|
|
374
|
-
|
|
375
|
-
|
|
426
|
+
// The grammar first (`0x10` is usage, exit 2); the 1..ceiling range after (exit 1).
|
|
427
|
+
const maxRoutes = maxRaw === undefined ? atlasMap.DEFAULT_MAX_ROUTES : integerFlag('map', '--max-routes', maxRaw);
|
|
428
|
+
if (maxRoutes < 1 || maxRoutes > atlasMap.MAX_ROUTES_CEILING) {
|
|
376
429
|
throw new CliError(`upt map: --max-routes=${maxRaw} must be an integer from 1 to ${atlasMap.MAX_ROUTES_CEILING}`);
|
|
377
430
|
}
|
|
378
431
|
if (args.flags.has('stored') && args.flags.has('run')) {
|
|
@@ -512,8 +565,9 @@ async function runReport(ctx) {
|
|
|
512
565
|
let focus = null;
|
|
513
566
|
let fullGraph = wholeGraph;
|
|
514
567
|
if (around !== undefined) {
|
|
515
|
-
|
|
516
|
-
|
|
568
|
+
// The grammar first (`1e1` is usage, exit 2); the 1..MAX_DEPTH range after (exit 1).
|
|
569
|
+
const depth = depthRaw === undefined ? DEFAULT_DEPTH : integerFlag('map', '--depth', depthRaw);
|
|
570
|
+
if (depth < 1 || depth > MAX_DEPTH)
|
|
517
571
|
throw new CliError(`upt map: --depth=${depthRaw} must be an integer from 1 to ${MAX_DEPTH}`);
|
|
518
572
|
const known = new Set(wholeGraph.flatMap((e) => [...e.sources.map((q) => q.name), e.target.name]));
|
|
519
573
|
const name = api.resolveQuantityName(around, known);
|
|
@@ -555,6 +609,13 @@ async function runReport(ctx) {
|
|
|
555
609
|
if (isJson && fmt !== 'text') {
|
|
556
610
|
throw new UsageError('upt: pick one output form: --json or --format');
|
|
557
611
|
}
|
|
612
|
+
const structureAsked = STRUCTURE_FLAGS.filter((f) => args.flags.has(f));
|
|
613
|
+
if (structureAsked.length > 0 && fmt !== 'text') {
|
|
614
|
+
const named = structureAsked.map((f) => `--${f}`).join(', ');
|
|
615
|
+
throw new UsageError(`upt map: ${named} print${structureAsked.length === 1 ? 's' : ''} text or --json; ${structureAsked.length === 1 ? 'it does' : 'they do'} not apply to --format=${fmt}`);
|
|
616
|
+
}
|
|
617
|
+
// Computed only when asked, over the same filtered edge list the linkage map reads.
|
|
618
|
+
const structure = await structureSections(api, graph, args.flags);
|
|
558
619
|
// --equation injects a user-supplied "TARGET = EXPR" as a 'user' junction.
|
|
559
620
|
let user = null;
|
|
560
621
|
let comparisons = [];
|
|
@@ -599,7 +660,9 @@ async function runReport(ctx) {
|
|
|
599
660
|
// whole catalog, and the model then judges each overlay junction under the
|
|
600
661
|
// same filter as every other junction. Computed once for every output form.
|
|
601
662
|
const proposed = args.flags.has('proposed') ? proposedJunctions(api, wholeGraph, args.flags) : null;
|
|
602
|
-
|
|
663
|
+
// The drawing reads a plain junction; the magnitude-evidence flag is the list's and `--json`'s.
|
|
664
|
+
const drawn = (proposed ?? []).map((p) => ({ id: p.id, label: p.label, status: p.status, sources: p.sources, target: p.target }));
|
|
665
|
+
const overlay = (extra) => [...drawn, ...extra];
|
|
603
666
|
if (isJson) {
|
|
604
667
|
const linkage = api.linkageMap(graph);
|
|
605
668
|
let landing;
|
|
@@ -629,10 +692,13 @@ async function runReport(ctx) {
|
|
|
629
692
|
anchor,
|
|
630
693
|
result: {
|
|
631
694
|
...(equation != null && (equationOnly || !args.flags.has('verbose')) ? {} : { linkage }),
|
|
632
|
-
...(proposed === null
|
|
695
|
+
...(proposed === null
|
|
696
|
+
? {}
|
|
697
|
+
: { proposed: proposed.map((p) => ({ id: p.id, target: p.target, sources: p.sources, magnitudeEvidence: p.magnitudeEvidence })) }),
|
|
633
698
|
...(edgeLegend !== null ? { filter: edgeStats } : {}),
|
|
634
699
|
...(focus !== null ? { focus } : {}),
|
|
635
700
|
...(user ? { landing, userEquation } : {}),
|
|
701
|
+
...structure,
|
|
636
702
|
},
|
|
637
703
|
}, write);
|
|
638
704
|
return exitCode;
|
|
@@ -716,7 +782,8 @@ async function runReport(ctx) {
|
|
|
716
782
|
for (const p of proposed) {
|
|
717
783
|
// No free input: every governing quantity of the derived relation is a registered constant.
|
|
718
784
|
const sources = p.sources.length === 0 ? '{} (no sources: every input is a registered constant)' : `{${p.sources.join(', ')}}`;
|
|
719
|
-
|
|
785
|
+
const evidence = p.magnitudeEvidence ? '' : ' (from an identification with no magnitude evidence)';
|
|
786
|
+
out(` ${p.id}: ${p.target} ← ${sources}${evidence}`);
|
|
720
787
|
}
|
|
721
788
|
if (proposed.length === 0)
|
|
722
789
|
out(' (none at this anchor and --max-orders)');
|
|
@@ -734,6 +801,12 @@ async function runReport(ctx) {
|
|
|
734
801
|
}
|
|
735
802
|
out(` ○ isolated (${m.isolated.length}) — share no quantity with any other edge:`);
|
|
736
803
|
out(` ${m.isolated.length === 0 ? 'none' : m.isolated.join(', ')}`);
|
|
804
|
+
const structureText = structureLines(structure, api.formatQuantity);
|
|
805
|
+
if (structureText.length > 0) {
|
|
806
|
+
out('');
|
|
807
|
+
for (const line of structureText)
|
|
808
|
+
out(line);
|
|
809
|
+
}
|
|
737
810
|
out('\n (a structural map — shared-quantity connectivity, NOT a credibility signal)');
|
|
738
811
|
return exitCode;
|
|
739
812
|
}
|