@vessel-dsp/compiler 0.0.0-stage → 0.3.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 +118 -2
- package/dist/bake.d.ts +38 -0
- package/dist/bake.d.ts.map +1 -0
- package/dist/bake.js +101 -0
- package/dist/bake.js.map +1 -0
- package/dist/bbd-clock.d.ts +171 -0
- package/dist/bbd-clock.d.ts.map +1 -0
- package/dist/bbd-clock.js +1750 -0
- package/dist/bbd-clock.js.map +1 -0
- package/dist/block-row.d.ts +51 -0
- package/dist/block-row.d.ts.map +1 -0
- package/dist/block-row.js +17 -0
- package/dist/block-row.js.map +1 -0
- package/dist/bypass.d.ts +3 -0
- package/dist/bypass.d.ts.map +1 -0
- package/dist/bypass.js +228 -0
- package/dist/bypass.js.map +1 -0
- package/dist/compile.d.ts +24 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +348 -0
- package/dist/compile.js.map +1 -0
- package/dist/converter-scale.d.ts +14 -0
- package/dist/converter-scale.d.ts.map +1 -0
- package/dist/converter-scale.js +133 -0
- package/dist/converter-scale.js.map +1 -0
- package/dist/couple.d.ts +28 -0
- package/dist/couple.d.ts.map +1 -0
- package/dist/couple.js +567 -0
- package/dist/couple.js.map +1 -0
- package/dist/dangling-active-terminal.d.ts +47 -0
- package/dist/dangling-active-terminal.d.ts.map +1 -0
- package/dist/dangling-active-terminal.js +542 -0
- package/dist/dangling-active-terminal.js.map +1 -0
- package/dist/declared-program.d.ts +23 -0
- package/dist/declared-program.d.ts.map +1 -0
- package/dist/declared-program.js +387 -0
- package/dist/declared-program.js.map +1 -0
- package/dist/denomination.d.ts +48 -0
- package/dist/denomination.d.ts.map +1 -0
- package/dist/denomination.js +27 -0
- package/dist/denomination.js.map +1 -0
- package/dist/device-laws.d.ts +237 -0
- package/dist/device-laws.d.ts.map +1 -0
- package/dist/device-laws.js +3513 -0
- package/dist/device-laws.js.map +1 -0
- package/dist/diagnostics.d.ts +13 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +19 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/emit.d.ts +8 -0
- package/dist/emit.d.ts.map +1 -0
- package/dist/emit.js +43 -0
- package/dist/emit.js.map +1 -0
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/firmware-class.d.ts +69 -0
- package/dist/firmware-class.d.ts.map +1 -0
- package/dist/firmware-class.js +20 -0
- package/dist/firmware-class.js.map +1 -0
- package/dist/fixtures/circuits.d.ts +1742 -0
- package/dist/fixtures/circuits.d.ts.map +1 -0
- package/dist/fixtures/circuits.js +13896 -0
- package/dist/fixtures/circuits.js.map +1 -0
- package/dist/fixtures/expected.d.ts +261 -0
- package/dist/fixtures/expected.d.ts.map +1 -0
- package/dist/fixtures/expected.js +315 -0
- package/dist/fixtures/expected.js.map +1 -0
- package/dist/fixtures/index.d.ts +4 -0
- package/dist/fixtures/index.d.ts.map +1 -0
- package/dist/fixtures/index.js +8 -0
- package/dist/fixtures/index.js.map +1 -0
- package/dist/fixtures/registry.d.ts +52 -0
- package/dist/fixtures/registry.d.ts.map +1 -0
- package/dist/fixtures/registry.js +341 -0
- package/dist/fixtures/registry.js.map +1 -0
- package/dist/generic-tube-fit.d.ts +12 -0
- package/dist/generic-tube-fit.d.ts.map +1 -0
- package/dist/generic-tube-fit.js +45 -0
- package/dist/generic-tube-fit.js.map +1 -0
- package/dist/grounded-clock-supply.d.ts +13 -0
- package/dist/grounded-clock-supply.d.ts.map +1 -0
- package/dist/grounded-clock-supply.js +45 -0
- package/dist/grounded-clock-supply.js.map +1 -0
- package/dist/identify.d.ts +50 -0
- package/dist/identify.d.ts.map +1 -0
- package/dist/identify.js +319 -0
- package/dist/identify.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/inert-controls.d.ts +15 -0
- package/dist/inert-controls.d.ts.map +1 -0
- package/dist/inert-controls.js +266 -0
- package/dist/inert-controls.js.map +1 -0
- package/dist/latch-seed.d.ts +53 -0
- package/dist/latch-seed.d.ts.map +1 -0
- package/dist/latch-seed.js +257 -0
- package/dist/latch-seed.js.map +1 -0
- package/dist/link.d.ts +7 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +270 -0
- package/dist/link.js.map +1 -0
- package/dist/lower.d.ts +79 -0
- package/dist/lower.d.ts.map +1 -0
- package/dist/lower.js +1855 -0
- package/dist/lower.js.map +1 -0
- package/dist/netlist.d.ts +79 -0
- package/dist/netlist.d.ts.map +1 -0
- package/dist/netlist.js +4746 -0
- package/dist/netlist.js.map +1 -0
- package/dist/non-executable-clock-drivers.d.ts +8 -0
- package/dist/non-executable-clock-drivers.d.ts.map +1 -0
- package/dist/non-executable-clock-drivers.js +33 -0
- package/dist/non-executable-clock-drivers.js.map +1 -0
- package/dist/open-category.d.ts +98 -0
- package/dist/open-category.d.ts.map +1 -0
- package/dist/open-category.js +111 -0
- package/dist/open-category.js.map +1 -0
- package/dist/over-driven-node.d.ts +33 -0
- package/dist/over-driven-node.d.ts.map +1 -0
- package/dist/over-driven-node.js +188 -0
- package/dist/over-driven-node.js.map +1 -0
- package/dist/part-catalog.d.ts +15 -0
- package/dist/part-catalog.d.ts.map +1 -0
- package/dist/part-catalog.js +6712 -0
- package/dist/part-catalog.js.map +1 -0
- package/dist/part-number.d.ts +32 -0
- package/dist/part-number.d.ts.map +1 -0
- package/dist/part-number.js +80 -0
- package/dist/part-number.js.map +1 -0
- package/dist/partition.d.ts +7 -0
- package/dist/partition.d.ts.map +1 -0
- package/dist/partition.js +242 -0
- package/dist/partition.js.map +1 -0
- package/dist/port-full-scale.d.ts +70 -0
- package/dist/port-full-scale.d.ts.map +1 -0
- package/dist/port-full-scale.js +235 -0
- package/dist/port-full-scale.js.map +1 -0
- package/dist/pot-orientation.d.ts +114 -0
- package/dist/pot-orientation.d.ts.map +1 -0
- package/dist/pot-orientation.js +551 -0
- package/dist/pot-orientation.js.map +1 -0
- package/dist/power-domain-control.d.ts +40 -0
- package/dist/power-domain-control.d.ts.map +1 -0
- package/dist/power-domain-control.js +142 -0
- package/dist/power-domain-control.js.map +1 -0
- package/dist/proxy-declaration.d.ts +121 -0
- package/dist/proxy-declaration.d.ts.map +1 -0
- package/dist/proxy-declaration.js +50 -0
- package/dist/proxy-declaration.js.map +1 -0
- package/dist/registry.d.ts +323 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +192 -0
- package/dist/registry.js.map +1 -0
- package/dist/sparse-schedule.d.ts +65 -0
- package/dist/sparse-schedule.d.ts.map +1 -0
- package/dist/sparse-schedule.js +421 -0
- package/dist/sparse-schedule.js.map +1 -0
- package/dist/speaker-load.d.ts +38 -0
- package/dist/speaker-load.d.ts.map +1 -0
- package/dist/speaker-load.js +97 -0
- package/dist/speaker-load.js.map +1 -0
- package/dist/stage-coverage.d.ts +21 -0
- package/dist/stage-coverage.d.ts.map +1 -0
- package/dist/stage-coverage.js +124 -0
- package/dist/stage-coverage.js.map +1 -0
- package/dist/stamp-partition.d.ts +314 -0
- package/dist/stamp-partition.d.ts.map +1 -0
- package/dist/stamp-partition.js +472 -0
- package/dist/stamp-partition.js.map +1 -0
- package/dist/supply-reference.d.ts +19 -0
- package/dist/supply-reference.d.ts.map +1 -0
- package/dist/supply-reference.js +66 -0
- package/dist/supply-reference.js.map +1 -0
- package/dist/supply-short.d.ts +32 -0
- package/dist/supply-short.d.ts.map +1 -0
- package/dist/supply-short.js +118 -0
- package/dist/supply-short.js.map +1 -0
- package/dist/supply-stamps.d.ts +51 -0
- package/dist/supply-stamps.d.ts.map +1 -0
- package/dist/supply-stamps.js +363 -0
- package/dist/supply-stamps.js.map +1 -0
- package/dist/terminal-role.d.ts +109 -0
- package/dist/terminal-role.d.ts.map +1 -0
- package/dist/terminal-role.js +46 -0
- package/dist/terminal-role.js.map +1 -0
- package/dist/terminal-roles.d.ts +59 -0
- package/dist/terminal-roles.d.ts.map +1 -0
- package/dist/terminal-roles.js +92 -0
- package/dist/terminal-roles.js.map +1 -0
- package/dist/transformer.d.ts +181 -0
- package/dist/transformer.d.ts.map +1 -0
- package/dist/transformer.js +476 -0
- package/dist/transformer.js.map +1 -0
- package/dist/types.d.ts +3157 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/dist/unbounded-operating-point.d.ts +35 -0
- package/dist/unbounded-operating-point.d.ts.map +1 -0
- package/dist/unbounded-operating-point.js +181 -0
- package/dist/unbounded-operating-point.js.map +1 -0
- package/dist/unexecuted-region.d.ts +3 -0
- package/dist/unexecuted-region.d.ts.map +1 -0
- package/dist/unexecuted-region.js +122 -0
- package/dist/unexecuted-region.js.map +1 -0
- package/dist/unimplemented-control-role.d.ts +3 -0
- package/dist/unimplemented-control-role.d.ts.map +1 -0
- package/dist/unimplemented-control-role.js +61 -0
- package/dist/unimplemented-control-role.js.map +1 -0
- package/dist/unreachable-output.d.ts +3 -0
- package/dist/unreachable-output.d.ts.map +1 -0
- package/dist/unreachable-output.js +97 -0
- package/dist/unreachable-output.js.map +1 -0
- package/dist/unreadable-terminal-role.d.ts +67 -0
- package/dist/unreadable-terminal-role.d.ts.map +1 -0
- package/dist/unreadable-terminal-role.js +409 -0
- package/dist/unreadable-terminal-role.js.map +1 -0
- package/dist/unverified-pinout.d.ts +27 -0
- package/dist/unverified-pinout.d.ts.map +1 -0
- package/dist/unverified-pinout.js +121 -0
- package/dist/unverified-pinout.js.map +1 -0
- package/package.json +75 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
// The part registry is an injected parameter, never an import.
|
|
2
|
+
//
|
|
3
|
+
// This file defines the *shape* of a registry and contains no parts. The compiler
|
|
4
|
+
// therefore has no knowledge of any specific chip, which buys three things:
|
|
5
|
+
//
|
|
6
|
+
// - tests run against a fake registry: no corpus, no real parts, fast;
|
|
7
|
+
// - compiling with an EMPTY registry shows exactly what works with no part
|
|
8
|
+
// knowledge at all, which is the arbitrary-schematic measurement as a compiler
|
|
9
|
+
// input rather than a separate harness;
|
|
10
|
+
// - the catalog can be artifact-owned data, matching the ownership boundary --
|
|
11
|
+
// this repo owns the compiler, vessel-dsp/artifacts owns what an MN3007 is.
|
|
12
|
+
/**
|
|
13
|
+
* The index of the one terminal whose role matches any of `aliases`, or `null`.
|
|
14
|
+
*
|
|
15
|
+
* `null` for no match and for an ambiguous one. Two terminals answering to the same port role is a
|
|
16
|
+
* declaration this entry cannot address — a `SAD1024`'s two cascaded sections both carry an
|
|
17
|
+
* `input` if a document names them that way — and picking the first would be a guess about which
|
|
18
|
+
* half the audio enters.
|
|
19
|
+
*/
|
|
20
|
+
export function terminalWithRole(terminalRoles, aliases) {
|
|
21
|
+
const folded = new Set(aliases.map(foldToken));
|
|
22
|
+
const matches = terminalRoles.flatMap((role, index) => role !== null && folded.has(role) ? [index] : []);
|
|
23
|
+
return matches.length === 1 ? matches[0] : null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Does this device declare the terminal order a `sections` entry's indices were written against?
|
|
27
|
+
*
|
|
28
|
+
* Length must match, and every position the entry names must carry that role token. A position the
|
|
29
|
+
* entry leaves `null` is unchecked, which is what lets a part whose document numbers its pins
|
|
30
|
+
* (`pin1`, `pin2`, ... -- `terminalRoleToken` returns null for those) still be expanded.
|
|
31
|
+
*/
|
|
32
|
+
export function pinoutMatches(pinout, terminalRoles) {
|
|
33
|
+
if (pinout.length !== terminalRoles.length) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
return pinout.every((role, index) => role === null || foldToken(role) === terminalRoles[index]);
|
|
37
|
+
}
|
|
38
|
+
export const emptyRegistry = { entries: [] };
|
|
39
|
+
/**
|
|
40
|
+
* **A RECORDED READ SET: which part entries a macro's parameter computation actually consulted.**
|
|
41
|
+
*
|
|
42
|
+
* `subsumes` claims that a macro accounts for another device. The mutant tests that claim by
|
|
43
|
+
* changing the device and watching the parameters move — which can fail vacuously if the mutation
|
|
44
|
+
* breaks the packet, as it did on its first run. **This is the cheaper primary check and it cannot
|
|
45
|
+
* fail that way**: if the packet does not compile there is no read set at all, so the verdict is
|
|
46
|
+
* INVALID rather than HOLD.
|
|
47
|
+
*
|
|
48
|
+
* **It is a recorded read, not source analysis.** Parsing our own code to decide what it consults
|
|
49
|
+
* is brittle and rots; wrapping the accessor is exact. And the read set is reusable — it answers
|
|
50
|
+
* *"what does this macro's behaviour actually depend on"* for every macro, not only those carrying
|
|
51
|
+
* a claim.
|
|
52
|
+
*/
|
|
53
|
+
let activeReadSet = null;
|
|
54
|
+
const recordedReadSets = new Map();
|
|
55
|
+
/** Run `fn` with registry reads recorded against `owner`. Nesting is honoured; the outer set wins. */
|
|
56
|
+
export function withRecordedReads(owner, fn) {
|
|
57
|
+
const previous = activeReadSet;
|
|
58
|
+
const mine = recordedReadSets.get(owner) ?? new Set();
|
|
59
|
+
recordedReadSets.set(owner, mine);
|
|
60
|
+
activeReadSet = mine;
|
|
61
|
+
try {
|
|
62
|
+
return fn();
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
activeReadSet = previous;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** What each owner consulted. Keyed by the owner string passed to `withRecordedReads`. */
|
|
69
|
+
export function recordedReads() {
|
|
70
|
+
return recordedReadSets;
|
|
71
|
+
}
|
|
72
|
+
/** Forget everything recorded so far. Callers that measure one packet at a time need this. */
|
|
73
|
+
export function clearRecordedReads() {
|
|
74
|
+
recordedReadSets.clear();
|
|
75
|
+
}
|
|
76
|
+
export function registryEntryFor(registry, identity, terminalCount) {
|
|
77
|
+
if (!identity?.partId) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
// Instrumentation only -- no behaviour change. The returned entry is recorded against
|
|
81
|
+
// whichever owner is currently bracketing this call.
|
|
82
|
+
activeReadSet?.add(foldPartId(identity.partId));
|
|
83
|
+
const entries = registry?.entries ?? [];
|
|
84
|
+
if (terminalCount !== undefined) {
|
|
85
|
+
for (const entry of entries) {
|
|
86
|
+
if ((entry.partIds ?? []).some((id) => foldPartId(id) === foldPartId(identity.partId)) &&
|
|
87
|
+
(entry.model.kind !== "sections" &&
|
|
88
|
+
entry.model.kind !== "sections-core" ||
|
|
89
|
+
entry.model.pinout.length === terminalCount ||
|
|
90
|
+
(entry.terminalRoleGroups?.length > 0 &&
|
|
91
|
+
entry.terminalRoleGroups.length === terminalCount))) {
|
|
92
|
+
return entry;
|
|
93
|
+
}
|
|
94
|
+
if ((entry.declaredTypes ?? []).some((type) => foldToken(type) === foldToken(identity.partId)) &&
|
|
95
|
+
(entry.model.kind !== "sections" &&
|
|
96
|
+
entry.model.kind !== "sections-core" ||
|
|
97
|
+
entry.model.pinout.length === terminalCount ||
|
|
98
|
+
(entry.terminalRoleGroups?.length > 0 &&
|
|
99
|
+
entry.terminalRoleGroups.length === terminalCount))) {
|
|
100
|
+
return entry;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
for (const entry of entries) {
|
|
105
|
+
if ((entry.partIds ?? []).some((id) => foldPartId(id) === foldPartId(identity.partId))) {
|
|
106
|
+
return entry;
|
|
107
|
+
}
|
|
108
|
+
if ((entry.declaredTypes ?? []).some((type) => foldToken(type) === foldToken(identity.partId))) {
|
|
109
|
+
return entry;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
export function registryModelFor(registry, identity, terminalCount) {
|
|
115
|
+
const entry = registryEntryFor(registry, identity, terminalCount);
|
|
116
|
+
return entry === null ? null : entry.model;
|
|
117
|
+
}
|
|
118
|
+
/** Part numbers compare ignoring case and separators: `MN-3007` is `mn3007`. */
|
|
119
|
+
export function foldPartId(value) {
|
|
120
|
+
return (value ?? "").toLowerCase().replace(/[^a-z0-9]/gu, "");
|
|
121
|
+
}
|
|
122
|
+
/** Typed vocabulary values compare ignoring case and whitespace, keeping structure. */
|
|
123
|
+
export function foldToken(value) {
|
|
124
|
+
return (value ?? "")
|
|
125
|
+
.trim()
|
|
126
|
+
.toLowerCase()
|
|
127
|
+
.replace(/[\s_-]+/gu, "");
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* The law a registered part supplies for a device whose class already names its law kind.
|
|
131
|
+
*
|
|
132
|
+
* This is rung 1 of `identify.ts`'s evidence ladder and **only** rung 1: an exact manufacturer
|
|
133
|
+
* part number, compared whole and case-folded. The other two rungs are deliberately unreachable
|
|
134
|
+
* here.
|
|
135
|
+
*
|
|
136
|
+
* - **Declared type is not consulted.** `Circuit.Pentode` is a *class*, and resolving a class to
|
|
137
|
+
* one part's model would claim every pentode in the corpus is an EL84 — the same reason
|
|
138
|
+
* `part-catalog.ts` leaves `declaredTypes` empty for op-amps.
|
|
139
|
+
* - **Pinout signature is not consulted.** Every pentode has the same electrodes, so a pinout
|
|
140
|
+
* match cannot tell an EL84 from a KT66. That is exactly the case where a wrong identity is
|
|
141
|
+
* worse than none.
|
|
142
|
+
*
|
|
143
|
+
* `lawKind` must match the law the device's class already implies, so an entry can only refine
|
|
144
|
+
* the law that class was going to get. A triode cannot be handed a pentode's fit by a catalog
|
|
145
|
+
* typo; it falls back instead.
|
|
146
|
+
*
|
|
147
|
+
* Returns `null` when nothing matches, which is a correct and expected answer — the caller keeps
|
|
148
|
+
* its device-class default. See `findGenericTubeFits`, which reports every such fallback, because
|
|
149
|
+
* a silent one is what let every amp in the corpus run a 6V6 fit.
|
|
150
|
+
*/
|
|
151
|
+
export function registryLawFor(registry, partNumber, lawKind) {
|
|
152
|
+
if (partNumber === null) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
const folded = foldPartId(partNumber);
|
|
156
|
+
for (const entry of registry.entries) {
|
|
157
|
+
if (!entry.partIds.some((id) => foldPartId(id) === folded)) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (entry.model.kind === "law" && entry.model.law.kind === lawKind) {
|
|
161
|
+
return entry.model.law;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* How far a part's output stops short of each supply rail, from the registry entry that names
|
|
168
|
+
* it, or `null` when the part is not in the registry or states none (the rails are then used as
|
|
169
|
+
* they are). Read from either an `ideal-opamp` law entry or the first section of a `sections`
|
|
170
|
+
* entry, because a declared `opamp` device never reaches the section lowering.
|
|
171
|
+
*/
|
|
172
|
+
export function registryOpampSwingDrop(registry, partNumber) {
|
|
173
|
+
if (partNumber === null) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
const folded = foldPartId(partNumber);
|
|
177
|
+
for (const entry of registry.entries) {
|
|
178
|
+
if (!entry.partIds.some((id) => foldPartId(id) === folded)) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const law = entry.model.kind === "law"
|
|
182
|
+
? entry.model.law
|
|
183
|
+
: entry.model.kind === "sections"
|
|
184
|
+
? entry.model.sections[0]?.law
|
|
185
|
+
: undefined;
|
|
186
|
+
if (law !== undefined && law.kind === "ideal-opamp") {
|
|
187
|
+
return law.outputSwingDropVolts ?? null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { SparseSchedule, Stamp } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Every matrix entry a stamp can write, over-approximated as the full square over the stamp's
|
|
4
|
+
* own terminals.
|
|
5
|
+
*
|
|
6
|
+
* Read off the shape table in `stamp-partition.ts` rather than restated here. `terminalNodes`
|
|
7
|
+
* lets a kind narrow the set -- only `vccs` does, to its output pair -- and `terminalsDropGround`
|
|
8
|
+
* lets it drop ground, which `vccs` also does and nothing else may, because `schedulePattern`
|
|
9
|
+
* removes row 0 globally but keeps column 0.
|
|
10
|
+
*
|
|
11
|
+
* Order is not significant: the caller expands these into every (row, column) pair and collects
|
|
12
|
+
* them in a `Set`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function stampTerminals(stamp: Stamp, nodeCount: number): readonly number[];
|
|
15
|
+
/**
|
|
16
|
+
* Entries that are provably nonzero at every control position and every Newton iterate,
|
|
17
|
+
* and are therefore the only ones allowed to be pivots.
|
|
18
|
+
*
|
|
19
|
+
* **Two conditions, and both are load-bearing. An entry belongs here only when the stamp
|
|
20
|
+
* writes it (a) in the direction being claimed and (b) on every iterate.** Marking an entry
|
|
21
|
+
* the stamp leaves zero does not produce a wrong answer -- the runtime's pivot guard catches
|
|
22
|
+
* the collapse and re-solves densely -- but it produces a *silently dense* block, which is
|
|
23
|
+
* worse than a slow one because nothing reports it. Measured 2026-09-18 on the shipping
|
|
24
|
+
* console: `boss-ch-1` gave its schedule up inside `prepare()` and ran 100x100 dense for the
|
|
25
|
+
* whole session (12.8x real time), `boss-ce-5` tripped the guard on half its iterations and
|
|
26
|
+
* paid for the schedule *and* the dense solve (6.6x), and `boss-ce-2`, `boss-ce-2b`,
|
|
27
|
+
* `boss-dm-2` and `boss-dd-3b` abandoned within their first 64 audio iterations. Every one of
|
|
28
|
+
* those traced back to an entry marked here that the owning stamp cannot guarantee. See
|
|
29
|
+
* `thoughts/shared/2026-09-18-sparse-schedule-runtime-audit.md`.
|
|
30
|
+
*
|
|
31
|
+
* So `pair()` is for symmetric writes only. A stamp that writes `matrix[row][column]` and not
|
|
32
|
+
* its transpose -- every controlled-source coupling in this file's device set does exactly
|
|
33
|
+
* that -- marks the one entry with `eligible.add`, or marks nothing when the value can vanish.
|
|
34
|
+
*
|
|
35
|
+
* **What this does NOT establish is that an eligible pivot is numerically usable.** Every node
|
|
36
|
+
* diagonal is listed below because the runtime adds `gmin` to it, which is true and nearly
|
|
37
|
+
* useless: a pivot of 1e-12 against entries of order 1e2 is a growth factor of 1e14, and dense
|
|
38
|
+
* partial pivoting would never choose it. That is a separate, open defect (`boss-aw-2` fails to
|
|
39
|
+
* converge on the sparse path and converges in four iterations densely), and it cannot be fixed
|
|
40
|
+
* from the pattern alone -- it needs the pivot search to see magnitudes. Recorded in §6 of the
|
|
41
|
+
* audit above.
|
|
42
|
+
*/
|
|
43
|
+
export declare function provablyNonzeroEntries(block: {
|
|
44
|
+
nodeCount: number;
|
|
45
|
+
stamps: readonly Stamp[];
|
|
46
|
+
}, size: number): Set<number>;
|
|
47
|
+
/**
|
|
48
|
+
* The block's structural pattern: every entry any stamp can write, plus the gmin diagonals,
|
|
49
|
+
* with ground-pin overwrite applied.
|
|
50
|
+
*/
|
|
51
|
+
export declare function schedulePattern(block: {
|
|
52
|
+
nodeCount: number;
|
|
53
|
+
stamps: readonly Stamp[];
|
|
54
|
+
}, size: number): Set<number>;
|
|
55
|
+
/**
|
|
56
|
+
* Work out the elimination order and emit its opcode stream.
|
|
57
|
+
*
|
|
58
|
+
* Returns null when the pattern cannot be eliminated at all (a structurally singular block).
|
|
59
|
+
*/
|
|
60
|
+
export declare function computeSparseSchedule(block: {
|
|
61
|
+
nodeCount: number;
|
|
62
|
+
auxCount: number;
|
|
63
|
+
stamps: readonly Stamp[];
|
|
64
|
+
}): SparseSchedule | null;
|
|
65
|
+
//# sourceMappingURL=sparse-schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparse-schedule.d.ts","sourceRoot":"","sources":["../src/sparse-schedule.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC7B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,GACf,SAAS,MAAM,EAAE,CAQnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;CAAE,EACtD,IAAI,EAAE,MAAM,GACV,GAAG,CAAC,MAAM,CAAC,CAiLb;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;CAAE,EACtD,IAAI,EAAE,MAAM,GACV,GAAG,CAAC,MAAM,CAAC,CAkBb;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;CAAE,GACtE,cAAc,GAAG,IAAI,CAmMvB"}
|