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.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +421 -0
  3. package/dist/base.d.ts +79 -0
  4. package/dist/base.d.ts.map +1 -0
  5. package/dist/base.js +358 -0
  6. package/dist/base.js.map +1 -0
  7. package/dist/incremental-pca.d.ts +86 -0
  8. package/dist/incremental-pca.d.ts.map +1 -0
  9. package/dist/incremental-pca.js +397 -0
  10. package/dist/incremental-pca.js.map +1 -0
  11. package/dist/index.d.ts +21 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +14 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/matrix.d.ts +44 -0
  16. package/dist/matrix.d.ts.map +1 -0
  17. package/dist/matrix.js +99 -0
  18. package/dist/matrix.js.map +1 -0
  19. package/dist/model.d.ts +86 -0
  20. package/dist/model.d.ts.map +1 -0
  21. package/dist/model.js +132 -0
  22. package/dist/model.js.map +1 -0
  23. package/dist/numeric/blas.d.ts +33 -0
  24. package/dist/numeric/blas.d.ts.map +1 -0
  25. package/dist/numeric/blas.js +130 -0
  26. package/dist/numeric/blas.js.map +1 -0
  27. package/dist/numeric/eigh.d.ts +21 -0
  28. package/dist/numeric/eigh.d.ts.map +1 -0
  29. package/dist/numeric/eigh.js +233 -0
  30. package/dist/numeric/eigh.js.map +1 -0
  31. package/dist/numeric/lanczos.d.ts +31 -0
  32. package/dist/numeric/lanczos.d.ts.map +1 -0
  33. package/dist/numeric/lanczos.js +287 -0
  34. package/dist/numeric/lanczos.js.map +1 -0
  35. package/dist/numeric/lu.d.ts +27 -0
  36. package/dist/numeric/lu.d.ts.map +1 -0
  37. package/dist/numeric/lu.js +149 -0
  38. package/dist/numeric/lu.js.map +1 -0
  39. package/dist/numeric/mle.d.ts +5 -0
  40. package/dist/numeric/mle.d.ts.map +1 -0
  41. package/dist/numeric/mle.js +67 -0
  42. package/dist/numeric/mle.js.map +1 -0
  43. package/dist/numeric/qr.d.ts +15 -0
  44. package/dist/numeric/qr.d.ts.map +1 -0
  45. package/dist/numeric/qr.js +88 -0
  46. package/dist/numeric/qr.js.map +1 -0
  47. package/dist/numeric/randomized.d.ts +54 -0
  48. package/dist/numeric/randomized.d.ts.map +1 -0
  49. package/dist/numeric/randomized.js +130 -0
  50. package/dist/numeric/randomized.js.map +1 -0
  51. package/dist/numeric/rng.d.ts +40 -0
  52. package/dist/numeric/rng.d.ts.map +1 -0
  53. package/dist/numeric/rng.js +127 -0
  54. package/dist/numeric/rng.js.map +1 -0
  55. package/dist/numeric/special.d.ts +2 -0
  56. package/dist/numeric/special.d.ts.map +1 -0
  57. package/dist/numeric/special.js +25 -0
  58. package/dist/numeric/special.js.map +1 -0
  59. package/dist/numeric/stats.d.ts +27 -0
  60. package/dist/numeric/stats.d.ts.map +1 -0
  61. package/dist/numeric/stats.js +110 -0
  62. package/dist/numeric/stats.js.map +1 -0
  63. package/dist/numeric/svd.d.ts +27 -0
  64. package/dist/numeric/svd.d.ts.map +1 -0
  65. package/dist/numeric/svd.js +374 -0
  66. package/dist/numeric/svd.js.map +1 -0
  67. package/dist/numeric/svdflip.d.ts +9 -0
  68. package/dist/numeric/svdflip.d.ts.map +1 -0
  69. package/dist/numeric/svdflip.js +32 -0
  70. package/dist/numeric/svdflip.js.map +1 -0
  71. package/dist/pca.d.ts +170 -0
  72. package/dist/pca.d.ts.map +1 -0
  73. package/dist/pca.js +649 -0
  74. package/dist/pca.js.map +1 -0
  75. package/dist/progress.d.ts +155 -0
  76. package/dist/progress.d.ts.map +1 -0
  77. package/dist/progress.js +173 -0
  78. package/dist/progress.js.map +1 -0
  79. package/dist/scheduling.d.ts +66 -0
  80. package/dist/scheduling.d.ts.map +1 -0
  81. package/dist/scheduling.js +160 -0
  82. package/dist/scheduling.js.map +1 -0
  83. package/dist/types.d.ts +10 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +11 -0
  86. package/dist/types.js.map +1 -0
  87. package/dist/validation.d.ts +17 -0
  88. package/dist/validation.d.ts.map +1 -0
  89. package/dist/validation.js +36 -0
  90. package/dist/validation.js.map +1 -0
  91. package/dist/webgpu/df64.d.ts +18 -0
  92. package/dist/webgpu/df64.d.ts.map +1 -0
  93. package/dist/webgpu/df64.js +42 -0
  94. package/dist/webgpu/df64.js.map +1 -0
  95. package/dist/webgpu/engine.d.ts +74 -0
  96. package/dist/webgpu/engine.d.ts.map +1 -0
  97. package/dist/webgpu/engine.js +326 -0
  98. package/dist/webgpu/engine.js.map +1 -0
  99. package/dist/webgpu/gpu-pca.d.ts +90 -0
  100. package/dist/webgpu/gpu-pca.d.ts.map +1 -0
  101. package/dist/webgpu/gpu-pca.js +407 -0
  102. package/dist/webgpu/gpu-pca.js.map +1 -0
  103. package/dist/webgpu/index.d.ts +19 -0
  104. package/dist/webgpu/index.d.ts.map +1 -0
  105. package/dist/webgpu/index.js +16 -0
  106. package/dist/webgpu/index.js.map +1 -0
  107. package/dist/webgpu/kernels.d.ts +47 -0
  108. package/dist/webgpu/kernels.d.ts.map +1 -0
  109. package/dist/webgpu/kernels.js +147 -0
  110. package/dist/webgpu/kernels.js.map +1 -0
  111. package/dist/worker/client.d.ts +174 -0
  112. package/dist/worker/client.d.ts.map +1 -0
  113. package/dist/worker/client.js +482 -0
  114. package/dist/worker/client.js.map +1 -0
  115. package/dist/worker/handler.d.ts +17 -0
  116. package/dist/worker/handler.d.ts.map +1 -0
  117. package/dist/worker/handler.js +404 -0
  118. package/dist/worker/handler.js.map +1 -0
  119. package/dist/worker/protocol.d.ts +192 -0
  120. package/dist/worker/protocol.d.ts.map +1 -0
  121. package/dist/worker/protocol.js +70 -0
  122. package/dist/worker/protocol.js.map +1 -0
  123. package/dist/worker/worker.d.ts +14 -0
  124. package/dist/worker/worker.d.ts.map +1 -0
  125. package/dist/worker/worker.js +20 -0
  126. package/dist/worker/worker.js.map +1 -0
  127. package/package.json +94 -0
@@ -0,0 +1,482 @@
1
+ /**
2
+ * `pca-web/client` — main-thread async proxies for estimators running in a
3
+ * pca-web worker: `WorkerPCA` and `WorkerIncrementalPCA`.
4
+ *
5
+ * Import discipline (enforced by a dist-graph test): this module pulls in
6
+ * only matrix/types/validation/model/protocol — never estimator or solver
7
+ * code — so apps that fit exclusively in the worker don't bundle the
8
+ * solvers twice.
9
+ *
10
+ * Fitted attributes are mirrored synchronously on the client: every fit
11
+ * piggybacks the resulting model on its response, so `components`,
12
+ * `explainedVariance`, `exportModel()`, … work without a round-trip once
13
+ * the fit promise resolves.
14
+ */
15
+ import { asMatrix, Matrix } from '../matrix.js';
16
+ import { assertValidModel, } from '../model.js';
17
+ import { NotFittedError } from '../validation.js';
18
+ import { isWorkerResponse, matrixToWire, wireToMatrix, } from './protocol.js';
19
+ /** Thrown into in-flight calls when `terminate()` hard-kills the worker. */
20
+ export class WorkerTerminatedError extends Error {
21
+ name = 'WorkerTerminatedError';
22
+ constructor(message = 'The pca-web worker was terminated') {
23
+ super(message);
24
+ }
25
+ }
26
+ /** AbortError stand-in for hosts without DOMException. */
27
+ class ClientAbortError extends Error {
28
+ name = 'AbortError';
29
+ constructor(message = 'The operation was aborted') {
30
+ super(message);
31
+ }
32
+ }
33
+ function makeAbortError(message) {
34
+ const DE = globalThis
35
+ .DOMException;
36
+ return DE !== undefined
37
+ ? new DE(message ?? 'The operation was aborted', 'AbortError')
38
+ : new ClientAbortError(message);
39
+ }
40
+ /** Rebuilds a worker-marshalled error, instanceof-correct where it matters. */
41
+ function reviveError(wire) {
42
+ if (wire.name === 'NotFittedError') {
43
+ const err = new NotFittedError('PCA');
44
+ err.message = wire.message;
45
+ return err;
46
+ }
47
+ if (wire.name === 'AbortError') {
48
+ return makeAbortError(wire.message);
49
+ }
50
+ const err = new Error(wire.message);
51
+ err.name = wire.name;
52
+ return err;
53
+ }
54
+ class Connection {
55
+ port;
56
+ pending = new Map();
57
+ nextId = 1;
58
+ readyResolve = null;
59
+ readyPromise;
60
+ dead = null;
61
+ constructor(port) {
62
+ this.port = port;
63
+ this.readyPromise = new Promise((resolve) => {
64
+ this.readyResolve = resolve;
65
+ });
66
+ port.addEventListener('message', this.listener);
67
+ port.start?.();
68
+ }
69
+ listener = (ev) => {
70
+ const msg = ev.data;
71
+ if (!isWorkerResponse(msg)) {
72
+ return;
73
+ }
74
+ if (msg.t === 'ready') {
75
+ this.readyResolve?.();
76
+ this.readyResolve = null;
77
+ return;
78
+ }
79
+ if (msg.t === 'progress') {
80
+ const entry = this.pending.get(msg.id);
81
+ if (entry?.onProgress !== undefined) {
82
+ try {
83
+ entry.onProgress(msg.event);
84
+ }
85
+ catch (err) {
86
+ // A throwing user callback must not break dispatch; mirror the
87
+ // main-thread contract (callback throw kills the fit) instead.
88
+ this.pending.delete(msg.id);
89
+ this.post({ t: 'abort', targetId: msg.id });
90
+ entry.reject(err instanceof Error ? err : new Error(String(err)));
91
+ }
92
+ }
93
+ return;
94
+ }
95
+ const entry = this.pending.get(msg.id);
96
+ if (entry === undefined) {
97
+ return;
98
+ }
99
+ this.pending.delete(msg.id);
100
+ if (msg.t === 'result') {
101
+ entry.resolve({ value: msg.value, model: msg.model });
102
+ }
103
+ else {
104
+ entry.reject(reviveError(msg.error));
105
+ }
106
+ };
107
+ allocId() {
108
+ return this.nextId++;
109
+ }
110
+ ready() {
111
+ return this.dead !== null ? Promise.reject(this.dead) : this.readyPromise;
112
+ }
113
+ post(msg) {
114
+ if (this.dead === null) {
115
+ this.port.postMessage(msg, []);
116
+ }
117
+ }
118
+ request(msg, transfer = [], onProgress) {
119
+ if (this.dead !== null) {
120
+ return Promise.reject(this.dead);
121
+ }
122
+ return new Promise((resolve, reject) => {
123
+ this.pending.set(msg.id, { resolve, reject, onProgress });
124
+ this.port.postMessage(msg, transfer);
125
+ });
126
+ }
127
+ /** Hard-kill: rejects all in-flight calls and poisons future ones. */
128
+ terminate() {
129
+ if (this.dead !== null) {
130
+ return;
131
+ }
132
+ this.dead = new WorkerTerminatedError();
133
+ this.port.removeEventListener('message', this.listener);
134
+ for (const entry of this.pending.values()) {
135
+ entry.reject(new WorkerTerminatedError());
136
+ }
137
+ this.pending.clear();
138
+ this.port.terminate?.();
139
+ this.port.close?.();
140
+ }
141
+ }
142
+ const CONNECTIONS = new WeakMap();
143
+ function connectionFor(port) {
144
+ let conn = CONNECTIONS.get(port);
145
+ if (conn === undefined) {
146
+ conn = new Connection(port);
147
+ CONNECTIONS.set(port, conn);
148
+ }
149
+ return conn;
150
+ }
151
+ function defaultWorkerFactory() {
152
+ const explain = (reason) => new Error(`pca-web/client: could not start the default worker (${reason}). ` +
153
+ 'Pass your own via { worker }: ' +
154
+ "new Worker(new URL('pca-web/worker', import.meta.url), { type: 'module' }) works in " +
155
+ "webpack 5 and native ESM; Vite dev needs `import PcaWorker from 'pca-web/worker?worker'` " +
156
+ "(then { worker: () => new PcaWorker() }) or 'pca-web' in optimizeDeps.exclude; esbuild " +
157
+ 'needs pca-web/worker bundled as its own entry; in Node use worker_threads and ' +
158
+ "attachPCAWorker(parentPort) from 'pca-web/worker'.");
159
+ if (typeof Worker !== 'function') {
160
+ throw explain('no Worker constructor in this environment');
161
+ }
162
+ try {
163
+ return new Worker(new URL('./worker.js', import.meta.url), {
164
+ type: 'module',
165
+ name: 'pca-web',
166
+ });
167
+ }
168
+ catch (err) {
169
+ throw explain(String(err));
170
+ }
171
+ }
172
+ function wireToProgress(e) {
173
+ const out = {
174
+ estimator: e.estimator,
175
+ solver: e.solver,
176
+ phase: e.phase,
177
+ step: e.step,
178
+ totalSteps: e.totalSteps,
179
+ fraction: e.fraction,
180
+ };
181
+ if (e.detail !== undefined) {
182
+ out.detail = e.detail;
183
+ }
184
+ if (e.snapshot !== undefined) {
185
+ const snapshot = {
186
+ components: wireToMatrix(e.snapshot.components),
187
+ singularValues: e.snapshot.singularValues,
188
+ explainedVariance: e.snapshot.explainedVariance,
189
+ };
190
+ if (e.snapshot.scores !== undefined) {
191
+ snapshot.scores = wireToMatrix(e.snapshot.scores);
192
+ }
193
+ out.snapshot = snapshot;
194
+ }
195
+ return out;
196
+ }
197
+ // ---------------------------------------------------------------------
198
+ // Shared proxy base
199
+ // ---------------------------------------------------------------------
200
+ let estCounter = 0;
201
+ class WorkerEstimatorBase {
202
+ conn;
203
+ estId;
204
+ ownsWorker;
205
+ defaultOnProgress;
206
+ defaultProgress;
207
+ model_ = null;
208
+ whitenOpt;
209
+ createDone;
210
+ disposed = false;
211
+ constructor(estimator, backend, wireOptions, client, hydrate) {
212
+ const rs = wireOptions.randomState;
213
+ if (rs !== undefined && rs !== null && typeof rs !== 'number') {
214
+ throw new Error('WorkerPCA: randomState must be a numeric seed (a live RandomState cannot cross the worker boundary)');
215
+ }
216
+ this.ownsWorker = client.worker === undefined || typeof client.worker === 'function';
217
+ const port = client.worker === undefined
218
+ ? defaultWorkerFactory()
219
+ : typeof client.worker === 'function'
220
+ ? client.worker()
221
+ : client.worker;
222
+ this.conn = connectionFor(port);
223
+ this.defaultOnProgress = client.onProgress;
224
+ this.defaultProgress = client.progress;
225
+ this.whitenOpt = wireOptions.whiten ?? hydrate?.whiten ?? false;
226
+ this.estId = `est-${++estCounter}`;
227
+ const create = {
228
+ t: 'create',
229
+ id: this.conn.allocId(),
230
+ est: this.estId,
231
+ estimator,
232
+ backend,
233
+ options: wireOptions,
234
+ };
235
+ if (hydrate !== undefined) {
236
+ create.model = hydrate;
237
+ this.model_ = structuredClone(hydrate);
238
+ }
239
+ // Pipelined: sent immediately, never awaited here. Failures resurface
240
+ // on ready() and on every subsequent call for this estimator id.
241
+ this.createDone = this.conn.request(create);
242
+ this.createDone.catch(() => { });
243
+ }
244
+ /** Resolves when the worker handshake and this estimator's create are done. */
245
+ async ready() {
246
+ await this.conn.ready();
247
+ await this.createDone;
248
+ }
249
+ /** Graceful shutdown of this estimator (terminates owned workers too). */
250
+ async dispose() {
251
+ if (this.disposed) {
252
+ return;
253
+ }
254
+ this.disposed = true;
255
+ try {
256
+ await this.conn.request({ t: 'dispose', id: this.conn.allocId(), est: this.estId });
257
+ }
258
+ finally {
259
+ if (this.ownsWorker) {
260
+ this.conn.terminate();
261
+ }
262
+ }
263
+ }
264
+ /**
265
+ * Hard-kill the worker: all in-flight calls reject and subsequent calls
266
+ * keep rejecting with WorkerTerminatedError.
267
+ */
268
+ terminate() {
269
+ this.conn.terminate();
270
+ }
271
+ mirror() {
272
+ if (this.model_ === null) {
273
+ throw new NotFittedError('PCA');
274
+ }
275
+ return this.model_;
276
+ }
277
+ async call(method, payload, transfer = [], fit) {
278
+ if (this.disposed) {
279
+ throw new Error('This worker estimator was disposed');
280
+ }
281
+ const signal = fit?.signal;
282
+ if (signal?.aborted) {
283
+ throw signal.reason ?? makeAbortError();
284
+ }
285
+ const id = this.conn.allocId();
286
+ const msg = { t: 'call', id, est: this.estId, method, ...payload };
287
+ const onProgress = fit?.onProgress ?? this.defaultOnProgress;
288
+ const progressOptions = fit?.progress ?? this.defaultProgress;
289
+ let progressSink;
290
+ if (onProgress !== undefined || progressOptions !== undefined) {
291
+ msg.progress = progressOptions ?? {};
292
+ if (onProgress !== undefined) {
293
+ progressSink = (e) => onProgress(wireToProgress(e));
294
+ }
295
+ }
296
+ let onAbort = null;
297
+ if (signal?.addEventListener !== undefined) {
298
+ onAbort = () => this.conn.post({ t: 'abort', targetId: id });
299
+ signal.addEventListener('abort', onAbort, { once: true });
300
+ }
301
+ try {
302
+ const { value, model } = await this.conn.request(msg, transfer, progressSink);
303
+ if (model !== undefined) {
304
+ this.model_ = model;
305
+ this.whitenOpt = model.whiten;
306
+ }
307
+ return value;
308
+ }
309
+ catch (err) {
310
+ // Prefer the caller's abort reason over the marshalled AbortError.
311
+ if (signal?.aborted && signal.reason !== undefined && signal.reason !== null) {
312
+ throw signal.reason;
313
+ }
314
+ throw err;
315
+ }
316
+ finally {
317
+ if (onAbort !== null) {
318
+ signal?.removeEventListener?.('abort', onAbort);
319
+ }
320
+ }
321
+ }
322
+ wireX(X, fit) {
323
+ const wire = matrixToWire(asMatrix(X));
324
+ return { x: wire, transfer: fit?.transfer === true ? [wire.data.buffer] : [] };
325
+ }
326
+ async callMatrix(method, X) {
327
+ const payload = X === undefined ? {} : { x: matrixToWire(asMatrix(X)) };
328
+ const value = await this.call(method, payload, []);
329
+ return wireToMatrix(value);
330
+ }
331
+ // ---- synchronous mirror (hydrated from the piggybacked model) ----
332
+ get components() {
333
+ const m = this.mirror();
334
+ return new Matrix(m.components, m.nComponents, m.nFeaturesIn);
335
+ }
336
+ get explainedVariance() {
337
+ return this.mirror().explainedVariance;
338
+ }
339
+ get explainedVarianceRatio() {
340
+ return this.mirror().explainedVarianceRatio;
341
+ }
342
+ get singularValues() {
343
+ return this.mirror().singularValues;
344
+ }
345
+ get mean() {
346
+ return this.mirror().mean;
347
+ }
348
+ get nComponents() {
349
+ return this.mirror().nComponents;
350
+ }
351
+ get nFeaturesIn() {
352
+ return this.mirror().nFeaturesIn;
353
+ }
354
+ get noiseVariance() {
355
+ return this.mirror().noiseVariance;
356
+ }
357
+ get whiten() {
358
+ return this.model_ !== null ? this.model_.whiten : this.whitenOpt;
359
+ }
360
+ getFeatureNamesOut() {
361
+ const m = this.mirror();
362
+ const prefix = m.estimator === 'ipca' ? 'incrementalpca' : 'pca';
363
+ const names = new Array(m.nComponents);
364
+ for (let i = 0; i < m.nComponents; i++) {
365
+ names[i] = `${prefix}${i}`;
366
+ }
367
+ return names;
368
+ }
369
+ /** The current model as an independent copy (sync, from the mirror). */
370
+ exportModel() {
371
+ return structuredClone(this.mirror());
372
+ }
373
+ /** Rehydrates worker and mirror from a serialized model. */
374
+ async importModel(model) {
375
+ await this.call('importModel', { model });
376
+ this.model_ = structuredClone(model);
377
+ this.whitenOpt = model.whiten;
378
+ return this;
379
+ }
380
+ /** Which backend actually executes, plus adapter details. */
381
+ async info() {
382
+ return (await this.call('info', {}));
383
+ }
384
+ // ---- async delegated methods ----
385
+ async transform(X) {
386
+ return this.callMatrix('transform', X);
387
+ }
388
+ async inverseTransform(X) {
389
+ return this.callMatrix('inverseTransform', X);
390
+ }
391
+ async getCovariance() {
392
+ return this.callMatrix('getCovariance');
393
+ }
394
+ async getPrecision() {
395
+ return this.callMatrix('getPrecision');
396
+ }
397
+ }
398
+ // ---------------------------------------------------------------------
399
+ // Public proxies
400
+ // ---------------------------------------------------------------------
401
+ export class WorkerPCA extends WorkerEstimatorBase {
402
+ constructor(options = {}, /** @internal use fromModel */ hydrate) {
403
+ const { worker, onProgress, progress, backend, ...wire } = options;
404
+ super('pca', backend ?? 'cpu', wire, { worker, onProgress, progress }, hydrate);
405
+ }
406
+ /**
407
+ * Creates a proxy already hydrated with a fitted model — the worker
408
+ * adopts it (pipelined with create) and the sync mirror is available
409
+ * immediately.
410
+ */
411
+ static fromModel(model, options = {}) {
412
+ assertValidModel(model, 'pca');
413
+ return new WorkerPCA(options, model);
414
+ }
415
+ async fit(X, options = {}) {
416
+ const { x, transfer } = this.wireX(X, options);
417
+ await this.call('fit', { x, returnModel: true }, transfer, options);
418
+ return this;
419
+ }
420
+ async fitTransform(X, options = {}) {
421
+ const { x, transfer } = this.wireX(X, options);
422
+ const value = await this.call('fitTransform', { x, returnModel: true }, transfer, options);
423
+ return wireToMatrix(value);
424
+ }
425
+ async scoreSamples(X) {
426
+ const { x } = this.wireX(X);
427
+ const value = await this.call('scoreSamples', { x });
428
+ return value.data;
429
+ }
430
+ async score(X) {
431
+ const { x } = this.wireX(X);
432
+ return (await this.call('score', { x }));
433
+ }
434
+ get nSamples() {
435
+ return this.mirror().nSamples;
436
+ }
437
+ /** The solver the last fit actually used. */
438
+ get resolvedSvdSolver() {
439
+ return this.mirror().svdSolver;
440
+ }
441
+ }
442
+ export class WorkerIncrementalPCA extends WorkerEstimatorBase {
443
+ constructor(options = {},
444
+ /** @internal use fromModel */ hydrate) {
445
+ const { worker, onProgress, progress, ...wire } = options;
446
+ super('ipca', 'cpu', wire, { worker, onProgress, progress }, hydrate);
447
+ }
448
+ static fromModel(model, options = {}) {
449
+ assertValidModel(model, 'ipca');
450
+ return new WorkerIncrementalPCA(options, model);
451
+ }
452
+ async fit(X, options = {}) {
453
+ const { x, transfer } = this.wireX(X, options);
454
+ await this.call('fit', { x, returnModel: true }, transfer, options);
455
+ return this;
456
+ }
457
+ async fitTransform(X, options = {}) {
458
+ const { x, transfer } = this.wireX(X, options);
459
+ const value = await this.call('fitTransform', { x, returnModel: true }, transfer, options);
460
+ return wireToMatrix(value);
461
+ }
462
+ /** One incremental batch — sklearn's partial_fit, off-thread. */
463
+ async partialFit(X, options = {}) {
464
+ const { x, transfer } = this.wireX(X, options);
465
+ await this.call('partialFit', { x, returnModel: true }, transfer, options);
466
+ return this;
467
+ }
468
+ get variance() {
469
+ return this.mirror().variance;
470
+ }
471
+ get nSamplesSeen() {
472
+ return this.mirror().nSamplesSeen;
473
+ }
474
+ get batchSize() {
475
+ const b = this.mirror().batchSize;
476
+ if (b === null) {
477
+ throw new Error("batchSize is only available after fit() (sklearn's batch_size_)");
478
+ }
479
+ return b;
480
+ }
481
+ }
482
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/worker/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type PCAWorkerPort } from './protocol.js';
2
+ export interface AttachPCAWorkerOptions {
3
+ /**
4
+ * Event-loop slice budget for fits inside the worker (default 50 ms —
5
+ * coarser than the main thread's 12 ms: nothing paints here, the slices
6
+ * only exist so abort messages get processed).
7
+ */
8
+ budgetMs?: number;
9
+ }
10
+ /**
11
+ * Attaches the pca-web protocol to a message port (a dedicated worker's
12
+ * global scope, a MessagePort, or Node's worker_threads port). Returns a
13
+ * detach function. Posts `{t: 'ready'}` immediately so clients can await
14
+ * the handshake.
15
+ */
16
+ export declare function attachPCAWorker(port: PCAWorkerPort, options?: AttachPCAWorkerOptions): () => void;
17
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/worker/handler.ts"],"names":[],"mappings":"AAgBA,OAAO,EAOL,KAAK,aAAa,EAanB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkLD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,sBAA2B,GACnC,MAAM,IAAI,CA0QZ"}