universal-physics-tensor 10.0.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -36
- package/bin/upt.mjs +13 -1
- package/data/applied-cases.json +1892 -0
- package/data/applied-cases.schema.json +194 -0
- package/data/atlas/atlas.json +25 -25
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +6 -6
- package/data/atlas/oscillators.json +7 -7
- package/data/atlas/waves.json +14 -14
- package/data/atlas/witness-results.json +11 -11
- package/data/bridge-catalog.json +389 -230
- package/data/bridge-catalog.schema.json +45 -7
- package/data/units.json +6 -25
- package/dist/atlas/applicability.d.ts.map +1 -1
- package/dist/atlas/applicability.js +21 -15
- package/dist/atlas/applicability.js.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
- package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
- package/dist/atlas/benchmark/loader.js +2 -2
- package/dist/atlas/benchmark/loader.js.map +1 -1
- package/dist/atlas/benchmark/stats.d.ts +2 -2
- package/dist/atlas/benchmark/stats.d.ts.map +1 -1
- package/dist/atlas/benchmark/stats.js +9 -15
- package/dist/atlas/benchmark/stats.js.map +1 -1
- package/dist/atlas/catalog-formal-ref.d.ts +26 -3
- package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
- package/dist/atlas/catalog-formal-ref.js +52 -5
- package/dist/atlas/catalog-formal-ref.js.map +1 -1
- package/dist/atlas/chain-pipeline.d.ts.map +1 -1
- package/dist/atlas/chain-pipeline.js +7 -8
- package/dist/atlas/chain-pipeline.js.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges-closure.js +8 -12
- package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
- package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
- package/dist/atlas/diffusion/bridges.js +27 -39
- package/dist/atlas/diffusion/bridges.js.map +1 -1
- package/dist/atlas/diffusion/dimensions.d.ts +6 -14
- package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
- package/dist/atlas/diffusion/dimensions.js +8 -16
- package/dist/atlas/diffusion/dimensions.js.map +1 -1
- package/dist/atlas/diffusion/models.d.ts +3 -3
- package/dist/atlas/diffusion/models.d.ts.map +1 -1
- package/dist/atlas/diffusion/models.js +5 -10
- package/dist/atlas/diffusion/models.js.map +1 -1
- package/dist/atlas/diffusion/numerics.d.ts +16 -4
- package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
- package/dist/atlas/diffusion/numerics.js +38 -24
- package/dist/atlas/diffusion/numerics.js.map +1 -1
- package/dist/atlas/link-prediction.d.ts +106 -3
- package/dist/atlas/link-prediction.d.ts.map +1 -1
- package/dist/atlas/link-prediction.js +212 -66
- package/dist/atlas/link-prediction.js.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-coarse.js +7 -11
- package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-exact.js +6 -7
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
- package/dist/atlas/oscillators/bridges-limits.js +23 -34
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
- package/dist/atlas/oscillators/dimensions.d.ts +9 -21
- package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
- package/dist/atlas/oscillators/dimensions.js +9 -21
- package/dist/atlas/oscillators/dimensions.js.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
- package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
- package/dist/atlas/oscillators/limit-witnesses.js +17 -15
- package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
- package/dist/atlas/oscillators/models.d.ts.map +1 -1
- package/dist/atlas/oscillators/models.js +2 -6
- package/dist/atlas/oscillators/models.js.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
- package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
- package/dist/atlas/oscillators/pendulum-motion.js +60 -40
- package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
- package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
- package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/phase-translation.js +3 -4
- package/dist/atlas/oscillators/phase-translation.js.map +1 -1
- package/dist/atlas/oscillators/position-translation.d.ts +68 -7
- package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
- package/dist/atlas/oscillators/position-translation.js +123 -12
- package/dist/atlas/oscillators/position-translation.js.map +1 -1
- package/dist/atlas/oscillators/rejections.d.ts +0 -2
- package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
- package/dist/atlas/oscillators/rejections.js +0 -7
- package/dist/atlas/oscillators/rejections.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +35 -25
- package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
- package/dist/atlas/physjs-entries.generated.js +37 -25
- package/dist/atlas/physjs-entries.generated.js.map +1 -1
- package/dist/atlas/physjs-ref.d.ts +34 -31
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +55 -53
- package/dist/atlas/physjs-ref.js.map +1 -1
- package/dist/atlas/physjs-reviewed.d.ts +1 -1
- package/dist/atlas/physjs-reviewed.js +15 -15
- package/dist/atlas/physjs-reviewed.js.map +1 -1
- package/dist/atlas/poster/statements.d.ts +0 -19
- package/dist/atlas/poster/statements.d.ts.map +1 -1
- package/dist/atlas/poster/statements.js +1 -1
- package/dist/atlas/poster/statements.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +1 -1
- package/dist/atlas/proof-target.js +1 -1
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/atlas/regime.d.ts +1 -1
- package/dist/atlas/regime.d.ts.map +1 -1
- package/dist/atlas/regime.js +1 -1
- package/dist/atlas/regime.js.map +1 -1
- package/dist/atlas/text-overlap.d.ts +23 -0
- package/dist/atlas/text-overlap.d.ts.map +1 -0
- package/dist/atlas/text-overlap.js +41 -0
- package/dist/atlas/text-overlap.js.map +1 -0
- package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
- package/dist/atlas/waves/bridges-closure.js +2 -6
- package/dist/atlas/waves/bridges-closure.js.map +1 -1
- package/dist/atlas/waves/bridges.d.ts.map +1 -1
- package/dist/atlas/waves/bridges.js +32 -48
- package/dist/atlas/waves/bridges.js.map +1 -1
- package/dist/atlas/waves/models.d.ts +5 -6
- package/dist/atlas/waves/models.d.ts.map +1 -1
- package/dist/atlas/waves/models.js +7 -13
- package/dist/atlas/waves/models.js.map +1 -1
- package/dist/atlas/waves/numerics.d.ts.map +1 -1
- package/dist/atlas/waves/numerics.js +10 -3
- package/dist/atlas/waves/numerics.js.map +1 -1
- package/dist/atlas/witness-numeric.d.ts +30 -0
- package/dist/atlas/witness-numeric.d.ts.map +1 -1
- package/dist/atlas/witness-numeric.js +53 -0
- package/dist/atlas/witness-numeric.js.map +1 -1
- package/dist/atlas/witness-specs.d.ts.map +1 -1
- package/dist/atlas/witness-specs.js +19 -0
- package/dist/atlas/witness-specs.js.map +1 -1
- package/dist/atlas/witness-symbolic.d.ts +75 -3
- package/dist/atlas/witness-symbolic.d.ts.map +1 -1
- package/dist/atlas/witness-symbolic.js +116 -10
- package/dist/atlas/witness-symbolic.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +13 -8
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +26 -2
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/catalog-types.js +11 -1
- package/dist/bridges/catalog-types.js.map +1 -1
- package/dist/bridges/evaluation-errors.d.ts +31 -1
- package/dist/bridges/evaluation-errors.d.ts.map +1 -1
- package/dist/bridges/evaluation-errors.js +20 -2
- package/dist/bridges/evaluation-errors.js.map +1 -1
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +7 -5
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +27 -12
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +11 -0
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +14 -5
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +35 -3
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +117 -23
- package/dist/bridges/holds.js.map +1 -1
- package/dist/bridges/notices.d.ts.map +1 -1
- package/dist/bridges/notices.js +5 -5
- package/dist/bridges/notices.js.map +1 -1
- package/dist/bridges/relation-eval.d.ts +4 -4
- package/dist/bridges/relation-eval.d.ts.map +1 -1
- package/dist/bridges/relation-eval.js +15 -16
- package/dist/bridges/relation-eval.js.map +1 -1
- package/dist/bridges/sensitivity.d.ts.map +1 -1
- package/dist/bridges/sensitivity.js +3 -3
- package/dist/bridges/sensitivity.js.map +1 -1
- package/dist/bridges/validity.d.ts +33 -0
- package/dist/bridges/validity.d.ts.map +1 -0
- package/dist/bridges/validity.js +67 -0
- package/dist/bridges/validity.js.map +1 -0
- package/dist/canonical/entries/atomic.js +1 -3
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
- package/dist/canonical/entries/condensed-matter.js +4 -5
- package/dist/canonical/entries/condensed-matter.js.map +1 -1
- package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
- package/dist/canonical/entries/dimensional-classics.js +3 -4
- package/dist/canonical/entries/dimensional-classics.js.map +1 -1
- package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
- package/dist/canonical/entries/electromagnetism.js +4 -10
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +3 -7
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/mechanics.js +4 -6
- package/dist/canonical/entries/mechanics.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +9 -17
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/entries/relativity.d.ts.map +1 -1
- package/dist/canonical/entries/relativity.js +6 -6
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/fixed-points.d.ts +94 -0
- package/dist/canonical/fixed-points.d.ts.map +1 -0
- package/dist/canonical/fixed-points.js +81 -0
- package/dist/canonical/fixed-points.js.map +1 -0
- package/dist/canonical/linkage.d.ts.map +1 -1
- package/dist/canonical/linkage.js +25 -44
- package/dist/canonical/linkage.js.map +1 -1
- package/dist/canonical/normal-form.d.ts.map +1 -1
- package/dist/canonical/normal-form.js +5 -11
- package/dist/canonical/normal-form.js.map +1 -1
- package/dist/canonical/structural.d.ts +21 -21
- package/dist/canonical/structural.d.ts.map +1 -1
- package/dist/canonical/structural.js +40 -19
- package/dist/canonical/structural.js.map +1 -1
- package/dist/cases/catalog-checks.d.ts +10 -0
- package/dist/cases/catalog-checks.d.ts.map +1 -0
- package/dist/cases/catalog-checks.js +241 -0
- package/dist/cases/catalog-checks.js.map +1 -0
- package/dist/cases/catalog.d.ts +83 -0
- package/dist/cases/catalog.d.ts.map +1 -0
- package/dist/cases/catalog.js +118 -0
- package/dist/cases/catalog.js.map +1 -0
- package/dist/cases/engine.d.ts +13 -0
- package/dist/cases/engine.d.ts.map +1 -0
- package/dist/cases/engine.js +179 -0
- package/dist/cases/engine.js.map +1 -0
- package/dist/cases/index.d.ts.map +1 -1
- package/dist/cases/index.js +5 -7
- package/dist/cases/index.js.map +1 -1
- package/dist/cases/methods.d.ts +215 -0
- package/dist/cases/methods.d.ts.map +1 -0
- package/dist/cases/methods.js +743 -0
- package/dist/cases/methods.js.map +1 -0
- package/dist/cases/quadrature.d.ts +7 -9
- package/dist/cases/quadrature.d.ts.map +1 -1
- package/dist/cases/quadrature.js +28 -32
- package/dist/cases/quadrature.js.map +1 -1
- package/dist/cases/types.d.ts +12 -0
- package/dist/cases/types.d.ts.map +1 -1
- package/dist/cases/types.js.map +1 -1
- package/dist/cli/args.d.ts +25 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +30 -8
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bindings.d.ts.map +1 -1
- package/dist/cli/bindings.js +5 -4
- package/dist/cli/bindings.js.map +1 -1
- package/dist/cli/command.d.ts +11 -1
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/_atlas-map.d.ts +0 -9
- package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-map.js +8 -18
- package/dist/cli/commands/_atlas-map.js.map +1 -1
- package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
- package/dist/cli/commands/_atlas-route.js +6 -2
- package/dist/cli/commands/_atlas-route.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts +1 -0
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +9 -9
- package/dist/cli/commands/_discovery-opts.js.map +1 -1
- package/dist/cli/commands/atlas.d.ts.map +1 -1
- package/dist/cli/commands/atlas.js +8 -5
- package/dist/cli/commands/atlas.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +8 -1
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/axes.d.ts.map +1 -1
- package/dist/cli/commands/axes.js +20 -1
- package/dist/cli/commands/axes.js.map +1 -1
- package/dist/cli/commands/confront.d.ts.map +1 -1
- package/dist/cli/commands/confront.js +8 -14
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +22 -22
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +122 -73
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +1 -0
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +67 -39
- package/dist/cli/commands/evaluate.js.map +1 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +24 -3
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/ground.d.ts.map +1 -1
- package/dist/cli/commands/ground.js +7 -1
- package/dist/cli/commands/ground.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +84 -11
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli/commands/metric.d.ts.map +1 -1
- package/dist/cli/commands/metric.js +12 -9
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/path.d.ts +10 -0
- package/dist/cli/commands/path.d.ts.map +1 -1
- package/dist/cli/commands/path.js +25 -3
- package/dist/cli/commands/path.js.map +1 -1
- package/dist/cli/commands/probe.d.ts.map +1 -1
- package/dist/cli/commands/probe.js +59 -16
- package/dist/cli/commands/probe.js.map +1 -1
- package/dist/cli/commands/regime.d.ts.map +1 -1
- package/dist/cli/commands/regime.js +1 -0
- package/dist/cli/commands/regime.js.map +1 -1
- package/dist/cli/commands/retrieve.d.ts.map +1 -1
- package/dist/cli/commands/retrieve.js +1 -0
- package/dist/cli/commands/retrieve.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +1 -0
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/symbolic.d.ts.map +1 -1
- package/dist/cli/commands/symbolic.js +19 -28
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.d.ts.map +1 -1
- package/dist/cli/commands/testplan.js +4 -2
- package/dist/cli/commands/testplan.js.map +1 -1
- package/dist/cli/determination.d.ts +1 -0
- package/dist/cli/determination.d.ts.map +1 -1
- package/dist/cli/determination.js.map +1 -1
- package/dist/cli/expr-print.d.ts +0 -2
- package/dist/cli/expr-print.d.ts.map +1 -1
- package/dist/cli/expr-print.js +7 -31
- package/dist/cli/expr-print.js.map +1 -1
- package/dist/cli/flag-help.d.ts +1 -0
- package/dist/cli/flag-help.d.ts.map +1 -1
- package/dist/cli/flag-help.js +1 -0
- package/dist/cli/flag-help.js.map +1 -1
- package/dist/cli/graphs.d.ts +2 -0
- package/dist/cli/graphs.d.ts.map +1 -1
- package/dist/cli/graphs.js +1 -0
- package/dist/cli/graphs.js.map +1 -1
- package/dist/cli/main.d.ts +8 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +19 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/numeric-flag.d.ts +12 -0
- package/dist/cli/numeric-flag.d.ts.map +1 -0
- package/dist/cli/numeric-flag.js +44 -0
- package/dist/cli/numeric-flag.js.map +1 -0
- package/dist/cli/output.d.ts +28 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +23 -0
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/record-reach.js +2 -2
- package/dist/cli/record-reach.js.map +1 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +6 -5
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli/record.d.ts +1 -5
- package/dist/cli/record.d.ts.map +1 -1
- package/dist/cli/record.js +9 -8
- package/dist/cli/record.js.map +1 -1
- package/dist/cli/search-index.d.ts.map +1 -1
- package/dist/cli/search-index.js +7 -6
- package/dist/cli/search-index.js.map +1 -1
- package/dist/cli/statuses.d.ts +0 -2
- package/dist/cli/statuses.d.ts.map +1 -1
- package/dist/cli/statuses.js +12 -9
- package/dist/cli/statuses.js.map +1 -1
- package/dist/cli/stored-results.d.ts +7 -0
- package/dist/cli/stored-results.d.ts.map +1 -0
- package/dist/cli/stored-results.js +23 -0
- package/dist/cli/stored-results.js.map +1 -0
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +8 -5
- package/dist/cli/version.js.map +1 -1
- package/dist/cli-api.d.ts +36 -5
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +30 -4
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/algebraic-equivalence.d.ts +43 -0
- package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
- package/dist/composition/algebraic-equivalence.js +115 -0
- package/dist/composition/algebraic-equivalence.js.map +1 -0
- package/dist/composition/axes.d.ts +0 -6
- package/dist/composition/axes.d.ts.map +1 -1
- package/dist/composition/axes.js +6 -6
- package/dist/composition/axes.js.map +1 -1
- package/dist/composition/axis-audit.d.ts +47 -20
- package/dist/composition/axis-audit.d.ts.map +1 -1
- package/dist/composition/axis-audit.js +82 -9
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +17 -0
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +102 -55
- package/dist/composition/bridge-analysis.js.map +1 -1
- package/dist/composition/canonical-compare.d.ts +40 -0
- package/dist/composition/canonical-compare.d.ts.map +1 -1
- package/dist/composition/canonical-compare.js +122 -24
- package/dist/composition/canonical-compare.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +3 -3
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +11 -38
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-json.js +2 -2
- package/dist/composition/canonical-json.js.map +1 -1
- package/dist/composition/catalog-graph.d.ts.map +1 -1
- package/dist/composition/catalog-graph.js +2 -5
- package/dist/composition/catalog-graph.js.map +1 -1
- package/dist/composition/chain-candidate.d.ts +8 -0
- package/dist/composition/chain-candidate.d.ts.map +1 -1
- package/dist/composition/chain-candidate.js +9 -2
- package/dist/composition/chain-candidate.js.map +1 -1
- package/dist/composition/chain-match.d.ts +6 -3
- package/dist/composition/chain-match.d.ts.map +1 -1
- package/dist/composition/chain-match.js +4 -1
- package/dist/composition/chain-match.js.map +1 -1
- package/dist/composition/chain-result.d.ts.map +1 -1
- package/dist/composition/chain-result.js +2 -14
- package/dist/composition/chain-result.js.map +1 -1
- package/dist/composition/compose-symbolic.d.ts.map +1 -1
- package/dist/composition/compose-symbolic.js +3 -2
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +13 -5
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/composition-recovery.d.ts.map +1 -1
- package/dist/composition/composition-recovery.js +4 -7
- package/dist/composition/composition-recovery.js.map +1 -1
- package/dist/composition/consequence.d.ts +15 -5
- package/dist/composition/consequence.d.ts.map +1 -1
- package/dist/composition/consequence.js +6 -4
- package/dist/composition/consequence.js.map +1 -1
- package/dist/composition/discovery.d.ts +129 -9
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +171 -67
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +21 -2
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +23 -1
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/enumerate.d.ts.map +1 -1
- package/dist/composition/enumerate.js +18 -3
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +35 -11
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +60 -39
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +3 -12
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +7 -20
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts +1 -1
- package/dist/composition/expr-eval.d.ts.map +1 -1
- package/dist/composition/expr-eval.js +6 -15
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/expr-simplify.d.ts +26 -14
- package/dist/composition/expr-simplify.d.ts.map +1 -1
- package/dist/composition/expr-simplify.js +64 -72
- package/dist/composition/expr-simplify.js.map +1 -1
- package/dist/composition/formula-shape.d.ts +23 -4
- package/dist/composition/formula-shape.d.ts.map +1 -1
- package/dist/composition/formula-shape.js +57 -17
- package/dist/composition/formula-shape.js.map +1 -1
- package/dist/composition/graph-structure.d.ts +98 -0
- package/dist/composition/graph-structure.d.ts.map +1 -0
- package/dist/composition/graph-structure.js +167 -0
- package/dist/composition/graph-structure.js.map +1 -0
- package/dist/composition/graph-viz-svg.d.ts.map +1 -1
- package/dist/composition/graph-viz-svg.js +1 -1
- package/dist/composition/graph-viz-svg.js.map +1 -1
- package/dist/composition/graph-viz.d.ts.map +1 -1
- package/dist/composition/graph-viz.js +8 -37
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/grounding.d.ts.map +1 -1
- package/dist/composition/grounding.js +19 -7
- package/dist/composition/grounding.js.map +1 -1
- package/dist/composition/identifiability.d.ts +91 -4
- package/dist/composition/identifiability.d.ts.map +1 -1
- package/dist/composition/identifiability.js +363 -6
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +8 -4
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +3 -2
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/mathts-quiet.d.ts +7 -8
- package/dist/composition/mathts-quiet.d.ts.map +1 -1
- package/dist/composition/mathts-quiet.js +7 -16
- package/dist/composition/mathts-quiet.js.map +1 -1
- package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
- package/dist/composition/mathts-scalar-symbols.js +2 -1
- package/dist/composition/mathts-scalar-symbols.js.map +1 -1
- package/dist/composition/own-equation-magnitude.d.ts +95 -0
- package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
- package/dist/composition/own-equation-magnitude.js +270 -0
- package/dist/composition/own-equation-magnitude.js.map +1 -0
- package/dist/composition/probe/backend-protocol.d.ts +3 -0
- package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
- package/dist/composition/probe/backend-protocol.js.map +1 -1
- package/dist/composition/probe/candidate-store.d.ts +1 -0
- package/dist/composition/probe/candidate-store.d.ts.map +1 -1
- package/dist/composition/probe/candidate-store.js +1 -0
- package/dist/composition/probe/candidate-store.js.map +1 -1
- package/dist/composition/probe/corpus.d.ts +8 -4
- package/dist/composition/probe/corpus.d.ts.map +1 -1
- package/dist/composition/probe/corpus.js +23 -12
- package/dist/composition/probe/corpus.js.map +1 -1
- package/dist/composition/probe/dataset.d.ts +18 -0
- package/dist/composition/probe/dataset.d.ts.map +1 -1
- package/dist/composition/probe/dataset.js +95 -50
- package/dist/composition/probe/dataset.js.map +1 -1
- package/dist/composition/probe/experiment-design.d.ts +7 -1
- package/dist/composition/probe/experiment-design.d.ts.map +1 -1
- package/dist/composition/probe/experiment-design.js +44 -24
- package/dist/composition/probe/experiment-design.js.map +1 -1
- package/dist/composition/probe/falsify.d.ts +2 -0
- package/dist/composition/probe/falsify.d.ts.map +1 -1
- package/dist/composition/probe/falsify.js +2 -0
- package/dist/composition/probe/falsify.js.map +1 -1
- package/dist/composition/probe/fit.d.ts +7 -0
- package/dist/composition/probe/fit.d.ts.map +1 -1
- package/dist/composition/probe/fit.js +46 -22
- package/dist/composition/probe/fit.js.map +1 -1
- package/dist/composition/probe/frontier.d.ts.map +1 -1
- package/dist/composition/probe/frontier.js +33 -15
- package/dist/composition/probe/frontier.js.map +1 -1
- package/dist/composition/probe/generator.d.ts +30 -1
- package/dist/composition/probe/generator.d.ts.map +1 -1
- package/dist/composition/probe/generator.js +58 -36
- package/dist/composition/probe/generator.js.map +1 -1
- package/dist/composition/probe/index.d.ts +14 -0
- package/dist/composition/probe/index.d.ts.map +1 -1
- package/dist/composition/probe/index.js +6 -0
- package/dist/composition/probe/index.js.map +1 -1
- package/dist/composition/probe/limits.d.ts +25 -1
- package/dist/composition/probe/limits.d.ts.map +1 -1
- package/dist/composition/probe/limits.js +53 -11
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/pipeline.d.ts +5 -0
- package/dist/composition/probe/pipeline.d.ts.map +1 -1
- package/dist/composition/probe/pipeline.js +73 -24
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/power-law.d.ts +121 -0
- package/dist/composition/probe/power-law.d.ts.map +1 -0
- package/dist/composition/probe/power-law.js +251 -0
- package/dist/composition/probe/power-law.js.map +1 -0
- package/dist/composition/probe/problem.d.ts +8 -4
- package/dist/composition/probe/problem.d.ts.map +1 -1
- package/dist/composition/probe/problem.js +177 -49
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.js +1 -1
- package/dist/composition/probe/report.js.map +1 -1
- package/dist/composition/probe/residual.d.ts +7 -1
- package/dist/composition/probe/residual.d.ts.map +1 -1
- package/dist/composition/probe/residual.js +10 -7
- package/dist/composition/probe/residual.js.map +1 -1
- package/dist/composition/probe/run-manifest.d.ts +1 -0
- package/dist/composition/probe/run-manifest.d.ts.map +1 -1
- package/dist/composition/probe/run-manifest.js.map +1 -1
- package/dist/composition/probe/scalar-search.d.ts +50 -0
- package/dist/composition/probe/scalar-search.d.ts.map +1 -0
- package/dist/composition/probe/scalar-search.js +169 -0
- package/dist/composition/probe/scalar-search.js.map +1 -0
- package/dist/composition/probe/scoring.d.ts +1 -0
- package/dist/composition/probe/scoring.d.ts.map +1 -1
- package/dist/composition/probe/scoring.js.map +1 -1
- package/dist/composition/probe/structure.d.ts +82 -17
- package/dist/composition/probe/structure.d.ts.map +1 -1
- package/dist/composition/probe/structure.js +129 -55
- package/dist/composition/probe/structure.js.map +1 -1
- package/dist/composition/probe/study.d.ts +31 -9
- package/dist/composition/probe/study.d.ts.map +1 -1
- package/dist/composition/probe/study.js +235 -184
- package/dist/composition/probe/study.js.map +1 -1
- package/dist/composition/probe/t-tail.d.ts +16 -0
- package/dist/composition/probe/t-tail.d.ts.map +1 -0
- package/dist/composition/probe/t-tail.js +29 -0
- package/dist/composition/probe/t-tail.js.map +1 -0
- package/dist/composition/probe/types.d.ts +3 -0
- package/dist/composition/probe/types.d.ts.map +1 -1
- package/dist/composition/probe/types.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts +52 -12
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +107 -60
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/quantity-clusters.d.ts +48 -0
- package/dist/composition/quantity-clusters.d.ts.map +1 -0
- package/dist/composition/quantity-clusters.js +98 -0
- package/dist/composition/quantity-clusters.js.map +1 -0
- package/dist/composition/rational-exponent.d.ts +40 -0
- package/dist/composition/rational-exponent.d.ts.map +1 -0
- package/dist/composition/rational-exponent.js +65 -0
- package/dist/composition/rational-exponent.js.map +1 -0
- package/dist/composition/representative-values.d.ts +22 -0
- package/dist/composition/representative-values.d.ts.map +1 -1
- package/dist/composition/representative-values.js +29 -0
- package/dist/composition/representative-values.js.map +1 -1
- package/dist/composition/retrodiction.d.ts +15 -0
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +12 -4
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/user-equation.d.ts +1 -0
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/composition/user-equation.js +3 -2
- package/dist/composition/user-equation.js.map +1 -1
- package/dist/core/assignment.d.ts +19 -0
- package/dist/core/assignment.d.ts.map +1 -0
- package/dist/core/assignment.js +19 -0
- package/dist/core/assignment.js.map +1 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.d.ts.map +1 -0
- package/dist/core/compare.js +46 -0
- package/dist/core/compare.js.map +1 -0
- package/dist/core/constants.d.ts +42 -41
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +71 -51
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +7 -0
- package/dist/core/data-file.d.ts.map +1 -1
- package/dist/core/data-file.js +17 -0
- package/dist/core/data-file.js.map +1 -1
- package/dist/core/format.d.ts +36 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +39 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/hash.d.ts +14 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +17 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/json-schema.d.ts +2 -0
- package/dist/core/json-schema.d.ts.map +1 -1
- package/dist/core/json-schema.js +14 -13
- package/dist/core/json-schema.js.map +1 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/labeled-tensor.js +0 -8
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/mathts-read.d.ts +25 -0
- package/dist/core/mathts-read.d.ts.map +1 -0
- package/dist/core/mathts-read.js +51 -0
- package/dist/core/mathts-read.js.map +1 -0
- package/dist/core/tensor.d.ts.map +1 -1
- package/dist/core/tensor.js +24 -0
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts +5 -5
- package/dist/diff/bridge-ast-gradient.d.ts +27 -23
- package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-ast-gradient.js +75 -173
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/diff/bridge-gradient.d.ts +19 -6
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +19 -11
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +3 -0
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/algebra.d.ts +18 -0
- package/dist/dimensional/algebra.d.ts.map +1 -1
- package/dist/dimensional/algebra.js +41 -1
- package/dist/dimensional/algebra.js.map +1 -1
- package/dist/dimensional/ast-builders.d.ts +7 -0
- package/dist/dimensional/ast-builders.d.ts.map +1 -1
- package/dist/dimensional/ast-builders.js +11 -0
- package/dist/dimensional/ast-builders.js.map +1 -1
- package/dist/dimensional/ast-leaves.d.ts +81 -0
- package/dist/dimensional/ast-leaves.d.ts.map +1 -0
- package/dist/dimensional/ast-leaves.js +146 -0
- package/dist/dimensional/ast-leaves.js.map +1 -0
- package/dist/dimensional/ast-types.d.ts +15 -0
- package/dist/dimensional/ast-types.d.ts.map +1 -1
- package/dist/dimensional/ast-types.js.map +1 -1
- package/dist/dimensional/buckingham.d.ts.map +1 -1
- package/dist/dimensional/buckingham.js +15 -27
- package/dist/dimensional/buckingham.js.map +1 -1
- package/dist/dimensional/constant-rows.js +9 -9
- package/dist/dimensional/constant-rows.js.map +1 -1
- package/dist/dimensional/curvature-composite.d.ts +1 -1
- package/dist/dimensional/curvature-composite.js.map +1 -1
- package/dist/dimensional/dimension-inference.d.ts.map +1 -1
- package/dist/dimensional/dimension-inference.js +1 -2
- package/dist/dimensional/dimension-inference.js.map +1 -1
- package/dist/dimensional/errors.d.ts +1 -1
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/errors.js +1 -15
- package/dist/dimensional/errors.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +24 -11
- package/dist/dimensional/exact-scale.d.ts.map +1 -1
- package/dist/dimensional/exact-scale.js +122 -130
- package/dist/dimensional/exact-scale.js.map +1 -1
- package/dist/dimensional/gauge-field.d.ts.map +1 -1
- package/dist/dimensional/gauge-field.js +2 -2
- package/dist/dimensional/gauge-field.js.map +1 -1
- package/dist/dimensional/hyphen-names.d.ts +12 -2
- package/dist/dimensional/hyphen-names.d.ts.map +1 -1
- package/dist/dimensional/hyphen-names.js +44 -19
- package/dist/dimensional/hyphen-names.js.map +1 -1
- package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
- package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
- package/dist/dimensional/mathts-unit-delegation.js +187 -0
- package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
- package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
- package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
- package/dist/dimensional/mathts-unit-wrapper.js +190 -0
- package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
- package/dist/dimensional/metric.d.ts.map +1 -1
- package/dist/dimensional/metric.js +0 -1
- package/dist/dimensional/metric.js.map +1 -1
- package/dist/dimensional/scalar-lowering.d.ts +21 -0
- package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
- package/dist/dimensional/scalar-lowering.js +45 -0
- package/dist/dimensional/scalar-lowering.js.map +1 -0
- package/dist/dimensional/symbolic-constants.d.ts +9 -0
- package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
- package/dist/dimensional/symbolic-constants.js +13 -1
- package/dist/dimensional/symbolic-constants.js.map +1 -1
- package/dist/dimensional/types.d.ts +36 -0
- package/dist/dimensional/types.d.ts.map +1 -1
- package/dist/dimensional/types.js +45 -7
- package/dist/dimensional/types.js.map +1 -1
- package/dist/dimensional/unit-data.d.ts +5 -1
- package/dist/dimensional/unit-data.d.ts.map +1 -1
- package/dist/dimensional/unit-data.js +30 -6
- package/dist/dimensional/unit-data.js.map +1 -1
- package/dist/dimensional/units.d.ts +2 -0
- package/dist/dimensional/units.d.ts.map +1 -1
- package/dist/dimensional/units.js +59 -3
- package/dist/dimensional/units.js.map +1 -1
- package/dist/dimensional/validator.d.ts +2 -0
- package/dist/dimensional/validator.d.ts.map +1 -1
- package/dist/dimensional/validator.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/numerical/christoffel-flat.d.ts.map +1 -1
- package/dist/numerical/christoffel-flat.js +3 -2
- package/dist/numerical/christoffel-flat.js.map +1 -1
- package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
- package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
- package/dist/numerical/connection-lowering-helpers.js +11 -15
- package/dist/numerical/connection-lowering-helpers.js.map +1 -1
- package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
- package/dist/numerical/covariant-eikonal.js +34 -11
- package/dist/numerical/covariant-eikonal.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +3 -2
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/errors.d.ts.map +1 -1
- package/dist/numerical/errors.js +0 -3
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/finite-difference.d.ts +22 -0
- package/dist/numerical/finite-difference.d.ts.map +1 -0
- package/dist/numerical/finite-difference.js +27 -0
- package/dist/numerical/finite-difference.js.map +1 -0
- package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
- package/dist/numerical/geodesic-integrator.js +22 -14
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/geometrized.d.ts.map +1 -1
- package/dist/numerical/geometrized.js +0 -1
- package/dist/numerical/geometrized.js.map +1 -1
- package/dist/numerical/mathts-engine.d.ts.map +1 -1
- package/dist/numerical/mathts-engine.js +10 -24
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.d.ts.map +1 -1
- package/dist/numerical/metric-inverse.js +83 -46
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/null-ray-integrator.d.ts +2 -1
- package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
- package/dist/numerical/null-ray-integrator.js +12 -12
- package/dist/numerical/null-ray-integrator.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js +2 -2
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/pderiv.d.ts.map +1 -1
- package/dist/numerical/pderiv.js +2 -6
- package/dist/numerical/pderiv.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +0 -36
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +41 -87
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/quadrature.d.ts.map +1 -1
- package/dist/numerical/quadrature.js +11 -13
- package/dist/numerical/quadrature.js.map +1 -1
- package/dist/numerical/rk4-trajectory.d.ts +10 -0
- package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
- package/dist/numerical/rk4-trajectory.js +37 -0
- package/dist/numerical/rk4-trajectory.js.map +1 -0
- package/dist/numerical/schwarzschild.d.ts +14 -0
- package/dist/numerical/schwarzschild.d.ts.map +1 -0
- package/dist/numerical/schwarzschild.js +17 -0
- package/dist/numerical/schwarzschild.js.map +1 -0
- package/dist/numerical/spacetime-metrics.d.ts +12 -0
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +72 -56
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/numerical/statistics.d.ts +24 -0
- package/dist/numerical/statistics.d.ts.map +1 -0
- package/dist/numerical/statistics.js +52 -0
- package/dist/numerical/statistics.js.map +1 -0
- package/dist/numerical/strides.d.ts +3 -2
- package/dist/numerical/strides.d.ts.map +1 -1
- package/dist/numerical/strides.js +3 -10
- package/dist/numerical/strides.js.map +1 -1
- package/dist/numerical/tensor-engine.d.ts +21 -0
- package/dist/numerical/tensor-engine.d.ts.map +1 -1
- package/dist/numerical/tensor-engine.js +12 -0
- package/dist/numerical/tensor-engine.js.map +1 -1
- package/dist/relations/regime.d.ts +10 -0
- package/dist/relations/regime.d.ts.map +1 -1
- package/dist/relations/regime.js +18 -1
- package/dist/relations/regime.js.map +1 -1
- package/package.json +9 -12
- package/dist/cases/brownian-sphere.d.ts +0 -68
- package/dist/cases/brownian-sphere.d.ts.map +0 -1
- package/dist/cases/brownian-sphere.js +0 -354
- package/dist/cases/brownian-sphere.js.map +0 -1
- package/dist/cases/damped-resonator.d.ts +0 -23
- package/dist/cases/damped-resonator.d.ts.map +0 -1
- package/dist/cases/damped-resonator.js +0 -224
- package/dist/cases/damped-resonator.js.map +0 -1
- package/dist/cases/kepler-rv.d.ts +0 -13
- package/dist/cases/kepler-rv.d.ts.map +0 -1
- package/dist/cases/kepler-rv.js +0 -172
- package/dist/cases/kepler-rv.js.map +0 -1
- package/dist/cases/lumped-cooling.d.ts +0 -46
- package/dist/cases/lumped-cooling.d.ts.map +0 -1
- package/dist/cases/lumped-cooling.js +0 -261
- package/dist/cases/lumped-cooling.js.map +0 -1
- package/dist/cases/resistor-noise.d.ts +0 -14
- package/dist/cases/resistor-noise.d.ts.map +0 -1
- package/dist/cases/resistor-noise.js +0 -215
- package/dist/cases/resistor-noise.js.map +0 -1
- package/dist/cases/skin-depth.d.ts +0 -21
- package/dist/cases/skin-depth.d.ts.map +0 -1
- package/dist/cases/skin-depth.js +0 -174
- package/dist/cases/skin-depth.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"study.js","sourceRoot":"","sources":["../../../src/composition/probe/study.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Falsification-oriented study over calibrated observations (audit §14 I19).\n *\n * A study file carries observations with units and σ, each with a role:\n * `exploratory` rows are the only rows the search and every fit see;\n * `holdout` rows are a withheld test (typically a change of regime);\n * `replication` rows are an independent acquisition, tested but never fit.\n * The file also declares its provenance (`synthetic` is required, never\n * inferred) and optional competing baseline formulas.\n *\n * Every test is a χ² test with the declared σ at a stated α. A searched\n * candidate is credible only if it passes on the exploratory rows AND a\n * constant (null) model is rejected there; otherwise the result is\n * `no-credible-candidate`. Only the selected credible candidate is then\n * scored on the holdout: `survives-holdout` or `refuted-on-holdout`.\n * Replication is reported separately and never folded into the verdict.\n *\n * A study is JSON or CSV (the CSV compiles to the same object, so both are\n * refused for the same reasons). Inputs may carry σ, propagated by the\n * effective-variance method. A file may declare correction families in one\n * or more dimensionless inputs; their terms are admitted only by an F test on\n * the exploratory rows. Replication rows may come from a separate file with\n * its own provenance; replication rows at a study row's inputs that agree\n * with it more closely than independent measurements would are reported as\n * `too-close`, not as a replication.\n *\n * @internal\n */\n\nimport { readFileSync } from 'node:fs';\nimport { DIMENSIONLESS, type Dimension } from '../../dimensional/types.js';\nimport type { ExprNode } from '../../dimensional/ast-types.js';\nimport { equals, format } from '../../dimensional/algebra.js';\nimport { convertValue, parseUnit, UnitError } from '../../dimensional/units.js';\nimport { parseFormula } from '../../numerical/formula-mathts.js';\nimport { builtinFormulaDimensionChecker } from '../../numerical/formula-dimension.js';\nimport { evalExpr } from '../expr-eval.js';\nimport type { SearchBudget, SearchStopReason } from './types.js';\nimport { SCHEMA_VERSION } from './types.js';\nimport { datasetFromRows } from './dataset.js';\nimport { problemFromResidualGap } from './frontier.js';\nimport { isGapKind, makeResidualGap } from './problem.js';\nimport { NO_HOLDOUT_WORDING, runProbeSearch } from './pipeline.js';\nimport { bodyExpression } from './fingerprint.js';\nimport { canonicalJson, hashCanonical } from './serialize.js';\n\n/** The partition a study row belongs to for fitting, holdout testing or replication. @internal */\nexport type StudyRole = 'exploratory' | 'holdout' | 'replication';\n\n/** Where the observations came from. `synthetic` is declared, never inferred. @internal */\nexport interface StudyProvenance {\n readonly synthetic: boolean;\n readonly source: string;\n readonly acquisition?: string;\n readonly calibration?: string;\n}\n\n/** A named variable in a study, with its unit conversion and optional input uncertainty. @internal */\nexport interface StudyQuantity {\n readonly name: string;\n readonly unit: string;\n readonly dim: Dimension;\n /** Declared unit → SI coherent unit. */\n readonly scale: number;\n /** Default σ of this input on every row, SI; absent = the input is exact. */\n readonly sigma?: number;\n}\n\n/** One observation, converted to SI coherent units. @internal */\nexport interface StudyObservation {\n readonly id: string;\n readonly role: StudyRole;\n readonly source: string;\n readonly inputs: Readonly<Record<string, number>>;\n readonly observed: number;\n readonly sigma: number;\n /** σ of each input that has one on this row, SI. */\n readonly inputSigma: Readonly<Record<string, number>>;\n}\n\n/** A declared family y = m(x)·(1 + Σ c_k·u^p_k) in one dimensionless input u. @internal */\nexport interface StudyCorrection {\n readonly input: string;\n readonly powers: readonly number[];\n}\n\n/** A declared comparison model formula and whether its scale is fit on exploratory rows. @internal */\nexport interface StudyBaseline {\n readonly name: string;\n readonly formula: string;\n readonly fitPrefactor: boolean;\n}\n\n/** A parsed, validated study. All numbers are SI coherent. @internal */\nexport interface ProbeStudy {\n readonly source: string;\n readonly gap: { readonly id: string; readonly kind: string; readonly summary: string };\n readonly provenance: StudyProvenance;\n readonly target: StudyQuantity;\n readonly governing: readonly StudyQuantity[];\n readonly observations: readonly StudyObservation[];\n readonly baselines: readonly StudyBaseline[];\n readonly alpha: number;\n readonly design?: Readonly<Record<string, { min: number; max: number; steps: number }>>;\n /** The declared families, in the declared order (one object in the file is a list of one). */\n readonly correction?: readonly StudyCorrection[];\n /** Set when the replication rows came from a separate file. */\n readonly replication?: { readonly source: string; readonly provenance: StudyProvenance };\n}\n\n/** The study file was refused: bad units, missing σ, leakage, undeclared keys. @internal */\nexport class StudyRefusal extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'StudyRefusal';\n }\n}\n\n/** The χ² test level a study file states none of. @internal */\nexport const DEFAULT_ALPHA = 0.001;\nconst TOP_KEYS = new Set([\n 'description', 'gap', 'provenance', 'target', 'governing', 'observations', 'baselines', 'criterion', 'design',\n 'correction',\n]);\nconst ROW_KEYS = new Set(['id', 'role', 'source', 'values', 'observed', 'sigma', 'inputSigma', 'note']);\n/** The keys a separate replication file may carry; the rest belong in the study file. */\nconst REPLICATION_KEYS = new Set(['description', 'provenance', 'target', 'governing', 'observations']);\n/** How many powers a study file's correction may list in all. @internal */\nexport const MAX_CORRECTION_TERMS = 6;\n\nfunction refuse(where: string, why: string): never {\n throw new StudyRefusal(`study refused (${where}): ${why}`);\n}\n\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\nfunction nonEmptyString(v: unknown): v is string {\n return typeof v === 'string' && v.trim().length > 0;\n}\n\nfunction quantity(raw: unknown, where: string): StudyQuantity {\n if (!isObject(raw) || !nonEmptyString(raw.name) || typeof raw.unit !== 'string') {\n refuse(where, 'needs {\"name\", \"unit\"} (\"unit\": \"\" for a dimensionless quantity)');\n }\n let parsed;\n try {\n parsed = parseUnit(raw.unit);\n } catch (e) {\n refuse(where, (e as Error).message);\n }\n if (parsed.affine !== undefined) refuse(where, `declare an absolute unit (K), not '${raw.unit}'`);\n return { name: raw.name, unit: raw.unit, dim: parsed.dim, scale: parsed.scale };\n}\n\n/** A number is read in the declared unit; a string may carry its own unit. */\nfunction toSi(raw: unknown, q: StudyQuantity, where: string, reading: 'absolute' | 'difference'): number {\n if (typeof raw !== 'number' && typeof raw !== 'string') refuse(where, 'is not a number or a \"value unit\" string');\n let v: number;\n try {\n v = convertValue(String(raw), q.unit, reading).value;\n } catch (e) {\n if (e instanceof UnitError) refuse(where, e.message);\n throw e;\n }\n if (!Number.isFinite(v)) refuse(where, 'is not finite');\n return v * q.scale;\n}\n\nfunction positiveSigma(raw: unknown, q: StudyQuantity, where: string): number {\n const s = toSi(raw, q, where, 'difference');\n if (!(s > 0)) refuse(where, 'must be positive');\n return s;\n}\n\nfunction governingQuantity(raw: unknown, where: string): StudyQuantity {\n const q = quantity(raw, where);\n const sigma = (raw as Record<string, unknown>).sigma;\n return sigma === undefined ? q : { ...q, sigma: positiveSigma(sigma, q, `${where}.sigma`) };\n}\n\nfunction parseFamily(raw: unknown, governing: readonly StudyQuantity[], where: string): StudyCorrection {\n if (!isObject(raw) || !nonEmptyString(raw.input) || !Array.isArray(raw.powers)) {\n refuse(where, 'needs {\"input\": <dimensionless governing input>, \"powers\": [p, ...]}');\n }\n for (const k of Object.keys(raw)) {\n if (k !== 'input' && k !== 'powers') refuse(where, `undeclared key '${k}'`);\n }\n const q = governing.find((g) => g.name === raw.input);\n if (!q) refuse(`${where}.input`, `'${raw.input}' is not a declared governing input`);\n if (!equals(q.dim, DIMENSIONLESS)) {\n refuse(`${where}.input`, `'${q.name}' is ${format(q.dim)}; a correction family needs a dimensionless input`);\n }\n const powers = raw.powers;\n if (powers.length === 0 || powers.length > MAX_CORRECTION_TERMS) {\n refuse(`${where}.powers`, `must list 1 to ${MAX_CORRECTION_TERMS} powers`);\n }\n if (!powers.every((p): p is number => typeof p === 'number' && Number.isFinite(p) && p > 0)) {\n refuse(`${where}.powers`, 'must be positive finite numbers');\n }\n if (new Set(powers).size !== powers.length) refuse(`${where}.powers`, 'must be distinct');\n return { input: q.name, powers };\n}\n\n/** One family `{input, powers}`, or a list of them, each in a different dimensionless input. */\nfunction parseCorrection(raw: unknown, governing: readonly StudyQuantity[]): StudyCorrection[] | undefined {\n if (raw === undefined) return undefined;\n if (!Array.isArray(raw)) return [parseFamily(raw, governing, 'correction')];\n if (raw.length === 0) refuse('correction', 'must list at least one family');\n const families = raw.map((f, i) => parseFamily(f, governing, `correction[${i}]`));\n const seen = new Set<string>();\n for (const [i, f] of families.entries()) {\n if (seen.has(f.input)) refuse(`correction[${i}].input`, `'${f.input}' already has a family; give each input one family`);\n seen.add(f.input);\n }\n const total = families.reduce((s, f) => s + f.powers.length, 0);\n if (total > MAX_CORRECTION_TERMS) {\n refuse('correction', `lists ${total} powers across its families; at most ${MAX_CORRECTION_TERMS}`);\n }\n return families;\n}\n\n/** Provenance text compared without case, spacing or punctuation: \"Lab A\" and \"lab-a\" are one source. */\nconst provenanceKey = (s: string): string => s.toLowerCase().replace(/[^\\p{L}\\p{N}]+/gu, ' ').trim();\n\nfunction parseProvenance(raw: unknown): StudyProvenance {\n if (!isObject(raw)) refuse('provenance', 'is required: {\"synthetic\": true|false, \"source\": \"...\"}');\n if (typeof raw.synthetic !== 'boolean') {\n refuse('provenance.synthetic', 'must be declared true or false; it is never inferred');\n }\n if (!nonEmptyString(raw.source)) refuse('provenance.source', 'must name where the observations came from');\n return {\n synthetic: raw.synthetic,\n source: raw.source,\n ...(nonEmptyString(raw.acquisition) ? { acquisition: raw.acquisition } : {}),\n ...(nonEmptyString(raw.calibration) ? { calibration: raw.calibration } : {}),\n };\n}\n\nfunction parseBaselines(raw: unknown, target: StudyQuantity, governing: readonly StudyQuantity[]): StudyBaseline[] {\n if (raw === undefined) return [];\n if (!Array.isArray(raw)) refuse('baselines', 'must be an array');\n const dims = Object.fromEntries(governing.map((g) => [g.name, g.dim]));\n const checker = builtinFormulaDimensionChecker();\n return raw.map((b, i) => {\n const where = `baselines[${i}]`;\n if (!isObject(b) || !nonEmptyString(b.name) || !nonEmptyString(b.formula)) {\n refuse(where, 'needs {\"name\", \"formula\"}');\n }\n let vars: readonly string[];\n try {\n vars = parseFormula(b.formula).variables;\n } catch (e) {\n refuse(where, (e as Error).message);\n }\n const unknown = vars.filter((v) => !(v in dims));\n if (unknown.length > 0) refuse(where, `formula reads undeclared input(s) ${unknown.join(', ')}`);\n const check = checker.check(b.formula, dims);\n if (!check.ok || !check.dim) refuse(where, check.error ?? 'not dimensionally homogeneous');\n if (!equals(check.dim, target.dim)) {\n refuse(where, `formula is ${format(check.dim)}, but the target '${target.name}' is ${format(target.dim)}`);\n }\n if (b.fitPrefactor !== undefined && typeof b.fitPrefactor !== 'boolean') {\n refuse(`${where}.fitPrefactor`, 'must be true or false');\n }\n return { name: b.name, formula: b.formula, fitPrefactor: b.fitPrefactor === true };\n });\n}\n\nfunction parseDesign(\n raw: unknown,\n governing: readonly StudyQuantity[],\n): ProbeStudy['design'] {\n if (raw === undefined) return undefined;\n if (!isObject(raw) || !isObject(raw.variables)) refuse('design', 'needs {\"variables\": {name: {\"min\", \"max\"}}}');\n const byName = new Map(governing.map((g) => [g.name, g]));\n const out: Record<string, { min: number; max: number; steps: number }> = {};\n for (const [name, spec] of Object.entries(raw.variables)) {\n const q = byName.get(name);\n const where = `design.variables.${name}`;\n if (!q) refuse(where, 'is not a declared governing input');\n if (!isObject(spec)) refuse(where, 'needs {\"min\", \"max\"}');\n const min = toSi(spec.min, q, `${where}.min`, 'absolute');\n const max = toSi(spec.max, q, `${where}.max`, 'absolute');\n if (min > max) refuse(where, 'has min > max');\n const steps = spec.steps === undefined ? 8 : Number(spec.steps);\n if (!Number.isInteger(steps) || steps < 1) refuse(`${where}.steps`, 'must be a positive integer');\n out[name] = { min, max, steps };\n }\n return out;\n}\n\nfunction parseObservations(\n raw: unknown,\n provenance: StudyProvenance,\n target: StudyQuantity,\n governing: readonly StudyQuantity[],\n defaultSigma: unknown,\n): StudyObservation[] {\n if (!Array.isArray(raw) || raw.length === 0) refuse('observations', 'must be a non-empty array');\n const ids = new Set<string>();\n const rows = raw.map((row, i): StudyObservation => {\n const id = isObject(row) && nonEmptyString(row.id) ? row.id : `row-${i + 1}`;\n const where = `observation ${id}`;\n if (!isObject(row)) refuse(where, 'is not an object');\n for (const k of Object.keys(row)) {\n if (!ROW_KEYS.has(k)) refuse(where, `undeclared key '${k}'`);\n }\n if (ids.has(id)) refuse(where, 'duplicate id');\n ids.add(id);\n if (row.role !== 'exploratory' && row.role !== 'holdout' && row.role !== 'replication') {\n refuse(where, `role must be exploratory, holdout or replication (got '${String(row.role)}')`);\n }\n if (!isObject(row.values)) refuse(where, 'needs \"values\": {input: value}');\n for (const k of Object.keys(row.values)) {\n if (!governing.some((g) => g.name === k)) refuse(`${where} values.${k}`, 'is not a declared governing input');\n }\n const inputs: Record<string, number> = {};\n for (const g of governing) {\n if (!(g.name in row.values)) refuse(where, `is missing input '${g.name}'`);\n inputs[g.name] = toSi(row.values[g.name], g, `${where} values.${g.name}`, 'absolute');\n }\n if (row.observed === undefined) refuse(where, `is missing \"observed\" (${target.name})`);\n const observed = toSi(row.observed, target, `${where} observed`, 'absolute');\n const sigmaRaw = row.sigma ?? defaultSigma;\n if (sigmaRaw === undefined) {\n refuse(where, 'has no uncertainty: give \"sigma\" on the row or on the target');\n }\n const sigma = positiveSigma(sigmaRaw, target, `${where} sigma`);\n if (row.inputSigma !== undefined && !isObject(row.inputSigma)) refuse(where, '\"inputSigma\" must be {input: σ}');\n const rowInputSigma = (row.inputSigma ?? {}) as Record<string, unknown>;\n for (const k of Object.keys(rowInputSigma)) {\n if (!governing.some((g) => g.name === k)) refuse(`${where} inputSigma.${k}`, 'is not a declared governing input');\n }\n const inputSigma: Record<string, number> = {};\n for (const g of governing) {\n const s = rowInputSigma[g.name] === undefined\n ? g.sigma\n : positiveSigma(rowInputSigma[g.name], g, `${where} inputSigma.${g.name}`);\n if (s !== undefined) inputSigma[g.name] = s;\n }\n const source = row.source === undefined ? provenance.source : row.source;\n if (!nonEmptyString(source)) refuse(`${where} source`, 'must be a non-empty string');\n return { id, role: row.role, source, inputs, observed, sigma, inputSigma };\n });\n guardLeakage(rows);\n return rows;\n}\n\n/** The data of a row, without its id, role or source: equal keys are the same measurement. */\nconst dataKey = (r: StudyObservation): string =>\n canonicalJson({ inputs: r.inputs, observed: r.observed, sigma: r.sigma, inputSigma: r.inputSigma });\n\n/** Withheld rows must not repeat fit rows, and replication must be an independent acquisition. */\nfunction guardLeakage(rows: readonly StudyObservation[]): void {\n const fitKeys = new Map<string, string>();\n const fitSources = new Set<string>();\n const studyData = new Map<string, StudyObservation>();\n for (const r of rows) {\n if (r.role !== 'replication') studyData.set(dataKey(r), r);\n if (r.role !== 'exploratory') continue;\n fitKeys.set(canonicalJson(r.inputs), r.id);\n fitSources.add(provenanceKey(r.source));\n }\n for (const r of rows) {\n if (r.role === 'exploratory') continue;\n const copy = r.role === 'replication' ? studyData.get(dataKey(r)) : undefined;\n if (copy !== undefined) {\n refuse(\n `observation ${r.id}`,\n `replication row is identical (inputs, observed, σ) to ${copy.role} row ${copy.id} of source '${copy.source}'; ` +\n 'the same data under another source name is not an independent acquisition',\n );\n }\n const twin = fitKeys.get(canonicalJson(r.inputs));\n if (twin !== undefined) {\n refuse(`observation ${r.id}`, `${r.role} row repeats the inputs of exploratory row ${twin}; withheld data must not be fit data`);\n }\n if (r.role === 'replication' && fitSources.has(provenanceKey(r.source))) {\n refuse(\n `observation ${r.id}`,\n `replication row has source '${r.source}', which also supplied exploratory rows; ` +\n 'replication must come from an independent acquisition (give it its own \"source\")',\n );\n }\n }\n}\n\n/** Parse and validate a study file. Throws {@link StudyRefusal}. @internal */\nexport function parseStudy(raw: unknown, source = 'inline'): ProbeStudy {\n if (!isObject(raw)) refuse(source, 'is not a JSON object');\n for (const k of Object.keys(raw)) {\n if (!TOP_KEYS.has(k)) refuse(source, `undeclared top-level key '${k}'`);\n }\n const provenance = parseProvenance(raw.provenance);\n const target = quantity(raw.target, 'target');\n if (!Array.isArray(raw.governing) || raw.governing.length === 0) {\n refuse('governing', 'must be a non-empty array of {\"name\", \"unit\"}');\n }\n const governing = raw.governing.map((g, i) => governingQuantity(g, `governing[${i}]`));\n const names = [target.name, ...governing.map((g) => g.name)];\n if (new Set(names).size !== names.length) refuse('governing', 'names must be distinct from each other and from the target');\n const gapRaw = isObject(raw.gap) ? raw.gap : {};\n const gap = {\n id: nonEmptyString(gapRaw.id) ? gapRaw.id : 'fg-study',\n kind: nonEmptyString(gapRaw.kind) ? gapRaw.kind : 'unexplained-observation',\n summary: nonEmptyString(gapRaw.summary) ? gapRaw.summary : `study from ${source}`,\n };\n if (!isGapKind(gap.kind)) refuse('gap.kind', `unknown gap kind '${gap.kind}'`);\n let alpha = DEFAULT_ALPHA;\n if (raw.criterion !== undefined) {\n if (!isObject(raw.criterion) || typeof raw.criterion.alpha !== 'number') {\n refuse('criterion', 'needs {\"alpha\": number}');\n }\n alpha = raw.criterion.alpha;\n if (!(alpha > 0 && alpha < 1)) refuse('criterion.alpha', 'must be in (0, 1)');\n }\n const targetRaw = raw.target as Record<string, unknown>;\n const observations = parseObservations(raw.observations, provenance, target, governing, targetRaw.sigma);\n const baselines = parseBaselines(raw.baselines, target, governing);\n const design = parseDesign(raw.design, governing);\n const correction = parseCorrection(raw.correction, governing);\n return {\n source,\n gap,\n provenance,\n target,\n governing,\n observations,\n baselines,\n alpha,\n ...(design ? { design } : {}),\n ...(correction ? { correction } : {}),\n };\n}\n\n/** Load a study JSON file. @internal */\nexport function loadStudyFromJson(path: string): ProbeStudy {\n return parseStudy(JSON.parse(readFileSync(path, 'utf8')), path);\n}\n\nfunction readStudyRaw(path: string): unknown {\n const text = readFileSync(path, 'utf8');\n if (/\\.csv$/i.test(path)) return studyCsvToRaw(text, path);\n try {\n return JSON.parse(text);\n } catch (e) {\n throw e instanceof SyntaxError ? new SyntaxError(`${path}: ${e.message}`) : e;\n }\n}\n\n/**\n * Load a study file (`.csv`, else JSON) and, optionally, a separate\n * replication file with its own provenance. Throws {@link StudyRefusal}.\n *\n * @internal\n */\nexport function loadStudyFile(path: string, replicationPath?: string): ProbeStudy {\n const study = parseStudy(readStudyRaw(path), path);\n return replicationPath === undefined ? study : attachReplication(study, readStudyRaw(replicationPath), replicationPath);\n}\n\nconst sameDim = (a: StudyQuantity, b: StudyQuantity) => a.name === b.name && equals(a.dim, b.dim);\n\n/**\n * Add the rows of a separate replication file to a study. The file must\n * declare its own provenance, the study's target and inputs (units may\n * differ), and replication rows only. Its source and acquisition must differ\n * from the study's, and no row may repeat a study row's data.\n *\n * @internal\n */\nexport function attachReplication(study: ProbeStudy, raw: unknown, source: string): ProbeStudy {\n if (!isObject(raw)) refuse(source, 'is not a JSON object');\n for (const k of Object.keys(raw)) {\n if (!REPLICATION_KEYS.has(k)) {\n refuse(source, `'${k}' belongs in the study file; a replication file carries only ${[...REPLICATION_KEYS].join(', ')}`);\n }\n }\n if (study.observations.some((o) => o.role === 'replication')) {\n refuse(source, `the study ${study.source} already has replication rows; give replication in one place`);\n }\n const rep = parseStudy(raw, source);\n const mine = rep.observations.find((o) => o.role !== 'replication');\n if (mine) refuse(`${source} observation ${mine.id}`, `a replication file holds replication rows only (got '${mine.role}')`);\n if (!sameDim(rep.target, study.target)) {\n refuse(`${source} target`, `must be '${study.target.name}' ${format(study.target.dim)}, as in the study`);\n }\n const names = (qs: readonly StudyQuantity[]) => qs.map((q) => q.name).sort().join(', ');\n if (\n rep.governing.length !== study.governing.length ||\n !study.governing.every((g) => rep.governing.some((r) => sameDim(r, g)))\n ) {\n refuse(`${source} governing`, `must declare the study's inputs {${names(study.governing)}} with the same dimensions (got {${names(rep.governing)}})`);\n }\n if (provenanceKey(rep.provenance.source) === provenanceKey(study.provenance.source)) {\n refuse(`${source} provenance.source`, `is '${rep.provenance.source}', the study's own source; replication must be an independent acquisition`);\n }\n if (\n rep.provenance.acquisition !== undefined &&\n study.provenance.acquisition !== undefined &&\n provenanceKey(rep.provenance.acquisition) === provenanceKey(study.provenance.acquisition)\n ) {\n refuse(`${source} provenance.acquisition`, 'is the study\\'s own acquisition; replication must be an independent acquisition');\n }\n const ids = new Set(study.observations.map((o) => o.id));\n const clash = rep.observations.find((o) => ids.has(o.id));\n if (clash) refuse(`${source} observation ${clash.id}`, `id is also used in the study ${study.source}`);\n const observations = [...study.observations, ...rep.observations];\n guardLeakage(observations);\n return { ...study, observations, replication: { source, provenance: rep.provenance } };\n}\n\n// --- replication closeness -------------------------------------------------\n\n/** One lower-tail χ² test of replication rows against the study rows they pair with. @internal */\nexport interface ClosenessTest {\n readonly chi2: number;\n readonly dof: number;\n /** P(χ²_ν ≤ chi2): small when the rows agree better than their σ allows. */\n readonly pLower: number;\n /** pLower < α/2. */\n readonly flagged: boolean;\n}\n\n/**\n * Whether replication rows are closer to the study rows at the same inputs\n * than independent measurements with the declared σ can be. @internal\n */\nexport interface ReplicationIndependence {\n /** Replication rows paired with a study row at the same inputs. */\n readonly pairs: number;\n /** y_rep = y_study: Σ Δy²/(σ_rep² + σ_study²) on ν = pairs. Null without a pair. */\n readonly identity: ClosenessTest | null;\n /** y_rep = a + b·y_study, fit with weights 1/(σ_rep² + b²σ_study²), on ν = pairs − 2. Null below 3 pairs or when degenerate. */\n readonly affine: (ClosenessTest & { readonly slope: number; readonly offset: number }) | null;\n readonly tooClose: boolean;\n readonly reason: string;\n}\n\nfunction sameInputs(a: StudyObservation, b: StudyObservation): boolean {\n const keys = Object.keys(a.inputs);\n if (keys.length !== Object.keys(b.inputs).length) return false;\n return keys.every((k) => {\n const x = a.inputs[k];\n const y = b.inputs[k];\n if (x === undefined || y === undefined) return false;\n const sa = a.inputSigma[k] ?? 0;\n const sb = b.inputSigma[k] ?? 0;\n const tol = sa > 0 || sb > 0 ? 3 * Math.hypot(sa, sb) : 1e-9 * Math.max(Math.abs(x), Math.abs(y));\n return Math.abs(x - y) <= tol;\n });\n}\n\nfunction closeness(chi2: number, dof: number, alpha: number): ClosenessTest {\n const pLower = chiSquareCdf(chi2, dof);\n return { chi2, dof, pLower, flagged: pLower < alpha / 2 };\n}\n\n/** Weighted straight line y = a + b·x with the effective variance σ_y² + b²σ_x², iterated from b = 1. */\nfunction affineFit(pts: readonly { x: number; sx: number; y: number; sy: number }[]): { a: number; b: number; chi2: number } | null {\n let b = 1;\n let a = 0;\n for (let it = 0; it < 6; it++) {\n const w = pts.map((p) => 1 / (p.sy ** 2 + b * b * p.sx ** 2));\n const W = w.reduce((s, v) => s + v, 0);\n const xm = pts.reduce((s, p, i) => s + w[i]! * p.x, 0) / W;\n const ym = pts.reduce((s, p, i) => s + w[i]! * p.y, 0) / W;\n const sxx = pts.reduce((s, p, i) => s + w[i]! * (p.x - xm) ** 2, 0);\n const sxy = pts.reduce((s, p, i) => s + w[i]! * (p.x - xm) * (p.y - ym), 0);\n if (!(sxx > 0) || !Number.isFinite(sxy)) return null;\n b = sxy / sxx;\n a = ym - b * xm;\n }\n const chi2 = pts.reduce((s, p) => s + (p.y - a - b * p.x) ** 2 / (p.sy ** 2 + b * b * p.sx ** 2), 0);\n return Number.isFinite(chi2) ? { a, b, chi2 } : null;\n}\n\n/**\n * Fisher's test of agreement too good to be true. Each replication row is\n * paired with the first unused study row at the same inputs (within 3·√(σ_x²\n * + σ_x'²) when an input σ is declared, else to 1e-9 relative). Independent\n * acquisitions differ by about their σ, so a χ² far in the lower tail means a\n * copy, or an overstated σ. Two tests, each at α/2: identity (y_rep = y_study)\n * and affine (y_rep = a + b·y_study, which catches a rescaled or shifted copy).\n * Only paired rows are tested: a copy moved to other inputs is not caught.\n *\n * @internal\n */\nexport function replicationIndependence(observations: readonly StudyObservation[], alpha: number): ReplicationIndependence {\n const reps = observations.filter((o) => o.role === 'replication');\n if (reps.length === 0) {\n return { pairs: 0, identity: null, affine: null, tooClose: false, reason: 'no replication rows; the closeness test did not run' };\n }\n const used = new Set<StudyObservation>();\n const pts: { x: number; sx: number; y: number; sy: number }[] = [];\n for (const r of reps) {\n const s = observations.find((o) => o.role !== 'replication' && !used.has(o) && sameInputs(r, o));\n if (!s) continue;\n used.add(s);\n pts.push({ x: s.observed, sx: s.sigma, y: r.observed, sy: r.sigma });\n }\n const n = pts.length;\n if (n === 0) {\n return {\n pairs: 0,\n identity: null,\n affine: null,\n tooClose: false,\n reason: 'no replication row shares its inputs with a study row; the closeness test did not run',\n };\n }\n const identity = closeness(\n pts.reduce((s, p) => s + (p.y - p.x) ** 2 / (p.sy ** 2 + p.sx ** 2), 0),\n n,\n alpha,\n );\n const fit = n >= 3 ? affineFit(pts) : null;\n const affine = fit ? { ...closeness(fit.chi2, n - 2, alpha), slope: fit.b, offset: fit.a } : null;\n const tooClose = identity.flagged || (affine?.flagged ?? false);\n const cmp = (t: ClosenessTest) => `lower-tail p = ${fmtP(t.pLower)} ${t.flagged ? '<' : '≥'} α/2 = ${alpha / 2}`;\n const parts = [\n n === 1 ? '1 replication row shares its inputs with a study row' : `${n} replication rows share their inputs with study rows`,\n ...(n < reps.length ? [`${reps.length - n} other(s) are at inputs no study row has and are not tested`] : []),\n `identity: Σz² = ${identity.chi2.toPrecision(3)} on ν = ${n}, ${cmp(identity)}`,\n affine\n ? `affine: y_rep = ${affine.offset.toPrecision(3)} + ${affine.slope.toPrecision(6)} · y_study, χ² = ${affine.chi2.toPrecision(3)} on ν = ${n - 2}, ${cmp(affine)}`\n : n < 3\n ? 'affine: not run (needs 3 pairs)'\n : 'affine: not run (the paired study values do not vary)',\n ];\n const verdict = tooClose\n ? 'closer than independent measurements with the declared σ allow — not independent, or σ is overstated'\n : 'no closer than independent measurements with the declared σ would be';\n return { pairs: n, identity, affine, tooClose, reason: `${parts.join('; ')}: ${verdict}` };\n}\n\n// --- CSV study files -------------------------------------------------------\n\nconst CSV_ROW_COLUMNS = new Set(['id', 'role', 'source', 'sigma', 'note']);\n\nfunction csvCells(line: string, where: string): string[] {\n const cells: string[] = [];\n let i = 0;\n for (;;) {\n let cell = '';\n if (line[i] === '\"') {\n i++;\n for (;;) {\n if (i >= line.length) refuse(where, 'has an unterminated quoted cell');\n if (line[i] === '\"') {\n if (line[i + 1] === '\"') {\n cell += '\"';\n i += 2;\n continue;\n }\n i++;\n break;\n }\n cell += line[i++];\n }\n if (i < line.length && line[i] !== ',') refuse(where, 'has text after a closing quote');\n } else {\n const end = line.indexOf(',', i);\n cell = line.slice(i, end < 0 ? line.length : end);\n i = end < 0 ? line.length : end;\n }\n cells.push(cell.trim());\n if (i >= line.length) return cells;\n i++;\n }\n}\n\n/** A declaration value: JSON when it parses as JSON, else the text itself. */\nfunction declValue(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction setPath(obj: Record<string, unknown>, path: readonly string[], value: unknown, where: string): void {\n let at = obj;\n for (const k of path.slice(0, -1)) {\n if (at[k] === undefined) at[k] = {};\n if (!isObject(at[k])) refuse(where, `'${k}' is already set to a value`);\n at = at[k] as Record<string, unknown>;\n }\n const last = path[path.length - 1]!;\n if (at[last] !== undefined) refuse(where, `'${path.join('.')}' is declared twice`);\n at[last] = value;\n}\n\n/**\n * Compile a CSV study into the object {@link parseStudy} reads, so a CSV is\n * refused for exactly the reasons its JSON twin would be.\n *\n * Lines `# key: value` above the header declare the study: `target` names\n * the target column; `target.sigma`, `governing.<input>.sigma` and any other\n * dotted key (`provenance.synthetic`, `provenance.source`, `criterion.alpha`,\n * `baselines`, `design`, `correction`, ...) set that key. A value is JSON\n * when it parses as JSON, else text. The header names `name[unit]` quantity\n * columns (`name[]` when dimensionless) and the reserved columns `id`,\n * `role`, `source`, `sigma` (target σ), `sigma(<input>)` and `note`. An\n * empty cell is an absent value.\n *\n * @internal\n */\nexport function studyCsvToRaw(text: string, source = 'inline.csv'): Record<string, unknown> {\n const lines = text.split(/\\r?\\n/).map((l, i) => ({ l, n: i + 1 })).filter(({ l }) => l.trim() !== '');\n const raw: Record<string, unknown> = {};\n let targetName: string | undefined;\n const governingSigma: Record<string, unknown> = {};\n let h = 0;\n for (; h < lines.length && lines[h]!.l.trimStart().startsWith('#'); h++) {\n const { l, n } = lines[h]!;\n const where = `${source} line ${n}`;\n const m = /^\\s*#\\s*([A-Za-z_][\\w.()-]*)\\s*:\\s?(.*)$/.exec(l);\n if (!m) refuse(where, \"a declaration is '# key: value'\");\n const [, key, valueText] = m as unknown as [string, string, string];\n const value = declValue(valueText.trim());\n const path = key.split('.');\n if (key === 'target') {\n if (targetName !== undefined) refuse(where, \"'target' is declared twice\");\n if (!nonEmptyString(value)) refuse(where, \"'# target:' names the target column\");\n targetName = value;\n } else if (path[0] === 'governing') {\n if (path.length !== 3 || path[2] !== 'sigma') refuse(where, \"the only governing declaration is '# governing.<input>.sigma: σ'\");\n if (path[1]! in governingSigma) refuse(where, `'${key}' is declared twice`);\n governingSigma[path[1]!] = value;\n } else if (key === 'observations') {\n refuse(where, 'observations are the rows below the header');\n } else {\n setPath(raw, path, value, where);\n }\n }\n if (h >= lines.length) refuse(source, 'has no header row');\n const header = csvCells(lines[h]!.l, `${source} header`);\n if (targetName === undefined) refuse(source, \"needs a '# target: <column>' declaration\");\n type Column = { kind: 'row'; key: string } | { kind: 'quantity'; name: string; unit: string } | { kind: 'inputSigma'; input: string };\n const seen = new Set<string>();\n const columns: Column[] = header.map((cell) => {\n const where = `${source} header column '${cell}'`;\n let col: Column;\n let name: string;\n const q = /^([A-Za-z_]\\w*)\\[(.*)\\]$/.exec(cell);\n const s = /^sigma\\(([A-Za-z_]\\w*)\\)$/.exec(cell);\n if (CSV_ROW_COLUMNS.has(cell)) {\n col = { kind: 'row', key: cell };\n name = cell;\n } else if (s) {\n col = { kind: 'inputSigma', input: s[1]! };\n name = cell;\n } else if (q) {\n col = { kind: 'quantity', name: q[1]!, unit: q[2]!.trim() };\n name = q[1]!;\n } else {\n refuse(where, `is not ${[...CSV_ROW_COLUMNS].join(', ')}, sigma(<input>) or a quantity 'name[unit]' ('name[]' when dimensionless)`);\n }\n if (seen.has(name)) refuse(where, 'is a duplicate column');\n seen.add(name);\n return col;\n });\n const quantities = columns.filter((c): c is Extract<Column, { kind: 'quantity' }> => c.kind === 'quantity');\n const targetCol = quantities.find((c) => c.name === targetName);\n if (!targetCol) refuse(source, `'# target: ${targetName}' names no 'name[unit]' column`);\n const governing = quantities.filter((c) => c !== targetCol);\n for (const c of columns) {\n if (c.kind === 'inputSigma' && !governing.some((g) => g.name === c.input)) {\n refuse(`${source} header column 'sigma(${c.input})'`, `'${c.input}' is not a governing input column`);\n }\n }\n for (const k of Object.keys(governingSigma)) {\n if (!governing.some((g) => g.name === k)) refuse(`${source} governing.${k}.sigma`, `'${k}' is not a governing input column`);\n }\n if (isObject(raw.target)) {\n for (const k of Object.keys(raw.target)) {\n if (k !== 'sigma') refuse(`${source} target.${k}`, \"the target's name and unit come from its column; only 'target.sigma' is declared\");\n }\n }\n raw.target = { name: targetCol.name, unit: targetCol.unit, ...(isObject(raw.target) ? raw.target : {}) };\n raw.governing = governing.map((g) => ({\n name: g.name,\n unit: g.unit,\n ...(g.name in governingSigma ? { sigma: governingSigma[g.name] } : {}),\n }));\n raw.observations = lines.slice(h + 1).map(({ l, n }) => {\n const where = `${source} line ${n}`;\n if (l.trimStart().startsWith('#')) refuse(where, 'declarations go above the header row');\n const cells = csvCells(l, where);\n if (cells.length !== columns.length) refuse(where, `has ${cells.length} cells; the header has ${columns.length}`);\n const row: Record<string, unknown> = {};\n const values: Record<string, unknown> = {};\n const inputSigma: Record<string, unknown> = {};\n columns.forEach((c, i) => {\n const cell = cells[i]!;\n if (cell === '') return;\n if (c.kind === 'row') row[c.key] = cell;\n else if (c.kind === 'inputSigma') inputSigma[c.input] = cell;\n else if (c === targetCol) row.observed = cell;\n else values[c.name] = cell;\n });\n row.values = values;\n if (Object.keys(inputSigma).length > 0) row.inputSigma = inputSigma;\n return row;\n });\n return raw;\n}\n\n// --- χ² survival function -------------------------------------------------\n\nconst LANCZOS = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313, -176.61502916214059,\n 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7,\n];\n\nfunction lnGamma(z: number): number {\n if (z < 0.5) return Math.log(Math.PI / Math.sin(Math.PI * z)) - lnGamma(1 - z);\n const zz = z - 1;\n let x = LANCZOS[0]!;\n for (let i = 1; i < LANCZOS.length; i++) x += LANCZOS[i]! / (zz + i);\n const t = zz + 7.5;\n return 0.5 * Math.log(2 * Math.PI) + (zz + 0.5) * Math.log(t) - t + Math.log(x);\n}\n\n/** The series for the regularized lower incomplete gamma P(a, x); converges fast for x < a + 1. */\nfunction gammaSeries(a: number, x: number): number {\n const front = Math.exp(-x + a * Math.log(x) - lnGamma(a));\n let ap = a;\n let del = 1 / a;\n let sum = del;\n for (let n = 0; n < 1000; n++) {\n ap += 1;\n del *= x / ap;\n sum += del;\n if (Math.abs(del) < Math.abs(sum) * 1e-16) break;\n }\n return sum * front;\n}\n\n/** Regularized upper incomplete gamma Q(a, x). */\nfunction gammaQ(a: number, x: number): number {\n if (x <= 0) return 1;\n if (x < a + 1) return Math.max(0, 1 - gammaSeries(a, x));\n const front = Math.exp(-x + a * Math.log(x) - lnGamma(a));\n const tiny = 1e-300;\n let b = x + 1 - a;\n let c = 1 / tiny;\n let d = 1 / b;\n let h = d;\n for (let i = 1; i < 1000; i++) {\n const an = -i * (i - a);\n b += 2;\n d = an * d + b;\n if (Math.abs(d) < tiny) d = tiny;\n c = b + an / c;\n if (Math.abs(c) < tiny) c = tiny;\n d = 1 / d;\n const del = d * c;\n h *= del;\n if (Math.abs(del - 1) < 1e-16) break;\n }\n return front * h;\n}\n\n/** P(χ²_ν ≥ chi2): the probability of a χ² at least this large if the model and σ are right. @internal */\nexport function chiSquareSurvival(chi2: number, dof: number): number {\n if (!(dof > 0)) throw new RangeError('chiSquareSurvival: dof must be positive');\n if (!(chi2 > 0)) return 1;\n return gammaQ(dof / 2, chi2 / 2);\n}\n\n/**\n * P(χ²_ν ≤ chi2), computed directly in the lower tail, where 1 − Q would\n * round a small probability away. @internal\n */\nexport function chiSquareCdf(chi2: number, dof: number): number {\n if (!(dof > 0)) throw new RangeError('chiSquareCdf: dof must be positive');\n if (!(chi2 > 0)) return 0;\n const a = dof / 2;\n const x = chi2 / 2;\n return x < a + 1 ? Math.min(1, gammaSeries(a, x)) : 1 - gammaQ(a, x);\n}\n\n/** Continued fraction for the incomplete beta function (modified Lentz). */\nfunction betaCf(a: number, b: number, x: number): number {\n const tiny = 1e-300;\n let c = 1;\n let d = 1 - ((a + b) * x) / (a + 1);\n if (Math.abs(d) < tiny) d = tiny;\n d = 1 / d;\n let h = d;\n for (let m = 1; m < 1000; m++) {\n const m2 = 2 * m;\n let aa = (m * (b - m) * x) / ((a + m2 - 1) * (a + m2));\n d = 1 + aa * d;\n if (Math.abs(d) < tiny) d = tiny;\n c = 1 + aa / c;\n if (Math.abs(c) < tiny) c = tiny;\n d = 1 / d;\n h *= d * c;\n aa = (-(a + m) * (a + b + m) * x) / ((a + m2) * (a + m2 + 1));\n d = 1 + aa * d;\n if (Math.abs(d) < tiny) d = tiny;\n c = 1 + aa / c;\n if (Math.abs(c) < tiny) c = tiny;\n d = 1 / d;\n const del = d * c;\n h *= del;\n if (Math.abs(del - 1) < 1e-16) break;\n }\n return h;\n}\n\n/** Regularized incomplete beta I_x(a, b). */\nfunction betaI(a: number, b: number, x: number): number {\n if (x <= 0) return 0;\n if (x >= 1) return 1;\n const front = Math.exp(lnGamma(a + b) - lnGamma(a) - lnGamma(b) + a * Math.log(x) + b * Math.log(1 - x));\n return x < (a + 1) / (a + b + 2) ? (front * betaCf(a, b, x)) / a : 1 - (front * betaCf(b, a, 1 - x)) / b;\n}\n\n/** P(F_{d1,d2} ≥ f): the probability of an F ratio at least this large if the extra terms explain nothing. @internal */\nexport function fSurvival(f: number, d1: number, d2: number): number {\n if (!(d1 > 0 && d2 > 0)) throw new RangeError('fSurvival: degrees of freedom must be positive');\n if (!(f > 0)) return 1;\n if (f === Infinity) return 0;\n return betaI(d2 / 2, d1 / 2, d2 / (d2 + d1 * f));\n}\n\n// --- tests of a model on a set of rows -------------------------------------\n\n/** A χ² test of one model on one set of rows. `pass` is null when ν < 1. @internal */\nexport interface SetTest {\n readonly n: number;\n readonly chi2: number;\n readonly dof: number;\n readonly p: number | null;\n readonly maxAbsZ: number;\n readonly worstRow: string | null;\n readonly pass: boolean | null;\n}\n\n/** The category of model being scored in a probe study. @internal */\nexport type ModelKind = 'candidate' | 'baseline' | 'null';\n\n/** One model scored on each set. Only the exploratory rows ever set its parameter. @internal */\nexport interface ModelTest {\n readonly id: string;\n readonly kind: ModelKind;\n readonly label: string;\n readonly fittedParameters: number;\n /** SI coherent; 1 for a fixed baseline, the level for the null model. */\n readonly prefactor: number | null;\n readonly exploratory: SetTest | null;\n readonly holdout: SetTest | null;\n readonly replication: SetTest | null;\n readonly error?: string;\n}\n\ntype Predictor = (inputs: Readonly<Record<string, number>>) => number;\n\n/**\n * The effective σ of one row under a model f: σ_eff² = σ_y² + Σ_i (∂f/∂x_i · σ_xi)²\n * over the inputs with a σ, each derivative by a central difference at the\n * recorded inputs. First order in σ_x: exact for f linear in x_i.\n *\n * @internal\n */\nexport function effectiveSigma(r: StudyObservation, predict: Predictor): number {\n let v = r.sigma * r.sigma;\n for (const [name, sx] of Object.entries(r.inputSigma)) {\n const x = r.inputs[name]!;\n const h = Math.max(Math.abs(x) * 1e-6, sx * 1e-3);\n const d = (predict({ ...r.inputs, [name]: x + h }) - predict({ ...r.inputs, [name]: x - h })) / (2 * h);\n if (!Number.isFinite(d)) throw new RangeError(`the model's slope in ${name} is not finite on row ${r.id}`);\n v += (d * sx) ** 2;\n }\n return Math.sqrt(v);\n}\n\nconst hasInputSigma = (rows: readonly StudyObservation[]) => rows.some((r) => Object.keys(r.inputSigma).length > 0);\n\nfunction testRows(rows: readonly StudyObservation[], predict: Predictor, fitted: number, alpha: number): SetTest {\n let chi2 = 0;\n let maxAbsZ = 0;\n let worstRow: string | null = null;\n for (const r of rows) {\n const z = (r.observed - predict(r.inputs)) / effectiveSigma(r, predict);\n if (!Number.isFinite(z)) throw new RangeError(`prediction is not finite on row ${r.id}`);\n chi2 += z * z;\n if (Math.abs(z) > maxAbsZ) {\n maxAbsZ = Math.abs(z);\n worstRow = r.id;\n }\n }\n const dof = rows.length - fitted;\n const p = dof >= 1 ? chiSquareSurvival(chi2, dof) : null;\n return { n: rows.length, chi2, dof, p, maxAbsZ, worstRow, pass: p === null ? null : p >= alpha };\n}\n\nconst combine = (basis: readonly Predictor[], coef: readonly number[]): Predictor =>\n (x) => basis.reduce((s, b, j) => s + coef[j]! * b(x), 0);\n\n/** Solve the weighted normal equations for y ≈ Σ a_j·φ_j; null when they are singular. */\nfunction solveWeighted(phi: readonly number[][], y: readonly number[], sigma: readonly number[]): number[] | null {\n const k = phi[0]?.length ?? 0;\n const A = Array.from({ length: k }, () => new Array<number>(k + 1).fill(0));\n phi.forEach((f, i) => {\n const w = 1 / (sigma[i]! * sigma[i]!);\n for (let a = 0; a < k; a++) {\n for (let b = 0; b < k; b++) A[a]![b]! += w * f[a]! * f[b]!;\n A[a]![k]! += w * f[a]! * y[i]!;\n }\n });\n if (k === 1) return A[0]![0]! > 0 ? [A[0]![1]! / A[0]![0]!] : null;\n // Equilibrate so the pivot test is scale-free, then eliminate with partial pivoting.\n const s = A.map((row, a) => Math.sqrt(row[a]!));\n if (!s.every((v) => v > 0)) return null;\n for (let a = 0; a < k; a++) {\n for (let b = 0; b < k; b++) A[a]![b]! /= s[a]! * s[b]!;\n A[a]![k]! /= s[a]!;\n }\n for (let c = 0; c < k; c++) {\n let p = c;\n for (let r = c + 1; r < k; r++) if (Math.abs(A[r]![c]!) > Math.abs(A[p]![c]!)) p = r;\n if (Math.abs(A[p]![c]!) < 1e-13) return null;\n [A[c], A[p]] = [A[p]!, A[c]!];\n for (let r = 0; r < k; r++) {\n if (r === c) continue;\n const m = A[r]![c]! / A[c]![c]!;\n for (let q = c; q <= k; q++) A[r]![q]! -= m * A[c]![q]!;\n }\n }\n return A.map((row, a) => row[k]! / row[a]! / s[a]!);\n}\n\nconst EV_ROUNDS = 50;\n\n/**\n * Weighted least squares y ≈ Σ a_j·φ_j(x), from the exploratory rows only.\n * With input σ the weights are 1/σ_eff² of the current fit, iterated to a\n * fixed point (the effective-variance method).\n */\nfunction fitLinear(rows: readonly StudyObservation[], basis: readonly Predictor[]): number[] | null {\n const phi = rows.map((r) =>\n basis.map((b) => {\n const f = b(r.inputs);\n if (!Number.isFinite(f)) throw new RangeError(`model is not finite on exploratory row ${r.id}`);\n return f;\n }),\n );\n const y = rows.map((r) => r.observed);\n let coef = solveWeighted(phi, y, rows.map((r) => r.sigma));\n if (!hasInputSigma(rows)) return coef;\n for (let round = 0; coef !== null && round < EV_ROUNDS; round++) {\n const predict = combine(basis, coef);\n const next = solveWeighted(phi, y, rows.map((r) => effectiveSigma(r, predict)));\n if (next === null) return null;\n const settled = next.every((a, j) => Math.abs(a - coef![j]!) <= 1e-13 * Math.max(Math.abs(a), 1e-300));\n coef = next;\n if (settled) break;\n }\n return coef;\n}\n\ninterface Split {\n readonly exploratory: readonly StudyObservation[];\n readonly holdout: readonly StudyObservation[];\n readonly replication: readonly StudyObservation[];\n}\n\nfunction split(study: ProbeStudy): Split {\n return {\n exploratory: study.observations.filter((o) => o.role === 'exploratory'),\n holdout: study.observations.filter((o) => o.role === 'holdout'),\n replication: study.observations.filter((o) => o.role === 'replication'),\n };\n}\n\ninterface FittedModel {\n readonly test: ModelTest;\n readonly predict: Predictor | null;\n /** Fitted coefficients of the basis terms, SI; null when unfit. */\n readonly coef: readonly number[] | null;\n}\n\n/** A model as a sum of basis terms; `fit: false` means one fixed term with coefficient 1. */\ninterface ModelSpec {\n readonly id: string;\n readonly kind: ModelKind;\n readonly label: string;\n readonly basis: readonly Predictor[];\n readonly fit: boolean;\n}\n\n/**\n * Fit a model's coefficients on the exploratory rows, then (only if asked)\n * score it on the withheld rows with them frozen.\n */\nfunction scoreModel(spec: ModelSpec, sets: Split, alpha: number, withheld: boolean): FittedModel {\n const { id, kind, label } = spec;\n const k = spec.fit ? spec.basis.length : 0;\n const failed = (error: string): FittedModel => ({\n test: { id, kind, label, fittedParameters: k, prefactor: null, exploratory: null, holdout: null, replication: null, error },\n predict: null,\n coef: null,\n });\n try {\n const coef = spec.fit ? fitLinear(sets.exploratory, spec.basis) : [1];\n if (coef === null) {\n return failed(k === 1\n ? 'model is zero on every exploratory row; no scale can be fit'\n : 'the model\\'s terms are degenerate on the exploratory rows; they cannot be fit');\n }\n const predict = combine(spec.basis, coef);\n const on = (rows: readonly StudyObservation[]) => (withheld && rows.length > 0 ? testRows(rows, predict, 0, alpha) : null);\n return {\n test: {\n id,\n kind,\n label,\n fittedParameters: k,\n prefactor: coef[0]!,\n exploratory: sets.exploratory.length > 0 ? testRows(sets.exploratory, predict, k, alpha) : null,\n holdout: on(sets.holdout),\n replication: on(sets.replication),\n },\n predict,\n coef,\n };\n } catch (e) {\n return failed((e as Error).message);\n }\n}\n\n/** One step of admitting a correction term. @internal */\nexport interface CorrectionStep {\n readonly input: string;\n readonly power: number;\n /** Extra-sum-of-squares F = (χ²_{k−1} − χ²_k) / (χ²_k / ν_k); null when not testable. */\n readonly F: number | null;\n readonly dof: number;\n readonly p: number | null;\n readonly admitted: boolean;\n readonly reason: string;\n}\n\nconst SUBSCRIPT = '₀₁₂₃₄₅₆₇₈₉';\nconst sub = (n: number) => [...String(n)].map((d) => SUBSCRIPT[Number(d)]).join('');\n\n/** One admitted term u^p of a correction family. */\ninterface CorrectionTerm {\n readonly input: string;\n readonly power: number;\n}\n\nfunction correctionBasis(shape: Predictor, terms: readonly CorrectionTerm[]): Predictor[] {\n return [shape, ...terms.map((t) => (x: Readonly<Record<string, number>>) => shape(x) * x[t.input]! ** t.power)];\n}\n\n/**\n * Admit the declared terms one at a time, family by family in the declared\n * order and each family's powers in its declared order, while each lowers the\n * exploratory χ² significantly given the terms already admitted: F on\n * (1, ν_k) with p < α. The first term a family fails ends that family; the\n * next family is then tried. The F ratio divides by the residual χ²/ν, so an\n * understated σ does not inflate it.\n */\nfunction admitCorrection(\n shape: Predictor,\n families: readonly StudyCorrection[],\n rows: readonly StudyObservation[],\n alpha: number,\n): { terms: CorrectionTerm[]; steps: CorrectionStep[] } {\n const chi2With = (terms: readonly CorrectionTerm[]): number | null => {\n const basis = correctionBasis(shape, terms);\n const coef = fitLinear(rows, basis);\n return coef === null ? null : testRows(rows, combine(basis, coef), terms.length + 1, alpha).chi2;\n };\n const steps: CorrectionStep[] = [];\n const admitted: CorrectionTerm[] = [];\n let prev = chi2With([]);\n families: for (const family of families) {\n for (const power of family.powers) {\n if (prev === null) break families;\n const term = { input: family.input, power };\n const trial = [...admitted, term];\n const dof = rows.length - (trial.length + 1);\n if (dof < 1) {\n steps.push({ ...term, F: null, dof, p: null, admitted: false, reason: 'ν < 1: too few exploratory rows to test another term' });\n break families;\n }\n const cur = chi2With(trial);\n if (cur === null) {\n steps.push({ ...term, F: null, dof, p: null, admitted: false, reason: 'degenerate with the terms before it on the exploratory rows' });\n break;\n }\n const F = cur > 0 ? Math.max(0, prev - cur) / (cur / dof) : Infinity;\n const p = fSurvival(F, 1, dof);\n const ok = p < alpha;\n steps.push({\n ...term,\n F,\n dof,\n p,\n admitted: ok,\n reason: ok ? `admitted: F = ${F.toPrecision(3)} on (1, ${dof}), p = ${fmtP(p)} < α` : `not admitted: F = ${F.toPrecision(3)} on (1, ${dof}), p = ${fmtP(p)} ≥ α`,\n });\n if (!ok) break;\n admitted.push(term);\n prev = cur;\n }\n }\n return { terms: admitted, steps };\n}\n\n/** Infix rendering of a scalar ExprNode for reports. */\nfunction exprToInfix(e: ExprNode): string {\n if (e.kind === 'symbol') return e.name;\n if (e.kind === 'op') {\n const parts = e.args.map((a) => (a.kind === 'op' && a.op !== '^' ? `(${exprToInfix(a)})` : exprToInfix(a)));\n return e.op === '^' ? `${parts[0]}^${parts[1]}` : parts.join(` ${e.op === '*' ? '·' : e.op} `);\n }\n return JSON.stringify(e);\n}\n\n// --- the study -------------------------------------------------------------\n\n/** The main holdout verdict assigned after candidate selection. @internal */\nexport type StudyVerdict = 'no-credible-candidate' | 'refuted-on-holdout' | 'survives-holdout' | 'untested-on-holdout';\n/** The separate replication classification assigned after fitting and holdout handling. @internal */\nexport type ReplicationOutcome =\n | 'survives-replication'\n | 'refuted-on-replication'\n | 'no-replication-data'\n | 'not-tested'\n | 'too-close';\n\n/** A searched candidate's chi-squared results with its credibility judgement and any admitted correction. @internal */\nexport interface CandidateTest extends ModelTest {\n readonly credible: boolean;\n readonly credibility: string;\n /** Set on a candidate from the declared correction families: m(x)·(1 + Σ c_k·u_k^p_k). */\n readonly correction?: {\n readonly base: string;\n readonly terms: readonly { readonly input: string; readonly power: number; readonly coefficient: number }[];\n };\n}\n\n/** How the declared correction families were searched. @internal */\nexport interface StudyCorrectionReport {\n readonly families: readonly StudyCorrection[];\n readonly criterion: string;\n readonly perCandidate: readonly { readonly base: string; readonly steps: readonly CorrectionStep[]; readonly error?: string }[];\n}\n\n/** A proposed next measurement point or the reason no design suggestion was made. @internal */\nexport interface StudyDesignSuggestion {\n readonly abstained: boolean;\n readonly reason?: string;\n readonly against?: string;\n /** In the declared units of each input. */\n readonly point?: Readonly<Record<string, number>>;\n readonly discrimination?: number;\n readonly sigma?: number;\n readonly maxExploratoryDiscrimination?: number;\n readonly bounds?: 'declared' | 'exploratory-range';\n}\n\n/** The full report of a probe study run, including selection, holdout, replication and caveats. @internal */\nexport interface ProbeStudyResult {\n readonly studyId: string;\n readonly source: string;\n readonly provenance: StudyProvenance;\n readonly alpha: number;\n readonly target: { readonly name: string; readonly unit: string };\n readonly governing: readonly { readonly name: string; readonly unit: string }[];\n readonly counts: { readonly exploratory: number; readonly holdout: number; readonly replication: number };\n /** Set when the replication rows came from a separate file. */\n readonly replicationFile?: { readonly source: string; readonly provenance: StudyProvenance };\n /** `effective-variance` when any row has an input σ; the inputs that do. */\n readonly uncertainty: { readonly method: 'output-only' | 'effective-variance'; readonly inputs: readonly string[] };\n readonly correction: StudyCorrectionReport | null;\n readonly search: {\n readonly stopReason: SearchStopReason;\n readonly generated: number;\n readonly fitted: number;\n readonly rejected: number;\n readonly notes: readonly string[];\n };\n readonly nullModel: ModelTest;\n readonly candidates: readonly CandidateTest[];\n readonly selected: string | null;\n readonly verdict: StudyVerdict;\n readonly verdictReasons: readonly string[];\n readonly replication: ReplicationOutcome;\n /** Whether the replication rows are closer to the study rows than independent data can be. */\n readonly replicationIndependence: ReplicationIndependence;\n readonly baselines: readonly ModelTest[];\n readonly design: StudyDesignSuggestion;\n readonly caveats: readonly string[];\n readonly schemaVersion: string;\n}\n\n/** Runtime overrides controlling search budget and the study's test level. @internal */\nexport interface ProbeStudyOptions {\n readonly budget?: SearchBudget;\n /** Overrides the file's `criterion.alpha`. */\n readonly alpha?: number;\n}\n\nfunction fmtP(p: number | null): string {\n if (p === null) return 'n/a';\n return p === 0 ? '0 (underflow)' : p < 1e-3 ? p.toExponential(1) : p.toPrecision(2);\n}\n\nfunction credibility(\n t: ModelTest,\n nullTest: ModelTest,\n alpha: number,\n): { credible: boolean; credibility: string } {\n if (t.error) return { credible: false, credibility: t.error };\n const ex = t.exploratory;\n if (!ex || ex.pass === null) {\n return { credible: false, credibility: 'too few exploratory rows to test a fitted model (ν < 1)' };\n }\n if (!ex.pass) {\n return { credible: false, credibility: `fails on the exploratory rows (p = ${fmtP(ex.p)} < α = ${alpha})` };\n }\n if (nullTest.exploratory?.pass !== false) {\n return {\n credible: false,\n credibility: 'fits, but so does a constant: the exploratory data show no structure for it to explain',\n };\n }\n return { credible: true, credibility: `passes on the exploratory rows (p = ${fmtP(ex.p)} ≥ α = ${alpha}) and the constant model is rejected there` };\n}\n\nfunction designAgainst(\n study: ProbeStudy,\n sets: Split,\n candidate: FittedModel,\n baselines: readonly FittedModel[],\n): StudyDesignSuggestion {\n if (!candidate.predict) return { abstained: true, reason: 'no credible candidate to discriminate' };\n const live = baselines\n .filter((b) => b.predict && b.test.exploratory?.pass === true)\n .sort((a, b) => (b.test.exploratory!.p ?? 0) - (a.test.exploratory!.p ?? 0));\n const best = live[0];\n if (!best) {\n return {\n abstained: true,\n reason: baselines.length === 0\n ? 'no baseline declared; nothing to discriminate the candidate against'\n : 'no declared baseline passes on the exploratory rows; none is a live competitor',\n };\n }\n const sigmas = sets.exploratory.map((r) => r.sigma).sort((a, b) => a - b);\n const sigma = sigmas[Math.floor(sigmas.length / 2)]!;\n const grids = study.governing.map((g) => {\n const spec = study.design?.[g.name] ?? (() => {\n const vs = sets.exploratory.map((r) => r.inputs[g.name]!);\n return { min: Math.min(...vs), max: Math.max(...vs), steps: 8 };\n })();\n const steps = spec.min === spec.max ? 1 : Math.max(2, spec.steps);\n return Array.from({ length: steps }, (_, i) => (steps === 1 ? spec.min : spec.min + (i / (steps - 1)) * (spec.max - spec.min)));\n });\n let bestPoint: Record<string, number> | null = null;\n let bestDisc = -1;\n const idx = new Array<number>(grids.length).fill(0);\n const visit = (d: number): void => {\n if (d === grids.length) {\n const point: Record<string, number> = {};\n study.governing.forEach((g, i) => (point[g.name] = grids[i]![idx[i]!]!));\n let disc: number;\n try {\n disc = Math.abs(candidate.predict!(point) - best.predict!(point)) / sigma;\n } catch {\n return;\n }\n if (Number.isFinite(disc) && disc > bestDisc) {\n bestDisc = disc;\n bestPoint = point;\n }\n return;\n }\n for (let i = 0; i < grids[d]!.length; i++) {\n idx[d] = i;\n visit(d + 1);\n }\n };\n visit(0);\n if (bestPoint === null) return { abstained: true, reason: 'neither model is finite anywhere in the design bounds' };\n const chosen: Record<string, number> = bestPoint;\n const maxEx = Math.max(\n ...sets.exploratory.map((r) => Math.abs(candidate.predict!(r.inputs) - best.predict!(r.inputs)) / r.sigma),\n );\n return {\n abstained: false,\n against: best.test.label,\n point: Object.fromEntries(study.governing.map((g) => [g.name, chosen[g.name]! / g.scale])),\n discrimination: bestDisc,\n sigma: sigma / study.target.scale,\n maxExploratoryDiscrimination: maxEx,\n bounds: study.design ? 'declared' : 'exploratory-range',\n };\n}\n\n/**\n * Run a study: search and fit on exploratory rows only, then test on withheld\n * rows. Never mutates the study.\n *\n * @internal\n */\nexport async function runProbeStudy(study: ProbeStudy, opts: ProbeStudyOptions = {}): Promise<ProbeStudyResult> {\n const alpha = opts.alpha ?? study.alpha;\n const sets = split(study);\n const inputsWithSigma = study.governing\n .map((g) => g.name)\n .filter((n) => study.observations.some((o) => n in o.inputSigma));\n // The id hashes the data, not the file paths: the same study as CSV or JSON has one id.\n const { source: _path, replication: repFile, ...content } = study;\n const studyId = `ps-${hashCanonical({ ...content, replicationProvenance: repFile?.provenance ?? null, alpha }).slice(0, 12)}`;\n\n // The search sees the exploratory rows and nothing else.\n const exploratoryRows = sets.exploratory.map((r) => ({ ...r.inputs, [study.target.name]: r.observed }));\n const gap = makeResidualGap(study.gap.id, study.gap.summary, study.gap.kind as Parameters<typeof makeResidualGap>[2]);\n const problem = problemFromResidualGap(\n gap,\n { name: study.target.name, dim: study.target.dim },\n study.governing.map((g) => ({ name: g.name, dim: g.dim })),\n datasetFromRows(exploratoryRows, study.target.name, 'exploratory-fit', `${studyId}#exploratory`),\n undefined,\n );\n const search = await runProbeSearch(problem, {\n budget: opts.budget,\n runId: `dr-${studyId.slice(3)}`,\n now: '1970-01-01T00:00:00.000Z',\n });\n\n const nullModel = scoreModel({ id: 'null', kind: 'null', label: 'constant', basis: [() => 1], fit: true }, sets, alpha, false).test;\n\n const fitted = search.candidates.filter((c) => c.id in search.fits);\n const corr = study.correction;\n const perCandidate: StudyCorrectionReport['perCandidate'][number][] = [];\n const specs = fitted.flatMap((c) => {\n const expr = bodyExpression(c.body);\n const shape: Predictor = (x) => evalExpr(expr, x);\n const label = `ĉ · ${exprToInfix(expr)}`;\n const base = { spec: { id: c.id, kind: 'candidate' as const, label, basis: [shape], fit: true }, complexity: c.complexity.astNodes };\n if (!corr) return [base];\n let admission: ReturnType<typeof admitCorrection>;\n try {\n admission = admitCorrection(shape, corr, sets.exploratory, alpha);\n } catch (e) {\n perCandidate.push({ base: c.id, steps: [], error: (e as Error).message });\n return [base];\n }\n perCandidate.push({ base: c.id, steps: admission.steps });\n const admitted = admission.terms;\n if (admitted.length === 0) return [base];\n const terms = admitted.map((t, j) => `c${sub(j + 1)}·${t.input}^${t.power}`).join(' + ');\n return [\n base,\n {\n spec: {\n id: `${c.id}×(1+${admitted.map((t) => `${t.input}^${t.power}`).join('+')})`,\n kind: 'candidate' as const,\n label: `${label} · (1 + ${terms})`,\n basis: correctionBasis(shape, admitted),\n fit: true,\n },\n complexity: c.complexity.astNodes + 4 * admitted.length,\n correction: { base: c.id, terms: admitted },\n },\n ];\n });\n const correctionOf = (\n s: (typeof specs)[number],\n coef: readonly number[] | null,\n ): Pick<CandidateTest, 'correction'> =>\n 'correction' in s && s.correction && coef\n ? {\n correction: {\n base: s.correction.base,\n terms: s.correction.terms.map((t, j) => ({ input: t.input, power: t.power, coefficient: coef[j + 1]! / coef[0]! })),\n },\n }\n : {};\n const scored = specs.map((s) => {\n const m = scoreModel(s.spec, sets, alpha, false);\n return { model: m, spec: s.spec, complexity: s.complexity, extra: correctionOf(s, m.coef), ...credibility(m.test, nullModel, alpha) };\n });\n const credibleOnes = scored\n .filter((s) => s.credible)\n .sort((a, b) => (b.model.test.exploratory!.p! - a.model.test.exploratory!.p!) || a.complexity - b.complexity);\n const chosen = credibleOnes[0];\n\n const baselines = study.baselines.map((b) => {\n const f = parseFormula(b.formula);\n return scoreModel(\n { id: `baseline:${b.name}`, kind: 'baseline', label: b.name, basis: [(x) => f.evaluate({ ...x })], fit: b.fitPrefactor },\n sets,\n alpha,\n true,\n );\n });\n\n // Design is computed from exploratory fits only, before any withheld row is read.\n const design = chosen\n ? designAgainst(study, sets, chosen.model, baselines)\n : { abstained: true, reason: 'no credible candidate to discriminate' };\n\n const verdictReasons: string[] = [];\n let verdict: StudyVerdict;\n let replication: ReplicationOutcome = sets.replication.length === 0 ? 'no-replication-data' : 'not-tested';\n let selected: CandidateTest | null = null;\n const candidates: CandidateTest[] = scored.map((s) => ({ ...s.model.test, credible: s.credible, credibility: s.credibility, ...s.extra }));\n\n if (!chosen) {\n verdict = 'no-credible-candidate';\n if (fitted.length === 0) {\n verdictReasons.push(`the search produced no candidate that could be fit (search stop: ${search.stopReason})`);\n } else {\n for (const s of scored) verdictReasons.push(`${s.model.test.id}: ${s.credibility}`);\n }\n verdictReasons.push('the withheld rows were not consulted for any candidate');\n } else {\n const withheld = scoreModel(chosen.spec, sets, alpha, true).test;\n selected = { ...withheld, credible: true, credibility: chosen.credibility, ...chosen.extra };\n const i = candidates.findIndex((c) => c.id === selected!.id);\n candidates[i] = selected;\n const h = selected.holdout;\n if (!h) {\n verdict = 'untested-on-holdout';\n verdictReasons.push('the file has no holdout rows; the candidate is credible on exploratory data only');\n } else if (h.pass) {\n verdict = 'survives-holdout';\n const frozen = selected.fittedParameters > 1 ? 'coefficients' : 'prefactor';\n verdictReasons.push(`holdout χ² = ${h.chi2.toPrecision(3)} on ν = ${h.dof} (p = ${fmtP(h.p)} ≥ α = ${alpha}) with the exploratory ${frozen} frozen`);\n } else {\n verdict = 'refuted-on-holdout';\n verdictReasons.push(\n `holdout χ² = ${h.chi2.toPrecision(3)} on ν = ${h.dof} (p = ${fmtP(h.p)} < α = ${alpha}); ` +\n `worst row ${h.worstRow} at ${h.maxAbsZ.toPrecision(3)}σ`,\n );\n }\n const rep = selected.replication;\n if (rep) replication = rep.pass ? 'survives-replication' : 'refuted-on-replication';\n }\n // Rows closer to the study's than independent data can be are not a replication, whatever they agree with.\n const independence = replicationIndependence(study.observations, alpha);\n if (independence.tooClose) replication = 'too-close';\n const corrInputs = corr?.map((c) => `'${c.input}'`).join(', ') ?? '';\n const sharedCalibration =\n repFile?.provenance.calibration !== undefined &&\n study.provenance.calibration !== undefined &&\n provenanceKey(repFile.provenance.calibration) === provenanceKey(study.provenance.calibration);\n\n const caveats = [\n 'A fit is not a mechanism: a candidate that survives a holdout was not refuted by these rows; ' +\n 'that does not make it the causal explanation.',\n 'Every test assumes independent Gaussian errors with the declared σ; a mis-stated σ changes every verdict.',\n ...(study.baselines.length > 0\n ? ['The baselines are the file author\\'s; UPT cannot verify they were chosen before the holdout was seen.']\n : []),\n ...(study.provenance.synthetic\n ? ['SYNTHETIC DATA: these rows were generated, not measured. A result on them is a control of the method, not evidence about nature.']\n : ['The file declares these rows measured; UPT has not verified that provenance.']),\n ...(study.provenance.synthetic || repFile?.provenance.synthetic\n ? ['A synthetic control whose generating law was chosen knowing the answer shows only that the method recovers ' +\n 'that law; it is not a blind test of finding an unknown one. UPT ships no blind control.']\n : []),\n ...(repFile\n ? [`The replication rows come from ${repFile.source}, whose provenance is its author's declaration. UPT checked only ` +\n 'that its source and acquisition differ from the study\\'s (ignoring case, spacing and punctuation), that no row ' +\n 'repeats a study row\\'s data exactly, and that rows at a study row\\'s inputs are not closer to it than their σ ' +\n 'allows, as an identical or an affine (rescaled or shifted) copy, each tested at α/2. A copy at altered inputs, ' +\n 'or of rows the study does not contain, is not caught.']\n : sets.replication.length > 0\n ? ['The replication rows are in the study file and share its provenance block (calibration included); only their ' +\n 'row source differs from the fit rows\\'.']\n : []),\n ...(sharedCalibration\n ? [`The replication file declares the study's own calibration ('${study.provenance.calibration}'): whatever that ` +\n 'calibration gets wrong, both share, so the replication does not test it.']\n : []),\n ...(inputsWithSigma.length > 0\n ? ['Input σ is propagated to first order (effective variance): exact for a model linear in the input, ' +\n 'approximate when the model curves appreciably over ±σ_x.']\n : []),\n ...(corr && corr.length === 1\n ? [`The correction family in ${corrInputs} was declared by the file; only that family was searched, and UPT ` +\n 'cannot verify it was declared before the data were seen.']\n : corr\n ? [`The correction families in ${corrInputs} were declared by the file; only those families were searched, and UPT ` +\n 'cannot verify they were declared before the data were seen. The families are additive: a cross term (u·v) ' +\n 'is not in them, and the order they were declared in decides which terms are tried first.']\n : []),\n ];\n\n return {\n studyId,\n source: study.source,\n provenance: study.provenance,\n alpha,\n target: { name: study.target.name, unit: study.target.unit },\n governing: study.governing.map((g) => ({ name: g.name, unit: g.unit })),\n counts: { exploratory: sets.exploratory.length, holdout: sets.holdout.length, replication: sets.replication.length },\n ...(repFile ? { replicationFile: repFile } : {}),\n uncertainty: { method: inputsWithSigma.length > 0 ? 'effective-variance' : 'output-only', inputs: inputsWithSigma },\n correction: corr\n ? {\n families: corr,\n criterion:\n `m(x)·(1 + ${corr.map((c) => `Σ c_k·${c.input}^p_k`).join(' + ')}) for each searched monomial m, fit on the ` +\n 'exploratory rows only; terms admitted in the declared order' +\n (corr.length > 1 ? ', family by family (the first term a family fails ends that family),' : '') +\n ` while each passes an extra-sum-of-squares F test at p < α = ${alpha}`,\n perCandidate,\n }\n : null,\n search: {\n stopReason: search.stopReason,\n generated: search.candidates.length,\n fitted: fitted.length,\n rejected: search.rejections.length,\n // The search is given no withheld rows by design; the study tests them itself.\n notes: [...new Set(search.wording)].filter((w) => w !== NO_HOLDOUT_WORDING),\n },\n nullModel,\n candidates,\n selected: selected?.id ?? null,\n verdict,\n verdictReasons,\n replication,\n replicationIndependence: independence,\n baselines: baselines.map((b) => b.test),\n design,\n caveats,\n schemaVersion: SCHEMA_VERSION,\n };\n}\n\n// --- report ----------------------------------------------------------------\n\nfunction setLine(name: string, t: SetTest | null): string {\n if (!t) return `${name}: no rows`;\n const verdict = t.pass === null ? 'undecidable (ν < 1)' : t.pass ? 'pass' : 'FAIL';\n const nu = t.dof >= 1 ? `χ²/ν = ${(t.chi2 / t.dof).toPrecision(3)} (ν = ${t.dof})` : `χ² = ${t.chi2.toPrecision(3)}`;\n return `${name}: ${nu}, p = ${fmtP(t.p)}, max |z| = ${t.maxAbsZ.toPrecision(3)}${t.worstRow ? ` at ${t.worstRow}` : ''} — ${verdict}`;\n}\n\nfunction fmtPoint(point: Readonly<Record<string, number>>, governing: ProbeStudyResult['governing']): string {\n return governing.map((g) => `${g.name}=${Number(point[g.name]!.toPrecision(4))}${g.unit ? ` ${g.unit}` : ''}`).join(', ');\n}\n\n/** Scientist-facing study report. @internal */\nexport function formatProbeStudy(r: ProbeStudyResult): string {\n const L: string[] = [];\n L.push(`upt probe study — fit on exploratory rows, test on withheld rows [study ${r.studyId}]`);\n L.push('⚠ experimental Product B. Not a discovery claim. `upt discover` is the identification funnel.');\n if (r.provenance.synthetic) {\n L.push(`⚠ SYNTHETIC DATA — generated, not measured. source: ${r.provenance.source}`);\n } else {\n L.push(` data declared measured (not verified by UPT). source: ${r.provenance.source}`);\n }\n if (r.provenance.acquisition) L.push(` acquisition: ${r.provenance.acquisition}`);\n if (r.provenance.calibration) L.push(` calibration: ${r.provenance.calibration}`);\n L.push(\n ` rows: ${r.counts.exploratory} exploratory (searched and fit) · ${r.counts.holdout} holdout (withheld) · ` +\n `${r.counts.replication} replication (withheld, independent source)`,\n );\n const rf = r.replicationFile;\n if (rf) {\n L.push(\n rf.provenance.synthetic\n ? ` replication file: ${rf.source} — ⚠ SYNTHETIC DATA, generated, not measured. source: ${rf.provenance.source}`\n : ` replication file: ${rf.source} — declared measured (not verified by UPT). source: ${rf.provenance.source}`,\n );\n if (rf.provenance.acquisition) L.push(` acquisition: ${rf.provenance.acquisition}`);\n }\n L.push(\n ` criterion: χ² with the declared σ at α = ${r.alpha}. A candidate is credible only if it passes on the ` +\n 'exploratory rows and a constant model is rejected there.',\n );\n L.push(\n r.uncertainty.method === 'effective-variance'\n ? ` uncertainty: σ_eff² = σ_y² + Σ_i (∂f/∂x_i · σ_x_i)² over {${r.uncertainty.inputs.join(', ')}} (effective variance; ` +\n 'each model\\'s own slopes at the recorded inputs, fits reweighted to a fixed point; first order in σ_x)'\n : ' uncertainty: σ on the target only; the inputs are taken as exact',\n );\n L.push('');\n L.push(\n ` search (exploratory rows only): ${r.search.generated} candidate(s) generated, ${r.search.fitted} fit, ` +\n `${r.search.rejected} rejected; stop: ${r.search.stopReason}`,\n );\n for (const n of r.search.notes.slice(0, 6)) L.push(` ${n}`);\n if (r.correction) {\n L.push(` declared correction ${r.correction.families.length > 1 ? 'families' : 'family'}: ${r.correction.criterion}`);\n for (const pc of r.correction.perCandidate) {\n const steps = pc.error ?? (pc.steps.map((s) => `${s.input}^${s.power} ${s.reason}`).join('; ') || 'no term tested');\n L.push(` on ${pc.base}: ${steps}`);\n }\n }\n L.push(` null model (constant ${r.target.name}) — ${setLine('exploratory', r.nullModel.exploratory)}`);\n L.push('');\n for (const c of r.candidates) {\n const pre = c.prefactor === null ? '' : `, ĉ = ${c.prefactor.toPrecision(5)} (SI)`;\n L.push(` candidate ${c.id}: ${c.label}${pre}`);\n if (c.correction) {\n L.push(` ${c.correction.terms.map((t, j) => `c${sub(j + 1)} = ${t.coefficient.toPrecision(4)}`).join(', ')} (fit on exploratory rows)`);\n }\n L.push(` ${setLine('exploratory', c.exploratory)}`);\n L.push(` ${c.credible ? 'credible' : 'not credible'}: ${c.credibility}`);\n if (c.id === r.selected) {\n L.push(` ${setLine('holdout', c.holdout)}`);\n L.push(` ${setLine('replication', c.replication)}`);\n }\n }\n if (r.candidates.length === 0) L.push(' no candidate could be fit.');\n if (r.baselines.length > 0) {\n L.push('');\n L.push(' baselines (declared by the file; same rows, same criterion):');\n for (const b of r.baselines) {\n const how = b.fittedParameters === 0 ? 'fixed, no fitted parameter' : `prefactor fit on exploratory rows = ${b.prefactor?.toPrecision(5)}`;\n L.push(` ${b.label} [${how}]`);\n if (b.error) {\n L.push(` not evaluable: ${b.error}`);\n continue;\n }\n for (const [name, t] of [['exploratory', b.exploratory], ['holdout', b.holdout], ['replication', b.replication]] as const) {\n L.push(` ${setLine(name, t)}`);\n }\n }\n }\n L.push('');\n const d = r.design;\n L.push(' discriminating measurement (a suggestion, not evidence):');\n if (d.abstained) {\n L.push(` abstained: ${d.reason}`);\n } else {\n L.push(\n ` the candidate and '${d.against}' differ most at ${fmtPoint(d.point!, r.governing)}: ` +\n `${d.discrimination!.toPrecision(3)}σ (σ = ${Number(d.sigma!.toPrecision(3))} ${r.target.unit}, the median exploratory ` +\n `${r.uncertainty.method === 'effective-variance' ? 'target σ, input σ not included' : 'σ'}; ` +\n `${d.bounds === 'declared' ? 'declared design bounds' : 'bounds = exploratory range; declare \"design\" to look beyond it'})`,\n );\n L.push(\n ` on the exploratory rows they differ by at most ${d.maxExploratoryDiscrimination!.toPrecision(2)}σ` +\n (d.maxExploratoryDiscrimination! < 1 ? ': those rows cannot tell them apart' : ''),\n );\n }\n L.push('');\n L.push(` verdict: ${r.verdict}`);\n for (const why of r.verdictReasons) L.push(` ${why}`);\n L.push(` replication: ${r.replication}`);\n if (r.counts.replication > 0) L.push(` closeness: ${r.replicationIndependence.reason}`);\n L.push('');\n for (const c of r.caveats) L.push(` ⚠ ${c}`);\n return L.join('\\n');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"study.js","sourceRoot":"","sources":["../../../src/composition/probe/study.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Falsification-oriented study over calibrated observations (audit §14 I19).\n *\n * A study file carries observations with units and σ, each with a role:\n * `exploratory` rows are the only rows the search and every fit see;\n * `holdout` rows are a withheld test (typically a change of regime);\n * `replication` rows are an independent acquisition, tested but never fit.\n * The file also declares its provenance (`synthetic` is required, never\n * inferred) and optional competing baseline formulas.\n *\n * Every test is a χ² test with the declared σ at a stated α. A searched\n * candidate is credible only if it passes on the exploratory rows AND a\n * constant (null) model is rejected there; otherwise the result is\n * `no-credible-candidate`. Only the selected credible candidate is then\n * scored on the holdout: `survives-holdout` or `refuted-on-holdout`.\n * Replication is reported separately and never folded into the verdict.\n *\n * A study is JSON or CSV (the CSV compiles to the same object, so both are\n * refused for the same reasons). Inputs may carry σ, propagated by the\n * effective-variance method. A file may declare correction families in one\n * or more dimensionless inputs; their terms are admitted only by an F test on\n * the exploratory rows. Replication rows may come from a separate file with\n * its own provenance; replication rows at a study row's inputs that agree\n * with it more closely than independent measurements would are reported as\n * `too-close`, not as a replication.\n *\n * @internal\n */\n\nimport { pairwiseDot, pairwiseSum } from '@danielsimonjr/mathts-core';\nimport { betainc, chiSquaredCDF, gammaincp, inv, propagateUncertainty } from '@danielsimonjr/mathts-functions';\nimport { numberFrom } from '../../core/mathts-read.js';\nimport { readJsonFile } from '../../core/data-file.js';\nimport { isPlainObject } from '../../core/json-schema.js';\nimport { readFileSync } from 'node:fs';\nimport { DIMENSIONLESS, type Dimension } from '../../dimensional/types.js';\nimport type { ExprNode } from '../../dimensional/ast-types.js';\nimport { equals, format } from '../../dimensional/algebra.js';\nimport { convertValue, parseUnit, UnitError } from '../../dimensional/units.js';\nimport { parseFormula } from '../../numerical/formula-mathts.js';\nimport { builtinFormulaDimensionChecker } from '../../numerical/formula-dimension.js';\nimport { evalExpr } from '../expr-eval.js';\nimport type { SearchBudget, SearchStopReason } from './types.js';\nimport { SCHEMA_VERSION } from './types.js';\nimport { datasetFromRows } from './dataset.js';\nimport { problemFromResidualGap } from './frontier.js';\nimport { isGapKind, makeResidualGap } from './problem.js';\nimport { NO_HOLDOUT_WORDING, runProbeSearch } from './pipeline.js';\nimport { bodyExpression } from './fingerprint.js';\nimport { canonicalJson, hashCanonical } from './serialize.js';\n\n/** The partition a study row belongs to for fitting, holdout testing or replication. @internal */\nexport type StudyRole = 'exploratory' | 'holdout' | 'replication';\n\n/** Where the observations came from. `synthetic` is declared, never inferred. @internal */\nexport interface StudyProvenance {\n readonly synthetic: boolean;\n readonly source: string;\n readonly acquisition?: string;\n readonly calibration?: string;\n}\n\n/** A named variable in a study, with its unit conversion and optional input uncertainty. @internal */\nexport interface StudyQuantity {\n readonly name: string;\n readonly unit: string;\n readonly dim: Dimension;\n /** Declared unit → SI coherent unit. */\n readonly scale: number;\n /** Default σ of this input on every row, SI; absent = the input is exact. */\n readonly sigma?: number;\n}\n\n/** One observation, converted to SI coherent units. @internal */\nexport interface StudyObservation {\n readonly id: string;\n readonly role: StudyRole;\n readonly source: string;\n readonly inputs: Readonly<Record<string, number>>;\n readonly observed: number;\n readonly sigma: number;\n /** σ of each input that has one on this row, SI. */\n readonly inputSigma: Readonly<Record<string, number>>;\n}\n\n/** A declared family y = m(x)·(1 + Σ c_k·u^p_k) in one dimensionless input u. @internal */\nexport interface StudyCorrection {\n readonly input: string;\n readonly powers: readonly number[];\n /**\n * A reference value the file declares for a power's coefficient (keyed by the power's text,\n * e.g. `{\"2\": 0.0625}` for the pendulum series θ²/16): the fitted coefficient's z against it\n * is reported, and decides nothing.\n */\n readonly reference?: Readonly<Record<string, number>>;\n}\n\n/** A declared comparison model formula and whether its scale is fit on exploratory rows. @internal */\nexport interface StudyBaseline {\n readonly name: string;\n readonly formula: string;\n readonly fitPrefactor: boolean;\n}\n\n/** A parsed, validated study. All numbers are SI coherent. @internal */\nexport interface ProbeStudy {\n readonly source: string;\n readonly gap: { readonly id: string; readonly kind: string; readonly summary: string };\n readonly provenance: StudyProvenance;\n readonly target: StudyQuantity;\n readonly governing: readonly StudyQuantity[];\n readonly observations: readonly StudyObservation[];\n readonly baselines: readonly StudyBaseline[];\n readonly alpha: number;\n readonly design?: Readonly<Record<string, { min: number; max: number; steps: number }>>;\n /** The declared families, in the declared order (one object in the file is a list of one). */\n readonly correction?: readonly StudyCorrection[];\n /** Set when the replication rows came from a separate file. */\n readonly replication?: { readonly source: string; readonly provenance: StudyProvenance };\n}\n\n/** The study file was refused: bad units, missing σ, leakage, undeclared keys. @internal */\nexport class StudyRefusal extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'StudyRefusal';\n }\n}\n\n/** The χ² test level a study file states none of. @internal */\nexport const DEFAULT_ALPHA = 0.001;\nconst TOP_KEYS = new Set([\n 'description', 'gap', 'provenance', 'target', 'governing', 'observations', 'baselines', 'criterion', 'design',\n 'correction',\n]);\nconst ROW_KEYS = new Set(['id', 'role', 'source', 'values', 'observed', 'sigma', 'inputSigma', 'note']);\n/** The keys a separate replication file may carry; the rest belong in the study file. */\nconst REPLICATION_KEYS = new Set(['description', 'provenance', 'target', 'governing', 'observations']);\n/** How many powers a study file's correction may list in all. @internal */\nexport const MAX_CORRECTION_TERMS = 6;\n\nfunction refuse(where: string, why: string): never {\n throw new StudyRefusal(`study refused (${where}): ${why}`);\n}\n\nfunction nonEmptyString(v: unknown): v is string {\n return typeof v === 'string' && v.trim().length > 0;\n}\n\nfunction quantity(raw: unknown, where: string): StudyQuantity {\n if (!isPlainObject(raw) || !nonEmptyString(raw.name) || typeof raw.unit !== 'string') {\n refuse(where, 'needs {\"name\", \"unit\"} (\"unit\": \"\" for a dimensionless quantity)');\n }\n let parsed;\n try {\n parsed = parseUnit(raw.unit);\n } catch (e) {\n refuse(where, (e as Error).message);\n }\n if (parsed.affine !== undefined) refuse(where, `declare an absolute unit (K), not '${raw.unit}'`);\n return { name: raw.name, unit: raw.unit, dim: parsed.dim, scale: parsed.scale };\n}\n\n/** A number is read in the declared unit; a string may carry its own unit. */\nfunction toSi(raw: unknown, q: StudyQuantity, where: string, reading: 'absolute' | 'difference'): number {\n if (typeof raw !== 'number' && typeof raw !== 'string') refuse(where, 'is not a number or a \"value unit\" string');\n let v: number;\n try {\n v = convertValue(String(raw), q.unit, reading).value;\n } catch (e) {\n if (e instanceof UnitError) refuse(where, e.message);\n throw e;\n }\n if (!Number.isFinite(v)) refuse(where, 'is not finite');\n return v * q.scale;\n}\n\nfunction positiveSigma(raw: unknown, q: StudyQuantity, where: string): number {\n const s = toSi(raw, q, where, 'difference');\n if (!(s > 0)) refuse(where, 'must be positive');\n return s;\n}\n\nfunction governingQuantity(raw: unknown, where: string): StudyQuantity {\n const q = quantity(raw, where);\n const sigma = (raw as Record<string, unknown>).sigma;\n return sigma === undefined ? q : { ...q, sigma: positiveSigma(sigma, q, `${where}.sigma`) };\n}\n\nfunction parseFamily(raw: unknown, governing: readonly StudyQuantity[], where: string): StudyCorrection {\n if (!isPlainObject(raw) || !nonEmptyString(raw.input) || !Array.isArray(raw.powers)) {\n refuse(where, 'needs {\"input\": <dimensionless governing input>, \"powers\": [p, ...]}');\n }\n for (const k of Object.keys(raw)) {\n if (k !== 'input' && k !== 'powers' && k !== 'reference') refuse(where, `undeclared key '${k}'`);\n }\n const q = governing.find((g) => g.name === raw.input);\n if (!q) refuse(`${where}.input`, `'${raw.input}' is not a declared governing input`);\n if (!equals(q.dim, DIMENSIONLESS)) {\n refuse(`${where}.input`, `'${q.name}' is ${format(q.dim)}; a correction family needs a dimensionless input`);\n }\n const powers = raw.powers;\n if (powers.length === 0 || powers.length > MAX_CORRECTION_TERMS) {\n refuse(`${where}.powers`, `must list 1 to ${MAX_CORRECTION_TERMS} powers`);\n }\n if (!powers.every((p): p is number => typeof p === 'number' && Number.isFinite(p) && p > 0)) {\n refuse(`${where}.powers`, 'must be positive finite numbers');\n }\n if (new Set(powers).size !== powers.length) refuse(`${where}.powers`, 'must be distinct');\n if (raw.reference === undefined) return { input: q.name, powers };\n if (!isPlainObject(raw.reference)) refuse(`${where}.reference`, 'must be {\"<power>\": number}, keyed by a declared power');\n const reference: Record<string, number> = {};\n for (const [k, v] of Object.entries(raw.reference)) {\n if (!powers.some((p) => String(p) === k)) refuse(`${where}.reference`, `'${k}' is not a declared power of this family`);\n if (typeof v !== 'number' || !Number.isFinite(v)) refuse(`${where}.reference`, `'${k}' must be a finite number`);\n reference[k] = v;\n }\n return { input: q.name, powers, reference };\n}\n\n/** One family `{input, powers}`, or a list of them, each in a different dimensionless input. */\nfunction parseCorrection(raw: unknown, governing: readonly StudyQuantity[]): StudyCorrection[] | undefined {\n if (raw === undefined) return undefined;\n if (!Array.isArray(raw)) return [parseFamily(raw, governing, 'correction')];\n if (raw.length === 0) refuse('correction', 'must list at least one family');\n const families = raw.map((f, i) => parseFamily(f, governing, `correction[${i}]`));\n const seen = new Set<string>();\n for (const [i, f] of families.entries()) {\n if (seen.has(f.input)) refuse(`correction[${i}].input`, `'${f.input}' already has a family; give each input one family`);\n seen.add(f.input);\n }\n const total = families.reduce((s, f) => s + f.powers.length, 0);\n if (total > MAX_CORRECTION_TERMS) {\n refuse('correction', `lists ${total} powers across its families; at most ${MAX_CORRECTION_TERMS}`);\n }\n return families;\n}\n\n/** Provenance text compared without case, spacing or punctuation: \"Lab A\" and \"lab-a\" are one source. */\nconst provenanceKey = (s: string): string => s.toLowerCase().replace(/[^\\p{L}\\p{N}]+/gu, ' ').trim();\n\nfunction parseProvenance(raw: unknown): StudyProvenance {\n if (!isPlainObject(raw)) refuse('provenance', 'is required: {\"synthetic\": true|false, \"source\": \"...\"}');\n if (typeof raw.synthetic !== 'boolean') {\n refuse('provenance.synthetic', 'must be declared true or false; it is never inferred');\n }\n if (!nonEmptyString(raw.source)) refuse('provenance.source', 'must name where the observations came from');\n return {\n synthetic: raw.synthetic,\n source: raw.source,\n ...(nonEmptyString(raw.acquisition) ? { acquisition: raw.acquisition } : {}),\n ...(nonEmptyString(raw.calibration) ? { calibration: raw.calibration } : {}),\n };\n}\n\nfunction parseBaselines(raw: unknown, target: StudyQuantity, governing: readonly StudyQuantity[]): StudyBaseline[] {\n if (raw === undefined) return [];\n if (!Array.isArray(raw)) refuse('baselines', 'must be an array');\n const dims = Object.fromEntries(governing.map((g) => [g.name, g.dim]));\n const checker = builtinFormulaDimensionChecker();\n return raw.map((b, i) => {\n const where = `baselines[${i}]`;\n if (!isPlainObject(b) || !nonEmptyString(b.name) || !nonEmptyString(b.formula)) {\n refuse(where, 'needs {\"name\", \"formula\"}');\n }\n let vars: readonly string[];\n try {\n vars = parseFormula(b.formula).variables;\n } catch (e) {\n refuse(where, (e as Error).message);\n }\n const unknown = vars.filter((v) => !(v in dims));\n if (unknown.length > 0) refuse(where, `formula reads undeclared input(s) ${unknown.join(', ')}`);\n const check = checker.check(b.formula, dims);\n if (!check.ok || !check.dim) refuse(where, check.error ?? 'not dimensionally homogeneous');\n if (!equals(check.dim, target.dim)) {\n refuse(where, `formula is ${format(check.dim)}, but the target '${target.name}' is ${format(target.dim)}`);\n }\n if (b.fitPrefactor !== undefined && typeof b.fitPrefactor !== 'boolean') {\n refuse(`${where}.fitPrefactor`, 'must be true or false');\n }\n return { name: b.name, formula: b.formula, fitPrefactor: b.fitPrefactor === true };\n });\n}\n\nfunction parseDesign(\n raw: unknown,\n governing: readonly StudyQuantity[],\n): ProbeStudy['design'] {\n if (raw === undefined) return undefined;\n if (!isPlainObject(raw) || !isPlainObject(raw.variables)) refuse('design', 'needs {\"variables\": {name: {\"min\", \"max\"}}}');\n const byName = new Map(governing.map((g) => [g.name, g]));\n const out: Record<string, { min: number; max: number; steps: number }> = {};\n for (const [name, spec] of Object.entries(raw.variables)) {\n const q = byName.get(name);\n const where = `design.variables.${name}`;\n if (!q) refuse(where, 'is not a declared governing input');\n if (!isPlainObject(spec)) refuse(where, 'needs {\"min\", \"max\"}');\n const min = toSi(spec.min, q, `${where}.min`, 'absolute');\n const max = toSi(spec.max, q, `${where}.max`, 'absolute');\n if (min > max) refuse(where, 'has min > max');\n const steps = spec.steps === undefined ? 8 : Number(spec.steps);\n if (!Number.isInteger(steps) || steps < 1) refuse(`${where}.steps`, 'must be a positive integer');\n out[name] = { min, max, steps };\n }\n return out;\n}\n\nfunction parseObservations(\n raw: unknown,\n provenance: StudyProvenance,\n target: StudyQuantity,\n governing: readonly StudyQuantity[],\n defaultSigma: unknown,\n): StudyObservation[] {\n if (!Array.isArray(raw) || raw.length === 0) refuse('observations', 'must be a non-empty array');\n const ids = new Set<string>();\n const rows = raw.map((row, i): StudyObservation => {\n const id = isPlainObject(row) && nonEmptyString(row.id) ? row.id : `row-${i + 1}`;\n const where = `observation ${id}`;\n if (!isPlainObject(row)) refuse(where, 'is not an object');\n for (const k of Object.keys(row)) {\n if (!ROW_KEYS.has(k)) refuse(where, `undeclared key '${k}'`);\n }\n if (ids.has(id)) refuse(where, 'duplicate id');\n ids.add(id);\n if (row.role !== 'exploratory' && row.role !== 'holdout' && row.role !== 'replication') {\n refuse(where, `role must be exploratory, holdout or replication (got '${String(row.role)}')`);\n }\n if (!isPlainObject(row.values)) refuse(where, 'needs \"values\": {input: value}');\n for (const k of Object.keys(row.values)) {\n if (!governing.some((g) => g.name === k)) refuse(`${where} values.${k}`, 'is not a declared governing input');\n }\n const inputs: Record<string, number> = {};\n for (const g of governing) {\n if (!(g.name in row.values)) refuse(where, `is missing input '${g.name}'`);\n inputs[g.name] = toSi(row.values[g.name], g, `${where} values.${g.name}`, 'absolute');\n }\n if (row.observed === undefined) refuse(where, `is missing \"observed\" (${target.name})`);\n const observed = toSi(row.observed, target, `${where} observed`, 'absolute');\n const sigmaRaw = row.sigma ?? defaultSigma;\n if (sigmaRaw === undefined) {\n refuse(where, 'has no uncertainty: give \"sigma\" on the row or on the target');\n }\n const sigma = positiveSigma(sigmaRaw, target, `${where} sigma`);\n if (row.inputSigma !== undefined && !isPlainObject(row.inputSigma)) refuse(where, '\"inputSigma\" must be {input: σ}');\n const rowInputSigma = (row.inputSigma ?? {}) as Record<string, unknown>;\n for (const k of Object.keys(rowInputSigma)) {\n if (!governing.some((g) => g.name === k)) refuse(`${where} inputSigma.${k}`, 'is not a declared governing input');\n }\n const inputSigma: Record<string, number> = {};\n for (const g of governing) {\n const s = rowInputSigma[g.name] === undefined\n ? g.sigma\n : positiveSigma(rowInputSigma[g.name], g, `${where} inputSigma.${g.name}`);\n if (s !== undefined) inputSigma[g.name] = s;\n }\n const source = row.source === undefined ? provenance.source : row.source;\n if (!nonEmptyString(source)) refuse(`${where} source`, 'must be a non-empty string');\n return { id, role: row.role, source, inputs, observed, sigma, inputSigma };\n });\n guardLeakage(rows);\n return rows;\n}\n\n/** The data of a row, without its id, role or source: equal keys are the same measurement. */\nconst dataKey = (r: StudyObservation): string =>\n canonicalJson({ inputs: r.inputs, observed: r.observed, sigma: r.sigma, inputSigma: r.inputSigma });\n\n/** Withheld rows must not repeat fit rows, and replication must be an independent acquisition. */\nfunction guardLeakage(rows: readonly StudyObservation[]): void {\n const fitKeys = new Map<string, string>();\n const fitSources = new Set<string>();\n const studyData = new Map<string, StudyObservation>();\n for (const r of rows) {\n if (r.role !== 'replication') studyData.set(dataKey(r), r);\n if (r.role !== 'exploratory') continue;\n fitKeys.set(canonicalJson(r.inputs), r.id);\n fitSources.add(provenanceKey(r.source));\n }\n for (const r of rows) {\n if (r.role === 'exploratory') continue;\n const copy = r.role === 'replication' ? studyData.get(dataKey(r)) : undefined;\n if (copy !== undefined) {\n refuse(\n `observation ${r.id}`,\n `replication row is identical (inputs, observed, σ) to ${copy.role} row ${copy.id} of source '${copy.source}'; ` +\n 'the same data under another source name is not an independent acquisition',\n );\n }\n const twin = fitKeys.get(canonicalJson(r.inputs));\n if (twin !== undefined) {\n refuse(`observation ${r.id}`, `${r.role} row repeats the inputs of exploratory row ${twin}; withheld data must not be fit data`);\n }\n if (r.role === 'replication' && fitSources.has(provenanceKey(r.source))) {\n refuse(\n `observation ${r.id}`,\n `replication row has source '${r.source}', which also supplied exploratory rows; ` +\n 'replication must come from an independent acquisition (give it its own \"source\")',\n );\n }\n }\n}\n\n/** Parse and validate a study file. Throws {@link StudyRefusal}. @internal */\nexport function parseStudy(raw: unknown, source = 'inline'): ProbeStudy {\n if (!isPlainObject(raw)) refuse(source, 'is not a JSON object');\n for (const k of Object.keys(raw)) {\n if (!TOP_KEYS.has(k)) refuse(source, `undeclared top-level key '${k}'`);\n }\n const provenance = parseProvenance(raw.provenance);\n const target = quantity(raw.target, 'target');\n if (!Array.isArray(raw.governing) || raw.governing.length === 0) {\n refuse('governing', 'must be a non-empty array of {\"name\", \"unit\"}');\n }\n const governing = raw.governing.map((g, i) => governingQuantity(g, `governing[${i}]`));\n const names = [target.name, ...governing.map((g) => g.name)];\n if (new Set(names).size !== names.length) refuse('governing', 'names must be distinct from each other and from the target');\n const gapRaw = isPlainObject(raw.gap) ? raw.gap : {};\n const gap = {\n id: nonEmptyString(gapRaw.id) ? gapRaw.id : 'fg-study',\n kind: nonEmptyString(gapRaw.kind) ? gapRaw.kind : 'unexplained-observation',\n summary: nonEmptyString(gapRaw.summary) ? gapRaw.summary : `study from ${source}`,\n };\n if (!isGapKind(gap.kind)) refuse('gap.kind', `unknown gap kind '${gap.kind}'`);\n let alpha = DEFAULT_ALPHA;\n if (raw.criterion !== undefined) {\n if (!isPlainObject(raw.criterion) || typeof raw.criterion.alpha !== 'number') {\n refuse('criterion', 'needs {\"alpha\": number}');\n }\n alpha = raw.criterion.alpha;\n if (!(alpha > 0 && alpha < 1)) refuse('criterion.alpha', 'must be in (0, 1)');\n }\n const targetRaw = raw.target as Record<string, unknown>;\n const observations = parseObservations(raw.observations, provenance, target, governing, targetRaw.sigma);\n const baselines = parseBaselines(raw.baselines, target, governing);\n const design = parseDesign(raw.design, governing);\n const correction = parseCorrection(raw.correction, governing);\n return {\n source,\n gap,\n provenance,\n target,\n governing,\n observations,\n baselines,\n alpha,\n ...(design ? { design } : {}),\n ...(correction ? { correction } : {}),\n };\n}\n\n/** Load a study JSON file. @internal */\nexport function loadStudyFromJson(path: string): ProbeStudy {\n return parseStudy(readJsonFile(path), path);\n}\n\nfunction readStudyRaw(path: string): unknown {\n if (/\\.csv$/i.test(path)) return studyCsvToRaw(readFileSync(path, 'utf8'), path);\n return readJsonFile(path);\n}\n\n/**\n * Load a study file (`.csv`, else JSON) and, optionally, a separate\n * replication file with its own provenance. Throws {@link StudyRefusal}.\n *\n * @internal\n */\nexport function loadStudyFile(path: string, replicationPath?: string): ProbeStudy {\n const study = parseStudy(readStudyRaw(path), path);\n return replicationPath === undefined ? study : attachReplication(study, readStudyRaw(replicationPath), replicationPath);\n}\n\nconst sameDim = (a: StudyQuantity, b: StudyQuantity) => a.name === b.name && equals(a.dim, b.dim);\n\n/**\n * Add the rows of a separate replication file to a study. The file must\n * declare its own provenance, the study's target and inputs (units may\n * differ), and replication rows only. Its source and acquisition must differ\n * from the study's, and no row may repeat a study row's data.\n *\n * @internal\n */\nexport function attachReplication(study: ProbeStudy, raw: unknown, source: string): ProbeStudy {\n if (!isPlainObject(raw)) refuse(source, 'is not a JSON object');\n for (const k of Object.keys(raw)) {\n if (!REPLICATION_KEYS.has(k)) {\n refuse(source, `'${k}' belongs in the study file; a replication file carries only ${[...REPLICATION_KEYS].join(', ')}`);\n }\n }\n if (study.observations.some((o) => o.role === 'replication')) {\n refuse(source, `the study ${study.source} already has replication rows; give replication in one place`);\n }\n const rep = parseStudy(raw, source);\n const mine = rep.observations.find((o) => o.role !== 'replication');\n if (mine) refuse(`${source} observation ${mine.id}`, `a replication file holds replication rows only (got '${mine.role}')`);\n if (!sameDim(rep.target, study.target)) {\n refuse(`${source} target`, `must be '${study.target.name}' ${format(study.target.dim)}, as in the study`);\n }\n const names = (qs: readonly StudyQuantity[]) => qs.map((q) => q.name).sort().join(', ');\n if (\n rep.governing.length !== study.governing.length ||\n !study.governing.every((g) => rep.governing.some((r) => sameDim(r, g)))\n ) {\n refuse(`${source} governing`, `must declare the study's inputs {${names(study.governing)}} with the same dimensions (got {${names(rep.governing)}})`);\n }\n if (provenanceKey(rep.provenance.source) === provenanceKey(study.provenance.source)) {\n refuse(`${source} provenance.source`, `is '${rep.provenance.source}', the study's own source; replication must be an independent acquisition`);\n }\n if (\n rep.provenance.acquisition !== undefined &&\n study.provenance.acquisition !== undefined &&\n provenanceKey(rep.provenance.acquisition) === provenanceKey(study.provenance.acquisition)\n ) {\n refuse(`${source} provenance.acquisition`, 'is the study\\'s own acquisition; replication must be an independent acquisition');\n }\n const ids = new Set(study.observations.map((o) => o.id));\n const clash = rep.observations.find((o) => ids.has(o.id));\n if (clash) refuse(`${source} observation ${clash.id}`, `id is also used in the study ${study.source}`);\n const observations = [...study.observations, ...rep.observations];\n guardLeakage(observations);\n return { ...study, observations, replication: { source, provenance: rep.provenance } };\n}\n\n// --- replication closeness -------------------------------------------------\n\n/** One lower-tail χ² test of replication rows against the study rows they pair with. @internal */\nexport interface ClosenessTest {\n readonly chi2: number;\n readonly dof: number;\n /** P(χ²_ν ≤ chi2): small when the rows agree better than their σ allows. */\n readonly pLower: number;\n /** pLower < α/2. */\n readonly flagged: boolean;\n}\n\n/**\n * Whether replication rows are closer to the study rows at the same inputs\n * than independent measurements with the declared σ can be. @internal\n */\nexport interface ReplicationIndependence {\n /** Replication rows paired with a study row at the same inputs. */\n readonly pairs: number;\n /** y_rep = y_study: Σ Δy²/(σ_rep² + σ_study²) on ν = pairs. Null without a pair. */\n readonly identity: ClosenessTest | null;\n /** y_rep = a + b·y_study, fit with weights 1/(σ_rep² + b²σ_study²), on ν = pairs − 2. Null below 3 pairs or when degenerate. */\n readonly affine: (ClosenessTest & { readonly slope: number; readonly offset: number }) | null;\n readonly tooClose: boolean;\n readonly reason: string;\n}\n\nfunction sameInputs(a: StudyObservation, b: StudyObservation): boolean {\n const keys = Object.keys(a.inputs);\n if (keys.length !== Object.keys(b.inputs).length) return false;\n return keys.every((k) => {\n const x = a.inputs[k];\n const y = b.inputs[k];\n if (x === undefined || y === undefined) return false;\n const sa = a.inputSigma[k] ?? 0;\n const sb = b.inputSigma[k] ?? 0;\n const tol = sa > 0 || sb > 0 ? 3 * Math.hypot(sa, sb) : 1e-9 * Math.max(Math.abs(x), Math.abs(y));\n return Math.abs(x - y) <= tol;\n });\n}\n\nfunction closeness(chi2: number, dof: number, alpha: number): ClosenessTest {\n const pLower = chiSquareCdf(chi2, dof);\n return { chi2, dof, pLower, flagged: pLower < alpha / 2 };\n}\n\n/**\n * Weighted straight line y = a + b·x with the effective variance σ_y² + b²σ_x², iterated from b = 1.\n * The weighted sums are core `pairwiseDot` and `pairwiseSum` (the stable sums), not a `reduce`.\n */\nfunction affineFit(pts: readonly { x: number; sx: number; y: number; sy: number }[]): { a: number; b: number; chi2: number } | null {\n let b = 1;\n let a = 0;\n const xs = pts.map((p) => p.x);\n const ys = pts.map((p) => p.y);\n const variance = (slope: number) => pts.map((p) => p.sy ** 2 + slope * slope * p.sx ** 2);\n for (let it = 0; it < 6; it++) {\n const w = variance(b).map((v) => 1 / v);\n const W = pairwiseSum(w);\n const xm = pairwiseDot(w, xs) / W;\n const ym = pairwiseDot(w, ys) / W;\n const dx = xs.map((x) => x - xm);\n const sxx = pairwiseDot(w, dx.map((d) => d * d));\n const sxy = pairwiseDot(w, dx.map((d, i) => d * (ys[i]! - ym)));\n if (!(sxx > 0) || !Number.isFinite(sxy)) return null;\n b = sxy / sxx;\n a = ym - b * xm;\n }\n const v = variance(b);\n const chi2 = pairwiseSum(pts.map((p, i) => (p.y - a - b * p.x) ** 2 / v[i]!));\n return Number.isFinite(chi2) ? { a, b, chi2 } : null;\n}\n\n/**\n * Fisher's test of agreement too good to be true. Each replication row is\n * paired with the first unused study row at the same inputs (within 3·√(σ_x²\n * + σ_x'²) when an input σ is declared, else to 1e-9 relative). Independent\n * acquisitions differ by about their σ, so a χ² far in the lower tail means a\n * copy, or an overstated σ. Two tests, each at α/2: identity (y_rep = y_study)\n * and affine (y_rep = a + b·y_study, which catches a rescaled or shifted copy).\n * Only paired rows are tested: a copy moved to other inputs is not caught.\n *\n * @internal\n */\nexport function replicationIndependence(observations: readonly StudyObservation[], alpha: number): ReplicationIndependence {\n const reps = observations.filter((o) => o.role === 'replication');\n if (reps.length === 0) {\n return { pairs: 0, identity: null, affine: null, tooClose: false, reason: 'no replication rows; the closeness test did not run' };\n }\n const used = new Set<StudyObservation>();\n const pts: { x: number; sx: number; y: number; sy: number }[] = [];\n for (const r of reps) {\n const s = observations.find((o) => o.role !== 'replication' && !used.has(o) && sameInputs(r, o));\n if (!s) continue;\n used.add(s);\n pts.push({ x: s.observed, sx: s.sigma, y: r.observed, sy: r.sigma });\n }\n const n = pts.length;\n if (n === 0) {\n return {\n pairs: 0,\n identity: null,\n affine: null,\n tooClose: false,\n reason: 'no replication row shares its inputs with a study row; the closeness test did not run',\n };\n }\n const identity = closeness(\n pts.reduce((s, p) => s + (p.y - p.x) ** 2 / (p.sy ** 2 + p.sx ** 2), 0),\n n,\n alpha,\n );\n const fit = n >= 3 ? affineFit(pts) : null;\n const affine = fit ? { ...closeness(fit.chi2, n - 2, alpha), slope: fit.b, offset: fit.a } : null;\n const tooClose = identity.flagged || (affine?.flagged ?? false);\n const cmp = (t: ClosenessTest) => `lower-tail p = ${fmtP(t.pLower)} ${t.flagged ? '<' : '≥'} α/2 = ${alpha / 2}`;\n const parts = [\n n === 1 ? '1 replication row shares its inputs with a study row' : `${n} replication rows share their inputs with study rows`,\n ...(n < reps.length ? [`${reps.length - n} other(s) are at inputs no study row has and are not tested`] : []),\n `identity: Σz² = ${identity.chi2.toPrecision(3)} on ν = ${n}, ${cmp(identity)}`,\n affine\n ? `affine: y_rep = ${affine.offset.toPrecision(3)} + ${affine.slope.toPrecision(6)} · y_study, χ² = ${affine.chi2.toPrecision(3)} on ν = ${n - 2}, ${cmp(affine)}`\n : n < 3\n ? 'affine: not run (needs 3 pairs)'\n : 'affine: not run (the paired study values do not vary)',\n ];\n const verdict = tooClose\n ? 'closer than independent measurements with the declared σ allow — not independent, or σ is overstated'\n : 'no closer than independent measurements with the declared σ would be';\n return { pairs: n, identity, affine, tooClose, reason: `${parts.join('; ')}: ${verdict}` };\n}\n\n// --- CSV study files -------------------------------------------------------\n\nconst CSV_ROW_COLUMNS = new Set(['id', 'role', 'source', 'sigma', 'note']);\n\nfunction csvCells(line: string, where: string): string[] {\n const cells: string[] = [];\n let i = 0;\n for (;;) {\n let cell = '';\n if (line[i] === '\"') {\n i++;\n for (;;) {\n if (i >= line.length) refuse(where, 'has an unterminated quoted cell');\n if (line[i] === '\"') {\n if (line[i + 1] === '\"') {\n cell += '\"';\n i += 2;\n continue;\n }\n i++;\n break;\n }\n cell += line[i++];\n }\n if (i < line.length && line[i] !== ',') refuse(where, 'has text after a closing quote');\n } else {\n const end = line.indexOf(',', i);\n cell = line.slice(i, end < 0 ? line.length : end);\n i = end < 0 ? line.length : end;\n }\n cells.push(cell.trim());\n if (i >= line.length) return cells;\n i++;\n }\n}\n\n/** A declaration value: JSON when it parses as JSON, else the text itself. */\nfunction declValue(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction setPath(obj: Record<string, unknown>, path: readonly string[], value: unknown, where: string): void {\n let at = obj;\n for (const k of path.slice(0, -1)) {\n if (at[k] === undefined) at[k] = {};\n if (!isPlainObject(at[k])) refuse(where, `'${k}' is already set to a value`);\n at = at[k] as Record<string, unknown>;\n }\n const last = path[path.length - 1]!;\n if (at[last] !== undefined) refuse(where, `'${path.join('.')}' is declared twice`);\n at[last] = value;\n}\n\n/**\n * Compile a CSV study into the object {@link parseStudy} reads, so a CSV is\n * refused for exactly the reasons its JSON twin would be.\n *\n * Lines `# key: value` above the header declare the study: `target` names\n * the target column; `target.sigma`, `governing.<input>.sigma` and any other\n * dotted key (`provenance.synthetic`, `provenance.source`, `criterion.alpha`,\n * `baselines`, `design`, `correction`, ...) set that key. A value is JSON\n * when it parses as JSON, else text. The header names `name[unit]` quantity\n * columns (`name[]` when dimensionless) and the reserved columns `id`,\n * `role`, `source`, `sigma` (target σ), `sigma(<input>)` and `note`. An\n * empty cell is an absent value.\n *\n * @internal\n */\nexport function studyCsvToRaw(text: string, source = 'inline.csv'): Record<string, unknown> {\n const lines = text.split(/\\r?\\n/).map((l, i) => ({ l, n: i + 1 })).filter(({ l }) => l.trim() !== '');\n const raw: Record<string, unknown> = {};\n let targetName: string | undefined;\n const governingSigma: Record<string, unknown> = {};\n let h = 0;\n for (; h < lines.length && lines[h]!.l.trimStart().startsWith('#'); h++) {\n const { l, n } = lines[h]!;\n const where = `${source} line ${n}`;\n const m = /^\\s*#\\s*([A-Za-z_][\\w.()-]*)\\s*:\\s?(.*)$/.exec(l);\n if (!m) refuse(where, \"a declaration is '# key: value'\");\n // Both groups are unconditional in the pattern, so a match carries them.\n const key = m[1]!;\n const valueText = m[2]!;\n const value = declValue(valueText.trim());\n const path = key.split('.');\n if (key === 'target') {\n if (targetName !== undefined) refuse(where, \"'target' is declared twice\");\n if (!nonEmptyString(value)) refuse(where, \"'# target:' names the target column\");\n targetName = value;\n } else if (path[0] === 'governing') {\n if (path.length !== 3 || path[2] !== 'sigma') refuse(where, \"the only governing declaration is '# governing.<input>.sigma: σ'\");\n if (path[1]! in governingSigma) refuse(where, `'${key}' is declared twice`);\n governingSigma[path[1]!] = value;\n } else if (key === 'observations') {\n refuse(where, 'observations are the rows below the header');\n } else {\n setPath(raw, path, value, where);\n }\n }\n if (h >= lines.length) refuse(source, 'has no header row');\n const header = csvCells(lines[h]!.l, `${source} header`);\n if (targetName === undefined) refuse(source, \"needs a '# target: <column>' declaration\");\n type Column = { kind: 'row'; key: string } | { kind: 'quantity'; name: string; unit: string } | { kind: 'inputSigma'; input: string };\n const seen = new Set<string>();\n const columns: Column[] = header.map((cell) => {\n const where = `${source} header column '${cell}'`;\n let col: Column;\n let name: string;\n const q = /^([A-Za-z_]\\w*)\\[(.*)\\]$/.exec(cell);\n const s = /^sigma\\(([A-Za-z_]\\w*)\\)$/.exec(cell);\n if (CSV_ROW_COLUMNS.has(cell)) {\n col = { kind: 'row', key: cell };\n name = cell;\n } else if (s) {\n col = { kind: 'inputSigma', input: s[1]! };\n name = cell;\n } else if (q) {\n col = { kind: 'quantity', name: q[1]!, unit: q[2]!.trim() };\n name = q[1]!;\n } else {\n refuse(where, `is not ${[...CSV_ROW_COLUMNS].join(', ')}, sigma(<input>) or a quantity 'name[unit]' ('name[]' when dimensionless)`);\n }\n if (seen.has(name)) refuse(where, 'is a duplicate column');\n seen.add(name);\n return col;\n });\n const quantities = columns.filter((c): c is Extract<Column, { kind: 'quantity' }> => c.kind === 'quantity');\n const targetCol = quantities.find((c) => c.name === targetName);\n if (!targetCol) refuse(source, `'# target: ${targetName}' names no 'name[unit]' column`);\n const governing = quantities.filter((c) => c !== targetCol);\n for (const c of columns) {\n if (c.kind === 'inputSigma' && !governing.some((g) => g.name === c.input)) {\n refuse(`${source} header column 'sigma(${c.input})'`, `'${c.input}' is not a governing input column`);\n }\n }\n for (const k of Object.keys(governingSigma)) {\n if (!governing.some((g) => g.name === k)) refuse(`${source} governing.${k}.sigma`, `'${k}' is not a governing input column`);\n }\n if (isPlainObject(raw.target)) {\n for (const k of Object.keys(raw.target)) {\n if (k !== 'sigma') refuse(`${source} target.${k}`, \"the target's name and unit come from its column; only 'target.sigma' is declared\");\n }\n }\n raw.target = { name: targetCol.name, unit: targetCol.unit, ...(isPlainObject(raw.target) ? raw.target : {}) };\n raw.governing = governing.map((g) => ({\n name: g.name,\n unit: g.unit,\n ...(g.name in governingSigma ? { sigma: governingSigma[g.name] } : {}),\n }));\n raw.observations = lines.slice(h + 1).map(({ l, n }) => {\n const where = `${source} line ${n}`;\n if (l.trimStart().startsWith('#')) refuse(where, 'declarations go above the header row');\n const cells = csvCells(l, where);\n if (cells.length !== columns.length) refuse(where, `has ${cells.length} cells; the header has ${columns.length}`);\n const row: Record<string, unknown> = {};\n const values: Record<string, unknown> = {};\n const inputSigma: Record<string, unknown> = {};\n columns.forEach((c, i) => {\n const cell = cells[i]!;\n if (cell === '') return;\n if (c.kind === 'row') row[c.key] = cell;\n else if (c.kind === 'inputSigma') inputSigma[c.input] = cell;\n else if (c === targetCol) row.observed = cell;\n else values[c.name] = cell;\n });\n row.values = values;\n if (Object.keys(inputSigma).length > 0) row.inputSigma = inputSigma;\n return row;\n });\n return raw;\n}\n\n// --- χ² and F survival functions ------------------------------------------\n//\n// MathTS carries the regularized lower incomplete gamma `gammainc` (the\n// series for x < a + 1, else 1 − Q by continued fraction), the upper one\n// `gammaincp` (from `@danielsimonjr/mathts-functions` 0.68.3 the modified\n// Lentz continued fraction for x ≥ a + 1, computed directly; before that it\n// was `1 − gammainc`, which rounded a far upper tail to 0, and the χ² p-value\n// of a bad fit IS that tail) and the regularized incomplete beta `betainc`.\n// The χ² CDF is MathTS `chiSquaredCDF`; the survival functions below use\n// `gammaincp` and `betainc`.\n\n/** Regularized upper incomplete gamma Q(a, x), MathTS `gammaincp` (direct in the upper tail). */\nfunction gammaQ(a: number, x: number): number {\n if (x <= 0) return 1;\n return numberFrom('gammaincp', gammaincp(a, x));\n}\n\n/** P(χ²_ν ≥ chi2): the probability of a χ² at least this large if the model and σ are right. @internal */\nexport function chiSquareSurvival(chi2: number, dof: number): number {\n if (!(dof > 0)) throw new RangeError('chiSquareSurvival: dof must be positive');\n if (!(chi2 > 0)) return 1;\n return gammaQ(dof / 2, chi2 / 2);\n}\n\n/**\n * P(χ²_ν ≤ chi2), MathTS `chiSquaredCDF`. It is direct in the lower tail, where\n * 1 − Q would round a small probability away. @internal\n */\nexport function chiSquareCdf(chi2: number, dof: number): number {\n if (!(dof > 0)) throw new RangeError('chiSquareCdf: dof must be positive');\n if (!(chi2 > 0)) return 0;\n return numberFrom('chiSquaredCDF', chiSquaredCDF(chi2, dof));\n}\n\n/** Regularized incomplete beta I_x(a, b), MathTS `betainc`. */\nfunction betaI(a: number, b: number, x: number): number {\n if (x <= 0) return 0;\n if (x >= 1) return 1;\n return numberFrom('betainc', betainc(a, b, x));\n}\n\n/** P(F_{d1,d2} ≥ f): the probability of an F ratio at least this large if the extra terms explain nothing. @internal */\nexport function fSurvival(f: number, d1: number, d2: number): number {\n if (!(d1 > 0 && d2 > 0)) throw new RangeError('fSurvival: degrees of freedom must be positive');\n if (!(f > 0)) return 1;\n if (f === Infinity) return 0;\n return betaI(d2 / 2, d1 / 2, d2 / (d2 + d1 * f));\n}\n\n// --- tests of a model on a set of rows -------------------------------------\n\n/** A χ² test of one model on one set of rows. `pass` is null when ν < 1. @internal */\nexport interface SetTest {\n readonly n: number;\n readonly chi2: number;\n readonly dof: number;\n readonly p: number | null;\n readonly maxAbsZ: number;\n readonly worstRow: string | null;\n readonly pass: boolean | null;\n}\n\n/** The category of model being scored in a probe study. @internal */\nexport type ModelKind = 'candidate' | 'baseline' | 'null';\n\n/** One model scored on each set. Only the exploratory rows ever set its parameter. @internal */\nexport interface ModelTest {\n readonly id: string;\n readonly kind: ModelKind;\n readonly label: string;\n readonly fittedParameters: number;\n /** SI coherent; 1 for a fixed baseline, the level for the null model. */\n readonly prefactor: number | null;\n /** Standard error of the prefactor from (ΦᵀWΦ)⁻¹ with the declared σ; null when unfit or fixed. */\n readonly prefactorStderr: number | null;\n readonly exploratory: SetTest | null;\n readonly holdout: SetTest | null;\n readonly replication: SetTest | null;\n readonly error?: string;\n}\n\ntype Predictor = (inputs: Readonly<Record<string, number>>) => number;\n\n/**\n * The effective σ of one row under a model f: σ_eff² = σ_y² + Σ_i (∂f/∂x_i · σ_xi)²\n * over the inputs with a σ, the GUM first-order propagation of MathTS\n * `propagateUncertainty` (the one uncertainty path of the library, as in\n * `composition/uncertainty.ts`), each partial a central difference with the\n * relative step 1e-6·|x_i| at the recorded inputs. An input that is exactly\n * zero has no relative step, so it is passed to MathTS shifted by\n * c = 1e3·σ_xi and read back as z − c inside the model: the derivative is\n * unchanged and the step is 1e-6·c = 1e-3·σ_xi, the floor the hand-coded\n * difference used before. First order in σ_x: exact for f linear in x_i.\n *\n * @internal\n */\nexport function effectiveSigma(r: StudyObservation, predict: Predictor): number {\n const names = Object.keys(r.inputSigma);\n if (names.length === 0) return r.sigma;\n const values: Record<string, number> = {};\n const shift: Record<string, number> = {};\n for (const name of names) {\n const x = r.inputs[name] ?? NaN;\n shift[name] = x === 0 ? 1e3 * r.inputSigma[name]! : 0;\n values[name] = x + shift[name];\n }\n const unshifted = (v: Record<string, number>): Record<string, number> => {\n const inputs: Record<string, number> = { ...r.inputs };\n for (const name of names) inputs[name] = v[name]! - shift[name]!;\n return inputs;\n };\n const notFinite = (name: string) => new RangeError(`the model's slope in ${name} is not finite on row ${r.id}`);\n // MathTS varies one input at a time; the input being varied when the model is not finite is\n // the one to name, read from the stencil point itself rather than from MathTS's message.\n let culprit: string | null = null;\n const model = (v: Record<string, number>): number => {\n const y = predict(unshifted(v));\n if (!Number.isFinite(y) && culprit === null) culprit = names.find((name) => v[name] !== values[name]) ?? names[0]!;\n return y;\n };\n let u;\n try {\n u = propagateUncertainty(model, values, r.inputSigma, { relativeStep: 1e-6 });\n } catch (e) {\n if (culprit !== null) throw notFinite(culprit);\n throw e;\n }\n for (const name of names) {\n if (!Number.isFinite(u.partials[name])) throw notFinite(name);\n }\n return Math.hypot(r.sigma, u.sigma);\n}\n\nconst hasInputSigma = (rows: readonly StudyObservation[]) => rows.some((r) => Object.keys(r.inputSigma).length > 0);\n\nfunction testRows(rows: readonly StudyObservation[], predict: Predictor, fitted: number, alpha: number): SetTest {\n let chi2 = 0;\n let maxAbsZ = 0;\n let worstRow: string | null = null;\n for (const r of rows) {\n const z = (r.observed - predict(r.inputs)) / effectiveSigma(r, predict);\n if (!Number.isFinite(z)) throw new RangeError(`prediction is not finite on row ${r.id}`);\n chi2 += z * z;\n if (Math.abs(z) > maxAbsZ) {\n maxAbsZ = Math.abs(z);\n worstRow = r.id;\n }\n }\n const dof = rows.length - fitted;\n const p = dof >= 1 ? chiSquareSurvival(chi2, dof) : null;\n return { n: rows.length, chi2, dof, p, maxAbsZ, worstRow, pass: p === null ? null : p >= alpha };\n}\n\nconst combine = (basis: readonly Predictor[], coef: readonly number[]): Predictor =>\n (x) => basis.reduce((s, b, j) => s + coef[j]! * b(x), 0);\n\n/** A weighted least-squares solution: the coefficients and their covariance (ΦᵀWΦ)⁻¹, or null when the inverse failed. */\ninterface WeightedSolution {\n readonly coef: number[];\n readonly covariance: number[][] | null;\n}\n\n/**\n * The inverse of the equilibrated normal matrix B (k×k, unit diagonal), MathTS `inv`,\n * unscaled back to the covariance of the coefficients: Σ = S⁻¹ B⁻¹ S⁻¹. Null when\n * MathTS refuses the inverse or returns something other than a k×k number matrix.\n */\nfunction covarianceOf(B: readonly (readonly number[])[], s: readonly number[]): number[][] | null {\n let raw: unknown;\n try {\n raw = inv(B.map((row) => [...row]));\n } catch {\n return null;\n }\n const k = s.length;\n if (!Array.isArray(raw) || raw.length !== k) return null;\n const out: number[][] = [];\n for (let a = 0; a < k; a++) {\n const row: unknown = raw[a];\n if (!Array.isArray(row) || row.length !== k) return null;\n const unscaled: number[] = [];\n for (let b = 0; b < k; b++) {\n const v: unknown = row[b];\n if (typeof v !== 'number' || !Number.isFinite(v)) return null;\n unscaled.push(v / (s[a]! * s[b]!));\n }\n out.push(unscaled);\n }\n return out;\n}\n\n/**\n * Solve the weighted normal equations for y ≈ Σ a_j·φ_j; null when they are singular.\n * The covariance of the solution is the inverse of the same (equilibrated) matrix.\n */\nfunction solveWeighted(phi: readonly number[][], y: readonly number[], sigma: readonly number[]): WeightedSolution | null {\n const k = phi[0]?.length ?? 0;\n const A = Array.from({ length: k }, () => new Array<number>(k + 1).fill(0));\n phi.forEach((f, i) => {\n const w = 1 / (sigma[i]! * sigma[i]!);\n for (let a = 0; a < k; a++) {\n for (let b = 0; b < k; b++) A[a]![b]! += w * f[a]! * f[b]!;\n A[a]![k]! += w * f[a]! * y[i]!;\n }\n });\n if (k === 1) {\n const a00 = A[0]![0]!;\n return a00 > 0 ? { coef: [A[0]![1]! / a00], covariance: [[1 / a00]] } : null;\n }\n // Equilibrate so the pivot test is scale-free, then eliminate with partial pivoting.\n const s = A.map((row, a) => Math.sqrt(row[a]!));\n if (!s.every((v) => v > 0)) return null;\n for (let a = 0; a < k; a++) {\n for (let b = 0; b < k; b++) A[a]![b]! /= s[a]! * s[b]!;\n A[a]![k]! /= s[a]!;\n }\n const covariance = covarianceOf(A.map((row) => row.slice(0, k)), s);\n for (let c = 0; c < k; c++) {\n let p = c;\n for (let r = c + 1; r < k; r++) if (Math.abs(A[r]![c]!) > Math.abs(A[p]![c]!)) p = r;\n if (Math.abs(A[p]![c]!) < 1e-13) return null;\n [A[c], A[p]] = [A[p]!, A[c]!];\n for (let r = 0; r < k; r++) {\n if (r === c) continue;\n const m = A[r]![c]! / A[c]![c]!;\n for (let q = c; q <= k; q++) A[r]![q]! -= m * A[c]![q]!;\n }\n }\n return { coef: A.map((row, a) => row[k]! / row[a]! / s[a]!), covariance };\n}\n\nconst EV_ROUNDS = 50;\n\n/**\n * Weighted least squares y ≈ Σ a_j·φ_j(x), from the exploratory rows only.\n * With input σ the weights are 1/σ_eff² of the current fit, iterated to a\n * fixed point (the effective-variance method); the covariance is that of the\n * last solve, with the fixed-point weights.\n */\nfunction fitLinear(rows: readonly StudyObservation[], basis: readonly Predictor[]): WeightedSolution | null {\n const phi = rows.map((r) =>\n basis.map((b) => {\n const f = b(r.inputs);\n if (!Number.isFinite(f)) throw new RangeError(`model is not finite on exploratory row ${r.id}`);\n return f;\n }),\n );\n const y = rows.map((r) => r.observed);\n let sol = solveWeighted(phi, y, rows.map((r) => r.sigma));\n if (!hasInputSigma(rows)) return sol;\n for (let round = 0; sol !== null && round < EV_ROUNDS; round++) {\n const coef = sol.coef;\n const predict = combine(basis, coef);\n const next = solveWeighted(phi, y, rows.map((r) => effectiveSigma(r, predict)));\n if (next === null) return null;\n const settled = next.coef.every((a, j) => Math.abs(a - coef[j]!) <= 1e-13 * Math.max(Math.abs(a), 1e-300));\n sol = next;\n if (settled) break;\n }\n return sol;\n}\n\ninterface Split {\n readonly exploratory: readonly StudyObservation[];\n readonly holdout: readonly StudyObservation[];\n readonly replication: readonly StudyObservation[];\n}\n\nfunction split(study: ProbeStudy): Split {\n return {\n exploratory: study.observations.filter((o) => o.role === 'exploratory'),\n holdout: study.observations.filter((o) => o.role === 'holdout'),\n replication: study.observations.filter((o) => o.role === 'replication'),\n };\n}\n\ninterface FittedModel {\n readonly test: ModelTest;\n readonly predict: Predictor | null;\n /** Fitted coefficients of the basis terms, SI; null when unfit. */\n readonly coef: readonly number[] | null;\n /** Covariance of `coef`, (ΦᵀWΦ)⁻¹; null when unfit, fixed, or the inverse failed. */\n readonly covariance: readonly (readonly number[])[] | null;\n}\n\n/** A model as a sum of basis terms; `fit: false` means one fixed term with coefficient 1. */\ninterface ModelSpec {\n readonly id: string;\n readonly kind: ModelKind;\n readonly label: string;\n readonly basis: readonly Predictor[];\n readonly fit: boolean;\n}\n\n/**\n * Fit a model's coefficients on the exploratory rows, then (only if asked)\n * score it on the withheld rows with them frozen.\n */\nfunction scoreModel(spec: ModelSpec, sets: Split, alpha: number, withheld: boolean): FittedModel {\n const { id, kind, label } = spec;\n const k = spec.fit ? spec.basis.length : 0;\n const failed = (error: string): FittedModel => ({\n test: { id, kind, label, fittedParameters: k, prefactor: null, prefactorStderr: null, exploratory: null, holdout: null, replication: null, error },\n predict: null,\n coef: null,\n covariance: null,\n });\n try {\n const sol = spec.fit ? fitLinear(sets.exploratory, spec.basis) : { coef: [1], covariance: null };\n if (sol === null) {\n return failed(k === 1\n ? 'model is zero on every exploratory row; no scale can be fit'\n : 'the model\\'s terms are degenerate on the exploratory rows; they cannot be fit');\n }\n const { coef, covariance } = sol;\n const predict = combine(spec.basis, coef);\n const on = (rows: readonly StudyObservation[]) => (withheld && rows.length > 0 ? testRows(rows, predict, 0, alpha) : null);\n const v00 = covariance?.[0]?.[0];\n return {\n test: {\n id,\n kind,\n label,\n fittedParameters: k,\n prefactor: coef[0]!,\n prefactorStderr: v00 !== undefined && v00 >= 0 ? Math.sqrt(v00) : null,\n exploratory: sets.exploratory.length > 0 ? testRows(sets.exploratory, predict, k, alpha) : null,\n holdout: on(sets.holdout),\n replication: on(sets.replication),\n },\n predict,\n coef,\n covariance,\n };\n } catch (e) {\n return failed((e as Error).message);\n }\n}\n\n/** One step of admitting a correction term. @internal */\nexport interface CorrectionStep {\n readonly input: string;\n readonly power: number;\n /** Extra-sum-of-squares F = (χ²_{k−1} − χ²_k) / (χ²_k / ν_k); null when not testable. */\n readonly F: number | null;\n readonly dof: number;\n readonly p: number | null;\n readonly admitted: boolean;\n readonly reason: string;\n}\n\nconst SUBSCRIPT = '₀₁₂₃₄₅₆₇₈₉';\nconst sub = (n: number) => [...String(n)].map((d) => SUBSCRIPT[Number(d)]).join('');\n\n/** One admitted term u^p of a correction family, with the reference value its family declared for it, if any. */\ninterface CorrectionTerm {\n readonly input: string;\n readonly power: number;\n readonly reference?: number;\n}\n\nfunction correctionBasis(shape: Predictor, terms: readonly CorrectionTerm[]): Predictor[] {\n return [shape, ...terms.map((t) => (x: Readonly<Record<string, number>>) => shape(x) * x[t.input]! ** t.power)];\n}\n\n/**\n * Admit the declared terms one at a time, family by family in the declared\n * order and each family's powers in its declared order, while each lowers the\n * exploratory χ² significantly given the terms already admitted: F on\n * (1, ν_k) with p < α. The first term a family fails ends that family; the\n * next family is then tried. The F ratio divides by the residual χ²/ν, so an\n * understated σ does not inflate it.\n */\nfunction admitCorrection(\n shape: Predictor,\n families: readonly StudyCorrection[],\n rows: readonly StudyObservation[],\n alpha: number,\n): { terms: CorrectionTerm[]; steps: CorrectionStep[] } {\n const chi2With = (terms: readonly CorrectionTerm[]): number | null => {\n const basis = correctionBasis(shape, terms);\n const sol = fitLinear(rows, basis);\n return sol === null ? null : testRows(rows, combine(basis, sol.coef), terms.length + 1, alpha).chi2;\n };\n const steps: CorrectionStep[] = [];\n const admitted: CorrectionTerm[] = [];\n let prev = chi2With([]);\n families: for (const family of families) {\n for (const power of family.powers) {\n if (prev === null) break families;\n const reference = family.reference?.[String(power)];\n const term: CorrectionTerm = { input: family.input, power, ...(reference !== undefined ? { reference } : {}) };\n const trial = [...admitted, term];\n const dof = rows.length - (trial.length + 1);\n if (dof < 1) {\n steps.push({ input: term.input, power: term.power, F: null, dof, p: null, admitted: false, reason: 'ν < 1: too few exploratory rows to test another term' });\n break families;\n }\n const cur = chi2With(trial);\n if (cur === null) {\n steps.push({ input: term.input, power: term.power, F: null, dof, p: null, admitted: false, reason: 'degenerate with the terms before it on the exploratory rows' });\n break;\n }\n const F = cur > 0 ? Math.max(0, prev - cur) / (cur / dof) : Infinity;\n const p = fSurvival(F, 1, dof);\n const ok = p < alpha;\n steps.push({\n input: term.input,\n power: term.power,\n F,\n dof,\n p,\n admitted: ok,\n reason: ok ? `admitted: F = ${F.toPrecision(3)} on (1, ${dof}), p = ${fmtP(p)} < α` : `not admitted: F = ${F.toPrecision(3)} on (1, ${dof}), p = ${fmtP(p)} ≥ α`,\n });\n if (!ok) break;\n admitted.push(term);\n prev = cur;\n }\n }\n return { terms: admitted, steps };\n}\n\n/** Infix rendering of a scalar ExprNode for reports. */\nfunction exprToInfix(e: ExprNode): string {\n if (e.kind === 'symbol') return e.name;\n if (e.kind === 'op') {\n const parts = e.args.map((a) => (a.kind === 'op' && a.op !== '^' ? `(${exprToInfix(a)})` : exprToInfix(a)));\n return e.op === '^' ? `${parts[0]}^${parts[1]}` : parts.join(` ${e.op === '*' ? '·' : e.op} `);\n }\n return JSON.stringify(e);\n}\n\n// --- the study -------------------------------------------------------------\n\n/** The main holdout verdict assigned after candidate selection. @internal */\nexport type StudyVerdict = 'no-credible-candidate' | 'refuted-on-holdout' | 'survives-holdout' | 'untested-on-holdout';\n/** The separate replication classification assigned after fitting and holdout handling. @internal */\nexport type ReplicationOutcome =\n | 'survives-replication'\n | 'refuted-on-replication'\n | 'no-replication-data'\n | 'not-tested'\n | 'too-close';\n\n/** A searched candidate's chi-squared results with its credibility judgement and any admitted correction. @internal */\nexport interface CandidateTest extends ModelTest {\n readonly credible: boolean;\n readonly credibility: string;\n /** Set on a candidate from the declared correction families: m(x)·(1 + Σ c_k·u_k^p_k). */\n readonly correction?: {\n readonly base: string;\n readonly terms: readonly CorrectionCoefficient[];\n };\n}\n\n/** One fitted correction coefficient c_k = a_k/a_0, with its standard error and, when the file declared one, the reference it is compared with. @internal */\nexport interface CorrectionCoefficient {\n readonly input: string;\n readonly power: number;\n readonly coefficient: number;\n /** Delta-method standard error of a_k/a_0 from the fit's covariance; null when the inverse failed. */\n readonly stderr: number | null;\n /** The declared reference value, when the family states one for this power. */\n readonly reference?: number;\n /** (coefficient − reference)/stderr; present when both are. Reported, never a verdict. */\n readonly z?: number;\n}\n\n/** How the declared correction families were searched. @internal */\nexport interface StudyCorrectionReport {\n readonly families: readonly StudyCorrection[];\n readonly criterion: string;\n readonly perCandidate: readonly { readonly base: string; readonly steps: readonly CorrectionStep[]; readonly error?: string }[];\n}\n\n/** A proposed next measurement point or the reason no design suggestion was made. @internal */\nexport interface StudyDesignSuggestion {\n readonly abstained: boolean;\n readonly reason?: string;\n readonly against?: string;\n /** In the declared units of each input. */\n readonly point?: Readonly<Record<string, number>>;\n readonly discrimination?: number;\n readonly sigma?: number;\n readonly maxExploratoryDiscrimination?: number;\n readonly bounds?: 'declared' | 'exploratory-range';\n}\n\n/** The full report of a probe study run, including selection, holdout, replication and caveats. @internal */\nexport interface ProbeStudyResult {\n readonly studyId: string;\n readonly source: string;\n readonly provenance: StudyProvenance;\n readonly alpha: number;\n readonly target: { readonly name: string; readonly unit: string };\n readonly governing: readonly { readonly name: string; readonly unit: string }[];\n readonly counts: { readonly exploratory: number; readonly holdout: number; readonly replication: number };\n /** Set when the replication rows came from a separate file. */\n readonly replicationFile?: { readonly source: string; readonly provenance: StudyProvenance };\n /** `effective-variance` when any row has an input σ; the inputs that do. */\n readonly uncertainty: { readonly method: 'output-only' | 'effective-variance'; readonly inputs: readonly string[] };\n readonly correction: StudyCorrectionReport | null;\n readonly search: {\n readonly stopReason: SearchStopReason;\n readonly generated: number;\n readonly fitted: number;\n readonly rejected: number;\n readonly notes: readonly string[];\n };\n readonly nullModel: ModelTest;\n readonly candidates: readonly CandidateTest[];\n readonly selected: string | null;\n readonly verdict: StudyVerdict;\n readonly verdictReasons: readonly string[];\n readonly replication: ReplicationOutcome;\n /** Whether the replication rows are closer to the study rows than independent data can be. */\n readonly replicationIndependence: ReplicationIndependence;\n readonly baselines: readonly ModelTest[];\n readonly design: StudyDesignSuggestion;\n readonly caveats: readonly string[];\n readonly schemaVersion: string;\n}\n\n/** Runtime overrides controlling search budget and the study's test level. @internal */\nexport interface ProbeStudyOptions {\n readonly budget?: SearchBudget;\n /** Overrides the file's `criterion.alpha`. */\n readonly alpha?: number;\n}\n\nfunction fmtP(p: number | null): string {\n if (p === null) return 'n/a';\n return p === 0 ? '0 (underflow)' : p < 1e-3 ? p.toExponential(1) : p.toPrecision(2);\n}\n\nfunction credibility(\n t: ModelTest,\n nullTest: ModelTest,\n alpha: number,\n): { credible: boolean; credibility: string } {\n if (t.error) return { credible: false, credibility: t.error };\n const ex = t.exploratory;\n if (!ex || ex.pass === null) {\n return { credible: false, credibility: 'too few exploratory rows to test a fitted model (ν < 1)' };\n }\n if (!ex.pass) {\n return { credible: false, credibility: `fails on the exploratory rows (p = ${fmtP(ex.p)} < α = ${alpha})` };\n }\n if (nullTest.exploratory?.pass !== false) {\n return {\n credible: false,\n credibility: 'fits, but so does a constant: the exploratory data show no structure for it to explain',\n };\n }\n return { credible: true, credibility: `passes on the exploratory rows (p = ${fmtP(ex.p)} ≥ α = ${alpha}) and the constant model is rejected there` };\n}\n\nfunction designAgainst(\n study: ProbeStudy,\n sets: Split,\n candidate: FittedModel,\n baselines: readonly FittedModel[],\n): StudyDesignSuggestion {\n if (!candidate.predict) return { abstained: true, reason: 'no credible candidate to discriminate' };\n const predict = candidate.predict;\n // A live competitor has a predictor and passed on the exploratory rows; the guard types both.\n const isLive = (b: FittedModel): b is FittedModel & { predict: Predictor; test: ModelTest & { exploratory: SetTest } } =>\n b.predict !== null && b.test.exploratory?.pass === true;\n const live = baselines.filter(isLive).sort((a, b) => (b.test.exploratory.p ?? 0) - (a.test.exploratory.p ?? 0));\n const best = live[0];\n if (!best) {\n return {\n abstained: true,\n reason: baselines.length === 0\n ? 'no baseline declared; nothing to discriminate the candidate against'\n : 'no declared baseline passes on the exploratory rows; none is a live competitor',\n };\n }\n const sigmas = sets.exploratory.map((r) => r.sigma).sort((a, b) => a - b);\n const sigma = sigmas[Math.floor(sigmas.length / 2)]!;\n const grids = study.governing.map((g) => {\n const spec = study.design?.[g.name] ?? (() => {\n const vs = sets.exploratory.map((r) => r.inputs[g.name]!);\n return { min: Math.min(...vs), max: Math.max(...vs), steps: 8 };\n })();\n const steps = spec.min === spec.max ? 1 : Math.max(2, spec.steps);\n return Array.from({ length: steps }, (_, i) => (steps === 1 ? spec.min : spec.min + (i / (steps - 1)) * (spec.max - spec.min)));\n });\n let bestPoint: Record<string, number> | null = null;\n let bestDisc = -1;\n const idx = new Array<number>(grids.length).fill(0);\n const visit = (d: number): void => {\n if (d === grids.length) {\n const point: Record<string, number> = {};\n study.governing.forEach((g, i) => (point[g.name] = grids[i]![idx[i]!]!));\n let disc: number;\n try {\n disc = Math.abs(predict(point) - best.predict(point)) / sigma;\n } catch {\n return;\n }\n if (Number.isFinite(disc) && disc > bestDisc) {\n bestDisc = disc;\n bestPoint = point;\n }\n return;\n }\n for (let i = 0; i < grids[d]!.length; i++) {\n idx[d] = i;\n visit(d + 1);\n }\n };\n visit(0);\n if (bestPoint === null) return { abstained: true, reason: 'neither model is finite anywhere in the design bounds' };\n const chosen: Record<string, number> = bestPoint;\n // A reduce, not a spread: a spread of a large row set overflows the call stack.\n const maxEx = sets.exploratory.reduce((m, r) => Math.max(m, Math.abs(predict(r.inputs) - best.predict(r.inputs)) / r.sigma), 0);\n return {\n abstained: false,\n against: best.test.label,\n point: Object.fromEntries(study.governing.map((g) => [g.name, chosen[g.name]! / g.scale])),\n discrimination: bestDisc,\n sigma: sigma / study.target.scale,\n maxExploratoryDiscrimination: maxEx,\n bounds: study.design ? 'declared' : 'exploratory-range',\n };\n}\n\n/**\n * Run a study: search and fit on exploratory rows only, then test on withheld\n * rows. Never mutates the study.\n *\n * @internal\n */\nexport async function runProbeStudy(study: ProbeStudy, opts: ProbeStudyOptions = {}): Promise<ProbeStudyResult> {\n const alpha = opts.alpha ?? study.alpha;\n const sets = split(study);\n const inputsWithSigma = study.governing\n .map((g) => g.name)\n .filter((n) => study.observations.some((o) => n in o.inputSigma));\n // The id hashes the data, not the file paths: the same study as CSV or JSON has one id.\n const { source: _path, replication: repFile, ...content } = study;\n const studyId = `ps-${hashCanonical({ ...content, replicationProvenance: repFile?.provenance ?? null, alpha }).slice(0, 12)}`;\n\n // The search sees the exploratory rows and nothing else.\n const exploratoryRows = sets.exploratory.map((r) => ({ ...r.inputs, [study.target.name]: r.observed }));\n const gap = makeResidualGap(study.gap.id, study.gap.summary, study.gap.kind as Parameters<typeof makeResidualGap>[2]);\n const problem = problemFromResidualGap(\n gap,\n { name: study.target.name, dim: study.target.dim },\n study.governing.map((g) => ({ name: g.name, dim: g.dim })),\n datasetFromRows(exploratoryRows, study.target.name, 'exploratory-fit', `${studyId}#exploratory`),\n undefined,\n );\n const search = await runProbeSearch(problem, {\n budget: opts.budget,\n runId: `dr-${studyId.slice(3)}`,\n now: '1970-01-01T00:00:00.000Z',\n });\n\n const nullModel = scoreModel({ id: 'null', kind: 'null', label: 'constant', basis: [() => 1], fit: true }, sets, alpha, false).test;\n\n const fitted = search.candidates.filter((c) => c.id in search.fits);\n const corr = study.correction;\n const perCandidate: StudyCorrectionReport['perCandidate'][number][] = [];\n const specs = fitted.flatMap((c) => {\n const expr = bodyExpression(c.body);\n const shape: Predictor = (x) => evalExpr(expr, x);\n const label = `ĉ · ${exprToInfix(expr)}`;\n const base = { spec: { id: c.id, kind: 'candidate' as const, label, basis: [shape], fit: true }, complexity: c.complexity.astNodes };\n if (!corr) return [base];\n let admission: ReturnType<typeof admitCorrection>;\n try {\n admission = admitCorrection(shape, corr, sets.exploratory, alpha);\n } catch (e) {\n perCandidate.push({ base: c.id, steps: [], error: (e as Error).message });\n return [base];\n }\n perCandidate.push({ base: c.id, steps: admission.steps });\n const admitted = admission.terms;\n if (admitted.length === 0) return [base];\n const terms = admitted.map((t, j) => `c${sub(j + 1)}·${t.input}^${t.power}`).join(' + ');\n return [\n base,\n {\n spec: {\n id: `${c.id}×(1+${admitted.map((t) => `${t.input}^${t.power}`).join('+')})`,\n kind: 'candidate' as const,\n label: `${label} · (1 + ${terms})`,\n basis: correctionBasis(shape, admitted),\n fit: true,\n },\n complexity: c.complexity.astNodes + 4 * admitted.length,\n correction: { base: c.id, terms: admitted },\n },\n ];\n });\n const correctionOf = (\n s: (typeof specs)[number],\n coef: readonly number[] | null,\n covariance: readonly (readonly number[])[] | null,\n ): Pick<CandidateTest, 'correction'> => {\n if (!('correction' in s) || !s.correction || !coef) return {};\n const a0 = coef[0]!;\n return {\n correction: {\n base: s.correction.base,\n terms: s.correction.terms.map((t, j): CorrectionCoefficient => {\n const a = coef[j + 1]!;\n const coefficient = a / a0;\n // Delta method on c = a/a₀: Var(c) = Var(a)/a₀² + a²Var(a₀)/a₀⁴ − 2a·Cov(a, a₀)/a₀³.\n const cov = covariance;\n const variance = cov\n ? cov[j + 1]![j + 1]! / a0 ** 2 + (a * a * cov[0]![0]!) / a0 ** 4 - (2 * a * cov[j + 1]![0]!) / a0 ** 3\n : null;\n const stderr = variance !== null && Number.isFinite(variance) ? Math.sqrt(Math.max(0, variance)) : null;\n const reference = t.reference;\n const z = reference !== undefined && stderr !== null && stderr > 0 ? (coefficient - reference) / stderr : undefined;\n return {\n input: t.input,\n power: t.power,\n coefficient,\n stderr,\n ...(reference !== undefined ? { reference } : {}),\n ...(z !== undefined ? { z } : {}),\n };\n }),\n },\n };\n };\n const scored = specs.map((s) => {\n const m = scoreModel(s.spec, sets, alpha, false);\n return { model: m, spec: s.spec, complexity: s.complexity, extra: correctionOf(s, m.coef, m.covariance), ...credibility(m.test, nullModel, alpha) };\n });\n const credibleOnes = scored\n .filter((s) => s.credible)\n .sort((a, b) => (b.model.test.exploratory!.p! - a.model.test.exploratory!.p!) || a.complexity - b.complexity);\n const chosen = credibleOnes[0];\n\n const baselines = study.baselines.map((b) => {\n const f = parseFormula(b.formula);\n return scoreModel(\n { id: `baseline:${b.name}`, kind: 'baseline', label: b.name, basis: [(x) => f.evaluate({ ...x })], fit: b.fitPrefactor },\n sets,\n alpha,\n true,\n );\n });\n\n // Design is computed from exploratory fits only, before any withheld row is read.\n const design = chosen\n ? designAgainst(study, sets, chosen.model, baselines)\n : { abstained: true, reason: 'no credible candidate to discriminate' };\n\n const verdictReasons: string[] = [];\n let verdict: StudyVerdict;\n let replication: ReplicationOutcome = sets.replication.length === 0 ? 'no-replication-data' : 'not-tested';\n let selected: CandidateTest | null = null;\n const candidates: CandidateTest[] = scored.map((s) => ({ ...s.model.test, credible: s.credible, credibility: s.credibility, ...s.extra }));\n\n if (!chosen) {\n verdict = 'no-credible-candidate';\n if (fitted.length === 0) {\n verdictReasons.push(`the search produced no candidate that could be fit (search stop: ${search.stopReason})`);\n } else {\n for (const s of scored) verdictReasons.push(`${s.model.test.id}: ${s.credibility}`);\n }\n verdictReasons.push('the withheld rows were not consulted for any candidate');\n } else {\n const withheld = scoreModel(chosen.spec, sets, alpha, true).test;\n selected = { ...withheld, credible: true, credibility: chosen.credibility, ...chosen.extra };\n const i = candidates.findIndex((c) => c.id === selected!.id);\n candidates[i] = selected;\n const h = selected.holdout;\n if (!h) {\n verdict = 'untested-on-holdout';\n verdictReasons.push('the file has no holdout rows; the candidate is credible on exploratory data only');\n } else if (h.pass) {\n verdict = 'survives-holdout';\n const frozen = selected.fittedParameters > 1 ? 'coefficients' : 'prefactor';\n verdictReasons.push(`holdout χ² = ${h.chi2.toPrecision(3)} on ν = ${h.dof} (p = ${fmtP(h.p)} ≥ α = ${alpha}) with the exploratory ${frozen} frozen`);\n } else {\n verdict = 'refuted-on-holdout';\n verdictReasons.push(\n `holdout χ² = ${h.chi2.toPrecision(3)} on ν = ${h.dof} (p = ${fmtP(h.p)} < α = ${alpha}); ` +\n `worst row ${h.worstRow} at ${h.maxAbsZ.toPrecision(3)}σ`,\n );\n }\n const rep = selected.replication;\n if (rep) replication = rep.pass ? 'survives-replication' : 'refuted-on-replication';\n }\n // Rows closer to the study's than independent data can be are not a replication, whatever they agree with.\n const independence = replicationIndependence(study.observations, alpha);\n if (independence.tooClose) replication = 'too-close';\n const corrInputs = corr?.map((c) => `'${c.input}'`).join(', ') ?? '';\n const sharedCalibration =\n repFile?.provenance.calibration !== undefined &&\n study.provenance.calibration !== undefined &&\n provenanceKey(repFile.provenance.calibration) === provenanceKey(study.provenance.calibration);\n\n const caveats = [\n 'A fit is not a mechanism: a candidate that survives a holdout was not refuted by these rows; ' +\n 'that does not make it the causal explanation.',\n 'Every test assumes independent Gaussian errors with the declared σ; a mis-stated σ changes every verdict.',\n ...(study.baselines.length > 0\n ? ['The baselines are the file author\\'s; UPT cannot verify they were chosen before the holdout was seen.']\n : []),\n ...(study.provenance.synthetic\n ? ['SYNTHETIC DATA: these rows were generated, not measured. A result on them is a control of the method, not evidence about nature.']\n : ['The file declares these rows measured; UPT has not verified that provenance.']),\n ...(study.provenance.synthetic || repFile?.provenance.synthetic\n ? ['A synthetic control whose generating law was chosen knowing the answer shows only that the method recovers ' +\n 'that law; it is not a blind test of finding an unknown one. UPT ships no blind control.']\n : []),\n ...(repFile\n ? [`The replication rows come from ${repFile.source}, whose provenance is its author's declaration. UPT checked only ` +\n 'that its source and acquisition differ from the study\\'s (ignoring case, spacing and punctuation), that no row ' +\n 'repeats a study row\\'s data exactly, and that rows at a study row\\'s inputs are not closer to it than their σ ' +\n 'allows, as an identical or an affine (rescaled or shifted) copy, each tested at α/2. A copy at altered inputs, ' +\n 'or of rows the study does not contain, is not caught.']\n : sets.replication.length > 0\n ? ['The replication rows are in the study file and share its provenance block (calibration included); only their ' +\n 'row source differs from the fit rows\\'.']\n : []),\n ...(sharedCalibration\n ? [`The replication file declares the study's own calibration ('${study.provenance.calibration}'): whatever that ` +\n 'calibration gets wrong, both share, so the replication does not test it.']\n : []),\n ...(inputsWithSigma.length > 0\n ? ['Input σ is propagated to first order (effective variance): exact for a model linear in the input, ' +\n 'approximate when the model curves appreciably over ±σ_x.']\n : []),\n ...(corr && corr.length === 1\n ? [`The correction family in ${corrInputs} was declared by the file; only that family was searched, and UPT ` +\n 'cannot verify it was declared before the data were seen.']\n : corr\n ? [`The correction families in ${corrInputs} were declared by the file; only those families were searched, and UPT ` +\n 'cannot verify they were declared before the data were seen. The families are additive: a cross term (u·v) ' +\n 'is not in them, and the order they were declared in decides which terms are tried first.']\n : []),\n ];\n\n return {\n studyId,\n source: study.source,\n provenance: study.provenance,\n alpha,\n target: { name: study.target.name, unit: study.target.unit },\n governing: study.governing.map((g) => ({ name: g.name, unit: g.unit })),\n counts: { exploratory: sets.exploratory.length, holdout: sets.holdout.length, replication: sets.replication.length },\n ...(repFile ? { replicationFile: repFile } : {}),\n uncertainty: { method: inputsWithSigma.length > 0 ? 'effective-variance' : 'output-only', inputs: inputsWithSigma },\n correction: corr\n ? {\n families: corr,\n criterion:\n `m(x)·(1 + ${corr.map((c) => `Σ c_k·${c.input}^p_k`).join(' + ')}) for each searched monomial m, fit on the ` +\n 'exploratory rows only; terms admitted in the declared order' +\n (corr.length > 1 ? ', family by family (the first term a family fails ends that family),' : '') +\n ` while each passes an extra-sum-of-squares F test at p < α = ${alpha}`,\n perCandidate,\n }\n : null,\n search: {\n stopReason: search.stopReason,\n generated: search.candidates.length,\n fitted: fitted.length,\n rejected: search.rejections.length,\n // The search is given no withheld rows by design; the study tests them itself.\n notes: [...new Set(search.wording)].filter((w) => w !== NO_HOLDOUT_WORDING),\n },\n nullModel,\n candidates,\n selected: selected?.id ?? null,\n verdict,\n verdictReasons,\n replication,\n replicationIndependence: independence,\n baselines: baselines.map((b) => b.test),\n design,\n caveats,\n schemaVersion: SCHEMA_VERSION,\n };\n}\n\n// --- report ----------------------------------------------------------------\n\nfunction setLine(name: string, t: SetTest | null): string {\n if (!t) return `${name}: no rows`;\n const verdict = t.pass === null ? 'undecidable (ν < 1)' : t.pass ? 'pass' : 'FAIL';\n const nu = t.dof >= 1 ? `χ²/ν = ${(t.chi2 / t.dof).toPrecision(3)} (ν = ${t.dof})` : `χ² = ${t.chi2.toPrecision(3)}`;\n return `${name}: ${nu}, p = ${fmtP(t.p)}, max |z| = ${t.maxAbsZ.toPrecision(3)}${t.worstRow ? ` at ${t.worstRow}` : ''} — ${verdict}`;\n}\n\nfunction fmtPoint(point: Readonly<Record<string, number>>, governing: ProbeStudyResult['governing']): string {\n return governing.map((g) => `${g.name}=${Number(point[g.name]!.toPrecision(4))}${g.unit ? ` ${g.unit}` : ''}`).join(', ');\n}\n\n/** Scientist-facing study report. @internal */\nexport function formatProbeStudy(r: ProbeStudyResult): string {\n const L: string[] = [];\n L.push(`upt probe study — fit on exploratory rows, test on withheld rows [study ${r.studyId}]`);\n L.push('⚠ experimental Product B. Not a discovery claim. `upt discover` is the identification funnel.');\n if (r.provenance.synthetic) {\n L.push(`⚠ SYNTHETIC DATA — generated, not measured. source: ${r.provenance.source}`);\n } else {\n L.push(` data declared measured (not verified by UPT). source: ${r.provenance.source}`);\n }\n if (r.provenance.acquisition) L.push(` acquisition: ${r.provenance.acquisition}`);\n if (r.provenance.calibration) L.push(` calibration: ${r.provenance.calibration}`);\n L.push(\n ` rows: ${r.counts.exploratory} exploratory (searched and fit) · ${r.counts.holdout} holdout (withheld) · ` +\n `${r.counts.replication} replication (withheld, independent source)`,\n );\n const rf = r.replicationFile;\n if (rf) {\n L.push(\n rf.provenance.synthetic\n ? ` replication file: ${rf.source} — ⚠ SYNTHETIC DATA, generated, not measured. source: ${rf.provenance.source}`\n : ` replication file: ${rf.source} — declared measured (not verified by UPT). source: ${rf.provenance.source}`,\n );\n if (rf.provenance.acquisition) L.push(` acquisition: ${rf.provenance.acquisition}`);\n }\n L.push(\n ` criterion: χ² with the declared σ at α = ${r.alpha}. A candidate is credible only if it passes on the ` +\n 'exploratory rows and a constant model is rejected there.',\n );\n L.push(\n r.uncertainty.method === 'effective-variance'\n ? ` uncertainty: σ_eff² = σ_y² + Σ_i (∂f/∂x_i · σ_x_i)² over {${r.uncertainty.inputs.join(', ')}} (effective variance; ` +\n 'each model\\'s own slopes at the recorded inputs, fits reweighted to a fixed point; first order in σ_x)'\n : ' uncertainty: σ on the target only; the inputs are taken as exact',\n );\n L.push('');\n L.push(\n ` search (exploratory rows only): ${r.search.generated} candidate(s) generated, ${r.search.fitted} fit, ` +\n `${r.search.rejected} rejected; stop: ${r.search.stopReason}`,\n );\n for (const n of r.search.notes.slice(0, 6)) L.push(` ${n}`);\n if (r.correction) {\n L.push(` declared correction ${r.correction.families.length > 1 ? 'families' : 'family'}: ${r.correction.criterion}`);\n for (const pc of r.correction.perCandidate) {\n const steps = pc.error ?? (pc.steps.map((s) => `${s.input}^${s.power} ${s.reason}`).join('; ') || 'no term tested');\n L.push(` on ${pc.base}: ${steps}`);\n }\n }\n L.push(` null model (constant ${r.target.name}) — ${setLine('exploratory', r.nullModel.exploratory)}`);\n L.push('');\n const pm = (stderr: number | null) => (stderr === null ? '' : ` ± ${stderr.toPrecision(2)}`);\n for (const c of r.candidates) {\n const pre = c.prefactor === null ? '' : `, ĉ = ${c.prefactor.toPrecision(5)}${pm(c.prefactorStderr)} (SI)`;\n L.push(` candidate ${c.id}: ${c.label}${pre}`);\n if (c.correction) {\n const term = (t: CorrectionCoefficient, j: number): string => {\n const against =\n t.z !== undefined && t.reference !== undefined\n ? ` (z = ${t.z >= 0 ? '+' : ''}${t.z.toFixed(1)} against the declared ${Number(t.reference.toPrecision(4))})`\n : '';\n return `c${sub(j + 1)} = ${t.coefficient.toPrecision(4)}${pm(t.stderr)}${against}`;\n };\n L.push(` ${c.correction.terms.map(term).join(', ')} (fit on exploratory rows)`);\n }\n L.push(` ${setLine('exploratory', c.exploratory)}`);\n L.push(` ${c.credible ? 'credible' : 'not credible'}: ${c.credibility}`);\n if (c.id === r.selected) {\n L.push(` ${setLine('holdout', c.holdout)}`);\n L.push(` ${setLine('replication', c.replication)}`);\n }\n }\n if (r.candidates.length === 0) L.push(' no candidate could be fit.');\n if (r.baselines.length > 0) {\n L.push('');\n L.push(' baselines (declared by the file; same rows, same criterion):');\n for (const b of r.baselines) {\n const how = b.fittedParameters === 0 ? 'fixed, no fitted parameter' : `prefactor fit on exploratory rows = ${b.prefactor?.toPrecision(5)}${pm(b.prefactorStderr)}`;\n L.push(` ${b.label} [${how}]`);\n if (b.error) {\n L.push(` not evaluable: ${b.error}`);\n continue;\n }\n for (const [name, t] of [['exploratory', b.exploratory], ['holdout', b.holdout], ['replication', b.replication]] as const) {\n L.push(` ${setLine(name, t)}`);\n }\n }\n }\n L.push('');\n const d = r.design;\n L.push(' discriminating measurement (a suggestion, not evidence):');\n if (d.abstained) {\n L.push(` abstained: ${d.reason}`);\n } else {\n L.push(\n ` the candidate and '${d.against}' differ most at ${fmtPoint(d.point!, r.governing)}: ` +\n `${d.discrimination!.toPrecision(3)}σ (σ = ${Number(d.sigma!.toPrecision(3))} ${r.target.unit}, the median exploratory ` +\n `${r.uncertainty.method === 'effective-variance' ? 'target σ, input σ not included' : 'σ'}; ` +\n `${d.bounds === 'declared' ? 'declared design bounds' : 'bounds = exploratory range; declare \"design\" to look beyond it'})`,\n );\n L.push(\n ` on the exploratory rows they differ by at most ${d.maxExploratoryDiscrimination!.toPrecision(2)}σ` +\n (d.maxExploratoryDiscrimination! < 1 ? ': those rows cannot tell them apart' : ''),\n );\n }\n L.push('');\n L.push(` verdict: ${r.verdict}`);\n for (const why of r.verdictReasons) L.push(` ${why}`);\n L.push(` replication: ${r.replication}`);\n if (r.counts.replication > 0) L.push(` closeness: ${r.replicationIndependence.reason}`);\n L.push('');\n for (const c of r.caveats) L.push(` ⚠ ${c}`);\n return L.join('\\n');\n}\n"]}
|