@vessel-dsp/runtime 0.3.1 → 0.4.1
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 +7 -3
- package/dist/reference-runtime.d.ts +223 -5
- package/dist/reference-runtime.d.ts.map +1 -1
- package/dist/reference-runtime.js +669 -107
- package/dist/reference-runtime.js.map +1 -1
- package/dist/resample.d.ts +68 -0
- package/dist/resample.d.ts.map +1 -0
- package/dist/resample.js +204 -0
- package/dist/resample.js.map +1 -0
- package/dist/v2-wasm-engine.d.ts +32 -0
- package/dist/v2-wasm-engine.d.ts.map +1 -1
- package/dist/v2-wasm-engine.js +49 -1
- package/dist/v2-wasm-engine.js.map +1 -1
- package/dist/wasm/v2_dsp.cjs +1 -1
- package/dist/wasm/v2_dsp.wasm +0 -0
- package/dist/worklet/v2-audio-worklet.js +720 -101
- package/package.json +2 -2
- package/dist/numeric-pivot.d.ts +0 -4
- package/dist/numeric-pivot.d.ts.map +0 -1
- package/dist/numeric-pivot.js +0 -192
- package/dist/numeric-pivot.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Headless real time MNA simulation runtime and solver console for compiled Vessel
|
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
|
-
`@vessel-dsp/runtime` 0.
|
|
7
|
+
`@vessel-dsp/runtime` 0.4.1 is on npm. Use runtime 0.2.1 or later (0.3.0 adds the packaged worklet): 0.2.0 cannot load a program inside an AudioWorklet (`structuredClone` is not defined there).
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
```bash
|
|
@@ -57,7 +57,9 @@ The previous version of this example constructed `new ReferenceRuntime(program,
|
|
|
57
57
|
- `maxNewtonIterations` (default `DEFAULT_NEWTON_MAX_ITERATIONS`): CPU versus accuracy knob. Samples that exhaust it are held and counted in telemetry, never silently interpolated.
|
|
58
58
|
- `realtimeBudget`: opt in admission gate; omitted means no gating.
|
|
59
59
|
- `inputSourceOhms` (default 0): series impedance of whatever drives the input jack. A console setting, not a program one. A fuzz face driven from an ideal source renders at constant maximum harshness; a guitar source is several kOhm.
|
|
60
|
-
- `oversample` (default 1): integer sub samples per host sample.
|
|
60
|
+
- `oversample` (default 1): integer sub samples per host sample. A power of two of 2 or more solves the circuit at `sampleRate * oversample` behind a band-limited half-band FIR cascade: one 2x stage per factor of two, interpolating on the way up and decimating on the way down, with a fixed per-stage prototype (41 taps at Kaiser beta 6.0, then 29 at 7.0, then 21 at 6.0; stages past the table reuse the last entry). Coefficients depend on the stage only, never on the circuit. The cascade is linear phase and delays the output by 19.5 / 26.25 / 28.625 host samples at 2x / 4x / 8x (0.41 / 0.55 / 0.60 ms at 48 kHz), read back by `oversampleLatency()` (`null` before `prepare()`); `hostSampleRate()` reports the host rate. Any other factor (3, 5, ...) keeps the held path: the input sample is held flat across the sub samples and the last sub sample is the output, latency 0. Factor 1 executes the same operations in the same order as before.
|
|
61
|
+
|
|
62
|
+
At `oversample` 2 or more, a standard audio-pass Newton solve of a nonlinear block starts from a self-selecting extrapolation (order 0, 1 or 2) of the block's last three converged solutions, chosen after every converged solve by scoring the three candidates against the solution in tolerance units and used only after a solve that took at most two iterations; a non-converged solve breaks the chain, and `prepare()` clears it. **At the default factor 1 the predictor does not run:** nothing seeds and nothing records, and every solve starts from the previous solution, as in runtime 0.3.1 (it ran at every factor in 0.4.0; 0.4.1 gated it because at factor 1 it bought 2.9 % / 10.1 % fewer iterations across the pedal / amp corpus while moving `boss-dm-2` by 6.2 % of its cold-start peak). The factor is fixed by `prepare()`, so there is no switch mid run. There is no knob: it changes which iterate inside the convergence tolerance is accepted, not the tolerance.
|
|
61
63
|
|
|
62
64
|
`process(input: Float64Array): Float64Array` renders one block and returns a new array. Any block length is accepted. `reset()` clears reactive state. `telemetry()` returns per run solver census: samples, non converged, stalled, solved but flagged, per block Newton census, non finite, peak iterations, operating point failures, `operatingPointSupplyAmps`, `renderedSupplyPeakAmps` (null until a sample renders), total iterations, last failure.
|
|
63
65
|
|
|
@@ -98,7 +100,9 @@ What it does not do: no mutation of the caller `Program` (two runtimes from one
|
|
|
98
100
|
|
|
99
101
|
`V2WasmEngine` is the compiled C++/WASM console for the same programs. It ships in this package: `bun run --cwd packages/runtime build:wasm` (needs `em++`) writes `v2_dsp.cjs` plus `v2_dsp.wasm` to the gitignored `src/wasm/`, `build` copies them to `dist/wasm/`, and `prepack` does both, so the published tarball always carries a freshly built console. The 0.2.0 tarball is about 1.0 MB packed (3.1 MB unpacked): 2.1 MB of wasm plus about 15 KB of glue.
|
|
100
102
|
|
|
101
|
-
`V2WasmEngine.create(program?)` loads the glue from the package's own `dist/wasm/` — no path to configure — and optionally loads a program. `prepare({ sampleRate, maxNewtonIterations, inputSourceOhms })` (rate defaults to 48000), `processSample` / `processBlock` on `Float32Array`s, `getControl` beside `setControl`, `getSupplies`/`setSupply` with the same validation and `RuntimeError` behaviour as the reference console,
|
|
103
|
+
`V2WasmEngine.create(program?)` loads the glue from the package's own `dist/wasm/` — no path to configure — and optionally loads a program. `prepare({ sampleRate, maxNewtonIterations, inputSourceOhms, oversample })` (rate defaults to 48000, `oversample` to 1, validated as on the reference console and running the same half-band cascade, latency and held-path rules), `hostSampleRate()` / `oversampleLatency()` with the reference console's names and `null`-before-`prepare()` semantics, `processSample` / `processBlock` on `Float32Array`s, `getControl` beside `setControl`, `getSupplies`/`setSupply` with the same validation and `RuntimeError` behaviour as the reference console, schedule telemetry (`getScheduleTelemetry`: solves, fallbacks, kernel solves, repivoted, abandoned, dropped blocks — a healthy packet reads zero fallbacks and zero abandoned blocks), and Newton start predictor telemetry (`getPredictorTelemetry`: `seedsUsed`, `oneIterationSolves`, `totalIterations` since `prepare()`/`reset()`; `getPredictorOrder(blockIdx)`: the order 0/1/2 the block's next solve seeds from, -1 for a bad index). The console runs the same predictor as the reference, behind the same `oversample > 1` gate, and makes the same order decision sample for sample; at `oversample` 1 `seedsUsed` and `oneIterationSolves` stay 0 and `getPredictorOrder` reads 0.
|
|
104
|
+
|
|
105
|
+
Native exports (the glue's `_v2_engine_*` functions) changed in runtime 0.4.0: `v2_engine_prepare` is now `(handle, sampleRate, maxNewtonIterations, inputSourceOhms, oversample)` — the `oversample` argument was added to the existing export, not shipped beside it, so a host calling the glue directly must pass it (the wrapper does). New exports: `v2_engine_get_host_sample_rate`, `v2_engine_get_oversample_latency` (doubles, -1 before prepare), `v2_engine_get_predictor_seeds`, `v2_engine_get_one_iteration_solves`, `v2_engine_get_total_iterations` (doubles), `v2_engine_get_predictor_order(handle, blockIdx)` (int32), and the test-only `v2_resample_*` / `v2_testonly_resample_*` getters the package's own tests use.
|
|
102
106
|
|
|
103
107
|
A host that cannot dynamically import the glue — an `AudioWorkletGlobalScope` bundles it statically and has no `fetch` — instantiates the module from pre-fetched bytes and passes it as the second argument: `V2WasmEngine.create(program, mod)`, where `mod` comes from the glue factory called with `{ wasmBinary }` read from `@vessel-dsp/runtime/wasm/v2_dsp.wasm`. See the Runtime guide for both paths end to end; on a biased BJT stage the two consoles agree sample by sample to about 1e-7.
|
|
104
108
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ClockLawParams, ControlId, DelayLengthSpec, Program } from "@vessel-dsp/compiler";
|
|
1
|
+
import type { ClockLawParams, ControlId, DelayLengthSpec, Program, SparseSchedule } from "@vessel-dsp/compiler";
|
|
2
2
|
import { type RealtimeBudget } from "./admission";
|
|
3
3
|
import type { SupplyAddress, SupplyInfo } from "./supply";
|
|
4
4
|
/**
|
|
@@ -234,6 +234,20 @@ export declare class ReferenceRuntime {
|
|
|
234
234
|
* correct at the sub-sample rate. `hostSampleRate()` is the rate a caller passed in.
|
|
235
235
|
*/
|
|
236
236
|
private oversample;
|
|
237
|
+
/**
|
|
238
|
+
* Band-limited resampling around the solver, one 2x half-band stage per
|
|
239
|
+
* entry, cascaded for 4x and 8x. Empty unless `oversample` is a power of
|
|
240
|
+
* two greater than 1; any other factor keeps the legacy hold-and-last
|
|
241
|
+
* path below. Built fresh (zero state) in `prepare()`, so the filter
|
|
242
|
+
* state never leaks across renders and block splits stay bit-identical.
|
|
243
|
+
*/
|
|
244
|
+
private resampleUp;
|
|
245
|
+
private resampleDown;
|
|
246
|
+
/** Scratch for the sub-sample streams, sized to `oversample` in `prepare()`. */
|
|
247
|
+
private resampleBufA;
|
|
248
|
+
private resampleBufB;
|
|
249
|
+
/** Total resampler group delay in host samples (0 on the legacy path). */
|
|
250
|
+
private resampleLatencyHost;
|
|
237
251
|
private readonly positions;
|
|
238
252
|
private readonly lastShiftedSample;
|
|
239
253
|
/**
|
|
@@ -474,6 +488,50 @@ export declare class ReferenceRuntime {
|
|
|
474
488
|
* samples 4800 of 4800 -> 22.
|
|
475
489
|
*/
|
|
476
490
|
private readonly unproductiveUntilSample;
|
|
491
|
+
/**
|
|
492
|
+
* Per block, the last three converged sub-sample solutions and the extrapolation order
|
|
493
|
+
* that would have predicted the newest of them best, for the Newton start predictor.
|
|
494
|
+
*
|
|
495
|
+
* **The start of a Newton solve is a guess, and the previous solution is only the
|
|
496
|
+
* cheapest guess, not the best one.** At 4x oversampling the circuit moves a quarter as
|
|
497
|
+
* far per solve, and a quadratic extrapolation of the last three solutions lands inside
|
|
498
|
+
* the convergence tolerance on most sub-samples, so the first Newton step is already the
|
|
499
|
+
* answer and the check that follows it is the whole solve: one iteration where the
|
|
500
|
+
* previous-solution start needs two (one step, one check). Measured 2026-10-09 on the six
|
|
501
|
+
* profile packets at os4 (`docs/spikes/2026-10-09-newton-iteration-budget.md`): iterations
|
|
502
|
+
* per host sample fall 38-47 % on the pedals with every converged solution within 0.02
|
|
503
|
+
* tolerance units of the full-Newton solution from the same state.
|
|
504
|
+
*
|
|
505
|
+
* **The order is chosen by the block's own history, not by a constant.** After every
|
|
506
|
+
* converged solve the three candidate starts the history could have produced (order 0 =
|
|
507
|
+
* the previous solution, 1 = linear, 2 = quadratic) are scored against the solution just
|
|
508
|
+
* reached, in tolerance units, and the best one is used for the next solve -- but only
|
|
509
|
+
* when that solve took at most two iterations (the floor: one step and one check). A
|
|
510
|
+
* solve that needed more was hunting across a knee, and there a closer start is not a
|
|
511
|
+
* cheaper one (`recordNewtonSolution` has the measurement). On a hard edge the
|
|
512
|
+
* extrapolations overshoot the clipping knee and score worse than the previous solution,
|
|
513
|
+
* so the next solve starts exactly where it always did; on a signal it cannot predict it
|
|
514
|
+
* costs nothing. A non-converged solve breaks the chain (no history to extrapolate from).
|
|
515
|
+
*
|
|
516
|
+
* Only the start moves. The convergence test, the limiter histories, the relaxation rule
|
|
517
|
+
* and the fold reseed (which reads the caller's `start`, the previous solution) are
|
|
518
|
+
* untouched, so what converges is still the circuit's equations at the shipped
|
|
519
|
+
* tolerances -- a different first iterate, the same fixed point.
|
|
520
|
+
*
|
|
521
|
+
* **It runs only when `prepare()` was given `oversample > 1`; at factor 1 (the default)
|
|
522
|
+
* it neither seeds nor records, so the ring stays empty and the solve is the one runtime
|
|
523
|
+
* 0.3.1 ran.** It shipped in 0.4.0 at every factor and was gated here in 0.4.1 because at
|
|
524
|
+
* factor 1 it buys little and moves the output more than that saving is worth: iterations
|
|
525
|
+
* fall 2.9 % across the pedal corpus and 10.1 % across the amps (1 kHz 0.1 V, cap 64),
|
|
526
|
+
* against `boss-dm-2` moving 6.2 % of its cold-start peak (0.5-0.8 % of the settled peak)
|
|
527
|
+
* and `boss-mt-2` stalling the WASM console permanently from 2.752 s of two-tone drive
|
|
528
|
+
* (it does not stall with the predictor off). Above 1 it stays on for every factor, the
|
|
529
|
+
* held path included (iterations on the profile packets: 2x -6..-15 %, 3x 0..-1 %, 4x
|
|
530
|
+
* -39..-47 %, 5x/6x -8..-24 %, 8x -44..-50 %; output movement at most 6e-6 relative RMS).
|
|
531
|
+
* The factor is fixed by `prepare()` (which also clears the ring), so there is no mid-run
|
|
532
|
+
* switch to reason about.
|
|
533
|
+
*/
|
|
534
|
+
private readonly newtonStartHistory;
|
|
477
535
|
private readonly blockNewtonCensus;
|
|
478
536
|
private totalIterations;
|
|
479
537
|
private nonFiniteSamples;
|
|
@@ -689,10 +747,23 @@ export declare class ReferenceRuntime {
|
|
|
689
747
|
* multiplier spends the most where it buys least, so the factor belongs with whoever
|
|
690
748
|
* knows the packet -- `report-newton-deadline` computes the stiffness signal.
|
|
691
749
|
*
|
|
692
|
-
* **What it does
|
|
693
|
-
* host sample is
|
|
694
|
-
*
|
|
695
|
-
*
|
|
750
|
+
* **What it does.** At a power-of-two factor (2, 4, 8, ...), each
|
|
751
|
+
* host sample is band-limited interpolated up by cascaded half-band
|
|
752
|
+
* FIR 2x stages, solved at the sub-sample rate, and FIR-decimated
|
|
753
|
+
* back to one host sample per input sample. The interpolation
|
|
754
|
+
* removes the input hold's sinc droop and the decimation removes
|
|
755
|
+
* folded harmonics, so a 48 kHz host at 4x renders like a true
|
|
756
|
+
* 192 kHz simulation of the band-limited host signal. The filters
|
|
757
|
+
* are linear-phase, designed in `prepare()` from the stage alone
|
|
758
|
+
* (never the circuit), with their state carried across `process()`
|
|
759
|
+
* calls; the total group delay in host samples is reported by
|
|
760
|
+
* `oversampleLatency()`.
|
|
761
|
+
*
|
|
762
|
+
* **What it does not do.** At factor 1, or a factor that is not a
|
|
763
|
+
* power of two, decimation here is zero-order: the last
|
|
764
|
+
* sub-sample of each host sample is the output. That is what the
|
|
765
|
+
* 47-to-50 measurement was taken with. A band-limiting decimator
|
|
766
|
+
* for non-power-of-two factors is not implemented.
|
|
696
767
|
*/
|
|
697
768
|
readonly oversample?: number;
|
|
698
769
|
}): void;
|
|
@@ -832,8 +903,49 @@ export declare class ReferenceRuntime {
|
|
|
832
903
|
* smallest dropped disagreement is `boss-aw-2` at `9.8e+3`. Dense is not
|
|
833
904
|
* assumed right -- `tw-1` diverges on 61 samples densely while converging
|
|
834
905
|
* sparsely -- the gate only fires where the replay demonstrably collapses.
|
|
906
|
+
*
|
|
907
|
+
* A validating shipped order is still replaced when the value-aware candidate
|
|
908
|
+
* reaches the audio-agreement bar (1e-9) an order of magnitude more cleanly
|
|
909
|
+
* without meaningful fill cost -- the refinement in `SCHEDULE_REFINEMENT_BAR`.
|
|
910
|
+
* Bar-clean ties keep shipped even when the audios differ: the
|
|
911
|
+
* operating-point replay cannot adjudicate audio-time divergence (`boss-os-2`
|
|
912
|
+
* replays 3.4e-10 shipped vs 2.5e-13 candidate while the audios differ 1000x),
|
|
913
|
+
* so the rule only moves past the bar it can measure, never on a tie.
|
|
914
|
+
* Measured adopters: `boss-sd-1` (1.8e-9 to 4.2e-13, audio 6.9e-8 to
|
|
915
|
+
* 6.5e-12).
|
|
835
916
|
*/
|
|
836
917
|
private settlePivotOrders;
|
|
918
|
+
/**
|
|
919
|
+
* Adopt a value-aware replacement order for a block, from settle or from
|
|
920
|
+
* the mid-run re-pivot, with one shared bookkeeping shape.
|
|
921
|
+
*
|
|
922
|
+
* The replacement's slots are a superset of the shipped filled pattern
|
|
923
|
+
* whose extra cells no stamp writes (see `computeNumericRepivot`), so the
|
|
924
|
+
* pattern-sized matrix refresh keeps reading correct zeros and neither
|
|
925
|
+
* `clearPairs` nor the selective-copy machinery needs a rebuild -- the
|
|
926
|
+
* same reason a dropped block, which does change the refresh, sets
|
|
927
|
+
* `clearPairs` to null where this does not.
|
|
928
|
+
*/
|
|
929
|
+
private adoptRepivotedSchedule;
|
|
930
|
+
/**
|
|
931
|
+
* The mid-run half of the pivot-guard contract: at the consecutive-trip
|
|
932
|
+
* limit, re-pivot once from the current matrix instead of abandoning.
|
|
933
|
+
*
|
|
934
|
+
* Takes the stamped matrix and rhs snapshotted before the dense fallback
|
|
935
|
+
* destroyed them, plus the fallback's answer, and returns whether a
|
|
936
|
+
* value-aware order was adopted. Adoption needs the rescue standard --
|
|
937
|
+
* replay within `SCHEDULE_VALIDATION_TOL` of the dense answer on this
|
|
938
|
+
* matrix -- the same bar a collapse rescue clears at settle, because this
|
|
939
|
+
* is a rescue: the shipped order demonstrably does not suit this
|
|
940
|
+
* operating region. A refusal (null candidate, tripped replay, or a
|
|
941
|
+
* disagreeing replay) returns false and the caller abandons exactly as
|
|
942
|
+
* before, with the reason naming the refusal. Either outcome lands in
|
|
943
|
+
* the plan row, so a mid-run adoption is as visible as a settle one.
|
|
944
|
+
*
|
|
945
|
+
* Structured for direct unit testing (pure inputs, boolean verdict): the
|
|
946
|
+
* corpus never trips the guard, so no corpus run exercises this path.
|
|
947
|
+
*/
|
|
948
|
+
private adoptMidRunRepivot;
|
|
837
949
|
/**
|
|
838
950
|
* Which blocks took the static schedule and which kept the dense solve, and how often the
|
|
839
951
|
* pivot guard sent a solve back to the dense path.
|
|
@@ -866,6 +978,28 @@ export declare class ReferenceRuntime {
|
|
|
866
978
|
readonly scheduleFallbacks: number;
|
|
867
979
|
};
|
|
868
980
|
process(input: Float64Array): Float64Array;
|
|
981
|
+
/**
|
|
982
|
+
* One host sample through the legacy path: the input held flat across the
|
|
983
|
+
* sub-samples, the last sub-sample kept. Bit-identical to the behaviour
|
|
984
|
+
* before the band-limited resampler existed, which is what makes factor 1
|
|
985
|
+
* (and non-power-of-two factors) cost nothing and change nothing.
|
|
986
|
+
*/
|
|
987
|
+
private processHeldSample;
|
|
988
|
+
/**
|
|
989
|
+
* One host sample through the band-limited path: half-band interpolate up
|
|
990
|
+
* by 2 per stage, solve each sub-sample, FIR-decimate back to one host
|
|
991
|
+
* sample. The resampler state lives on the stages across `process()`
|
|
992
|
+
* calls, so any block split renders bit-identically to one long call;
|
|
993
|
+
* the group delay this adds is reported by `oversampleLatency()`.
|
|
994
|
+
*/
|
|
995
|
+
private processResampledSample;
|
|
996
|
+
/**
|
|
997
|
+
* One sub-sample solve at the solver rate: every block stepped once at
|
|
998
|
+
* `t = elapsedSamples / sampleRate`, returning the output jack's value.
|
|
999
|
+
* Shared by the held and the resampled paths, so factor 1 executes the
|
|
1000
|
+
* same operations in the same order as before the resampler existed.
|
|
1001
|
+
*/
|
|
1002
|
+
private solveSubSample;
|
|
869
1003
|
/**
|
|
870
1004
|
* The rate the caller passed to `prepare`, as opposed to the solver's sub-sample rate.
|
|
871
1005
|
*
|
|
@@ -873,6 +1007,15 @@ export declare class ReferenceRuntime {
|
|
|
873
1007
|
* know what it asked for -- to size a buffer, or to report -- wants this one.
|
|
874
1008
|
*/
|
|
875
1009
|
hostSampleRate(): number | null;
|
|
1010
|
+
/**
|
|
1011
|
+
* The resampler's total group delay in **host** samples, or `null` before
|
|
1012
|
+
* `prepare()`. Zero when the resampler is bypassed (factor 1, or a factor
|
|
1013
|
+
* that is not a power of two and keeps the legacy path): the held path
|
|
1014
|
+
* adds no latency by construction. At 2x/4x/8x this is 19.5/26.25/28.625
|
|
1015
|
+
* host samples for the stage-specific half-band cascade -- a real, reported
|
|
1016
|
+
* latency the caller must absorb or declare, not a hidden one.
|
|
1017
|
+
*/
|
|
1018
|
+
oversampleLatency(): number | null;
|
|
876
1019
|
private processBlock;
|
|
877
1020
|
/**
|
|
878
1021
|
* The composition interpreter (board-p3 row 4): a data-driven graph of
|
|
@@ -1048,6 +1191,19 @@ export declare class ReferenceRuntime {
|
|
|
1048
1191
|
*/
|
|
1049
1192
|
private solveBySourceStepping;
|
|
1050
1193
|
private clearLimiterHistories;
|
|
1194
|
+
/**
|
|
1195
|
+
* The Newton start `newtonStartHistory` selects for this block, or `null` to start from
|
|
1196
|
+
* the caller's previous solution (order 0, or a chain too short for the chosen order).
|
|
1197
|
+
* The returned array is the block's reused scratch: read it before the next solve.
|
|
1198
|
+
*/
|
|
1199
|
+
private predictedNewtonStart;
|
|
1200
|
+
/**
|
|
1201
|
+
* Record a finished standard-pass solve: on convergence, score the three candidate
|
|
1202
|
+
* starts the history could have produced against the solution just reached (one fused
|
|
1203
|
+
* pass, no allocation) and keep the best order for the next solve, then rotate the
|
|
1204
|
+
* solution into the history ring; on failure, break the chain.
|
|
1205
|
+
*/
|
|
1206
|
+
private recordNewtonSolution;
|
|
1051
1207
|
private snapshotLimiterHistories;
|
|
1052
1208
|
private restoreLimiterHistories;
|
|
1053
1209
|
/** Advance reactive memory. Trapezoidal, so it carries both across and through. */
|
|
@@ -1077,4 +1233,66 @@ export declare class ReferenceRuntime {
|
|
|
1077
1233
|
private advanceOpAmpRawState;
|
|
1078
1234
|
private applyStamp;
|
|
1079
1235
|
}
|
|
1236
|
+
/**
|
|
1237
|
+
* Pivot guard floor: a pivot below this absolute value sends the solve back
|
|
1238
|
+
* to the dense path.
|
|
1239
|
+
*
|
|
1240
|
+
* This is deliberately ABSOLUTE, not relative, and that is a measured
|
|
1241
|
+
* position rather than a default. A relative guard (`|pivot| < tau *
|
|
1242
|
+
* max|gathered|`) was implemented and reverted 2026-10-08: at tau 1e-12 it
|
|
1243
|
+
* dropped healthy `boss-ce-5` to dense outright; at 1e-14 it gratuitously
|
|
1244
|
+
* re-pivoted `boss-ch-1`; at 1e-16 it abandoned `boss-dd-3b` and
|
|
1245
|
+
* `mxr-blue-box`, dropped `boss-tw-1` (losing its 0.8x budget fix) and
|
|
1246
|
+
* `mxr-dyna-comp`'s rescue, regressed `boss-nf-1` audio 1000x (7.0e-11 to
|
|
1247
|
+
* 7.7e-05), and put 528k fallback solves onto `moogerfooger-mf-102` for no
|
|
1248
|
+
* audio change. The census behind it: healthy `ce-5`/`ch-1`/carbon-copy
|
|
1249
|
+
* bottom out at 1.0-2.5e-15 while fatal `aw-2` sits at 7.7e-15 -- magnitude
|
|
1250
|
+
* alone cannot separate a healthy late-order gmin pivot from a fatal one,
|
|
1251
|
+
* only a replay against dense can, which is the settle gate's job, not this
|
|
1252
|
+
* one's. So this floor catches exactly what it can judge -- collapse -- and
|
|
1253
|
+
* the re-pivot-once below handles the shape that collapse takes mid-run.
|
|
1254
|
+
* See `docs/spikes/2026-10-08-numeric-pivoting.md`.
|
|
1255
|
+
*
|
|
1256
|
+
* Exported for the unit tests alongside the replay: the trip formula is
|
|
1257
|
+
* load-bearing and the corpus never trips it, so only a synthetic matrix
|
|
1258
|
+
* pins it.
|
|
1259
|
+
*/
|
|
1260
|
+
export declare const SCHEDULE_PIVOT_FLOOR = 1e-18;
|
|
1261
|
+
/**
|
|
1262
|
+
* Whether a validating shipped order should be replaced by the numeric
|
|
1263
|
+
* candidate: the refinement half of `settlePivotOrders`, extracted pure so
|
|
1264
|
+
* both consoles and the unit tests share the exact predicate.
|
|
1265
|
+
*
|
|
1266
|
+
* Adopt only when the shipped order is above the audio-agreement bar while
|
|
1267
|
+
* the candidate reaches it, by an order of magnitude, without meaningful
|
|
1268
|
+
* fill cost. The shipped-side floor matters as much as the candidate-side
|
|
1269
|
+
* bar: without it, bar-clean ties with a 1000x replay gap (`trainwreck`,
|
|
1270
|
+
* `fender-5e3`, `vox-ac15`) churn schedules -- and lose their generated
|
|
1271
|
+
* kernels on the C++ console -- for zero audio gain, and `hiwatt-dr103`
|
|
1272
|
+
* adopts on one console but not the other from libm-level matrix noise.
|
|
1273
|
+
* Every input is an operating-point-replay disagreement or a slot/op count
|
|
1274
|
+
* -- no audio renders, no per-packet gates.
|
|
1275
|
+
*/
|
|
1276
|
+
export declare function shouldRefinePivotOrder(input: {
|
|
1277
|
+
readonly shippedDisagreement: number;
|
|
1278
|
+
readonly candidateDisagreement: number;
|
|
1279
|
+
readonly shippedOps: number;
|
|
1280
|
+
readonly shippedSlots: number;
|
|
1281
|
+
readonly candidateOps: number;
|
|
1282
|
+
readonly candidateSlots: number;
|
|
1283
|
+
}): boolean;
|
|
1284
|
+
/**
|
|
1285
|
+
* Replay a schedule against one stamped matrix.
|
|
1286
|
+
*
|
|
1287
|
+
* Returns `false` without finishing when a pivot has collapsed below
|
|
1288
|
+
* `SCHEDULE_PIVOT_FLOOR`, which is the caller's signal to run the dense solve
|
|
1289
|
+
* for this iteration instead. Nothing the caller still needs is destroyed on
|
|
1290
|
+
* the way: `matrix` is only read (the gather copies out of it), `rhs` is
|
|
1291
|
+
* copied into the schedule's own buffer, and `out` is a scratch buffer the
|
|
1292
|
+
* dense fallback overwrites in full.
|
|
1293
|
+
*
|
|
1294
|
+
* Exported for the unit tests: the trip formula is load-bearing and the
|
|
1295
|
+
* corpus never trips it, so only a synthetic matrix pins the boundary.
|
|
1296
|
+
*/
|
|
1297
|
+
export declare function runSparseSchedule(schedule: SparseSchedule, matrix: number[][], rhs: readonly number[], values: Float64Array, scratchRhs: Float64Array, factors: Float64Array, out: number[]): boolean;
|
|
1080
1298
|
//# sourceMappingURL=reference-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-runtime.d.ts","sourceRoot":"","sources":["../src/reference-runtime.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAGX,cAAc,EAGd,SAAS,EACT,eAAe,EAEf,OAAO,
|
|
1
|
+
{"version":3,"file":"reference-runtime.d.ts","sourceRoot":"","sources":["../src/reference-runtime.ts"],"names":[],"mappings":"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"}
|