universal-physics-tensor 10.0.0 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/bin/upt.mjs +13 -1
- package/data/atlas/atlas.json +25 -25
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +6 -6
- package/data/atlas/oscillators.json +7 -7
- package/data/atlas/waves.json +14 -14
- package/data/atlas/witness-results.json +11 -11
- package/data/bridge-catalog.json +371 -228
- package/data/bridge-catalog.schema.json +45 -7
- package/dist/atlas/applicability.d.ts.map +1 -1
- package/dist/atlas/applicability.js +21 -15
- package/dist/atlas/applicability.js.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
- package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
- package/dist/atlas/benchmark/loader.js +2 -2
- package/dist/atlas/benchmark/loader.js.map +1 -1
- package/dist/atlas/benchmark/stats.d.ts +2 -2
- package/dist/atlas/benchmark/stats.d.ts.map +1 -1
- package/dist/atlas/benchmark/stats.js +15 -7
- package/dist/atlas/benchmark/stats.js.map +1 -1
- package/dist/atlas/catalog-formal-ref.d.ts +26 -3
- package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
- package/dist/atlas/catalog-formal-ref.js +52 -5
- package/dist/atlas/catalog-formal-ref.js.map +1 -1
- package/dist/atlas/chain-pipeline.d.ts.map +1 -1
- package/dist/atlas/chain-pipeline.js +7 -8
- package/dist/atlas/chain-pipeline.js.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.js +8 -12
- package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
- package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges.js +27 -39
- package/dist/atlas/diffusion/bridges.js.map +1 -1
- package/dist/atlas/diffusion/dimensions.d.ts +6 -14
- package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
- package/dist/atlas/diffusion/dimensions.js +8 -16
- package/dist/atlas/diffusion/dimensions.js.map +1 -1
- package/dist/atlas/diffusion/models.d.ts +3 -3
- package/dist/atlas/diffusion/models.d.ts.map +1 -1
- package/dist/atlas/diffusion/models.js +5 -10
- package/dist/atlas/diffusion/models.js.map +1 -1
- package/dist/atlas/diffusion/numerics.d.ts +16 -4
- package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
- package/dist/atlas/diffusion/numerics.js +38 -24
- package/dist/atlas/diffusion/numerics.js.map +1 -1
- package/dist/atlas/link-prediction.d.ts +106 -3
- package/dist/atlas/link-prediction.d.ts.map +1 -1
- package/dist/atlas/link-prediction.js +212 -66
- package/dist/atlas/link-prediction.js.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.js +7 -11
- package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.js +6 -7
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.js +23 -34
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
- package/dist/atlas/oscillators/dimensions.d.ts +9 -21
- package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
- package/dist/atlas/oscillators/dimensions.js +9 -21
- package/dist/atlas/oscillators/dimensions.js.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
- package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.js +17 -15
- package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
- package/dist/atlas/oscillators/models.d.ts.map +1 -1
- package/dist/atlas/oscillators/models.js +2 -6
- package/dist/atlas/oscillators/models.js.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
- package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.js +60 -40
- package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
- package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
- package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/phase-translation.js +3 -4
- package/dist/atlas/oscillators/phase-translation.js.map +1 -1
- package/dist/atlas/oscillators/position-translation.d.ts +68 -7
- package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/position-translation.js +123 -12
- package/dist/atlas/oscillators/position-translation.js.map +1 -1
- package/dist/atlas/oscillators/rejections.d.ts +0 -2
- package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
- package/dist/atlas/oscillators/rejections.js +0 -7
- package/dist/atlas/oscillators/rejections.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +25 -24
- package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
- package/dist/atlas/physjs-entries.generated.js +25 -24
- package/dist/atlas/physjs-entries.generated.js.map +1 -1
- package/dist/atlas/physjs-ref.d.ts +34 -31
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +55 -53
- package/dist/atlas/physjs-ref.js.map +1 -1
- package/dist/atlas/physjs-reviewed.d.ts +1 -1
- package/dist/atlas/physjs-reviewed.js +15 -15
- package/dist/atlas/physjs-reviewed.js.map +1 -1
- package/dist/atlas/poster/statements.d.ts +0 -19
- package/dist/atlas/poster/statements.d.ts.map +1 -1
- package/dist/atlas/poster/statements.js +1 -1
- package/dist/atlas/poster/statements.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +1 -1
- package/dist/atlas/proof-target.js +1 -1
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/atlas/regime.d.ts +1 -1
- package/dist/atlas/regime.d.ts.map +1 -1
- package/dist/atlas/regime.js +1 -1
- package/dist/atlas/regime.js.map +1 -1
- package/dist/atlas/text-overlap.d.ts +23 -0
- package/dist/atlas/text-overlap.d.ts.map +1 -0
- package/dist/atlas/text-overlap.js +41 -0
- package/dist/atlas/text-overlap.js.map +1 -0
- package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/waves/bridges-closure.js +2 -6
- package/dist/atlas/waves/bridges-closure.js.map +1 -1
- package/dist/atlas/waves/bridges.d.ts.map +1 -1
- package/dist/atlas/waves/bridges.js +32 -48
- package/dist/atlas/waves/bridges.js.map +1 -1
- package/dist/atlas/waves/models.d.ts +5 -6
- package/dist/atlas/waves/models.d.ts.map +1 -1
- package/dist/atlas/waves/models.js +7 -13
- package/dist/atlas/waves/models.js.map +1 -1
- package/dist/atlas/waves/numerics.d.ts.map +1 -1
- package/dist/atlas/waves/numerics.js +10 -3
- package/dist/atlas/waves/numerics.js.map +1 -1
- package/dist/atlas/witness-numeric.d.ts +30 -0
- package/dist/atlas/witness-numeric.d.ts.map +1 -1
- package/dist/atlas/witness-numeric.js +53 -0
- package/dist/atlas/witness-numeric.js.map +1 -1
- package/dist/atlas/witness-specs.d.ts.map +1 -1
- package/dist/atlas/witness-specs.js +19 -0
- package/dist/atlas/witness-specs.js.map +1 -1
- package/dist/atlas/witness-symbolic.d.ts +75 -3
- package/dist/atlas/witness-symbolic.d.ts.map +1 -1
- package/dist/atlas/witness-symbolic.js +116 -10
- package/dist/atlas/witness-symbolic.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +13 -8
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +26 -2
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/catalog-types.js +11 -1
- package/dist/bridges/catalog-types.js.map +1 -1
- package/dist/bridges/evaluation-errors.d.ts +31 -1
- package/dist/bridges/evaluation-errors.d.ts.map +1 -1
- package/dist/bridges/evaluation-errors.js +20 -2
- package/dist/bridges/evaluation-errors.js.map +1 -1
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +7 -5
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +27 -12
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +11 -0
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +14 -5
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +35 -3
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +117 -23
- package/dist/bridges/holds.js.map +1 -1
- package/dist/bridges/notices.d.ts.map +1 -1
- package/dist/bridges/notices.js +5 -5
- package/dist/bridges/notices.js.map +1 -1
- package/dist/bridges/relation-eval.d.ts +4 -4
- package/dist/bridges/relation-eval.d.ts.map +1 -1
- package/dist/bridges/relation-eval.js +15 -16
- package/dist/bridges/relation-eval.js.map +1 -1
- package/dist/bridges/sensitivity.d.ts.map +1 -1
- package/dist/bridges/sensitivity.js +3 -3
- package/dist/bridges/sensitivity.js.map +1 -1
- package/dist/bridges/validity.d.ts +33 -0
- package/dist/bridges/validity.d.ts.map +1 -0
- package/dist/bridges/validity.js +67 -0
- package/dist/bridges/validity.js.map +1 -0
- package/dist/canonical/entries/atomic.js +1 -3
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
- package/dist/canonical/entries/condensed-matter.js +4 -5
- package/dist/canonical/entries/condensed-matter.js.map +1 -1
- package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
- package/dist/canonical/entries/dimensional-classics.js +3 -4
- package/dist/canonical/entries/dimensional-classics.js.map +1 -1
- package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
- package/dist/canonical/entries/electromagnetism.js +4 -10
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +3 -7
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/mechanics.js +4 -6
- package/dist/canonical/entries/mechanics.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +9 -17
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/entries/relativity.d.ts.map +1 -1
- package/dist/canonical/entries/relativity.js +6 -6
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/fixed-points.d.ts +94 -0
- package/dist/canonical/fixed-points.d.ts.map +1 -0
- package/dist/canonical/fixed-points.js +81 -0
- package/dist/canonical/fixed-points.js.map +1 -0
- package/dist/canonical/linkage.d.ts.map +1 -1
- package/dist/canonical/linkage.js +25 -44
- package/dist/canonical/linkage.js.map +1 -1
- package/dist/canonical/normal-form.d.ts.map +1 -1
- package/dist/canonical/normal-form.js +5 -11
- package/dist/canonical/normal-form.js.map +1 -1
- package/dist/canonical/structural.d.ts +21 -21
- package/dist/canonical/structural.d.ts.map +1 -1
- package/dist/canonical/structural.js +40 -19
- package/dist/canonical/structural.js.map +1 -1
- package/dist/cases/brownian-sphere.d.ts +3 -3
- package/dist/cases/brownian-sphere.d.ts.map +1 -1
- package/dist/cases/brownian-sphere.js +6 -5
- package/dist/cases/brownian-sphere.js.map +1 -1
- package/dist/cases/damped-resonator.d.ts.map +1 -1
- package/dist/cases/damped-resonator.js +6 -9
- package/dist/cases/damped-resonator.js.map +1 -1
- package/dist/cases/kepler-rv.d.ts +1 -1
- package/dist/cases/kepler-rv.d.ts.map +1 -1
- package/dist/cases/kepler-rv.js +3 -2
- package/dist/cases/kepler-rv.js.map +1 -1
- package/dist/cases/lumped-cooling.d.ts +8 -3
- package/dist/cases/lumped-cooling.d.ts.map +1 -1
- package/dist/cases/lumped-cooling.js +21 -23
- package/dist/cases/lumped-cooling.js.map +1 -1
- package/dist/cases/quadrature.d.ts +7 -9
- package/dist/cases/quadrature.d.ts.map +1 -1
- package/dist/cases/quadrature.js +28 -32
- package/dist/cases/quadrature.js.map +1 -1
- package/dist/cases/resistor-noise.js +4 -4
- package/dist/cases/resistor-noise.js.map +1 -1
- package/dist/cases/skin-depth.d.ts +0 -4
- package/dist/cases/skin-depth.d.ts.map +1 -1
- package/dist/cases/skin-depth.js +3 -7
- package/dist/cases/skin-depth.js.map +1 -1
- package/dist/cli/args.d.ts +23 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +30 -8
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bindings.d.ts.map +1 -1
- package/dist/cli/bindings.js +5 -4
- package/dist/cli/bindings.js.map +1 -1
- package/dist/cli/command.d.ts +8 -1
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/_atlas-map.d.ts +0 -9
- package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-map.js +8 -18
- package/dist/cli/commands/_atlas-map.js.map +1 -1
- package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-route.js +6 -2
- package/dist/cli/commands/_atlas-route.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +8 -9
- package/dist/cli/commands/_discovery-opts.js.map +1 -1
- package/dist/cli/commands/atlas.d.ts.map +1 -1
- package/dist/cli/commands/atlas.js +8 -5
- package/dist/cli/commands/atlas.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +8 -1
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/axes.d.ts.map +1 -1
- package/dist/cli/commands/axes.js +20 -1
- package/dist/cli/commands/axes.js.map +1 -1
- package/dist/cli/commands/confront.d.ts.map +1 -1
- package/dist/cli/commands/confront.js +8 -14
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +22 -22
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +6 -2
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +1 -0
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +65 -37
- package/dist/cli/commands/evaluate.js.map +1 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +2 -1
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/ground.d.ts.map +1 -1
- package/dist/cli/commands/ground.js +1 -0
- package/dist/cli/commands/ground.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +75 -5
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli/commands/metric.d.ts.map +1 -1
- package/dist/cli/commands/metric.js +12 -9
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/path.d.ts +10 -0
- package/dist/cli/commands/path.d.ts.map +1 -1
- package/dist/cli/commands/path.js +25 -3
- package/dist/cli/commands/path.js.map +1 -1
- package/dist/cli/commands/probe.d.ts.map +1 -1
- package/dist/cli/commands/probe.js +59 -16
- package/dist/cli/commands/probe.js.map +1 -1
- package/dist/cli/commands/regime.d.ts.map +1 -1
- package/dist/cli/commands/regime.js +1 -0
- package/dist/cli/commands/regime.js.map +1 -1
- package/dist/cli/commands/retrieve.d.ts.map +1 -1
- package/dist/cli/commands/retrieve.js +1 -0
- package/dist/cli/commands/retrieve.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +1 -0
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/symbolic.d.ts.map +1 -1
- package/dist/cli/commands/symbolic.js +19 -28
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.d.ts.map +1 -1
- package/dist/cli/commands/testplan.js +4 -2
- package/dist/cli/commands/testplan.js.map +1 -1
- package/dist/cli/expr-print.d.ts +0 -2
- package/dist/cli/expr-print.d.ts.map +1 -1
- package/dist/cli/expr-print.js +7 -31
- package/dist/cli/expr-print.js.map +1 -1
- package/dist/cli/main.d.ts +7 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +18 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/numeric-flag.d.ts +12 -0
- package/dist/cli/numeric-flag.d.ts.map +1 -0
- package/dist/cli/numeric-flag.js +44 -0
- package/dist/cli/numeric-flag.js.map +1 -0
- package/dist/cli/output.d.ts +20 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +15 -0
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/record-reach.js +2 -2
- package/dist/cli/record-reach.js.map +1 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +6 -5
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli/record.d.ts +1 -5
- package/dist/cli/record.d.ts.map +1 -1
- package/dist/cli/record.js +9 -8
- package/dist/cli/record.js.map +1 -1
- package/dist/cli/search-index.d.ts.map +1 -1
- package/dist/cli/search-index.js +7 -6
- package/dist/cli/search-index.js.map +1 -1
- package/dist/cli/statuses.d.ts +0 -2
- package/dist/cli/statuses.d.ts.map +1 -1
- package/dist/cli/statuses.js +0 -7
- package/dist/cli/statuses.js.map +1 -1
- package/dist/cli/stored-results.d.ts +7 -0
- package/dist/cli/stored-results.d.ts.map +1 -0
- package/dist/cli/stored-results.js +23 -0
- package/dist/cli/stored-results.js.map +1 -0
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +7 -5
- package/dist/cli/version.js.map +1 -1
- package/dist/cli-api.d.ts +34 -5
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +28 -4
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/algebraic-equivalence.d.ts +43 -0
- package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
- package/dist/composition/algebraic-equivalence.js +115 -0
- package/dist/composition/algebraic-equivalence.js.map +1 -0
- package/dist/composition/axes.d.ts +0 -6
- package/dist/composition/axes.d.ts.map +1 -1
- package/dist/composition/axes.js +6 -6
- package/dist/composition/axes.js.map +1 -1
- package/dist/composition/axis-audit.d.ts +47 -20
- package/dist/composition/axis-audit.d.ts.map +1 -1
- package/dist/composition/axis-audit.js +82 -9
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +17 -0
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +102 -55
- package/dist/composition/bridge-analysis.js.map +1 -1
- package/dist/composition/canonical-compare.d.ts +40 -0
- package/dist/composition/canonical-compare.d.ts.map +1 -1
- package/dist/composition/canonical-compare.js +122 -24
- package/dist/composition/canonical-compare.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +1 -1
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +9 -36
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-json.js +2 -2
- package/dist/composition/canonical-json.js.map +1 -1
- package/dist/composition/catalog-graph.d.ts.map +1 -1
- package/dist/composition/catalog-graph.js +2 -5
- package/dist/composition/catalog-graph.js.map +1 -1
- package/dist/composition/chain-candidate.d.ts +8 -0
- package/dist/composition/chain-candidate.d.ts.map +1 -1
- package/dist/composition/chain-candidate.js +9 -2
- package/dist/composition/chain-candidate.js.map +1 -1
- package/dist/composition/chain-match.d.ts +6 -3
- package/dist/composition/chain-match.d.ts.map +1 -1
- package/dist/composition/chain-match.js +4 -1
- package/dist/composition/chain-match.js.map +1 -1
- package/dist/composition/chain-result.d.ts.map +1 -1
- package/dist/composition/chain-result.js +2 -14
- package/dist/composition/chain-result.js.map +1 -1
- package/dist/composition/compose-symbolic.d.ts.map +1 -1
- package/dist/composition/compose-symbolic.js +3 -2
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +13 -5
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/composition-recovery.d.ts.map +1 -1
- package/dist/composition/composition-recovery.js +4 -7
- package/dist/composition/composition-recovery.js.map +1 -1
- package/dist/composition/discovery.d.ts +56 -0
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +114 -60
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +21 -2
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +23 -1
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/enumerate.d.ts.map +1 -1
- package/dist/composition/enumerate.js +18 -3
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +35 -11
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +60 -39
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +3 -12
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +7 -20
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts.map +1 -1
- package/dist/composition/expr-eval.js +2 -11
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/expr-simplify.d.ts +16 -0
- package/dist/composition/expr-simplify.d.ts.map +1 -1
- package/dist/composition/expr-simplify.js +15 -20
- package/dist/composition/expr-simplify.js.map +1 -1
- package/dist/composition/formula-shape.d.ts +23 -4
- package/dist/composition/formula-shape.d.ts.map +1 -1
- package/dist/composition/formula-shape.js +57 -17
- package/dist/composition/formula-shape.js.map +1 -1
- package/dist/composition/graph-structure.d.ts +98 -0
- package/dist/composition/graph-structure.d.ts.map +1 -0
- package/dist/composition/graph-structure.js +167 -0
- package/dist/composition/graph-structure.js.map +1 -0
- package/dist/composition/graph-viz-svg.d.ts.map +1 -1
- package/dist/composition/graph-viz-svg.js +1 -1
- package/dist/composition/graph-viz-svg.js.map +1 -1
- package/dist/composition/graph-viz.d.ts.map +1 -1
- package/dist/composition/graph-viz.js +8 -37
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/identifiability.d.ts +91 -4
- package/dist/composition/identifiability.d.ts.map +1 -1
- package/dist/composition/identifiability.js +363 -6
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +8 -4
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +3 -2
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/mathts-quiet.d.ts +4 -3
- package/dist/composition/mathts-quiet.d.ts.map +1 -1
- package/dist/composition/mathts-quiet.js +4 -3
- package/dist/composition/mathts-quiet.js.map +1 -1
- package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
- package/dist/composition/mathts-scalar-symbols.js +2 -1
- package/dist/composition/mathts-scalar-symbols.js.map +1 -1
- package/dist/composition/probe/corpus.d.ts +4 -2
- package/dist/composition/probe/corpus.d.ts.map +1 -1
- package/dist/composition/probe/corpus.js +20 -9
- package/dist/composition/probe/corpus.js.map +1 -1
- package/dist/composition/probe/dataset.d.ts +17 -0
- package/dist/composition/probe/dataset.d.ts.map +1 -1
- package/dist/composition/probe/dataset.js +95 -50
- package/dist/composition/probe/dataset.js.map +1 -1
- package/dist/composition/probe/experiment-design.d.ts +5 -1
- package/dist/composition/probe/experiment-design.d.ts.map +1 -1
- package/dist/composition/probe/experiment-design.js +44 -24
- package/dist/composition/probe/experiment-design.js.map +1 -1
- package/dist/composition/probe/falsify.d.ts.map +1 -1
- package/dist/composition/probe/falsify.js +2 -0
- package/dist/composition/probe/falsify.js.map +1 -1
- package/dist/composition/probe/fit.d.ts +6 -0
- package/dist/composition/probe/fit.d.ts.map +1 -1
- package/dist/composition/probe/fit.js +46 -22
- package/dist/composition/probe/fit.js.map +1 -1
- package/dist/composition/probe/frontier.d.ts.map +1 -1
- package/dist/composition/probe/frontier.js +33 -15
- package/dist/composition/probe/frontier.js.map +1 -1
- package/dist/composition/probe/generator.d.ts +27 -1
- package/dist/composition/probe/generator.d.ts.map +1 -1
- package/dist/composition/probe/generator.js +53 -30
- package/dist/composition/probe/generator.js.map +1 -1
- package/dist/composition/probe/index.d.ts +14 -0
- package/dist/composition/probe/index.d.ts.map +1 -1
- package/dist/composition/probe/index.js +6 -0
- package/dist/composition/probe/index.js.map +1 -1
- package/dist/composition/probe/limits.d.ts +24 -1
- package/dist/composition/probe/limits.d.ts.map +1 -1
- package/dist/composition/probe/limits.js +53 -11
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/pipeline.d.ts.map +1 -1
- package/dist/composition/probe/pipeline.js +10 -4
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/power-law.d.ts +121 -0
- package/dist/composition/probe/power-law.d.ts.map +1 -0
- package/dist/composition/probe/power-law.js +255 -0
- package/dist/composition/probe/power-law.js.map +1 -0
- package/dist/composition/probe/problem.d.ts +7 -4
- package/dist/composition/probe/problem.d.ts.map +1 -1
- package/dist/composition/probe/problem.js +177 -49
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.js +1 -1
- package/dist/composition/probe/report.js.map +1 -1
- package/dist/composition/probe/residual.d.ts +6 -1
- package/dist/composition/probe/residual.d.ts.map +1 -1
- package/dist/composition/probe/residual.js +9 -7
- package/dist/composition/probe/residual.js.map +1 -1
- package/dist/composition/probe/structure.d.ts +82 -17
- package/dist/composition/probe/structure.d.ts.map +1 -1
- package/dist/composition/probe/structure.js +129 -55
- package/dist/composition/probe/structure.js.map +1 -1
- package/dist/composition/probe/study.d.ts +31 -9
- package/dist/composition/probe/study.d.ts.map +1 -1
- package/dist/composition/probe/study.js +236 -181
- package/dist/composition/probe/study.js.map +1 -1
- package/dist/composition/probe/t-tail.d.ts +17 -0
- package/dist/composition/probe/t-tail.d.ts.map +1 -0
- package/dist/composition/probe/t-tail.js +32 -0
- package/dist/composition/probe/t-tail.js.map +1 -0
- package/dist/composition/probe/types.d.ts +3 -0
- package/dist/composition/probe/types.d.ts.map +1 -1
- package/dist/composition/probe/types.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts +41 -10
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +100 -55
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/quantity-clusters.d.ts +48 -0
- package/dist/composition/quantity-clusters.d.ts.map +1 -0
- package/dist/composition/quantity-clusters.js +98 -0
- package/dist/composition/quantity-clusters.js.map +1 -0
- package/dist/composition/rational-exponent.d.ts +40 -0
- package/dist/composition/rational-exponent.d.ts.map +1 -0
- package/dist/composition/rational-exponent.js +65 -0
- package/dist/composition/rational-exponent.js.map +1 -0
- package/dist/composition/representative-values.d.ts +22 -0
- package/dist/composition/representative-values.d.ts.map +1 -1
- package/dist/composition/representative-values.js +23 -0
- package/dist/composition/representative-values.js.map +1 -1
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +2 -1
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/composition/user-equation.js +2 -2
- package/dist/composition/user-equation.js.map +1 -1
- package/dist/core/assignment.d.ts +19 -0
- package/dist/core/assignment.d.ts.map +1 -0
- package/dist/core/assignment.js +19 -0
- package/dist/core/assignment.js.map +1 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.d.ts.map +1 -0
- package/dist/core/compare.js +46 -0
- package/dist/core/compare.js.map +1 -0
- package/dist/core/constants.d.ts +30 -30
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +47 -30
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +7 -0
- package/dist/core/data-file.d.ts.map +1 -1
- package/dist/core/data-file.js +17 -0
- package/dist/core/data-file.js.map +1 -1
- package/dist/core/format.d.ts +36 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +39 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/hash.d.ts +14 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +17 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/json-schema.d.ts +2 -0
- package/dist/core/json-schema.d.ts.map +1 -1
- package/dist/core/json-schema.js +14 -13
- package/dist/core/json-schema.js.map +1 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/labeled-tensor.js +0 -8
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/mathts-read.d.ts +25 -0
- package/dist/core/mathts-read.d.ts.map +1 -0
- package/dist/core/mathts-read.js +51 -0
- package/dist/core/mathts-read.js.map +1 -0
- package/dist/core/tensor.d.ts.map +1 -1
- package/dist/core/tensor.js +24 -0
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts +5 -5
- package/dist/diff/bridge-gradient.d.ts +19 -6
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +19 -11
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +3 -0
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/algebra.d.ts +18 -0
- package/dist/dimensional/algebra.d.ts.map +1 -1
- package/dist/dimensional/algebra.js +41 -1
- package/dist/dimensional/algebra.js.map +1 -1
- package/dist/dimensional/ast-builders.d.ts +7 -0
- package/dist/dimensional/ast-builders.d.ts.map +1 -1
- package/dist/dimensional/ast-builders.js +11 -0
- package/dist/dimensional/ast-builders.js.map +1 -1
- package/dist/dimensional/ast-leaves.d.ts +81 -0
- package/dist/dimensional/ast-leaves.d.ts.map +1 -0
- package/dist/dimensional/ast-leaves.js +146 -0
- package/dist/dimensional/ast-leaves.js.map +1 -0
- package/dist/dimensional/buckingham.d.ts.map +1 -1
- package/dist/dimensional/buckingham.js +15 -27
- package/dist/dimensional/buckingham.js.map +1 -1
- package/dist/dimensional/constant-rows.js +9 -9
- package/dist/dimensional/constant-rows.js.map +1 -1
- package/dist/dimensional/dimension-inference.d.ts.map +1 -1
- package/dist/dimensional/dimension-inference.js +1 -2
- package/dist/dimensional/dimension-inference.js.map +1 -1
- package/dist/dimensional/errors.d.ts +1 -1
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/errors.js +1 -15
- package/dist/dimensional/errors.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +0 -17
- package/dist/dimensional/exact-scale.d.ts.map +1 -1
- package/dist/dimensional/exact-scale.js +8 -8
- package/dist/dimensional/exact-scale.js.map +1 -1
- package/dist/dimensional/gauge-field.d.ts.map +1 -1
- package/dist/dimensional/gauge-field.js +2 -2
- package/dist/dimensional/gauge-field.js.map +1 -1
- package/dist/dimensional/hyphen-names.d.ts +12 -2
- package/dist/dimensional/hyphen-names.d.ts.map +1 -1
- package/dist/dimensional/hyphen-names.js +44 -19
- package/dist/dimensional/hyphen-names.js.map +1 -1
- package/dist/dimensional/metric.d.ts.map +1 -1
- package/dist/dimensional/metric.js +0 -1
- package/dist/dimensional/metric.js.map +1 -1
- package/dist/dimensional/symbolic-constants.d.ts +9 -0
- package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
- package/dist/dimensional/symbolic-constants.js +13 -1
- package/dist/dimensional/symbolic-constants.js.map +1 -1
- package/dist/dimensional/types.d.ts +36 -0
- package/dist/dimensional/types.d.ts.map +1 -1
- package/dist/dimensional/types.js +45 -7
- package/dist/dimensional/types.js.map +1 -1
- package/dist/dimensional/unit-data.js +2 -2
- package/dist/dimensional/unit-data.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/numerical/christoffel-flat.d.ts.map +1 -1
- package/dist/numerical/christoffel-flat.js +3 -2
- package/dist/numerical/christoffel-flat.js.map +1 -1
- package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
- package/dist/numerical/covariant-eikonal.js +34 -11
- package/dist/numerical/covariant-eikonal.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +3 -2
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/errors.d.ts.map +1 -1
- package/dist/numerical/errors.js +0 -3
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/finite-difference.d.ts +22 -0
- package/dist/numerical/finite-difference.d.ts.map +1 -0
- package/dist/numerical/finite-difference.js +27 -0
- package/dist/numerical/finite-difference.js.map +1 -0
- package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
- package/dist/numerical/geodesic-integrator.js +22 -14
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/geometrized.d.ts.map +1 -1
- package/dist/numerical/geometrized.js +0 -1
- package/dist/numerical/geometrized.js.map +1 -1
- package/dist/numerical/mathts-engine.d.ts.map +1 -1
- package/dist/numerical/mathts-engine.js +10 -24
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.d.ts.map +1 -1
- package/dist/numerical/metric-inverse.js +83 -46
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/null-ray-integrator.d.ts +2 -1
- package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
- package/dist/numerical/null-ray-integrator.js +12 -12
- package/dist/numerical/null-ray-integrator.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js +2 -2
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +0 -36
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +41 -87
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/quadrature.d.ts.map +1 -1
- package/dist/numerical/quadrature.js +8 -10
- package/dist/numerical/quadrature.js.map +1 -1
- package/dist/numerical/rk4-trajectory.d.ts +10 -0
- package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
- package/dist/numerical/rk4-trajectory.js +37 -0
- package/dist/numerical/rk4-trajectory.js.map +1 -0
- package/dist/numerical/schwarzschild.d.ts +14 -0
- package/dist/numerical/schwarzschild.d.ts.map +1 -0
- package/dist/numerical/schwarzschild.js +17 -0
- package/dist/numerical/schwarzschild.js.map +1 -0
- package/dist/numerical/spacetime-metrics.d.ts +12 -0
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +72 -56
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/numerical/statistics.d.ts +24 -0
- package/dist/numerical/statistics.d.ts.map +1 -0
- package/dist/numerical/statistics.js +52 -0
- package/dist/numerical/statistics.js.map +1 -0
- package/dist/numerical/tensor-engine.d.ts +21 -0
- package/dist/numerical/tensor-engine.d.ts.map +1 -1
- package/dist/numerical/tensor-engine.js +12 -0
- package/dist/numerical/tensor-engine.js.map +1 -1
- package/dist/relations/regime.d.ts +10 -0
- package/dist/relations/regime.d.ts.map +1 -1
- package/dist/relations/regime.js +18 -1
- package/dist/relations/regime.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/probe.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/probe.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AA8C/E;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CASvE;AAqgBD,eAAO,MAAM,OAAO,EAAE,OAarB,CAAC"}
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* link and regime-transition gaps abstain and tell the user to use discover.
|
|
6
6
|
*/
|
|
7
7
|
import { readFileSync, statSync } from 'node:fs';
|
|
8
|
+
import { refuseExtraPositionals } from '../args.js';
|
|
8
9
|
import { registerCommand } from '../command.js';
|
|
10
|
+
import { realFlag } from '../numeric-flag.js';
|
|
9
11
|
import { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';
|
|
10
12
|
import { resolveGraph } from '../graphs.js';
|
|
11
13
|
import { emitJson } from '../output.js';
|
|
@@ -32,8 +34,8 @@ const FLAGS = [
|
|
|
32
34
|
{ name: '--holdout-tol', valueStyle: 'attached', description: 'Relative holdout RMSE cap.', defaultValue: PROBE_HOLDOUT_TOL_DEFAULT },
|
|
33
35
|
{ name: '--worker', valueStyle: 'attached', description: 'Optional NDJSON worker, spawned as node PATH. The path must be a .js, .mjs, or .cjs file.' },
|
|
34
36
|
{ name: '--bounds', valueStyle: 'attached', description: 'Bounds for design, as the design subverb reads them.' },
|
|
35
|
-
{ name: '--h1', valueStyle: 'attached', description:
|
|
36
|
-
{ name: '--h2', valueStyle: 'attached', description: 'Second hypothesis for design.' },
|
|
37
|
+
{ name: '--h1', valueStyle: 'attached', description: "First hypothesis for design: an expression-tree JSON file. A symbol node's dim carries all seven exponents, L, M, T, I, Theta, N and J (a dimensionless symbol writes each as 0); a partial record is refused." },
|
|
38
|
+
{ name: '--h2', valueStyle: 'attached', description: 'Second hypothesis for design, an expression-tree JSON file in the form --h1 takes.' },
|
|
37
39
|
{ name: '--searchable-only', valueStyle: 'none', description: 'scan: list only Product-B-searchable gaps. This is the default.' },
|
|
38
40
|
{ name: '--all', valueStyle: 'none', description: 'scan: include Product A wrappers, which are not searchable here.' },
|
|
39
41
|
{ name: '--data', valueStyle: 'attached', description: 'Study file (JSON, or CSV when the name ends in .csv) for study.' },
|
|
@@ -70,7 +72,13 @@ const HELP = `upt probe <scan|show|run|candidates|falsify|rank|design|reproduce|
|
|
|
70
72
|
\`--problem=FILE\`. The id is not that file.
|
|
71
73
|
scan typed frontier gaps (default: searchable only)
|
|
72
74
|
show <gap-id> one gap
|
|
73
|
-
run --problem=FILE bounded native search (MHC / holdout / budget)
|
|
75
|
+
run --problem=FILE bounded native search (MHC / holdout / budget).
|
|
76
|
+
When the governing variables leave dimensionless
|
|
77
|
+
groups, the native enumerator also fits a rational
|
|
78
|
+
power law of the π-groups, base · Π πₖ^(p/q) with
|
|
79
|
+
q ≤ 6 within 2σ, on the exploratory rows only (the
|
|
80
|
+
holdout rows are never fitted); an exponent that is
|
|
81
|
+
no such fraction is reported, not a candidate
|
|
74
82
|
candidates same as run; list stored statuses
|
|
75
83
|
falsify run + print falsification batteries
|
|
76
84
|
rank run + Pareto front
|
|
@@ -189,12 +197,14 @@ const EPISTEMICS = '⚠ experimental Product B. Not a discovery claim. `upt disc
|
|
|
189
197
|
function isSubverb(s) {
|
|
190
198
|
return SUBVERBS.includes(s);
|
|
191
199
|
}
|
|
200
|
+
// Each numeric flag: the grammar first (a malformed token is usage, exit 2), the range after
|
|
201
|
+
// (a well-formed value outside it is a bad value, exit 1).
|
|
192
202
|
function budgetFromFlags(api, flags) {
|
|
193
203
|
const raw = flags.get('budget-ms')?.[0];
|
|
194
204
|
if (raw === undefined)
|
|
195
205
|
return undefined;
|
|
196
|
-
const n =
|
|
197
|
-
if (!
|
|
206
|
+
const n = realFlag('probe', '--budget-ms', raw);
|
|
207
|
+
if (!(n > 0)) {
|
|
198
208
|
throw new CliError('upt probe: --budget-ms must be a positive number');
|
|
199
209
|
}
|
|
200
210
|
return { ...api.DEFAULT_SEARCH_BUDGET, maxWallClockMs: n };
|
|
@@ -203,8 +213,8 @@ function holdoutTolFromFlags(flags) {
|
|
|
203
213
|
const raw = flags.get('holdout-tol')?.[0];
|
|
204
214
|
if (raw === undefined)
|
|
205
215
|
return undefined;
|
|
206
|
-
const n =
|
|
207
|
-
if (!
|
|
216
|
+
const n = realFlag('probe', '--holdout-tol', raw);
|
|
217
|
+
if (!(n > 0)) {
|
|
208
218
|
throw new CliError('upt probe: --holdout-tol must be a positive number');
|
|
209
219
|
}
|
|
210
220
|
return n;
|
|
@@ -226,8 +236,12 @@ function errnoOf(e) {
|
|
|
226
236
|
...(typeof path === 'string' ? { path } : {}),
|
|
227
237
|
};
|
|
228
238
|
}
|
|
229
|
-
/**
|
|
230
|
-
|
|
239
|
+
/**
|
|
240
|
+
* Map probe file/parse failures to CLI errors (no stack traces). `kind` names what the file was
|
|
241
|
+
* read as (`a problem file` for `run --problem`, `an expression file` for a `design` hypothesis,
|
|
242
|
+
* `a bounds file` for its bounds), so a refusal of the loader's own checks says the right thing.
|
|
243
|
+
*/
|
|
244
|
+
function mapProbeError(api, e, context, kind = 'a problem file') {
|
|
231
245
|
if (e instanceof UsageError || e instanceof CliError)
|
|
232
246
|
throw e;
|
|
233
247
|
const errno = errnoOf(e);
|
|
@@ -235,11 +249,13 @@ function mapProbeError(api, e, context) {
|
|
|
235
249
|
throw new CliError(`upt probe: file not found: ${errno.path ?? context ?? 'unknown'}`);
|
|
236
250
|
}
|
|
237
251
|
if (e instanceof SyntaxError) {
|
|
238
|
-
|
|
252
|
+
// The JSON readers prefix the file's path; a context that names it already drops the repeat.
|
|
253
|
+
const message = context !== undefined && e.message.startsWith(`${context}: `) ? e.message.slice(context.length + 2) : e.message;
|
|
254
|
+
throw new CliError(`upt probe: invalid JSON${context ? ` in ${context}` : ''}: ${message}`);
|
|
239
255
|
}
|
|
240
256
|
// The loader checks every field it reads and names the one that is wrong.
|
|
241
257
|
if (e instanceof api.ProblemFileError) {
|
|
242
|
-
throw new CliError(`upt probe: ${context ?? 'the file'} is not
|
|
258
|
+
throw new CliError(`upt probe: ${context ?? 'the file'} is not ${kind}: ${e.message}. \`upt help probe\` shows the format.`);
|
|
243
259
|
}
|
|
244
260
|
// A TypeError or a RangeError past those checks is a field of a shape the loader does not
|
|
245
261
|
// check. It is reported as that, with the engine's words marked as the engine's.
|
|
@@ -280,9 +296,15 @@ function validateWorkerPath(api, worker) {
|
|
|
280
296
|
async function run(ctx) {
|
|
281
297
|
const { args, api, out } = ctx;
|
|
282
298
|
const sub = args.positionals[0];
|
|
283
|
-
if (
|
|
299
|
+
if (sub === undefined) {
|
|
284
300
|
throw new UsageError(`upt probe needs a subverb (${SUBVERBS.join('|')}). See \`upt help probe\`.`);
|
|
285
301
|
}
|
|
302
|
+
// A token that is not a subverb is named as such, not reported as a missing one.
|
|
303
|
+
if (!isSubverb(sub)) {
|
|
304
|
+
throw new UsageError(`upt probe: '${sub}' is not a subverb (${SUBVERBS.join('|')}). See \`upt help probe\`.`);
|
|
305
|
+
}
|
|
306
|
+
// `show` reads its gap id; every other subverb reads the subverb alone (§Hardening).
|
|
307
|
+
refuseExtraPositionals(`probe ${sub}`, args.positionals.slice(sub === 'show' ? 2 : 1), 0);
|
|
286
308
|
const { graph, source } = resolveGraph(api, args.flags);
|
|
287
309
|
if (sub === 'scan') {
|
|
288
310
|
if (args.flags.has('searchable-only') && args.flags.has('all')) {
|
|
@@ -351,12 +373,30 @@ async function run(ctx) {
|
|
|
351
373
|
if (!h1p || !h2p || !bp) {
|
|
352
374
|
throw new UsageError('upt probe design needs --h1=FILE --h2=FILE --bounds=FILE');
|
|
353
375
|
}
|
|
376
|
+
// Each file is parsed under its own name, so an invalid JSON message names the file.
|
|
377
|
+
const parseExpr = (path) => {
|
|
378
|
+
try {
|
|
379
|
+
return api.parseExprJson(path);
|
|
380
|
+
}
|
|
381
|
+
catch (e) {
|
|
382
|
+
mapProbeError(api, e, path, 'an expression file');
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
const h1 = parseExpr(h1p);
|
|
386
|
+
const h2 = parseExpr(h2p);
|
|
387
|
+
let bounds;
|
|
388
|
+
try {
|
|
389
|
+
bounds = api.parseDesignBounds(readJsonFile(api, bp), bp);
|
|
390
|
+
}
|
|
391
|
+
catch (e) {
|
|
392
|
+
mapProbeError(api, e, bp, 'a bounds file');
|
|
393
|
+
}
|
|
354
394
|
let suggestion;
|
|
355
395
|
try {
|
|
356
|
-
suggestion = api.suggestDiscriminatingPoint(
|
|
396
|
+
suggestion = api.suggestDiscriminatingPoint(h1, h2, bounds);
|
|
357
397
|
}
|
|
358
398
|
catch (e) {
|
|
359
|
-
mapProbeError(api, e);
|
|
399
|
+
mapProbeError(api, e, `${h1p}, ${h2p}, ${bp}`);
|
|
360
400
|
}
|
|
361
401
|
if (args.flags.has('json')) {
|
|
362
402
|
emitJson({ command: 'probe', epistemics: EPISTEMICS, result: suggestion }, ctx.write);
|
|
@@ -443,8 +483,8 @@ function alphaFromFlags(flags) {
|
|
|
443
483
|
const raw = flags.get('alpha')?.[0];
|
|
444
484
|
if (raw === undefined)
|
|
445
485
|
return undefined;
|
|
446
|
-
const n =
|
|
447
|
-
if (!
|
|
486
|
+
const n = realFlag('probe', '--alpha', raw);
|
|
487
|
+
if (!(n > 0 && n < 1)) {
|
|
448
488
|
throw new CliError('upt probe: --alpha must be a number in (0, 1)');
|
|
449
489
|
}
|
|
450
490
|
return n;
|
|
@@ -502,6 +542,9 @@ function notFalsified(result) {
|
|
|
502
542
|
export const command = {
|
|
503
543
|
name: 'probe',
|
|
504
544
|
aliases: [],
|
|
545
|
+
// The subverb, and `show`'s gap id. The arity is the subverb's, so `run` refuses the first
|
|
546
|
+
// token past what the subverb reads, naming it under `upt probe <subverb>:`.
|
|
547
|
+
positionals: { max: Infinity },
|
|
505
548
|
flags: FLAGS,
|
|
506
549
|
help: commandHelp(HELP, FLAGS),
|
|
507
550
|
summary: 'Search expressions and residuals. This is not `upt discover`.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../../src/cli/commands/probe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAiC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,iBAAiB,GAAG;IACxB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uEAAuE,EAAE;IAClG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE;IACjD,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,2CAA2C,EAAE;IACrE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,0CAA0C,EAAE;IAC3E,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,uDAAuD,EAAE;IACrF,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,4CAA4C,EAAE;IACvE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qEAAqE,EAAE;IAClG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,qDAAqD,EAAE;IACrF,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,gFAAgF,EAAE;CACpG,CAAC;AACX,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAGtD,MAAM,KAAK,GAAe;IACxB,UAAU,CAAC,SAAS,EAAE,2DAA2D,CAAC;IAClF,SAAS;IACT,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,sEAAsE,EAAE;IAClI,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,iCAAiC,EAAE,YAAY,EAAE,uBAAuB,EAAE;IACtI,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,4BAA4B,EAAE,YAAY,EAAE,yBAAyB,EAAE;IACrI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,2FAA2F,EAAE;IACtJ,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,sDAAsD,EAAE;IACjH,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,8BAA8B,EAAE;IACrF,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,+BAA+B,EAAE;IACtF,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,iEAAiE,EAAE;IACjI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,kEAAkE,EAAE;IACtH,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,iEAAiE,EAAE;IAC1H,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,2DAA2D,EAAE;IAC3H,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE,YAAY,EAAE,0BAA0B,yBAAyB,EAAE,EAAE;CACvJ,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO;QACL,sCAAsC;QACtC,UAAU,KAAK,oCAAoC;YACjD,8CAA8C;QAChD,+DAA+D;QAC/D,wGAAwG;YACtG,yCAAyC;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDA4B0C,uBAAuB;kEACZ,yBAAyB;;;+EAGZ,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mDAyDrD,yBAAyB;;;iEAGX,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAiC7D,YAAY,CAAC,4BAA4B,CAAC;;;qDAGnB,CAAC;AAEtD,MAAM,UAAU,GACd,+FAA+F,CAAC;AAElG,SAAS,SAAS,CAAC,CAAqB;IACtC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAY,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,GAAsB,EAAE,KAA4B;IAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,QAAQ,CAAC,kDAAkD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,GAAG,GAAG,CAAC,qBAAqB,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA4B;IACvD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,QAAQ,CAAC,oDAAoD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,KAA4B;IAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,wDAAwD,CAAC,CAAC;IACvF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,+FAA+F;AAC/F,SAAS,OAAO,CAAC,CAAU;IACzB,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,OAAO;QACL,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,SAAS,aAAa,CAAC,GAAsB,EAAE,CAAU,EAAE,OAAgB;IACzE,IAAI,CAAC,YAAY,UAAU,IAAI,CAAC,YAAY,QAAQ;QAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,QAAQ,CAAC,8BAA8B,KAAK,CAAC,IAAI,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;QAC7B,MAAM,IAAI,QAAQ,CAChB,0BAA0B,OAAO,CAAC,CAAC,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAC1E,CAAC;IACJ,CAAC;IACD,0EAA0E;IAC1E,IAAI,CAAC,YAAY,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,IAAI,QAAQ,CAChB,cAAc,OAAO,IAAI,UAAU,2BAA2B,CAAC,CAAC,OAAO,wCAAwC,CAChH,CAAC;IACJ,CAAC;IACD,0FAA0F;IAC1F,iFAAiF;IACjF,IAAI,CAAC,YAAY,SAAS,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;QACtD,MAAM,IAAI,QAAQ,CAChB,cAAc,OAAO,IAAI,UAAU,8DAA8D,CAAC,CAAC,OAAO,yCAAyC,CACpJ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,CAAC,CAAC;AACV,CAAC;AAED,SAAS,YAAY,CAAC,GAAsB,EAAE,IAAY;IACxD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,SAAS,kBAAkB,CAAC,GAAsB,EAAE,MAAc;IAChE,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,UAAU,CAAC,uDAAuD,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,UAAU,CAAC,sCAAsC,MAAM,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,GAAe;IAChC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAClB,8BAA8B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAExD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,UAAU,CAAC,wDAAwD,CAAC,CAAC;QACjF,CAAC;QACD,uEAAuE;QACvE,oEAAoE;QACpE,mEAAmE;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,QAAQ,CACN;gBACE,OAAO,EAAE,OAAO;gBAChB,MAAM;gBACN,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE;oBACP,IAAI,EAAE;wBACJ,KAAK,EAAE,OAAO,CAAC,MAAM;wBACrB,UAAU,EAAE,UAAU,CAAC,MAAM;wBAC7B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB;qBAC7C;iBACF;gBACD,MAAM,EAAE,IAAI;aACb,EACD,GAAG,CAAC,KAAK,CACV,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,IAAI,IAAI,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACrE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;YACnD,GAAG,CACD,MAAM,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,sDAAsD,CAC/F,CAAC;QACJ,CAAC;QACD,IACE,CAAC,OAAO;YACR,UAAU,CAAC,MAAM,GAAG,CAAC;YACrB,UAAU,CAAC,KAAK,CACd,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,qBAAqB;gBAChC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC3B,CAAC,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAC9B,EACD,CAAC;YACD,GAAG,CACD,uGAAuG;gBACrG,0GAA0G,CAC7G,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,UAAU,CAAC,6DAA6D,CAAC,CAAC;QAC7F,MAAM,GAAG,GAAG,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,iBAAiB,CAAC,CAAC;QAC7E,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACvF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,UAAU,CAAC;QACf,IAAI,CAAC;YACH,UAAU,GAAG,GAAG,CAAC,0BAA0B,CACzC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EACtB,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EACtB,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CACjD,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACtF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,GAAG,CAAC,iCAAiC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,CAAC,iFAAiF,CAAC,CAAC;QACvF,GAAG,CAAC,gCAAgC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;QACjE,GAAG,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnD,GAAG,CAAC,QAAQ,UAAU,CAAC,EAAE,QAAQ,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAElD,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,+FAA+F;IAC/F,IAAI,SAAS,KAAK,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,8DAA8D,CAAC,CAAC;IAC3G,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE;QAC/C,MAAM,EAAE,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;QACxC,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KAC7D,CAAC,CAAC;IAEH,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACxG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,QAAQ,CACN;gBACE,OAAO,EAAE,OAAO;gBAChB,MAAM;gBACN,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;gBACzB,MAAM,EAAE;oBACN,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;oBAC5B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACxC,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;qBACzB,CAAC,CAAC;oBACH,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAChC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;wBACf,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;qBACxB,CAAC,CAAC;oBACH,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,GAAG,CAAC,GAAG,KAAK,SAAS;wBACnB,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE;wBAC/E,CAAC,CAAC,EAAE,CAAC;iBACR;aACF,EACD,GAAG,CAAC,KAAK,CACV,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,eAAe,EAAE,aAAa,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAClD,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO;oBAAE,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3F,CAAC;YACD,qEAAqE;YACrE,+CAA+C;YAC/C,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,IAAI,UAAU,CAAC,iCAAiC,GAAG,GAAG,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,KAA4B;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,QAAQ,CAAC,+CAA+C,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAe,EAAE,MAAiD;IACxF,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,WAAW,KAAK,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,6CAA6C,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,YAAY,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,QAAQ,CACN,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAC3F,GAAG,CAAC,KAAK,CACV,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,wFAAwF;AACxF,MAAM,oBAAoB,GAAqC;IAC7D,kBAAkB,EAChB,sFAAsF;IACxF,QAAQ,EAAE,iDAAiD;IAC3D,uBAAuB,EAAE,kDAAkD;IAC3E,iBAAiB,EAAE,wCAAwC;IAC3D,oBAAoB,EAAE,mCAAmC;IACzD,SAAS,EAAE,iCAAiC;CAC7C,CAAC;AAEF,qEAAqE;AACrE,SAAS,YAAY,CAAC,MAGrB;IACC,OAAO,MAAM,CAAC,UAAU;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,2CAA2C;KACtF,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;IAC9B,OAAO,EAAE,+DAA+D;IACxE,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,WAAW;IAClB,WAAW,EAAE,iBAAiB;IAC9B,GAAG;CACJ,CAAC;AAEF,eAAe,CAAC,OAAO,CAAC,CAAC","sourcesContent":["/**\n * `upt probe <subverb>` — experimental Product B expression/residual search.\n *\n * Orthogonal to `upt discover` (Product A quantity identification). Relation-\n * link and regime-transition gaps abstain and tell the user to use discover.\n */\nimport { readFileSync, statSync } from 'node:fs';\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { UsageError, CliError } from '../errors.js';\nimport { publishedUrl } from '../published-url.js';\nimport {\n PROBE_BUDGET_MS_DEFAULT,\n PROBE_CORRECTION_TERMS_MAX,\n PROBE_HOLDOUT_TOL_DEFAULT,\n PROBE_STUDY_ALPHA_DEFAULT,\n} from '../library-defaults.js';\n\nconst PROBE_SUBCOMMANDS = [\n { name: 'scan', summary: 'List typed frontier gaps. The default listing is the searchable ones.' },\n { name: 'show', summary: 'Print one gap by id.' },\n { name: 'run', summary: 'Run a bounded search from a problem file.' },\n { name: 'candidates', summary: 'Run the search and list stored statuses.' },\n { name: 'falsify', summary: 'Run the search and print the falsification batteries.' },\n { name: 'rank', summary: 'Run the search and print the Pareto front.' },\n { name: 'design', summary: 'Suggest a discriminating experiment from two hypotheses and bounds.' },\n { name: 'reproduce', summary: 'Re-run a problem file under the same stop contract.' },\n { name: 'study', summary: 'Fit exploratory rows only, then test on withheld holdout and replication rows.' },\n] as const;\nconst SUBVERBS = PROBE_SUBCOMMANDS.map((s) => s.name);\ntype Subverb = (typeof SUBVERBS)[number];\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph a subverb reads: catalog, canonical, or both.'),\n JSON_FLAG,\n { name: '--problem', valueStyle: 'attached', description: 'Problem JSON file for run, candidates, falsify, rank, and reproduce.' },\n { name: '--budget-ms', valueStyle: 'attached', description: 'Wall-clock cap in milliseconds.', defaultValue: PROBE_BUDGET_MS_DEFAULT },\n { name: '--holdout-tol', valueStyle: 'attached', description: 'Relative holdout RMSE cap.', defaultValue: PROBE_HOLDOUT_TOL_DEFAULT },\n { name: '--worker', valueStyle: 'attached', description: 'Optional NDJSON worker, spawned as node PATH. The path must be a .js, .mjs, or .cjs file.' },\n { name: '--bounds', valueStyle: 'attached', description: 'Bounds for design, as the design subverb reads them.' },\n { name: '--h1', valueStyle: 'attached', description: 'First hypothesis for design.' },\n { name: '--h2', valueStyle: 'attached', description: 'Second hypothesis for design.' },\n { name: '--searchable-only', valueStyle: 'none', description: 'scan: list only Product-B-searchable gaps. This is the default.' },\n { name: '--all', valueStyle: 'none', description: 'scan: include Product A wrappers, which are not searchable here.' },\n { name: '--data', valueStyle: 'attached', description: 'Study file (JSON, or CSV when the name ends in .csv) for study.' },\n { name: '--replication', valueStyle: 'attached', description: 'study: replication rows from a separate JSON or CSV file.' },\n { name: '--alpha', valueStyle: 'attached', description: 'study: χ² test level.', defaultValue: `the file's alpha, else ${PROBE_STUDY_ALPHA_DEFAULT}` },\n];\n\n/**\n * The text printed when a scan has gaps and none of them are searchable.\n * The live catalog scan is no longer in that state; this wording stays\n * covered by a direct test.\n * @internal\n */\nexport function emptySearchableWarning(total: number): readonly string[] {\n return [\n 'upt probe scan — typed frontier gaps',\n `⚠ 0 of ${total} gaps are searchable by Product B ` +\n `(all are relation-link / regime-transition).`,\n ' Use `upt discover` for those. Pass --all to list them here.',\n ' To search expressions, write a problem file (`upt help probe`, PROBLEM FILE, has a minimal example) ' +\n 'and run `upt probe run --problem=FILE`.',\n ];\n}\n\nconst HELP = `upt probe <scan|show|run|candidates|falsify|rank|design|reproduce|study>\n Experimental expression/residual search (Product B). Orthogonal to\n \\`upt discover\\`, which vets quantity identifications a≡b and is frozen.\n Relation-link / regime-transition gaps are not searchable here — use\n \\`upt discover\\`.\n An \\`fg-expr-<case id>\\` gap is a searchable expression handle: one\n prediction-residual record per applied case, observations empty, built\n from the case id and title. It carries no named baseline and no\n dataset. Scientific-Bridge-Discovery-v1 admits a prediction-residual\n scanner only when both exist, so this listing is not a detected\n residual and not a fitted formula. \\`upt probe run\\` still requires\n \\`--problem=FILE\\`. The id is not that file.\n scan typed frontier gaps (default: searchable only)\n show <gap-id> one gap\n run --problem=FILE bounded native search (MHC / holdout / budget)\n candidates same as run; list stored statuses\n falsify run + print falsification batteries\n rank run + Pareto front\n design --h1= --h2= --bounds= discriminating experiment suggestion\n reproduce --problem=FILE re-run a problem (same stop contract)\n study --data=FILE search + fit on exploratory rows only, then χ²-test\n the candidate and declared baselines on withheld\n holdout / replication rows; suggest a discriminating\n measurement (see STUDY FILE below)\n --replication=FILE study: replication rows from a separate file (JSON\n or CSV) with its own provenance\n --searchable-only scan: only Product-B-searchable gaps (default)\n --all scan: include Product A wrappers (not searchable)\n --budget-ms=N wall-clock cap (default ${PROBE_BUDGET_MS_DEFAULT})\n --holdout-tol=X relative holdout RMSE cap (default ${PROBE_HOLDOUT_TOL_DEFAULT})\n --worker=PATH optional NDJSON worker (spawned as node PATH)\n --source=catalog|canonical|both the graph a subverb reads (default catalog)\n --alpha=X study: χ² test level (default: the file's, else ${PROBE_STUDY_ALPHA_DEFAULT})\n --json machine envelope\n\n PROBLEM FILE (--problem=FILE, JSON)\n target {\"name\", \"dim\"}: the observable to explain. \"dim\" is a named\n dimension (time, length, mass, acceleration, ...) or explicit\n L^a.M^b.T^c (e.g. \"L^3.M^-1.T^-2\").\n governing [{\"name\", \"dim\"}, ...]: the candidate inputs.\n exploratory {\"observable\", \"rows\": [{name: value, ...}, ...]}: the fit data.\n holdout the same shape: the locked data the fit must also pass. A row\n that also appears in exploratory is refused as a leak.\n gap optional {\"id\", \"kind\", \"summary\"}. \"id\" must start with \"fg-\".\n \"kind\" is one of prediction-residual, relation-link,\n regime-transition, parameter-tension, assumption-conflict,\n missing-operator, unexplained-observation (default),\n model-disagreement, causal-mechanism, other.\n role optional on a dataset: exploratory-fit (default for\n exploratory), validation-holdout (default for holdout),\n external-replication, falsification-only.\n observationsPath optional: a separate JSON file with the datasets.\n A dimensionless governing variable is written with \"dim\": \"dimensionless\".\n Minimal example (small-angle pendulum):\n {\n \"target\": {\"name\": \"period\", \"dim\": \"time\"},\n \"governing\": [{\"name\": \"length\", \"dim\": \"length\"},\n {\"name\": \"gravity\", \"dim\": \"acceleration\"}],\n \"exploratory\": {\"observable\": \"period\", \"rows\": [\n {\"length\": 1, \"gravity\": 9.81, \"period\": 2.006},\n {\"length\": 2, \"gravity\": 9.81, \"period\": 2.837},\n {\"length\": 0.5, \"gravity\": 1.62, \"period\": 3.491}]},\n \"holdout\": {\"observable\": \"period\", \"rows\": [\n {\"length\": 1.5, \"gravity\": 3.71, \"period\": 3.995}]}\n }\n\n STUDY FILE (--data=FILE, JSON, or CSV when FILE ends in .csv)\n provenance {\"synthetic\": true|false (required, never inferred),\n \"source\", \"acquisition\"?, \"calibration\"?}\n target {\"name\", \"unit\", \"sigma\"?} sigma: default row uncertainty\n governing [{\"name\", \"unit\", \"sigma\"?}, ...] \"unit\": \"\" when\n dimensionless; \"sigma\": default input uncertainty\n observations [{\"id\"?, \"role\", \"values\": {input: value}, \"observed\",\n \"sigma\"?, \"inputSigma\"?: {input: σ}, \"source\"?}, ...].\n A bare number is in the declared unit; \"120 cm\" is\n converted; a dimension mismatch, a missing σ or an\n undeclared key refuses the file.\n input σ propagated by effective variance: σ_eff² = σ_y² +\n Σ (∂f/∂x_i · σ_x_i)², with each model's own slopes; the\n report states which inputs carry σ. First order in σ_x.\n role exploratory (the only rows searched and fit) | holdout\n (withheld test, e.g. a change of regime) | replication\n (independent acquisition, withheld). A withheld row that\n repeats an exploratory row's inputs, or a replication row\n sharing an exploratory row's source, refuses the file.\n baselines optional [{\"name\", \"formula\", \"fitPrefactor\"?}]: competing\n models over the governing names in SI units, e.g.\n \"2*pi*sqrt(length/gravity)\"; must have the target's dimension.\n fitPrefactor (default false) fits one scale on exploratory rows.\n criterion optional {\"alpha\"} (default ${PROBE_STUDY_ALPHA_DEFAULT})\n design optional {\"variables\": {input: {\"min\", \"max\", \"steps\"?}}}\n correction optional {\"input\": <dimensionless input u>, \"powers\": [2, 4]},\n or a list of them, one per input (at most ${PROBE_CORRECTION_TERMS_MAX} powers in all):\n also search m(x)·(1 + c₁u² + c₂u⁴ + …) for each monomial m,\n fit on exploratory rows only. Terms are admitted in the\n declared order, family by family, while each passes an\n extra-sum-of-squares F test at p < α; the first term a\n family fails ends that family. The families are additive:\n no cross term (u·v) and no other function is searched.\n CSV '# key: value' lines above the header declare the study:\n '# target: <column>', '# target.sigma: 2 ms',\n '# governing.<input>.sigma: σ', '# provenance.synthetic: true',\n '# provenance.source: ...', and any other key above as a\n dotted path; a value is JSON when it parses, else text.\n Header: name[unit] quantity columns (name[] when\n dimensionless), and id, role, source, sigma, sigma(<input>),\n note. An empty cell is absent. Refused for the same\n reasons as the JSON it compiles to.\n REPLICATION FILE (--replication=FILE): provenance, target, governing\n and replication rows only. Refused if its source or\n acquisition is the study's (ignoring case, spacing and\n punctuation), or if a row repeats a study row's data\n exactly (the same data renamed).\n closeness replication rows at a study row's inputs are tested for\n agreement too good to be true: identity (Σz² on ν = n) and\n affine (y_rep = a + b·y_study, ν = n − 2), each a lower-tail\n χ² test at α/2. Either firing makes replication too-close:\n a copy, or an overstated σ. Rows at other inputs are not\n tested, so a copy at altered inputs is not caught.\n Verdicts: no-credible-candidate | refuted-on-holdout | survives-holdout |\n untested-on-holdout; replication is reported separately\n (survives-replication | refuted-on-replication | too-close |\n no-replication-data | not-tested). A candidate\n is credible only if it passes on exploratory rows AND a constant model\n is rejected there. A fit is not a mechanism.\n Synthetic controls: ${publishedUrl('tests/fixtures/probe-study')}/*.synthetic.{json,csv}.\n Every one was designed knowing its generating law, so a recovery shows\n the method recovers that law; none is a blind test of finding an\n unknown one, and UPT ships no blind control.`;\n\nconst EPISTEMICS =\n '⚠ experimental Product B. Not a discovery claim. `upt discover` is the identification funnel.';\n\nfunction isSubverb(s: string | undefined): s is Subverb {\n return SUBVERBS.includes(s as Subverb);\n}\n\nfunction budgetFromFlags(api: CommandCtx['api'], flags: Map<string, string[]>) {\n const raw = flags.get('budget-ms')?.[0];\n if (raw === undefined) return undefined;\n const n = Number(raw);\n if (!Number.isFinite(n) || n <= 0) {\n throw new CliError('upt probe: --budget-ms must be a positive number');\n }\n return { ...api.DEFAULT_SEARCH_BUDGET, maxWallClockMs: n };\n}\n\nfunction holdoutTolFromFlags(flags: Map<string, string[]>): number | undefined {\n const raw = flags.get('holdout-tol')?.[0];\n if (raw === undefined) return undefined;\n const n = Number(raw);\n if (!Number.isFinite(n) || n <= 0) {\n throw new CliError('upt probe: --holdout-tol must be a positive number');\n }\n return n;\n}\n\nfunction problemPath(flags: Map<string, string[]>): string {\n const p = flags.get('problem')?.[0];\n if (!p) throw new UsageError('upt probe: --problem=FILE is required for this subverb');\n return p;\n}\n\n/** The `code` and `path` Node puts on a failed file-system call; empty for any other error. */\nfunction errnoOf(e: unknown): { code?: string; path?: string } {\n if (!(e instanceof Error)) return {};\n const code: unknown = 'code' in e ? e.code : undefined;\n const path: unknown = 'path' in e ? e.path : undefined;\n return {\n ...(typeof code === 'string' ? { code } : {}),\n ...(typeof path === 'string' ? { path } : {}),\n };\n}\n\n/** Map probe file/parse failures to CLI errors (no stack traces). */\nfunction mapProbeError(api: CommandCtx['api'], e: unknown, context?: string): never {\n if (e instanceof UsageError || e instanceof CliError) throw e;\n const errno = errnoOf(e);\n if (errno.code === 'ENOENT') {\n throw new CliError(`upt probe: file not found: ${errno.path ?? context ?? 'unknown'}`);\n }\n if (e instanceof SyntaxError) {\n throw new CliError(\n `upt probe: invalid JSON${context ? ` in ${context}` : ''}: ${e.message}`,\n );\n }\n // The loader checks every field it reads and names the one that is wrong.\n if (e instanceof api.ProblemFileError) {\n throw new CliError(\n `upt probe: ${context ?? 'the file'} is not a problem file: ${e.message}. \\`upt help probe\\` shows the format.`,\n );\n }\n // A TypeError or a RangeError past those checks is a field of a shape the loader does not\n // check. It is reported as that, with the engine's words marked as the engine's.\n if (e instanceof TypeError || e instanceof RangeError) {\n throw new CliError(\n `upt probe: ${context ?? 'the file'} has a field of a shape the probe does not read (internal: ${e.message}). \\`upt help probe\\` shows the format.`,\n );\n }\n if (e instanceof Error) {\n throw new CliError(`upt probe: ${e.message}`);\n }\n throw e;\n}\n\nfunction readJsonFile(api: CommandCtx['api'], path: string): unknown {\n try {\n return JSON.parse(readFileSync(path, 'utf8'));\n } catch (e) {\n mapProbeError(api, e, path);\n }\n}\n\n/** Reject Node flag injection via `--worker=--import=…` etc. */\nfunction validateWorkerPath(api: CommandCtx['api'], worker: string): string {\n if (worker.startsWith('-')) {\n throw new UsageError('upt probe: --worker must be a script path, not a Node flag');\n }\n if (!/\\.(m?js|cjs)$/i.test(worker)) {\n throw new UsageError('upt probe: --worker must be a .js, .mjs, or .cjs file');\n }\n try {\n if (!statSync(worker).isFile()) {\n throw new UsageError(`upt probe: --worker is not a file: ${worker}`);\n }\n } catch (e) {\n mapProbeError(api, e, worker);\n }\n return worker;\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const sub = args.positionals[0];\n if (!isSubverb(sub)) {\n throw new UsageError(\n `upt probe needs a subverb (${SUBVERBS.join('|')}). See \\`upt help probe\\`.`,\n );\n }\n\n const { graph, source } = resolveGraph(api, args.flags);\n\n if (sub === 'scan') {\n if (args.flags.has('searchable-only') && args.flags.has('all')) {\n throw new UsageError('upt probe scan: pick one of --searchable-only or --all');\n }\n // Default: the searchable expression gaps (one prediction-residual per\n // applied case). Product A wrappers stay hidden unless `--all`. The\n // zero-searchable warning is only for a scan that really has none.\n const showAll = args.flags.has('all');\n const allGaps = api.scanWithExpressionGaps(graph);\n const searchable = allGaps.filter((g) => g.searchability.searchable);\n const gaps = showAll ? allGaps : searchable;\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'probe',\n source,\n epistemics: EPISTEMICS,\n options: {\n scan: {\n total: allGaps.length,\n searchable: searchable.length,\n showing: showAll ? 'all' : 'searchable-only',\n },\n },\n result: gaps,\n },\n ctx.write,\n );\n return 0;\n }\n if (!showAll && searchable.length === 0 && allGaps.length > 0) {\n for (const line of emptySearchableWarning(allGaps.length)) out(line);\n return 0;\n }\n out(api.formatFrontierScan(gaps));\n if (!showAll && allGaps.length > searchable.length) {\n out(\n ` (${allGaps.length - searchable.length} Product A wrappers hidden; pass --all to list them)`,\n );\n }\n if (\n !showAll &&\n searchable.length > 0 &&\n searchable.every(\n (g) =>\n g.kind === 'prediction-residual' &&\n g.id.startsWith('fg-expr-') &&\n g.observations.length === 0,\n )\n ) {\n out(\n ' Expression gaps are listed as searchable with empty observations and no named baseline or dataset. ' +\n 'A detected prediction residual needs both. An id is not a problem file (`upt probe run --problem=FILE`).',\n );\n }\n return 0;\n }\n\n if (sub === 'show') {\n const id = args.positionals[1];\n if (!id) throw new UsageError('upt probe show needs a gap id (fg-*). See `upt help probe`.');\n const gap = api.scanWithExpressionGaps(graph).find((g) => g.id === id);\n if (!gap) throw new CliError(`upt probe show: no gap '${id}' on this graph`);\n if (args.flags.has('json')) {\n emitJson({ command: 'probe', source, epistemics: EPISTEMICS, result: gap }, ctx.write);\n return 0;\n }\n out(api.formatFrontierGap(gap));\n return 0;\n }\n\n if (sub === 'design') {\n const h1p = args.flags.get('h1')?.[0];\n const h2p = args.flags.get('h2')?.[0];\n const bp = args.flags.get('bounds')?.[0];\n if (!h1p || !h2p || !bp) {\n throw new UsageError('upt probe design needs --h1=FILE --h2=FILE --bounds=FILE');\n }\n let suggestion;\n try {\n suggestion = api.suggestDiscriminatingPoint(\n api.parseExprJson(h1p),\n api.parseExprJson(h2p),\n api.parseDesignBounds(readJsonFile(api, bp), bp),\n );\n } catch (e) {\n mapProbeError(api, e);\n }\n if (args.flags.has('json')) {\n emitJson({ command: 'probe', epistemics: EPISTEMICS, result: suggestion }, ctx.write);\n return 0;\n }\n if (suggestion.abstained) {\n out(`upt probe design — abstained: ${suggestion.reason}`);\n return 0;\n }\n out('upt probe design — suggested discriminating point (never in a forbidden region)');\n out(` discrimination |H1-H2|/σ = ${suggestion.discrimination}`);\n out(` point ${JSON.stringify(suggestion.point)}`);\n out(` H1=${suggestion.h1} H2=${suggestion.h2}`);\n return 0;\n }\n\n if (sub === 'study') return runStudy(ctx, source);\n\n const pp = problemPath(args.flags);\n let problem;\n try {\n problem = api.loadSearchProblemFromJson(pp);\n } catch (e) {\n mapProbeError(api, e, pp);\n }\n const workerRaw = args.flags.get('worker')?.[0];\n // `--worker=` with nothing after it is not \"no worker\": it is refused, as `--replication=` is.\n if (workerRaw === '') throw new UsageError('upt probe: --worker needs a PATH (a .js, .mjs, or .cjs file)');\n const worker = workerRaw === undefined ? undefined : validateWorkerPath(api, workerRaw);\n const result = await api.runProbeSearch(problem, {\n budget: budgetFromFlags(api, args.flags),\n holdoutTol: holdoutTolFromFlags(args.flags),\n backendArgv: worker ? api.nodeWorkerArgv(worker) : undefined,\n });\n\n if (sub === 'run' || sub === 'reproduce' || sub === 'rank' || sub === 'candidates' || sub === 'falsify') {\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'probe',\n source,\n epistemics: EPISTEMICS,\n options: { subverb: sub },\n result: {\n stopReason: result.stopReason,\n runId: result.manifest.runId,\n candidates: result.candidates.map((c) => ({\n id: c.id,\n status: c.status,\n fingerprint: c.fingerprint,\n complexity: c.complexity,\n })),\n ranked: result.ranked.map((r) => ({\n id: r.record.id,\n pareto: r.pareto,\n scores: r.scores,\n status: r.record.status,\n })),\n wording: result.wording,\n ...(sub === 'falsify'\n ? { falsifications: result.falsifications, notFalsified: notFalsified(result) }\n : {}),\n },\n },\n ctx.write,\n );\n return 0;\n }\n out(api.formatProbeReport(result));\n if (sub === 'falsify') {\n for (const [id, fal] of Object.entries(result.falsifications)) {\n out(`\\n falsify ${id} survived=${fal.survived}`);\n for (const rec of fal.records) out(` ${rec.battery}: ${rec.outcome} — ${rec.detail}`);\n }\n // Every candidate is accounted for (persona finding C5): one without\n // batteries used to be passed over in silence.\n for (const n of notFalsified(result)) {\n out(`\\n falsify ${n.id}: no batteries run — status ${n.status}: ${n.reason}`);\n }\n }\n return 0;\n }\n\n throw new UsageError(`upt probe: unhandled subverb '${sub}'`);\n}\n\nfunction alphaFromFlags(flags: Map<string, string[]>): number | undefined {\n const raw = flags.get('alpha')?.[0];\n if (raw === undefined) return undefined;\n const n = Number(raw);\n if (!Number.isFinite(n) || n <= 0 || n >= 1) {\n throw new CliError('upt probe: --alpha must be a number in (0, 1)');\n }\n return n;\n}\n\nasync function runStudy(ctx: CommandCtx, source: ReturnType<typeof resolveGraph>['source']): Promise<number> {\n const { args, api, out } = ctx;\n const path = args.flags.get('data')?.[0];\n if (!path) throw new UsageError('upt probe study: --data=FILE is required');\n const replication = args.flags.get('replication')?.[0];\n if (replication === '') throw new UsageError('upt probe study: --replication needs a FILE');\n const budget = budgetFromFlags(api, args.flags);\n const alpha = alphaFromFlags(args.flags);\n let study;\n try {\n study = api.loadStudyFile(path, replication);\n } catch (e) {\n mapProbeError(api, e, e instanceof SyntaxError ? undefined : path);\n }\n let result;\n try {\n result = await api.runProbeStudy(study, { budget, alpha });\n } catch (e) {\n mapProbeError(api, e, path);\n }\n if (args.flags.has('json')) {\n emitJson(\n { command: 'probe', source, epistemics: EPISTEMICS, options: { subverb: 'study' }, result },\n ctx.write,\n );\n return 0;\n }\n out(api.formatProbeStudy(result));\n return 0;\n}\n\n/** Why the falsification batteries did not run for a candidate, by its final status. */\nconst NOT_FALSIFIED_REASON: Readonly<Record<string, string>> = {\n 'equivalent-known':\n 'batteries run only for candidates that are not equivalent to a known corpus relation',\n rejected: 'the candidate was rejected before falsification',\n 'insufficient-evidence': 'there were no holdout observations to test it on',\n 'empirically-fit': 'the candidate did not pass its holdout',\n 'structurally-valid': 'the candidate was not fit to data',\n generated: 'the candidate was not validated',\n};\n\n/** The candidates the batteries did not run for, with the reason. */\nfunction notFalsified(result: {\n candidates: readonly { id: string; status: string }[];\n falsifications: Readonly<Record<string, unknown>>;\n}): { id: string; status: string; reason: string }[] {\n return result.candidates\n .filter((c) => !(c.id in result.falsifications))\n .map((c) => ({\n id: c.id,\n status: c.status,\n reason: NOT_FALSIFIED_REASON[c.status] ?? 'the batteries did not run for this status',\n }));\n}\n\nexport const command: Command = {\n name: 'probe',\n aliases: [],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Search expressions and residuals. This is not `upt discover`.',\n example: 'upt probe scan',\n group: 'discovery',\n subcommands: PROBE_SUBCOMMANDS,\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../../src/cli/commands/probe.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt probe <subverb>` — experimental Product B expression/residual search.\n *\n * Orthogonal to `upt discover` (Product A quantity identification). Relation-\n * link and regime-transition gaps abstain and tell the user to use discover.\n */\nimport { readFileSync, statSync } from 'node:fs';\nimport { refuseExtraPositionals, type FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { realFlag } from '../numeric-flag.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { UsageError, CliError } from '../errors.js';\nimport { publishedUrl } from '../published-url.js';\nimport {\n PROBE_BUDGET_MS_DEFAULT,\n PROBE_CORRECTION_TERMS_MAX,\n PROBE_HOLDOUT_TOL_DEFAULT,\n PROBE_STUDY_ALPHA_DEFAULT,\n} from '../library-defaults.js';\n\nconst PROBE_SUBCOMMANDS = [\n { name: 'scan', summary: 'List typed frontier gaps. The default listing is the searchable ones.' },\n { name: 'show', summary: 'Print one gap by id.' },\n { name: 'run', summary: 'Run a bounded search from a problem file.' },\n { name: 'candidates', summary: 'Run the search and list stored statuses.' },\n { name: 'falsify', summary: 'Run the search and print the falsification batteries.' },\n { name: 'rank', summary: 'Run the search and print the Pareto front.' },\n { name: 'design', summary: 'Suggest a discriminating experiment from two hypotheses and bounds.' },\n { name: 'reproduce', summary: 'Re-run a problem file under the same stop contract.' },\n { name: 'study', summary: 'Fit exploratory rows only, then test on withheld holdout and replication rows.' },\n] as const;\nconst SUBVERBS = PROBE_SUBCOMMANDS.map((s) => s.name);\ntype Subverb = (typeof SUBVERBS)[number];\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph a subverb reads: catalog, canonical, or both.'),\n JSON_FLAG,\n { name: '--problem', valueStyle: 'attached', description: 'Problem JSON file for run, candidates, falsify, rank, and reproduce.' },\n { name: '--budget-ms', valueStyle: 'attached', description: 'Wall-clock cap in milliseconds.', defaultValue: PROBE_BUDGET_MS_DEFAULT },\n { name: '--holdout-tol', valueStyle: 'attached', description: 'Relative holdout RMSE cap.', defaultValue: PROBE_HOLDOUT_TOL_DEFAULT },\n { name: '--worker', valueStyle: 'attached', description: 'Optional NDJSON worker, spawned as node PATH. The path must be a .js, .mjs, or .cjs file.' },\n { name: '--bounds', valueStyle: 'attached', description: 'Bounds for design, as the design subverb reads them.' },\n { name: '--h1', valueStyle: 'attached', description:\n \"First hypothesis for design: an expression-tree JSON file. A symbol node's dim carries all seven exponents, L, M, T, I, Theta, N and J (a dimensionless symbol writes each as 0); a partial record is refused.\" },\n { name: '--h2', valueStyle: 'attached', description: 'Second hypothesis for design, an expression-tree JSON file in the form --h1 takes.' },\n { name: '--searchable-only', valueStyle: 'none', description: 'scan: list only Product-B-searchable gaps. This is the default.' },\n { name: '--all', valueStyle: 'none', description: 'scan: include Product A wrappers, which are not searchable here.' },\n { name: '--data', valueStyle: 'attached', description: 'Study file (JSON, or CSV when the name ends in .csv) for study.' },\n { name: '--replication', valueStyle: 'attached', description: 'study: replication rows from a separate JSON or CSV file.' },\n { name: '--alpha', valueStyle: 'attached', description: 'study: χ² test level.', defaultValue: `the file's alpha, else ${PROBE_STUDY_ALPHA_DEFAULT}` },\n];\n\n/**\n * The text printed when a scan has gaps and none of them are searchable.\n * The live catalog scan is no longer in that state; this wording stays\n * covered by a direct test.\n * @internal\n */\nexport function emptySearchableWarning(total: number): readonly string[] {\n return [\n 'upt probe scan — typed frontier gaps',\n `⚠ 0 of ${total} gaps are searchable by Product B ` +\n `(all are relation-link / regime-transition).`,\n ' Use `upt discover` for those. Pass --all to list them here.',\n ' To search expressions, write a problem file (`upt help probe`, PROBLEM FILE, has a minimal example) ' +\n 'and run `upt probe run --problem=FILE`.',\n ];\n}\n\nconst HELP = `upt probe <scan|show|run|candidates|falsify|rank|design|reproduce|study>\n Experimental expression/residual search (Product B). Orthogonal to\n \\`upt discover\\`, which vets quantity identifications a≡b and is frozen.\n Relation-link / regime-transition gaps are not searchable here — use\n \\`upt discover\\`.\n An \\`fg-expr-<case id>\\` gap is a searchable expression handle: one\n prediction-residual record per applied case, observations empty, built\n from the case id and title. It carries no named baseline and no\n dataset. Scientific-Bridge-Discovery-v1 admits a prediction-residual\n scanner only when both exist, so this listing is not a detected\n residual and not a fitted formula. \\`upt probe run\\` still requires\n \\`--problem=FILE\\`. The id is not that file.\n scan typed frontier gaps (default: searchable only)\n show <gap-id> one gap\n run --problem=FILE bounded native search (MHC / holdout / budget).\n When the governing variables leave dimensionless\n groups, the native enumerator also fits a rational\n power law of the π-groups, base · Π πₖ^(p/q) with\n q ≤ 6 within 2σ, on the exploratory rows only (the\n holdout rows are never fitted); an exponent that is\n no such fraction is reported, not a candidate\n candidates same as run; list stored statuses\n falsify run + print falsification batteries\n rank run + Pareto front\n design --h1= --h2= --bounds= discriminating experiment suggestion\n reproduce --problem=FILE re-run a problem (same stop contract)\n study --data=FILE search + fit on exploratory rows only, then χ²-test\n the candidate and declared baselines on withheld\n holdout / replication rows; suggest a discriminating\n measurement (see STUDY FILE below)\n --replication=FILE study: replication rows from a separate file (JSON\n or CSV) with its own provenance\n --searchable-only scan: only Product-B-searchable gaps (default)\n --all scan: include Product A wrappers (not searchable)\n --budget-ms=N wall-clock cap (default ${PROBE_BUDGET_MS_DEFAULT})\n --holdout-tol=X relative holdout RMSE cap (default ${PROBE_HOLDOUT_TOL_DEFAULT})\n --worker=PATH optional NDJSON worker (spawned as node PATH)\n --source=catalog|canonical|both the graph a subverb reads (default catalog)\n --alpha=X study: χ² test level (default: the file's, else ${PROBE_STUDY_ALPHA_DEFAULT})\n --json machine envelope\n\n PROBLEM FILE (--problem=FILE, JSON)\n target {\"name\", \"dim\"}: the observable to explain. \"dim\" is a named\n dimension (time, length, mass, acceleration, ...) or explicit\n L^a.M^b.T^c (e.g. \"L^3.M^-1.T^-2\").\n governing [{\"name\", \"dim\"}, ...]: the candidate inputs.\n exploratory {\"observable\", \"rows\": [{name: value, ...}, ...]}: the fit data.\n holdout the same shape: the locked data the fit must also pass. A row\n that also appears in exploratory is refused as a leak.\n gap optional {\"id\", \"kind\", \"summary\"}. \"id\" must start with \"fg-\".\n \"kind\" is one of prediction-residual, relation-link,\n regime-transition, parameter-tension, assumption-conflict,\n missing-operator, unexplained-observation (default),\n model-disagreement, causal-mechanism, other.\n role optional on a dataset: exploratory-fit (default for\n exploratory), validation-holdout (default for holdout),\n external-replication, falsification-only.\n observationsPath optional: a separate JSON file with the datasets.\n A dimensionless governing variable is written with \"dim\": \"dimensionless\".\n Minimal example (small-angle pendulum):\n {\n \"target\": {\"name\": \"period\", \"dim\": \"time\"},\n \"governing\": [{\"name\": \"length\", \"dim\": \"length\"},\n {\"name\": \"gravity\", \"dim\": \"acceleration\"}],\n \"exploratory\": {\"observable\": \"period\", \"rows\": [\n {\"length\": 1, \"gravity\": 9.81, \"period\": 2.006},\n {\"length\": 2, \"gravity\": 9.81, \"period\": 2.837},\n {\"length\": 0.5, \"gravity\": 1.62, \"period\": 3.491}]},\n \"holdout\": {\"observable\": \"period\", \"rows\": [\n {\"length\": 1.5, \"gravity\": 3.71, \"period\": 3.995}]}\n }\n\n STUDY FILE (--data=FILE, JSON, or CSV when FILE ends in .csv)\n provenance {\"synthetic\": true|false (required, never inferred),\n \"source\", \"acquisition\"?, \"calibration\"?}\n target {\"name\", \"unit\", \"sigma\"?} sigma: default row uncertainty\n governing [{\"name\", \"unit\", \"sigma\"?}, ...] \"unit\": \"\" when\n dimensionless; \"sigma\": default input uncertainty\n observations [{\"id\"?, \"role\", \"values\": {input: value}, \"observed\",\n \"sigma\"?, \"inputSigma\"?: {input: σ}, \"source\"?}, ...].\n A bare number is in the declared unit; \"120 cm\" is\n converted; a dimension mismatch, a missing σ or an\n undeclared key refuses the file.\n input σ propagated by effective variance: σ_eff² = σ_y² +\n Σ (∂f/∂x_i · σ_x_i)², with each model's own slopes; the\n report states which inputs carry σ. First order in σ_x.\n role exploratory (the only rows searched and fit) | holdout\n (withheld test, e.g. a change of regime) | replication\n (independent acquisition, withheld). A withheld row that\n repeats an exploratory row's inputs, or a replication row\n sharing an exploratory row's source, refuses the file.\n baselines optional [{\"name\", \"formula\", \"fitPrefactor\"?}]: competing\n models over the governing names in SI units, e.g.\n \"2*pi*sqrt(length/gravity)\"; must have the target's dimension.\n fitPrefactor (default false) fits one scale on exploratory rows.\n criterion optional {\"alpha\"} (default ${PROBE_STUDY_ALPHA_DEFAULT})\n design optional {\"variables\": {input: {\"min\", \"max\", \"steps\"?}}}\n correction optional {\"input\": <dimensionless input u>, \"powers\": [2, 4]},\n or a list of them, one per input (at most ${PROBE_CORRECTION_TERMS_MAX} powers in all):\n also search m(x)·(1 + c₁u² + c₂u⁴ + …) for each monomial m,\n fit on exploratory rows only. Terms are admitted in the\n declared order, family by family, while each passes an\n extra-sum-of-squares F test at p < α; the first term a\n family fails ends that family. The families are additive:\n no cross term (u·v) and no other function is searched.\n CSV '# key: value' lines above the header declare the study:\n '# target: <column>', '# target.sigma: 2 ms',\n '# governing.<input>.sigma: σ', '# provenance.synthetic: true',\n '# provenance.source: ...', and any other key above as a\n dotted path; a value is JSON when it parses, else text.\n Header: name[unit] quantity columns (name[] when\n dimensionless), and id, role, source, sigma, sigma(<input>),\n note. An empty cell is absent. Refused for the same\n reasons as the JSON it compiles to.\n REPLICATION FILE (--replication=FILE): provenance, target, governing\n and replication rows only. Refused if its source or\n acquisition is the study's (ignoring case, spacing and\n punctuation), or if a row repeats a study row's data\n exactly (the same data renamed).\n closeness replication rows at a study row's inputs are tested for\n agreement too good to be true: identity (Σz² on ν = n) and\n affine (y_rep = a + b·y_study, ν = n − 2), each a lower-tail\n χ² test at α/2. Either firing makes replication too-close:\n a copy, or an overstated σ. Rows at other inputs are not\n tested, so a copy at altered inputs is not caught.\n Verdicts: no-credible-candidate | refuted-on-holdout | survives-holdout |\n untested-on-holdout; replication is reported separately\n (survives-replication | refuted-on-replication | too-close |\n no-replication-data | not-tested). A candidate\n is credible only if it passes on exploratory rows AND a constant model\n is rejected there. A fit is not a mechanism.\n Synthetic controls: ${publishedUrl('tests/fixtures/probe-study')}/*.synthetic.{json,csv}.\n Every one was designed knowing its generating law, so a recovery shows\n the method recovers that law; none is a blind test of finding an\n unknown one, and UPT ships no blind control.`;\n\nconst EPISTEMICS =\n '⚠ experimental Product B. Not a discovery claim. `upt discover` is the identification funnel.';\n\nfunction isSubverb(s: string | undefined): s is Subverb {\n return SUBVERBS.includes(s as Subverb);\n}\n\n// Each numeric flag: the grammar first (a malformed token is usage, exit 2), the range after\n// (a well-formed value outside it is a bad value, exit 1).\nfunction budgetFromFlags(api: CommandCtx['api'], flags: Map<string, string[]>) {\n const raw = flags.get('budget-ms')?.[0];\n if (raw === undefined) return undefined;\n const n = realFlag('probe', '--budget-ms', raw);\n if (!(n > 0)) {\n throw new CliError('upt probe: --budget-ms must be a positive number');\n }\n return { ...api.DEFAULT_SEARCH_BUDGET, maxWallClockMs: n };\n}\n\nfunction holdoutTolFromFlags(flags: Map<string, string[]>): number | undefined {\n const raw = flags.get('holdout-tol')?.[0];\n if (raw === undefined) return undefined;\n const n = realFlag('probe', '--holdout-tol', raw);\n if (!(n > 0)) {\n throw new CliError('upt probe: --holdout-tol must be a positive number');\n }\n return n;\n}\n\nfunction problemPath(flags: Map<string, string[]>): string {\n const p = flags.get('problem')?.[0];\n if (!p) throw new UsageError('upt probe: --problem=FILE is required for this subverb');\n return p;\n}\n\n/** The `code` and `path` Node puts on a failed file-system call; empty for any other error. */\nfunction errnoOf(e: unknown): { code?: string; path?: string } {\n if (!(e instanceof Error)) return {};\n const code: unknown = 'code' in e ? e.code : undefined;\n const path: unknown = 'path' in e ? e.path : undefined;\n return {\n ...(typeof code === 'string' ? { code } : {}),\n ...(typeof path === 'string' ? { path } : {}),\n };\n}\n\n/**\n * Map probe file/parse failures to CLI errors (no stack traces). `kind` names what the file was\n * read as (`a problem file` for `run --problem`, `an expression file` for a `design` hypothesis,\n * `a bounds file` for its bounds), so a refusal of the loader's own checks says the right thing.\n */\nfunction mapProbeError(api: CommandCtx['api'], e: unknown, context?: string, kind = 'a problem file'): never {\n if (e instanceof UsageError || e instanceof CliError) throw e;\n const errno = errnoOf(e);\n if (errno.code === 'ENOENT') {\n throw new CliError(`upt probe: file not found: ${errno.path ?? context ?? 'unknown'}`);\n }\n if (e instanceof SyntaxError) {\n // The JSON readers prefix the file's path; a context that names it already drops the repeat.\n const message = context !== undefined && e.message.startsWith(`${context}: `) ? e.message.slice(context.length + 2) : e.message;\n throw new CliError(\n `upt probe: invalid JSON${context ? ` in ${context}` : ''}: ${message}`,\n );\n }\n // The loader checks every field it reads and names the one that is wrong.\n if (e instanceof api.ProblemFileError) {\n throw new CliError(\n `upt probe: ${context ?? 'the file'} is not ${kind}: ${e.message}. \\`upt help probe\\` shows the format.`,\n );\n }\n // A TypeError or a RangeError past those checks is a field of a shape the loader does not\n // check. It is reported as that, with the engine's words marked as the engine's.\n if (e instanceof TypeError || e instanceof RangeError) {\n throw new CliError(\n `upt probe: ${context ?? 'the file'} has a field of a shape the probe does not read (internal: ${e.message}). \\`upt help probe\\` shows the format.`,\n );\n }\n if (e instanceof Error) {\n throw new CliError(`upt probe: ${e.message}`);\n }\n throw e;\n}\n\nfunction readJsonFile(api: CommandCtx['api'], path: string): unknown {\n try {\n return JSON.parse(readFileSync(path, 'utf8'));\n } catch (e) {\n mapProbeError(api, e, path);\n }\n}\n\n/** Reject Node flag injection via `--worker=--import=…` etc. */\nfunction validateWorkerPath(api: CommandCtx['api'], worker: string): string {\n if (worker.startsWith('-')) {\n throw new UsageError('upt probe: --worker must be a script path, not a Node flag');\n }\n if (!/\\.(m?js|cjs)$/i.test(worker)) {\n throw new UsageError('upt probe: --worker must be a .js, .mjs, or .cjs file');\n }\n try {\n if (!statSync(worker).isFile()) {\n throw new UsageError(`upt probe: --worker is not a file: ${worker}`);\n }\n } catch (e) {\n mapProbeError(api, e, worker);\n }\n return worker;\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const sub = args.positionals[0];\n if (sub === undefined) {\n throw new UsageError(\n `upt probe needs a subverb (${SUBVERBS.join('|')}). See \\`upt help probe\\`.`,\n );\n }\n // A token that is not a subverb is named as such, not reported as a missing one.\n if (!isSubverb(sub)) {\n throw new UsageError(\n `upt probe: '${sub}' is not a subverb (${SUBVERBS.join('|')}). See \\`upt help probe\\`.`,\n );\n }\n // `show` reads its gap id; every other subverb reads the subverb alone (§Hardening).\n refuseExtraPositionals(`probe ${sub}`, args.positionals.slice(sub === 'show' ? 2 : 1), 0);\n\n const { graph, source } = resolveGraph(api, args.flags);\n\n if (sub === 'scan') {\n if (args.flags.has('searchable-only') && args.flags.has('all')) {\n throw new UsageError('upt probe scan: pick one of --searchable-only or --all');\n }\n // Default: the searchable expression gaps (one prediction-residual per\n // applied case). Product A wrappers stay hidden unless `--all`. The\n // zero-searchable warning is only for a scan that really has none.\n const showAll = args.flags.has('all');\n const allGaps = api.scanWithExpressionGaps(graph);\n const searchable = allGaps.filter((g) => g.searchability.searchable);\n const gaps = showAll ? allGaps : searchable;\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'probe',\n source,\n epistemics: EPISTEMICS,\n options: {\n scan: {\n total: allGaps.length,\n searchable: searchable.length,\n showing: showAll ? 'all' : 'searchable-only',\n },\n },\n result: gaps,\n },\n ctx.write,\n );\n return 0;\n }\n if (!showAll && searchable.length === 0 && allGaps.length > 0) {\n for (const line of emptySearchableWarning(allGaps.length)) out(line);\n return 0;\n }\n out(api.formatFrontierScan(gaps));\n if (!showAll && allGaps.length > searchable.length) {\n out(\n ` (${allGaps.length - searchable.length} Product A wrappers hidden; pass --all to list them)`,\n );\n }\n if (\n !showAll &&\n searchable.length > 0 &&\n searchable.every(\n (g) =>\n g.kind === 'prediction-residual' &&\n g.id.startsWith('fg-expr-') &&\n g.observations.length === 0,\n )\n ) {\n out(\n ' Expression gaps are listed as searchable with empty observations and no named baseline or dataset. ' +\n 'A detected prediction residual needs both. An id is not a problem file (`upt probe run --problem=FILE`).',\n );\n }\n return 0;\n }\n\n if (sub === 'show') {\n const id = args.positionals[1];\n if (!id) throw new UsageError('upt probe show needs a gap id (fg-*). See `upt help probe`.');\n const gap = api.scanWithExpressionGaps(graph).find((g) => g.id === id);\n if (!gap) throw new CliError(`upt probe show: no gap '${id}' on this graph`);\n if (args.flags.has('json')) {\n emitJson({ command: 'probe', source, epistemics: EPISTEMICS, result: gap }, ctx.write);\n return 0;\n }\n out(api.formatFrontierGap(gap));\n return 0;\n }\n\n if (sub === 'design') {\n const h1p = args.flags.get('h1')?.[0];\n const h2p = args.flags.get('h2')?.[0];\n const bp = args.flags.get('bounds')?.[0];\n if (!h1p || !h2p || !bp) {\n throw new UsageError('upt probe design needs --h1=FILE --h2=FILE --bounds=FILE');\n }\n // Each file is parsed under its own name, so an invalid JSON message names the file.\n const parseExpr = (path: string) => {\n try {\n return api.parseExprJson(path);\n } catch (e) {\n mapProbeError(api, e, path, 'an expression file');\n }\n };\n const h1 = parseExpr(h1p);\n const h2 = parseExpr(h2p);\n let bounds;\n try {\n bounds = api.parseDesignBounds(readJsonFile(api, bp), bp);\n } catch (e) {\n mapProbeError(api, e, bp, 'a bounds file');\n }\n let suggestion;\n try {\n suggestion = api.suggestDiscriminatingPoint(h1, h2, bounds);\n } catch (e) {\n mapProbeError(api, e, `${h1p}, ${h2p}, ${bp}`);\n }\n if (args.flags.has('json')) {\n emitJson({ command: 'probe', epistemics: EPISTEMICS, result: suggestion }, ctx.write);\n return 0;\n }\n if (suggestion.abstained) {\n out(`upt probe design — abstained: ${suggestion.reason}`);\n return 0;\n }\n out('upt probe design — suggested discriminating point (never in a forbidden region)');\n out(` discrimination |H1-H2|/σ = ${suggestion.discrimination}`);\n out(` point ${JSON.stringify(suggestion.point)}`);\n out(` H1=${suggestion.h1} H2=${suggestion.h2}`);\n return 0;\n }\n\n if (sub === 'study') return runStudy(ctx, source);\n\n const pp = problemPath(args.flags);\n let problem;\n try {\n problem = api.loadSearchProblemFromJson(pp);\n } catch (e) {\n mapProbeError(api, e, pp);\n }\n const workerRaw = args.flags.get('worker')?.[0];\n // `--worker=` with nothing after it is not \"no worker\": it is refused, as `--replication=` is.\n if (workerRaw === '') throw new UsageError('upt probe: --worker needs a PATH (a .js, .mjs, or .cjs file)');\n const worker = workerRaw === undefined ? undefined : validateWorkerPath(api, workerRaw);\n const result = await api.runProbeSearch(problem, {\n budget: budgetFromFlags(api, args.flags),\n holdoutTol: holdoutTolFromFlags(args.flags),\n backendArgv: worker ? api.nodeWorkerArgv(worker) : undefined,\n });\n\n if (sub === 'run' || sub === 'reproduce' || sub === 'rank' || sub === 'candidates' || sub === 'falsify') {\n if (args.flags.has('json')) {\n emitJson(\n {\n command: 'probe',\n source,\n epistemics: EPISTEMICS,\n options: { subverb: sub },\n result: {\n stopReason: result.stopReason,\n runId: result.manifest.runId,\n candidates: result.candidates.map((c) => ({\n id: c.id,\n status: c.status,\n fingerprint: c.fingerprint,\n complexity: c.complexity,\n })),\n ranked: result.ranked.map((r) => ({\n id: r.record.id,\n pareto: r.pareto,\n scores: r.scores,\n status: r.record.status,\n })),\n wording: result.wording,\n ...(sub === 'falsify'\n ? { falsifications: result.falsifications, notFalsified: notFalsified(result) }\n : {}),\n },\n },\n ctx.write,\n );\n return 0;\n }\n out(api.formatProbeReport(result));\n if (sub === 'falsify') {\n for (const [id, fal] of Object.entries(result.falsifications)) {\n out(`\\n falsify ${id} survived=${fal.survived}`);\n for (const rec of fal.records) out(` ${rec.battery}: ${rec.outcome} — ${rec.detail}`);\n }\n // Every candidate is accounted for (persona finding C5): one without\n // batteries used to be passed over in silence.\n for (const n of notFalsified(result)) {\n out(`\\n falsify ${n.id}: no batteries run — status ${n.status}: ${n.reason}`);\n }\n }\n return 0;\n }\n\n throw new UsageError(`upt probe: unhandled subverb '${sub}'`);\n}\n\nfunction alphaFromFlags(flags: Map<string, string[]>): number | undefined {\n const raw = flags.get('alpha')?.[0];\n if (raw === undefined) return undefined;\n const n = realFlag('probe', '--alpha', raw);\n if (!(n > 0 && n < 1)) {\n throw new CliError('upt probe: --alpha must be a number in (0, 1)');\n }\n return n;\n}\n\nasync function runStudy(ctx: CommandCtx, source: ReturnType<typeof resolveGraph>['source']): Promise<number> {\n const { args, api, out } = ctx;\n const path = args.flags.get('data')?.[0];\n if (!path) throw new UsageError('upt probe study: --data=FILE is required');\n const replication = args.flags.get('replication')?.[0];\n if (replication === '') throw new UsageError('upt probe study: --replication needs a FILE');\n const budget = budgetFromFlags(api, args.flags);\n const alpha = alphaFromFlags(args.flags);\n let study;\n try {\n study = api.loadStudyFile(path, replication);\n } catch (e) {\n mapProbeError(api, e, e instanceof SyntaxError ? undefined : path);\n }\n let result;\n try {\n result = await api.runProbeStudy(study, { budget, alpha });\n } catch (e) {\n mapProbeError(api, e, path);\n }\n if (args.flags.has('json')) {\n emitJson(\n { command: 'probe', source, epistemics: EPISTEMICS, options: { subverb: 'study' }, result },\n ctx.write,\n );\n return 0;\n }\n out(api.formatProbeStudy(result));\n return 0;\n}\n\n/** Why the falsification batteries did not run for a candidate, by its final status. */\nconst NOT_FALSIFIED_REASON: Readonly<Record<string, string>> = {\n 'equivalent-known':\n 'batteries run only for candidates that are not equivalent to a known corpus relation',\n rejected: 'the candidate was rejected before falsification',\n 'insufficient-evidence': 'there were no holdout observations to test it on',\n 'empirically-fit': 'the candidate did not pass its holdout',\n 'structurally-valid': 'the candidate was not fit to data',\n generated: 'the candidate was not validated',\n};\n\n/** The candidates the batteries did not run for, with the reason. */\nfunction notFalsified(result: {\n candidates: readonly { id: string; status: string }[];\n falsifications: Readonly<Record<string, unknown>>;\n}): { id: string; status: string; reason: string }[] {\n return result.candidates\n .filter((c) => !(c.id in result.falsifications))\n .map((c) => ({\n id: c.id,\n status: c.status,\n reason: NOT_FALSIFIED_REASON[c.status] ?? 'the batteries did not run for this status',\n }));\n}\n\nexport const command: Command = {\n name: 'probe',\n aliases: [],\n // The subverb, and `show`'s gap id. The arity is the subverb's, so `run` refuses the first\n // token past what the subverb reads, naming it under `upt probe <subverb>:`.\n positionals: { max: Infinity },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Search expressions and residuals. This is not `upt discover`.',\n example: 'upt probe scan',\n group: 'discovery',\n subcommands: PROBE_SUBCOMMANDS,\n run,\n};\n\nregisterCommand(command);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regime.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/regime.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAmB,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAyD/E;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EACtB,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BxB;AAKD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EACtB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,OAAO,EAAE,SAAS;IAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IAAC,YAAY,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,EAAE,GAC9J;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA6BvD;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAGzG;AA+PD,eAAO,MAAM,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"regime.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/regime.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAmB,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAyD/E;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EACtB,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BxB;AAKD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EACtB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,OAAO,EAAE,SAAS;IAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IAAC,YAAY,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,EAAE,GAC9J;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA6BvD;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAGzG;AA+PD,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
|
|
@@ -386,6 +386,7 @@ async function run(ctx) {
|
|
|
386
386
|
export const command = {
|
|
387
387
|
name: 'regime',
|
|
388
388
|
aliases: [],
|
|
389
|
+
positionals: { max: Infinity },
|
|
389
390
|
flags: FLAGS,
|
|
390
391
|
help: commandHelp(HELP, FLAGS),
|
|
391
392
|
summary: 'Report where a family\'s models are valid, violated, or unknown.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regime.js","sourceRoot":"","sources":["../../../src/cli/commands/regime.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt regime` — where in parameter space a family's models are claimed to\n * apply, and where nothing is claimed at all.\n *\n * The whole point of this command is the TRI-STATE of `regimeHolds`. A model\n * whose regime could not be checked at the given point is reported as\n * UNKNOWN, never as valid and never as violated: `'unknown'` is a failure to\n * confirm validity, and folding it either way is the silent pass\n * `atlas/regime.ts` exists to prevent. The text and JSON forms therefore both\n * carry three buckets, not two.\n *\n * `--at` states the point. Values are π-group values keyed by\n * `PiGroup.formula` (or a dimensionless input's own name), so `--at\n * theta0=0.2` is a coordinate, not a parameter of the physics.\n *\n * The uncovered-region report is taken over the box the CALLER stated and no\n * other: `uncoveredRegions` refuses to synthesize an extent, so with no `--at`\n * there is no box and the command says so rather than inventing one.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { CliError, EXIT_CHECK_FAILED, UsageError } from '../errors.js';\nimport { emitJson } from '../output.js';\nimport { splitAssignments } from '../bindings.js';\n\nconst FLAGS: FlagSpec[] = [\n {\n name: '--at',\n valueStyle: 'either',\n repeatable: true,\n description: 'State one regime coordinate as group=value. A value may be an expression such as pi/2.',\n },\n {\n name: '--assume',\n valueStyle: 'either',\n repeatable: true,\n description: 'Record a prose premise as your declaration. It is not evidence and it is not evaluated.',\n },\n {\n name: '--deny',\n valueStyle: 'either',\n repeatable: true,\n description: 'Mark one prose premise contradicted. The others stay unspecified.',\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt regime <family> [--at group=value ...] [--assume premise ...] [--deny premise ...] [--json]\n Where in parameter space a family's models are claimed to apply.\n --at states a point in REGIME COORDINATES (π-group formulas, or a\n dimensionless input's own name, e.g. --at theta0=0.2). Every model AND\n bridge is reported as valid, violated (naming the failed inequality),\n or UNKNOWN — a coordinate the point never supplied is NOT a pass, and a\n regime that states no inequality reads 'no machine condition evaluated\n (VACUOUS …)' rather than passed (\\`upt help statuses\\` defines each word).\n Each inequality is listed as satisfied, violated or unchecked. A\n bridge's prose side conditions (lossless, no-slip, ...) are never\n evaluated: they are listed as premises not machine-checked unless you\n --assume one (recorded as your declaration, not as evidence) or --deny\n one (the record then does not apply as stated). Both match a side\n condition by case-insensitive substring and never change the\n inequality verdict.\n A group can be given by its formula (spaces ignored, * read as ·, so\n --at \"tau*D*q^2=1\" works) or through its parameters: --at tau=1 D=1\n q=1 derives tau · D · q^2 = 1. A key that no record uses is named, and\n ignored.\n Also prints the pairwise overlap of the regimes and, over the box --at\n states, the points no CONSTRAINING regime covers.\n Exit 3 when any record is VIOLATED. VACUOUS, UNKNOWN and a survey with\n no violated record exit 0.\n A value is a number, a unit, or a constant expression (theta0=pi/2,\n t=1s). A bare number is already in the coordinate's unit.\n T, temperature, temp, and T_K are kelvin: an energy on that name is k_B T.\n e.g. upt regime <name> --at theta0=0.2\n upt regime <name> --deny lossless`;\n\n/**\n * Collect `group=value` assignments from `--at` values and from bare\n * positionals, so `--at theta0=0.2 T0=1 t=10` works as written: the parser\n * gives `--at` one value and leaves the rest as positionals.\n *\n * @throws UsageError on a token with no `=`, CliError on a non-finite value or\n * a group given twice. A dropped coordinate would silently turn a CHECKED\n * inequality into an unchecked one, which is exactly the reading this\n * command exists to keep honest.\n * @internal\n */\nexport function parseAt(\n api: CommandCtx['api'],\n raw: readonly string[],\n command: string,\n notes?: string[],\n): Record<string, number> {\n const assignments = splitAssignments(command, raw, 'group=value');\n const siblings = assignments.map((a) => ({ name: a.name, raw: a.raw }));\n const point: Record<string, number> = {};\n for (const a of assignments) {\n try {\n const read = api.readNamedBinding(a.name, a.raw, { siblings });\n if (a.raw === '' || !Number.isFinite(read.value)) {\n throw new CliError(`upt ${command}: '${a.token}' is not a finite number`);\n }\n point[a.name] = read.value;\n if (notes !== undefined) {\n for (const note of read.notes) if (!notes.includes(note)) notes.push(note);\n }\n } catch (e) {\n if (e instanceof CliError) throw e;\n if (e instanceof api.TemperatureBindingError) {\n throw new CliError(`upt ${command}: '${a.token}' is not a temperature. ${e.message}`);\n }\n throw new CliError(`upt ${command}: '${a.token}' is not a finite number. ${(e as Error).message}`);\n }\n }\n try {\n api.assertSynonymAgreement(point);\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt ${command}: ${e.message}`);\n throw e;\n }\n return point;\n}\n\n/** A group name with spaces removed and `*` read as `·`, for comparison only. */\nconst normalizeGroup = (name: string): string => name.replace(/\\s+/g, '').replace(/\\*/g, '·');\n\n/**\n * Resolve an `--at` point against the regimes it will be checked against\n * (persona finding F1). A key naming a group matches it with spaces ignored and\n * `*` read as `·`, so `tau*D*q^2` reaches the group `tau · D · q^2`. A group\n * whose parameters are all given, and which the point does not state itself, is\n * derived from them: the product of each parameter to its exponent. `unknown`\n * lists the keys that are neither a group nor a parameter of any regime here.\n * @internal\n */\nexport function resolveAtPoint(\n api: CommandCtx['api'],\n point: Readonly<Record<string, number>>,\n regimes: readonly { groupDefinitions: Readonly<Record<string, { exponents: Readonly<Record<string, number>> }>>; inequalities: readonly { group: string }[] }[],\n): { values: Record<string, number>; unknown: string[] } {\n const groups = new Map<string, Readonly<Record<string, number>>>();\n for (const r of regimes) {\n for (const [key, g] of Object.entries(r.groupDefinitions)) groups.set(key, g.exponents);\n for (const i of r.inequalities) if (!groups.has(i.group)) groups.set(i.group, { [i.group]: 1 });\n }\n const byNormal = new Map([...groups.keys()].map((k) => [normalizeGroup(k), k]));\n const named = new Set<string>([...groups.keys(), ...[...groups.values()].flatMap((e) => Object.keys(e))]);\n // A zero exponent does not enter the product: two records can key the same\n // group with and without an extra `c: 0`, and that must not block derivation.\n const used = (e: Readonly<Record<string, number>>) => Object.keys(e).filter((n) => e[n] !== 0);\n const parameters = new Set([...groups.values()].flatMap(used));\n const values: Record<string, number> = {};\n const unknown: string[] = [];\n for (const [key, value] of Object.entries(point)) {\n const resolved = api.resolveQuantityName(key, named) ?? key;\n const group = byNormal.get(normalizeGroup(resolved)) ?? byNormal.get(normalizeGroup(key));\n const stored = group ?? resolved;\n values[stored] = value;\n if (group === undefined && !parameters.has(stored) && !parameters.has(key)) unknown.push(key);\n }\n for (const [key, exponents] of groups) {\n if (key in values) continue;\n const names = used(exponents);\n if (names.length > 0 && names.every((n) => typeof values[n] === 'number')) {\n values[key] = names.reduce((acc, n) => acc * Math.pow(values[n]!, exponents[n]!), 1);\n }\n }\n return { values, unknown };\n}\n\n/** Display form of one inequality — the alias when the record states one. */\nexport function showInequality(ineq: { group: string; op: string; bound: number; alias?: string }): string {\n const literal = `${ineq.group} ${ineq.op} ${ineq.bound}`;\n return ineq.alias === undefined ? literal : `${literal} (${ineq.alias})`;\n}\n\n/** The group names an inequality list mentions. */\nfunction groupsOf(inequalities: readonly { group: string }[]): Set<string> {\n return new Set(inequalities.map((i) => i.group));\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out, err } = ctx;\n const wantJson = args.flags.has('json');\n const [familyArg, ...rest] = args.positionals.filter((p) => !p.includes('='));\n const assignments = [...(args.flags.get('at') ?? []), ...args.positionals.filter((p) => p.includes('='))];\n\n if (familyArg === undefined) {\n throw new UsageError('upt regime: a name is required (e.g. `upt regime <name>`)');\n }\n if (rest.length > 0) {\n throw new UsageError(`upt regime: unexpected argument '${rest[0]}' (one family at a time)`);\n }\n // Atlas families project into the same registry a domain module adds to.\n // This command used to read the family array alone, so a name that was not\n // one of those families had nowhere to put an inequality.\n const registrations = [\n ...api.ATLAS_FAMILIES.map((family) => ({\n name: family.family,\n records: [\n ...family.models.map((m) => ({\n id: m.id,\n kind: 'model' as const,\n regime: m.regime,\n sideConditions: undefined as readonly string[] | undefined,\n })),\n ...family.bridges.map((b) => ({\n id: b.id,\n kind: 'bridge' as const,\n regime: b.regime,\n sideConditions: b.sideConditions,\n })),\n ],\n })),\n ...api.domainRegimeRegistrations(),\n ];\n const registration = registrations.find((entry) => entry.name === familyArg);\n if (registration === undefined) {\n throw new CliError(\n `upt regime: unknown family '${familyArg}' (known: ${registrations.map((entry) => entry.name).join(', ')})`,\n );\n }\n\n const atNotes: string[] = [];\n const point = parseAt(api, assignments, 'regime', atNotes);\n for (const note of atNotes) err(note);\n const stated = Object.keys(point);\n const assume = args.flags.get('assume') ?? [];\n const deny = args.flags.get('deny') ?? [];\n for (const a of assume) {\n if (deny.some((d) => d.toLowerCase() === a.toLowerCase())) {\n throw new CliError(`upt regime: '${a}' is both assumed and denied`);\n }\n }\n const matches = (declaration: string, premise: string) =>\n declaration !== '' && premise.toLowerCase().includes(declaration.toLowerCase());\n\n // Models AND bridges, because in this family every MODEL regime states zero\n // inequalities and only the BRIDGES carry real ones. A models-only report\n // would print nine confident 'valid's that were never checked against\n // anything — the tri-state's `true` is vacuous when there is nothing to\n // check, so that case is labelled rather than left to read as a pass.\n const records = registration.records;\n\n const { values: resolved, unknown } = resolveAtPoint(api, point, records.map((r) => r.regime));\n const unmatched = [\n ...assume.map((d) => ({ flag: '--assume', d })),\n ...deny.map((d) => ({ flag: '--deny', d })),\n ].filter(({ d }) => !records.some((r) => (r.sideConditions ?? []).some((p) => matches(d, p))));\n\n const verdicts = records.map((r) => {\n const check = api.regimeHolds(r.regime, resolved);\n const violated = check.violated.map(showInequality);\n const unchecked = check.unchecked.map(showInequality);\n const satisfied = r.regime.inequalities\n .map(showInequality)\n .filter((s) => !violated.includes(s) && !unchecked.includes(s));\n const prose = r.sideConditions ?? [];\n const deniedByUser = prose.filter((p) => deny.some((d) => matches(d, p)));\n const declaredByUser = prose.filter((p) => !deniedByUser.includes(p) && assume.some((a) => matches(a, p)));\n const unspecified = prose.filter((p) => !deniedByUser.includes(p) && !declaredByUser.includes(p));\n return {\n id: r.id,\n kind: r.kind,\n ok: check.ok,\n vacuous: r.regime.inequalities.length === 0,\n verdict:\n r.regime.inequalities.length === 0\n ? ('vacuous' as const)\n : check.ok === true\n ? ('valid' as const)\n : check.ok === false\n ? ('violated' as const)\n : ('unknown' as const),\n violated,\n unchecked,\n // The two bases never mix: `machine` is what this command evaluated at\n // the point; the rest is prose, and a user's word about it is recorded\n // as a declaration, never promoted to a check.\n premises: {\n machine: { satisfied, violated, unchecked },\n declaredByUser,\n deniedByUser,\n unspecified,\n },\n // Prose side conditions are premises this command cannot evaluate; only\n // the inequalities above were checked. A premise with a machine form is\n // checked only through its inequality.\n ...(r.sideConditions !== undefined && r.sideConditions.length > 0\n ? { premisesNotChecked: [...r.sideConditions] }\n : {}),\n };\n });\n\n // Pairwise overlap, restricted to pairs that actually SHARE a coordinate.\n // `regimeOverlap` classifies on shared names only, so a pair with none is\n // vacuously 'nested' — a true answer that says nothing, and printing it\n // would bury the pairs that do constrain each other.\n const overlaps: { a: string; b: string; overlap: string; sharedGroups: string[] }[] = [];\n for (let i = 0; i < records.length; i++) {\n for (let j = i + 1; j < records.length; j++) {\n const a = records[i]!;\n const b = records[j]!;\n const gb = groupsOf(b.regime.inequalities);\n const shared = [...groupsOf(a.regime.inequalities)].filter((g) => gb.has(g));\n if (shared.length === 0) continue;\n overlaps.push({\n a: a.id,\n b: b.id,\n overlap: api.regimeOverlap(a.regime, b.regime),\n sharedGroups: shared,\n });\n }\n }\n\n // The box is what --at states, and nothing else.\n const samples: Record<string, number[]> = {};\n for (const [group, value] of Object.entries(resolved)) samples[group] = [value];\n // `uncoveredRegions` counts a record as covering a point only when it checked an\n // inequality there, so an unconstrained model regime covers nothing and every record\n // can be passed. The constraining count is the report's, not a filter.\n const constraining = records.filter((r) => r.regime.inequalities.length > 0);\n const uncovered =\n stated.length === 0 ? null : api.uncoveredRegions(registration.name, records, samples);\n\n if (wantJson) {\n emitJson(\n {\n command: 'regime',\n epistemics:\n \"an 'unknown' verdict is a failure to confirm validity, NEVER validity: a coordinate the \" +\n 'point did not supply was not checked, and an unchecked inequality is not a satisfied one. ' +\n 'Uncovered regions are reported only over the box --at states; none is synthesized.',\n options: { family: registration.name, at: point, assume, deny },\n result: {\n resolvedPoint: resolved,\n unknownCoordinates: unknown,\n unmatchedDeclarations: unmatched.map(({ flag, d }) => ({ flag, declaration: d })),\n records: verdicts,\n overlaps,\n uncovered:\n uncovered === null\n ? null\n : { boxStated: true, points: uncovered.map((r) => ({ point: r.point })) },\n },\n },\n ctx.write,\n );\n return verdicts.some((v) => v.ok === false) ? EXIT_CHECK_FAILED : 0;\n }\n\n out(`\\nRegimes of family '${registration.name}'`);\n // A family whose records state no inequality has nothing to check at any point: VACUOUS, not UNCHECKED.\n const allVacuous = verdicts.every((v) => v.vacuous);\n out(\n allVacuous\n ? '(this family states no inequality: every record is VACUOUS, and no --at point could check it)'\n : stated.length === 0\n ? '(no --at point supplied: every inequality is UNCHECKED, which is not a pass)'\n : `at ${stated.map((g) => `${g}=${point[g]}`).join(' · ')}`,\n );\n if (unknown.length > 0) {\n out(\n `unknown coordinate(s): ${unknown.join(', ')} — no record in family '${registration.name}' uses ` +\n `${unknown.length === 1 ? 'it' : 'them'}; ignored`,\n );\n }\n for (const { flag, d } of unmatched) {\n out(`${flag} '${d}' matches no side condition in family '${registration.name}'; ignored`);\n }\n out('');\n for (const m of verdicts) {\n // A record that states no inequality was not checked, so its line does not begin with a verdict\n // that reads as a pass (audit I13); the tri-state's `true` is vacuous there.\n const verdict = m.vacuous\n ? 'no machine condition evaluated (VACUOUS — states no inequality; nothing was checked)'\n : m.ok === true\n ? 'valid'\n : m.ok === false\n ? 'VIOLATED'\n : 'unknown';\n out(` [${m.kind}] ${m.id}: ${verdict}`);\n for (const v of m.violated) out(` violated: ${v}`);\n for (const u of m.unchecked) out(` unchecked (no value supplied): ${u}`);\n for (const s of m.premises.machine.satisfied) out(` satisfied: ${s}`);\n if (!m.vacuous && m.violated.length === 0 && m.unchecked.length === 0) {\n out(' every inequality checked and satisfied');\n }\n const p = m.premises;\n if (p.declaredByUser.length > 0) {\n out(` declared by you (a declaration, not evidence): ${p.declaredByUser.join('; ')}`);\n }\n if (p.deniedByUser.length > 0) {\n out(` CONTRADICTED by your --deny: ${p.deniedByUser.join('; ')} — this record does not apply as stated`);\n }\n if (p.unspecified.length > 0) {\n out(` premises not machine-checked: ${p.unspecified.join('; ')}`);\n }\n }\n\n out('');\n out('Pairwise overlap (on shared coordinates only):');\n if (overlaps.length === 0) {\n out(' no two regimes share a coordinate, so none constrains another');\n } else {\n for (const o of overlaps) {\n out(` ${o.a} vs ${o.b}: ${o.overlap} — shared: ${o.sharedGroups.join(', ')}`);\n }\n }\n\n out('');\n if (uncovered === null) {\n out('Uncovered regions: no box stated. Pass --at to say where you want to know about;');\n out(' a synthesized box would measure this tool’s guess, not the atlas.');\n } else if (uncovered.length === 0) {\n out('Uncovered regions: none — some constraining regime holds at every point of the stated box.');\n } else {\n out(\n `Uncovered regions: ${uncovered.length} point(s) of the stated box that no CONSTRAINING ` +\n `regime covers (${constraining.length} of ${records.length} records state an inequality):`,\n );\n for (const r of uncovered) {\n out(` ${Object.entries(r.point).map(([g, v]) => `${g}=${v}`).join(' · ')}`);\n }\n out(\" (an 'unknown' is not coverage — see the tri-state rule above)\");\n }\n return verdicts.some((v) => v.ok === false) ? EXIT_CHECK_FAILED : 0;\n}\n\nexport const command: Command = {\n name: 'regime',\n aliases: [],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Report where a family\\'s models are valid, violated, or unknown.',\n example: 'upt regime oscillators --at theta0=0.2',\n group: 'explore',\n run,\n};\nregisterCommand(command);\n"]}
|
|
1
|
+
{"version":3,"file":"regime.js","sourceRoot":"","sources":["../../../src/cli/commands/regime.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt regime` — where in parameter space a family's models are claimed to\n * apply, and where nothing is claimed at all.\n *\n * The whole point of this command is the TRI-STATE of `regimeHolds`. A model\n * whose regime could not be checked at the given point is reported as\n * UNKNOWN, never as valid and never as violated: `'unknown'` is a failure to\n * confirm validity, and folding it either way is the silent pass\n * `atlas/regime.ts` exists to prevent. The text and JSON forms therefore both\n * carry three buckets, not two.\n *\n * `--at` states the point. Values are π-group values keyed by\n * `PiGroup.formula` (or a dimensionless input's own name), so `--at\n * theta0=0.2` is a coordinate, not a parameter of the physics.\n *\n * The uncovered-region report is taken over the box the CALLER stated and no\n * other: `uncoveredRegions` refuses to synthesize an extent, so with no `--at`\n * there is no box and the command says so rather than inventing one.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG } from '../flag-help.js';\nimport { CliError, EXIT_CHECK_FAILED, UsageError } from '../errors.js';\nimport { emitJson } from '../output.js';\nimport { splitAssignments } from '../bindings.js';\n\nconst FLAGS: FlagSpec[] = [\n {\n name: '--at',\n valueStyle: 'either',\n repeatable: true,\n description: 'State one regime coordinate as group=value. A value may be an expression such as pi/2.',\n },\n {\n name: '--assume',\n valueStyle: 'either',\n repeatable: true,\n description: 'Record a prose premise as your declaration. It is not evidence and it is not evaluated.',\n },\n {\n name: '--deny',\n valueStyle: 'either',\n repeatable: true,\n description: 'Mark one prose premise contradicted. The others stay unspecified.',\n },\n JSON_FLAG,\n];\n\nconst HELP = `upt regime <family> [--at group=value ...] [--assume premise ...] [--deny premise ...] [--json]\n Where in parameter space a family's models are claimed to apply.\n --at states a point in REGIME COORDINATES (π-group formulas, or a\n dimensionless input's own name, e.g. --at theta0=0.2). Every model AND\n bridge is reported as valid, violated (naming the failed inequality),\n or UNKNOWN — a coordinate the point never supplied is NOT a pass, and a\n regime that states no inequality reads 'no machine condition evaluated\n (VACUOUS …)' rather than passed (\\`upt help statuses\\` defines each word).\n Each inequality is listed as satisfied, violated or unchecked. A\n bridge's prose side conditions (lossless, no-slip, ...) are never\n evaluated: they are listed as premises not machine-checked unless you\n --assume one (recorded as your declaration, not as evidence) or --deny\n one (the record then does not apply as stated). Both match a side\n condition by case-insensitive substring and never change the\n inequality verdict.\n A group can be given by its formula (spaces ignored, * read as ·, so\n --at \"tau*D*q^2=1\" works) or through its parameters: --at tau=1 D=1\n q=1 derives tau · D · q^2 = 1. A key that no record uses is named, and\n ignored.\n Also prints the pairwise overlap of the regimes and, over the box --at\n states, the points no CONSTRAINING regime covers.\n Exit 3 when any record is VIOLATED. VACUOUS, UNKNOWN and a survey with\n no violated record exit 0.\n A value is a number, a unit, or a constant expression (theta0=pi/2,\n t=1s). A bare number is already in the coordinate's unit.\n T, temperature, temp, and T_K are kelvin: an energy on that name is k_B T.\n e.g. upt regime <name> --at theta0=0.2\n upt regime <name> --deny lossless`;\n\n/**\n * Collect `group=value` assignments from `--at` values and from bare\n * positionals, so `--at theta0=0.2 T0=1 t=10` works as written: the parser\n * gives `--at` one value and leaves the rest as positionals.\n *\n * @throws UsageError on a token with no `=`, CliError on a non-finite value or\n * a group given twice. A dropped coordinate would silently turn a CHECKED\n * inequality into an unchecked one, which is exactly the reading this\n * command exists to keep honest.\n * @internal\n */\nexport function parseAt(\n api: CommandCtx['api'],\n raw: readonly string[],\n command: string,\n notes?: string[],\n): Record<string, number> {\n const assignments = splitAssignments(command, raw, 'group=value');\n const siblings = assignments.map((a) => ({ name: a.name, raw: a.raw }));\n const point: Record<string, number> = {};\n for (const a of assignments) {\n try {\n const read = api.readNamedBinding(a.name, a.raw, { siblings });\n if (a.raw === '' || !Number.isFinite(read.value)) {\n throw new CliError(`upt ${command}: '${a.token}' is not a finite number`);\n }\n point[a.name] = read.value;\n if (notes !== undefined) {\n for (const note of read.notes) if (!notes.includes(note)) notes.push(note);\n }\n } catch (e) {\n if (e instanceof CliError) throw e;\n if (e instanceof api.TemperatureBindingError) {\n throw new CliError(`upt ${command}: '${a.token}' is not a temperature. ${e.message}`);\n }\n throw new CliError(`upt ${command}: '${a.token}' is not a finite number. ${(e as Error).message}`);\n }\n }\n try {\n api.assertSynonymAgreement(point);\n } catch (e) {\n if (e instanceof api.SynonymDisagreementError) throw new CliError(`upt ${command}: ${e.message}`);\n throw e;\n }\n return point;\n}\n\n/** A group name with spaces removed and `*` read as `·`, for comparison only. */\nconst normalizeGroup = (name: string): string => name.replace(/\\s+/g, '').replace(/\\*/g, '·');\n\n/**\n * Resolve an `--at` point against the regimes it will be checked against\n * (persona finding F1). A key naming a group matches it with spaces ignored and\n * `*` read as `·`, so `tau*D*q^2` reaches the group `tau · D · q^2`. A group\n * whose parameters are all given, and which the point does not state itself, is\n * derived from them: the product of each parameter to its exponent. `unknown`\n * lists the keys that are neither a group nor a parameter of any regime here.\n * @internal\n */\nexport function resolveAtPoint(\n api: CommandCtx['api'],\n point: Readonly<Record<string, number>>,\n regimes: readonly { groupDefinitions: Readonly<Record<string, { exponents: Readonly<Record<string, number>> }>>; inequalities: readonly { group: string }[] }[],\n): { values: Record<string, number>; unknown: string[] } {\n const groups = new Map<string, Readonly<Record<string, number>>>();\n for (const r of regimes) {\n for (const [key, g] of Object.entries(r.groupDefinitions)) groups.set(key, g.exponents);\n for (const i of r.inequalities) if (!groups.has(i.group)) groups.set(i.group, { [i.group]: 1 });\n }\n const byNormal = new Map([...groups.keys()].map((k) => [normalizeGroup(k), k]));\n const named = new Set<string>([...groups.keys(), ...[...groups.values()].flatMap((e) => Object.keys(e))]);\n // A zero exponent does not enter the product: two records can key the same\n // group with and without an extra `c: 0`, and that must not block derivation.\n const used = (e: Readonly<Record<string, number>>) => Object.keys(e).filter((n) => e[n] !== 0);\n const parameters = new Set([...groups.values()].flatMap(used));\n const values: Record<string, number> = {};\n const unknown: string[] = [];\n for (const [key, value] of Object.entries(point)) {\n const resolved = api.resolveQuantityName(key, named) ?? key;\n const group = byNormal.get(normalizeGroup(resolved)) ?? byNormal.get(normalizeGroup(key));\n const stored = group ?? resolved;\n values[stored] = value;\n if (group === undefined && !parameters.has(stored) && !parameters.has(key)) unknown.push(key);\n }\n for (const [key, exponents] of groups) {\n if (key in values) continue;\n const names = used(exponents);\n if (names.length > 0 && names.every((n) => typeof values[n] === 'number')) {\n values[key] = names.reduce((acc, n) => acc * Math.pow(values[n]!, exponents[n]!), 1);\n }\n }\n return { values, unknown };\n}\n\n/** Display form of one inequality — the alias when the record states one. */\nexport function showInequality(ineq: { group: string; op: string; bound: number; alias?: string }): string {\n const literal = `${ineq.group} ${ineq.op} ${ineq.bound}`;\n return ineq.alias === undefined ? literal : `${literal} (${ineq.alias})`;\n}\n\n/** The group names an inequality list mentions. */\nfunction groupsOf(inequalities: readonly { group: string }[]): Set<string> {\n return new Set(inequalities.map((i) => i.group));\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out, err } = ctx;\n const wantJson = args.flags.has('json');\n const [familyArg, ...rest] = args.positionals.filter((p) => !p.includes('='));\n const assignments = [...(args.flags.get('at') ?? []), ...args.positionals.filter((p) => p.includes('='))];\n\n if (familyArg === undefined) {\n throw new UsageError('upt regime: a name is required (e.g. `upt regime <name>`)');\n }\n if (rest.length > 0) {\n throw new UsageError(`upt regime: unexpected argument '${rest[0]}' (one family at a time)`);\n }\n // Atlas families project into the same registry a domain module adds to.\n // This command used to read the family array alone, so a name that was not\n // one of those families had nowhere to put an inequality.\n const registrations = [\n ...api.ATLAS_FAMILIES.map((family) => ({\n name: family.family,\n records: [\n ...family.models.map((m) => ({\n id: m.id,\n kind: 'model' as const,\n regime: m.regime,\n sideConditions: undefined as readonly string[] | undefined,\n })),\n ...family.bridges.map((b) => ({\n id: b.id,\n kind: 'bridge' as const,\n regime: b.regime,\n sideConditions: b.sideConditions,\n })),\n ],\n })),\n ...api.domainRegimeRegistrations(),\n ];\n const registration = registrations.find((entry) => entry.name === familyArg);\n if (registration === undefined) {\n throw new CliError(\n `upt regime: unknown family '${familyArg}' (known: ${registrations.map((entry) => entry.name).join(', ')})`,\n );\n }\n\n const atNotes: string[] = [];\n const point = parseAt(api, assignments, 'regime', atNotes);\n for (const note of atNotes) err(note);\n const stated = Object.keys(point);\n const assume = args.flags.get('assume') ?? [];\n const deny = args.flags.get('deny') ?? [];\n for (const a of assume) {\n if (deny.some((d) => d.toLowerCase() === a.toLowerCase())) {\n throw new CliError(`upt regime: '${a}' is both assumed and denied`);\n }\n }\n const matches = (declaration: string, premise: string) =>\n declaration !== '' && premise.toLowerCase().includes(declaration.toLowerCase());\n\n // Models AND bridges, because in this family every MODEL regime states zero\n // inequalities and only the BRIDGES carry real ones. A models-only report\n // would print nine confident 'valid's that were never checked against\n // anything — the tri-state's `true` is vacuous when there is nothing to\n // check, so that case is labelled rather than left to read as a pass.\n const records = registration.records;\n\n const { values: resolved, unknown } = resolveAtPoint(api, point, records.map((r) => r.regime));\n const unmatched = [\n ...assume.map((d) => ({ flag: '--assume', d })),\n ...deny.map((d) => ({ flag: '--deny', d })),\n ].filter(({ d }) => !records.some((r) => (r.sideConditions ?? []).some((p) => matches(d, p))));\n\n const verdicts = records.map((r) => {\n const check = api.regimeHolds(r.regime, resolved);\n const violated = check.violated.map(showInequality);\n const unchecked = check.unchecked.map(showInequality);\n const satisfied = r.regime.inequalities\n .map(showInequality)\n .filter((s) => !violated.includes(s) && !unchecked.includes(s));\n const prose = r.sideConditions ?? [];\n const deniedByUser = prose.filter((p) => deny.some((d) => matches(d, p)));\n const declaredByUser = prose.filter((p) => !deniedByUser.includes(p) && assume.some((a) => matches(a, p)));\n const unspecified = prose.filter((p) => !deniedByUser.includes(p) && !declaredByUser.includes(p));\n return {\n id: r.id,\n kind: r.kind,\n ok: check.ok,\n vacuous: r.regime.inequalities.length === 0,\n verdict:\n r.regime.inequalities.length === 0\n ? ('vacuous' as const)\n : check.ok === true\n ? ('valid' as const)\n : check.ok === false\n ? ('violated' as const)\n : ('unknown' as const),\n violated,\n unchecked,\n // The two bases never mix: `machine` is what this command evaluated at\n // the point; the rest is prose, and a user's word about it is recorded\n // as a declaration, never promoted to a check.\n premises: {\n machine: { satisfied, violated, unchecked },\n declaredByUser,\n deniedByUser,\n unspecified,\n },\n // Prose side conditions are premises this command cannot evaluate; only\n // the inequalities above were checked. A premise with a machine form is\n // checked only through its inequality.\n ...(r.sideConditions !== undefined && r.sideConditions.length > 0\n ? { premisesNotChecked: [...r.sideConditions] }\n : {}),\n };\n });\n\n // Pairwise overlap, restricted to pairs that actually SHARE a coordinate.\n // `regimeOverlap` classifies on shared names only, so a pair with none is\n // vacuously 'nested' — a true answer that says nothing, and printing it\n // would bury the pairs that do constrain each other.\n const overlaps: { a: string; b: string; overlap: string; sharedGroups: string[] }[] = [];\n for (let i = 0; i < records.length; i++) {\n for (let j = i + 1; j < records.length; j++) {\n const a = records[i]!;\n const b = records[j]!;\n const gb = groupsOf(b.regime.inequalities);\n const shared = [...groupsOf(a.regime.inequalities)].filter((g) => gb.has(g));\n if (shared.length === 0) continue;\n overlaps.push({\n a: a.id,\n b: b.id,\n overlap: api.regimeOverlap(a.regime, b.regime),\n sharedGroups: shared,\n });\n }\n }\n\n // The box is what --at states, and nothing else.\n const samples: Record<string, number[]> = {};\n for (const [group, value] of Object.entries(resolved)) samples[group] = [value];\n // `uncoveredRegions` counts a record as covering a point only when it checked an\n // inequality there, so an unconstrained model regime covers nothing and every record\n // can be passed. The constraining count is the report's, not a filter.\n const constraining = records.filter((r) => r.regime.inequalities.length > 0);\n const uncovered =\n stated.length === 0 ? null : api.uncoveredRegions(registration.name, records, samples);\n\n if (wantJson) {\n emitJson(\n {\n command: 'regime',\n epistemics:\n \"an 'unknown' verdict is a failure to confirm validity, NEVER validity: a coordinate the \" +\n 'point did not supply was not checked, and an unchecked inequality is not a satisfied one. ' +\n 'Uncovered regions are reported only over the box --at states; none is synthesized.',\n options: { family: registration.name, at: point, assume, deny },\n result: {\n resolvedPoint: resolved,\n unknownCoordinates: unknown,\n unmatchedDeclarations: unmatched.map(({ flag, d }) => ({ flag, declaration: d })),\n records: verdicts,\n overlaps,\n uncovered:\n uncovered === null\n ? null\n : { boxStated: true, points: uncovered.map((r) => ({ point: r.point })) },\n },\n },\n ctx.write,\n );\n return verdicts.some((v) => v.ok === false) ? EXIT_CHECK_FAILED : 0;\n }\n\n out(`\\nRegimes of family '${registration.name}'`);\n // A family whose records state no inequality has nothing to check at any point: VACUOUS, not UNCHECKED.\n const allVacuous = verdicts.every((v) => v.vacuous);\n out(\n allVacuous\n ? '(this family states no inequality: every record is VACUOUS, and no --at point could check it)'\n : stated.length === 0\n ? '(no --at point supplied: every inequality is UNCHECKED, which is not a pass)'\n : `at ${stated.map((g) => `${g}=${point[g]}`).join(' · ')}`,\n );\n if (unknown.length > 0) {\n out(\n `unknown coordinate(s): ${unknown.join(', ')} — no record in family '${registration.name}' uses ` +\n `${unknown.length === 1 ? 'it' : 'them'}; ignored`,\n );\n }\n for (const { flag, d } of unmatched) {\n out(`${flag} '${d}' matches no side condition in family '${registration.name}'; ignored`);\n }\n out('');\n for (const m of verdicts) {\n // A record that states no inequality was not checked, so its line does not begin with a verdict\n // that reads as a pass (audit I13); the tri-state's `true` is vacuous there.\n const verdict = m.vacuous\n ? 'no machine condition evaluated (VACUOUS — states no inequality; nothing was checked)'\n : m.ok === true\n ? 'valid'\n : m.ok === false\n ? 'VIOLATED'\n : 'unknown';\n out(` [${m.kind}] ${m.id}: ${verdict}`);\n for (const v of m.violated) out(` violated: ${v}`);\n for (const u of m.unchecked) out(` unchecked (no value supplied): ${u}`);\n for (const s of m.premises.machine.satisfied) out(` satisfied: ${s}`);\n if (!m.vacuous && m.violated.length === 0 && m.unchecked.length === 0) {\n out(' every inequality checked and satisfied');\n }\n const p = m.premises;\n if (p.declaredByUser.length > 0) {\n out(` declared by you (a declaration, not evidence): ${p.declaredByUser.join('; ')}`);\n }\n if (p.deniedByUser.length > 0) {\n out(` CONTRADICTED by your --deny: ${p.deniedByUser.join('; ')} — this record does not apply as stated`);\n }\n if (p.unspecified.length > 0) {\n out(` premises not machine-checked: ${p.unspecified.join('; ')}`);\n }\n }\n\n out('');\n out('Pairwise overlap (on shared coordinates only):');\n if (overlaps.length === 0) {\n out(' no two regimes share a coordinate, so none constrains another');\n } else {\n for (const o of overlaps) {\n out(` ${o.a} vs ${o.b}: ${o.overlap} — shared: ${o.sharedGroups.join(', ')}`);\n }\n }\n\n out('');\n if (uncovered === null) {\n out('Uncovered regions: no box stated. Pass --at to say where you want to know about;');\n out(' a synthesized box would measure this tool’s guess, not the atlas.');\n } else if (uncovered.length === 0) {\n out('Uncovered regions: none — some constraining regime holds at every point of the stated box.');\n } else {\n out(\n `Uncovered regions: ${uncovered.length} point(s) of the stated box that no CONSTRAINING ` +\n `regime covers (${constraining.length} of ${records.length} records state an inequality):`,\n );\n for (const r of uncovered) {\n out(` ${Object.entries(r.point).map(([g, v]) => `${g}=${v}`).join(' · ')}`);\n }\n out(\" (an 'unknown' is not coverage — see the tri-state rule above)\");\n }\n return verdicts.some((v) => v.ok === false) ? EXIT_CHECK_FAILED : 0;\n}\n\nexport const command: Command = {\n name: 'regime',\n aliases: [],\n positionals: { max: Infinity },\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Report where a family\\'s models are valid, violated, or unknown.',\n example: 'upt regime oscillators --at theta0=0.2',\n group: 'explore',\n run,\n};\nregisterCommand(command);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/retrieve.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAsF/E,eAAO,MAAM,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"retrieve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/retrieve.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,OAAO,EAAmB,MAAM,eAAe,CAAC;AAsF/E,eAAO,MAAM,OAAO,EAAE,OAUrB,CAAC"}
|
|
@@ -81,6 +81,7 @@ async function run(ctx) {
|
|
|
81
81
|
export const command = {
|
|
82
82
|
name: 'retrieve',
|
|
83
83
|
aliases: [],
|
|
84
|
+
positionals: { max: Infinity },
|
|
84
85
|
flags: FLAGS,
|
|
85
86
|
help: commandHelp(HELP, FLAGS),
|
|
86
87
|
summary: 'Search the atlas for a claim. --embed asks a local Ollama model and does not accept that order.',
|