@justinelliottcobb/amari-wasm 0.3.6 → 0.6.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/amari_wasm.js CHANGED
@@ -1,5 +1,20 @@
1
1
  let wasm;
2
2
 
3
+ function addToExternrefTable0(obj) {
4
+ const idx = wasm.__externref_table_alloc();
5
+ wasm.__wbindgen_export_2.set(idx, obj);
6
+ return idx;
7
+ }
8
+
9
+ function handleError(f, args) {
10
+ try {
11
+ return f.apply(this, args);
12
+ } catch (e) {
13
+ const idx = addToExternrefTable0(e);
14
+ wasm.__wbindgen_exn_store(idx);
15
+ }
16
+ }
17
+
3
18
  let cachedUint8ArrayMemory0 = null;
4
19
 
5
20
  function getUint8ArrayMemory0() {
@@ -30,6 +45,31 @@ function getStringFromWasm0(ptr, len) {
30
45
  return decodeText(ptr, len);
31
46
  }
32
47
 
48
+ function isLikeNone(x) {
49
+ return x === undefined || x === null;
50
+ }
51
+
52
+ let cachedDataViewMemory0 = null;
53
+
54
+ function getDataViewMemory0() {
55
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
56
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
57
+ }
58
+ return cachedDataViewMemory0;
59
+ }
60
+
61
+ function _assertClass(instance, klass) {
62
+ if (!(instance instanceof klass)) {
63
+ throw new Error(`expected instance of ${klass.name}`);
64
+ }
65
+ }
66
+
67
+ function takeFromExternrefTable0(idx) {
68
+ const value = wasm.__wbindgen_export_2.get(idx);
69
+ wasm.__externref_table_dealloc(idx);
70
+ return value;
71
+ }
72
+
33
73
  let cachedFloat64ArrayMemory0 = null;
34
74
 
35
75
  function getFloat64ArrayMemory0() {
@@ -48,22 +88,10 @@ function passArrayF64ToWasm0(arg, malloc) {
48
88
  return ptr;
49
89
  }
50
90
 
51
- function takeFromExternrefTable0(idx) {
52
- const value = wasm.__wbindgen_export_0.get(idx);
53
- wasm.__externref_table_dealloc(idx);
54
- return value;
55
- }
56
-
57
91
  function getArrayF64FromWasm0(ptr, len) {
58
92
  ptr = ptr >>> 0;
59
93
  return getFloat64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);
60
94
  }
61
-
62
- function _assertClass(instance, klass) {
63
- if (!(instance instanceof klass)) {
64
- throw new Error(`expected instance of ${klass.name}`);
65
- }
66
- }
67
95
  /**
68
96
  * Initialize the WASM module
69
97
  */
@@ -71,6 +99,54 @@ export function init() {
71
99
  wasm.init();
72
100
  }
73
101
 
102
+ const AutoDiffFinalization = (typeof FinalizationRegistry === 'undefined')
103
+ ? { register: () => {}, unregister: () => {} }
104
+ : new FinalizationRegistry(ptr => wasm.__wbg_autodiff_free(ptr >>> 0, 1));
105
+ /**
106
+ * Automatic differentiation utilities
107
+ */
108
+ export class AutoDiff {
109
+
110
+ __destroy_into_raw() {
111
+ const ptr = this.__wbg_ptr;
112
+ this.__wbg_ptr = 0;
113
+ AutoDiffFinalization.unregister(this);
114
+ return ptr;
115
+ }
116
+
117
+ free() {
118
+ const ptr = this.__destroy_into_raw();
119
+ wasm.__wbg_autodiff_free(ptr, 0);
120
+ }
121
+ /**
122
+ * Compute numerical derivative using finite differences (fallback implementation)
123
+ * @param {number} x
124
+ * @param {Function} f
125
+ * @param {number} h
126
+ * @returns {number}
127
+ */
128
+ static numericalDerivative(x, f, h) {
129
+ const ret = wasm.autodiff_numericalDerivative(x, f, h);
130
+ if (ret[2]) {
131
+ throw takeFromExternrefTable0(ret[1]);
132
+ }
133
+ return ret[0];
134
+ }
135
+ /**
136
+ * Create a dual number and evaluate a polynomial
137
+ * @param {number} x
138
+ * @param {Float64Array} coefficients
139
+ * @returns {WasmDualNumber}
140
+ */
141
+ static evaluatePolynomial(x, coefficients) {
142
+ const ptr0 = passArrayF64ToWasm0(coefficients, wasm.__wbindgen_malloc);
143
+ const len0 = WASM_VECTOR_LEN;
144
+ const ret = wasm.autodiff_evaluatePolynomial(x, ptr0, len0);
145
+ return WasmDualNumber.__wrap(ret);
146
+ }
147
+ }
148
+ if (Symbol.dispose) AutoDiff.prototype[Symbol.dispose] = AutoDiff.prototype.free;
149
+
74
150
  const BatchOperationsFinalization = (typeof FinalizationRegistry === 'undefined')
75
151
  ? { register: () => {}, unregister: () => {} }
76
152
  : new FinalizationRegistry(ptr => wasm.__wbg_batchoperations_free(ptr >>> 0, 1));
@@ -85,51 +161,947 @@ export class BatchOperations {
85
161
  BatchOperationsFinalization.unregister(this);
86
162
  return ptr;
87
163
  }
88
-
89
- free() {
90
- const ptr = this.__destroy_into_raw();
91
- wasm.__wbg_batchoperations_free(ptr, 0);
164
+
165
+ free() {
166
+ const ptr = this.__destroy_into_raw();
167
+ wasm.__wbg_batchoperations_free(ptr, 0);
168
+ }
169
+ /**
170
+ * Batch geometric product: compute a[i] * b[i] for all i
171
+ * Optimized for WebAssembly performance with reduced allocations
172
+ * @param {Float64Array} a_batch
173
+ * @param {Float64Array} b_batch
174
+ * @returns {Float64Array}
175
+ */
176
+ static batchGeometricProduct(a_batch, b_batch) {
177
+ const ptr0 = passArrayF64ToWasm0(a_batch, wasm.__wbindgen_malloc);
178
+ const len0 = WASM_VECTOR_LEN;
179
+ const ptr1 = passArrayF64ToWasm0(b_batch, wasm.__wbindgen_malloc);
180
+ const len1 = WASM_VECTOR_LEN;
181
+ const ret = wasm.batchoperations_batchGeometricProduct(ptr0, len0, ptr1, len1);
182
+ if (ret[3]) {
183
+ throw takeFromExternrefTable0(ret[2]);
184
+ }
185
+ var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
186
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
187
+ return v3;
188
+ }
189
+ /**
190
+ * Batch addition
191
+ * @param {Float64Array} a_batch
192
+ * @param {Float64Array} b_batch
193
+ * @returns {Float64Array}
194
+ */
195
+ static batchAdd(a_batch, b_batch) {
196
+ const ptr0 = passArrayF64ToWasm0(a_batch, wasm.__wbindgen_malloc);
197
+ const len0 = WASM_VECTOR_LEN;
198
+ const ptr1 = passArrayF64ToWasm0(b_batch, wasm.__wbindgen_malloc);
199
+ const len1 = WASM_VECTOR_LEN;
200
+ const ret = wasm.batchoperations_batchAdd(ptr0, len0, ptr1, len1);
201
+ if (ret[3]) {
202
+ throw takeFromExternrefTable0(ret[2]);
203
+ }
204
+ var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
205
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
206
+ return v3;
207
+ }
208
+ }
209
+ if (Symbol.dispose) BatchOperations.prototype[Symbol.dispose] = BatchOperations.prototype.free;
210
+
211
+ const FusionBatchFinalization = (typeof FinalizationRegistry === 'undefined')
212
+ ? { register: () => {}, unregister: () => {} }
213
+ : new FinalizationRegistry(ptr => wasm.__wbg_fusionbatch_free(ptr >>> 0, 1));
214
+ /**
215
+ * Fusion utilities for batch operations
216
+ */
217
+ export class FusionBatch {
218
+
219
+ __destroy_into_raw() {
220
+ const ptr = this.__wbg_ptr;
221
+ this.__wbg_ptr = 0;
222
+ FusionBatchFinalization.unregister(this);
223
+ return ptr;
224
+ }
225
+
226
+ free() {
227
+ const ptr = this.__destroy_into_raw();
228
+ wasm.__wbg_fusionbatch_free(ptr, 0);
229
+ }
230
+ /**
231
+ * Batch tropical attention across multiple queries
232
+ * @param {Float64Array} queries
233
+ * @param {Float64Array} keys
234
+ * @param {Float64Array} values
235
+ * @param {number} query_dim
236
+ * @returns {Float64Array}
237
+ */
238
+ static batchTropicalAttention(queries, keys, values, query_dim) {
239
+ const ptr0 = passArrayF64ToWasm0(queries, wasm.__wbindgen_malloc);
240
+ const len0 = WASM_VECTOR_LEN;
241
+ const ptr1 = passArrayF64ToWasm0(keys, wasm.__wbindgen_malloc);
242
+ const len1 = WASM_VECTOR_LEN;
243
+ const ptr2 = passArrayF64ToWasm0(values, wasm.__wbindgen_malloc);
244
+ const len2 = WASM_VECTOR_LEN;
245
+ const ret = wasm.fusionbatch_batchTropicalAttention(ptr0, len0, ptr1, len1, ptr2, len2, query_dim);
246
+ if (ret[3]) {
247
+ throw takeFromExternrefTable0(ret[2]);
248
+ }
249
+ var v4 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
250
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
251
+ return v4;
252
+ }
253
+ /**
254
+ * Compute fusion similarity between two TDC objects
255
+ * @param {WasmTropicalDualClifford} tdc1
256
+ * @param {WasmTropicalDualClifford} tdc2
257
+ * @returns {number}
258
+ */
259
+ static fusionSimilarity(tdc1, tdc2) {
260
+ _assertClass(tdc1, WasmTropicalDualClifford);
261
+ _assertClass(tdc2, WasmTropicalDualClifford);
262
+ const ret = wasm.fusionbatch_fusionSimilarity(tdc1.__wbg_ptr, tdc2.__wbg_ptr);
263
+ return ret;
264
+ }
265
+ /**
266
+ * Optimize TDC parameters using gradient information
267
+ * @param {WasmTropicalDualClifford} tdc
268
+ * @param {number} learning_rate
269
+ * @returns {WasmTropicalDualClifford}
270
+ */
271
+ static gradientStep(tdc, learning_rate) {
272
+ _assertClass(tdc, WasmTropicalDualClifford);
273
+ const ret = wasm.fusionbatch_gradientStep(tdc.__wbg_ptr, learning_rate);
274
+ return WasmTropicalDualClifford.__wrap(ret);
275
+ }
276
+ }
277
+ if (Symbol.dispose) FusionBatch.prototype[Symbol.dispose] = FusionBatch.prototype.free;
278
+
279
+ const InfoGeomUtilsFinalization = (typeof FinalizationRegistry === 'undefined')
280
+ ? { register: () => {}, unregister: () => {} }
281
+ : new FinalizationRegistry(ptr => wasm.__wbg_infogeomutils_free(ptr >>> 0, 1));
282
+ /**
283
+ * Information geometry utilities
284
+ */
285
+ export class InfoGeomUtils {
286
+
287
+ __destroy_into_raw() {
288
+ const ptr = this.__wbg_ptr;
289
+ this.__wbg_ptr = 0;
290
+ InfoGeomUtilsFinalization.unregister(this);
291
+ return ptr;
292
+ }
293
+
294
+ free() {
295
+ const ptr = this.__destroy_into_raw();
296
+ wasm.__wbg_infogeomutils_free(ptr, 0);
297
+ }
298
+ /**
299
+ * Normalize array to probability distribution
300
+ * @param {Float64Array} values
301
+ * @returns {Float64Array}
302
+ */
303
+ static normalize(values) {
304
+ const ptr0 = passArrayF64ToWasm0(values, wasm.__wbindgen_malloc);
305
+ const len0 = WASM_VECTOR_LEN;
306
+ const ret = wasm.infogeomutils_normalize(ptr0, len0);
307
+ if (ret[3]) {
308
+ throw takeFromExternrefTable0(ret[2]);
309
+ }
310
+ var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
311
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
312
+ return v2;
313
+ }
314
+ /**
315
+ * Convert log probabilities to probabilities
316
+ * @param {Float64Array} logits
317
+ * @returns {Float64Array}
318
+ */
319
+ static softmax(logits) {
320
+ const ptr0 = passArrayF64ToWasm0(logits, wasm.__wbindgen_malloc);
321
+ const len0 = WASM_VECTOR_LEN;
322
+ const ret = wasm.infogeomutils_softmax(ptr0, len0);
323
+ var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
324
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
325
+ return v2;
326
+ }
327
+ /**
328
+ * Compute entropy of a probability distribution
329
+ * @param {Float64Array} p
330
+ * @returns {number}
331
+ */
332
+ static entropy(p) {
333
+ const ptr0 = passArrayF64ToWasm0(p, wasm.__wbindgen_malloc);
334
+ const len0 = WASM_VECTOR_LEN;
335
+ const ret = wasm.infogeomutils_entropy(ptr0, len0);
336
+ if (ret[2]) {
337
+ throw takeFromExternrefTable0(ret[1]);
338
+ }
339
+ return ret[0];
340
+ }
341
+ /**
342
+ * Compute cross-entropy between two distributions
343
+ * @param {Float64Array} p
344
+ * @param {Float64Array} q
345
+ * @returns {number}
346
+ */
347
+ static crossEntropy(p, q) {
348
+ const ptr0 = passArrayF64ToWasm0(p, wasm.__wbindgen_malloc);
349
+ const len0 = WASM_VECTOR_LEN;
350
+ const ptr1 = passArrayF64ToWasm0(q, wasm.__wbindgen_malloc);
351
+ const len1 = WASM_VECTOR_LEN;
352
+ const ret = wasm.infogeomutils_crossEntropy(ptr0, len0, ptr1, len1);
353
+ if (ret[2]) {
354
+ throw takeFromExternrefTable0(ret[1]);
355
+ }
356
+ return ret[0];
357
+ }
358
+ /**
359
+ * Compute mutual information between two discrete distributions
360
+ * @param {Float64Array} joint
361
+ * @param {Float64Array} marginal_x
362
+ * @param {Float64Array} marginal_y
363
+ * @param {number} dim_x
364
+ * @returns {number}
365
+ */
366
+ static mutualInformation(joint, marginal_x, marginal_y, dim_x) {
367
+ const ptr0 = passArrayF64ToWasm0(joint, wasm.__wbindgen_malloc);
368
+ const len0 = WASM_VECTOR_LEN;
369
+ const ptr1 = passArrayF64ToWasm0(marginal_x, wasm.__wbindgen_malloc);
370
+ const len1 = WASM_VECTOR_LEN;
371
+ const ptr2 = passArrayF64ToWasm0(marginal_y, wasm.__wbindgen_malloc);
372
+ const len2 = WASM_VECTOR_LEN;
373
+ const ret = wasm.infogeomutils_mutualInformation(ptr0, len0, ptr1, len1, ptr2, len2, dim_x);
374
+ if (ret[2]) {
375
+ throw takeFromExternrefTable0(ret[1]);
376
+ }
377
+ return ret[0];
378
+ }
379
+ /**
380
+ * Generate points on the probability simplex for testing
381
+ * Note: Uses a simple deterministic sequence for reproducibility in WASM
382
+ * @param {number} dimension
383
+ * @returns {Float64Array}
384
+ */
385
+ static randomSimplex(dimension) {
386
+ const ret = wasm.infogeomutils_randomSimplex(dimension);
387
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
388
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
389
+ return v1;
390
+ }
391
+ }
392
+ if (Symbol.dispose) InfoGeomUtils.prototype[Symbol.dispose] = InfoGeomUtils.prototype.free;
393
+
394
+ const PerformanceOperationsFinalization = (typeof FinalizationRegistry === 'undefined')
395
+ ? { register: () => {}, unregister: () => {} }
396
+ : new FinalizationRegistry(ptr => wasm.__wbg_performanceoperations_free(ptr >>> 0, 1));
397
+ /**
398
+ * High-performance WASM operations with memory pooling
399
+ */
400
+ export class PerformanceOperations {
401
+
402
+ __destroy_into_raw() {
403
+ const ptr = this.__wbg_ptr;
404
+ this.__wbg_ptr = 0;
405
+ PerformanceOperationsFinalization.unregister(this);
406
+ return ptr;
407
+ }
408
+
409
+ free() {
410
+ const ptr = this.__destroy_into_raw();
411
+ wasm.__wbg_performanceoperations_free(ptr, 0);
412
+ }
413
+ /**
414
+ * Fast geometric product for hot paths with memory pooling
415
+ * @param {Float64Array} lhs
416
+ * @param {Float64Array} rhs
417
+ * @returns {Float64Array}
418
+ */
419
+ static fastGeometricProduct(lhs, rhs) {
420
+ const ptr0 = passArrayF64ToWasm0(lhs, wasm.__wbindgen_malloc);
421
+ const len0 = WASM_VECTOR_LEN;
422
+ const ptr1 = passArrayF64ToWasm0(rhs, wasm.__wbindgen_malloc);
423
+ const len1 = WASM_VECTOR_LEN;
424
+ const ret = wasm.performanceoperations_fastGeometricProduct(ptr0, len0, ptr1, len1);
425
+ var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
426
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
427
+ return v3;
428
+ }
429
+ /**
430
+ * Optimized vector operations for 3D space
431
+ * @param {Float64Array} v1
432
+ * @param {Float64Array} v2
433
+ * @returns {Float64Array}
434
+ */
435
+ static vectorCrossProduct(v1, v2) {
436
+ const ptr0 = passArrayF64ToWasm0(v1, wasm.__wbindgen_malloc);
437
+ const len0 = WASM_VECTOR_LEN;
438
+ const ptr1 = passArrayF64ToWasm0(v2, wasm.__wbindgen_malloc);
439
+ const len1 = WASM_VECTOR_LEN;
440
+ const ret = wasm.performanceoperations_vectorCrossProduct(ptr0, len0, ptr1, len1);
441
+ var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
442
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
443
+ return v3;
444
+ }
445
+ /**
446
+ * Optimized vector dot product
447
+ * @param {Float64Array} v1
448
+ * @param {Float64Array} v2
449
+ * @returns {number}
450
+ */
451
+ static vectorDotProduct(v1, v2) {
452
+ const ptr0 = passArrayF64ToWasm0(v1, wasm.__wbindgen_malloc);
453
+ const len0 = WASM_VECTOR_LEN;
454
+ const ptr1 = passArrayF64ToWasm0(v2, wasm.__wbindgen_malloc);
455
+ const len1 = WASM_VECTOR_LEN;
456
+ const ret = wasm.performanceoperations_vectorDotProduct(ptr0, len0, ptr1, len1);
457
+ return ret;
458
+ }
459
+ /**
460
+ * Batch normalize vectors for efficiency
461
+ * @param {Float64Array} vectors
462
+ * @param {number} vector_size
463
+ * @returns {Float64Array}
464
+ */
465
+ static batchNormalize(vectors, vector_size) {
466
+ const ptr0 = passArrayF64ToWasm0(vectors, wasm.__wbindgen_malloc);
467
+ const len0 = WASM_VECTOR_LEN;
468
+ const ret = wasm.performanceoperations_batchNormalize(ptr0, len0, vector_size);
469
+ var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
470
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
471
+ return v2;
472
+ }
473
+ }
474
+ if (Symbol.dispose) PerformanceOperations.prototype[Symbol.dispose] = PerformanceOperations.prototype.free;
475
+
476
+ const TropicalBatchFinalization = (typeof FinalizationRegistry === 'undefined')
477
+ ? { register: () => {}, unregister: () => {} }
478
+ : new FinalizationRegistry(ptr => wasm.__wbg_tropicalbatch_free(ptr >>> 0, 1));
479
+ /**
480
+ * Batch operations for tropical numbers
481
+ */
482
+ export class TropicalBatch {
483
+
484
+ __destroy_into_raw() {
485
+ const ptr = this.__wbg_ptr;
486
+ this.__wbg_ptr = 0;
487
+ TropicalBatchFinalization.unregister(this);
488
+ return ptr;
489
+ }
490
+
491
+ free() {
492
+ const ptr = this.__destroy_into_raw();
493
+ wasm.__wbg_tropicalbatch_free(ptr, 0);
494
+ }
495
+ /**
496
+ * Batch tropical addition (max operation)
497
+ * @param {Float64Array} values
498
+ * @returns {number}
499
+ */
500
+ static batchTropicalAdd(values) {
501
+ const ptr0 = passArrayF64ToWasm0(values, wasm.__wbindgen_malloc);
502
+ const len0 = WASM_VECTOR_LEN;
503
+ const ret = wasm.tropicalbatch_batchTropicalAdd(ptr0, len0);
504
+ return ret;
505
+ }
506
+ /**
507
+ * Batch tropical multiplication (addition)
508
+ * @param {Float64Array} values
509
+ * @returns {number}
510
+ */
511
+ static batchTropicalMul(values) {
512
+ const ptr0 = passArrayF64ToWasm0(values, wasm.__wbindgen_malloc);
513
+ const len0 = WASM_VECTOR_LEN;
514
+ const ret = wasm.tropicalbatch_batchTropicalMul(ptr0, len0);
515
+ return ret;
516
+ }
517
+ /**
518
+ * Convert array of log probabilities to tropical numbers and find maximum
519
+ * @param {Float64Array} log_probs
520
+ * @returns {number}
521
+ */
522
+ static maxLogProb(log_probs) {
523
+ const ptr0 = passArrayF64ToWasm0(log_probs, wasm.__wbindgen_malloc);
524
+ const len0 = WASM_VECTOR_LEN;
525
+ const ret = wasm.tropicalbatch_maxLogProb(ptr0, len0);
526
+ return ret;
527
+ }
528
+ /**
529
+ * Viterbi algorithm helper: find best path through trellis
530
+ * @param {Float64Array} prev_scores
531
+ * @param {Float64Array} transition_scores
532
+ * @param {Float64Array} emission_scores
533
+ * @param {number} num_states
534
+ * @returns {Float64Array}
535
+ */
536
+ static viterbiStep(prev_scores, transition_scores, emission_scores, num_states) {
537
+ const ptr0 = passArrayF64ToWasm0(prev_scores, wasm.__wbindgen_malloc);
538
+ const len0 = WASM_VECTOR_LEN;
539
+ const ptr1 = passArrayF64ToWasm0(transition_scores, wasm.__wbindgen_malloc);
540
+ const len1 = WASM_VECTOR_LEN;
541
+ const ptr2 = passArrayF64ToWasm0(emission_scores, wasm.__wbindgen_malloc);
542
+ const len2 = WASM_VECTOR_LEN;
543
+ const ret = wasm.tropicalbatch_viterbiStep(ptr0, len0, ptr1, len1, ptr2, len2, num_states);
544
+ if (ret[3]) {
545
+ throw takeFromExternrefTable0(ret[2]);
546
+ }
547
+ var v4 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
548
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
549
+ return v4;
550
+ }
551
+ }
552
+ if (Symbol.dispose) TropicalBatch.prototype[Symbol.dispose] = TropicalBatch.prototype.free;
553
+
554
+ const WasmAlphaConnectionFinalization = (typeof FinalizationRegistry === 'undefined')
555
+ ? { register: () => {}, unregister: () => {} }
556
+ : new FinalizationRegistry(ptr => wasm.__wbg_wasmalphaconnection_free(ptr >>> 0, 1));
557
+ /**
558
+ * WASM wrapper for AlphaConnection
559
+ */
560
+ export class WasmAlphaConnection {
561
+
562
+ __destroy_into_raw() {
563
+ const ptr = this.__wbg_ptr;
564
+ this.__wbg_ptr = 0;
565
+ WasmAlphaConnectionFinalization.unregister(this);
566
+ return ptr;
567
+ }
568
+
569
+ free() {
570
+ const ptr = this.__destroy_into_raw();
571
+ wasm.__wbg_wasmalphaconnection_free(ptr, 0);
572
+ }
573
+ /**
574
+ * Create a new α-connection
575
+ * @param {number} alpha
576
+ */
577
+ constructor(alpha) {
578
+ const ret = wasm.wasmalphaconnection_new(alpha);
579
+ if (ret[2]) {
580
+ throw takeFromExternrefTable0(ret[1]);
581
+ }
582
+ this.__wbg_ptr = ret[0] >>> 0;
583
+ WasmAlphaConnectionFinalization.register(this, this.__wbg_ptr, this);
584
+ return this;
585
+ }
586
+ /**
587
+ * Get the α parameter
588
+ * @returns {number}
589
+ */
590
+ getAlpha() {
591
+ const ret = wasm.wasmalphaconnection_getAlpha(this.__wbg_ptr);
592
+ return ret;
593
+ }
594
+ /**
595
+ * Check if this is the exponential connection (α = 1)
596
+ * @returns {boolean}
597
+ */
598
+ isExponential() {
599
+ const ret = wasm.wasmalphaconnection_isExponential(this.__wbg_ptr);
600
+ return ret !== 0;
601
+ }
602
+ /**
603
+ * Check if this is the mixture connection (α = -1)
604
+ * @returns {boolean}
605
+ */
606
+ isMixture() {
607
+ const ret = wasm.wasmalphaconnection_isMixture(this.__wbg_ptr);
608
+ return ret !== 0;
609
+ }
610
+ /**
611
+ * Check if this is the Levi-Civita connection (α = 0)
612
+ * @returns {boolean}
613
+ */
614
+ isLeviCivita() {
615
+ const ret = wasm.wasmalphaconnection_isLeviCivita(this.__wbg_ptr);
616
+ return ret !== 0;
617
+ }
618
+ }
619
+ if (Symbol.dispose) WasmAlphaConnection.prototype[Symbol.dispose] = WasmAlphaConnection.prototype.free;
620
+
621
+ const WasmDualNumberFinalization = (typeof FinalizationRegistry === 'undefined')
622
+ ? { register: () => {}, unregister: () => {} }
623
+ : new FinalizationRegistry(ptr => wasm.__wbg_wasmdualnumber_free(ptr >>> 0, 1));
624
+ /**
625
+ * WASM wrapper for single-variable dual numbers
626
+ */
627
+ export class WasmDualNumber {
628
+
629
+ static __wrap(ptr) {
630
+ ptr = ptr >>> 0;
631
+ const obj = Object.create(WasmDualNumber.prototype);
632
+ obj.__wbg_ptr = ptr;
633
+ WasmDualNumberFinalization.register(obj, obj.__wbg_ptr, obj);
634
+ return obj;
635
+ }
636
+
637
+ __destroy_into_raw() {
638
+ const ptr = this.__wbg_ptr;
639
+ this.__wbg_ptr = 0;
640
+ WasmDualNumberFinalization.unregister(this);
641
+ return ptr;
642
+ }
643
+
644
+ free() {
645
+ const ptr = this.__destroy_into_raw();
646
+ wasm.__wbg_wasmdualnumber_free(ptr, 0);
647
+ }
648
+ /**
649
+ * Create a new dual number with given real and dual parts
650
+ * @param {number} real
651
+ * @param {number} dual
652
+ */
653
+ constructor(real, dual) {
654
+ const ret = wasm.wasmdualnumber_new(real, dual);
655
+ this.__wbg_ptr = ret >>> 0;
656
+ WasmDualNumberFinalization.register(this, this.__wbg_ptr, this);
657
+ return this;
658
+ }
659
+ /**
660
+ * Create a variable (derivative = 1)
661
+ * @param {number} value
662
+ * @returns {WasmDualNumber}
663
+ */
664
+ static variable(value) {
665
+ const ret = wasm.wasmdualnumber_variable(value);
666
+ return WasmDualNumber.__wrap(ret);
667
+ }
668
+ /**
669
+ * Create a constant (derivative = 0)
670
+ * @param {number} value
671
+ * @returns {WasmDualNumber}
672
+ */
673
+ static constant(value) {
674
+ const ret = wasm.wasmdualnumber_constant(value);
675
+ return WasmDualNumber.__wrap(ret);
676
+ }
677
+ /**
678
+ * Get the real part (function value)
679
+ * @returns {number}
680
+ */
681
+ getReal() {
682
+ const ret = wasm.wasmalphaconnection_getAlpha(this.__wbg_ptr);
683
+ return ret;
684
+ }
685
+ /**
686
+ * Get the dual part (derivative)
687
+ * @returns {number}
688
+ */
689
+ getDual() {
690
+ const ret = wasm.wasmdualnumber_getDual(this.__wbg_ptr);
691
+ return ret;
692
+ }
693
+ /**
694
+ * Addition
695
+ * @param {WasmDualNumber} other
696
+ * @returns {WasmDualNumber}
697
+ */
698
+ add(other) {
699
+ _assertClass(other, WasmDualNumber);
700
+ const ret = wasm.wasmdualnumber_add(this.__wbg_ptr, other.__wbg_ptr);
701
+ return WasmDualNumber.__wrap(ret);
702
+ }
703
+ /**
704
+ * Subtraction
705
+ * @param {WasmDualNumber} other
706
+ * @returns {WasmDualNumber}
707
+ */
708
+ sub(other) {
709
+ _assertClass(other, WasmDualNumber);
710
+ const ret = wasm.wasmdualnumber_sub(this.__wbg_ptr, other.__wbg_ptr);
711
+ return WasmDualNumber.__wrap(ret);
712
+ }
713
+ /**
714
+ * Multiplication
715
+ * @param {WasmDualNumber} other
716
+ * @returns {WasmDualNumber}
717
+ */
718
+ mul(other) {
719
+ _assertClass(other, WasmDualNumber);
720
+ const ret = wasm.wasmdualnumber_mul(this.__wbg_ptr, other.__wbg_ptr);
721
+ return WasmDualNumber.__wrap(ret);
722
+ }
723
+ /**
724
+ * Division
725
+ * @param {WasmDualNumber} other
726
+ * @returns {WasmDualNumber}
727
+ */
728
+ div(other) {
729
+ _assertClass(other, WasmDualNumber);
730
+ const ret = wasm.wasmdualnumber_div(this.__wbg_ptr, other.__wbg_ptr);
731
+ if (ret[2]) {
732
+ throw takeFromExternrefTable0(ret[1]);
733
+ }
734
+ return WasmDualNumber.__wrap(ret[0]);
735
+ }
736
+ /**
737
+ * Negation
738
+ * @returns {WasmDualNumber}
739
+ */
740
+ neg() {
741
+ const ret = wasm.wasmdualnumber_neg(this.__wbg_ptr);
742
+ return WasmDualNumber.__wrap(ret);
743
+ }
744
+ /**
745
+ * Power function
746
+ * @param {number} exponent
747
+ * @returns {WasmDualNumber}
748
+ */
749
+ pow(exponent) {
750
+ const ret = wasm.wasmdualnumber_pow(this.__wbg_ptr, exponent);
751
+ return WasmDualNumber.__wrap(ret);
752
+ }
753
+ /**
754
+ * Exponential function
755
+ * @returns {WasmDualNumber}
756
+ */
757
+ exp() {
758
+ const ret = wasm.wasmdualnumber_exp(this.__wbg_ptr);
759
+ return WasmDualNumber.__wrap(ret);
760
+ }
761
+ /**
762
+ * Natural logarithm
763
+ * @returns {WasmDualNumber}
764
+ */
765
+ ln() {
766
+ const ret = wasm.wasmdualnumber_ln(this.__wbg_ptr);
767
+ if (ret[2]) {
768
+ throw takeFromExternrefTable0(ret[1]);
769
+ }
770
+ return WasmDualNumber.__wrap(ret[0]);
771
+ }
772
+ /**
773
+ * Sine function
774
+ * @returns {WasmDualNumber}
775
+ */
776
+ sin() {
777
+ const ret = wasm.wasmdualnumber_sin(this.__wbg_ptr);
778
+ return WasmDualNumber.__wrap(ret);
779
+ }
780
+ /**
781
+ * Cosine function
782
+ * @returns {WasmDualNumber}
783
+ */
784
+ cos() {
785
+ const ret = wasm.wasmdualnumber_cos(this.__wbg_ptr);
786
+ return WasmDualNumber.__wrap(ret);
787
+ }
788
+ /**
789
+ * Square root
790
+ * @returns {WasmDualNumber}
791
+ */
792
+ sqrt() {
793
+ const ret = wasm.wasmdualnumber_sqrt(this.__wbg_ptr);
794
+ if (ret[2]) {
795
+ throw takeFromExternrefTable0(ret[1]);
796
+ }
797
+ return WasmDualNumber.__wrap(ret[0]);
798
+ }
799
+ }
800
+ if (Symbol.dispose) WasmDualNumber.prototype[Symbol.dispose] = WasmDualNumber.prototype.free;
801
+
802
+ const WasmDuallyFlatManifoldFinalization = (typeof FinalizationRegistry === 'undefined')
803
+ ? { register: () => {}, unregister: () => {} }
804
+ : new FinalizationRegistry(ptr => wasm.__wbg_wasmduallyflatmanifold_free(ptr >>> 0, 1));
805
+ /**
806
+ * WASM wrapper for DuallyFlatManifold
807
+ */
808
+ export class WasmDuallyFlatManifold {
809
+
810
+ __destroy_into_raw() {
811
+ const ptr = this.__wbg_ptr;
812
+ this.__wbg_ptr = 0;
813
+ WasmDuallyFlatManifoldFinalization.unregister(this);
814
+ return ptr;
815
+ }
816
+
817
+ free() {
818
+ const ptr = this.__destroy_into_raw();
819
+ wasm.__wbg_wasmduallyflatmanifold_free(ptr, 0);
820
+ }
821
+ /**
822
+ * Create a new dually flat manifold
823
+ * @param {number} dimension
824
+ * @param {number} alpha
825
+ */
826
+ constructor(dimension, alpha) {
827
+ const ret = wasm.wasmduallyflatmanifold_new(dimension, alpha);
828
+ this.__wbg_ptr = ret >>> 0;
829
+ WasmDuallyFlatManifoldFinalization.register(this, this.__wbg_ptr, this);
830
+ return this;
831
+ }
832
+ /**
833
+ * Compute Fisher information metric at a point
834
+ * @param {Float64Array} point
835
+ * @returns {WasmFisherInformationMatrix}
836
+ */
837
+ fisherMetricAt(point) {
838
+ const ptr0 = passArrayF64ToWasm0(point, wasm.__wbindgen_malloc);
839
+ const len0 = WASM_VECTOR_LEN;
840
+ const ret = wasm.wasmduallyflatmanifold_fisherMetricAt(this.__wbg_ptr, ptr0, len0);
841
+ return WasmFisherInformationMatrix.__wrap(ret);
842
+ }
843
+ /**
844
+ * Compute Bregman divergence (KL divergence for probability distributions)
845
+ * @param {Float64Array} p
846
+ * @param {Float64Array} q
847
+ * @returns {number}
848
+ */
849
+ bregmanDivergence(p, q) {
850
+ const ptr0 = passArrayF64ToWasm0(p, wasm.__wbindgen_malloc);
851
+ const len0 = WASM_VECTOR_LEN;
852
+ const ptr1 = passArrayF64ToWasm0(q, wasm.__wbindgen_malloc);
853
+ const len1 = WASM_VECTOR_LEN;
854
+ const ret = wasm.wasmduallyflatmanifold_bregmanDivergence(this.__wbg_ptr, ptr0, len0, ptr1, len1);
855
+ return ret;
856
+ }
857
+ /**
858
+ * Compute KL divergence between two probability distributions
859
+ * @param {Float64Array} p
860
+ * @param {Float64Array} q
861
+ * @returns {number}
862
+ */
863
+ klDivergence(p, q) {
864
+ const ptr0 = passArrayF64ToWasm0(p, wasm.__wbindgen_malloc);
865
+ const len0 = WASM_VECTOR_LEN;
866
+ const ptr1 = passArrayF64ToWasm0(q, wasm.__wbindgen_malloc);
867
+ const len1 = WASM_VECTOR_LEN;
868
+ const ret = wasm.wasmduallyflatmanifold_klDivergence(this.__wbg_ptr, ptr0, len0, ptr1, len1);
869
+ if (ret[2]) {
870
+ throw takeFromExternrefTable0(ret[1]);
871
+ }
872
+ return ret[0];
873
+ }
874
+ /**
875
+ * Compute JS divergence (symmetric version of KL divergence)
876
+ * @param {Float64Array} p
877
+ * @param {Float64Array} q
878
+ * @returns {number}
879
+ */
880
+ jsDivergence(p, q) {
881
+ const ptr0 = passArrayF64ToWasm0(p, wasm.__wbindgen_malloc);
882
+ const len0 = WASM_VECTOR_LEN;
883
+ const ptr1 = passArrayF64ToWasm0(q, wasm.__wbindgen_malloc);
884
+ const len1 = WASM_VECTOR_LEN;
885
+ const ret = wasm.wasmduallyflatmanifold_jsDivergence(this.__wbg_ptr, ptr0, len0, ptr1, len1);
886
+ if (ret[2]) {
887
+ throw takeFromExternrefTable0(ret[1]);
888
+ }
889
+ return ret[0];
890
+ }
891
+ /**
892
+ * Compute Wasserstein-1 distance (Earth Mover's Distance)
893
+ * @param {Float64Array} p
894
+ * @param {Float64Array} q
895
+ * @returns {number}
896
+ */
897
+ wassersteinDistance(p, q) {
898
+ const ptr0 = passArrayF64ToWasm0(p, wasm.__wbindgen_malloc);
899
+ const len0 = WASM_VECTOR_LEN;
900
+ const ptr1 = passArrayF64ToWasm0(q, wasm.__wbindgen_malloc);
901
+ const len1 = WASM_VECTOR_LEN;
902
+ const ret = wasm.wasmduallyflatmanifold_wassersteinDistance(this.__wbg_ptr, ptr0, len0, ptr1, len1);
903
+ if (ret[2]) {
904
+ throw takeFromExternrefTable0(ret[1]);
905
+ }
906
+ return ret[0];
907
+ }
908
+ }
909
+ if (Symbol.dispose) WasmDuallyFlatManifold.prototype[Symbol.dispose] = WasmDuallyFlatManifold.prototype.free;
910
+
911
+ const WasmFisherInformationMatrixFinalization = (typeof FinalizationRegistry === 'undefined')
912
+ ? { register: () => {}, unregister: () => {} }
913
+ : new FinalizationRegistry(ptr => wasm.__wbg_wasmfisherinformationmatrix_free(ptr >>> 0, 1));
914
+ /**
915
+ * WASM wrapper for FisherInformationMatrix
916
+ */
917
+ export class WasmFisherInformationMatrix {
918
+
919
+ static __wrap(ptr) {
920
+ ptr = ptr >>> 0;
921
+ const obj = Object.create(WasmFisherInformationMatrix.prototype);
922
+ obj.__wbg_ptr = ptr;
923
+ WasmFisherInformationMatrixFinalization.register(obj, obj.__wbg_ptr, obj);
924
+ return obj;
925
+ }
926
+
927
+ __destroy_into_raw() {
928
+ const ptr = this.__wbg_ptr;
929
+ this.__wbg_ptr = 0;
930
+ WasmFisherInformationMatrixFinalization.unregister(this);
931
+ return ptr;
932
+ }
933
+
934
+ free() {
935
+ const ptr = this.__destroy_into_raw();
936
+ wasm.__wbg_wasmfisherinformationmatrix_free(ptr, 0);
937
+ }
938
+ /**
939
+ * Get eigenvalues of the Fisher matrix
940
+ * @returns {Float64Array}
941
+ */
942
+ getEigenvalues() {
943
+ const ret = wasm.wasmfisherinformationmatrix_getEigenvalues(this.__wbg_ptr);
944
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
945
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
946
+ return v1;
947
+ }
948
+ /**
949
+ * Check if the matrix is positive definite
950
+ * @returns {boolean}
951
+ */
952
+ isPositiveDefinite() {
953
+ const ret = wasm.wasmfisherinformationmatrix_isPositiveDefinite(this.__wbg_ptr);
954
+ return ret !== 0;
955
+ }
956
+ /**
957
+ * Compute condition number (ratio of largest to smallest eigenvalue)
958
+ * @returns {number}
959
+ */
960
+ conditionNumber() {
961
+ const ret = wasm.wasmfisherinformationmatrix_conditionNumber(this.__wbg_ptr);
962
+ return ret;
963
+ }
964
+ }
965
+ if (Symbol.dispose) WasmFisherInformationMatrix.prototype[Symbol.dispose] = WasmFisherInformationMatrix.prototype.free;
966
+
967
+ const WasmMultiDualNumberFinalization = (typeof FinalizationRegistry === 'undefined')
968
+ ? { register: () => {}, unregister: () => {} }
969
+ : new FinalizationRegistry(ptr => wasm.__wbg_wasmmultidualnumber_free(ptr >>> 0, 1));
970
+ /**
971
+ * WASM wrapper for multi-variable dual numbers
972
+ */
973
+ export class WasmMultiDualNumber {
974
+
975
+ static __wrap(ptr) {
976
+ ptr = ptr >>> 0;
977
+ const obj = Object.create(WasmMultiDualNumber.prototype);
978
+ obj.__wbg_ptr = ptr;
979
+ WasmMultiDualNumberFinalization.register(obj, obj.__wbg_ptr, obj);
980
+ return obj;
981
+ }
982
+
983
+ __destroy_into_raw() {
984
+ const ptr = this.__wbg_ptr;
985
+ this.__wbg_ptr = 0;
986
+ WasmMultiDualNumberFinalization.unregister(this);
987
+ return ptr;
988
+ }
989
+
990
+ free() {
991
+ const ptr = this.__destroy_into_raw();
992
+ wasm.__wbg_wasmmultidualnumber_free(ptr, 0);
993
+ }
994
+ /**
995
+ * Create a new multi-dual number
996
+ * @param {number} real
997
+ * @param {Float64Array} duals
998
+ */
999
+ constructor(real, duals) {
1000
+ const ptr0 = passArrayF64ToWasm0(duals, wasm.__wbindgen_malloc);
1001
+ const len0 = WASM_VECTOR_LEN;
1002
+ const ret = wasm.wasmmultidualnumber_new(real, ptr0, len0);
1003
+ this.__wbg_ptr = ret >>> 0;
1004
+ WasmMultiDualNumberFinalization.register(this, this.__wbg_ptr, this);
1005
+ return this;
1006
+ }
1007
+ /**
1008
+ * Create a variable with derivative 1 at the specified index
1009
+ * @param {number} value
1010
+ * @param {number} num_vars
1011
+ * @param {number} var_index
1012
+ * @returns {WasmMultiDualNumber}
1013
+ */
1014
+ static variable(value, num_vars, var_index) {
1015
+ const ret = wasm.wasmmultidualnumber_variable(value, num_vars, var_index);
1016
+ return WasmMultiDualNumber.__wrap(ret);
92
1017
  }
93
1018
  /**
94
- * Batch geometric product: compute a[i] * b[i] for all i
95
- * @param {Float64Array} a_batch
96
- * @param {Float64Array} b_batch
1019
+ * Create a constant (all derivatives are zero)
1020
+ * @param {number} value
1021
+ * @param {number} num_vars
1022
+ * @returns {WasmMultiDualNumber}
1023
+ */
1024
+ static constant(value, num_vars) {
1025
+ const ret = wasm.wasmmultidualnumber_constant(value, num_vars);
1026
+ return WasmMultiDualNumber.__wrap(ret);
1027
+ }
1028
+ /**
1029
+ * Get the real part (function value)
1030
+ * @returns {number}
1031
+ */
1032
+ getReal() {
1033
+ const ret = wasm.wasmalphaconnection_getAlpha(this.__wbg_ptr);
1034
+ return ret;
1035
+ }
1036
+ /**
1037
+ * Get the gradient (all partial derivatives)
97
1038
  * @returns {Float64Array}
98
1039
  */
99
- static batchGeometricProduct(a_batch, b_batch) {
100
- const ptr0 = passArrayF64ToWasm0(a_batch, wasm.__wbindgen_malloc);
101
- const len0 = WASM_VECTOR_LEN;
102
- const ptr1 = passArrayF64ToWasm0(b_batch, wasm.__wbindgen_malloc);
103
- const len1 = WASM_VECTOR_LEN;
104
- const ret = wasm.batchoperations_batchGeometricProduct(ptr0, len0, ptr1, len1);
105
- if (ret[3]) {
106
- throw takeFromExternrefTable0(ret[2]);
107
- }
108
- var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
1040
+ getGradient() {
1041
+ const ret = wasm.wasmmultidualnumber_getGradient(this.__wbg_ptr);
1042
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
109
1043
  wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
110
- return v3;
1044
+ return v1;
111
1045
  }
112
1046
  /**
113
- * Batch addition
114
- * @param {Float64Array} a_batch
115
- * @param {Float64Array} b_batch
116
- * @returns {Float64Array}
1047
+ * Get a specific partial derivative
1048
+ * @param {number} index
1049
+ * @returns {number}
117
1050
  */
118
- static batchAdd(a_batch, b_batch) {
119
- const ptr0 = passArrayF64ToWasm0(a_batch, wasm.__wbindgen_malloc);
120
- const len0 = WASM_VECTOR_LEN;
121
- const ptr1 = passArrayF64ToWasm0(b_batch, wasm.__wbindgen_malloc);
122
- const len1 = WASM_VECTOR_LEN;
123
- const ret = wasm.batchoperations_batchAdd(ptr0, len0, ptr1, len1);
124
- if (ret[3]) {
125
- throw takeFromExternrefTable0(ret[2]);
1051
+ getPartial(index) {
1052
+ const ret = wasm.wasmmultidualnumber_getPartial(this.__wbg_ptr, index);
1053
+ if (ret[2]) {
1054
+ throw takeFromExternrefTable0(ret[1]);
126
1055
  }
127
- var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
128
- wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
129
- return v3;
1056
+ return ret[0];
1057
+ }
1058
+ /**
1059
+ * Get number of variables
1060
+ * @returns {number}
1061
+ */
1062
+ getNumVars() {
1063
+ const ret = wasm.wasmmultidualnumber_getNumVars(this.__wbg_ptr);
1064
+ return ret >>> 0;
1065
+ }
1066
+ /**
1067
+ * Addition
1068
+ * @param {WasmMultiDualNumber} other
1069
+ * @returns {WasmMultiDualNumber}
1070
+ */
1071
+ add(other) {
1072
+ _assertClass(other, WasmMultiDualNumber);
1073
+ const ret = wasm.wasmmultidualnumber_add(this.__wbg_ptr, other.__wbg_ptr);
1074
+ if (ret[2]) {
1075
+ throw takeFromExternrefTable0(ret[1]);
1076
+ }
1077
+ return WasmMultiDualNumber.__wrap(ret[0]);
1078
+ }
1079
+ /**
1080
+ * Multiplication
1081
+ * @param {WasmMultiDualNumber} other
1082
+ * @returns {WasmMultiDualNumber}
1083
+ */
1084
+ mul(other) {
1085
+ _assertClass(other, WasmMultiDualNumber);
1086
+ const ret = wasm.wasmmultidualnumber_mul(this.__wbg_ptr, other.__wbg_ptr);
1087
+ if (ret[2]) {
1088
+ throw takeFromExternrefTable0(ret[1]);
1089
+ }
1090
+ return WasmMultiDualNumber.__wrap(ret[0]);
1091
+ }
1092
+ /**
1093
+ * Square root
1094
+ * @returns {WasmMultiDualNumber}
1095
+ */
1096
+ sqrt() {
1097
+ const ret = wasm.wasmmultidualnumber_sqrt(this.__wbg_ptr);
1098
+ if (ret[2]) {
1099
+ throw takeFromExternrefTable0(ret[1]);
1100
+ }
1101
+ return WasmMultiDualNumber.__wrap(ret[0]);
130
1102
  }
131
1103
  }
132
- if (Symbol.dispose) BatchOperations.prototype[Symbol.dispose] = BatchOperations.prototype.free;
1104
+ if (Symbol.dispose) WasmMultiDualNumber.prototype[Symbol.dispose] = WasmMultiDualNumber.prototype.free;
133
1105
 
134
1106
  const WasmMultivectorFinalization = (typeof FinalizationRegistry === 'undefined')
135
1107
  ? { register: () => {}, unregister: () => {} }
@@ -433,6 +1405,339 @@ export class WasmRotor {
433
1405
  }
434
1406
  if (Symbol.dispose) WasmRotor.prototype[Symbol.dispose] = WasmRotor.prototype.free;
435
1407
 
1408
+ const WasmTropicalDualCliffordFinalization = (typeof FinalizationRegistry === 'undefined')
1409
+ ? { register: () => {}, unregister: () => {} }
1410
+ : new FinalizationRegistry(ptr => wasm.__wbg_wasmtropicaldualclifford_free(ptr >>> 0, 1));
1411
+ /**
1412
+ * WASM wrapper for TropicalDualClifford fusion system
1413
+ */
1414
+ export class WasmTropicalDualClifford {
1415
+
1416
+ static __wrap(ptr) {
1417
+ ptr = ptr >>> 0;
1418
+ const obj = Object.create(WasmTropicalDualClifford.prototype);
1419
+ obj.__wbg_ptr = ptr;
1420
+ WasmTropicalDualCliffordFinalization.register(obj, obj.__wbg_ptr, obj);
1421
+ return obj;
1422
+ }
1423
+
1424
+ __destroy_into_raw() {
1425
+ const ptr = this.__wbg_ptr;
1426
+ this.__wbg_ptr = 0;
1427
+ WasmTropicalDualCliffordFinalization.unregister(this);
1428
+ return ptr;
1429
+ }
1430
+
1431
+ free() {
1432
+ const ptr = this.__destroy_into_raw();
1433
+ wasm.__wbg_wasmtropicaldualclifford_free(ptr, 0);
1434
+ }
1435
+ /**
1436
+ * Create a zero TDC object
1437
+ */
1438
+ constructor() {
1439
+ const ret = wasm.wasmtropicaldualclifford_new();
1440
+ this.__wbg_ptr = ret >>> 0;
1441
+ WasmTropicalDualCliffordFinalization.register(this, this.__wbg_ptr, this);
1442
+ return this;
1443
+ }
1444
+ /**
1445
+ * Create from logits (array of log-probabilities)
1446
+ * @param {Float64Array} logits
1447
+ * @returns {WasmTropicalDualClifford}
1448
+ */
1449
+ static fromLogits(logits) {
1450
+ const ptr0 = passArrayF64ToWasm0(logits, wasm.__wbindgen_malloc);
1451
+ const len0 = WASM_VECTOR_LEN;
1452
+ const ret = wasm.wasmtropicaldualclifford_fromLogits(ptr0, len0);
1453
+ return WasmTropicalDualClifford.__wrap(ret);
1454
+ }
1455
+ /**
1456
+ * Create random TDC for testing
1457
+ * @returns {WasmTropicalDualClifford}
1458
+ */
1459
+ static random() {
1460
+ const ret = wasm.wasmtropicaldualclifford_random();
1461
+ return WasmTropicalDualClifford.__wrap(ret);
1462
+ }
1463
+ /**
1464
+ * Create random TDC with specific scale
1465
+ * @param {number} scale
1466
+ * @returns {WasmTropicalDualClifford}
1467
+ */
1468
+ static randomWithScale(scale) {
1469
+ const ret = wasm.wasmtropicaldualclifford_randomWithScale(scale);
1470
+ return WasmTropicalDualClifford.__wrap(ret);
1471
+ }
1472
+ /**
1473
+ * Check if TDC is zero
1474
+ * @returns {boolean}
1475
+ */
1476
+ isZero() {
1477
+ const ret = wasm.wasmtropicaldualclifford_isZero(this.__wbg_ptr);
1478
+ return ret !== 0;
1479
+ }
1480
+ /**
1481
+ * Extract tropical features as array
1482
+ * @returns {Float64Array}
1483
+ */
1484
+ getTropicalFeatures() {
1485
+ const ret = wasm.wasmtropicaldualclifford_getTropicalFeatures(this.__wbg_ptr);
1486
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
1487
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
1488
+ return v1;
1489
+ }
1490
+ /**
1491
+ * Extract dual features as array of real parts
1492
+ * @returns {Float64Array}
1493
+ */
1494
+ getDualReals() {
1495
+ const ret = wasm.wasmtropicaldualclifford_getDualReals(this.__wbg_ptr);
1496
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
1497
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
1498
+ return v1;
1499
+ }
1500
+ /**
1501
+ * Extract dual features as array of dual parts (derivatives)
1502
+ * @returns {Float64Array}
1503
+ */
1504
+ getDualDerivatives() {
1505
+ const ret = wasm.wasmtropicaldualclifford_getDualDerivatives(this.__wbg_ptr);
1506
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
1507
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
1508
+ return v1;
1509
+ }
1510
+ /**
1511
+ * Get Clifford coefficients
1512
+ * @returns {Float64Array}
1513
+ */
1514
+ getCliffordCoefficients() {
1515
+ const ret = wasm.wasmtropicaldualclifford_getCliffordCoefficients(this.__wbg_ptr);
1516
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
1517
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
1518
+ return v1;
1519
+ }
1520
+ /**
1521
+ * Add two TDC objects
1522
+ * @param {WasmTropicalDualClifford} other
1523
+ * @returns {WasmTropicalDualClifford}
1524
+ */
1525
+ add(other) {
1526
+ _assertClass(other, WasmTropicalDualClifford);
1527
+ const ret = wasm.wasmtropicaldualclifford_add(this.__wbg_ptr, other.__wbg_ptr);
1528
+ return WasmTropicalDualClifford.__wrap(ret);
1529
+ }
1530
+ /**
1531
+ * Scale TDC object
1532
+ * @param {number} factor
1533
+ * @returns {WasmTropicalDualClifford}
1534
+ */
1535
+ scale(factor) {
1536
+ const ret = wasm.wasmtropicaldualclifford_scale(this.__wbg_ptr, factor);
1537
+ return WasmTropicalDualClifford.__wrap(ret);
1538
+ }
1539
+ /**
1540
+ * Compute fusion norm (combined measure across all systems)
1541
+ * @returns {number}
1542
+ */
1543
+ fusionNorm() {
1544
+ const ret = wasm.wasmtropicaldualclifford_fusionNorm(this.__wbg_ptr);
1545
+ return ret;
1546
+ }
1547
+ /**
1548
+ * Perform tropical attention operation
1549
+ * @param {Float64Array} keys
1550
+ * @param {Float64Array} values
1551
+ * @returns {Float64Array}
1552
+ */
1553
+ tropicalAttention(keys, values) {
1554
+ const ptr0 = passArrayF64ToWasm0(keys, wasm.__wbindgen_malloc);
1555
+ const len0 = WASM_VECTOR_LEN;
1556
+ const ptr1 = passArrayF64ToWasm0(values, wasm.__wbindgen_malloc);
1557
+ const len1 = WASM_VECTOR_LEN;
1558
+ const ret = wasm.wasmtropicaldualclifford_tropicalAttention(this.__wbg_ptr, ptr0, len0, ptr1, len1);
1559
+ if (ret[3]) {
1560
+ throw takeFromExternrefTable0(ret[2]);
1561
+ }
1562
+ var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
1563
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
1564
+ return v3;
1565
+ }
1566
+ /**
1567
+ * Extract geometric features using Clifford operations
1568
+ * @returns {Float64Array}
1569
+ */
1570
+ extractGeometricFeatures() {
1571
+ const ret = wasm.wasmtropicaldualclifford_extractGeometricFeatures(this.__wbg_ptr);
1572
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
1573
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
1574
+ return v1;
1575
+ }
1576
+ }
1577
+ if (Symbol.dispose) WasmTropicalDualClifford.prototype[Symbol.dispose] = WasmTropicalDualClifford.prototype.free;
1578
+
1579
+ const WasmTropicalNumberFinalization = (typeof FinalizationRegistry === 'undefined')
1580
+ ? { register: () => {}, unregister: () => {} }
1581
+ : new FinalizationRegistry(ptr => wasm.__wbg_wasmtropicalnumber_free(ptr >>> 0, 1));
1582
+ /**
1583
+ * WASM wrapper for TropicalNumber
1584
+ */
1585
+ export class WasmTropicalNumber {
1586
+
1587
+ static __wrap(ptr) {
1588
+ ptr = ptr >>> 0;
1589
+ const obj = Object.create(WasmTropicalNumber.prototype);
1590
+ obj.__wbg_ptr = ptr;
1591
+ WasmTropicalNumberFinalization.register(obj, obj.__wbg_ptr, obj);
1592
+ return obj;
1593
+ }
1594
+
1595
+ __destroy_into_raw() {
1596
+ const ptr = this.__wbg_ptr;
1597
+ this.__wbg_ptr = 0;
1598
+ WasmTropicalNumberFinalization.unregister(this);
1599
+ return ptr;
1600
+ }
1601
+
1602
+ free() {
1603
+ const ptr = this.__destroy_into_raw();
1604
+ wasm.__wbg_wasmtropicalnumber_free(ptr, 0);
1605
+ }
1606
+ /**
1607
+ * Create a new tropical number from a regular number
1608
+ * @param {number} value
1609
+ */
1610
+ constructor(value) {
1611
+ const ret = wasm.wasmtropicalnumber_fromLogProb(value);
1612
+ this.__wbg_ptr = ret >>> 0;
1613
+ WasmTropicalNumberFinalization.register(this, this.__wbg_ptr, this);
1614
+ return this;
1615
+ }
1616
+ /**
1617
+ * Create tropical zero (negative infinity)
1618
+ * @returns {WasmTropicalNumber}
1619
+ */
1620
+ static zero() {
1621
+ const ret = wasm.wasmtropicalnumber_zero();
1622
+ return WasmTropicalNumber.__wrap(ret);
1623
+ }
1624
+ /**
1625
+ * Create tropical one (regular zero)
1626
+ * @returns {WasmTropicalNumber}
1627
+ */
1628
+ static one() {
1629
+ const ret = wasm.wasmtropicalnumber_one();
1630
+ return WasmTropicalNumber.__wrap(ret);
1631
+ }
1632
+ /**
1633
+ * Create from log probability
1634
+ * @param {number} log_p
1635
+ * @returns {WasmTropicalNumber}
1636
+ */
1637
+ static fromLogProb(log_p) {
1638
+ const ret = wasm.wasmtropicalnumber_fromLogProb(log_p);
1639
+ return WasmTropicalNumber.__wrap(ret);
1640
+ }
1641
+ /**
1642
+ * Get the underlying value
1643
+ * @returns {number}
1644
+ */
1645
+ getValue() {
1646
+ const ret = wasm.wasmalphaconnection_getAlpha(this.__wbg_ptr);
1647
+ return ret;
1648
+ }
1649
+ /**
1650
+ * Convert to probability (via exp)
1651
+ * @returns {number}
1652
+ */
1653
+ toProb() {
1654
+ const ret = wasm.wasmtropicalnumber_toProb(this.__wbg_ptr);
1655
+ return ret;
1656
+ }
1657
+ /**
1658
+ * Check if this is tropical zero (negative infinity)
1659
+ * @returns {boolean}
1660
+ */
1661
+ isZero() {
1662
+ const ret = wasm.wasmtropicalnumber_isZero(this.__wbg_ptr);
1663
+ return ret !== 0;
1664
+ }
1665
+ /**
1666
+ * Check if this is tropical one (zero)
1667
+ * @returns {boolean}
1668
+ */
1669
+ isOne() {
1670
+ const ret = wasm.wasmtropicalnumber_isOne(this.__wbg_ptr);
1671
+ return ret !== 0;
1672
+ }
1673
+ /**
1674
+ * Check if this is infinite
1675
+ * @returns {boolean}
1676
+ */
1677
+ isInfinity() {
1678
+ const ret = wasm.wasmtropicalnumber_isInfinity(this.__wbg_ptr);
1679
+ return ret !== 0;
1680
+ }
1681
+ /**
1682
+ * Tropical addition (max operation)
1683
+ * @param {WasmTropicalNumber} other
1684
+ * @returns {WasmTropicalNumber}
1685
+ */
1686
+ tropicalAdd(other) {
1687
+ _assertClass(other, WasmTropicalNumber);
1688
+ const ret = wasm.wasmtropicalnumber_add(this.__wbg_ptr, other.__wbg_ptr);
1689
+ return WasmTropicalNumber.__wrap(ret);
1690
+ }
1691
+ /**
1692
+ * Tropical multiplication (addition)
1693
+ * @param {WasmTropicalNumber} other
1694
+ * @returns {WasmTropicalNumber}
1695
+ */
1696
+ tropicalMul(other) {
1697
+ _assertClass(other, WasmTropicalNumber);
1698
+ const ret = wasm.wasmtropicalnumber_mul(this.__wbg_ptr, other.__wbg_ptr);
1699
+ return WasmTropicalNumber.__wrap(ret);
1700
+ }
1701
+ /**
1702
+ * Tropical power (scalar multiplication)
1703
+ * @param {number} n
1704
+ * @returns {WasmTropicalNumber}
1705
+ */
1706
+ tropicalPow(n) {
1707
+ const ret = wasm.wasmtropicalnumber_tropicalPow(this.__wbg_ptr, n);
1708
+ return WasmTropicalNumber.__wrap(ret);
1709
+ }
1710
+ /**
1711
+ * Standard addition (for convenience)
1712
+ * @param {WasmTropicalNumber} other
1713
+ * @returns {WasmTropicalNumber}
1714
+ */
1715
+ add(other) {
1716
+ _assertClass(other, WasmTropicalNumber);
1717
+ const ret = wasm.wasmtropicalnumber_add(this.__wbg_ptr, other.__wbg_ptr);
1718
+ return WasmTropicalNumber.__wrap(ret);
1719
+ }
1720
+ /**
1721
+ * Standard multiplication (for convenience)
1722
+ * @param {WasmTropicalNumber} other
1723
+ * @returns {WasmTropicalNumber}
1724
+ */
1725
+ mul(other) {
1726
+ _assertClass(other, WasmTropicalNumber);
1727
+ const ret = wasm.wasmtropicalnumber_mul(this.__wbg_ptr, other.__wbg_ptr);
1728
+ return WasmTropicalNumber.__wrap(ret);
1729
+ }
1730
+ /**
1731
+ * Negation
1732
+ * @returns {WasmTropicalNumber}
1733
+ */
1734
+ neg() {
1735
+ const ret = wasm.wasmtropicalnumber_neg(this.__wbg_ptr);
1736
+ return WasmTropicalNumber.__wrap(ret);
1737
+ }
1738
+ }
1739
+ if (Symbol.dispose) WasmTropicalNumber.prototype[Symbol.dispose] = WasmTropicalNumber.prototype.free;
1740
+
436
1741
  const EXPECTED_RESPONSE_TYPES = new Set(['basic', 'cors', 'default']);
437
1742
 
438
1743
  async function __wbg_load(module, imports) {
@@ -471,9 +1776,27 @@ async function __wbg_load(module, imports) {
471
1776
  function __wbg_get_imports() {
472
1777
  const imports = {};
473
1778
  imports.wbg = {};
474
- imports.wbg.__wbg_log_21b8c47c8527c444 = function(arg0, arg1) {
1779
+ imports.wbg.__wbg_apply_dc50eb58583d2a57 = function() { return handleError(function (arg0, arg1, arg2) {
1780
+ const ret = arg0.apply(arg1, arg2);
1781
+ return ret;
1782
+ }, arguments) };
1783
+ imports.wbg.__wbg_log_041c6d6bb408830f = function(arg0, arg1) {
475
1784
  console.log(getStringFromWasm0(arg0, arg1));
476
1785
  };
1786
+ imports.wbg.__wbg_new_1f3a344cf3123716 = function() {
1787
+ const ret = new Array();
1788
+ return ret;
1789
+ };
1790
+ imports.wbg.__wbg_push_330b2eb93e4e1212 = function(arg0, arg1) {
1791
+ const ret = arg0.push(arg1);
1792
+ return ret;
1793
+ };
1794
+ imports.wbg.__wbg_wbindgennumberget_f74b4c7525ac05cb = function(arg0, arg1) {
1795
+ const obj = arg1;
1796
+ const ret = typeof(obj) === 'number' ? obj : undefined;
1797
+ getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
1798
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
1799
+ };
477
1800
  imports.wbg.__wbg_wbindgenthrow_451ec1a8469d7eb6 = function(arg0, arg1) {
478
1801
  throw new Error(getStringFromWasm0(arg0, arg1));
479
1802
  };
@@ -482,8 +1805,13 @@ function __wbg_get_imports() {
482
1805
  const ret = getStringFromWasm0(arg0, arg1);
483
1806
  return ret;
484
1807
  };
1808
+ imports.wbg.__wbindgen_cast_d6cd19b81560fd6e = function(arg0) {
1809
+ // Cast intrinsic for `F64 -> Externref`.
1810
+ const ret = arg0;
1811
+ return ret;
1812
+ };
485
1813
  imports.wbg.__wbindgen_init_externref_table = function() {
486
- const table = wasm.__wbindgen_export_0;
1814
+ const table = wasm.__wbindgen_export_2;
487
1815
  const offset = table.grow(4);
488
1816
  table.set(0, undefined);
489
1817
  table.set(offset + 0, undefined);
@@ -503,6 +1831,7 @@ function __wbg_init_memory(imports, memory) {
503
1831
  function __wbg_finalize_init(instance, module) {
504
1832
  wasm = instance.exports;
505
1833
  __wbg_init.__wbindgen_wasm_module = module;
1834
+ cachedDataViewMemory0 = null;
506
1835
  cachedFloat64ArrayMemory0 = null;
507
1836
  cachedUint8ArrayMemory0 = null;
508
1837