universal-physics-tensor 0.44.1 → 0.44.2
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 +51 -164
- package/dist/bridges/bridge-equations.d.ts +28 -6
- package/dist/bridges/bridge-equations.d.ts.map +1 -1
- package/dist/bridges/bridge-equations.js +30 -8
- package/dist/bridges/bridge-equations.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/commands/probe.d.ts +3 -0
- package/dist/cli/commands/probe.d.ts.map +1 -0
- package/dist/cli/commands/probe.js +169 -0
- package/dist/cli/commands/probe.js.map +1 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +5 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli-api.d.ts +1 -0
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +3 -0
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/probe/backend-protocol.d.ts +31 -0
- package/dist/composition/probe/backend-protocol.d.ts.map +1 -0
- package/dist/composition/probe/backend-protocol.js +83 -0
- package/dist/composition/probe/backend-protocol.js.map +1 -0
- package/dist/composition/probe/candidate-store.d.ts +33 -0
- package/dist/composition/probe/candidate-store.d.ts.map +1 -0
- package/dist/composition/probe/candidate-store.js +110 -0
- package/dist/composition/probe/candidate-store.js.map +1 -0
- package/dist/composition/probe/corpus.d.ts +23 -0
- package/dist/composition/probe/corpus.d.ts.map +1 -0
- package/dist/composition/probe/corpus.js +51 -0
- package/dist/composition/probe/corpus.js.map +1 -0
- package/dist/composition/probe/dataset.d.ts +35 -0
- package/dist/composition/probe/dataset.d.ts.map +1 -0
- package/dist/composition/probe/dataset.js +154 -0
- package/dist/composition/probe/dataset.js.map +1 -0
- package/dist/composition/probe/experiment-design.d.ts +32 -0
- package/dist/composition/probe/experiment-design.d.ts.map +1 -0
- package/dist/composition/probe/experiment-design.js +86 -0
- package/dist/composition/probe/experiment-design.js.map +1 -0
- package/dist/composition/probe/falsify.d.ts +29 -0
- package/dist/composition/probe/falsify.d.ts.map +1 -0
- package/dist/composition/probe/falsify.js +142 -0
- package/dist/composition/probe/falsify.js.map +1 -0
- package/dist/composition/probe/fingerprint.d.ts +20 -0
- package/dist/composition/probe/fingerprint.d.ts.map +1 -0
- package/dist/composition/probe/fingerprint.js +99 -0
- package/dist/composition/probe/fingerprint.js.map +1 -0
- package/dist/composition/probe/fit.d.ts +23 -0
- package/dist/composition/probe/fit.d.ts.map +1 -0
- package/dist/composition/probe/fit.js +92 -0
- package/dist/composition/probe/fit.js.map +1 -0
- package/dist/composition/probe/frontier.d.ts +30 -0
- package/dist/composition/probe/frontier.d.ts.map +1 -0
- package/dist/composition/probe/frontier.js +169 -0
- package/dist/composition/probe/frontier.js.map +1 -0
- package/dist/composition/probe/generator.d.ts +26 -0
- package/dist/composition/probe/generator.d.ts.map +1 -0
- package/dist/composition/probe/generator.js +123 -0
- package/dist/composition/probe/generator.js.map +1 -0
- package/dist/composition/probe/index.d.ts +49 -0
- package/dist/composition/probe/index.d.ts.map +1 -0
- package/dist/composition/probe/index.js +35 -0
- package/dist/composition/probe/index.js.map +1 -0
- package/dist/composition/probe/limits.d.ts +27 -0
- package/dist/composition/probe/limits.d.ts.map +1 -0
- package/dist/composition/probe/limits.js +71 -0
- package/dist/composition/probe/limits.js.map +1 -0
- package/dist/composition/probe/metadata.d.ts +19 -0
- package/dist/composition/probe/metadata.d.ts.map +1 -0
- package/dist/composition/probe/metadata.js +30 -0
- package/dist/composition/probe/metadata.js.map +1 -0
- package/dist/composition/probe/pipeline.d.ts +42 -0
- package/dist/composition/probe/pipeline.d.ts.map +1 -0
- package/dist/composition/probe/pipeline.js +307 -0
- package/dist/composition/probe/pipeline.js.map +1 -0
- package/dist/composition/probe/problem.d.ts +40 -0
- package/dist/composition/probe/problem.d.ts.map +1 -0
- package/dist/composition/probe/problem.js +101 -0
- package/dist/composition/probe/problem.js.map +1 -0
- package/dist/composition/probe/report.d.ts +15 -0
- package/dist/composition/probe/report.d.ts.map +1 -0
- package/dist/composition/probe/report.js +91 -0
- package/dist/composition/probe/report.js.map +1 -0
- package/dist/composition/probe/residual.d.ts +20 -0
- package/dist/composition/probe/residual.d.ts.map +1 -0
- package/dist/composition/probe/residual.js +72 -0
- package/dist/composition/probe/residual.js.map +1 -0
- package/dist/composition/probe/run-manifest.d.ts +24 -0
- package/dist/composition/probe/run-manifest.d.ts.map +1 -0
- package/dist/composition/probe/run-manifest.js +48 -0
- package/dist/composition/probe/run-manifest.js.map +1 -0
- package/dist/composition/probe/scoring.d.ts +19 -0
- package/dist/composition/probe/scoring.d.ts.map +1 -0
- package/dist/composition/probe/scoring.js +55 -0
- package/dist/composition/probe/scoring.js.map +1 -0
- package/dist/composition/probe/search-budget.d.ts +26 -0
- package/dist/composition/probe/search-budget.d.ts.map +1 -0
- package/dist/composition/probe/search-budget.js +36 -0
- package/dist/composition/probe/search-budget.js.map +1 -0
- package/dist/composition/probe/serialize.d.ts +33 -0
- package/dist/composition/probe/serialize.d.ts.map +1 -0
- package/dist/composition/probe/serialize.js +61 -0
- package/dist/composition/probe/serialize.js.map +1 -0
- package/dist/composition/probe/structure.d.ts +51 -0
- package/dist/composition/probe/structure.d.ts.map +1 -0
- package/dist/composition/probe/structure.js +93 -0
- package/dist/composition/probe/structure.js.map +1 -0
- package/dist/composition/probe/types.d.ts +281 -0
- package/dist/composition/probe/types.d.ts.map +1 -0
- package/dist/composition/probe/types.js +23 -0
- package/dist/composition/probe/types.js.map +1 -0
- package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-ast-gradient.js +22 -2
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
- package/dist/numerical/geodesic-integrator.js +85 -14
- package/dist/numerical/geodesic-integrator.js.map +1 -1
- package/dist/numerical/gl4-integrator.d.ts +2 -0
- package/dist/numerical/gl4-integrator.d.ts.map +1 -1
- package/dist/numerical/gl4-integrator.js +318 -141
- package/dist/numerical/gl4-integrator.js.map +1 -1
- package/dist/numerical/weyl-lowering.d.ts.map +1 -1
- package/dist/numerical/weyl-lowering.js +55 -31
- package/dist/numerical/weyl-lowering.js.map +1 -1
- package/package.json +15 -5
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prefactor fit + holdout evaluation. Generation never sees holdout rows.
|
|
3
|
+
*
|
|
4
|
+
* @module composition/probe/fit
|
|
5
|
+
*/
|
|
6
|
+
import { evalExpr } from '../expr-eval.js';
|
|
7
|
+
import { scalarDiscrepancy } from './residual.js';
|
|
8
|
+
import { canonicalJson } from './serialize.js';
|
|
9
|
+
function predictions(expr, rows, prefactor) {
|
|
10
|
+
return rows.rows.map((row) => {
|
|
11
|
+
const y = evalExpr(expr, row);
|
|
12
|
+
return prefactor * y;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function observed(rows) {
|
|
16
|
+
return rows.rows.map((row) => {
|
|
17
|
+
const y = row[rows.observable];
|
|
18
|
+
if (!Number.isFinite(y)) {
|
|
19
|
+
throw new RangeError(`fit: row missing finite observable '${rows.observable}'`);
|
|
20
|
+
}
|
|
21
|
+
return y;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Least-squares prefactor c in y ≈ c · f(x) on exploratory data, then score
|
|
26
|
+
* locked holdout. Holdout must not have been in the generation context.
|
|
27
|
+
*
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export function fitPrefactor(expr, exploratory, holdout, holdoutTol = 0.15) {
|
|
31
|
+
if (exploratory.role !== 'exploratory-fit') {
|
|
32
|
+
throw new RangeError(`fit: exploratory role must be exploratory-fit (got '${exploratory.role}')`);
|
|
33
|
+
}
|
|
34
|
+
if (holdout) {
|
|
35
|
+
if (holdout.role !== 'validation-holdout' && holdout.role !== 'external-replication') {
|
|
36
|
+
throw new RangeError(`fit: holdout role must be validation-holdout or external-replication`);
|
|
37
|
+
}
|
|
38
|
+
const holdKeys = new Set(holdout.rows.map((r) => canonicalJson(r)));
|
|
39
|
+
for (const row of exploratory.rows) {
|
|
40
|
+
if (holdKeys.has(canonicalJson(row))) {
|
|
41
|
+
throw new RangeError('fit: holdout row leaked into exploratory set');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const y = observed(exploratory);
|
|
46
|
+
const f = predictions(expr, exploratory, 1);
|
|
47
|
+
let num = 0;
|
|
48
|
+
let den = 0;
|
|
49
|
+
for (let i = 0; i < y.length; i++) {
|
|
50
|
+
if (!Number.isFinite(f[i]))
|
|
51
|
+
continue;
|
|
52
|
+
num += f[i] * y[i];
|
|
53
|
+
den += f[i] * f[i];
|
|
54
|
+
}
|
|
55
|
+
const prefactor = den > 0 ? num / den : 1;
|
|
56
|
+
const pred = predictions(expr, exploratory, prefactor);
|
|
57
|
+
let acc = 0;
|
|
58
|
+
for (let i = 0; i < y.length; i++) {
|
|
59
|
+
const r = scalarDiscrepancy(y[i], pred[i], 'additive');
|
|
60
|
+
acc += r * r;
|
|
61
|
+
}
|
|
62
|
+
const exploratoryRmse = Math.sqrt(acc / y.length);
|
|
63
|
+
if (!holdout || holdout.rows.length === 0) {
|
|
64
|
+
return {
|
|
65
|
+
prefactor,
|
|
66
|
+
exploratoryRmse,
|
|
67
|
+
nExploratory: y.length,
|
|
68
|
+
holdoutRmse: null,
|
|
69
|
+
nHoldout: 0,
|
|
70
|
+
holdoutSupported: false,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const yh = observed(holdout);
|
|
74
|
+
const ph = predictions(expr, holdout, prefactor);
|
|
75
|
+
let hacc = 0;
|
|
76
|
+
for (let i = 0; i < yh.length; i++) {
|
|
77
|
+
const r = scalarDiscrepancy(yh[i], ph[i], 'additive');
|
|
78
|
+
hacc += r * r;
|
|
79
|
+
}
|
|
80
|
+
const holdoutRmse = Math.sqrt(hacc / yh.length);
|
|
81
|
+
const scale = Math.max(...yh.map(Math.abs), ...ph.map(Math.abs), 1e-12);
|
|
82
|
+
const holdoutSupported = holdoutRmse <= holdoutTol * scale;
|
|
83
|
+
return {
|
|
84
|
+
prefactor,
|
|
85
|
+
exploratoryRmse,
|
|
86
|
+
nExploratory: y.length,
|
|
87
|
+
holdoutRmse,
|
|
88
|
+
nHoldout: yh.length,
|
|
89
|
+
holdoutSupported,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=fit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fit.js","sourceRoot":"","sources":["../../../src/composition/probe/fit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAW/C,SAAS,WAAW,CAAC,IAAc,EAAE,IAAkB,EAAE,SAAiB;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,SAAS,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,IAAkB;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,UAAU,CAAC,uCAAuC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAc,EACd,WAAyB,EACzB,OAAiC,EACjC,UAAU,GAAG,IAAI;IAEjB,IAAI,WAAW,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAAC,uDAAuD,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,IAAI,KAAK,oBAAoB,IAAI,OAAO,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACrF,MAAM,IAAI,UAAU,CAAC,sEAAsE,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,UAAU,CAAC,8CAA8C,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QACrC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACvD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvD,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO;YACL,SAAS;YACT,eAAe;YACf,YAAY,EAAE,CAAC,CAAC,MAAM;YACtB,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,CAAC;YACX,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GACT,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,WAAW,IAAI,UAAU,GAAG,KAAK,CAAC;IAC3D,OAAO;QACL,SAAS;QACT,eAAe;QACf,YAAY,EAAE,CAAC,CAAC,MAAM;QACtB,WAAW;QACX,QAAQ,EAAE,EAAE,CAAC,MAAM;QACnB,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontier scanners — wrap Product A surfaces; residual gaps are Product B.
|
|
3
|
+
*
|
|
4
|
+
* @module composition/probe/frontier
|
|
5
|
+
*/
|
|
6
|
+
import type { BridgeEdge } from '../edge.js';
|
|
7
|
+
import type { FrontierGap, ProbeDataset, SearchProblem } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Project Product A link candidates to `relation-link` gaps.
|
|
10
|
+
* Registered quantity identifications are not gaps.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare function wrapRelationLinkGaps(edges: readonly BridgeEdge[]): FrontierGap[];
|
|
15
|
+
/** Isolated-bridge connectors as relation-link gaps. @internal */
|
|
16
|
+
export declare function wrapConnectorGaps(edges: readonly BridgeEdge[]): FrontierGap[];
|
|
17
|
+
/** Empty (scale×force) cells as regime-transition gaps. @internal */
|
|
18
|
+
export declare function wrapRegimeGaps(edges: readonly BridgeEdge[]): FrontierGap[];
|
|
19
|
+
/** Combined read-only frontier (Product A wrappers). @internal */
|
|
20
|
+
export declare function scanFrontier(edges: readonly BridgeEdge[]): FrontierGap[];
|
|
21
|
+
/** Look up a wrapped gap by id. @internal */
|
|
22
|
+
export declare function findFrontierGap(edges: readonly BridgeEdge[], id: string): FrontierGap | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Build a Product B search problem for an unexplained-observation /
|
|
25
|
+
* prediction-residual gap. Relation-link gaps must not be passed here.
|
|
26
|
+
*
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export declare function problemFromResidualGap(gap: FrontierGap, target: SearchProblem['target'], governing: SearchProblem['governing'], exploratory?: ProbeDataset, holdout?: ProbeDataset): SearchProblem;
|
|
30
|
+
//# sourceMappingURL=frontier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontier.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/frontier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAU3E;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,WAAW,EAAE,CAkChF;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,WAAW,EAAE,CA2B7E;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,WAAW,EAAE,CAwB1E;AAMD,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,WAAW,EAAE,CAExE;AAED,6CAA6C;AAC7C,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,EAAE,EAAE,MAAM,GACT,WAAW,GAAG,SAAS,CAEzB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,EACrC,WAAW,CAAC,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,YAAY,GACrB,aAAa,CA0Cf"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontier scanners — wrap Product A surfaces; residual gaps are Product B.
|
|
3
|
+
*
|
|
4
|
+
* @module composition/probe/frontier
|
|
5
|
+
*/
|
|
6
|
+
import { proposeLinkCandidates, proposeOrphanConnectors } from '../bridge-analysis.js';
|
|
7
|
+
import { predictMissingBridges } from '../bridge-prediction.js';
|
|
8
|
+
import { QUANTITY_IDENTIFICATIONS } from '../compose.js';
|
|
9
|
+
import { candidateId } from '../adjudication.js';
|
|
10
|
+
const ALIAS_PAIRS = new Set(QUANTITY_IDENTIFICATIONS.map((id) => candidateId(id.from, id.to)));
|
|
11
|
+
function linkGapId(a, b) {
|
|
12
|
+
return `fg-link-${candidateId(a, b)}`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Project Product A link candidates to `relation-link` gaps.
|
|
16
|
+
* Registered quantity identifications are not gaps.
|
|
17
|
+
*
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export function wrapRelationLinkGaps(edges) {
|
|
21
|
+
const out = [];
|
|
22
|
+
for (const c of proposeLinkCandidates(edges)) {
|
|
23
|
+
if (ALIAS_PAIRS.has(candidateId(c.a, c.b)))
|
|
24
|
+
continue;
|
|
25
|
+
out.push({
|
|
26
|
+
id: linkGapId(c.a, c.b),
|
|
27
|
+
kind: 'relation-link',
|
|
28
|
+
participants: [
|
|
29
|
+
{ kind: 'quantity-identification', id: c.a },
|
|
30
|
+
{ kind: 'quantity-identification', id: c.b },
|
|
31
|
+
],
|
|
32
|
+
observations: [],
|
|
33
|
+
regimes: [],
|
|
34
|
+
assumptions: [],
|
|
35
|
+
constraints: [`dim:${c.dim}`],
|
|
36
|
+
evidence: {
|
|
37
|
+
summary: `${c.a} ≟ ${c.b} share ${c.dim}`,
|
|
38
|
+
sourceIds: ['upt candidates'],
|
|
39
|
+
},
|
|
40
|
+
identifiability: {
|
|
41
|
+
kind: 'graph-structural',
|
|
42
|
+
parametric: {
|
|
43
|
+
status: 'unknown',
|
|
44
|
+
reasons: ['identification gaps are Product A — use upt discover'],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
searchability: {
|
|
48
|
+
searchable: false,
|
|
49
|
+
reasons: ['relation-link gaps are reviewed by upt discover, not probe search'],
|
|
50
|
+
},
|
|
51
|
+
status: 'identified',
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return out.sort((x, y) => x.id.localeCompare(y.id));
|
|
55
|
+
}
|
|
56
|
+
/** Isolated-bridge connectors as relation-link gaps. @internal */
|
|
57
|
+
export function wrapConnectorGaps(edges) {
|
|
58
|
+
const report = proposeOrphanConnectors(edges);
|
|
59
|
+
return report.connectors.map((c) => ({
|
|
60
|
+
id: `fg-conn-${candidateId(c.orphanQuantity, c.coreQuantity)}`,
|
|
61
|
+
kind: 'relation-link',
|
|
62
|
+
participants: [
|
|
63
|
+
{ kind: 'quantity-identification', id: c.orphanQuantity },
|
|
64
|
+
{ kind: 'quantity-identification', id: c.coreQuantity },
|
|
65
|
+
],
|
|
66
|
+
observations: [],
|
|
67
|
+
regimes: [c.orphanEdge, c.coreEdge],
|
|
68
|
+
assumptions: [],
|
|
69
|
+
constraints: [`dim:${c.dim}`],
|
|
70
|
+
evidence: {
|
|
71
|
+
summary: `orphan ${c.orphanEdge} ≟ core via ${c.orphanQuantity}~${c.coreQuantity}`,
|
|
72
|
+
sourceIds: ['upt connectors'],
|
|
73
|
+
},
|
|
74
|
+
identifiability: {
|
|
75
|
+
kind: 'graph-structural',
|
|
76
|
+
parametric: { status: 'unknown', reasons: ['Product A connector'] },
|
|
77
|
+
},
|
|
78
|
+
searchability: {
|
|
79
|
+
searchable: false,
|
|
80
|
+
reasons: ['connectors are Product A review surfaces'],
|
|
81
|
+
},
|
|
82
|
+
status: 'identified',
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
/** Empty (scale×force) cells as regime-transition gaps. @internal */
|
|
86
|
+
export function wrapRegimeGaps(edges) {
|
|
87
|
+
const report = predictMissingBridges(edges);
|
|
88
|
+
return report.predictions.map((p, i) => ({
|
|
89
|
+
id: `fg-regime-${i}-${hashSlug(p.regimeA)}-${hashSlug(p.regimeB)}`,
|
|
90
|
+
kind: 'regime-transition',
|
|
91
|
+
participants: [],
|
|
92
|
+
observations: [],
|
|
93
|
+
regimes: [p.regimeA, p.regimeB],
|
|
94
|
+
assumptions: [],
|
|
95
|
+
constraints: [`sharedNeighbors:${p.sharedNeighbors}`],
|
|
96
|
+
evidence: {
|
|
97
|
+
summary: `empty regime pair ${p.regimeA} ↔ ${p.regimeB} via ${p.via.join(',')}`,
|
|
98
|
+
sourceIds: ['upt predict'],
|
|
99
|
+
},
|
|
100
|
+
identifiability: {
|
|
101
|
+
kind: 'graph-structural',
|
|
102
|
+
parametric: { status: 'unknown', reasons: ['structural triadic closure only'] },
|
|
103
|
+
},
|
|
104
|
+
searchability: {
|
|
105
|
+
searchable: false,
|
|
106
|
+
reasons: ['regime predictions are structural hypotheses, not expression searches'],
|
|
107
|
+
},
|
|
108
|
+
status: 'identified',
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
function hashSlug(s) {
|
|
112
|
+
return s.replace(/[^a-z0-9]+/gi, '-').replace(/^-|-$/g, '').slice(0, 40);
|
|
113
|
+
}
|
|
114
|
+
/** Combined read-only frontier (Product A wrappers). @internal */
|
|
115
|
+
export function scanFrontier(edges) {
|
|
116
|
+
return [...wrapRelationLinkGaps(edges), ...wrapConnectorGaps(edges), ...wrapRegimeGaps(edges)];
|
|
117
|
+
}
|
|
118
|
+
/** Look up a wrapped gap by id. @internal */
|
|
119
|
+
export function findFrontierGap(edges, id) {
|
|
120
|
+
return scanFrontier(edges).find((g) => g.id === id);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Build a Product B search problem for an unexplained-observation /
|
|
124
|
+
* prediction-residual gap. Relation-link gaps must not be passed here.
|
|
125
|
+
*
|
|
126
|
+
* @internal
|
|
127
|
+
*/
|
|
128
|
+
export function problemFromResidualGap(gap, target, governing, exploratory, holdout) {
|
|
129
|
+
if (gap.kind === 'relation-link' || gap.kind === 'regime-transition') {
|
|
130
|
+
throw new RangeError(`problemFromResidualGap: ${gap.kind} is not a Product B search target`);
|
|
131
|
+
}
|
|
132
|
+
const nObs = exploratory?.rows.length ?? 0;
|
|
133
|
+
const nPar = 1;
|
|
134
|
+
const identifiable = nObs >= nPar && nObs > 0;
|
|
135
|
+
const enriched = {
|
|
136
|
+
...gap,
|
|
137
|
+
identifiability: {
|
|
138
|
+
kind: 'parametric',
|
|
139
|
+
parametric: {
|
|
140
|
+
status: identifiable ? 'identifiable' : nObs === 0 ? 'unknown' : 'non-identifiable',
|
|
141
|
+
rank: identifiable ? nPar : 0,
|
|
142
|
+
nParameters: nPar,
|
|
143
|
+
nIndependentObservations: nObs,
|
|
144
|
+
reasons: identifiable
|
|
145
|
+
? [`${nObs} observations vs ${nPar} free prefactor`]
|
|
146
|
+
: ['insufficient observations for a unique prefactor'],
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
searchability: {
|
|
150
|
+
searchable: identifiable || nObs === 0,
|
|
151
|
+
reasons: identifiable
|
|
152
|
+
? ['parametric rank sufficient for a monomial prefactor']
|
|
153
|
+
: nObs === 0
|
|
154
|
+
? ['no data — structural generation only; status will be insufficient-evidence']
|
|
155
|
+
: ['non-identifiable — do not search'],
|
|
156
|
+
},
|
|
157
|
+
status: identifiable || nObs === 0 ? 'searchable' : 'underdetermined',
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
gap: enriched,
|
|
161
|
+
target,
|
|
162
|
+
governing,
|
|
163
|
+
exploratory,
|
|
164
|
+
holdout,
|
|
165
|
+
discrepancy: gap.discrepancy,
|
|
166
|
+
assumptions: gap.assumptions,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=frontier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontier.js","sourceRoot":"","sources":["../../../src/composition/probe/frontier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,wBAAwB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAClE,CAAC;AAEF,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS;IACrC,OAAO,WAAW,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAA4B;IAC/D,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,IAAI,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QACrD,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,EAAE,eAAe;YACrB,YAAY,EAAE;gBACZ,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC5C,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;aAC7C;YACD,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;YAC7B,QAAQ,EAAE;gBACR,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE;gBACzC,SAAS,EAAE,CAAC,gBAAgB,CAAC;aAC9B;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,kBAAkB;gBACxB,UAAU,EAAE;oBACV,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,CAAC,sDAAsD,CAAC;iBAClE;aACF;YACD,aAAa,EAAE;gBACb,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,CAAC,mEAAmE,CAAC;aAC/E;YACD,MAAM,EAAE,YAAY;SACrB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,KAA4B;IAC5D,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,EAAE,EAAE,WAAW,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE;QAC9D,IAAI,EAAE,eAAwB;QAC9B,YAAY,EAAE;YACZ,EAAE,IAAI,EAAE,yBAAkC,EAAE,EAAE,EAAE,CAAC,CAAC,cAAc,EAAE;YAClE,EAAE,IAAI,EAAE,yBAAkC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,EAAE;SACjE;QACD,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC;QACnC,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7B,QAAQ,EAAE;YACR,OAAO,EAAE,UAAU,CAAC,CAAC,UAAU,eAAe,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,YAAY,EAAE;YAClF,SAAS,EAAE,CAAC,gBAAgB,CAAC;SAC9B;QACD,eAAe,EAAE;YACf,IAAI,EAAE,kBAA2B;YACjC,UAAU,EAAE,EAAE,MAAM,EAAE,SAAkB,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE;SAC7E;QACD,aAAa,EAAE;YACb,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,CAAC,0CAA0C,CAAC;SACtD;QACD,MAAM,EAAE,YAAqB;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,KAA4B;IACzD,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACvC,EAAE,EAAE,aAAa,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;QAClE,IAAI,EAAE,mBAA4B;QAClC,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;QAC/B,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,CAAC,mBAAmB,CAAC,CAAC,eAAe,EAAE,CAAC;QACrD,QAAQ,EAAE;YACR,OAAO,EAAE,qBAAqB,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC/E,SAAS,EAAE,CAAC,aAAa,CAAC;SAC3B;QACD,eAAe,EAAE;YACf,IAAI,EAAE,kBAA2B;YACjC,UAAU,EAAE,EAAE,MAAM,EAAE,SAAkB,EAAE,OAAO,EAAE,CAAC,iCAAiC,CAAC,EAAE;SACzF;QACD,aAAa,EAAE;YACb,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,CAAC,uEAAuE,CAAC;SACnF;QACD,MAAM,EAAE,YAAqB;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,KAA4B;IACvD,OAAO,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,eAAe,CAC7B,KAA4B,EAC5B,EAAU;IAEV,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAgB,EAChB,MAA+B,EAC/B,SAAqC,EACrC,WAA0B,EAC1B,OAAsB;IAEtB,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACrE,MAAM,IAAI,UAAU,CAClB,2BAA2B,GAAG,CAAC,IAAI,mCAAmC,CACvE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAgB;QAC5B,GAAG,GAAG;QACN,eAAe,EAAE;YACf,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE;gBACV,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB;gBACnF,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,WAAW,EAAE,IAAI;gBACjB,wBAAwB,EAAE,IAAI;gBAC9B,OAAO,EAAE,YAAY;oBACnB,CAAC,CAAC,CAAC,GAAG,IAAI,oBAAoB,IAAI,iBAAiB,CAAC;oBACpD,CAAC,CAAC,CAAC,kDAAkD,CAAC;aACzD;SACF;QACD,aAAa,EAAE;YACb,UAAU,EAAE,YAAY,IAAI,IAAI,KAAK,CAAC;YACtC,OAAO,EAAE,YAAY;gBACnB,CAAC,CAAC,CAAC,qDAAqD,CAAC;gBACzD,CAAC,CAAC,IAAI,KAAK,CAAC;oBACV,CAAC,CAAC,CAAC,4EAA4E,CAAC;oBAChF,CAAC,CAAC,CAAC,kCAAkC,CAAC;SAC3C;QACD,MAAM,EAAE,YAAY,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB;KACtE,CAAC;IACF,OAAO;QACL,GAAG,EAAE,QAAQ;QACb,MAAM;QACN,SAAS;QACT,WAAW;QACX,OAAO;QACP,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native bounded grammar enumerator — dimensional monomials via Buckingham-π.
|
|
3
|
+
* Deterministic visit order; seed-independent.
|
|
4
|
+
*
|
|
5
|
+
* @module composition/probe/generator
|
|
6
|
+
*/
|
|
7
|
+
import type { ExprNode } from '../../dimensional/ast-types.js';
|
|
8
|
+
import type { DimensionalVariableRef, SearchBudget, SearchProblem } from './types.js';
|
|
9
|
+
import { type BudgetState } from './search-budget.js';
|
|
10
|
+
export interface RawCandidate {
|
|
11
|
+
readonly expression: ExprNode;
|
|
12
|
+
readonly monomial: Readonly<Record<string, number>> | null;
|
|
13
|
+
readonly originNote: string;
|
|
14
|
+
}
|
|
15
|
+
/** Build `Π governing^exp` as an `ExprNode`. @internal */
|
|
16
|
+
export declare function monomialToExpr(monomial: Readonly<Record<string, number>>, vars: readonly DimensionalVariableRef[]): ExprNode;
|
|
17
|
+
/**
|
|
18
|
+
* Yield dimensionally valid monomials for `problem`, honouring the budget.
|
|
19
|
+
* Invalid typed constructions are skipped (never evaluated).
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateNative(problem: SearchProblem, state: BudgetState): Iterable<RawCandidate>;
|
|
24
|
+
/** Expose budget type for callers. @internal */
|
|
25
|
+
export type { SearchBudget };
|
|
26
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAK/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC1C,IAAI,EAAE,SAAS,sBAAsB,EAAE,GACtC,QAAQ,CAqBV;AAQD;;;;;GAKG;AACH,wBAAiB,cAAc,CAC7B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,WAAW,GACjB,QAAQ,CAAC,YAAY,CAAC,CA4BxB;AAyCD,gDAAgD;AAChD,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native bounded grammar enumerator — dimensional monomials via Buckingham-π.
|
|
3
|
+
* Deterministic visit order; seed-independent.
|
|
4
|
+
*
|
|
5
|
+
* @module composition/probe/generator
|
|
6
|
+
*/
|
|
7
|
+
import { DIMENSIONLESS } from '../../dimensional/types.js';
|
|
8
|
+
import { sym } from '../../dimensional/ast-builders.js';
|
|
9
|
+
import { dimensionallyDetermines } from '../../dimensional/buckingham.js';
|
|
10
|
+
import { validate } from '../../dimensional/validator.js';
|
|
11
|
+
import { canEmitCandidate } from './search-budget.js';
|
|
12
|
+
/** Build `Π governing^exp` as an `ExprNode`. @internal */
|
|
13
|
+
export function monomialToExpr(monomial, vars) {
|
|
14
|
+
const byName = new Map(vars.map((v) => [v.name, v.dim]));
|
|
15
|
+
const factors = [];
|
|
16
|
+
for (const name of Object.keys(monomial).sort()) {
|
|
17
|
+
const exp = monomial[name];
|
|
18
|
+
if (exp === 0)
|
|
19
|
+
continue;
|
|
20
|
+
const dim = byName.get(name);
|
|
21
|
+
if (!dim)
|
|
22
|
+
throw new RangeError(`monomialToExpr: unknown variable '${name}'`);
|
|
23
|
+
const base = sym(name, dim);
|
|
24
|
+
if (exp === 1)
|
|
25
|
+
factors.push(base);
|
|
26
|
+
else {
|
|
27
|
+
factors.push({
|
|
28
|
+
kind: 'op',
|
|
29
|
+
op: '^',
|
|
30
|
+
args: [base, sym(String(exp), DIMENSIONLESS)],
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (factors.length === 0)
|
|
35
|
+
return sym('1', DIMENSIONLESS);
|
|
36
|
+
if (factors.length === 1)
|
|
37
|
+
return factors[0];
|
|
38
|
+
return { kind: 'op', op: '*', args: factors };
|
|
39
|
+
}
|
|
40
|
+
function* extraPrefactors(base) {
|
|
41
|
+
yield base;
|
|
42
|
+
// Registered `2pi` leaf (same normalForm as `base` — dimensionless constant).
|
|
43
|
+
yield { kind: 'op', op: '*', args: [sym('2pi', DIMENSIONLESS), base] };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Yield dimensionally valid monomials for `problem`, honouring the budget.
|
|
47
|
+
* Invalid typed constructions are skipped (never evaluated).
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
export function* generateNative(problem, state) {
|
|
52
|
+
const det = dimensionallyDetermines(problem.target, problem.governing);
|
|
53
|
+
if (!det.determined || !det.monomial)
|
|
54
|
+
return;
|
|
55
|
+
const expr = monomialToExpr(det.monomial, [problem.target, ...problem.governing]);
|
|
56
|
+
const seen = new Set();
|
|
57
|
+
for (const candidate of extraPrefactors(expr)) {
|
|
58
|
+
if (!canEmitCandidate(state))
|
|
59
|
+
return;
|
|
60
|
+
if (validate(candidate).ok !== true)
|
|
61
|
+
continue;
|
|
62
|
+
// Depth / operator caps
|
|
63
|
+
const depth = astDepth(candidate);
|
|
64
|
+
const ops = opCount(candidate);
|
|
65
|
+
if (depth > state.budget.maxAstDepth)
|
|
66
|
+
continue;
|
|
67
|
+
if (ops > state.budget.maxOperators)
|
|
68
|
+
continue;
|
|
69
|
+
const key = JSON.stringify(candidate);
|
|
70
|
+
if (seen.has(key))
|
|
71
|
+
continue;
|
|
72
|
+
seen.add(key);
|
|
73
|
+
state.candidates += 1;
|
|
74
|
+
yield {
|
|
75
|
+
expression: candidate,
|
|
76
|
+
monomial: det.monomial,
|
|
77
|
+
originNote: det.reason,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
if (problem.baseline && problem.discrepancy) {
|
|
81
|
+
yield* generateCorrections(problem, state, seen);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function astDepth(node) {
|
|
85
|
+
if (node.kind === 'op')
|
|
86
|
+
return 1 + Math.max(0, ...node.args.map(astDepth));
|
|
87
|
+
if (node.kind === 'transcendental' || node.kind === 'abs')
|
|
88
|
+
return 1 + astDepth(node.arg);
|
|
89
|
+
return 1;
|
|
90
|
+
}
|
|
91
|
+
function opCount(node) {
|
|
92
|
+
if (node.kind === 'op')
|
|
93
|
+
return 1 + node.args.reduce((n, a) => n + opCount(a), 0);
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Additive / relative corrections: search a monomial of the same dimension
|
|
98
|
+
* as the observable to add to (or scale) the baseline.
|
|
99
|
+
*/
|
|
100
|
+
function* generateCorrections(problem, state, seen) {
|
|
101
|
+
const kind = problem.discrepancy.kind;
|
|
102
|
+
if (kind !== 'additive' && kind !== 'relative' && kind !== 'standardized')
|
|
103
|
+
return;
|
|
104
|
+
const det = dimensionallyDetermines(problem.target, problem.governing);
|
|
105
|
+
if (!det.determined || !det.monomial)
|
|
106
|
+
return;
|
|
107
|
+
if (!canEmitCandidate(state))
|
|
108
|
+
return;
|
|
109
|
+
const corr = monomialToExpr(det.monomial, [problem.target, ...problem.governing]);
|
|
110
|
+
const baseline = problem.baseline;
|
|
111
|
+
const combined = kind === 'additive'
|
|
112
|
+
? { kind: 'op', op: '+', args: [baseline, corr] }
|
|
113
|
+
: { kind: 'op', op: '*', args: [baseline, { kind: 'op', op: '+', args: [sym('1', DIMENSIONLESS), corr] }] };
|
|
114
|
+
if (validate(combined).ok !== true)
|
|
115
|
+
return;
|
|
116
|
+
const key = JSON.stringify(combined);
|
|
117
|
+
if (seen.has(key))
|
|
118
|
+
return;
|
|
119
|
+
seen.add(key);
|
|
120
|
+
state.candidates += 1;
|
|
121
|
+
yield { expression: combined, monomial: det.monomial, originNote: `correction:${kind}` };
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/composition/probe/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experimental Product B barrel — expression / residual search.
|
|
3
|
+
*
|
|
4
|
+
* Import via `universal-physics-tensor/probe`. Not re-exported from the
|
|
5
|
+
* root `universal-physics-tensor` entry. Orthogonal to Product A
|
|
6
|
+
* (`upt discover` / `VettedCandidate`).
|
|
7
|
+
*
|
|
8
|
+
* All symbols are `@internal`: the subpath exists for CLI and experiments,
|
|
9
|
+
* not as a stability contract.
|
|
10
|
+
*
|
|
11
|
+
* @module composition/probe
|
|
12
|
+
*/
|
|
13
|
+
export { SCHEMA_VERSION, PROBE_SCHEMA_VERSION, DEFAULT_SEARCH_BUDGET, } from './types.js';
|
|
14
|
+
export type { ProbeCandidateStatus, RelationKind, AuditState, DiscrepancyKind, DatasetRole, SearchStopReason, FrontierGapKind, IdentifiabilityKind, SearchBudget, DiscrepancyDefinition, ScientificRelationRef, IdentifiabilityAssessment, SearchabilityAssessment, GapEvidence, FrontierGap, ProbeCandidateOrigin, ProbeCandidateBody, StatusEvent, CandidateFingerprint, ComplexityMetrics, ProbeCandidateRecord, ProbeRejectionRecord, DiscoveryBackendDescriptor, EnvironmentFingerprint, NondeterminismSource, DiscoveryRunManifest, DimensionalVariableRef, ObservationRow, ProbeDataset, SearchProblem, ScoreVector, EvidenceAssessment, EvidenceProfile, DeclaredLimit, FalsificationBattery, FalsificationRecord, ScientificRelationRecord, } from './types.js';
|
|
15
|
+
export { canonicalJson, sha256Hex, hashCanonical } from './serialize.js';
|
|
16
|
+
export { openBudget, budgetStopReason, canEmitCandidate } from './search-budget.js';
|
|
17
|
+
export type { BudgetState } from './search-budget.js';
|
|
18
|
+
export { bodyExpression, countAstNodes, countOperators, maxPowerOrder, complexityOf, fingerprintExpr, } from './fingerprint.js';
|
|
19
|
+
export { scalarDiscrepancy, rmse, ResidualError } from './residual.js';
|
|
20
|
+
export { openManifest, closeManifest, captureEnvironment } from './run-manifest.js';
|
|
21
|
+
export { canTransition, applyStatus, statusRank, ProbeCandidateStore } from './candidate-store.js';
|
|
22
|
+
export { monomialToExpr, generateNative } from './generator.js';
|
|
23
|
+
export type { RawCandidate } from './generator.js';
|
|
24
|
+
export { wrapRelationLinkGaps, wrapConnectorGaps, wrapRegimeGaps, scanFrontier, findFrontierGap, problemFromResidualGap, } from './frontier.js';
|
|
25
|
+
export { fitPrefactor } from './fit.js';
|
|
26
|
+
export type { FitResult } from './fit.js';
|
|
27
|
+
export { scoreCandidate, rankPareto } from './scoring.js';
|
|
28
|
+
export type { RankedCandidate } from './scoring.js';
|
|
29
|
+
export { compareToCorpus, corpusRelativeWording } from './corpus.js';
|
|
30
|
+
export type { CorpusMatch, CorpusComparisonResult } from './corpus.js';
|
|
31
|
+
export { checkDeclaredLimit, checkDeclaredLimits } from './limits.js';
|
|
32
|
+
export type { LimitCheckResult } from './limits.js';
|
|
33
|
+
export { runFalsification, DEFAULT_BATTERIES } from './falsify.js';
|
|
34
|
+
export type { FalsifyInput, FalsifyResult } from './falsify.js';
|
|
35
|
+
export { datasetFromRows, asDatasetSafe, loadDatasetFromJson, loadSplitDatasetsFromJson, loadDatasetFromCsv, loadSplitCsv, } from './dataset.js';
|
|
36
|
+
export type { SplitFileDatasets } from './dataset.js';
|
|
37
|
+
export { suggestDiscriminatingPoint } from './experiment-design.js';
|
|
38
|
+
export type { DesignBounds, DesignSuggestion } from './experiment-design.js';
|
|
39
|
+
export { detectMeanChangepoint, estimateScaleExponent, probeConservation, } from './structure.js';
|
|
40
|
+
export type { ChangepointInput, ChangepointResult, ScaleSymmetryInput } from './structure.js';
|
|
41
|
+
export { runBackendWorker } from './backend-protocol.js';
|
|
42
|
+
export type { BackendRequest, BackendCandidate, BackendResponse } from './backend-protocol.js';
|
|
43
|
+
export { setRelationMetadata, getRelationMetadata, listRelationMetadata, clearRelationMetadata, } from './metadata.js';
|
|
44
|
+
export { makeResidualGap, loadSearchProblemFromJson, searchProblemFromFile, parseExprJson } from './problem.js';
|
|
45
|
+
export type { ProblemFile } from './problem.js';
|
|
46
|
+
export { runProbeSearch } from './pipeline.js';
|
|
47
|
+
export type { ProbeSearchOptions, ProbeSearchResult } from './pipeline.js';
|
|
48
|
+
export { formatProbeReport, formatFrontierScan, formatFrontierGap } from './report.js';
|
|
49
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experimental Product B barrel — expression / residual search.
|
|
3
|
+
*
|
|
4
|
+
* Import via `universal-physics-tensor/probe`. Not re-exported from the
|
|
5
|
+
* root `universal-physics-tensor` entry. Orthogonal to Product A
|
|
6
|
+
* (`upt discover` / `VettedCandidate`).
|
|
7
|
+
*
|
|
8
|
+
* All symbols are `@internal`: the subpath exists for CLI and experiments,
|
|
9
|
+
* not as a stability contract.
|
|
10
|
+
*
|
|
11
|
+
* @module composition/probe
|
|
12
|
+
*/
|
|
13
|
+
export { SCHEMA_VERSION, PROBE_SCHEMA_VERSION, DEFAULT_SEARCH_BUDGET, } from './types.js';
|
|
14
|
+
export { canonicalJson, sha256Hex, hashCanonical } from './serialize.js';
|
|
15
|
+
export { openBudget, budgetStopReason, canEmitCandidate } from './search-budget.js';
|
|
16
|
+
export { bodyExpression, countAstNodes, countOperators, maxPowerOrder, complexityOf, fingerprintExpr, } from './fingerprint.js';
|
|
17
|
+
export { scalarDiscrepancy, rmse, ResidualError } from './residual.js';
|
|
18
|
+
export { openManifest, closeManifest, captureEnvironment } from './run-manifest.js';
|
|
19
|
+
export { canTransition, applyStatus, statusRank, ProbeCandidateStore } from './candidate-store.js';
|
|
20
|
+
export { monomialToExpr, generateNative } from './generator.js';
|
|
21
|
+
export { wrapRelationLinkGaps, wrapConnectorGaps, wrapRegimeGaps, scanFrontier, findFrontierGap, problemFromResidualGap, } from './frontier.js';
|
|
22
|
+
export { fitPrefactor } from './fit.js';
|
|
23
|
+
export { scoreCandidate, rankPareto } from './scoring.js';
|
|
24
|
+
export { compareToCorpus, corpusRelativeWording } from './corpus.js';
|
|
25
|
+
export { checkDeclaredLimit, checkDeclaredLimits } from './limits.js';
|
|
26
|
+
export { runFalsification, DEFAULT_BATTERIES } from './falsify.js';
|
|
27
|
+
export { datasetFromRows, asDatasetSafe, loadDatasetFromJson, loadSplitDatasetsFromJson, loadDatasetFromCsv, loadSplitCsv, } from './dataset.js';
|
|
28
|
+
export { suggestDiscriminatingPoint } from './experiment-design.js';
|
|
29
|
+
export { detectMeanChangepoint, estimateScaleExponent, probeConservation, } from './structure.js';
|
|
30
|
+
export { runBackendWorker } from './backend-protocol.js';
|
|
31
|
+
export { setRelationMetadata, getRelationMetadata, listRelationMetadata, clearRelationMetadata, } from './metadata.js';
|
|
32
|
+
export { makeResidualGap, loadSearchProblemFromJson, searchProblemFromFile, parseExprJson } from './problem.js';
|
|
33
|
+
export { runProbeSearch } from './pipeline.js';
|
|
34
|
+
export { formatProbeReport, formatFrontierScan, formatFrontierGap } from './report.js';
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/composition/probe/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAyCpB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEpF,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EACL,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declared-limit checks for probe candidates.
|
|
3
|
+
*
|
|
4
|
+
* A failed limit is **not automatically fatal**. It is fatal only when the
|
|
5
|
+
* candidate claims the domain in which the limit fails.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
import type { ExprNode } from '../../dimensional/ast-types.js';
|
|
10
|
+
import type { DeclaredLimit, ProbeDataset } from './types.js';
|
|
11
|
+
export interface LimitCheckResult {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly passed: boolean;
|
|
14
|
+
readonly claimedDomain: boolean;
|
|
15
|
+
readonly fatal: boolean;
|
|
16
|
+
readonly detail: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Evaluate `prefactor · expr` RMSE on `dataset`. When the candidate does not
|
|
20
|
+
* claim `limit.regime`, a failure is recorded but not fatal.
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export declare function checkDeclaredLimit(expr: ExprNode, dataset: ProbeDataset, prefactor: number, limit: DeclaredLimit, claimsDomain: boolean): LimitCheckResult;
|
|
25
|
+
/** Run every declared limit. @internal */
|
|
26
|
+
export declare function checkDeclaredLimits(expr: ExprNode, dataset: ProbeDataset | undefined, prefactor: number, limits: readonly DeclaredLimit[], claimedRegimes?: Readonly<Record<string, string>>): readonly LimitCheckResult[];
|
|
27
|
+
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,OAAO,GACpB,gBAAgB,CAyClB;AAED,0CAA0C;AAC1C,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,cAAc,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GACpD,SAAS,gBAAgB,EAAE,CAc7B"}
|