universal-physics-tensor 0.32.0 → 0.34.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 +26 -6
- package/dist/bridges/be37-cassini-confrontation.d.ts +43 -0
- package/dist/bridges/be37-cassini-confrontation.d.ts.map +1 -0
- package/dist/bridges/be37-cassini-confrontation.js +34 -0
- package/dist/bridges/be37-cassini-confrontation.js.map +1 -0
- package/dist/bridges/be48-collapse-confrontation.d.ts +52 -0
- package/dist/bridges/be48-collapse-confrontation.d.ts.map +1 -0
- package/dist/bridges/be48-collapse-confrontation.js +37 -0
- package/dist/bridges/be48-collapse-confrontation.js.map +1 -0
- package/dist/bridges/confrontation-coverage.d.ts +5 -10
- package/dist/bridges/confrontation-coverage.d.ts.map +1 -1
- package/dist/bridges/confrontation-coverage.js +7 -11
- package/dist/bridges/confrontation-coverage.js.map +1 -1
- package/dist/bridges/confrontations.d.ts +25 -0
- package/dist/bridges/confrontations.d.ts.map +1 -0
- package/dist/bridges/confrontations.js +125 -0
- package/dist/bridges/confrontations.js.map +1 -0
- package/dist/bridges/observations/types.d.ts +70 -0
- package/dist/bridges/observations/types.d.ts.map +1 -0
- package/dist/bridges/observations/types.js +22 -0
- package/dist/bridges/observations/types.js.map +1 -0
- package/dist/bridges/sensitivity.d.ts +13 -0
- package/dist/bridges/sensitivity.d.ts.map +1 -0
- package/dist/bridges/sensitivity.js +58 -0
- package/dist/bridges/sensitivity.js.map +1 -0
- package/dist/canonical/canonical-equation.d.ts +1 -1
- package/dist/canonical/canonical-equation.d.ts.map +1 -1
- package/dist/canonical/entries/atomic.d.ts +2 -1
- package/dist/canonical/entries/atomic.d.ts.map +1 -1
- package/dist/canonical/entries/atomic.js +22 -1
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts +23 -0
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -0
- package/dist/canonical/entries/condensed-matter.js +173 -0
- package/dist/canonical/entries/condensed-matter.js.map +1 -0
- package/dist/canonical/entries/electromagnetism.d.ts +4 -0
- package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
- package/dist/canonical/entries/electromagnetism.js +97 -1
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts +15 -3
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +103 -2
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/statistical-mechanics.d.ts +24 -0
- package/dist/canonical/entries/statistical-mechanics.d.ts.map +1 -0
- package/dist/canonical/entries/statistical-mechanics.js +94 -0
- package/dist/canonical/entries/statistical-mechanics.js.map +1 -0
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts +5 -4
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +60 -0
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/canonical/registry.d.ts.map +1 -1
- package/dist/canonical/registry.js +4 -0
- package/dist/canonical/registry.js.map +1 -1
- package/dist/cli/command.d.ts +0 -3
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js +0 -13
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/confront.d.ts +3 -0
- package/dist/cli/commands/confront.d.ts.map +1 -0
- package/dist/cli/commands/confront.js +94 -0
- package/dist/cli/commands/confront.js.map +1 -0
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +11 -5
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli-api.d.ts +6 -0
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +6 -0
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/consequence.d.ts +62 -0
- package/dist/composition/consequence.d.ts.map +1 -0
- package/dist/composition/consequence.js +82 -0
- package/dist/composition/consequence.js.map +1 -0
- package/dist/composition/discovery.d.ts +2 -2
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -67,6 +67,7 @@ npm run upt -- coverage # audit each bridge's
|
|
|
67
67
|
npm run upt -- canonical # the standard-physics L-layer registry (answer key)
|
|
68
68
|
npm run upt -- recover # validate bridges against standard physics
|
|
69
69
|
npm run upt -- symbolic --simplify # compose + fold bridges' SYMBOLIC forms (MathTS simplify)
|
|
70
|
+
npm run upt -- confront # run the catalog's committed real-data confrontations (predicted vs observed)
|
|
70
71
|
npm run upt -- map --source=both --format=mermaid # VISUAL map of the graph (Mermaid; also --format=dot|svg, --proposed, --out=PATH)
|
|
71
72
|
npm run upt -- map --equation "period = 2*pi*sqrt(length/gravity)" # drop YOUR OWN equation onto the map: dimensional check + where it lands
|
|
72
73
|
# ...and YOUR OWN equations:
|
|
@@ -247,8 +248,8 @@ delivered a measured **5-6× RK4 geodesic-integrator speedup** (see [CHANGELOG](
|
|
|
247
248
|
|
|
248
249
|
## Development Status
|
|
249
250
|
|
|
250
|
-
**Current version:** v0.
|
|
251
|
-
|
|
251
|
+
**Current version:** v0.34.0 — [npm `latest`](https://www.npmjs.com/package/universal-physics-tensor)
|
|
252
|
+
— building on
|
|
252
253
|
the **v0.8.0 → v0.23.0** rollup arc (composition
|
|
253
254
|
graph + GW170817 / BE-23 data confrontations + catalog adjudication, Part-IX
|
|
254
255
|
Phase C/D, the full catalog→graph migration, the bridge-inference +
|
|
@@ -287,11 +288,24 @@ unknown/mistyped flags now exit 2 instead of being silently ignored. v0.31.0
|
|
|
287
288
|
(`src/composition/adjudication.ts`) plus a calibration benchmark, so `upt
|
|
288
289
|
discover` remembers past human verdicts and folds recorded decoy/entailed
|
|
289
290
|
candidates out of its default output instead of re-surfacing them every run.
|
|
291
|
+
Discovery-hardening Phase 4 Unit A adds **consequence propagation**
|
|
292
|
+
(`src/composition/consequence.ts`) — a machine pre-classifier that labels
|
|
293
|
+
each `promising` candidate `entailed` (re-derives a known canonical
|
|
294
|
+
equation), `novel-consequence` (a valid, unmatched algebraic consequence),
|
|
295
|
+
or `inconclusive`, surfaced as a `[consequence: …]` trailer in `upt discover`
|
|
296
|
+
and a `consequence` field under `--json`; annotation-only, so the funnel's
|
|
297
|
+
promising/inert/contradictory counts never move. v0.34.0 **expands the
|
|
298
|
+
canonical L-layer 66 → 93 equations** (+41%, 27 new cited monomial laws) across
|
|
299
|
+
a new `condensed-matter` domain (Drude/Fermi/Hall) plus fluids, EM, thermo,
|
|
300
|
+
statistical mechanics, and mechanics/quantum — and, just as importantly, maps
|
|
301
|
+
the boundaries of the monomial L0 model: sums, transcendentals, hidden length
|
|
302
|
+
scales, dimensionless numbers, and pure counts are excluded (not force-fit) and
|
|
303
|
+
logged for a future L1-sum/L2 tier (`docs/research/canonical-expansion-candidate-audit.md`).
|
|
290
304
|
|
|
291
305
|
| Metric | Value |
|
|
292
306
|
|---|---|
|
|
293
307
|
| Bridge catalog | **44** (IDs 11-54) — 8 established · 33 speculative · 3 highly-speculative · 0 invalid; membership-adjudicated **36 bridges · 5 not-a-bridge · 3 contested**; **41-edge composition graph** (full migration, 131 centralized quantity nodes) with a bridge-inference suite — **identifiability classifier**, **retrodiction harness**, **Buckingham-π enumerator**, unified by an **`explainQuantity`** entry point, plus (v0.12) the candidate-vetting **discovery loop**, regime-prediction map, empirical-coverage audit, and **symbolic composition** (the Observable contract + MathTS simplification) |
|
|
294
|
-
| Test suite | **
|
|
308
|
+
| Test suite | **3548** passing (4 skipped, 1 todo; incl. property-based algebra tests) across 328 files — gated by CI |
|
|
295
309
|
| `tsc --noEmit` | clean (src + strict `tsc -p tsconfig.tests.json`) |
|
|
296
310
|
| GR validation anchors | BE-52 Mercury perihelion relErr 1.8×10⁻⁷ · BE-37 Shapiro delay relErr ~2×10⁻⁸ |
|
|
297
311
|
| First derived relation | E_min(M) = ℏc³ln2/(8πGM) from BE-42 ∘ BE-16, relErr ≤ 10⁻¹² (pre-registered CT-1) |
|
|
@@ -344,10 +358,16 @@ spec's own revision ledger is at
|
|
|
344
358
|
namespacing rule (`CompositionAliasError` + reviewable
|
|
345
359
|
`SOURCE_ALIAS_DISPOSITIONS`); the ~90 new quantity-naming judgments
|
|
346
360
|
are the standing physicist-review surface.
|
|
347
|
-
- **More data confrontations** — GW170817 → BE-36
|
|
361
|
+
- **More data confrontations** — GW170817 → BE-36, the BE-23
|
|
348
362
|
Planckian-dissipation check (Legros et al. 2019, honest
|
|
349
|
-
aggregate-level encoding)
|
|
350
|
-
|
|
363
|
+
aggregate-level encoding), BE-37 Shapiro delay → Cassini PPN-γ, and
|
|
364
|
+
BE-48 GRW collapse rate → the LISA-Pathfinder CSL bound have shipped
|
|
365
|
+
(data-confronted bridges 3 → 5), unified behind `upt confront
|
|
366
|
+
[--bridge] [--sensitivity]` and a typed observation registry. Upgrading
|
|
367
|
+
BE-23 to the per-material α table, BE-16 Landauer/Bérut (machinery
|
|
368
|
+
built, paywalled Fig-4 asymptote pending), and the BE-38 MOND/SPARC
|
|
369
|
+
deep-limit (contingent on a genuine-test determination) are the next
|
|
370
|
+
bounded steps.
|
|
351
371
|
- **Three.js / game-engine class visualization** in a separate repo
|
|
352
372
|
(out of UPT scope per project decision; see
|
|
353
373
|
`docs/planning/Future-Production-Hardening.md`).
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BE-37 × Cassini — confront the Shapiro-delay bridge with the Cassini
|
|
3
|
+
* radio-link measurement of the PPN parameter γ (Bertotti, Iess & Tortora
|
|
4
|
+
* 2003). BE-37 encodes the γ=1 general-relativistic Shapiro delay, so the
|
|
5
|
+
* bridge PREDICTS γ = 1 exactly; the confrontation observable is the
|
|
6
|
+
* measured γ. This is the framework's first Shapiro/PPN data confrontation
|
|
7
|
+
* (be-37 has a numerical validation anchor but no data confrontation before
|
|
8
|
+
* this). Value-kind.
|
|
9
|
+
*
|
|
10
|
+
* @module bridges/be37-cassini-confrontation
|
|
11
|
+
*/
|
|
12
|
+
import type { ObservationProvenance } from './observations/types.js';
|
|
13
|
+
/** A PPN-γ observation record. @public */
|
|
14
|
+
export interface CassiniObservation {
|
|
15
|
+
/** Measured PPN parameter γ (dimensionless). */
|
|
16
|
+
readonly observed_gamma: number;
|
|
17
|
+
/** 1σ on the measured γ. */
|
|
18
|
+
readonly observed_gamma_sigma: number;
|
|
19
|
+
readonly provenance: ObservationProvenance;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Cassini 2002 solar-conjunction Shapiro-delay determination of γ:
|
|
23
|
+
* γ = 1 + (2.1 ± 2.3)×10⁻⁵ (Bertotti-Iess-Tortora 2003, Nature 425:374).
|
|
24
|
+
*
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export declare const CASSINI: CassiniObservation;
|
|
28
|
+
/** Result of confronting BE-37 with a PPN-γ measurement. @public */
|
|
29
|
+
export interface BE37ConfrontationResult {
|
|
30
|
+
/** BE-37 predicts γ = 1 (GR Shapiro form). */
|
|
31
|
+
readonly predicted_gamma: number;
|
|
32
|
+
readonly observed_gamma: number;
|
|
33
|
+
readonly residual_in_sigma: number;
|
|
34
|
+
readonly withinObserved: boolean;
|
|
35
|
+
readonly observation: CassiniObservation;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Confront BE-37's γ=1 Shapiro prediction with the Cassini γ measurement.
|
|
39
|
+
*
|
|
40
|
+
* @public
|
|
41
|
+
*/
|
|
42
|
+
export declare function confrontBE37(obs?: CassiniObservation): BE37ConfrontationResult;
|
|
43
|
+
//# sourceMappingURL=be37-cassini-confrontation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"be37-cassini-confrontation.d.ts","sourceRoot":"","sources":["../../src/bridges/be37-cassini-confrontation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGrE,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,4BAA4B;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,kBASrB,CAAC;AAEF,oEAAoE;AACpE,MAAM,WAAW,uBAAuB;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;CAC1C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,kBAA4B,GAAG,uBAAuB,CAUvF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { residualInSigma } from './observations/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Cassini 2002 solar-conjunction Shapiro-delay determination of γ:
|
|
4
|
+
* γ = 1 + (2.1 ± 2.3)×10⁻⁵ (Bertotti-Iess-Tortora 2003, Nature 425:374).
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export const CASSINI = {
|
|
9
|
+
observed_gamma: 1 + 2.1e-5,
|
|
10
|
+
observed_gamma_sigma: 2.3e-5,
|
|
11
|
+
provenance: {
|
|
12
|
+
citation: 'Bertotti, Iess & Tortora 2003, Nature 425:374-376 (Cassini radio-link Shapiro delay, June 2002 solar conjunction)',
|
|
13
|
+
year: 2003,
|
|
14
|
+
retrieved: '2026-07-02',
|
|
15
|
+
note: 'BE-37 encodes the gamma=1 GR Shapiro form, so the predicted PPN gamma is exactly 1; the observable confronted is Cassini gamma.',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Confront BE-37's γ=1 Shapiro prediction with the Cassini γ measurement.
|
|
20
|
+
*
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
export function confrontBE37(obs = CASSINI) {
|
|
24
|
+
const predicted_gamma = 1;
|
|
25
|
+
const residual_in_sigma = residualInSigma(predicted_gamma, obs.observed_gamma, obs.observed_gamma_sigma);
|
|
26
|
+
return {
|
|
27
|
+
predicted_gamma,
|
|
28
|
+
observed_gamma: obs.observed_gamma,
|
|
29
|
+
residual_in_sigma,
|
|
30
|
+
withinObserved: residual_in_sigma <= 1,
|
|
31
|
+
observation: obs,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=be37-cassini-confrontation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"be37-cassini-confrontation.js","sourceRoot":"","sources":["../../src/bridges/be37-cassini-confrontation.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAW1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAuB;IACzC,cAAc,EAAE,CAAC,GAAG,MAAM;IAC1B,oBAAoB,EAAE,MAAM;IAC5B,UAAU,EAAE;QACV,QAAQ,EAAE,mHAAmH;QAC7H,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE,iIAAiI;KACxI;CACF,CAAC;AAYF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAA0B,OAAO;IAC5D,MAAM,eAAe,GAAG,CAAC,CAAC;IAC1B,MAAM,iBAAiB,GAAG,eAAe,CAAC,eAAe,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACzG,OAAO;QACL,eAAe;QACf,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,iBAAiB;QACjB,cAAc,EAAE,iBAAiB,IAAI,CAAC;QACtC,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BE-48 × LISA-Pathfinder — confront the GRW mass-amplified localization
|
|
3
|
+
* rate with the experimental upper bound on spontaneous-collapse rates
|
|
4
|
+
* (Carlesso et al. 2016). BE-48 encodes the GRW single-nucleon rate
|
|
5
|
+
* λ₀ = 10⁻¹⁶ s⁻¹; LISA-Pathfinder bounds the CSL rate at
|
|
6
|
+
* λ ≤ 2.96×10⁻⁸ s⁻¹ (r_C = 100 nm). The GRW rate sits ~8 orders below the
|
|
7
|
+
* exclusion → NOT excluded. Upper-bound-kind.
|
|
8
|
+
*
|
|
9
|
+
* MODEL CAVEAT: GRW and CSL are related-but-distinct collapse models; this
|
|
10
|
+
* is a fail-to-exclude, not a confirmation (GRW's original rate predicts no
|
|
11
|
+
* observable collapse). The same bound overlaps Adler's proposed floor
|
|
12
|
+
* 10⁻⁸±² s⁻¹.
|
|
13
|
+
*
|
|
14
|
+
* @module bridges/be48-collapse-confrontation
|
|
15
|
+
*/
|
|
16
|
+
import type { ObservationProvenance } from './observations/types.js';
|
|
17
|
+
/** A collapse-rate upper-bound observation. @public */
|
|
18
|
+
export interface CollapseBoundObservation {
|
|
19
|
+
/** Experimental upper bound on the collapse rate (s⁻¹). */
|
|
20
|
+
readonly bound_rate_per_s: number;
|
|
21
|
+
/** 1σ on the bound (s⁻¹). */
|
|
22
|
+
readonly bound_sigma_per_s: number;
|
|
23
|
+
/** Correlation length the bound is quoted at (m). */
|
|
24
|
+
readonly r_C_m: number;
|
|
25
|
+
readonly provenance: ObservationProvenance;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* LISA-Pathfinder CSL upper bound: λ ≤ (2.96 ± 0.12)×10⁻⁸ s⁻¹ at
|
|
29
|
+
* r_C = 100 nm (Carlesso et al. 2016, arXiv 1606.03637 / PRD 95:084054;
|
|
30
|
+
* data Armano et al. 2016, PRL 116:231101).
|
|
31
|
+
*
|
|
32
|
+
* @public
|
|
33
|
+
*/
|
|
34
|
+
export declare const LISA_PATHFINDER_CSL: CollapseBoundObservation;
|
|
35
|
+
/** Result of confronting BE-48 with a collapse-rate bound. @public */
|
|
36
|
+
export interface BE48ConfrontationResult {
|
|
37
|
+
/** GRW single-nucleon rate λ₀ (s⁻¹) = evaluateGRWLocalization at m = m_0. */
|
|
38
|
+
readonly predicted_rate_per_s: number;
|
|
39
|
+
readonly bound_rate_per_s: number;
|
|
40
|
+
/** predicted ≤ bound (not excluded). */
|
|
41
|
+
readonly satisfied: boolean;
|
|
42
|
+
readonly observation: CollapseBoundObservation;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Confront BE-48's GRW single-nucleon rate with an experimental collapse
|
|
46
|
+
* bound. The single-nucleon rate is `evaluateGRWLocalization` at m = m_0
|
|
47
|
+
* (mass ratio 1), i.e. exactly λ₀.
|
|
48
|
+
*
|
|
49
|
+
* @public
|
|
50
|
+
*/
|
|
51
|
+
export declare function confrontBE48(obs?: CollapseBoundObservation): BE48ConfrontationResult;
|
|
52
|
+
//# sourceMappingURL=be48-collapse-confrontation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"be48-collapse-confrontation.d.ts","sourceRoot":"","sources":["../../src/bridges/be48-collapse-confrontation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGrE,uDAAuD;AACvD,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,6BAA6B;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,wBAUjC,CAAC;AAEF,sEAAsE;AACtE,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;CAChD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,wBAA8C,GAAG,uBAAuB,CASzG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { evaluateGRWLocalization } from './equations/be-48-grw-localization.js';
|
|
2
|
+
/**
|
|
3
|
+
* LISA-Pathfinder CSL upper bound: λ ≤ (2.96 ± 0.12)×10⁻⁸ s⁻¹ at
|
|
4
|
+
* r_C = 100 nm (Carlesso et al. 2016, arXiv 1606.03637 / PRD 95:084054;
|
|
5
|
+
* data Armano et al. 2016, PRL 116:231101).
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export const LISA_PATHFINDER_CSL = {
|
|
10
|
+
bound_rate_per_s: 2.96e-8,
|
|
11
|
+
bound_sigma_per_s: 0.12e-8,
|
|
12
|
+
r_C_m: 1e-7,
|
|
13
|
+
provenance: {
|
|
14
|
+
citation: 'Carlesso, Bassi, Falferi & Vinante 2016, arXiv:1606.03637 / Phys. Rev. D 95:084054 (2017); LISA-Pathfinder data Armano et al. 2016, PRL 116:231101',
|
|
15
|
+
year: 2016,
|
|
16
|
+
retrieved: '2026-07-02',
|
|
17
|
+
note: 'CSL bound; BE-48 encodes the GRW single-nucleon rate. GRW rate ~8 orders below the exclusion: fail-to-exclude, NOT a confirmation. The bound overlaps Adler 10^-8±2 /s.',
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Confront BE-48's GRW single-nucleon rate with an experimental collapse
|
|
22
|
+
* bound. The single-nucleon rate is `evaluateGRWLocalization` at m = m_0
|
|
23
|
+
* (mass ratio 1), i.e. exactly λ₀.
|
|
24
|
+
*
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export function confrontBE48(obs = LISA_PATHFINDER_CSL) {
|
|
28
|
+
const m_0 = 1.67e-27; // nucleon mass, the GRW reference
|
|
29
|
+
const predicted_rate_per_s = evaluateGRWLocalization({ m_kg: m_0, m_0_kg: m_0 });
|
|
30
|
+
return {
|
|
31
|
+
predicted_rate_per_s,
|
|
32
|
+
bound_rate_per_s: obs.bound_rate_per_s,
|
|
33
|
+
satisfied: predicted_rate_per_s <= obs.bound_rate_per_s,
|
|
34
|
+
observation: obs,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=be48-collapse-confrontation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"be48-collapse-confrontation.js","sourceRoot":"","sources":["../../src/bridges/be48-collapse-confrontation.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAahF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA6B;IAC3D,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,OAAO;IAC1B,KAAK,EAAE,IAAI;IACX,UAAU,EAAE;QACV,QAAQ,EAAE,oJAAoJ;QAC9J,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE,yKAAyK;KAChL;CACF,CAAC;AAYF;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgC,mBAAmB;IAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,kCAAkC;IACxD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACjF,OAAO;QACL,oBAAoB;QACpB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,SAAS,EAAE,oBAAoB,IAAI,GAAG,CAAC,gBAAgB;QACvD,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -18,16 +18,11 @@
|
|
|
18
18
|
* @module bridges/confrontation-coverage
|
|
19
19
|
*/
|
|
20
20
|
/**
|
|
21
|
-
* Catalog ids with a committed real-data confrontation
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* (be52-mercury-confrontation.ts) — the first established-bridge
|
|
27
|
-
* confrontation, GR's original empirical triumph
|
|
28
|
-
*
|
|
29
|
-
* Single source of truth — also consumed by `composition/bridge-analysis.ts`
|
|
30
|
-
* (the priority scorecard's data-confrontation flag).
|
|
21
|
+
* Catalog ids with a committed real-data confrontation — a SORTED
|
|
22
|
+
* projection of the confrontation registry's keyset (single source of
|
|
23
|
+
* truth; adding a `ConfrontationEntry` grows this set automatically).
|
|
24
|
+
* Consumed by `composition/bridge-analysis.ts` for the scorecard's
|
|
25
|
+
* data-confrontation flag.
|
|
31
26
|
*
|
|
32
27
|
* @internal
|
|
33
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confrontation-coverage.d.ts","sourceRoot":"","sources":["../../src/bridges/confrontation-coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"confrontation-coverage.d.ts","sourceRoot":"","sources":["../../src/bridges/confrontation-coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAEnD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,cAAc,GACd,MAAM,CAAC;AAEX,gDAAgD;AAChD,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAC9C,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,wCAAwC;AACxC,UAAU,cAAc;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,mEAAmE;IACnE,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,mDAAmD;IACnD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,cAAc,CA6C9C"}
|
|
@@ -19,21 +19,17 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { BRIDGE_EQUATIONS } from './index.js';
|
|
21
21
|
import { CATALOG_GRAPH } from '../composition/catalog-graph.js';
|
|
22
|
+
import { CONFRONTATIONS } from './confrontations.js';
|
|
22
23
|
/**
|
|
23
|
-
* Catalog ids with a committed real-data confrontation
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* (be52-mercury-confrontation.ts) — the first established-bridge
|
|
29
|
-
* confrontation, GR's original empirical triumph
|
|
30
|
-
*
|
|
31
|
-
* Single source of truth — also consumed by `composition/bridge-analysis.ts`
|
|
32
|
-
* (the priority scorecard's data-confrontation flag).
|
|
24
|
+
* Catalog ids with a committed real-data confrontation — a SORTED
|
|
25
|
+
* projection of the confrontation registry's keyset (single source of
|
|
26
|
+
* truth; adding a `ConfrontationEntry` grows this set automatically).
|
|
27
|
+
* Consumed by `composition/bridge-analysis.ts` for the scorecard's
|
|
28
|
+
* data-confrontation flag.
|
|
33
29
|
*
|
|
34
30
|
* @internal
|
|
35
31
|
*/
|
|
36
|
-
export const DATA_CONFRONTED_IDS = new Set([
|
|
32
|
+
export const DATA_CONFRONTED_IDS = new Set([...CONFRONTATIONS.keys()].sort((a, b) => a - b));
|
|
37
33
|
/**
|
|
38
34
|
* Audit the catalog's empirical grounding. Reads `BRIDGE_EQUATIONS`, the
|
|
39
35
|
* composition graph, and the data-confrontation registry; fabricates
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confrontation-coverage.js","sourceRoot":"","sources":["../../src/bridges/confrontation-coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"confrontation-coverage.js","sourceRoot":"","sources":["../../src/bridges/confrontation-coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confrontation registry — maps a bridge id to a normalized
|
|
3
|
+
* `ConfrontationOutcome`-producing `run()`. Wraps the three existing
|
|
4
|
+
* confrontation modules (be-23/36/52) behind the unified outcome shape and
|
|
5
|
+
* hosts the new confrontations. `DATA_CONFRONTED_IDS` is a projection of
|
|
6
|
+
* this registry's keyset (single source of truth). Confrontations are
|
|
7
|
+
* ORTHOGONAL to the discovery funnel — nothing here imports discovery.
|
|
8
|
+
*
|
|
9
|
+
* @module bridges/confrontations
|
|
10
|
+
*/
|
|
11
|
+
import type { ConfrontationOutcome, ObservationKind } from './observations/types.js';
|
|
12
|
+
/** One registered confrontation. @public */
|
|
13
|
+
export interface ConfrontationEntry {
|
|
14
|
+
readonly bridgeId: number;
|
|
15
|
+
readonly title: string;
|
|
16
|
+
readonly kind: ObservationKind;
|
|
17
|
+
run(): ConfrontationOutcome;
|
|
18
|
+
}
|
|
19
|
+
/** The registry (frozen view). @public */
|
|
20
|
+
export declare const CONFRONTATIONS: ReadonlyMap<number, ConfrontationEntry>;
|
|
21
|
+
/** All entries, in ascending bridge-id order. @public */
|
|
22
|
+
export declare function listConfrontations(): ConfrontationEntry[];
|
|
23
|
+
/** Run one confrontation; `undefined` if the id is not registered. @public */
|
|
24
|
+
export declare function runConfrontation(bridgeId: number): ConfrontationOutcome | undefined;
|
|
25
|
+
//# sourceMappingURL=confrontations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confrontations.d.ts","sourceRoot":"","sources":["../../src/bridges/confrontations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAQrF,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,GAAG,IAAI,oBAAoB,CAAC;CAC7B;AAoHD,0CAA0C;AAC1C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAY,CAAC;AAEhF,yDAAyD;AACzD,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAEzD;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEnF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { residualInSigma } from './observations/types.js';
|
|
2
|
+
import { confrontBE52 } from './be52-mercury-confrontation.js';
|
|
3
|
+
import { confrontBE37 } from './be37-cassini-confrontation.js';
|
|
4
|
+
import { confrontBE36 } from './be36-gw170817-confrontation.js';
|
|
5
|
+
import { confrontBE23 } from './be23-planckian-confrontation.js';
|
|
6
|
+
import { confrontBE48 } from './be48-collapse-confrontation.js';
|
|
7
|
+
const be52Entry = {
|
|
8
|
+
bridgeId: 52,
|
|
9
|
+
title: 'GR perihelion precession vs Mercury (Clemence 1947)',
|
|
10
|
+
kind: 'value',
|
|
11
|
+
run() {
|
|
12
|
+
const r = confrontBE52();
|
|
13
|
+
return {
|
|
14
|
+
kind: 'value',
|
|
15
|
+
predicted: r.predicted_arcsec_per_century,
|
|
16
|
+
observed: r.observed_arcsec_per_century,
|
|
17
|
+
sigma: r.observation.observed_sigma_arcsec_per_century,
|
|
18
|
+
residualInSigma: r.residual_in_sigma,
|
|
19
|
+
withinObserved: r.withinObserved,
|
|
20
|
+
units: 'arcsec/century',
|
|
21
|
+
provenance: { citation: r.observation.citation, year: 1947, retrieved: '2026-07-02' },
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
const be23Entry = {
|
|
26
|
+
bridgeId: 23,
|
|
27
|
+
title: 'Planckian dissipation α vs overdoped cuprates (Legros 2019)',
|
|
28
|
+
kind: 'value',
|
|
29
|
+
run() {
|
|
30
|
+
const r = confrontBE23();
|
|
31
|
+
// withinObserved means "within 1σ" (see ConfrontationOutcome / the CLI's
|
|
32
|
+
// "within 1σ ✓" label) — derive it from the residual, not from
|
|
33
|
+
// r.withinPlanckianBand (a separate O(1)-band membership check that can
|
|
34
|
+
// diverge from the residual verdict away from the committed α).
|
|
35
|
+
return {
|
|
36
|
+
kind: 'value',
|
|
37
|
+
predicted: 1.0,
|
|
38
|
+
observed: r.alphaAggregate,
|
|
39
|
+
sigma: r.alphaAggregateErr,
|
|
40
|
+
residualInSigma: residualInSigma(1.0, r.alphaAggregate, r.alphaAggregateErr),
|
|
41
|
+
withinObserved: residualInSigma(1.0, r.alphaAggregate, r.alphaAggregateErr) <= 1,
|
|
42
|
+
units: 'dimensionless (α)',
|
|
43
|
+
provenance: { citation: r.observation.citation, year: 2019, retrieved: '2026-07-02' },
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
// be-36 upper-bound confrontation. VERIFIED field names (BE36ConfrontationResult,
|
|
48
|
+
// be36-gw170817-confrontation.ts:76-93): upperBound, lowerBound, encodedBound,
|
|
49
|
+
// passesEncodedBound, observation. It is two-sided; map BE-36's encoded bound
|
|
50
|
+
// as `predicted` and the observational positive-side bound as `bound`, with
|
|
51
|
+
// `passesEncodedBound` as `satisfied`. GWSpeedObservation's citation field is
|
|
52
|
+
// named `citation` (verified at be36-gw170817-confrontation.ts:51).
|
|
53
|
+
const be36Entry = {
|
|
54
|
+
bridgeId: 36,
|
|
55
|
+
title: 'GW speed vs GW170817 bound',
|
|
56
|
+
kind: 'upper-bound',
|
|
57
|
+
run() {
|
|
58
|
+
const r = confrontBE36();
|
|
59
|
+
return {
|
|
60
|
+
kind: 'upper-bound',
|
|
61
|
+
predicted: r.encodedBound,
|
|
62
|
+
bound: r.upperBound,
|
|
63
|
+
satisfied: r.passesEncodedBound,
|
|
64
|
+
units: '|c_GW − c| / c (dimensionless)',
|
|
65
|
+
provenance: {
|
|
66
|
+
citation: r.observation.citation,
|
|
67
|
+
year: 2017,
|
|
68
|
+
retrieved: '2026-07-02',
|
|
69
|
+
note: `two-sided bound: upper ${r.upperBound}, lower ${r.lowerBound}; encoded |ratio| ≤ ${r.encodedBound}`,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
const be37Entry = {
|
|
75
|
+
bridgeId: 37,
|
|
76
|
+
title: 'GR Shapiro delay (PPN γ) vs Cassini (Bertotti 2003)',
|
|
77
|
+
kind: 'value',
|
|
78
|
+
run() {
|
|
79
|
+
const r = confrontBE37();
|
|
80
|
+
return {
|
|
81
|
+
kind: 'value',
|
|
82
|
+
predicted: r.predicted_gamma,
|
|
83
|
+
observed: r.observed_gamma,
|
|
84
|
+
sigma: r.observation.observed_gamma_sigma,
|
|
85
|
+
residualInSigma: r.residual_in_sigma,
|
|
86
|
+
withinObserved: r.withinObserved,
|
|
87
|
+
units: 'PPN γ (dimensionless)',
|
|
88
|
+
provenance: r.observation.provenance,
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
const be48Entry = {
|
|
93
|
+
bridgeId: 48,
|
|
94
|
+
title: 'GRW collapse rate vs LISA-Pathfinder bound (Carlesso 2016)',
|
|
95
|
+
kind: 'upper-bound',
|
|
96
|
+
run() {
|
|
97
|
+
const r = confrontBE48();
|
|
98
|
+
return {
|
|
99
|
+
kind: 'upper-bound',
|
|
100
|
+
predicted: r.predicted_rate_per_s,
|
|
101
|
+
bound: r.bound_rate_per_s,
|
|
102
|
+
satisfied: r.satisfied,
|
|
103
|
+
units: 's⁻¹ (collapse rate)',
|
|
104
|
+
provenance: r.observation.provenance,
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
const REGISTRY = new Map([
|
|
109
|
+
[23, be23Entry],
|
|
110
|
+
[36, be36Entry],
|
|
111
|
+
[37, be37Entry],
|
|
112
|
+
[48, be48Entry],
|
|
113
|
+
[52, be52Entry],
|
|
114
|
+
]);
|
|
115
|
+
/** The registry (frozen view). @public */
|
|
116
|
+
export const CONFRONTATIONS = REGISTRY;
|
|
117
|
+
/** All entries, in ascending bridge-id order. @public */
|
|
118
|
+
export function listConfrontations() {
|
|
119
|
+
return [...REGISTRY.values()].sort((a, b) => a.bridgeId - b.bridgeId);
|
|
120
|
+
}
|
|
121
|
+
/** Run one confrontation; `undefined` if the id is not registered. @public */
|
|
122
|
+
export function runConfrontation(bridgeId) {
|
|
123
|
+
return REGISTRY.get(bridgeId)?.run();
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=confrontations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confrontations.js","sourceRoot":"","sources":["../../src/bridges/confrontations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed observation + confrontation-outcome layer for `upt confront`.
|
|
3
|
+
* The outcome is a discriminated union on `kind` so each confrontation
|
|
4
|
+
* carries only the fields it can honestly populate (no NaN placeholders).
|
|
5
|
+
*
|
|
6
|
+
* @module bridges/observations/types
|
|
7
|
+
*/
|
|
8
|
+
/** Provenance every observation record must carry. @public */
|
|
9
|
+
export interface ObservationProvenance {
|
|
10
|
+
/** Paper + locus, e.g. "Bertotti-Iess-Tortora 2003, Nature 425:374". */
|
|
11
|
+
readonly citation: string;
|
|
12
|
+
readonly year: number;
|
|
13
|
+
/** ISO date the value was transcribed into the repo. */
|
|
14
|
+
readonly retrieved: string;
|
|
15
|
+
/** Caveats: what was digitized, unit conversions, model conventions. */
|
|
16
|
+
readonly note?: string;
|
|
17
|
+
}
|
|
18
|
+
/** One named uncertainty component (e.g. statistical vs systematic). @public */
|
|
19
|
+
export interface SigmaComponent {
|
|
20
|
+
readonly label: string;
|
|
21
|
+
readonly value: number;
|
|
22
|
+
}
|
|
23
|
+
/** How the observation constrains the prediction. @public */
|
|
24
|
+
export type ObservationKind = 'value' | 'upper-bound' | 'consistency' | 'table';
|
|
25
|
+
/**
|
|
26
|
+
* Normalized confrontation result — discriminated on `kind`. Each arm
|
|
27
|
+
* carries only the fields it can honestly populate.
|
|
28
|
+
*
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
31
|
+
export type ConfrontationOutcome = {
|
|
32
|
+
readonly kind: 'value';
|
|
33
|
+
readonly predicted: number;
|
|
34
|
+
readonly observed: number;
|
|
35
|
+
readonly sigma: number;
|
|
36
|
+
readonly residualInSigma: number;
|
|
37
|
+
readonly withinObserved: boolean;
|
|
38
|
+
readonly units: string;
|
|
39
|
+
readonly provenance: ObservationProvenance;
|
|
40
|
+
} | {
|
|
41
|
+
readonly kind: 'upper-bound';
|
|
42
|
+
readonly predicted: number;
|
|
43
|
+
readonly bound: number;
|
|
44
|
+
readonly satisfied: boolean;
|
|
45
|
+
readonly units: string;
|
|
46
|
+
readonly provenance: ObservationProvenance;
|
|
47
|
+
} | {
|
|
48
|
+
readonly kind: 'consistency';
|
|
49
|
+
readonly predicted: number;
|
|
50
|
+
readonly approaches: number;
|
|
51
|
+
readonly fractionalGap: number;
|
|
52
|
+
readonly units: string;
|
|
53
|
+
readonly provenance: ObservationProvenance;
|
|
54
|
+
} | {
|
|
55
|
+
readonly kind: 'table';
|
|
56
|
+
readonly rows: ReadonlyArray<{
|
|
57
|
+
readonly label: string;
|
|
58
|
+
readonly predicted: number;
|
|
59
|
+
readonly observed: number;
|
|
60
|
+
readonly sigma: number;
|
|
61
|
+
readonly residualInSigma: number;
|
|
62
|
+
}>;
|
|
63
|
+
readonly units: string;
|
|
64
|
+
readonly provenance: ObservationProvenance;
|
|
65
|
+
};
|
|
66
|
+
/** |predicted − observed| in units of the observed 1σ. @public */
|
|
67
|
+
export declare function residualInSigma(predicted: number, observed: number, sigma: number): number;
|
|
68
|
+
/** Combined 1σ from named components (root-sum-square). @public */
|
|
69
|
+
export declare function combineInQuadrature(components: readonly SigmaComponent[]): number;
|
|
70
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bridges/observations/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8DAA8D;AAC9D,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC,CAAC;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C,CAAC;AAEN,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1F;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAKjF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed observation + confrontation-outcome layer for `upt confront`.
|
|
3
|
+
* The outcome is a discriminated union on `kind` so each confrontation
|
|
4
|
+
* carries only the fields it can honestly populate (no NaN placeholders).
|
|
5
|
+
*
|
|
6
|
+
* @module bridges/observations/types
|
|
7
|
+
*/
|
|
8
|
+
/** |predicted − observed| in units of the observed 1σ. @public */
|
|
9
|
+
export function residualInSigma(predicted, observed, sigma) {
|
|
10
|
+
if (!(Number.isFinite(sigma) && sigma > 0)) {
|
|
11
|
+
throw new RangeError('residualInSigma: sigma must be finite and > 0');
|
|
12
|
+
}
|
|
13
|
+
return Math.abs(predicted - observed) / sigma;
|
|
14
|
+
}
|
|
15
|
+
/** Combined 1σ from named components (root-sum-square). @public */
|
|
16
|
+
export function combineInQuadrature(components) {
|
|
17
|
+
if (components.length === 0) {
|
|
18
|
+
throw new RangeError('combineInQuadrature: need at least one component');
|
|
19
|
+
}
|
|
20
|
+
return Math.sqrt(components.reduce((acc, c) => acc + c.value * c.value, 0));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/bridges/observations/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoEH,kEAAkE;AAClE,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,QAAgB,EAAE,KAAa;IAChF,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAAC,+CAA+C,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;AAChD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,mBAAmB,CAAC,UAAqC;IACvE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** One input's elasticity. @public */
|
|
2
|
+
export interface Elasticity {
|
|
3
|
+
readonly input: string;
|
|
4
|
+
readonly elasticity: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Elasticity ranking for a value-kind confrontation's inputs, descending.
|
|
8
|
+
* `[]` for non-value-kind or unregistered ids.
|
|
9
|
+
*
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export declare function decidingMeasurement(bridgeId: number): Elasticity[];
|
|
13
|
+
//# sourceMappingURL=sensitivity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitivity.d.ts","sourceRoot":"","sources":["../../src/bridges/sensitivity.ts"],"names":[],"mappings":"AAcA,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAkBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CA2BlE"}
|