pca-web 0.1.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/LICENSE +21 -0
- package/README.md +421 -0
- package/dist/base.d.ts +79 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +358 -0
- package/dist/base.js.map +1 -0
- package/dist/incremental-pca.d.ts +86 -0
- package/dist/incremental-pca.d.ts.map +1 -0
- package/dist/incremental-pca.js +397 -0
- package/dist/incremental-pca.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/matrix.d.ts +44 -0
- package/dist/matrix.d.ts.map +1 -0
- package/dist/matrix.js +99 -0
- package/dist/matrix.js.map +1 -0
- package/dist/model.d.ts +86 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +132 -0
- package/dist/model.js.map +1 -0
- package/dist/numeric/blas.d.ts +33 -0
- package/dist/numeric/blas.d.ts.map +1 -0
- package/dist/numeric/blas.js +130 -0
- package/dist/numeric/blas.js.map +1 -0
- package/dist/numeric/eigh.d.ts +21 -0
- package/dist/numeric/eigh.d.ts.map +1 -0
- package/dist/numeric/eigh.js +233 -0
- package/dist/numeric/eigh.js.map +1 -0
- package/dist/numeric/lanczos.d.ts +31 -0
- package/dist/numeric/lanczos.d.ts.map +1 -0
- package/dist/numeric/lanczos.js +287 -0
- package/dist/numeric/lanczos.js.map +1 -0
- package/dist/numeric/lu.d.ts +27 -0
- package/dist/numeric/lu.d.ts.map +1 -0
- package/dist/numeric/lu.js +149 -0
- package/dist/numeric/lu.js.map +1 -0
- package/dist/numeric/mle.d.ts +5 -0
- package/dist/numeric/mle.d.ts.map +1 -0
- package/dist/numeric/mle.js +67 -0
- package/dist/numeric/mle.js.map +1 -0
- package/dist/numeric/qr.d.ts +15 -0
- package/dist/numeric/qr.d.ts.map +1 -0
- package/dist/numeric/qr.js +88 -0
- package/dist/numeric/qr.js.map +1 -0
- package/dist/numeric/randomized.d.ts +54 -0
- package/dist/numeric/randomized.d.ts.map +1 -0
- package/dist/numeric/randomized.js +130 -0
- package/dist/numeric/randomized.js.map +1 -0
- package/dist/numeric/rng.d.ts +40 -0
- package/dist/numeric/rng.d.ts.map +1 -0
- package/dist/numeric/rng.js +127 -0
- package/dist/numeric/rng.js.map +1 -0
- package/dist/numeric/special.d.ts +2 -0
- package/dist/numeric/special.d.ts.map +1 -0
- package/dist/numeric/special.js +25 -0
- package/dist/numeric/special.js.map +1 -0
- package/dist/numeric/stats.d.ts +27 -0
- package/dist/numeric/stats.d.ts.map +1 -0
- package/dist/numeric/stats.js +110 -0
- package/dist/numeric/stats.js.map +1 -0
- package/dist/numeric/svd.d.ts +27 -0
- package/dist/numeric/svd.d.ts.map +1 -0
- package/dist/numeric/svd.js +374 -0
- package/dist/numeric/svd.js.map +1 -0
- package/dist/numeric/svdflip.d.ts +9 -0
- package/dist/numeric/svdflip.d.ts.map +1 -0
- package/dist/numeric/svdflip.js +32 -0
- package/dist/numeric/svdflip.js.map +1 -0
- package/dist/pca.d.ts +170 -0
- package/dist/pca.d.ts.map +1 -0
- package/dist/pca.js +649 -0
- package/dist/pca.js.map +1 -0
- package/dist/progress.d.ts +155 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +173 -0
- package/dist/progress.js.map +1 -0
- package/dist/scheduling.d.ts +66 -0
- package/dist/scheduling.d.ts.map +1 -0
- package/dist/scheduling.js +160 -0
- package/dist/scheduling.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +17 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +36 -0
- package/dist/validation.js.map +1 -0
- package/dist/webgpu/df64.d.ts +18 -0
- package/dist/webgpu/df64.d.ts.map +1 -0
- package/dist/webgpu/df64.js +42 -0
- package/dist/webgpu/df64.js.map +1 -0
- package/dist/webgpu/engine.d.ts +74 -0
- package/dist/webgpu/engine.d.ts.map +1 -0
- package/dist/webgpu/engine.js +326 -0
- package/dist/webgpu/engine.js.map +1 -0
- package/dist/webgpu/gpu-pca.d.ts +90 -0
- package/dist/webgpu/gpu-pca.d.ts.map +1 -0
- package/dist/webgpu/gpu-pca.js +407 -0
- package/dist/webgpu/gpu-pca.js.map +1 -0
- package/dist/webgpu/index.d.ts +19 -0
- package/dist/webgpu/index.d.ts.map +1 -0
- package/dist/webgpu/index.js +16 -0
- package/dist/webgpu/index.js.map +1 -0
- package/dist/webgpu/kernels.d.ts +47 -0
- package/dist/webgpu/kernels.d.ts.map +1 -0
- package/dist/webgpu/kernels.js +147 -0
- package/dist/webgpu/kernels.js.map +1 -0
- package/dist/worker/client.d.ts +174 -0
- package/dist/worker/client.d.ts.map +1 -0
- package/dist/worker/client.js +482 -0
- package/dist/worker/client.js.map +1 -0
- package/dist/worker/handler.d.ts +17 -0
- package/dist/worker/handler.d.ts.map +1 -0
- package/dist/worker/handler.js +404 -0
- package/dist/worker/handler.js.map +1 -0
- package/dist/worker/protocol.d.ts +192 -0
- package/dist/worker/protocol.d.ts.map +1 -0
- package/dist/worker/protocol.js +70 -0
- package/dist/worker/protocol.js.map +1 -0
- package/dist/worker/worker.d.ts +14 -0
- package/dist/worker/worker.d.ts.map +1 -0
- package/dist/worker/worker.js +20 -0
- package/dist/worker/worker.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker-side request handler: a multi-instance estimator registry with a
|
|
3
|
+
* strict global FIFO execution queue. Fits run through `fitAsync` — the
|
|
4
|
+
* yield points are what let abort messages (handled out-of-band, straight
|
|
5
|
+
* from the listener) take effect mid-fit; a synchronous fit would block the
|
|
6
|
+
* worker's queue and make cancellation impossible.
|
|
7
|
+
*
|
|
8
|
+
* The WebGPU backend is loaded through a cached dynamic import only when an
|
|
9
|
+
* estimator requests it, so CPU-only worker bundles stay lean.
|
|
10
|
+
*/
|
|
11
|
+
import { IncrementalPCA } from '../incremental-pca.js';
|
|
12
|
+
import { PCA } from '../pca.js';
|
|
13
|
+
import { isWorkerRequest, matrixToWire, modelTransferList, PCA_WORKER_PROTOCOL_VERSION, tightArray, toWireError, wireToMatrix, } from './protocol.js';
|
|
14
|
+
let webgpuModulePromise = null;
|
|
15
|
+
function webgpuModule() {
|
|
16
|
+
webgpuModulePromise ??= import('../webgpu/index.js').catch((err) => {
|
|
17
|
+
webgpuModulePromise = null;
|
|
18
|
+
throw new Error(`pca-web worker: failed to load the WebGPU backend (${String(err)}). ` +
|
|
19
|
+
'If this worker was bundled as a classic script (iife), dynamic import is unavailable — ' +
|
|
20
|
+
"configure the bundler to emit an ES-module worker (Vite: worker: { format: 'es' }) " +
|
|
21
|
+
"or create the estimator with backend: 'cpu'.");
|
|
22
|
+
});
|
|
23
|
+
return webgpuModulePromise;
|
|
24
|
+
}
|
|
25
|
+
function hasWebGPU() {
|
|
26
|
+
const nav = globalThis.navigator;
|
|
27
|
+
return typeof nav?.gpu === 'object' && nav.gpu !== null;
|
|
28
|
+
}
|
|
29
|
+
function progressToWire(e) {
|
|
30
|
+
const transfer = [];
|
|
31
|
+
const event = {
|
|
32
|
+
estimator: e.estimator,
|
|
33
|
+
solver: e.solver,
|
|
34
|
+
phase: e.phase,
|
|
35
|
+
step: e.step,
|
|
36
|
+
totalSteps: e.totalSteps,
|
|
37
|
+
fraction: e.fraction,
|
|
38
|
+
};
|
|
39
|
+
if (e.detail !== undefined) {
|
|
40
|
+
event.detail = e.detail;
|
|
41
|
+
}
|
|
42
|
+
if (e.snapshot !== undefined) {
|
|
43
|
+
// Snapshot arrays are fresh copies by the reporter contract — they
|
|
44
|
+
// double as the transfer list.
|
|
45
|
+
const snap = {
|
|
46
|
+
components: matrixToWire(e.snapshot.components),
|
|
47
|
+
singularValues: tightArray(e.snapshot.singularValues),
|
|
48
|
+
explainedVariance: tightArray(e.snapshot.explainedVariance),
|
|
49
|
+
};
|
|
50
|
+
transfer.push(snap.components.data.buffer, snap.singularValues.buffer, snap.explainedVariance.buffer);
|
|
51
|
+
if (e.snapshot.scores !== undefined) {
|
|
52
|
+
snap.scores = matrixToWire(e.snapshot.scores);
|
|
53
|
+
transfer.push(snap.scores.data.buffer);
|
|
54
|
+
}
|
|
55
|
+
event.snapshot = snap;
|
|
56
|
+
}
|
|
57
|
+
return { event, transfer };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Timer-less progress throttle: latest-wins coalescing within a phase,
|
|
61
|
+
* phase-boundary and finalize events always delivered, pending events
|
|
62
|
+
* dropped when the terminal result supersedes them.
|
|
63
|
+
*/
|
|
64
|
+
class ProgressThrottle {
|
|
65
|
+
post;
|
|
66
|
+
callId;
|
|
67
|
+
minIntervalMs;
|
|
68
|
+
pending = null;
|
|
69
|
+
lastPhase = null;
|
|
70
|
+
lastSentAt = Number.NEGATIVE_INFINITY;
|
|
71
|
+
seq = 0;
|
|
72
|
+
constructor(post, callId, minIntervalMs) {
|
|
73
|
+
this.post = post;
|
|
74
|
+
this.callId = callId;
|
|
75
|
+
this.minIntervalMs = minIntervalMs;
|
|
76
|
+
}
|
|
77
|
+
onProgress = (e) => {
|
|
78
|
+
const now = Date.now();
|
|
79
|
+
const boundary = this.lastPhase !== null && e.phase !== this.lastPhase;
|
|
80
|
+
this.lastPhase = e.phase;
|
|
81
|
+
if (boundary && this.pending !== null) {
|
|
82
|
+
// Deliver the previous phase's final coalesced event before moving on.
|
|
83
|
+
this.send(this.pending);
|
|
84
|
+
}
|
|
85
|
+
this.pending = null;
|
|
86
|
+
if (boundary || e.phase === 'finalize' || now - this.lastSentAt >= this.minIntervalMs) {
|
|
87
|
+
this.send(e);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.pending = e;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
/** The terminal result/error supersedes any pending event. */
|
|
94
|
+
settle() {
|
|
95
|
+
this.pending = null;
|
|
96
|
+
}
|
|
97
|
+
send(e) {
|
|
98
|
+
const { event, transfer } = progressToWire(e);
|
|
99
|
+
this.lastSentAt = Date.now();
|
|
100
|
+
this.post({ t: 'progress', id: this.callId, seq: this.seq++, event }, transfer);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function requireX(x, method) {
|
|
104
|
+
if (x === null) {
|
|
105
|
+
throw new Error(`'${method}' requires input data X`);
|
|
106
|
+
}
|
|
107
|
+
return x;
|
|
108
|
+
}
|
|
109
|
+
function requireInst(entry) {
|
|
110
|
+
// Poisoned entries (createError) are rejected before dispatch.
|
|
111
|
+
return entry.inst;
|
|
112
|
+
}
|
|
113
|
+
async function dispatchFit(entry, x, opts) {
|
|
114
|
+
const inst = requireInst(entry);
|
|
115
|
+
if (entry.isGpu) {
|
|
116
|
+
await inst.fit(x, opts);
|
|
117
|
+
}
|
|
118
|
+
else if (entry.estimator === 'pca') {
|
|
119
|
+
await inst.fitAsync(x, opts);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
await inst.fitAsync(x, opts);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function dispatchFitTransform(entry, x, opts) {
|
|
126
|
+
const inst = requireInst(entry);
|
|
127
|
+
if (entry.isGpu) {
|
|
128
|
+
return inst.fitTransform(x, opts);
|
|
129
|
+
}
|
|
130
|
+
if (entry.estimator === 'pca') {
|
|
131
|
+
return inst.fitTransformAsync(x, opts);
|
|
132
|
+
}
|
|
133
|
+
return inst.fitTransformAsync(x, opts);
|
|
134
|
+
}
|
|
135
|
+
async function rebuildFromModel(entry, model) {
|
|
136
|
+
if (entry.isGpu) {
|
|
137
|
+
const mod = await webgpuModule();
|
|
138
|
+
return mod.WebGPUPCA.fromModel(model, entry.deviceOptions);
|
|
139
|
+
}
|
|
140
|
+
if (entry.estimator === 'pca') {
|
|
141
|
+
return PCA.fromModel(model);
|
|
142
|
+
}
|
|
143
|
+
return IncrementalPCA.fromModel(model);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Attaches the pca-web protocol to a message port (a dedicated worker's
|
|
147
|
+
* global scope, a MessagePort, or Node's worker_threads port). Returns a
|
|
148
|
+
* detach function. Posts `{t: 'ready'}` immediately so clients can await
|
|
149
|
+
* the handshake.
|
|
150
|
+
*/
|
|
151
|
+
export function attachPCAWorker(port, options = {}) {
|
|
152
|
+
const budgetMs = options.budgetMs ?? 50;
|
|
153
|
+
const registry = new Map();
|
|
154
|
+
const queue = [];
|
|
155
|
+
let running = null;
|
|
156
|
+
let pumping = false;
|
|
157
|
+
let detached = false;
|
|
158
|
+
const post = (msg, transfer) => {
|
|
159
|
+
port.postMessage(msg, transfer ?? []);
|
|
160
|
+
};
|
|
161
|
+
const abortError = () => ({
|
|
162
|
+
name: 'AbortError',
|
|
163
|
+
message: 'The operation was aborted',
|
|
164
|
+
});
|
|
165
|
+
function handleAbort(targetId) {
|
|
166
|
+
if (running !== null && running.msg.id === targetId) {
|
|
167
|
+
if (running.signal !== null) {
|
|
168
|
+
running.signal.aborted = true;
|
|
169
|
+
}
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const idx = queue.findIndex((item) => item.msg.id === targetId);
|
|
173
|
+
if (idx >= 0) {
|
|
174
|
+
const [item] = queue.splice(idx, 1);
|
|
175
|
+
post({ t: 'error', id: item.msg.id, error: abortError() });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async function createEntry(msg) {
|
|
179
|
+
const opts = msg.options;
|
|
180
|
+
const { powerPreference, minGpuElements, ...pcaOptions } = opts;
|
|
181
|
+
const entry = {
|
|
182
|
+
estimator: msg.estimator,
|
|
183
|
+
requestedBackend: msg.backend,
|
|
184
|
+
isGpu: msg.backend === 'webgpu',
|
|
185
|
+
deviceOptions: { powerPreference, minGpuElements },
|
|
186
|
+
inst: null,
|
|
187
|
+
};
|
|
188
|
+
if (msg.backend === 'webgpu') {
|
|
189
|
+
if (msg.estimator === 'ipca') {
|
|
190
|
+
throw new Error("IncrementalPCA has no WebGPU backend; create it with backend: 'cpu'");
|
|
191
|
+
}
|
|
192
|
+
const mod = await webgpuModule();
|
|
193
|
+
entry.inst = msg.model
|
|
194
|
+
? mod.WebGPUPCA.fromModel(msg.model, entry.deviceOptions)
|
|
195
|
+
: new mod.WebGPUPCA({ ...pcaOptions, powerPreference, minGpuElements });
|
|
196
|
+
return entry;
|
|
197
|
+
}
|
|
198
|
+
if (msg.estimator === 'pca') {
|
|
199
|
+
entry.inst = msg.model
|
|
200
|
+
? PCA.fromModel(msg.model)
|
|
201
|
+
: new PCA(pcaOptions);
|
|
202
|
+
return entry;
|
|
203
|
+
}
|
|
204
|
+
entry.inst = msg.model
|
|
205
|
+
? IncrementalPCA.fromModel(msg.model)
|
|
206
|
+
: new IncrementalPCA(msg.options);
|
|
207
|
+
return entry;
|
|
208
|
+
}
|
|
209
|
+
function buildInfo(entry) {
|
|
210
|
+
const gpu = entry.isGpu ? requireInst(entry) : null;
|
|
211
|
+
return {
|
|
212
|
+
kind: 'info',
|
|
213
|
+
estimator: entry.estimator,
|
|
214
|
+
requestedBackend: entry.requestedBackend,
|
|
215
|
+
backend: gpu !== null ? gpu.backend : 'cpu',
|
|
216
|
+
gpuAdapterInfo: gpu !== null ? gpu.gpuAdapterInfo : null,
|
|
217
|
+
webgpuAvailable: hasWebGPU(),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
async function runCall(entry, msg, throttle, signal) {
|
|
221
|
+
const inst = requireInst(entry);
|
|
222
|
+
const x = msg.x !== undefined ? wireToMatrix(msg.x) : null;
|
|
223
|
+
const fitOptions = { budgetMs, signal };
|
|
224
|
+
if (throttle !== null) {
|
|
225
|
+
fitOptions.onProgress = throttle.onProgress;
|
|
226
|
+
if (msg.progress?.snapshot !== undefined) {
|
|
227
|
+
fitOptions.snapshot = msg.progress.snapshot;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
const withModel = (outcome) => {
|
|
231
|
+
if (msg.returnModel === true) {
|
|
232
|
+
outcome.model = inst.toModel();
|
|
233
|
+
}
|
|
234
|
+
return outcome;
|
|
235
|
+
};
|
|
236
|
+
switch (msg.method) {
|
|
237
|
+
case 'fit': {
|
|
238
|
+
await dispatchFit(entry, requireX(x, msg.method), fitOptions);
|
|
239
|
+
return withModel({ value: null, transfer: [] });
|
|
240
|
+
}
|
|
241
|
+
case 'fitTransform': {
|
|
242
|
+
const out = await dispatchFitTransform(entry, requireX(x, msg.method), fitOptions);
|
|
243
|
+
const wire = matrixToWire(out);
|
|
244
|
+
return withModel({ value: wire, transfer: [wire.data.buffer] });
|
|
245
|
+
}
|
|
246
|
+
case 'partialFit': {
|
|
247
|
+
if (entry.estimator !== 'ipca') {
|
|
248
|
+
throw new Error("partialFit requires an estimator created with estimator: 'ipca'");
|
|
249
|
+
}
|
|
250
|
+
inst.partialFit(requireX(x, msg.method));
|
|
251
|
+
return withModel({ value: null, transfer: [] });
|
|
252
|
+
}
|
|
253
|
+
case 'transform': {
|
|
254
|
+
const xm = requireX(x, msg.method);
|
|
255
|
+
const out = entry.isGpu
|
|
256
|
+
? await inst.transform(xm)
|
|
257
|
+
: inst.transform(xm);
|
|
258
|
+
const wire = matrixToWire(out);
|
|
259
|
+
return { value: wire, transfer: [wire.data.buffer] };
|
|
260
|
+
}
|
|
261
|
+
case 'inverseTransform': {
|
|
262
|
+
const wire = matrixToWire(inst.inverseTransform(requireX(x, msg.method)));
|
|
263
|
+
return { value: wire, transfer: [wire.data.buffer] };
|
|
264
|
+
}
|
|
265
|
+
case 'scoreSamples': {
|
|
266
|
+
if (entry.estimator !== 'pca') {
|
|
267
|
+
throw new Error('scoreSamples is only available on PCA (like sklearn)');
|
|
268
|
+
}
|
|
269
|
+
const out = tightArray(inst.scoreSamples(requireX(x, msg.method)));
|
|
270
|
+
return { value: { kind: 'array', data: out }, transfer: [out.buffer] };
|
|
271
|
+
}
|
|
272
|
+
case 'score': {
|
|
273
|
+
if (entry.estimator !== 'pca') {
|
|
274
|
+
throw new Error('score is only available on PCA (like sklearn)');
|
|
275
|
+
}
|
|
276
|
+
return { value: inst.score(requireX(x, msg.method)), transfer: [] };
|
|
277
|
+
}
|
|
278
|
+
case 'getCovariance': {
|
|
279
|
+
const wire = matrixToWire(inst.getCovariance());
|
|
280
|
+
return { value: wire, transfer: [wire.data.buffer] };
|
|
281
|
+
}
|
|
282
|
+
case 'getPrecision': {
|
|
283
|
+
const wire = matrixToWire(inst.getPrecision());
|
|
284
|
+
return { value: wire, transfer: [wire.data.buffer] };
|
|
285
|
+
}
|
|
286
|
+
case 'importModel': {
|
|
287
|
+
if (msg.model === undefined) {
|
|
288
|
+
throw new Error('importModel requires a model payload');
|
|
289
|
+
}
|
|
290
|
+
entry.inst = await rebuildFromModel(entry, msg.model);
|
|
291
|
+
return { value: null, transfer: [] };
|
|
292
|
+
}
|
|
293
|
+
case 'info': {
|
|
294
|
+
return { value: buildInfo(entry), transfer: [] };
|
|
295
|
+
}
|
|
296
|
+
default: {
|
|
297
|
+
throw new Error(`Unknown method '${String(msg.method)}'`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
async function executeItem(item) {
|
|
302
|
+
const msg = item.msg;
|
|
303
|
+
if (msg.t === 'create') {
|
|
304
|
+
try {
|
|
305
|
+
registry.set(msg.est, await createEntry(msg));
|
|
306
|
+
post({ t: 'result', id: msg.id, value: null });
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
const error = toWireError(err);
|
|
310
|
+
// Poison the id so pipelined follow-up calls report the root cause.
|
|
311
|
+
registry.set(msg.est, {
|
|
312
|
+
estimator: msg.estimator,
|
|
313
|
+
requestedBackend: msg.backend,
|
|
314
|
+
isGpu: msg.backend === 'webgpu',
|
|
315
|
+
deviceOptions: {},
|
|
316
|
+
inst: null,
|
|
317
|
+
createError: error,
|
|
318
|
+
});
|
|
319
|
+
post({ t: 'error', id: msg.id, error });
|
|
320
|
+
}
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
if (msg.t === 'dispose') {
|
|
324
|
+
const entry = registry.get(msg.est);
|
|
325
|
+
registry.delete(msg.est);
|
|
326
|
+
if (entry?.isGpu && entry.inst !== null) {
|
|
327
|
+
entry.inst.dispose();
|
|
328
|
+
}
|
|
329
|
+
post({ t: 'result', id: msg.id, value: null });
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
const entry = registry.get(msg.est);
|
|
333
|
+
if (entry === undefined) {
|
|
334
|
+
post({
|
|
335
|
+
t: 'error',
|
|
336
|
+
id: msg.id,
|
|
337
|
+
error: { name: 'Error', message: `Unknown estimator id '${msg.est}' (send create first)` },
|
|
338
|
+
});
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
if (entry.createError !== undefined) {
|
|
342
|
+
post({ t: 'error', id: msg.id, error: entry.createError });
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
const signal = { aborted: false };
|
|
346
|
+
item.signal = signal;
|
|
347
|
+
const throttle = msg.progress !== undefined
|
|
348
|
+
? new ProgressThrottle(post, msg.id, msg.progress.minIntervalMs ?? 33)
|
|
349
|
+
: null;
|
|
350
|
+
try {
|
|
351
|
+
const outcome = await runCall(entry, msg, throttle, signal);
|
|
352
|
+
throttle?.settle();
|
|
353
|
+
const response = { t: 'result', id: msg.id, value: outcome.value };
|
|
354
|
+
if (outcome.model !== undefined) {
|
|
355
|
+
response.model = outcome.model;
|
|
356
|
+
outcome.transfer.push(...modelTransferList(outcome.model));
|
|
357
|
+
}
|
|
358
|
+
post(response, outcome.transfer);
|
|
359
|
+
}
|
|
360
|
+
catch (err) {
|
|
361
|
+
throttle?.settle();
|
|
362
|
+
post({ t: 'error', id: msg.id, error: toWireError(err) });
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
async function pump() {
|
|
366
|
+
if (pumping) {
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
pumping = true;
|
|
370
|
+
try {
|
|
371
|
+
while (queue.length > 0 && !detached) {
|
|
372
|
+
const item = queue.shift();
|
|
373
|
+
running = item;
|
|
374
|
+
await executeItem(item);
|
|
375
|
+
running = null;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
finally {
|
|
379
|
+
running = null;
|
|
380
|
+
pumping = false;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
const listener = (ev) => {
|
|
384
|
+
const msg = ev.data;
|
|
385
|
+
if (!isWorkerRequest(msg)) {
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
if (msg.t === 'abort') {
|
|
389
|
+
// Out-of-band: never queued, takes effect immediately.
|
|
390
|
+
handleAbort(msg.targetId);
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
queue.push({ msg, signal: null });
|
|
394
|
+
void pump();
|
|
395
|
+
};
|
|
396
|
+
port.addEventListener('message', listener);
|
|
397
|
+
port.start?.();
|
|
398
|
+
post({ t: 'ready', protocolVersion: PCA_WORKER_PROTOCOL_VERSION });
|
|
399
|
+
return () => {
|
|
400
|
+
detached = true;
|
|
401
|
+
port.removeEventListener('message', listener);
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/worker/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire protocol shared by the worker handler (`pca-web/worker`) and the
|
|
3
|
+
* client proxies (`pca-web/client`).
|
|
4
|
+
*
|
|
5
|
+
* Import discipline: this module (and everything the client pulls in) must
|
|
6
|
+
* stay free of solver code — value imports are limited to matrix/types/
|
|
7
|
+
* model/validation; estimator and progress types appear type-only (erased
|
|
8
|
+
* at build time). This is what keeps `pca-web/client` a ~few-KB proxy while
|
|
9
|
+
* `pca-web/worker` carries the estimators.
|
|
10
|
+
*/
|
|
11
|
+
import { Matrix } from '../matrix.js';
|
|
12
|
+
import type { AnyPCAModel } from '../model.js';
|
|
13
|
+
import type { PowerIterationNormalizer, SvdSolver } from '../pca.js';
|
|
14
|
+
import type { FitPhase, FitSolverId, SnapshotOptions } from '../progress.js';
|
|
15
|
+
import type { FloatArray } from '../types.js';
|
|
16
|
+
export declare const PCA_WORKER_PROTOCOL_VERSION = 1;
|
|
17
|
+
/**
|
|
18
|
+
* The message-port surface the protocol needs. Satisfied by a browser
|
|
19
|
+
* `Worker` or `MessagePort` and by Node's `worker_threads` `MessagePort`
|
|
20
|
+
* (an EventTarget since Node 15) — which is what the vitest suites use.
|
|
21
|
+
* `transfer` is required (pass `[]`) so the signature matches the DOM
|
|
22
|
+
* overload sets structurally.
|
|
23
|
+
*/
|
|
24
|
+
export interface PCAWorkerPort {
|
|
25
|
+
postMessage(message: unknown, transfer: ArrayBufferLike[]): void;
|
|
26
|
+
addEventListener(type: 'message', listener: (ev: {
|
|
27
|
+
data: unknown;
|
|
28
|
+
}) => void): void;
|
|
29
|
+
removeEventListener(type: 'message', listener: (ev: {
|
|
30
|
+
data: unknown;
|
|
31
|
+
}) => void): void;
|
|
32
|
+
/** MessagePorts need an explicit start() when using addEventListener. */
|
|
33
|
+
start?(): void;
|
|
34
|
+
}
|
|
35
|
+
/** A port that may also be a terminatable/closable endpoint. */
|
|
36
|
+
export interface PCAWorkerLike extends PCAWorkerPort {
|
|
37
|
+
terminate?(): unknown;
|
|
38
|
+
close?(): void;
|
|
39
|
+
}
|
|
40
|
+
export type WorkerFactory = () => PCAWorkerLike;
|
|
41
|
+
export interface WireMatrix {
|
|
42
|
+
kind: 'matrix';
|
|
43
|
+
data: FloatArray;
|
|
44
|
+
rows: number;
|
|
45
|
+
cols: number;
|
|
46
|
+
}
|
|
47
|
+
/** A typed array that owns its entire buffer (safe to clone or transfer). */
|
|
48
|
+
export declare function tightArray<T extends FloatArray>(a: T): T;
|
|
49
|
+
/**
|
|
50
|
+
* Encodes a Matrix for the wire. The data is tight-sliced when it is a
|
|
51
|
+
* view — cloning or transferring a subarray view would otherwise serialize
|
|
52
|
+
* (or detach) its entire parent buffer.
|
|
53
|
+
*/
|
|
54
|
+
export declare function matrixToWire(m: Matrix): WireMatrix;
|
|
55
|
+
export declare function wireToMatrix(w: WireMatrix): Matrix;
|
|
56
|
+
export declare function isWireMatrix(v: unknown): v is WireMatrix;
|
|
57
|
+
/** Marshalled error (Error instances do not structured-clone with names pre-ES2022 hosts). */
|
|
58
|
+
export interface WireError {
|
|
59
|
+
name: string;
|
|
60
|
+
message: string;
|
|
61
|
+
stack?: string;
|
|
62
|
+
}
|
|
63
|
+
export declare function toWireError(err: unknown): WireError;
|
|
64
|
+
/** Snapshot payload with matrices in wire form (always transferred). */
|
|
65
|
+
export interface WireSnapshot {
|
|
66
|
+
components: WireMatrix;
|
|
67
|
+
singularValues: Float64Array;
|
|
68
|
+
explainedVariance: Float64Array;
|
|
69
|
+
scores?: WireMatrix;
|
|
70
|
+
}
|
|
71
|
+
/** `PCAFitProgress` as it crosses the thread boundary. */
|
|
72
|
+
export interface WireProgress {
|
|
73
|
+
estimator: 'PCA' | 'IncrementalPCA';
|
|
74
|
+
solver: FitSolverId;
|
|
75
|
+
phase: FitPhase;
|
|
76
|
+
step: number;
|
|
77
|
+
totalSteps: number | null;
|
|
78
|
+
fraction: number | null;
|
|
79
|
+
snapshot?: WireSnapshot;
|
|
80
|
+
detail?: Readonly<Record<string, number>>;
|
|
81
|
+
}
|
|
82
|
+
/** Client-side progress subscription options for a fit call. */
|
|
83
|
+
export interface ProgressOptions {
|
|
84
|
+
/**
|
|
85
|
+
* Worker-side throttle: at most one event per interval, latest-wins
|
|
86
|
+
* within a phase; phase boundaries and finalize are never coalesced.
|
|
87
|
+
* Default 33 ms; 0 delivers every event.
|
|
88
|
+
*/
|
|
89
|
+
minIntervalMs?: number;
|
|
90
|
+
snapshot?: SnapshotOptions;
|
|
91
|
+
}
|
|
92
|
+
/** PCA options as they cross the wire — randomState must be a numeric seed. */
|
|
93
|
+
export interface WirePCAOptions {
|
|
94
|
+
nComponents?: number | 'mle' | null;
|
|
95
|
+
copy?: boolean;
|
|
96
|
+
whiten?: boolean;
|
|
97
|
+
svdSolver?: SvdSolver;
|
|
98
|
+
tol?: number;
|
|
99
|
+
iteratedPower?: number | 'auto';
|
|
100
|
+
nOversamples?: number;
|
|
101
|
+
powerIterationNormalizer?: PowerIterationNormalizer;
|
|
102
|
+
randomState?: number | null;
|
|
103
|
+
/** WebGPU backend knobs (ignored on the CPU backend). */
|
|
104
|
+
powerPreference?: 'low-power' | 'high-performance';
|
|
105
|
+
minGpuElements?: number;
|
|
106
|
+
}
|
|
107
|
+
export interface WireIPCAOptions {
|
|
108
|
+
nComponents?: number | null;
|
|
109
|
+
whiten?: boolean;
|
|
110
|
+
copy?: boolean;
|
|
111
|
+
batchSize?: number | null;
|
|
112
|
+
}
|
|
113
|
+
export type WorkerMethod = 'fit' | 'fitTransform' | 'partialFit' | 'transform' | 'inverseTransform' | 'scoreSamples' | 'score' | 'getCovariance' | 'getPrecision' | 'importModel' | 'info';
|
|
114
|
+
export interface CreateRequest {
|
|
115
|
+
t: 'create';
|
|
116
|
+
/** Request id (responded to like any call, enabling pipelining). */
|
|
117
|
+
id: number;
|
|
118
|
+
/** Client-chosen estimator id for all subsequent calls. */
|
|
119
|
+
est: string;
|
|
120
|
+
estimator: 'pca' | 'ipca';
|
|
121
|
+
backend: 'cpu' | 'webgpu';
|
|
122
|
+
options: WirePCAOptions | WireIPCAOptions;
|
|
123
|
+
/** Hydrate the new estimator from a serialized model. */
|
|
124
|
+
model?: AnyPCAModel;
|
|
125
|
+
}
|
|
126
|
+
export interface CallRequest {
|
|
127
|
+
t: 'call';
|
|
128
|
+
id: number;
|
|
129
|
+
est: string;
|
|
130
|
+
method: WorkerMethod;
|
|
131
|
+
x?: WireMatrix;
|
|
132
|
+
model?: AnyPCAModel;
|
|
133
|
+
/** Subscribe this call to progress events. */
|
|
134
|
+
progress?: ProgressOptions;
|
|
135
|
+
/** Piggyback the fitted model on the result (keeps the client mirror fresh). */
|
|
136
|
+
returnModel?: boolean;
|
|
137
|
+
}
|
|
138
|
+
/** Out-of-band: never enters the execution queue. */
|
|
139
|
+
export interface AbortRequest {
|
|
140
|
+
t: 'abort';
|
|
141
|
+
targetId: number;
|
|
142
|
+
}
|
|
143
|
+
export interface DisposeRequest {
|
|
144
|
+
t: 'dispose';
|
|
145
|
+
id: number;
|
|
146
|
+
est: string;
|
|
147
|
+
}
|
|
148
|
+
export type PCAWorkerRequest = CreateRequest | CallRequest | AbortRequest | DisposeRequest;
|
|
149
|
+
/** Requests that enter the FIFO queue (abort is handled out-of-band). */
|
|
150
|
+
export type QueueableRequest = CreateRequest | CallRequest | DisposeRequest;
|
|
151
|
+
export interface ReadyResponse {
|
|
152
|
+
t: 'ready';
|
|
153
|
+
protocolVersion: number;
|
|
154
|
+
}
|
|
155
|
+
export type WireValue = null | number | string[] | WireMatrix | {
|
|
156
|
+
kind: 'array';
|
|
157
|
+
data: FloatArray;
|
|
158
|
+
} | WorkerEstimatorInfo;
|
|
159
|
+
export interface ResultResponse {
|
|
160
|
+
t: 'result';
|
|
161
|
+
id: number;
|
|
162
|
+
value: WireValue;
|
|
163
|
+
/** Piggybacked model (fit/partialFit with returnModel). */
|
|
164
|
+
model?: AnyPCAModel;
|
|
165
|
+
}
|
|
166
|
+
export interface ProgressResponse {
|
|
167
|
+
t: 'progress';
|
|
168
|
+
id: number;
|
|
169
|
+
/** Monotonic per call — receivers may assert ordering. */
|
|
170
|
+
seq: number;
|
|
171
|
+
event: WireProgress;
|
|
172
|
+
}
|
|
173
|
+
export interface ErrorResponse {
|
|
174
|
+
t: 'error';
|
|
175
|
+
id: number;
|
|
176
|
+
error: WireError;
|
|
177
|
+
}
|
|
178
|
+
export type PCAWorkerResponse = ReadyResponse | ResultResponse | ProgressResponse | ErrorResponse;
|
|
179
|
+
export interface WorkerEstimatorInfo {
|
|
180
|
+
kind: 'info';
|
|
181
|
+
estimator: 'pca' | 'ipca';
|
|
182
|
+
requestedBackend: 'cpu' | 'webgpu';
|
|
183
|
+
/** Backend the last fit actually ran on ('cpu' until a GPU fit happens). */
|
|
184
|
+
backend: 'cpu' | 'webgpu';
|
|
185
|
+
gpuAdapterInfo: string | null;
|
|
186
|
+
webgpuAvailable: boolean;
|
|
187
|
+
}
|
|
188
|
+
export declare function isWorkerRequest(v: unknown): v is PCAWorkerRequest;
|
|
189
|
+
export declare function isWorkerResponse(v: unknown): v is PCAWorkerResponse;
|
|
190
|
+
/** Buffers of a model's typed arrays (all tight by `toModel` contract). */
|
|
191
|
+
export declare function modelTransferList(model: AnyPCAModel): ArrayBufferLike[];
|
|
192
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/worker/protocol.ts"],"names":[],"mappings":"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"}
|