universal-physics-tensor 0.7.3 → 0.15.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 +147 -109
- package/bin/upt.mjs +508 -0
- package/dist/bridges/be23-planckian-confrontation.d.ts +162 -0
- package/dist/bridges/be23-planckian-confrontation.d.ts.map +1 -0
- package/dist/bridges/be23-planckian-confrontation.js +196 -0
- package/dist/bridges/be23-planckian-confrontation.js.map +1 -0
- package/dist/bridges/be36-gw170817-confrontation.d.ts +111 -0
- package/dist/bridges/be36-gw170817-confrontation.d.ts.map +1 -0
- package/dist/bridges/be36-gw170817-confrontation.js +100 -0
- package/dist/bridges/be36-gw170817-confrontation.js.map +1 -0
- package/dist/bridges/bridge-equations.d.ts +129 -0
- package/dist/bridges/bridge-equations.d.ts.map +1 -0
- package/dist/bridges/bridge-equations.js +130 -0
- package/dist/bridges/bridge-equations.js.map +1 -0
- package/dist/bridges/catalog-adapter.d.ts +1 -1
- package/dist/bridges/catalog-adapter.js +1 -1
- package/dist/bridges/confrontation-coverage.d.ts +67 -0
- package/dist/bridges/confrontation-coverage.d.ts.map +1 -0
- package/dist/bridges/confrontation-coverage.js +83 -0
- package/dist/bridges/confrontation-coverage.js.map +1 -0
- package/dist/bridges/equations/_be-helpers.d.ts +2 -1
- package/dist/bridges/equations/_be-helpers.d.ts.map +1 -1
- package/dist/bridges/equations/be-12-coherence-length.d.ts +1 -1
- package/dist/bridges/equations/be-13-einstein-trace.d.ts +2 -2
- package/dist/bridges/equations/be-13-einstein-trace.js +1 -1
- package/dist/bridges/equations/be-14-ryu-takayanagi.d.ts +2 -2
- package/dist/bridges/equations/be-15-emergence.d.ts +19 -5
- package/dist/bridges/equations/be-15-emergence.d.ts.map +1 -1
- package/dist/bridges/equations/be-15-emergence.js +18 -4
- package/dist/bridges/equations/be-15-emergence.js.map +1 -1
- package/dist/bridges/equations/be-16-landauer.d.ts +1 -1
- package/dist/bridges/equations/be-17-einstein-cartan.d.ts +1 -1
- package/dist/bridges/equations/be-18-higgs-mass.d.ts +1 -1
- package/dist/bridges/equations/be-19-quantum-bounce.d.ts +1 -1
- package/dist/bridges/equations/be-20-vacuum-energy.d.ts +4 -4
- package/dist/bridges/equations/be-20-vacuum-energy.d.ts.map +1 -1
- package/dist/bridges/equations/be-20-vacuum-energy.js +4 -2
- package/dist/bridges/equations/be-20-vacuum-energy.js.map +1 -1
- package/dist/bridges/equations/be-22-topological-entanglement.d.ts +1 -1
- package/dist/bridges/equations/be-23-syk-planckian.d.ts +1 -1
- package/dist/bridges/equations/be-24-foerster-fret.d.ts +1 -1
- package/dist/bridges/equations/be-25-iit-phi.d.ts +1 -1
- package/dist/bridges/equations/be-25-orch-or.d.ts +13 -1
- package/dist/bridges/equations/be-25-orch-or.d.ts.map +1 -1
- package/dist/bridges/equations/be-25-orch-or.js +12 -0
- package/dist/bridges/equations/be-25-orch-or.js.map +1 -1
- package/dist/bridges/equations/be-26-dna-tunneling.d.ts +2 -2
- package/dist/bridges/equations/be-26-dna-tunneling.js +1 -1
- package/dist/bridges/equations/be-27-effective-temperature.d.ts +1 -1
- package/dist/bridges/equations/be-28-onsager-entropy-production.d.ts +1 -1
- package/dist/bridges/equations/be-29-jarzynski.d.ts +1 -1
- package/dist/bridges/equations/be-30-flm-first-law.d.ts +2 -2
- package/dist/bridges/equations/be-31-causal-set-bd.d.ts +1 -1
- package/dist/bridges/equations/be-32-quantum-reference-frame.d.ts +1 -1
- package/dist/bridges/equations/be-33-hertz-millis.d.ts +1 -1
- package/dist/bridges/equations/be-34-kibble-zurek.d.ts +1 -1
- package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts +1 -1
- package/dist/bridges/equations/be-36-gw-speed-bound.d.ts +12 -5
- package/dist/bridges/equations/be-36-gw-speed-bound.d.ts.map +1 -1
- package/dist/bridges/equations/be-36-gw-speed-bound.js +11 -4
- package/dist/bridges/equations/be-36-gw-speed-bound.js.map +1 -1
- package/dist/bridges/equations/be-38-mond.d.ts +1 -1
- package/dist/bridges/equations/be-39-asymptotic-safety.d.ts +2 -2
- package/dist/bridges/equations/be-40-composite-higgs.d.ts +1 -1
- package/dist/bridges/equations/be-41-swampland.d.ts +1 -1
- package/dist/bridges/equations/be-43-er-epr.d.ts +1 -1
- package/dist/bridges/equations/be-44-soft-hair.d.ts +1 -1
- package/dist/bridges/equations/be-45-tcc.d.ts +1 -1
- package/dist/bridges/equations/be-46-multiverse-measure.d.ts +1 -1
- package/dist/bridges/equations/be-47-bbn-dark-sector.d.ts +1 -1
- package/dist/bridges/equations/be-48-grw-localization.d.ts +1 -1
- package/dist/bridges/equations/be-49-quantum-darwinism.d.ts +1 -1
- package/dist/bridges/equations/be-50-wheeler-feynman.d.ts +1 -1
- package/dist/bridges/index.d.ts +10 -7
- package/dist/bridges/index.d.ts.map +1 -1
- package/dist/bridges/index.js +47 -34
- package/dist/bridges/index.js.map +1 -1
- package/dist/bridges/membership.d.ts +44 -0
- package/dist/bridges/membership.d.ts.map +1 -0
- package/dist/bridges/membership.js +59 -0
- package/dist/bridges/membership.js.map +1 -0
- package/dist/bridges/rejected.d.ts +40 -0
- package/dist/bridges/rejected.d.ts.map +1 -0
- package/dist/bridges/rejected.js +81 -0
- package/dist/bridges/rejected.js.map +1 -0
- package/dist/composition/bridge-analysis.d.ts +189 -0
- package/dist/composition/bridge-analysis.d.ts.map +1 -0
- package/dist/composition/bridge-analysis.js +445 -0
- package/dist/composition/bridge-analysis.js.map +1 -0
- package/dist/composition/bridge-prediction.d.ts +95 -0
- package/dist/composition/bridge-prediction.d.ts.map +1 -0
- package/dist/composition/bridge-prediction.js +0 -0
- package/dist/composition/bridge-prediction.js.map +1 -0
- package/dist/composition/catalog-graph.d.ts +20 -0
- package/dist/composition/catalog-graph.d.ts.map +1 -0
- package/dist/composition/catalog-graph.js +39 -0
- package/dist/composition/catalog-graph.js.map +1 -0
- package/dist/composition/compose-surface.d.ts +12 -0
- package/dist/composition/compose-surface.d.ts.map +1 -0
- package/dist/composition/compose-surface.js +10 -0
- package/dist/composition/compose-surface.js.map +1 -0
- package/dist/composition/compose-symbolic.d.ts +75 -0
- package/dist/composition/compose-symbolic.d.ts.map +1 -0
- package/dist/composition/compose-symbolic.js +157 -0
- package/dist/composition/compose-symbolic.js.map +1 -0
- package/dist/composition/compose.d.ts +110 -0
- package/dist/composition/compose.d.ts.map +1 -0
- package/dist/composition/compose.js +231 -0
- package/dist/composition/compose.js.map +1 -0
- package/dist/composition/consistency.d.ts +24 -0
- package/dist/composition/consistency.d.ts.map +1 -0
- package/dist/composition/consistency.js +26 -0
- package/dist/composition/consistency.js.map +1 -0
- package/dist/composition/discovery.d.ts +104 -0
- package/dist/composition/discovery.d.ts.map +1 -0
- package/dist/composition/discovery.js +165 -0
- package/dist/composition/discovery.js.map +1 -0
- package/dist/composition/edge.d.ts +139 -0
- package/dist/composition/edge.d.ts.map +1 -0
- package/dist/composition/edge.js +72 -0
- package/dist/composition/edge.js.map +1 -0
- package/dist/composition/edges/calibration.d.ts +107 -0
- package/dist/composition/edges/calibration.d.ts.map +1 -0
- package/dist/composition/edges/calibration.js +373 -0
- package/dist/composition/edges/calibration.js.map +1 -0
- package/dist/composition/edges/catalog-full.d.ts +299 -0
- package/dist/composition/edges/catalog-full.d.ts.map +1 -0
- package/dist/composition/edges/catalog-full.js +989 -0
- package/dist/composition/edges/catalog-full.js.map +1 -0
- package/dist/composition/edges/catalog-tranche.d.ts +112 -0
- package/dist/composition/edges/catalog-tranche.d.ts.map +1 -0
- package/dist/composition/edges/catalog-tranche.js +241 -0
- package/dist/composition/edges/catalog-tranche.js.map +1 -0
- package/dist/composition/enumerate.d.ts +67 -0
- package/dist/composition/enumerate.d.ts.map +1 -0
- package/dist/composition/enumerate.js +78 -0
- package/dist/composition/enumerate.js.map +1 -0
- package/dist/composition/explain.d.ts +102 -0
- package/dist/composition/explain.d.ts.map +1 -0
- package/dist/composition/explain.js +244 -0
- package/dist/composition/explain.js.map +1 -0
- package/dist/composition/expr-eval.d.ts +33 -0
- package/dist/composition/expr-eval.d.ts.map +1 -0
- package/dist/composition/expr-eval.js +95 -0
- package/dist/composition/expr-eval.js.map +1 -0
- package/dist/composition/expr-simplify.d.ts +60 -0
- package/dist/composition/expr-simplify.d.ts.map +1 -0
- package/dist/composition/expr-simplify.js +330 -0
- package/dist/composition/expr-simplify.js.map +1 -0
- package/dist/composition/expr-subst.d.ts +29 -0
- package/dist/composition/expr-subst.d.ts.map +1 -0
- package/dist/composition/expr-subst.js +60 -0
- package/dist/composition/expr-subst.js.map +1 -0
- package/dist/composition/identifiability.d.ts +103 -0
- package/dist/composition/identifiability.d.ts.map +1 -0
- package/dist/composition/identifiability.js +148 -0
- package/dist/composition/identifiability.js.map +1 -0
- package/dist/composition/index.d.ts +37 -0
- package/dist/composition/index.d.ts.map +1 -0
- package/dist/composition/index.js +27 -0
- package/dist/composition/index.js.map +1 -0
- package/dist/composition/quantities.d.ts +297 -0
- package/dist/composition/quantities.d.ts.map +1 -0
- package/dist/composition/quantities.js +1017 -0
- package/dist/composition/quantities.js.map +1 -0
- package/dist/composition/quantity.d.ts +59 -0
- package/dist/composition/quantity.d.ts.map +1 -0
- package/dist/composition/quantity.js +36 -0
- package/dist/composition/quantity.js.map +1 -0
- package/dist/composition/retrodiction.d.ts +94 -0
- package/dist/composition/retrodiction.d.ts.map +1 -0
- package/dist/composition/retrodiction.js +171 -0
- package/dist/composition/retrodiction.js.map +1 -0
- package/dist/composition/symbolic-constants.d.ts +33 -0
- package/dist/composition/symbolic-constants.d.ts.map +1 -0
- package/dist/composition/symbolic-constants.js +50 -0
- package/dist/composition/symbolic-constants.js.map +1 -0
- package/dist/composition/uncertainty.d.ts +45 -0
- package/dist/composition/uncertainty.d.ts.map +1 -0
- package/dist/composition/uncertainty.js +59 -0
- package/dist/composition/uncertainty.js.map +1 -0
- package/dist/core/axes-registry.d.ts +1 -1
- package/dist/core/axes-registry.js +1 -1
- package/dist/core/cell.d.ts +0 -8
- package/dist/core/cell.d.ts.map +1 -1
- package/dist/core/cell.js +1 -1
- package/dist/core/cell.js.map +1 -1
- package/dist/core/constants.d.ts +15 -1
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +15 -1
- package/dist/core/constants.js.map +1 -1
- package/dist/core/flux-rules.d.ts +10 -13
- package/dist/core/flux-rules.d.ts.map +1 -1
- package/dist/core/flux-rules.js +19 -10
- package/dist/core/flux-rules.js.map +1 -1
- package/dist/core/labeled-tensor.d.ts +80 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/labeled-tensor.js +263 -17
- package/dist/core/labeled-tensor.js.map +1 -1
- package/dist/core/universal-index.d.ts +1 -1
- package/dist/core/universal-index.js +1 -1
- package/dist/diff/bridge-gradient.d.ts +51 -8
- package/dist/diff/bridge-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-gradient.js +75 -8
- package/dist/diff/bridge-gradient.js.map +1 -1
- package/dist/dimensional/buckingham.d.ts +103 -0
- package/dist/dimensional/buckingham.d.ts.map +1 -0
- package/dist/dimensional/buckingham.js +284 -0
- package/dist/dimensional/buckingham.js.map +1 -0
- package/dist/dimensional/dimension-spec.d.ts +24 -0
- package/dist/dimensional/dimension-spec.d.ts.map +1 -0
- package/dist/dimensional/dimension-spec.js +110 -0
- package/dist/dimensional/dimension-spec.js.map +1 -0
- package/dist/dimensional/field-equation-helpers.d.ts +1 -1
- package/dist/dimensional/field-equation-helpers.js +1 -1
- package/dist/dimensional/friedmann-equation.d.ts +1 -1
- package/dist/dimensional/friedmann-equation.js +1 -1
- package/dist/dimensional/gauge-field.d.ts +1 -1
- package/dist/dimensional/gauge-field.js +1 -1
- package/dist/dimensional/klein-gordon-equation.d.ts +8 -5
- package/dist/dimensional/klein-gordon-equation.d.ts.map +1 -1
- package/dist/dimensional/klein-gordon-equation.js +8 -5
- package/dist/dimensional/klein-gordon-equation.js.map +1 -1
- package/dist/dimensional/tensor-trace.d.ts +1 -1
- package/dist/dimensional/tensor-trace.js +1 -1
- package/dist/dimensional/validator.d.ts +13 -3
- package/dist/dimensional/validator.d.ts.map +1 -1
- package/dist/dimensional/validator.js +129 -42
- package/dist/dimensional/validator.js.map +1 -1
- package/dist/index.d.ts +34 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +64 -3
- package/dist/index.js.map +1 -1
- package/dist/numerical/be37-covariant-eikonal.d.ts.map +1 -1
- package/dist/numerical/be37-covariant-eikonal.js +15 -18
- package/dist/numerical/be37-covariant-eikonal.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.d.ts +7 -13
- package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +1 -1
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/derivative-lowering.d.ts +2 -1
- package/dist/numerical/derivative-lowering.d.ts.map +1 -1
- package/dist/numerical/formula-dimension.d.ts +40 -0
- package/dist/numerical/formula-dimension.d.ts.map +1 -0
- package/dist/numerical/formula-dimension.js +199 -0
- package/dist/numerical/formula-dimension.js.map +1 -0
- package/dist/numerical/formula-mathts.d.ts +27 -0
- package/dist/numerical/formula-mathts.d.ts.map +1 -0
- package/dist/numerical/formula-mathts.js +98 -0
- package/dist/numerical/formula-mathts.js.map +1 -0
- package/dist/numerical/formula-registry.d.ts +30 -0
- package/dist/numerical/formula-registry.d.ts.map +1 -0
- package/dist/numerical/formula-registry.js +88 -0
- package/dist/numerical/formula-registry.js.map +1 -0
- package/dist/numerical/formula.d.ts +75 -0
- package/dist/numerical/formula.d.ts.map +1 -0
- package/dist/numerical/formula.js +275 -0
- package/dist/numerical/formula.js.map +1 -0
- package/dist/numerical/geometrized.d.ts +51 -0
- package/dist/numerical/geometrized.d.ts.map +1 -0
- package/dist/numerical/geometrized.js +66 -0
- package/dist/numerical/geometrized.js.map +1 -0
- package/dist/numerical/gl4-integrator.d.ts +8 -6
- package/dist/numerical/gl4-integrator.d.ts.map +1 -1
- package/dist/numerical/gl4-integrator.js +6 -6
- package/dist/numerical/gl4-integrator.js.map +1 -1
- package/dist/numerical/klein-gordon.d.ts +145 -0
- package/dist/numerical/klein-gordon.d.ts.map +1 -0
- package/dist/numerical/klein-gordon.js +145 -0
- package/dist/numerical/klein-gordon.js.map +1 -0
- package/dist/numerical/kretschmann.d.ts +43 -12
- package/dist/numerical/kretschmann.d.ts.map +1 -1
- package/dist/numerical/kretschmann.js +116 -29
- package/dist/numerical/kretschmann.js.map +1 -1
- package/dist/numerical/lowering.d.ts +18 -0
- package/dist/numerical/lowering.d.ts.map +1 -1
- package/dist/numerical/lowering.js +54 -42
- package/dist/numerical/lowering.js.map +1 -1
- package/dist/numerical/null-ic.d.ts +1 -1
- package/dist/numerical/null-ic.d.ts.map +1 -1
- package/dist/numerical/null-ic.js +3 -2
- package/dist/numerical/null-ic.js.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.d.ts +18 -6
- package/dist/numerical/painleve-gullstrand-metric.d.ts.map +1 -1
- package/dist/numerical/painleve-gullstrand-metric.js +31 -16
- package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +4 -3
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +5 -4
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/types.d.ts +6 -3
- package/dist/numerical/types.d.ts.map +1 -1
- package/dist/numerical/weyl-lowering.d.ts +4 -4
- package/dist/numerical/weyl-lowering.d.ts.map +1 -1
- package/dist/numerical/weyl-lowering.js +14 -1
- package/dist/numerical/weyl-lowering.js.map +1 -1
- package/package.json +19 -8
|
@@ -114,6 +114,56 @@ export class RankPreservationError extends UPTError {
|
|
|
114
114
|
Object.setPrototypeOf(this, RankPreservationError.prototype);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Thrown by the `LabeledTensor` constructor when an explicit `axisOrder` is
|
|
119
|
+
* not a valid permutation of the label keys (wrong length, a key that is not a
|
|
120
|
+
* label, or a duplicate). Distinct from `LabeledTensorConstructionError` (which
|
|
121
|
+
* means label-count ≠ tensor-rank) so a consumer never reads a rank-mismatch
|
|
122
|
+
* field on an order error.
|
|
123
|
+
*
|
|
124
|
+
* @public
|
|
125
|
+
*/
|
|
126
|
+
export class AxisOrderError extends UPTError {
|
|
127
|
+
axisOrder;
|
|
128
|
+
labelKeys;
|
|
129
|
+
constructor(axisOrder, labelKeys) {
|
|
130
|
+
super(`LabeledTensor: axisOrder [${axisOrder.join(', ')}] is not a permutation ` +
|
|
131
|
+
`of the label keys [${labelKeys.join(', ')}] (it must list every label ` +
|
|
132
|
+
`key exactly once, in engine-axis order).`);
|
|
133
|
+
this.name = 'AxisOrderError';
|
|
134
|
+
this.axisOrder = axisOrder;
|
|
135
|
+
this.labelKeys = labelKeys;
|
|
136
|
+
Object.setPrototypeOf(this, AxisOrderError.prototype);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Thrown by `mergeAxes` when the request is malformed: fewer than two keys, an
|
|
141
|
+
* unknown key, keys that are not a contiguous run of engine-axis positions, or a
|
|
142
|
+
* merged key/id that collides with a surviving axis.
|
|
143
|
+
*
|
|
144
|
+
* @public
|
|
145
|
+
*/
|
|
146
|
+
export class AxisMergeError extends UPTError {
|
|
147
|
+
constructor(message) {
|
|
148
|
+
super(`LabeledTensor.mergeAxes: ${message}`);
|
|
149
|
+
this.name = 'AxisMergeError';
|
|
150
|
+
Object.setPrototypeOf(this, AxisMergeError.prototype);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Thrown by `splitAxis` when the request is malformed: an unknown key, fewer
|
|
155
|
+
* than two parts, a non-positive/non-integer part size, a size product that
|
|
156
|
+
* does not match the original axis size, or a part key/id that collides.
|
|
157
|
+
*
|
|
158
|
+
* @public
|
|
159
|
+
*/
|
|
160
|
+
export class AxisSplitError extends UPTError {
|
|
161
|
+
constructor(message) {
|
|
162
|
+
super(`LabeledTensor.splitAxis: ${message}`);
|
|
163
|
+
this.name = 'AxisSplitError';
|
|
164
|
+
Object.setPrototypeOf(this, AxisSplitError.prototype);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
117
167
|
// ---------------------------------------------------------------------------
|
|
118
168
|
// canonicalLabelOrder — Risk 2 mitigation
|
|
119
169
|
// ---------------------------------------------------------------------------
|
|
@@ -129,6 +179,24 @@ export class RankPreservationError extends UPTError {
|
|
|
129
179
|
export function canonicalLabelOrder(labels) {
|
|
130
180
|
return Object.keys(labels).sort();
|
|
131
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* True iff `order` lists exactly the members of `keys`, each once (same length,
|
|
184
|
+
* no duplicates, no foreign entries). Used to validate an explicit `axisOrder`.
|
|
185
|
+
*
|
|
186
|
+
* @internal
|
|
187
|
+
*/
|
|
188
|
+
function isPermutationOf(order, keys) {
|
|
189
|
+
if (order.length !== keys.length)
|
|
190
|
+
return false;
|
|
191
|
+
const seen = new Set();
|
|
192
|
+
const keySet = new Set(keys);
|
|
193
|
+
for (const k of order) {
|
|
194
|
+
if (!keySet.has(k) || seen.has(k))
|
|
195
|
+
return false;
|
|
196
|
+
seen.add(k);
|
|
197
|
+
}
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
132
200
|
// ---------------------------------------------------------------------------
|
|
133
201
|
// LabeledTensor (wrapper class)
|
|
134
202
|
// ---------------------------------------------------------------------------
|
|
@@ -146,14 +214,42 @@ export class LabeledTensor {
|
|
|
146
214
|
tensor;
|
|
147
215
|
engine;
|
|
148
216
|
labels;
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
217
|
+
/**
|
|
218
|
+
* The label keys in ENGINE-AXIS order: `axisOrder[i]` is the key of engine
|
|
219
|
+
* axis `i`. This is the AUTHORITATIVE label↔axis mapping — consumers must use
|
|
220
|
+
* it (or {@link axisOf}) rather than re-deriving position by sorting keys,
|
|
221
|
+
* because `transpose` / `contract` can leave the engine axes in a non-sorted
|
|
222
|
+
* order. Defaults to `canonicalLabelOrder(labels)` (sorted) when not supplied.
|
|
223
|
+
*/
|
|
224
|
+
axisOrder;
|
|
225
|
+
constructor(tensor, engine, labels, axisOrder) {
|
|
226
|
+
const labelKeys = Object.keys(labels);
|
|
227
|
+
if (labelKeys.length !== tensor.shape.length) {
|
|
228
|
+
throw new LabeledTensorConstructionError(labelKeys.length, tensor.shape.length);
|
|
229
|
+
}
|
|
230
|
+
const order = axisOrder ?? canonicalLabelOrder(labels);
|
|
231
|
+
// Validate `order` is a permutation of the label keys: same length, every
|
|
232
|
+
// entry is a label key, no duplicates.
|
|
233
|
+
if (order.length !== labelKeys.length || !isPermutationOf(order, labelKeys)) {
|
|
234
|
+
throw new AxisOrderError(order, labelKeys);
|
|
153
235
|
}
|
|
154
236
|
this.tensor = tensor;
|
|
155
237
|
this.engine = engine;
|
|
156
238
|
this.labels = labels;
|
|
239
|
+
this.axisOrder = order;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Engine-axis position of a label key (the inverse of {@link axisOrder}).
|
|
243
|
+
* Throws if the key is not a label.
|
|
244
|
+
*
|
|
245
|
+
* @public
|
|
246
|
+
*/
|
|
247
|
+
axisOf(key) {
|
|
248
|
+
const axis = this.axisOrder.indexOf(key);
|
|
249
|
+
if (axis === -1) {
|
|
250
|
+
throw new UPTError(`LabeledTensor.axisOf: '${key}' is not a label key.`);
|
|
251
|
+
}
|
|
252
|
+
return axis;
|
|
157
253
|
}
|
|
158
254
|
/**
|
|
159
255
|
* Identity-aware contraction (Decision #3): match labels by
|
|
@@ -174,8 +270,11 @@ export class LabeledTensor {
|
|
|
174
270
|
throw new UPTError(`LabeledTensor.contract: engine mismatch (${this.engine.name} vs ` +
|
|
175
271
|
`${other.engine.name}). Both operands must share an engine.`);
|
|
176
272
|
}
|
|
177
|
-
|
|
178
|
-
|
|
273
|
+
// Map labels → ENGINE axis positions via each operand's authoritative
|
|
274
|
+
// axisOrder (NOT sorted key order — an operand may carry a non-sorted order
|
|
275
|
+
// from a prior transpose/contract).
|
|
276
|
+
const leftOrder = this.axisOrder;
|
|
277
|
+
const rightOrder = other.axisOrder;
|
|
179
278
|
// Build id → (operand, axis-position) sites.
|
|
180
279
|
const sites = new Map();
|
|
181
280
|
leftOrder.forEach((key, axis) => {
|
|
@@ -194,18 +293,33 @@ export class LabeledTensor {
|
|
|
194
293
|
const contractions = [];
|
|
195
294
|
const free = [];
|
|
196
295
|
const resultLabels = {};
|
|
296
|
+
// The result's engine-axis order: the result key of each free axis, pushed
|
|
297
|
+
// in the SAME order the free axes enter `spec.free` (which is the order the
|
|
298
|
+
// engine emits result axes). Kept exactly parallel to `free` so it is always
|
|
299
|
+
// a valid permutation of `Object.keys(resultLabels)`.
|
|
300
|
+
const resultAxisOrder = [];
|
|
197
301
|
for (const [id, occurrences] of sites) {
|
|
198
302
|
if (occurrences.length === 1) {
|
|
199
303
|
// Free axis on exactly one operand. Carry through.
|
|
200
304
|
const o = occurrences[0];
|
|
201
305
|
free.push({ operand: o.operand, axis: o.axis });
|
|
202
|
-
// Preserve the original label key
|
|
203
|
-
//
|
|
204
|
-
//
|
|
205
|
-
|
|
306
|
+
// Preserve the original label key; on collision (both operands use the
|
|
307
|
+
// same string key for *different* ids) suffix until a FREE key is found
|
|
308
|
+
// (`x` → `x_0`/`x_1` → `x_0_0`…), so result keys stay UNIQUE and
|
|
309
|
+
// resultAxisOrder remains a valid permutation (Eve Y1: guarding only the
|
|
310
|
+
// unsuffixed key could overwrite an existing suffixed key).
|
|
311
|
+
let key = o.key;
|
|
312
|
+
if (resultLabels[key] !== undefined) {
|
|
313
|
+
let n = 0;
|
|
314
|
+
do {
|
|
315
|
+
key = `${o.key}_${o.operand}${n === 0 ? '' : `_${n}`}`;
|
|
316
|
+
n++;
|
|
317
|
+
} while (resultLabels[key] !== undefined);
|
|
318
|
+
}
|
|
206
319
|
resultLabels[key] = o.operand === 0
|
|
207
320
|
? this.labels[o.key]
|
|
208
321
|
: other.labels[o.key];
|
|
322
|
+
resultAxisOrder.push(key);
|
|
209
323
|
}
|
|
210
324
|
else if (occurrences.length === 2) {
|
|
211
325
|
const [a, b] = occurrences;
|
|
@@ -227,7 +341,7 @@ export class LabeledTensor {
|
|
|
227
341
|
}
|
|
228
342
|
const spec = { contractions, free };
|
|
229
343
|
const resultTensor = this.engine.einsum(spec, this.tensor, other.tensor);
|
|
230
|
-
return new LabeledTensor(resultTensor, this.engine, resultLabels);
|
|
344
|
+
return new LabeledTensor(resultTensor, this.engine, resultLabels, resultAxisOrder);
|
|
231
345
|
}
|
|
232
346
|
/**
|
|
233
347
|
* Reorder axes per the given permutation of label keys. The new
|
|
@@ -237,12 +351,14 @@ export class LabeledTensor {
|
|
|
237
351
|
* @public
|
|
238
352
|
*/
|
|
239
353
|
transpose(newKeyOrder) {
|
|
240
|
-
|
|
241
|
-
|
|
354
|
+
// Permutation is computed against the CURRENT engine-axis order
|
|
355
|
+
// (`this.axisOrder`), NOT the sorted key order — `this.axisOrder` may
|
|
356
|
+
// already be non-sorted (e.g. a contract result, or a prior transpose).
|
|
357
|
+
if (newKeyOrder.length !== this.axisOrder.length) {
|
|
242
358
|
throw new UPTError(`LabeledTensor.transpose: new key order has ${newKeyOrder.length} ` +
|
|
243
|
-
`entries but tensor has ${
|
|
359
|
+
`entries but tensor has ${this.axisOrder.length} axes.`);
|
|
244
360
|
}
|
|
245
|
-
const currentIndex = new Map(
|
|
361
|
+
const currentIndex = new Map(this.axisOrder.map((k, i) => [k, i]));
|
|
246
362
|
const perm = [];
|
|
247
363
|
for (const key of newKeyOrder) {
|
|
248
364
|
const pos = currentIndex.get(key);
|
|
@@ -252,7 +368,9 @@ export class LabeledTensor {
|
|
|
252
368
|
perm.push(pos);
|
|
253
369
|
}
|
|
254
370
|
const transposedTensor = this.engine.transpose(this.tensor, perm);
|
|
255
|
-
|
|
371
|
+
// The result's engine axis i is the old axis perm[i] = newKeyOrder[i], so
|
|
372
|
+
// the new axisOrder IS newKeyOrder.
|
|
373
|
+
return new LabeledTensor(transposedTensor, this.engine, this.labels, [...newKeyOrder]);
|
|
256
374
|
}
|
|
257
375
|
/**
|
|
258
376
|
* Per-axis size change. Rank must be preserved (Decision #5);
|
|
@@ -269,7 +387,135 @@ export class LabeledTensor {
|
|
|
269
387
|
throw new RankPreservationError(this.tensor.shape.length, shape.length);
|
|
270
388
|
}
|
|
271
389
|
const reshapedTensor = this.engine.reshape(this.tensor, shape);
|
|
272
|
-
|
|
390
|
+
// Rank-preserving size change never reorders axes — carry axisOrder through.
|
|
391
|
+
return new LabeledTensor(reshapedTensor, this.engine, this.labels, this.axisOrder);
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Fuse a CONTIGUOUS run of engine axes (named by `keys`) into ONE axis
|
|
395
|
+
* carrying the caller-supplied `merged` label. Rank R → R − (keys.length − 1).
|
|
396
|
+
*
|
|
397
|
+
* The keys must occupy a gapless consecutive run of engine-axis positions
|
|
398
|
+
* (`engine.reshape` fuses STORAGE-adjacent axes only) — `transpose` them
|
|
399
|
+
* adjacent first otherwise. The fused axis spans the merged axes in ENGINE
|
|
400
|
+
* order; the order `keys` are listed does not matter (the merged axis is
|
|
401
|
+
* opaque). The caller owns the merged axis's identity — no composite-id is
|
|
402
|
+
* synthesized.
|
|
403
|
+
*
|
|
404
|
+
* @public
|
|
405
|
+
*/
|
|
406
|
+
mergeAxes(keys, merged) {
|
|
407
|
+
if (keys.length < 2) {
|
|
408
|
+
throw new AxisMergeError(`need at least 2 keys to merge, got ${keys.length}.`);
|
|
409
|
+
}
|
|
410
|
+
if (new Set(keys).size !== keys.length) {
|
|
411
|
+
throw new AxisMergeError(`keys ${JSON.stringify(keys)} contain a duplicate.`);
|
|
412
|
+
}
|
|
413
|
+
const positions = [];
|
|
414
|
+
for (const k of keys) {
|
|
415
|
+
const p = this.axisOrder.indexOf(k);
|
|
416
|
+
if (p === -1)
|
|
417
|
+
throw new AxisMergeError(`'${k}' is not a label key.`);
|
|
418
|
+
positions.push(p);
|
|
419
|
+
}
|
|
420
|
+
const sorted = [...positions].sort((a, b) => a - b);
|
|
421
|
+
const lo = sorted[0];
|
|
422
|
+
const hi = sorted[sorted.length - 1];
|
|
423
|
+
if (new Set(sorted).size !== sorted.length || hi - lo !== sorted.length - 1) {
|
|
424
|
+
throw new AxisMergeError(`keys ${JSON.stringify(keys)} are not a contiguous run of engine axes ` +
|
|
425
|
+
`(positions ${JSON.stringify(positions)}); transpose them adjacent first.`);
|
|
426
|
+
}
|
|
427
|
+
// Surviving keys = axes outside the merged run. (A merged key may safely
|
|
428
|
+
// REUSE one of the consumed keys' names — those are not surviving.)
|
|
429
|
+
const survivingKeys = this.axisOrder.filter((_, i) => i < lo || i > hi);
|
|
430
|
+
if (survivingKeys.includes(merged.key)) {
|
|
431
|
+
throw new AxisMergeError(`merged key '${merged.key}' collides with a surviving label key.`);
|
|
432
|
+
}
|
|
433
|
+
for (const k of survivingKeys) {
|
|
434
|
+
if (this.labels[k].id === merged.index.id) {
|
|
435
|
+
throw new AxisMergeError(`merged id '${merged.index.id}' collides with surviving axis '${k}'.`);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
const shape = this.tensor.shape;
|
|
439
|
+
let mergedSize = 1;
|
|
440
|
+
for (let i = lo; i <= hi; i++)
|
|
441
|
+
mergedSize *= shape[i];
|
|
442
|
+
const newShape = [...shape.slice(0, lo), mergedSize, ...shape.slice(hi + 1)];
|
|
443
|
+
const newLabels = {};
|
|
444
|
+
for (const k of survivingKeys)
|
|
445
|
+
newLabels[k] = this.labels[k];
|
|
446
|
+
newLabels[merged.key] = merged.index;
|
|
447
|
+
const newAxisOrder = [
|
|
448
|
+
...this.axisOrder.slice(0, lo),
|
|
449
|
+
merged.key,
|
|
450
|
+
...this.axisOrder.slice(hi + 1),
|
|
451
|
+
];
|
|
452
|
+
const reshaped = this.engine.reshape(this.tensor, newShape);
|
|
453
|
+
return new LabeledTensor(reshaped, this.engine, newLabels, newAxisOrder);
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Split ONE engine axis (named `key`) into several, each carrying a
|
|
457
|
+
* caller-supplied sub-label whose sizes multiply to the original axis size.
|
|
458
|
+
* Rank R → R + (parts.length − 1). The parts occupy the split axis's position
|
|
459
|
+
* in `parts` order. Inverse of {@link mergeAxes}.
|
|
460
|
+
*
|
|
461
|
+
* @public
|
|
462
|
+
*/
|
|
463
|
+
splitAxis(key, parts) {
|
|
464
|
+
const p = this.axisOrder.indexOf(key);
|
|
465
|
+
if (p === -1)
|
|
466
|
+
throw new AxisSplitError(`'${key}' is not a label key.`);
|
|
467
|
+
if (parts.length < 2) {
|
|
468
|
+
throw new AxisSplitError(`need at least 2 parts to split into, got ${parts.length}.`);
|
|
469
|
+
}
|
|
470
|
+
let product = 1;
|
|
471
|
+
for (const part of parts) {
|
|
472
|
+
if (!Number.isInteger(part.size) || part.size <= 0) {
|
|
473
|
+
throw new AxisSplitError(`part '${part.key}' size must be a positive integer, got ${part.size}.`);
|
|
474
|
+
}
|
|
475
|
+
product *= part.size;
|
|
476
|
+
}
|
|
477
|
+
const axisSize = this.tensor.shape[p];
|
|
478
|
+
if (product !== axisSize) {
|
|
479
|
+
throw new AxisSplitError(`part sizes multiply to ${product} but axis '${key}' has size ${axisSize}.`);
|
|
480
|
+
}
|
|
481
|
+
const survivingKeys = this.axisOrder.filter((k) => k !== key);
|
|
482
|
+
const seen = new Set();
|
|
483
|
+
const seenIds = new Set();
|
|
484
|
+
for (const part of parts) {
|
|
485
|
+
if (survivingKeys.includes(part.key)) {
|
|
486
|
+
throw new AxisSplitError(`part key '${part.key}' collides with a surviving label key.`);
|
|
487
|
+
}
|
|
488
|
+
if (seen.has(part.key))
|
|
489
|
+
throw new AxisSplitError(`duplicate part key '${part.key}'.`);
|
|
490
|
+
seen.add(part.key);
|
|
491
|
+
// Both parts SURVIVE, so two parts sharing one id would build a tensor
|
|
492
|
+
// that `contract` later rejects as IdentityConflictError — fail here at
|
|
493
|
+
// the malformed call instead (Eve Y1). (mergeAxes has no analogue: its
|
|
494
|
+
// merged id replaces consumed axes, so reusing a consumed id is legal.)
|
|
495
|
+
if (seenIds.has(part.index.id)) {
|
|
496
|
+
throw new AxisSplitError(`two parts share id '${part.index.id}'.`);
|
|
497
|
+
}
|
|
498
|
+
seenIds.add(part.index.id);
|
|
499
|
+
for (const k of survivingKeys) {
|
|
500
|
+
if (this.labels[k].id === part.index.id) {
|
|
501
|
+
throw new AxisSplitError(`part id '${part.index.id}' collides with surviving axis '${k}'.`);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
const shape = this.tensor.shape;
|
|
506
|
+
const newShape = [...shape.slice(0, p), ...parts.map((pt) => pt.size), ...shape.slice(p + 1)];
|
|
507
|
+
const newLabels = {};
|
|
508
|
+
for (const k of survivingKeys)
|
|
509
|
+
newLabels[k] = this.labels[k];
|
|
510
|
+
for (const part of parts)
|
|
511
|
+
newLabels[part.key] = part.index;
|
|
512
|
+
const newAxisOrder = [
|
|
513
|
+
...this.axisOrder.slice(0, p),
|
|
514
|
+
...parts.map((pt) => pt.key),
|
|
515
|
+
...this.axisOrder.slice(p + 1),
|
|
516
|
+
];
|
|
517
|
+
const reshaped = this.engine.reshape(this.tensor, newShape);
|
|
518
|
+
return new LabeledTensor(reshaped, this.engine, newLabels, newAxisOrder);
|
|
273
519
|
}
|
|
274
520
|
}
|
|
275
521
|
//# sourceMappingURL=labeled-tensor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labeled-tensor.js","sourceRoot":"","sources":["../../src/core/labeled-tensor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,8EAA8E;AAC9E,qEAAqE;AACrE,8BAA8B;AAC9B,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,OAAO,8BAA+B,SAAQ,QAAQ;IAC1C,UAAU,CAAS;IACnB,UAAU,CAAS;IACnC,YAAY,UAAkB,EAAE,UAAkB;QAChD,KAAK,CACH,oCAAoC,UAAU,eAAe;YAC7D,kBAAkB,UAAU,yCAAyC;YACrE,2BAA2B,CAC5B,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,8BAA8B,CAAC,SAAS,CAAC,CAAC;IACxE,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAC7B,OAAO,CAAmB;IAC1B,QAAQ,CAAW;IACnB,SAAS,CAAW;IACpC,YACE,OAAyB,EACzB,QAAkB,EAClB,SAAmB;QAEnB,KAAK,CACH,qDAAqD,OAAO,IAAI;YAChE,sBAAsB,QAAQ,SAAS,SAAS,iBAAiB;YACjE,iCAAiC,CAClC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjC,OAAO,CAAmB;IAC1C,YAAY,OAAyB;QACnC,KAAK,CACH,6CAA6C,OAAO,iBAAiB;YACrE,kEAAkE;YAClE,gDAAgD,CACjD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjC,QAAQ,CAAS;IACjB,MAAM,CAAS;IAC/B,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CACH,kDAAkD,QAAQ,MAAM;YAChE,GAAG,MAAM,yDAAyD;YAClE,gDAAgD,CACjD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAS;IAET,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IAGR,MAAM,CAAe;IACrB,MAAM,CAAe;IACrB,MAAM,CAAI;IAE1B,YAAY,MAAoB,EAAE,MAAoB,EAAE,MAAS;QAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QAC9C,IAAI,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,IAAI,8BAA8B,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,QAAQ,CACb,KAAuB;QAEvB,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,QAAQ,CAChB,4CAA4C,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM;gBAClE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,wCAAwC,CAC7D,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAErD,6CAA6C;QAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8F,CAAC;QACpH,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,oEAAoE;QACpE,MAAM,YAAY,GAAyC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAiC,EAAE,CAAC;QAC9C,MAAM,YAAY,GAA6C,EAAE,CAAC;QAElE,KAAK,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC;YACtC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,mDAAmD;gBACnD,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChD,6DAA6D;gBAC7D,4DAA4D;gBAC5D,gDAAgD;gBAChD,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAClE,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC;oBACjC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;oBACpB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC;gBAC3B,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;oBAC5B,8DAA8D;oBAC9D,gDAAgD;oBAChD,MAAM,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC;gBACtC,CAAC;gBACD,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC9B,MAAM,IAAI,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC1D,CAAC;gBACD,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,+DAA+D;gBAC/D,wDAAwD;gBACxD,MAAM,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAe,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACzE,OAAO,IAAI,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;OAMG;IACI,SAAS,CAAC,WAA4C;QAC3D,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,WAAW,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,IAAI,QAAQ,CAChB,8CAA8C,WAAW,CAAC,MAAM,GAAG;gBACnE,0BAA0B,YAAY,CAAC,MAAM,QAAQ,CACtD,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,IAAI,QAAQ,CAChB,iCAAiC,MAAM,CAAC,GAAG,CAAC,wBAAwB,CACrE,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO,IAAI,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;OASG;IACI,OAAO,CAAC,KAA4B;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO,IAAI,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"labeled-tensor.js","sourceRoot":"","sources":["../../src/core/labeled-tensor.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*
|
|
16
16
|
* Design: `docs/planning/v0.7-Proposal-1-Design.md` Decisions #2,
|
|
17
17
|
* #4, #10. Empirical census at
|
|
18
|
-
* `docs/architecture/v0.7-p1-baseline.md`.
|
|
18
|
+
* `docs/architecture/archive/v0.7-p1-baseline.md`.
|
|
19
19
|
*
|
|
20
20
|
* Per Eve verification (proposals doc has ZERO `prime` / `arrow`
|
|
21
21
|
* mentions), v0.7.0 ships only the §2.2 sketch fields:
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*
|
|
16
16
|
* Design: `docs/planning/v0.7-Proposal-1-Design.md` Decisions #2,
|
|
17
17
|
* #4, #10. Empirical census at
|
|
18
|
-
* `docs/architecture/v0.7-p1-baseline.md`.
|
|
18
|
+
* `docs/architecture/archive/v0.7-p1-baseline.md`.
|
|
19
19
|
*
|
|
20
20
|
* Per Eve verification (proposals doc has ZERO `prime` / `arrow`
|
|
21
21
|
* mentions), v0.7.0 ships only the §2.2 sketch fields:
|
|
@@ -10,15 +10,25 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Per P8 Decision #1, this lives in `src/diff/` (NOT in
|
|
12
12
|
* `src/bridges/`), keeping bridge evaluators untouched. The AD
|
|
13
|
-
* dependency `mathts-autograd` is in `optionalDependencies
|
|
14
|
-
*
|
|
15
|
-
* `
|
|
16
|
-
*
|
|
13
|
+
* dependency `mathts-autograd` is in `optionalDependencies`. Note this
|
|
14
|
+
* gives `bridgeGradient` TWO failure modes, not graceful success: when
|
|
15
|
+
* the peer is ABSENT it throws `EngineCapabilityError`; when the peer is
|
|
16
|
+
* PRESENT it still throws (see the AD limitation below) — installing the
|
|
17
|
+
* peer does not make AD of the plain-JS bridges work.
|
|
17
18
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* IMPORTANT — AD limitation (verified empirically): `bridgeGradient`
|
|
20
|
+
* does NOT actually differentiate the catalog evaluators. Because P8
|
|
21
|
+
* Decision #1 keeps those evaluators as plain-JS scalar functions
|
|
22
|
+
* (`Math.*` / raw arithmetic on numbers), neither reverse-mode (tape)
|
|
23
|
+
* nor forward-mode (dual) AD can trace them — the tape/dual instrument
|
|
24
|
+
* only sees ops routed through engine-traced tensors. With
|
|
25
|
+
* `Float64ReferenceEngine` the AD path throws; with `MathTSEngine` it
|
|
26
|
+
* also throws (the autograd `TapedTensor` does not survive
|
|
27
|
+
* `engine.toNested`). `bridgeGradient` therefore only works for
|
|
28
|
+
* functions written in engine ops — not the plain-JS bridges.
|
|
29
|
+
*
|
|
30
|
+
* The SUPPORTED way to differentiate a plain-JS bridge evaluator is
|
|
31
|
+
* {@link bridgeGradientNumerical} (central finite differences, no engine).
|
|
22
32
|
*
|
|
23
33
|
* @module diff/bridge-gradient
|
|
24
34
|
*/
|
|
@@ -91,4 +101,37 @@ export declare function bridgeGradient<Input>(spec: BridgeDiffSpec<Input>, engin
|
|
|
91
101
|
* @public
|
|
92
102
|
*/
|
|
93
103
|
export declare function gradientToNamed<Input>(spec: BridgeDiffSpec<Input>, gradient: EngineTensor, engine: TensorEngine): Record<string, number>;
|
|
104
|
+
/**
|
|
105
|
+
* Result of {@link bridgeGradientNumerical}: the bridge's scalar `value`
|
|
106
|
+
* at the supplied point, plus the `gradient` of partial derivatives keyed
|
|
107
|
+
* by `paramName` (insertion follows `spec.paramNames` order).
|
|
108
|
+
*
|
|
109
|
+
* @public
|
|
110
|
+
*/
|
|
111
|
+
export interface BridgeNumericalGradientResult {
|
|
112
|
+
readonly value: number;
|
|
113
|
+
readonly gradient: Readonly<Record<string, number>>;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Gradient of a bridge evaluator by **central finite differences** — the
|
|
117
|
+
* supported way to differentiate the catalog's plain-JS evaluators.
|
|
118
|
+
*
|
|
119
|
+
* Reverse-/forward-mode AD ({@link bridgeGradient}) cannot trace these
|
|
120
|
+
* evaluators: per P8 Decision #1 they are plain-JS scalar functions
|
|
121
|
+
* (`Math.*` / raw arithmetic on numbers), so a tape/dual engine observes no
|
|
122
|
+
* traced ops. `bridgeGradientNumerical` perturbs the inputs instead, so it
|
|
123
|
+
* needs no engine and is synchronous.
|
|
124
|
+
*
|
|
125
|
+
* For each differentiable param with value `x` it uses a relative step
|
|
126
|
+
* `h = max(|x|, 1)·cbrt(eps)` and the ACTUAL representable denominator
|
|
127
|
+
* `dx = (x + h) − (x − h)` — so the perturbation survives floating-point
|
|
128
|
+
* rounding even at astrophysical scales (e.g. `M ≈ 2e30 kg`). The supplied
|
|
129
|
+
* `params` must contain every key in `spec.paramNames`; non-differentiable
|
|
130
|
+
* fields come from `spec.defaults`.
|
|
131
|
+
*
|
|
132
|
+
* @public
|
|
133
|
+
*/
|
|
134
|
+
export declare function bridgeGradientNumerical<Input>(spec: BridgeDiffSpec<Input>, params: Record<string, number>, opts?: {
|
|
135
|
+
readonly relStep?: number;
|
|
136
|
+
}): BridgeNumericalGradientResult;
|
|
94
137
|
//# sourceMappingURL=bridge-gradient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-gradient.d.ts","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bridge-gradient.d.ts","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAIhF;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK;IACnC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC;IACzD;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,KAAK,EACxC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAC3B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAmC/B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EACnC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAC3B,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAUD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAC3C,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,6BAA6B,CAmC/B"}
|
|
@@ -10,15 +10,25 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Per P8 Decision #1, this lives in `src/diff/` (NOT in
|
|
12
12
|
* `src/bridges/`), keeping bridge evaluators untouched. The AD
|
|
13
|
-
* dependency `mathts-autograd` is in `optionalDependencies
|
|
14
|
-
*
|
|
15
|
-
* `
|
|
16
|
-
*
|
|
13
|
+
* dependency `mathts-autograd` is in `optionalDependencies`. Note this
|
|
14
|
+
* gives `bridgeGradient` TWO failure modes, not graceful success: when
|
|
15
|
+
* the peer is ABSENT it throws `EngineCapabilityError`; when the peer is
|
|
16
|
+
* PRESENT it still throws (see the AD limitation below) — installing the
|
|
17
|
+
* peer does not make AD of the plain-JS bridges work.
|
|
17
18
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* IMPORTANT — AD limitation (verified empirically): `bridgeGradient`
|
|
20
|
+
* does NOT actually differentiate the catalog evaluators. Because P8
|
|
21
|
+
* Decision #1 keeps those evaluators as plain-JS scalar functions
|
|
22
|
+
* (`Math.*` / raw arithmetic on numbers), neither reverse-mode (tape)
|
|
23
|
+
* nor forward-mode (dual) AD can trace them — the tape/dual instrument
|
|
24
|
+
* only sees ops routed through engine-traced tensors. With
|
|
25
|
+
* `Float64ReferenceEngine` the AD path throws; with `MathTSEngine` it
|
|
26
|
+
* also throws (the autograd `TapedTensor` does not survive
|
|
27
|
+
* `engine.toNested`). `bridgeGradient` therefore only works for
|
|
28
|
+
* functions written in engine ops — not the plain-JS bridges.
|
|
29
|
+
*
|
|
30
|
+
* The SUPPORTED way to differentiate a plain-JS bridge evaluator is
|
|
31
|
+
* {@link bridgeGradientNumerical} (central finite differences, no engine).
|
|
22
32
|
*
|
|
23
33
|
* @module diff/bridge-gradient
|
|
24
34
|
*/
|
|
@@ -80,4 +90,61 @@ export function gradientToNamed(spec, gradient, engine) {
|
|
|
80
90
|
});
|
|
81
91
|
return out;
|
|
82
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Relative step for central differences: `cbrt(eps)` balances the `O(h²)`
|
|
95
|
+
* truncation error against the `O(eps/h)` round-off error (the central-diff
|
|
96
|
+
* optimum). `sqrt(eps)` — the FORWARD-diff optimum — would leave precision on
|
|
97
|
+
* the table for central differences.
|
|
98
|
+
*/
|
|
99
|
+
const CENTRAL_DIFF_REL_STEP = Math.cbrt(Number.EPSILON); // ≈ 6.06e-6
|
|
100
|
+
/**
|
|
101
|
+
* Gradient of a bridge evaluator by **central finite differences** — the
|
|
102
|
+
* supported way to differentiate the catalog's plain-JS evaluators.
|
|
103
|
+
*
|
|
104
|
+
* Reverse-/forward-mode AD ({@link bridgeGradient}) cannot trace these
|
|
105
|
+
* evaluators: per P8 Decision #1 they are plain-JS scalar functions
|
|
106
|
+
* (`Math.*` / raw arithmetic on numbers), so a tape/dual engine observes no
|
|
107
|
+
* traced ops. `bridgeGradientNumerical` perturbs the inputs instead, so it
|
|
108
|
+
* needs no engine and is synchronous.
|
|
109
|
+
*
|
|
110
|
+
* For each differentiable param with value `x` it uses a relative step
|
|
111
|
+
* `h = max(|x|, 1)·cbrt(eps)` and the ACTUAL representable denominator
|
|
112
|
+
* `dx = (x + h) − (x − h)` — so the perturbation survives floating-point
|
|
113
|
+
* rounding even at astrophysical scales (e.g. `M ≈ 2e30 kg`). The supplied
|
|
114
|
+
* `params` must contain every key in `spec.paramNames`; non-differentiable
|
|
115
|
+
* fields come from `spec.defaults`.
|
|
116
|
+
*
|
|
117
|
+
* @public
|
|
118
|
+
*/
|
|
119
|
+
export function bridgeGradientNumerical(spec, params, opts) {
|
|
120
|
+
const relStep = opts?.relStep ?? CENTRAL_DIFF_REL_STEP;
|
|
121
|
+
// Same contract as bridgeGradient: every paramName must be a number.
|
|
122
|
+
for (const k of spec.paramNames) {
|
|
123
|
+
if (typeof params[k] !== 'number') {
|
|
124
|
+
throw new TypeError(`bridgeGradientNumerical: ${spec.bridgeId}: missing or non-numeric param '${k}' ` +
|
|
125
|
+
`(got ${typeof params[k]}). All paramNames must be numbers in the params object.`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Build the full Input struct (defaults + differentiable params), with an
|
|
129
|
+
// optional single-param override for the perturbed evaluations.
|
|
130
|
+
const buildInput = (override) => {
|
|
131
|
+
const input = { ...spec.defaults };
|
|
132
|
+
for (const k of spec.paramNames)
|
|
133
|
+
input[k] = params[k];
|
|
134
|
+
if (override)
|
|
135
|
+
input[override.key] = override.val;
|
|
136
|
+
return input;
|
|
137
|
+
};
|
|
138
|
+
const value = spec.evaluate(buildInput());
|
|
139
|
+
const gradient = {};
|
|
140
|
+
for (const k of spec.paramNames) {
|
|
141
|
+
const x = params[k];
|
|
142
|
+
const h = Math.max(Math.abs(x), 1) * relStep;
|
|
143
|
+
const dx = x + h - (x - h); // actual representable step (huge-x safe)
|
|
144
|
+
const fp = spec.evaluate(buildInput({ key: k, val: x + h }));
|
|
145
|
+
const fm = spec.evaluate(buildInput({ key: k, val: x - h }));
|
|
146
|
+
gradient[k] = (fp - fm) / dx;
|
|
147
|
+
}
|
|
148
|
+
return { value, gradient };
|
|
149
|
+
}
|
|
83
150
|
//# sourceMappingURL=bridge-gradient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-gradient.js","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bridge-gradient.js","sourceRoot":"","sources":["../../src/diff/bridge-gradient.ts"],"names":[],"mappings":"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"}
|