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":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt eval` — evaluate the caller's own scalar formula (safe — arithmetic\n * only). Transposed verbatim from bin/upt.mjs's `evalCmd()` (lines\n * 290-310), plus `--json`. `--debug`/`--json` are now declared flags\n * (parsed by `args.ts`), so the positionals `evalCmd` used to filter\n * `--debug` out of by hand are already clean — the `expr`/`name=value`\n * positional-parsing contract is otherwise unchanged.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson } from '../output.js';\nimport { CliError, UsageError } from '../errors.js';\nimport { formulaParserLabel } from '../version.js';\nimport { FormulaUsageError } from '../euler-guard.js';\nimport { codataScope } from '../eval-numbers.js';\nimport { splitAssignments } from '../bindings.js';\nimport type { UnitMode } from '../../dimensional/natural-units.js';\n\nconst FLAGS: FlagSpec[] = [\n { name: '--debug', valueStyle: 'none', description: 'Print the formula parser name and version on stderr.' },\n JSON_FLAG,\n {\n name: '--show-parser',\n valueStyle: 'none',\n description: 'Print mathts. With no formula, that is the whole output and the exit code is 0.',\n },\n { name: '--natural', valueStyle: 'none', description: 'Set ħ = c = 1 (and h = 2π) when reading values.' },\n { name: '--geometrized', valueStyle: 'none', description: 'Set ħ = c = G = 1 when reading values.' },\n];\n\n/**\n * Read `name=value` bindings. A missing `=` is a usage error (exit 2) and a\n * name given twice is refused (exit 1), by the one splitter every command uses.\n * A value that is not a finite number or a known unit is a bad value\n * (exit 1), the same code `upt evaluate` uses. A value is a number, a\n * unit (`1Msun`), or an expression of constants and units (`0.6*c`, `pi/2`).\n * `T`, `temperature`, `temp`, and `T_K` speak kelvin. An energy on that\n * name is `k_B T`, using the explicit `k_B` when there is one.\n */\nfunction parseScope(\n api: CommandCtx['api'],\n args: readonly string[],\n mode: UnitMode,\n): { scope: Record<string, number>; notes: string[] } {\n const scope: Record<string, number> = {};\n const notes: string[] = [];\n const assignments = splitAssignments('eval', 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 for (const a of assignments) {\n try {\n const read = api.readNamedBinding(a.name, a.raw, { mode, siblings });\n scope[a.name] = read.value;\n for (const note of read.notes) if (!notes.includes(note)) notes.push(note);\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt eval: ${e.message}`);\n const msg = e instanceof api.UnitError ? e.message : (e as Error).message;\n throw new CliError(`upt eval: '${a.assignment}' is not a finite number or a known unit. ${msg}`);\n }\n }\n try {\n return { scope: api.expandSynonymValues(scope), notes };\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt eval: ${e.message}`);\n throw e;\n }\n}\n\nconst HELP = `upt eval \"<formula>\" name=value ...\n Evaluate YOUR OWN scalar formula (safe — arithmetic only). Knows the\n constants pi and tau and the functions sqrt, cbrt, exp, ln, log\n (natural, = ln), log10, log2, abs, sin, cos, tan, asin, acos, atan,\n sinh, cosh, tanh, pow, atan2. log is the NATURAL logarithm: use log10\n or log2 for base 10 or 2. A bare e is the elementary charge (the\n CODATA value). E is energy: the binding is its own argument, \\`upt eval E E=1eV\\`. Euler's number is\n exp(x), for example exp(1), never a bare e and never the name euler.\n e_charge is the same charge.\n An explicit e=<number> replaces the CODATA value. CODATA\n names are filled in when you omit them: every registered constant\n (G, c, hbar, h, k_B, e, ln2, epsilon_0, sigma_sb, b, GM_sun, Msun_iau)\n and the aliases e_charge, m_e, m_p, m_proton, N_A, F, eps0, mu0, mu_0, kB, M_sun.\n m_p and m_proton are the proton mass. N_A is the Avogadro constant.\n F is the Faraday constant, N_A times the elementary charge. A bare\n sigma is not the Stefan–Boltzmann constant; write sigma_sb. The tesla\n takes an SI prefix (12nT, 12uT); a bare T is still the tesla and Ts is\n still a terasecond. A value may be a\n number, a unit (M=1Msun, B=1T, x=1AU) or an expression of those\n constants and units (v=0.6*c, theta=pi/2). T, temperature, temp, and\n T_K are kelvin: an energy on that name is k_B T, and any other\n dimension is an error. A binding is read by the same MathTS\n parser as the formula, so write 2*pi; a bare e there is the elementary charge.\n --natural sets ħ = c = 1 (h = 2π); --geometrized also\n sets G = 1. --show-parser prints mathts and, with no\n formula, exits 0. With --json that answer is a JSON envelope.\n --debug prints the parser and its version to stderr.\n An unknown function fails and names a documented equivalent where one\n exists (lg → log10).\n e.g. upt eval \"hbar*c^3/(8*pi*G*M*k_B)\" M=1.989e30\n (hbar, c, G and k_B are registered constants; M is bound)`;\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out, err } = ctx;\n const debug = args.flags.has('debug');\n const isJson = args.flags.has('json');\n const positionals = args.positionals;\n const kind = await api.getFormulaParserKind();\n\n const expr = positionals[0];\n if (args.flags.has('show-parser') && !expr) {\n if (isJson) {\n emitJson({ command: 'eval', result: { parser: kind } }, ctx.write);\n return 0;\n }\n out(kind);\n return 0;\n }\n if (!expr) {\n throw new UsageError('upt eval needs a formula, e.g. upt eval \"a*b^2\" a=2 b=3');\n }\n\n const parser = await api.getFormulaParser();\n if (debug) err(`[parser: ${formulaParserLabel(kind)}]`);\n\n let cf;\n try {\n cf = parser.parse(expr);\n } catch (e) {\n // The parser's message carries its own `parse error:` label.\n throw new FormulaUsageError((e as Error).message, kind);\n }\n\n if (args.flags.has('geometrized') && args.flags.has('natural')) {\n throw new UsageError('upt eval: pick one unit mode: --natural (ħ = c = 1) or --geometrized (ħ = c = G = 1)');\n }\n const mode: UnitMode = args.flags.has('geometrized') ? 'geometrized' : args.flags.has('natural') ? 'natural' : 'si';\n const parsed = parseScope(api, positionals.slice(1), mode);\n const scope = { ...codataScope(mode), ...parsed.scope };\n\n const missing = cf.variables.filter((v) => !(v in scope));\n if (missing.length) {\n const energyHint = missing.includes('E')\n ? ' E is energy. The binding is its own argument: upt eval E E=1eV.'\n : '';\n throw new FormulaUsageError(\n `missing values for: ${missing.join(', ')} (free variables: ${cf.variables.join(', ') || 'none'}).${energyHint}`,\n kind,\n );\n }\n\n // A bare e is the CODATA charge. Subtracting it from a number is not\n // eccentricity, and the numeric result is indistinguishable from 1.\n // A caller who bound e chose a different quantity.\n if (!('e' in parsed.scope)) {\n const checked = api.builtinFormulaDimensionChecker().check(expr, {});\n if (!checked.ok && checked.elementaryChargeMixed === true) {\n throw new FormulaUsageError(checked.error!, kind);\n }\n }\n\n const notes: string[] = [...parsed.notes];\n if (mode === 'si') for (const note of api.constantNotes(cf.variables)) notes.push(`note: ${note}`);\n for (const note of notes) err(note);\n\n // A non-finite result (`ln(-1)`, `1/0`) is a bad value at the point: exit 1, by class.\n // An unknown function or symbol is a malformed formula: exit 2.\n let value: number;\n try {\n value = cf.evaluate(scope);\n } catch (e) {\n if (e instanceof api.FormulaValueError) throw new CliError(`upt eval: ${e.message}`);\n throw new FormulaUsageError((e as Error).message, kind);\n }\n\n if (isJson) {\n emitJson(\n {\n command: 'eval',\n result: { value, ...(notes.length === 0 ? {} : { notes }), ...(mode === 'si' ? {} : { units: mode }) },\n },\n ctx.write,\n );\n return 0;\n }\n\n out(String(value));\n return 0;\n}\n\nexport const command: Command = {\n name: 'eval',\n aliases: ['calc'],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Evaluate a scalar formula. A bare e is the elementary charge; Euler\\'s number is exp(x).',\n example: 'upt eval \"2*pi*sqrt(1/9.81)\"',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt eval` — evaluate the caller's own scalar formula (safe — arithmetic\n * only). Transposed verbatim from bin/upt.mjs's `evalCmd()` (lines\n * 290-310), plus `--json`. `--debug`/`--json` are now declared flags\n * (parsed by `args.ts`), so the positionals `evalCmd` used to filter\n * `--debug` out of by hand are already clean — the `expr`/`name=value`\n * positional-parsing contract is otherwise unchanged.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson } from '../output.js';\nimport { CliError, UsageError } from '../errors.js';\nimport { formulaParserLabel } from '../version.js';\nimport { FormulaUsageError } from '../euler-guard.js';\nimport { codataScope } from '../eval-numbers.js';\nimport { splitAssignments } from '../bindings.js';\nimport type { UnitMode } from '../../dimensional/natural-units.js';\n\nconst FLAGS: FlagSpec[] = [\n { name: '--debug', valueStyle: 'none', description: 'Print the formula parser name and version on stderr.' },\n JSON_FLAG,\n {\n name: '--show-parser',\n valueStyle: 'none',\n description: 'Print mathts. With no formula, that is the whole output and the exit code is 0.',\n },\n { name: '--natural', valueStyle: 'none', description: 'Set ħ = c = 1 (and h = 2π) when reading values.' },\n { name: '--geometrized', valueStyle: 'none', description: 'Set ħ = c = G = 1 when reading values.' },\n];\n\n/**\n * Read `name=value` bindings. A missing `=` is a usage error (exit 2) and a\n * name given twice is refused (exit 1), by the one splitter every command uses.\n * A value that is not a finite number or a known unit is a bad value\n * (exit 1), the same code `upt evaluate` uses. A value is a number, a\n * unit (`1Msun`), or an expression of constants and units (`0.6*c`, `pi/2`).\n * `T`, `temperature`, `temp`, and `T_K` speak kelvin. An energy on that\n * name is `k_B T`, using the explicit `k_B` when there is one.\n */\nfunction parseScope(\n api: CommandCtx['api'],\n args: readonly string[],\n mode: UnitMode,\n): { scope: Record<string, number>; notes: string[] } {\n const scope: Record<string, number> = {};\n const notes: string[] = [];\n const assignments = splitAssignments('eval', 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 for (const a of assignments) {\n try {\n const read = api.readNamedBinding(a.name, a.raw, { mode, siblings });\n scope[a.name] = read.value;\n for (const note of read.notes) if (!notes.includes(note)) notes.push(note);\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt eval: ${e.message}`);\n const msg = e instanceof api.UnitError ? e.message : (e as Error).message;\n throw new CliError(`upt eval: '${a.assignment}' is not a finite number or a known unit. ${msg}`);\n }\n }\n try {\n return { scope: api.expandSynonymValues(scope), notes };\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt eval: ${e.message}`);\n throw e;\n }\n}\n\nconst HELP = `upt eval \"<formula>\" name=value ...\n Evaluate YOUR OWN scalar formula (safe — arithmetic only). Knows the\n constants pi and tau and the functions sqrt, cbrt, exp, ln, log\n (natural, = ln), log10, log2, abs, sin, cos, tan, asin, acos, atan,\n sinh, cosh, tanh, pow, atan2. log is the NATURAL logarithm: use log10\n or log2 for base 10 or 2. A bare e is the elementary charge (the\n CODATA value). E is energy: the binding is its own argument, \\`upt eval E E=1eV\\`. Euler's number is\n exp(x), for example exp(1), never a bare e and never the name euler.\n e_charge is the same charge.\n An explicit e=<number> replaces the CODATA value. CODATA\n names are filled in when you omit them: every registered constant\n (G, c, hbar, h, k_B, e, ln2, epsilon_0, sigma_sb, b, GM_sun, Msun_iau)\n and the aliases e_charge, m_e, m_p, m_proton, N_A, F, eps0, mu0, mu_0, kB, M_sun.\n m_p and m_proton are the proton mass. N_A is the Avogadro constant.\n F is the Faraday constant, N_A times the elementary charge. A bare\n sigma is not the Stefan–Boltzmann constant; write sigma_sb. The tesla\n takes an SI prefix (12nT, 12uT); a bare T is still the tesla and Ts is\n still a terasecond. A value may be a\n number, a unit (M=1Msun, B=1T, x=1AU) or an expression of those\n constants and units (v=0.6*c, theta=pi/2). T, temperature, temp, and\n T_K are kelvin: an energy on that name is k_B T, and any other\n dimension is an error. A binding is read by the same MathTS\n parser as the formula, so write 2*pi; a bare e there is the elementary charge.\n --natural sets ħ = c = 1 (h = 2π); --geometrized also\n sets G = 1. --show-parser prints mathts and, with no\n formula, exits 0. With --json that answer is a JSON envelope.\n --debug prints the parser and its version to stderr.\n An unknown function fails and names a documented equivalent where one\n exists (lg → log10).\n e.g. upt eval \"hbar*c^3/(8*pi*G*M*k_B)\" M=1.989e30\n (hbar, c, G and k_B are registered constants; M is bound)`;\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out, err } = ctx;\n const debug = args.flags.has('debug');\n const isJson = args.flags.has('json');\n const positionals = args.positionals;\n const kind = await api.getFormulaParserKind();\n\n const expr = positionals[0];\n if (args.flags.has('show-parser') && !expr) {\n if (isJson) {\n emitJson({ command: 'eval', result: { parser: kind } }, ctx.write);\n return 0;\n }\n out(kind);\n return 0;\n }\n if (!expr) {\n throw new UsageError('upt eval needs a formula, e.g. upt eval \"a*b^2\" a=2 b=3');\n }\n\n const parser = await api.getFormulaParser();\n if (debug) err(`[parser: ${formulaParserLabel(kind)}]`);\n\n let cf;\n try {\n cf = parser.parse(expr);\n } catch (e) {\n // The parser's message carries its own `parse error:` label.\n throw new FormulaUsageError((e as Error).message, kind);\n }\n\n if (args.flags.has('geometrized') && args.flags.has('natural')) {\n throw new UsageError('upt eval: pick one unit mode: --natural (ħ = c = 1) or --geometrized (ħ = c = G = 1)');\n }\n const mode: UnitMode = args.flags.has('geometrized') ? 'geometrized' : args.flags.has('natural') ? 'natural' : 'si';\n const parsed = parseScope(api, positionals.slice(1), mode);\n const scope = { ...codataScope(mode), ...parsed.scope };\n\n const missing = cf.variables.filter((v) => !(v in scope));\n if (missing.length) {\n const energyHint = missing.includes('E')\n ? ' E is energy. The binding is its own argument: upt eval E E=1eV.'\n : '';\n throw new FormulaUsageError(\n `missing values for: ${missing.join(', ')} (free variables: ${cf.variables.join(', ') || 'none'}).${energyHint}`,\n kind,\n );\n }\n\n // A bare e is the CODATA charge. Subtracting it from a number is not\n // eccentricity, and the numeric result is indistinguishable from 1.\n // A caller who bound e chose a different quantity.\n if (!('e' in parsed.scope)) {\n const checked = api.builtinFormulaDimensionChecker().check(expr, {});\n if (!checked.ok && checked.elementaryChargeMixed === true) {\n throw new FormulaUsageError(checked.error!, kind);\n }\n }\n\n const notes: string[] = [...parsed.notes];\n if (mode === 'si') for (const note of api.constantNotes(cf.variables)) notes.push(`note: ${note}`);\n for (const note of notes) err(note);\n\n // A non-finite result (`ln(-1)`, `1/0`) is a bad value at the point: exit 1, by class.\n // An unknown function or symbol is a malformed formula: exit 2.\n let value: number;\n try {\n value = cf.evaluate(scope);\n } catch (e) {\n if (e instanceof api.FormulaValueError) throw new CliError(`upt eval: ${e.message}`);\n throw new FormulaUsageError((e as Error).message, kind);\n }\n\n if (isJson) {\n emitJson(\n {\n command: 'eval',\n result: { value, ...(notes.length === 0 ? {} : { notes }), ...(mode === 'si' ? {} : { units: mode }) },\n },\n ctx.write,\n );\n return 0;\n }\n\n out(String(value));\n return 0;\n}\n\nexport const command: Command = {\n name: 'eval',\n aliases: ['calc'],\n positionals: { max: Infinity },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Evaluate a scalar formula. A bare e is the elementary charge; Euler\\'s number is exp(x).',\n example: 'upt eval \"2*pi*sqrt(1/9.81)\"',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/evaluate.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/evaluate.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AA+e/E,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { registerCommand } from '../command.js';
|
|
2
2
|
import { commandHelp, JSON_FLAG } from '../flag-help.js';
|
|
3
|
-
import { emitJson } from '../output.js';
|
|
4
|
-
import { coherentUnits, derivedUnitOf
|
|
3
|
+
import { emitJson, emitJsonError } from '../output.js';
|
|
4
|
+
import { coherentUnits, derivedUnitOf } from '../expr-print.js';
|
|
5
5
|
import { splitAssignments } from '../bindings.js';
|
|
6
|
+
import { realFlag } from '../numeric-flag.js';
|
|
6
7
|
import { UsageError } from '../errors.js';
|
|
7
8
|
import { CliError } from '../errors.js';
|
|
8
9
|
import { closedFormRangeLabel } from '../closed-form-range.js';
|
|
@@ -39,8 +40,8 @@ const HELP = `upt evaluate <be-NN | case-id> key=value[unit] ...
|
|
|
39
40
|
(temperature-change, dT) and a --sigma take the interval, with no offset.
|
|
40
41
|
An undeclared key exits 1 instead of being ignored. A declared
|
|
41
42
|
alternate (major_axis_m for a_m) is converted exactly and said so.
|
|
42
|
-
e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 1.456 M_⊙
|
|
43
|
-
|
|
43
|
+
e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 2.896e30 kg (≈ 1.456 M_⊙
|
|
44
|
+
with M_⊙ = 1.989e30 kg; ideal degenerate gas, with m_u)
|
|
44
45
|
upt evaluate be-55 C=1 → quantum Hall σ_xy = e²/h in siemens (R_H = 1/σ_xy = h/e²,
|
|
45
46
|
the von Klitzing constant)
|
|
46
47
|
With no bridge id, lists the evaluable bridges and their declared inputs.
|
|
@@ -101,23 +102,44 @@ function describeParameter(p) {
|
|
|
101
102
|
return (`${p.key} [${p.unit || 'dimensionless'}] ${p.quantity} ${p.symbol}${extras.length > 0 ? ` (${extras.join('; ')})` : ''} — ${p.meaning}` +
|
|
102
103
|
(alts.length > 0 ? `; ${alts.join('; ')}` : ''));
|
|
103
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* The parameter a `--sigma` spelling names, through the same contract the inputs use
|
|
107
|
+
* (`resolveEvaluatorInputs`): the key itself, a declared alternate (`diameter_m` for `a_m`,
|
|
108
|
+
* whose σ is scaled by the alternate's `toKey`), or a synonym spelling of the key. `undefined`
|
|
109
|
+
* when the spelling names none of them.
|
|
110
|
+
*/
|
|
111
|
+
function sigmaSlot(api, parameters, given) {
|
|
112
|
+
const direct = parameters.find((p) => p.key === given);
|
|
113
|
+
if (direct !== undefined)
|
|
114
|
+
return { key: direct.key, unit: direct.unit, factor: 1 };
|
|
115
|
+
for (const p of parameters) {
|
|
116
|
+
const alt = (p.alternates ?? []).find((a) => a.key === given);
|
|
117
|
+
if (alt !== undefined)
|
|
118
|
+
return { key: p.key, unit: p.unit, factor: alt.toKey };
|
|
119
|
+
}
|
|
120
|
+
const viaName = api.resolveQuantityName(given, new Set(parameters.map((p) => p.key)));
|
|
121
|
+
const synonym = viaName === null ? undefined : parameters.find((p) => p.key === viaName);
|
|
122
|
+
return synonym === undefined ? undefined : { key: synonym.key, unit: synonym.unit, factor: 1 };
|
|
123
|
+
}
|
|
104
124
|
function parseUncertainty(api, spec, sigmaArgs, corrArgs, inputs) {
|
|
105
125
|
const sigma = {};
|
|
106
126
|
splitAssignments('evaluate --sigma', sigmaArgs, 'key=u');
|
|
107
127
|
for (const a of sigmaArgs) {
|
|
108
128
|
const m = /^([^=]+)=(.+)$/.exec(a);
|
|
109
129
|
const given = m?.[1];
|
|
110
|
-
|
|
130
|
+
// The same spellings the inputs take: the key, a declared alternate, or a synonym.
|
|
131
|
+
const slot = given === undefined ? undefined : sigmaSlot(api, spec.parameters, given);
|
|
132
|
+
const key = slot?.key;
|
|
111
133
|
if (m !== null && (key === undefined || !(key in inputs))) {
|
|
112
134
|
throw new CliError(`upt evaluate: --sigma '${given}' is not one of the inputs given (${Object.keys(inputs).join(', ')})`);
|
|
113
135
|
}
|
|
114
136
|
// A σ is a difference: a σ in degC takes no 273.15 offset. The value is read
|
|
115
137
|
// by the same binding reader as the input, so an energy on a kelvin slot is k_B T.
|
|
138
|
+
// A σ given under an alternate is scaled by the alternate's factor (a diameter's σ is twice the radius's).
|
|
116
139
|
let u = NaN;
|
|
117
|
-
if (m !== null &&
|
|
118
|
-
const p = spec.parameters.find((x) => x.key === key);
|
|
140
|
+
if (m !== null && slot !== undefined) {
|
|
119
141
|
try {
|
|
120
|
-
u = api.readNamedBinding(given, m[2], { reading: 'difference', declaredUnit:
|
|
142
|
+
u = api.readNamedBinding(given, m[2], { reading: 'difference', declaredUnit: slot.unit }).value * slot.factor;
|
|
121
143
|
}
|
|
122
144
|
catch (e) {
|
|
123
145
|
if (!(e instanceof api.UnitError))
|
|
@@ -137,7 +159,8 @@ function parseUncertainty(api, spec, sigmaArgs, corrArgs, inputs) {
|
|
|
137
159
|
const corr = new Map();
|
|
138
160
|
for (const a of corrArgs) {
|
|
139
161
|
const m = /^([^,=]+),([^,=]+)=(.+)$/.exec(a);
|
|
140
|
-
|
|
162
|
+
// The grammar first (a malformed rho is usage, exit 2), the range after (a bad value, exit 1).
|
|
163
|
+
const rho = m === null ? NaN : realFlag('evaluate', '--corr rho', m[3]);
|
|
141
164
|
if (m === null || !Number.isFinite(rho) || Math.abs(rho) > 1)
|
|
142
165
|
throw new CliError(`upt evaluate: --corr '${a}' is not a,b=<rho in [-1, 1]>`);
|
|
143
166
|
const [x, y] = [m[1], m[2]];
|
|
@@ -308,7 +331,23 @@ async function runCase(ctx, c, rest) {
|
|
|
308
331
|
out(` ${l.id} — ${l.role}`);
|
|
309
332
|
return code;
|
|
310
333
|
}
|
|
334
|
+
/**
|
|
335
|
+
* `--json` answers a refusal in the envelope too (`emitJsonError`), with the exit code the
|
|
336
|
+
* refusal stands for; the text mode reports it on stderr as every command does. A defect
|
|
337
|
+
* (neither error class) propagates either way.
|
|
338
|
+
*/
|
|
311
339
|
async function run(ctx) {
|
|
340
|
+
try {
|
|
341
|
+
return await evaluate(ctx);
|
|
342
|
+
}
|
|
343
|
+
catch (e) {
|
|
344
|
+
if (ctx.args.flags.has('json') && (e instanceof UsageError || e instanceof CliError)) {
|
|
345
|
+
return emitJsonError('evaluate', e, ctx.write);
|
|
346
|
+
}
|
|
347
|
+
throw e;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
async function evaluate(ctx) {
|
|
312
351
|
const { args, api, out } = ctx;
|
|
313
352
|
const [target, ...rest] = args.positionals;
|
|
314
353
|
if (!target) {
|
|
@@ -361,27 +400,23 @@ async function run(ctx) {
|
|
|
361
400
|
throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);
|
|
362
401
|
}
|
|
363
402
|
const spec = found.evaluator;
|
|
364
|
-
const
|
|
365
|
-
|
|
366
|
-
|
|
403
|
+
const key = api.catalogEdgeKey(spec.bridgeId);
|
|
404
|
+
const { inputs, resolved } = resolveInputs(api, key, spec.parameters, rest);
|
|
405
|
+
// The one evaluation, the library's result builder: `run` checks the inputs (missing, unknown,
|
|
406
|
+
// type) before the domain, and the result carries the output's name, unit, meaning and extras.
|
|
407
|
+
let evaluation;
|
|
367
408
|
try {
|
|
368
|
-
|
|
409
|
+
evaluation = api.evaluateResolved(found, inputs, 'all');
|
|
369
410
|
}
|
|
370
411
|
catch (e) {
|
|
371
|
-
throw evaluationFailure(api, e,
|
|
412
|
+
throw evaluationFailure(api, e, key);
|
|
372
413
|
}
|
|
373
414
|
const u = uncertaintyOf(ctx, spec, inputs, (i) => spec.run(i), NOT_INCLUDED);
|
|
374
415
|
const relation = api.primaryRelation(id);
|
|
375
416
|
const notices = relation === undefined ? [] : api.relationNotices(relation);
|
|
376
|
-
|
|
377
|
-
//
|
|
378
|
-
|
|
379
|
-
const outputLabel = {
|
|
380
|
-
name: outputDescriptor.name,
|
|
381
|
-
...(outputDescriptor.dimension === undefined
|
|
382
|
-
? {}
|
|
383
|
-
: { unit: siUnitOf(outputDescriptor.dimension), label: derivedUnitOf(outputDescriptor.dimension, coherentUnits(api.unitRows())) }),
|
|
384
|
-
};
|
|
417
|
+
// The text label is a derived SI unit read from the unit table (`V^2/Hz`); the JSON is the
|
|
418
|
+
// library result itself, whose `unit` is the base form `parseUnit` reads back.
|
|
419
|
+
const label = evaluation.kind === 'unset' ? undefined : derivedUnitOf(evaluation.dimension, coherentUnits(api.unitRows()));
|
|
385
420
|
const unused = api.unusedInputKeys(spec);
|
|
386
421
|
if (args.flags.has('json')) {
|
|
387
422
|
emitJson({
|
|
@@ -391,12 +426,7 @@ async function run(ctx) {
|
|
|
391
426
|
inputs,
|
|
392
427
|
parameters: spec.parameters,
|
|
393
428
|
conversions: conversionsOf(resolved),
|
|
394
|
-
output:
|
|
395
|
-
...result,
|
|
396
|
-
name: outputLabel.name,
|
|
397
|
-
...(outputLabel.unit === undefined ? {} : { unit: outputLabel.unit, dimension: outputDescriptor.dimension }),
|
|
398
|
-
},
|
|
399
|
-
...(spec.outputs.length === 0 ? {} : { extraOutputs: spec.outputs.map(({ name, unit, meaning }) => ({ name, unit, meaning })) }),
|
|
429
|
+
output: evaluation,
|
|
400
430
|
...(unused.length === 0 ? {} : { unusedInputs: unused }),
|
|
401
431
|
...(notices.length === 0 ? {} : { notices }),
|
|
402
432
|
...(u === null ? {} : { uncertainty: u.block }),
|
|
@@ -406,16 +436,13 @@ async function run(ctx) {
|
|
|
406
436
|
}
|
|
407
437
|
out(`\n● be-${id} ${spec.name}`);
|
|
408
438
|
printInputs(api.formatExact, out, spec.parameters, inputs, resolved);
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
? k
|
|
417
|
-
: `${k} [${extra.unit}] (${extra.meaning})`;
|
|
418
|
-
out(` ${label} = ${typeof v === 'number' ? api.formatExact(v) : JSON.stringify(v)}`);
|
|
439
|
+
if (evaluation.kind === 'unset') {
|
|
440
|
+
out(` value is unset: ${evaluation.formula} is not finite at these inputs (a dropped factor or a singularity)`);
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
out(` ${evaluation.name} [${label}] = ${api.formatExact(evaluation.value)} — ${evaluation.meaning}`);
|
|
444
|
+
for (const extra of evaluation.extras)
|
|
445
|
+
out(` ${extra.name} [${extra.unit}] = ${api.formatExact(extra.value)} — ${extra.meaning}`);
|
|
419
446
|
}
|
|
420
447
|
for (const key of unused) {
|
|
421
448
|
out(` note: ${key} is required and does not enter the value; the closed form does not use it, so changing it changes nothing`);
|
|
@@ -429,6 +456,7 @@ async function run(ctx) {
|
|
|
429
456
|
export const command = {
|
|
430
457
|
name: 'evaluate',
|
|
431
458
|
aliases: [],
|
|
459
|
+
positionals: { max: Infinity },
|
|
432
460
|
flags: FLAGS,
|
|
433
461
|
help: commandHelp(HELP, FLAGS),
|
|
434
462
|
summary: 'Evaluate a closed-form bridge or an applied case, with units on every input.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/cli/commands/evaluate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt evaluate <be-NN | case-id> key=value …` — numerically evaluate a closed-form /\n * spacetime bridge (the registered evaluators) via its registered evaluator. Closes the gap\n * where `upt explain <be-NN>` redirected to a \"evaluated directly\" capability that\n * did not exist. With no bridge id, lists the evaluable bridges + their inputs.\n * `upt evaluate case-<id> …` runs an applied case (`src/cases/`).\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson } from '../output.js';\nimport { coherentUnits, derivedUnitOf, siUnitOf } from '../expr-print.js';\nimport { splitAssignments } from '../bindings.js';\nimport { UsageError } from '../errors.js';\nimport { CliError } from '../errors.js';\nimport type { AppliedCase, CaseResult, EvaluatorParameter, PropagatedOutput } from '../../cli-api.js';\nimport { closedFormRangeLabel } from '../closed-form-range.js';\n\nconst FLAGS: FlagSpec[] = [\n {\n name: '--sigma',\n valueStyle: 'either',\n repeatable: true,\n description: 'One input uncertainty as key=u, in the input\\'s unit. A temperature uncertainty in degC or degF is a difference.',\n },\n {\n name: '--corr',\n valueStyle: 'either',\n repeatable: true,\n description: 'A pairwise correlation as a,b=rho, used with --sigma.',\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt evaluate <be-NN | case-id> key=value[unit] ...\n Numerically evaluate a closed-form / spacetime bridge (${closedFormRangeLabel()}),\n or an applied case: a whole measurement problem with its parent and\n scalar equations, observable, conditions, regime checks and a route\n to a measurement comparison. A case whose regime check fails prints\n its outputs as NOT QUALIFIED and exits 3.\n e.g. upt evaluate case-resistor-noise T_K=300 R_ohm=1kohm\n R_in_ohm=1Mohm C_in_F=20pF f_lo_Hz=0 f_hi_Hz=10kHz t_avg_s=10\n Every input is declared: its unit, its meaning, and for a length what\n it measures (a radius, a separation, a semi-major axis). A value may\n carry a unit (d_m=1um, R_ohm=1kohm, T_yr=88d, M_kg=1Msun) or an\n expression of constants and units (M_kg=1*M_sun, v=0.6*c); it is\n converted into the declared unit only when the dimensions agree, and a\n bare number is in the declared unit. The same reader accepts --sigma. An absolute temperature in degC\n adds 273.15 K, and one in degF is (degF − 32) × 5/9 + 273.15. A difference slot\n (temperature-change, dT) and a --sigma take the interval, with no offset.\n An undeclared key exits 1 instead of being ignored. A declared\n alternate (major_axis_m for a_m) is converted exactly and said so.\n e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 1.456 M_⊙\n (ideal degenerate gas, with m_u and M_⊙ = 1.989e30 kg)\n upt evaluate be-55 C=1 → quantum Hall σ_xy = e²/h in siemens (R_H = 1/σ_xy = h/e²,\n the von Klitzing constant)\n With no bridge id, lists the evaluable bridges and their declared inputs.\n --sigma key=u (repeatable) gives an input's standard uncertainty;\n --corr a,b=rho its correlation. Propagated to first order (GUM law,\n central-difference sensitivities), with a curvature check per input\n that flags where the linearization is unreliable. An input without\n --sigma is treated as exact. Not included: the evaluator's numerical\n error and model discrepancy (whether the bridge applies).\n e.g. upt evaluate be-58 T_K=300 R_ohm=1000 --sigma T_K=3 --sigma R_ohm=10\n An input outside a relation's validity domain is refused and the message\n names the condition (a weak-field formula inside 10 Schwarzschild radii,\n a negative temperature). A relation's recorded caveat, and the note of a\n registered constant it names, print beside the value.`;\n\n/**\n * An input-contract error (absent, unknown, non-number, non-finite or twice-given\n * input) as the CLI reports it: a bad value (exit 1) under the one `upt evaluate:`\n * prefix. Its message already names the id.\n */\nfunction inputErrorOrSelf(api: CommandCtx['api'], e: unknown): unknown {\n return api.isInputContractError(e) ? new CliError(`upt evaluate: ${e.message}`) : e;\n}\n\n/**\n * What `run` threw, as the CLI reports it. An input error, a domain failure, a carrier-sign\n * failure and a closed form that is not finite at the inputs are each a bad value: exit 1\n * (documented contract), under the one `upt evaluate:` prefix, with the bridge or case named.\n */\nfunction evaluationFailure(api: CommandCtx['api'], e: unknown, label: string): unknown {\n if (api.isInputContractError(e)) return inputErrorOrSelf(api, e);\n if (e instanceof api.FormulaError) return new CliError(`upt evaluate: ${label}: ${e.message}`);\n if (e instanceof Error) return new CliError(`upt evaluate: ${e.message}`);\n return e;\n}\n\n/** Unit and geometry trouble is a bad value (exit 1); a missing `=` is a usage error (exit 2); a key twice is refused. */\nfunction resolveInputs(api: CommandCtx['api'], label: string, parameters: readonly EvaluatorParameter[], args: readonly string[]) {\n splitAssignments('evaluate', args, 'key=value (e.g. mu_e=2)');\n try {\n return api.resolveEvaluatorInputs(parameters, args, label);\n } catch (e) {\n if (e instanceof api.UnitError || e instanceof api.SynonymDisagreementError) {\n throw new CliError(`upt evaluate: ${label}: ${e.message}`);\n }\n throw inputErrorOrSelf(api, e);\n }\n}\n\n/** `d_m [m] plate separation d (geometry: separation) — the gap …` */\nfunction describeParameter(p: EvaluatorParameter): string {\n const extras = [\n ...(p.geometry === undefined ? [] : [`geometry: ${p.geometry}`]),\n ...(p.temperature === undefined ? [] : ['an absolute temperature; degC adds 273.15; degF is (degF − 32)×5/9 + 273.15']),\n ...(p.optional === true ? ['optional'] : []),\n ];\n const alts = (p.alternates ?? []).map((a) => `or give ${a.key}, ${a.meaning}`);\n return (\n `${p.key} [${p.unit || 'dimensionless'}] ${p.quantity} ${p.symbol}${extras.length > 0 ? ` (${extras.join('; ')})` : ''} — ${p.meaning}` +\n (alts.length > 0 ? `; ${alts.join('; ')}` : '')\n );\n}\n\nfunction parseUncertainty(\n api: CommandCtx['api'],\n spec: { readonly parameters: readonly EvaluatorParameter[] },\n sigmaArgs: readonly string[],\n corrArgs: readonly string[],\n inputs: Readonly<Record<string, number>>,\n): { sigma: Record<string, number>; corr: Map<string, number> } {\n const sigma: Record<string, number> = {};\n splitAssignments('evaluate --sigma', sigmaArgs, 'key=u');\n for (const a of sigmaArgs) {\n const m = /^([^=]+)=(.+)$/.exec(a);\n const given = m?.[1];\n const key = given === undefined ? undefined : (api.resolveQuantityName(given, new Set(Object.keys(inputs))) ?? given);\n if (m !== null && (key === undefined || !(key in inputs))) {\n throw new CliError(`upt evaluate: --sigma '${given}' is not one of the inputs given (${Object.keys(inputs).join(', ')})`);\n }\n // A σ is a difference: a σ in degC takes no 273.15 offset. The value is read\n // by the same binding reader as the input, so an energy on a kelvin slot is k_B T.\n let u = NaN;\n if (m !== null && key !== undefined) {\n const p = spec.parameters.find((x) => x.key === key)!;\n try {\n u = api.readNamedBinding(given!, m[2]!, { reading: 'difference', declaredUnit: p.unit }).value;\n } catch (e) {\n if (!(e instanceof api.UnitError)) throw e;\n if (!(e instanceof api.BindingNumberError)) throw new CliError(`upt evaluate: --sigma '${a}': ${e.message}`);\n }\n }\n if (m === null || key === undefined || !Number.isFinite(u) || u < 0) {\n throw new CliError(`upt evaluate: --sigma '${a}' is not key=<finite u ≥ 0>`);\n }\n // Two spellings of one input (`T_K`, `temperature`) are one key here.\n if (key in sigma) throw new CliError(`upt evaluate --sigma: '${key}' is given twice ('${a}'); give one value per name`);\n sigma[key] = u;\n }\n const corr = new Map<string, number>();\n for (const a of corrArgs) {\n const m = /^([^,=]+),([^,=]+)=(.+)$/.exec(a);\n const rho = m === null ? NaN : Number(m[3]);\n if (m === null || !Number.isFinite(rho) || Math.abs(rho) > 1) throw new CliError(`upt evaluate: --corr '${a}' is not a,b=<rho in [-1, 1]>`);\n const [x, y] = [m[1]!, m[2]!];\n if (x === y) throw new CliError(`upt evaluate: --corr '${a}' correlates an input with itself`);\n for (const k of [x, y]) {\n if (!(k in sigma)) throw new CliError(`upt evaluate: --corr names '${k}', which has no --sigma`);\n }\n corr.set(`${x},${y}`, rho);\n }\n if (!api.correlationIsPositiveSemidefinite(Object.keys(sigma), corr)) {\n throw new CliError('upt evaluate: the --corr values are not a valid correlation matrix (not positive semidefinite)');\n }\n return { sigma, corr };\n}\n\nconst NOT_INCLUDED = \"the evaluator's numerical error; model discrepancy (whether the bridge applies at all)\";\n\nconst CASE_NOT_INCLUDED =\n \"the case's numerical error; model discrepancy beyond the regime checks; the regime checks are evaluated at the given inputs, not at ±u\";\n\ninterface Uncertainty {\n readonly block: Record<string, unknown>;\n readonly propagated: Record<string, PropagatedOutput>;\n readonly exactInputs: string[];\n readonly notIncluded: string;\n}\n\nfunction uncertaintyOf(\n ctx: CommandCtx,\n spec: { readonly parameters: readonly EvaluatorParameter[] },\n inputs: Readonly<Record<string, number>>,\n f: (inputs: Record<string, number>) => Record<string, unknown>,\n notIncluded: string,\n): Uncertainty | null {\n const sigmaArgs = ctx.args.flags.get('sigma') ?? [];\n const corrArgs = ctx.args.flags.get('corr') ?? [];\n if (sigmaArgs.length === 0 && corrArgs.length > 0) throw new CliError('upt evaluate: --corr needs --sigma for both inputs');\n if (sigmaArgs.length === 0) return null;\n const { sigma, corr } = parseUncertainty(ctx.api, spec, sigmaArgs, corrArgs, inputs);\n const propagated = ctx.api.propagateEvaluatorUncertainty(f, inputs, sigma, corr);\n const exactInputs = Object.keys(inputs).filter((k) => !(k in sigma));\n return {\n block: {\n method: 'first-order propagation (GUM law), central-difference sensitivities, curvature check at ±u per input',\n sigma,\n correlations: Object.fromEntries(corr),\n outputs: propagated,\n exactInputs,\n notIncluded,\n },\n propagated,\n exactInputs,\n notIncluded,\n };\n}\n\n/** The one number formatter, as every command reads it: through `ctx.api`. */\ntype Fmt = CommandCtx['api']['formatExact'];\n\n/**\n * The value is echoed exactly; σ, the relative %, a sensitivity, a contribution and the\n * curvature ratio are statistics (the sensitivity is a central difference whose trailing\n * digits are noise), so they print at three significant digits.\n */\nfunction printUncertainty(api: CommandCtx['api'], out: CommandCtx['out'], u: Uncertainty): void {\n const g = (x: number | null): string => (x === null ? 'unavailable' : api.formatQuantity(x, 3));\n out(' uncertainty (first-order, GUM law; a sensitivity is not an uncertainty, the contribution is c·u):');\n for (const [name, p] of Object.entries(u.propagated)) {\n out(` ${name} = ${api.formatExact(p.value)} ± ${g(p.u)} (1σ${p.relative === null ? '' : `; relative ${g(p.relative * 100)}%`})`);\n for (const [k, c] of Object.entries(p.contributions)) {\n out(\n ` from ${k}: c = ${g(c.sensitivity)}, c·u = ${g(c.contribution)}` +\n (c.curvatureRatio === null ? '' : `, curvature/linear at ±u = ${g(c.curvatureRatio)}`) +\n (c.note === undefined ? '' : ` — ${c.note}`),\n );\n }\n if (p.unreliable.length > 0) {\n out(` LINEARIZATION UNRELIABLE for ${p.unreliable.join(', ')}: the first-order σ above does not describe what ±u does to it`);\n }\n }\n const corr = Object.entries((u.block as { correlations: Record<string, number> }).correlations);\n out(` correlations: ${corr.length === 0 ? 'none given (inputs independent)' : corr.map(([k, r]) => `${k} = ${r}`).join(', ')}`);\n if (u.exactInputs.length > 0) out(` treated as exact (no --sigma): ${u.exactInputs.join(', ')} — a choice, not a measurement`);\n out(` not included: ${u.notIncluded}`);\n}\n\ntype Resolved = ReturnType<typeof resolveInputs>['resolved'];\n\nconst conversionsOf = (resolved: Resolved) =>\n resolved\n .filter((r) => r.note !== undefined)\n .map((r) => ({ key: r.key, given: r.given, value: r.value, unit: r.unit, ...(r.via === undefined ? {} : { via: r.via }), note: r.note }));\n\nfunction printInputs(fmt: Fmt, out: CommandCtx['out'], parameters: readonly EvaluatorParameter[], inputs: Readonly<Record<string, number>>, resolved: Resolved): void {\n out(' inputs: ' + Object.entries(inputs).map(([k, v]) => `${k}=${fmt(v)}`).join(', '));\n for (const p of parameters) {\n const r = resolved.find((x) => x.key === p.key);\n out(` ${describeParameter(p)}${r?.note === undefined ? '' : `\\n converted: ${r.note}`}`);\n }\n}\n\nconst withUnit = (fmt: Fmt, v: number | null, unit: string): string =>\n v === null ? 'undefined here (its premise fails, or it needs an optional input not given)' : `${fmt(v)}${unit === '' ? '' : ` ${unit}`}`;\n\n/** A violated regime check is a check that ran and failed: exit 3. */\nasync function runCase(ctx: CommandCtx, c: AppliedCase, rest: readonly string[]): Promise<number> {\n const { args, api, out } = ctx;\n const { inputs, resolved } = resolveInputs(api, c.id, c.parameters, rest);\n let result: CaseResult;\n try {\n result = api.runAppliedCase(c.id, inputs);\n } catch (e) {\n throw evaluationFailure(api, e, c.id);\n }\n const u = uncertaintyOf(ctx, c, inputs, (i) => ({ ...api.runAppliedCase(c.id, i).outputs }), CASE_NOT_INCLUDED);\n const failed = result.checks.filter((k) => !k.holds).map((k) => k.id);\n const code = failed.length === 0 ? 0 : 3;\n const regimeLine = c.regimeAt?.(inputs, result.outputs) ?? '';\n\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: {\n caseId: c.id,\n title: c.title,\n qualified: failed.length === 0,\n failedChecks: failed,\n inputs,\n parameters: c.parameters,\n conversions: conversionsOf(resolved),\n governing: c.governing,\n observable: c.observable,\n outputs: c.outputs.map((o) => ({ ...o, value: result.outputs[o.key] ?? null })),\n checks: result.checks,\n ...(c.comparison === undefined ? {} : { comparison: c.comparison }),\n conditions: c.conditions,\n unchecked: result.unchecked,\n notIncluded: c.notIncluded,\n measurement: c.measurement,\n links: c.links,\n ...(regimeLine === '' ? {} : { regimeAt: regimeLine }),\n ...(u === null ? {} : { uncertainty: u.block }),\n },\n },\n ctx.write,\n );\n return code;\n }\n\n out(`\\n● ${c.id} ${c.title}`);\n out(' parent equations (what the scalar result simplifies; not evaluated as the answer):');\n for (const e of c.governing.parent) out(` ${e}`);\n out(' scalar simplification evaluated:');\n for (const e of c.governing.scalar) out(` ${e}`);\n out(` kept and dropped: ${c.governing.distinction}`);\n printInputs(api.formatExact, out, c.parameters, inputs, resolved);\n out(' conditions (boundary, initial, equilibrium):');\n for (const s of c.conditions) out(` - ${s}`);\n out(' outputs:');\n for (const o of c.outputs) out(` ${o.key} = ${withUnit(api.formatExact, result.outputs[o.key] ?? null, o.unit)} — ${o.meaning}`);\n const obs = c.outputs.find((o) => o.key === c.observable)!;\n out(` observable: ${obs.key} = ${withUnit(api.formatExact, result.outputs[obs.key] ?? null, obs.unit)}`);\n out(' regime checks (at the given inputs):');\n if (regimeLine !== '') out(` regime coordinates: ${regimeLine}`);\n for (const k of result.checks) {\n out(` ${k.holds ? 'holds ' : 'VIOLATED'} ${k.id}: ${k.quantity} = ${api.formatExact(k.value)} ${k.op} ${k.bound} — ${k.premise} (${k.threshold})`);\n }\n if (c.comparison !== undefined) {\n const d = result.outputs[c.comparison.deviationKey] ?? null;\n out(\n ` comparison (reported beside the checks, not one of them): ${c.comparison.valueKey} / ${c.comparison.referenceKey} − 1 = ` +\n `${d === null ? 'undefined here' : api.formatExact(d)} — against ${c.comparison.reference}; ${c.comparison.method}`,\n );\n }\n if (result.unchecked.length > 0) {\n out(' stated, not checked:');\n for (const s of result.unchecked) out(` - ${s}`);\n }\n out(\n failed.length === 0\n ? ' QUALIFIED: every regime check holds at these inputs.'\n : ` NOT QUALIFIED: ${failed.join(', ')} violated — the outputs above are outside the stated regime and are not a ` +\n 'qualified prediction at these inputs.',\n );\n if (u !== null) printUncertainty(api, out, u);\n out(' not included in the model:');\n for (const s of c.notIncluded) out(` - ${s}`);\n out(' compare with a measurement:');\n for (const s of c.measurement) out(` - ${s}`);\n out(' rests on:');\n for (const l of c.links) out(` ${l.id} — ${l.role}`);\n return code;\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const [target, ...rest] = args.positionals;\n\n if (!target) {\n const specs = [...api.BRIDGE_EVALUATORS.values()];\n const cases = [...api.APPLIED_CASES.values()];\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: [\n ...specs.map((s) => ({ bridgeId: s.bridgeId, name: s.name, inputKeys: s.inputKeys, parameters: s.parameters })),\n ...cases.map((c) => ({ caseId: c.id, name: c.title, inputKeys: c.parameters.map((p) => p.key), parameters: c.parameters })),\n ],\n },\n ctx.write,\n );\n return 0;\n }\n out('\\nEvaluable bridges (upt evaluate <be-NN> key=value[unit] ...)');\n for (const s of specs) {\n out(` be-${s.bridgeId} ${s.name}`);\n for (const p of s.parameters) out(` ${describeParameter(p)}`);\n }\n out('\\nApplied cases (upt evaluate <case-id> key=value[unit] ...; a violated regime check exits 3)');\n for (const c of cases) {\n out(` ${c.id} ${c.title}`);\n for (const p of c.parameters) out(` ${describeParameter(p)}`);\n out(` e.g. upt evaluate ${c.id} ${c.examples.valid.args.join(' ')}`);\n }\n out('\\n A value may carry a unit (d_m=1um, T_K=25degC, R_ohm=1kohm); a bare number is in the declared unit.');\n return 0;\n }\n\n const appliedCase = api.APPLIED_CASES.get(target.toLowerCase());\n if (appliedCase !== undefined) return runCase(ctx, appliedCase, rest);\n\n let id: number;\n try {\n id = api.parseBridgeId(target);\n } catch {\n throw new UsageError(\n `upt evaluate: '${target}' is not a bridge id (be-<id>) or a case (${[...api.APPLIED_CASES.keys()].join(', ')}). See \\`upt help\\`.`,\n );\n }\n let found: ReturnType<typeof api.resolveEvaluable>;\n try {\n found = api.resolveEvaluable(id);\n } catch {\n throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);\n }\n if (found.evaluator === undefined) {\n throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);\n }\n const spec = found.evaluator;\n const { inputs, resolved } = resolveInputs(api, `be-${spec.bridgeId}`, spec.parameters, rest);\n\n // The one evaluation: `run` checks the inputs (missing, unknown, type) before the domain.\n let result: Record<string, number>;\n try {\n result = spec.run(inputs);\n } catch (e) {\n throw evaluationFailure(api, e, `be-${spec.bridgeId}`);\n }\n\n const u = uncertaintyOf(ctx, spec, inputs, (i) => spec.run(i), NOT_INCLUDED);\n const relation = api.primaryRelation(id);\n const notices = relation === undefined ? [] : api.relationNotices(relation);\n\n const outputDescriptor = api.evaluatorOutput(spec);\n // The label is a derived SI unit read from the unit table (`V^2/Hz`); the JSON keeps the\n // base form `parseUnit` reads back, and the dimension itself, beside it.\n const outputLabel = {\n name: outputDescriptor.name,\n ...(outputDescriptor.dimension === undefined\n ? {}\n : { unit: siUnitOf(outputDescriptor.dimension), label: derivedUnitOf(outputDescriptor.dimension, coherentUnits(api.unitRows())) }),\n };\n const unused = api.unusedInputKeys(spec);\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: {\n bridgeId: id,\n inputs,\n parameters: spec.parameters,\n conversions: conversionsOf(resolved),\n output: {\n ...result,\n name: outputLabel.name,\n ...(outputLabel.unit === undefined ? {} : { unit: outputLabel.unit, dimension: outputDescriptor.dimension }),\n },\n ...(spec.outputs.length === 0 ? {} : { extraOutputs: spec.outputs.map(({ name, unit, meaning }) => ({ name, unit, meaning })) }),\n ...(unused.length === 0 ? {} : { unusedInputs: unused }),\n ...(notices.length === 0 ? {} : { notices }),\n ...(u === null ? {} : { uncertainty: u.block }),\n },\n },\n ctx.write,\n );\n return 0;\n }\n out(`\\n● be-${id} ${spec.name}`);\n printInputs(api.formatExact, out, spec.parameters, inputs, resolved);\n for (const [k, v] of Object.entries(result)) {\n const extra = spec.outputs.find((o) => o.name === k);\n const label =\n k === 'value'\n ? outputLabel.label === undefined\n ? outputLabel.name\n : `${outputLabel.name} [${outputLabel.label}]`\n : extra === undefined\n ? k\n : `${k} [${extra.unit}] (${extra.meaning})`;\n out(` ${label} = ${typeof v === 'number' ? api.formatExact(v) : JSON.stringify(v)}`);\n }\n for (const key of unused) {\n out(` note: ${key} is required and does not enter the value; the closed form does not use it, so changing it changes nothing`);\n }\n for (const notice of notices) out(` ${notice}`);\n if (u !== null) printUncertainty(api, out, u);\n return 0;\n}\n\nexport const command: Command = {\n name: 'evaluate',\n aliases: [],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Evaluate a closed-form bridge or an applied case, with units on every input.',\n example: 'upt evaluate be-63 mu_e=2',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/cli/commands/evaluate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt evaluate <be-NN | case-id> key=value …` — numerically evaluate a closed-form /\n * spacetime bridge (the registered evaluators) via its registered evaluator. Closes the gap\n * where `upt explain <be-NN>` redirected to a \"evaluated directly\" capability that\n * did not exist. With no bridge id, lists the evaluable bridges + their inputs.\n * `upt evaluate case-<id> …` runs an applied case (`src/cases/`).\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { emitJson, emitJsonError } from '../output.js';\nimport { coherentUnits, derivedUnitOf } from '../expr-print.js';\nimport { splitAssignments } from '../bindings.js';\nimport { realFlag } from '../numeric-flag.js';\nimport { UsageError } from '../errors.js';\nimport { CliError } from '../errors.js';\nimport type { AppliedCase, CaseResult, EvaluatorParameter, PropagatedOutput } from '../../cli-api.js';\nimport { closedFormRangeLabel } from '../closed-form-range.js';\n\nconst FLAGS: FlagSpec[] = [\n {\n name: '--sigma',\n valueStyle: 'either',\n repeatable: true,\n description: 'One input uncertainty as key=u, in the input\\'s unit. A temperature uncertainty in degC or degF is a difference.',\n },\n {\n name: '--corr',\n valueStyle: 'either',\n repeatable: true,\n description: 'A pairwise correlation as a,b=rho, used with --sigma.',\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt evaluate <be-NN | case-id> key=value[unit] ...\n Numerically evaluate a closed-form / spacetime bridge (${closedFormRangeLabel()}),\n or an applied case: a whole measurement problem with its parent and\n scalar equations, observable, conditions, regime checks and a route\n to a measurement comparison. A case whose regime check fails prints\n its outputs as NOT QUALIFIED and exits 3.\n e.g. upt evaluate case-resistor-noise T_K=300 R_ohm=1kohm\n R_in_ohm=1Mohm C_in_F=20pF f_lo_Hz=0 f_hi_Hz=10kHz t_avg_s=10\n Every input is declared: its unit, its meaning, and for a length what\n it measures (a radius, a separation, a semi-major axis). A value may\n carry a unit (d_m=1um, R_ohm=1kohm, T_yr=88d, M_kg=1Msun) or an\n expression of constants and units (M_kg=1*M_sun, v=0.6*c); it is\n converted into the declared unit only when the dimensions agree, and a\n bare number is in the declared unit. The same reader accepts --sigma. An absolute temperature in degC\n adds 273.15 K, and one in degF is (degF − 32) × 5/9 + 273.15. A difference slot\n (temperature-change, dT) and a --sigma take the interval, with no offset.\n An undeclared key exits 1 instead of being ignored. A declared\n alternate (major_axis_m for a_m) is converted exactly and said so.\n e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 2.896e30 kg (≈ 1.456 M_⊙\n with M_⊙ = 1.989e30 kg; ideal degenerate gas, with m_u)\n upt evaluate be-55 C=1 → quantum Hall σ_xy = e²/h in siemens (R_H = 1/σ_xy = h/e²,\n the von Klitzing constant)\n With no bridge id, lists the evaluable bridges and their declared inputs.\n --sigma key=u (repeatable) gives an input's standard uncertainty;\n --corr a,b=rho its correlation. Propagated to first order (GUM law,\n central-difference sensitivities), with a curvature check per input\n that flags where the linearization is unreliable. An input without\n --sigma is treated as exact. Not included: the evaluator's numerical\n error and model discrepancy (whether the bridge applies).\n e.g. upt evaluate be-58 T_K=300 R_ohm=1000 --sigma T_K=3 --sigma R_ohm=10\n An input outside a relation's validity domain is refused and the message\n names the condition (a weak-field formula inside 10 Schwarzschild radii,\n a negative temperature). A relation's recorded caveat, and the note of a\n registered constant it names, print beside the value.`;\n\n/**\n * An input-contract error (absent, unknown, non-number, non-finite or twice-given\n * input) as the CLI reports it: a bad value (exit 1) under the one `upt evaluate:`\n * prefix. Its message already names the id.\n */\nfunction inputErrorOrSelf(api: CommandCtx['api'], e: unknown): unknown {\n return api.isInputContractError(e) ? new CliError(`upt evaluate: ${e.message}`) : e;\n}\n\n/**\n * What `run` threw, as the CLI reports it. An input error, a domain failure, a carrier-sign\n * failure and a closed form that is not finite at the inputs are each a bad value: exit 1\n * (documented contract), under the one `upt evaluate:` prefix, with the bridge or case named.\n */\nfunction evaluationFailure(api: CommandCtx['api'], e: unknown, label: string): unknown {\n if (api.isInputContractError(e)) return inputErrorOrSelf(api, e);\n if (e instanceof api.FormulaError) return new CliError(`upt evaluate: ${label}: ${e.message}`);\n if (e instanceof Error) return new CliError(`upt evaluate: ${e.message}`);\n return e;\n}\n\n/** Unit and geometry trouble is a bad value (exit 1); a missing `=` is a usage error (exit 2); a key twice is refused. */\nfunction resolveInputs(api: CommandCtx['api'], label: string, parameters: readonly EvaluatorParameter[], args: readonly string[]) {\n splitAssignments('evaluate', args, 'key=value (e.g. mu_e=2)');\n try {\n return api.resolveEvaluatorInputs(parameters, args, label);\n } catch (e) {\n if (e instanceof api.UnitError || e instanceof api.SynonymDisagreementError) {\n throw new CliError(`upt evaluate: ${label}: ${e.message}`);\n }\n throw inputErrorOrSelf(api, e);\n }\n}\n\n/** `d_m [m] plate separation d (geometry: separation) — the gap …` */\nfunction describeParameter(p: EvaluatorParameter): string {\n const extras = [\n ...(p.geometry === undefined ? [] : [`geometry: ${p.geometry}`]),\n ...(p.temperature === undefined ? [] : ['an absolute temperature; degC adds 273.15; degF is (degF − 32)×5/9 + 273.15']),\n ...(p.optional === true ? ['optional'] : []),\n ];\n const alts = (p.alternates ?? []).map((a) => `or give ${a.key}, ${a.meaning}`);\n return (\n `${p.key} [${p.unit || 'dimensionless'}] ${p.quantity} ${p.symbol}${extras.length > 0 ? ` (${extras.join('; ')})` : ''} — ${p.meaning}` +\n (alts.length > 0 ? `; ${alts.join('; ')}` : '')\n );\n}\n\n/**\n * The parameter a `--sigma` spelling names, through the same contract the inputs use\n * (`resolveEvaluatorInputs`): the key itself, a declared alternate (`diameter_m` for `a_m`,\n * whose σ is scaled by the alternate's `toKey`), or a synonym spelling of the key. `undefined`\n * when the spelling names none of them.\n */\nfunction sigmaSlot(\n api: CommandCtx['api'],\n parameters: readonly EvaluatorParameter[],\n given: string,\n): { key: string; unit: string; factor: number } | undefined {\n const direct = parameters.find((p) => p.key === given);\n if (direct !== undefined) return { key: direct.key, unit: direct.unit, factor: 1 };\n for (const p of parameters) {\n const alt = (p.alternates ?? []).find((a) => a.key === given);\n if (alt !== undefined) return { key: p.key, unit: p.unit, factor: alt.toKey };\n }\n const viaName = api.resolveQuantityName(given, new Set(parameters.map((p) => p.key)));\n const synonym = viaName === null ? undefined : parameters.find((p) => p.key === viaName);\n return synonym === undefined ? undefined : { key: synonym.key, unit: synonym.unit, factor: 1 };\n}\n\nfunction parseUncertainty(\n api: CommandCtx['api'],\n spec: { readonly parameters: readonly EvaluatorParameter[] },\n sigmaArgs: readonly string[],\n corrArgs: readonly string[],\n inputs: Readonly<Record<string, number>>,\n): { sigma: Record<string, number>; corr: Map<string, number> } {\n const sigma: Record<string, number> = {};\n splitAssignments('evaluate --sigma', sigmaArgs, 'key=u');\n for (const a of sigmaArgs) {\n const m = /^([^=]+)=(.+)$/.exec(a);\n const given = m?.[1];\n // The same spellings the inputs take: the key, a declared alternate, or a synonym.\n const slot = given === undefined ? undefined : sigmaSlot(api, spec.parameters, given);\n const key = slot?.key;\n if (m !== null && (key === undefined || !(key in inputs))) {\n throw new CliError(`upt evaluate: --sigma '${given}' is not one of the inputs given (${Object.keys(inputs).join(', ')})`);\n }\n // A σ is a difference: a σ in degC takes no 273.15 offset. The value is read\n // by the same binding reader as the input, so an energy on a kelvin slot is k_B T.\n // A σ given under an alternate is scaled by the alternate's factor (a diameter's σ is twice the radius's).\n let u = NaN;\n if (m !== null && slot !== undefined) {\n try {\n u = api.readNamedBinding(given!, m[2]!, { reading: 'difference', declaredUnit: slot.unit }).value * slot.factor;\n } catch (e) {\n if (!(e instanceof api.UnitError)) throw e;\n if (!(e instanceof api.BindingNumberError)) throw new CliError(`upt evaluate: --sigma '${a}': ${e.message}`);\n }\n }\n if (m === null || key === undefined || !Number.isFinite(u) || u < 0) {\n throw new CliError(`upt evaluate: --sigma '${a}' is not key=<finite u ≥ 0>`);\n }\n // Two spellings of one input (`T_K`, `temperature`) are one key here.\n if (key in sigma) throw new CliError(`upt evaluate --sigma: '${key}' is given twice ('${a}'); give one value per name`);\n sigma[key] = u;\n }\n const corr = new Map<string, number>();\n for (const a of corrArgs) {\n const m = /^([^,=]+),([^,=]+)=(.+)$/.exec(a);\n // The grammar first (a malformed rho is usage, exit 2), the range after (a bad value, exit 1).\n const rho = m === null ? NaN : realFlag('evaluate', '--corr rho', m[3]!);\n if (m === null || !Number.isFinite(rho) || Math.abs(rho) > 1) throw new CliError(`upt evaluate: --corr '${a}' is not a,b=<rho in [-1, 1]>`);\n const [x, y] = [m[1]!, m[2]!];\n if (x === y) throw new CliError(`upt evaluate: --corr '${a}' correlates an input with itself`);\n for (const k of [x, y]) {\n if (!(k in sigma)) throw new CliError(`upt evaluate: --corr names '${k}', which has no --sigma`);\n }\n corr.set(`${x},${y}`, rho);\n }\n if (!api.correlationIsPositiveSemidefinite(Object.keys(sigma), corr)) {\n throw new CliError('upt evaluate: the --corr values are not a valid correlation matrix (not positive semidefinite)');\n }\n return { sigma, corr };\n}\n\nconst NOT_INCLUDED = \"the evaluator's numerical error; model discrepancy (whether the bridge applies at all)\";\n\nconst CASE_NOT_INCLUDED =\n \"the case's numerical error; model discrepancy beyond the regime checks; the regime checks are evaluated at the given inputs, not at ±u\";\n\ninterface Uncertainty {\n readonly block: Record<string, unknown>;\n readonly propagated: Record<string, PropagatedOutput>;\n readonly exactInputs: string[];\n readonly notIncluded: string;\n}\n\nfunction uncertaintyOf(\n ctx: CommandCtx,\n spec: { readonly parameters: readonly EvaluatorParameter[] },\n inputs: Readonly<Record<string, number>>,\n f: (inputs: Record<string, number>) => Record<string, unknown>,\n notIncluded: string,\n): Uncertainty | null {\n const sigmaArgs = ctx.args.flags.get('sigma') ?? [];\n const corrArgs = ctx.args.flags.get('corr') ?? [];\n if (sigmaArgs.length === 0 && corrArgs.length > 0) throw new CliError('upt evaluate: --corr needs --sigma for both inputs');\n if (sigmaArgs.length === 0) return null;\n const { sigma, corr } = parseUncertainty(ctx.api, spec, sigmaArgs, corrArgs, inputs);\n const propagated = ctx.api.propagateEvaluatorUncertainty(f, inputs, sigma, corr);\n const exactInputs = Object.keys(inputs).filter((k) => !(k in sigma));\n return {\n block: {\n method: 'first-order propagation (GUM law), central-difference sensitivities, curvature check at ±u per input',\n sigma,\n correlations: Object.fromEntries(corr),\n outputs: propagated,\n exactInputs,\n notIncluded,\n },\n propagated,\n exactInputs,\n notIncluded,\n };\n}\n\n/** The one number formatter, as every command reads it: through `ctx.api`. */\ntype Fmt = CommandCtx['api']['formatExact'];\n\n/**\n * The value is echoed exactly; σ, the relative %, a sensitivity, a contribution and the\n * curvature ratio are statistics (the sensitivity is a central difference whose trailing\n * digits are noise), so they print at three significant digits.\n */\nfunction printUncertainty(api: CommandCtx['api'], out: CommandCtx['out'], u: Uncertainty): void {\n const g = (x: number | null): string => (x === null ? 'unavailable' : api.formatQuantity(x, 3));\n out(' uncertainty (first-order, GUM law; a sensitivity is not an uncertainty, the contribution is c·u):');\n for (const [name, p] of Object.entries(u.propagated)) {\n out(` ${name} = ${api.formatExact(p.value)} ± ${g(p.u)} (1σ${p.relative === null ? '' : `; relative ${g(p.relative * 100)}%`})`);\n for (const [k, c] of Object.entries(p.contributions)) {\n out(\n ` from ${k}: c = ${g(c.sensitivity)}, c·u = ${g(c.contribution)}` +\n (c.curvatureRatio === null ? '' : `, curvature/linear at ±u = ${g(c.curvatureRatio)}`) +\n (c.note === undefined ? '' : ` — ${c.note}`),\n );\n }\n if (p.unreliable.length > 0) {\n out(` LINEARIZATION UNRELIABLE for ${p.unreliable.join(', ')}: the first-order σ above does not describe what ±u does to it`);\n }\n }\n const corr = Object.entries((u.block as { correlations: Record<string, number> }).correlations);\n out(` correlations: ${corr.length === 0 ? 'none given (inputs independent)' : corr.map(([k, r]) => `${k} = ${r}`).join(', ')}`);\n if (u.exactInputs.length > 0) out(` treated as exact (no --sigma): ${u.exactInputs.join(', ')} — a choice, not a measurement`);\n out(` not included: ${u.notIncluded}`);\n}\n\ntype Resolved = ReturnType<typeof resolveInputs>['resolved'];\n\nconst conversionsOf = (resolved: Resolved) =>\n resolved\n .filter((r) => r.note !== undefined)\n .map((r) => ({ key: r.key, given: r.given, value: r.value, unit: r.unit, ...(r.via === undefined ? {} : { via: r.via }), note: r.note }));\n\nfunction printInputs(fmt: Fmt, out: CommandCtx['out'], parameters: readonly EvaluatorParameter[], inputs: Readonly<Record<string, number>>, resolved: Resolved): void {\n out(' inputs: ' + Object.entries(inputs).map(([k, v]) => `${k}=${fmt(v)}`).join(', '));\n for (const p of parameters) {\n const r = resolved.find((x) => x.key === p.key);\n out(` ${describeParameter(p)}${r?.note === undefined ? '' : `\\n converted: ${r.note}`}`);\n }\n}\n\nconst withUnit = (fmt: Fmt, v: number | null, unit: string): string =>\n v === null ? 'undefined here (its premise fails, or it needs an optional input not given)' : `${fmt(v)}${unit === '' ? '' : ` ${unit}`}`;\n\n/** A violated regime check is a check that ran and failed: exit 3. */\nasync function runCase(ctx: CommandCtx, c: AppliedCase, rest: readonly string[]): Promise<number> {\n const { args, api, out } = ctx;\n const { inputs, resolved } = resolveInputs(api, c.id, c.parameters, rest);\n let result: CaseResult;\n try {\n result = api.runAppliedCase(c.id, inputs);\n } catch (e) {\n throw evaluationFailure(api, e, c.id);\n }\n const u = uncertaintyOf(ctx, c, inputs, (i) => ({ ...api.runAppliedCase(c.id, i).outputs }), CASE_NOT_INCLUDED);\n const failed = result.checks.filter((k) => !k.holds).map((k) => k.id);\n const code = failed.length === 0 ? 0 : 3;\n const regimeLine = c.regimeAt?.(inputs, result.outputs) ?? '';\n\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: {\n caseId: c.id,\n title: c.title,\n qualified: failed.length === 0,\n failedChecks: failed,\n inputs,\n parameters: c.parameters,\n conversions: conversionsOf(resolved),\n governing: c.governing,\n observable: c.observable,\n outputs: c.outputs.map((o) => ({ ...o, value: result.outputs[o.key] ?? null })),\n checks: result.checks,\n ...(c.comparison === undefined ? {} : { comparison: c.comparison }),\n conditions: c.conditions,\n unchecked: result.unchecked,\n notIncluded: c.notIncluded,\n measurement: c.measurement,\n links: c.links,\n ...(regimeLine === '' ? {} : { regimeAt: regimeLine }),\n ...(u === null ? {} : { uncertainty: u.block }),\n },\n },\n ctx.write,\n );\n return code;\n }\n\n out(`\\n● ${c.id} ${c.title}`);\n out(' parent equations (what the scalar result simplifies; not evaluated as the answer):');\n for (const e of c.governing.parent) out(` ${e}`);\n out(' scalar simplification evaluated:');\n for (const e of c.governing.scalar) out(` ${e}`);\n out(` kept and dropped: ${c.governing.distinction}`);\n printInputs(api.formatExact, out, c.parameters, inputs, resolved);\n out(' conditions (boundary, initial, equilibrium):');\n for (const s of c.conditions) out(` - ${s}`);\n out(' outputs:');\n for (const o of c.outputs) out(` ${o.key} = ${withUnit(api.formatExact, result.outputs[o.key] ?? null, o.unit)} — ${o.meaning}`);\n const obs = c.outputs.find((o) => o.key === c.observable)!;\n out(` observable: ${obs.key} = ${withUnit(api.formatExact, result.outputs[obs.key] ?? null, obs.unit)}`);\n out(' regime checks (at the given inputs):');\n if (regimeLine !== '') out(` regime coordinates: ${regimeLine}`);\n for (const k of result.checks) {\n out(` ${k.holds ? 'holds ' : 'VIOLATED'} ${k.id}: ${k.quantity} = ${api.formatExact(k.value)} ${k.op} ${k.bound} — ${k.premise} (${k.threshold})`);\n }\n if (c.comparison !== undefined) {\n const d = result.outputs[c.comparison.deviationKey] ?? null;\n out(\n ` comparison (reported beside the checks, not one of them): ${c.comparison.valueKey} / ${c.comparison.referenceKey} − 1 = ` +\n `${d === null ? 'undefined here' : api.formatExact(d)} — against ${c.comparison.reference}; ${c.comparison.method}`,\n );\n }\n if (result.unchecked.length > 0) {\n out(' stated, not checked:');\n for (const s of result.unchecked) out(` - ${s}`);\n }\n out(\n failed.length === 0\n ? ' QUALIFIED: every regime check holds at these inputs.'\n : ` NOT QUALIFIED: ${failed.join(', ')} violated — the outputs above are outside the stated regime and are not a ` +\n 'qualified prediction at these inputs.',\n );\n if (u !== null) printUncertainty(api, out, u);\n out(' not included in the model:');\n for (const s of c.notIncluded) out(` - ${s}`);\n out(' compare with a measurement:');\n for (const s of c.measurement) out(` - ${s}`);\n out(' rests on:');\n for (const l of c.links) out(` ${l.id} — ${l.role}`);\n return code;\n}\n\n/**\n * `--json` answers a refusal in the envelope too (`emitJsonError`), with the exit code the\n * refusal stands for; the text mode reports it on stderr as every command does. A defect\n * (neither error class) propagates either way.\n */\nasync function run(ctx: CommandCtx): Promise<number> {\n try {\n return await evaluate(ctx);\n } catch (e) {\n if (ctx.args.flags.has('json') && (e instanceof UsageError || e instanceof CliError)) {\n return emitJsonError('evaluate', e, ctx.write);\n }\n throw e;\n }\n}\n\nasync function evaluate(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const [target, ...rest] = args.positionals;\n\n if (!target) {\n const specs = [...api.BRIDGE_EVALUATORS.values()];\n const cases = [...api.APPLIED_CASES.values()];\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: [\n ...specs.map((s) => ({ bridgeId: s.bridgeId, name: s.name, inputKeys: s.inputKeys, parameters: s.parameters })),\n ...cases.map((c) => ({ caseId: c.id, name: c.title, inputKeys: c.parameters.map((p) => p.key), parameters: c.parameters })),\n ],\n },\n ctx.write,\n );\n return 0;\n }\n out('\\nEvaluable bridges (upt evaluate <be-NN> key=value[unit] ...)');\n for (const s of specs) {\n out(` be-${s.bridgeId} ${s.name}`);\n for (const p of s.parameters) out(` ${describeParameter(p)}`);\n }\n out('\\nApplied cases (upt evaluate <case-id> key=value[unit] ...; a violated regime check exits 3)');\n for (const c of cases) {\n out(` ${c.id} ${c.title}`);\n for (const p of c.parameters) out(` ${describeParameter(p)}`);\n out(` e.g. upt evaluate ${c.id} ${c.examples.valid.args.join(' ')}`);\n }\n out('\\n A value may carry a unit (d_m=1um, T_K=25degC, R_ohm=1kohm); a bare number is in the declared unit.');\n return 0;\n }\n\n const appliedCase = api.APPLIED_CASES.get(target.toLowerCase());\n if (appliedCase !== undefined) return runCase(ctx, appliedCase, rest);\n\n let id: number;\n try {\n id = api.parseBridgeId(target);\n } catch {\n throw new UsageError(\n `upt evaluate: '${target}' is not a bridge id (be-<id>) or a case (${[...api.APPLIED_CASES.keys()].join(', ')}). See \\`upt help\\`.`,\n );\n }\n let found: ReturnType<typeof api.resolveEvaluable>;\n try {\n found = api.resolveEvaluable(id);\n } catch {\n throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);\n }\n if (found.evaluator === undefined) {\n throw new CliError(`upt evaluate: ${api.missingEvaluatorMessage(id)}`);\n }\n const spec = found.evaluator;\n const key = api.catalogEdgeKey(spec.bridgeId);\n const { inputs, resolved } = resolveInputs(api, key, spec.parameters, rest);\n\n // The one evaluation, the library's result builder: `run` checks the inputs (missing, unknown,\n // type) before the domain, and the result carries the output's name, unit, meaning and extras.\n let evaluation: ReturnType<typeof api.evaluateResolved>;\n try {\n evaluation = api.evaluateResolved(found, inputs, 'all');\n } catch (e) {\n throw evaluationFailure(api, e, key);\n }\n\n const u = uncertaintyOf(ctx, spec, inputs, (i) => spec.run(i), NOT_INCLUDED);\n const relation = api.primaryRelation(id);\n const notices = relation === undefined ? [] : api.relationNotices(relation);\n\n // The text label is a derived SI unit read from the unit table (`V^2/Hz`); the JSON is the\n // library result itself, whose `unit` is the base form `parseUnit` reads back.\n const label = evaluation.kind === 'unset' ? undefined : derivedUnitOf(evaluation.dimension, coherentUnits(api.unitRows()));\n const unused = api.unusedInputKeys(spec);\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'evaluate',\n result: {\n bridgeId: id,\n inputs,\n parameters: spec.parameters,\n conversions: conversionsOf(resolved),\n output: evaluation,\n ...(unused.length === 0 ? {} : { unusedInputs: unused }),\n ...(notices.length === 0 ? {} : { notices }),\n ...(u === null ? {} : { uncertainty: u.block }),\n },\n },\n ctx.write,\n );\n return 0;\n }\n out(`\\n● be-${id} ${spec.name}`);\n printInputs(api.formatExact, out, spec.parameters, inputs, resolved);\n if (evaluation.kind === 'unset') {\n out(` value is unset: ${evaluation.formula} is not finite at these inputs (a dropped factor or a singularity)`);\n } else {\n out(` ${evaluation.name} [${label}] = ${api.formatExact(evaluation.value)} — ${evaluation.meaning}`);\n for (const extra of evaluation.extras) out(` ${extra.name} [${extra.unit}] = ${api.formatExact(extra.value)} — ${extra.meaning}`);\n }\n for (const key of unused) {\n out(` note: ${key} is required and does not enter the value; the closed form does not use it, so changing it changes nothing`);\n }\n for (const notice of notices) out(` ${notice}`);\n if (u !== null) printUncertainty(api, out, u);\n return 0;\n}\n\nexport const command: Command = {\n name: 'evaluate',\n aliases: [],\n positionals: { max: Infinity },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Evaluate a closed-form bridge or an applied case, with units on every input.',\n example: 'upt evaluate be-63 mu_e=2',\n group: 'evaluate',\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAeA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAeA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AA6Y/E,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
|
|
@@ -43,7 +43,7 @@ const HELP = `upt explain <quantity> [name=value | name] ...
|
|
|
43
43
|
* `mass=1e500`→∞, and a bare name alongside a valued one were all silent
|
|
44
44
|
* wrong-physics footguns.
|
|
45
45
|
*/
|
|
46
|
-
function parseKnown(api, args) {
|
|
46
|
+
function parseKnown(api, args, dimensions) {
|
|
47
47
|
const valued = args.filter((a) => a.includes('='));
|
|
48
48
|
if (valued.length === 0)
|
|
49
49
|
return { known: [...args], notes: [] }; // names mode
|
|
@@ -74,6 +74,17 @@ function parseKnown(api, args) {
|
|
|
74
74
|
throw new CliError(`upt explain: '${a.assignment}' is not a finite number. Expected ${a.name}=<number or unit>.`);
|
|
75
75
|
}
|
|
76
76
|
values[a.name] = read.value;
|
|
77
|
+
// A dimensioned value must be the quantity's dimension (issues #542, #537):
|
|
78
|
+
// `nu=500nm` used to keep the 5e-7 scale and drop the length, so a metre
|
|
79
|
+
// was read as a hertz. A bare number is already in the quantity's unit.
|
|
80
|
+
// The message is the same sentence `bindingInUnit` gives `upt evaluate`,
|
|
81
|
+
// with the quantity's own dimension where evaluate states a declared unit.
|
|
82
|
+
const resolved = api.resolveQuantityName(a.name, dimensions.inputNames, dimensions.aliases);
|
|
83
|
+
const quantityDim = resolved === null ? undefined : dimensions.dims.get(resolved);
|
|
84
|
+
if (read.dimensioned && quantityDim !== undefined && !api.dimensionsEqual(read.dimension, quantityDim)) {
|
|
85
|
+
throw new CliError(`upt explain: '${a.assignment}': '${a.raw.trim()}' is ${api.format(read.dimension)}, ` +
|
|
86
|
+
`but this input is ${api.format(quantityDim)} (${resolved})`);
|
|
87
|
+
}
|
|
77
88
|
// Unit-convention notes were already on the binding and explain did not
|
|
78
89
|
// print them. The temperature reading adds a note; the reader returns that
|
|
79
90
|
// one on its own field.
|
|
@@ -114,7 +125,7 @@ function bridgeRedirect(api, target) {
|
|
|
114
125
|
}
|
|
115
126
|
/** A canonical equation and the catalog bridge it restates, when those two target names differ. */
|
|
116
127
|
function restatementPartner(api, target) {
|
|
117
|
-
const norm = (s) =>
|
|
128
|
+
const norm = (s) => api.foldName(s).toLowerCase();
|
|
118
129
|
const want = norm(target);
|
|
119
130
|
for (const eq of api.CANONICAL_EQUATIONS) {
|
|
120
131
|
if (eq.restatesBridge === undefined)
|
|
@@ -256,7 +267,16 @@ async function run(ctx) {
|
|
|
256
267
|
searchLine);
|
|
257
268
|
}
|
|
258
269
|
const aliases = api.aliasesForTarget(graph, resolvedTarget);
|
|
259
|
-
|
|
270
|
+
// The dimension of each graph quantity, from the nodes the edges already
|
|
271
|
+
// carry (projected from `data/quantities.json`): the check
|
|
272
|
+
// `parseKnown` makes for a dimensioned binding, in the terms this graph uses.
|
|
273
|
+
const dims = new Map();
|
|
274
|
+
for (const e of graph) {
|
|
275
|
+
dims.set(e.target.name, e.target.dim);
|
|
276
|
+
for (const s of e.sources)
|
|
277
|
+
dims.set(s.name, s.dim);
|
|
278
|
+
}
|
|
279
|
+
const parsed = parseKnown(api, rest, { inputNames, aliases, dims });
|
|
260
280
|
for (const note of parsed.notes)
|
|
261
281
|
ctx.err(note);
|
|
262
282
|
if (!Array.isArray(parsed.known)) {
|
|
@@ -334,6 +354,7 @@ async function run(ctx) {
|
|
|
334
354
|
export const command = {
|
|
335
355
|
name: 'explain',
|
|
336
356
|
aliases: [],
|
|
357
|
+
positionals: { max: Infinity },
|
|
337
358
|
flags: FLAGS,
|
|
338
359
|
help: commandHelp(HELP, FLAGS),
|
|
339
360
|
summary: 'Show how the graph determines a quantity, or say that it does not cover that name.',
|