@digitaldefiance/node-accelerate 1.0.7 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1271 -165
- package/accelerate.cc +1346 -0
- package/examples/advanced-functions.js +0 -0
- package/examples/data-processing.js +123 -0
- package/examples/mathematical-functions.js +101 -0
- package/examples/ml-pipeline.js +317 -0
- package/examples/signal-processing-advanced.js +98 -0
- package/examples/statistical-operations.js +44 -0
- package/examples/trigonometric-functions.js +52 -0
- package/index.d.ts +720 -0
- package/index.js +636 -0
- package/package.json +12 -3
package/index.js
CHANGED
|
@@ -351,14 +351,589 @@ function rms(a) {
|
|
|
351
351
|
return accelerate.rms(a);
|
|
352
352
|
}
|
|
353
353
|
|
|
354
|
+
/**
|
|
355
|
+
* Variance of vector elements
|
|
356
|
+
* @param {Float64Array} a - Input vector
|
|
357
|
+
* @returns {number} Variance
|
|
358
|
+
*/
|
|
359
|
+
function variance(a) {
|
|
360
|
+
return accelerate.variance(a);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Standard deviation of vector elements
|
|
365
|
+
* @param {Float64Array} a - Input vector
|
|
366
|
+
* @returns {number} Standard deviation
|
|
367
|
+
*/
|
|
368
|
+
function stddev(a) {
|
|
369
|
+
return accelerate.stddev(a);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Min and max of vector elements
|
|
374
|
+
* @param {Float64Array} a - Input vector
|
|
375
|
+
* @returns {{min: number, max: number}} Object with min and max
|
|
376
|
+
*/
|
|
377
|
+
function minmax(a) {
|
|
378
|
+
return accelerate.minmax(a);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Vector sine: b = sin(a)
|
|
383
|
+
* @param {Float64Array} a - Input vector
|
|
384
|
+
* @param {Float64Array} b - Output vector
|
|
385
|
+
* @returns {Float64Array} b
|
|
386
|
+
*/
|
|
387
|
+
function vsin(a, b) {
|
|
388
|
+
return accelerate.vsin(a, b);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Vector cosine: b = cos(a)
|
|
393
|
+
* @param {Float64Array} a - Input vector
|
|
394
|
+
* @param {Float64Array} b - Output vector
|
|
395
|
+
* @returns {Float64Array} b
|
|
396
|
+
*/
|
|
397
|
+
function vcos(a, b) {
|
|
398
|
+
return accelerate.vcos(a, b);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Vector tangent: b = tan(a)
|
|
403
|
+
* @param {Float64Array} a - Input vector
|
|
404
|
+
* @param {Float64Array} b - Output vector
|
|
405
|
+
* @returns {Float64Array} b
|
|
406
|
+
*/
|
|
407
|
+
function vtan(a, b) {
|
|
408
|
+
return accelerate.vtan(a, b);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Vector exponential: b = exp(a)
|
|
413
|
+
* @param {Float64Array} a - Input vector
|
|
414
|
+
* @param {Float64Array} b - Output vector
|
|
415
|
+
* @returns {Float64Array} b
|
|
416
|
+
*/
|
|
417
|
+
function vexp(a, b) {
|
|
418
|
+
return accelerate.vexp(a, b);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Vector natural logarithm: b = log(a)
|
|
423
|
+
* @param {Float64Array} a - Input vector
|
|
424
|
+
* @param {Float64Array} b - Output vector
|
|
425
|
+
* @returns {Float64Array} b
|
|
426
|
+
*/
|
|
427
|
+
function vlog(a, b) {
|
|
428
|
+
return accelerate.vlog(a, b);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Vector base-10 logarithm: b = log10(a)
|
|
433
|
+
* @param {Float64Array} a - Input vector
|
|
434
|
+
* @param {Float64Array} b - Output vector
|
|
435
|
+
* @returns {Float64Array} b
|
|
436
|
+
*/
|
|
437
|
+
function vlog10(a, b) {
|
|
438
|
+
return accelerate.vlog10(a, b);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* Vector power: c = a^b (element-wise)
|
|
443
|
+
* @param {Float64Array} a - Base vector
|
|
444
|
+
* @param {Float64Array} b - Exponent vector
|
|
445
|
+
* @param {Float64Array} c - Output vector
|
|
446
|
+
* @returns {Float64Array} c
|
|
447
|
+
*/
|
|
448
|
+
function vpow(a, b, c) {
|
|
449
|
+
return accelerate.vpow(a, b, c);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Vector clip: b = clip(a, min, max)
|
|
454
|
+
* @param {Float64Array} a - Input vector
|
|
455
|
+
* @param {Float64Array} b - Output vector
|
|
456
|
+
* @param {number} min - Minimum value
|
|
457
|
+
* @param {number} max - Maximum value
|
|
458
|
+
* @returns {Float64Array} b
|
|
459
|
+
*/
|
|
460
|
+
function vclip(a, b, min, max) {
|
|
461
|
+
return accelerate.vclip(a, b, min, max);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Vector threshold: b = a where a > threshold, else 0
|
|
466
|
+
* @param {Float64Array} a - Input vector
|
|
467
|
+
* @param {Float64Array} b - Output vector
|
|
468
|
+
* @param {number} threshold - Threshold value
|
|
469
|
+
* @returns {Float64Array} b
|
|
470
|
+
*/
|
|
471
|
+
function vthreshold(a, b, threshold) {
|
|
472
|
+
return accelerate.vthreshold(a, b, threshold);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* Convolution: result = signal * kernel
|
|
477
|
+
* @param {Float64Array} signal - Input signal
|
|
478
|
+
* @param {Float64Array} kernel - Convolution kernel
|
|
479
|
+
* @param {Float64Array} result - Output (length = signal.length - kernel.length + 1)
|
|
480
|
+
* @returns {Float64Array} result
|
|
481
|
+
*/
|
|
482
|
+
function conv(signal, kernel, result) {
|
|
483
|
+
return accelerate.conv(signal, kernel, result);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Cross-correlation: result = correlate(a, b)
|
|
488
|
+
* @param {Float64Array} a - First signal
|
|
489
|
+
* @param {Float64Array} b - Second signal
|
|
490
|
+
* @param {Float64Array} result - Output (length = a.length + b.length - 1)
|
|
491
|
+
* @returns {Float64Array} result
|
|
492
|
+
*/
|
|
493
|
+
function xcorr(a, b, result) {
|
|
494
|
+
return accelerate.xcorr(a, b, result);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* Generate Hamming window
|
|
499
|
+
* @param {number} length - Window length
|
|
500
|
+
* @returns {Float64Array} Window coefficients
|
|
501
|
+
*/
|
|
502
|
+
function hamming(length) {
|
|
503
|
+
return accelerate.hamming(length);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* Generate Hanning window
|
|
508
|
+
* @param {number} length - Window length
|
|
509
|
+
* @returns {Float64Array} Window coefficients
|
|
510
|
+
*/
|
|
511
|
+
function hanning(length) {
|
|
512
|
+
return accelerate.hanning(length);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* Generate Blackman window
|
|
517
|
+
* @param {number} length - Window length
|
|
518
|
+
* @returns {Float64Array} Window coefficients
|
|
519
|
+
*/
|
|
520
|
+
function blackman(length) {
|
|
521
|
+
return accelerate.blackman(length);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Matrix transpose: B = A^T
|
|
526
|
+
* @param {Float64Array} A - Input matrix (rows × cols, row-major)
|
|
527
|
+
* @param {Float64Array} B - Output matrix (cols × rows, row-major)
|
|
528
|
+
* @param {number} rows - Number of rows in A
|
|
529
|
+
* @param {number} cols - Number of columns in A
|
|
530
|
+
* @returns {Float64Array} B
|
|
531
|
+
*/
|
|
532
|
+
function transpose(A, B, rows, cols) {
|
|
533
|
+
return accelerate.transpose(A, B, rows, cols);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Inverse Fast Fourier Transform
|
|
538
|
+
* @param {Float64Array} real - Real part of frequency domain
|
|
539
|
+
* @param {Float64Array} imag - Imaginary part of frequency domain
|
|
540
|
+
* @returns {Float64Array} Time domain signal
|
|
541
|
+
*/
|
|
542
|
+
function ifft(real, imag) {
|
|
543
|
+
if (!(real instanceof Float64Array) || !(imag instanceof Float64Array)) {
|
|
544
|
+
throw new TypeError('Arguments must be Float64Arrays');
|
|
545
|
+
}
|
|
546
|
+
if (real.length !== imag.length) {
|
|
547
|
+
throw new RangeError('Real and imaginary arrays must have same length');
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
return accelerate.ifft(real, imag);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Linear interpolation
|
|
555
|
+
* @param {Float64Array} x - X coordinates of data points
|
|
556
|
+
* @param {Float64Array} y - Y coordinates of data points
|
|
557
|
+
* @param {Float64Array} xi - X coordinates to interpolate at
|
|
558
|
+
* @param {Float64Array} yi - Output interpolated Y values
|
|
559
|
+
* @returns {Float64Array} yi
|
|
560
|
+
*/
|
|
561
|
+
function interp1d(x, y, xi, yi) {
|
|
562
|
+
return accelerate.interp1d(x, y, xi, yi);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/**
|
|
566
|
+
* Vector reverse: b = reverse(a)
|
|
567
|
+
* @param {Float64Array} a - Input vector
|
|
568
|
+
* @param {Float64Array} b - Output vector
|
|
569
|
+
* @returns {Float64Array} b
|
|
570
|
+
*/
|
|
571
|
+
function vreverse(a, b) {
|
|
572
|
+
return accelerate.vreverse(a, b);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* Vector negate: b = -a
|
|
577
|
+
* @param {Float64Array} a - Input vector
|
|
578
|
+
* @param {Float64Array} b - Output vector
|
|
579
|
+
* @returns {Float64Array} b
|
|
580
|
+
*/
|
|
581
|
+
function vneg(a, b) {
|
|
582
|
+
return accelerate.vneg(a, b);
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
/**
|
|
586
|
+
* Sum of squares: sum(a[i]^2)
|
|
587
|
+
* @param {Float64Array} a - Input vector
|
|
588
|
+
* @returns {number} Sum of squares
|
|
589
|
+
*/
|
|
590
|
+
function sumOfSquares(a) {
|
|
591
|
+
return accelerate.sumOfSquares(a);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* Mean magnitude: mean(|a[i]|)
|
|
596
|
+
* @param {Float64Array} a - Input vector
|
|
597
|
+
* @returns {number} Mean magnitude
|
|
598
|
+
*/
|
|
599
|
+
function meanMagnitude(a) {
|
|
600
|
+
return accelerate.meanMagnitude(a);
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/**
|
|
604
|
+
* Mean square: mean(a[i]^2)
|
|
605
|
+
* @param {Float64Array} a - Input vector
|
|
606
|
+
* @returns {number} Mean square
|
|
607
|
+
*/
|
|
608
|
+
function meanSquare(a) {
|
|
609
|
+
return accelerate.meanSquare(a);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
// ============================================================================
|
|
613
|
+
// ADDITIONAL BLAS OPERATIONS
|
|
614
|
+
// ============================================================================
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
* Vector copy: y = x
|
|
618
|
+
* @param {Float64Array} x - Source vector
|
|
619
|
+
* @param {Float64Array} y - Destination vector
|
|
620
|
+
* @returns {Float64Array} y
|
|
621
|
+
*/
|
|
622
|
+
function copy(x, y) {
|
|
623
|
+
return accelerate.copy(x, y);
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/**
|
|
627
|
+
* Vector swap: exchange x and y
|
|
628
|
+
* @param {Float64Array} x - First vector
|
|
629
|
+
* @param {Float64Array} y - Second vector
|
|
630
|
+
* @returns {Float64Array} x
|
|
631
|
+
*/
|
|
632
|
+
function swap(x, y) {
|
|
633
|
+
return accelerate.swap(x, y);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
/**
|
|
637
|
+
* Vector norm (L2 norm / Euclidean length): ||x||
|
|
638
|
+
* @param {Float64Array} x - Input vector
|
|
639
|
+
* @returns {number} L2 norm
|
|
640
|
+
*/
|
|
641
|
+
function norm(x) {
|
|
642
|
+
return accelerate.norm(x);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/**
|
|
646
|
+
* Sum of absolute values: sum(|x[i]|)
|
|
647
|
+
* @param {Float64Array} x - Input vector
|
|
648
|
+
* @returns {number} Sum of absolute values
|
|
649
|
+
*/
|
|
650
|
+
function abssum(x) {
|
|
651
|
+
return accelerate.abssum(x);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/**
|
|
655
|
+
* Index of maximum absolute value
|
|
656
|
+
* @param {Float64Array} x - Input vector
|
|
657
|
+
* @returns {number} Index of element with maximum absolute value
|
|
658
|
+
*/
|
|
659
|
+
function maxAbsIndex(x) {
|
|
660
|
+
return accelerate.maxAbsIndex(x);
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
/**
|
|
664
|
+
* Apply Givens rotation
|
|
665
|
+
* @param {Float64Array} x - First vector
|
|
666
|
+
* @param {Float64Array} y - Second vector
|
|
667
|
+
* @param {number} c - Cosine of rotation angle
|
|
668
|
+
* @param {number} s - Sine of rotation angle
|
|
669
|
+
* @returns {Float64Array} x
|
|
670
|
+
*/
|
|
671
|
+
function rot(x, y, c, s) {
|
|
672
|
+
return accelerate.rot(x, y, c, s);
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
// ============================================================================
|
|
676
|
+
// ADDITIONAL vDSP OPERATIONS
|
|
677
|
+
// ============================================================================
|
|
678
|
+
|
|
679
|
+
/**
|
|
680
|
+
* Fill vector with scalar value
|
|
681
|
+
* @param {number} scalar - Value to fill with
|
|
682
|
+
* @param {Float64Array} vec - Output vector
|
|
683
|
+
* @returns {Float64Array} vec
|
|
684
|
+
*/
|
|
685
|
+
function vfill(scalar, vec) {
|
|
686
|
+
return accelerate.vfill(scalar, vec);
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
/**
|
|
690
|
+
* Generate linear ramp: vec[i] = start + i * step
|
|
691
|
+
* @param {number} start - Starting value
|
|
692
|
+
* @param {number} step - Step size
|
|
693
|
+
* @param {Float64Array} vec - Output vector
|
|
694
|
+
* @returns {Float64Array} vec
|
|
695
|
+
*/
|
|
696
|
+
function vramp(start, step, vec) {
|
|
697
|
+
return accelerate.vramp(start, step, vec);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
/**
|
|
701
|
+
* Add scalar to vector: c = a + scalar
|
|
702
|
+
* @param {Float64Array} a - Input vector
|
|
703
|
+
* @param {number} scalar - Scalar to add
|
|
704
|
+
* @param {Float64Array} c - Output vector
|
|
705
|
+
* @returns {Float64Array} c
|
|
706
|
+
*/
|
|
707
|
+
function vaddScalar(a, scalar, c) {
|
|
708
|
+
return accelerate.vaddScalar(a, scalar, c);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
/**
|
|
712
|
+
* Multiply and add: d = (a * b) + c
|
|
713
|
+
* @param {Float64Array} a - First vector
|
|
714
|
+
* @param {Float64Array} b - Second vector
|
|
715
|
+
* @param {Float64Array} c - Third vector
|
|
716
|
+
* @param {Float64Array} d - Output vector
|
|
717
|
+
* @returns {Float64Array} d
|
|
718
|
+
*/
|
|
719
|
+
function vma(a, b, c, d) {
|
|
720
|
+
return accelerate.vma(a, b, c, d);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
/**
|
|
724
|
+
* Multiply and scalar add: d = (a * b) + c (scalar)
|
|
725
|
+
* @param {Float64Array} a - First vector
|
|
726
|
+
* @param {Float64Array} b - Second vector
|
|
727
|
+
* @param {number} c - Scalar to add
|
|
728
|
+
* @param {Float64Array} d - Output vector
|
|
729
|
+
* @returns {Float64Array} d
|
|
730
|
+
*/
|
|
731
|
+
function vmsa(a, b, c, d) {
|
|
732
|
+
return accelerate.vmsa(a, b, c, d);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* Linear interpolation between vectors: c = a + t * (b - a)
|
|
737
|
+
* @param {Float64Array} a - Start vector
|
|
738
|
+
* @param {Float64Array} b - End vector
|
|
739
|
+
* @param {number} t - Interpolation parameter (0 to 1)
|
|
740
|
+
* @param {Float64Array} c - Output vector
|
|
741
|
+
* @returns {Float64Array} c
|
|
742
|
+
*/
|
|
743
|
+
function vlerp(a, b, t, c) {
|
|
744
|
+
return accelerate.vlerp(a, b, t, c);
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
/**
|
|
748
|
+
* Clear vector (set to zero)
|
|
749
|
+
* @param {Float64Array} vec - Vector to clear
|
|
750
|
+
* @returns {Float64Array} vec
|
|
751
|
+
*/
|
|
752
|
+
function vclear(vec) {
|
|
753
|
+
return accelerate.vclear(vec);
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
/**
|
|
757
|
+
* Limit vector values (saturate): c = limit(a, low, high)
|
|
758
|
+
* @param {Float64Array} a - Input vector
|
|
759
|
+
* @param {number} low - Lower limit
|
|
760
|
+
* @param {number} high - Upper limit
|
|
761
|
+
* @param {Float64Array} c - Output vector
|
|
762
|
+
* @returns {Float64Array} c
|
|
763
|
+
*/
|
|
764
|
+
function vlimit(a, low, high, c) {
|
|
765
|
+
return accelerate.vlimit(a, low, high, c);
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
/**
|
|
769
|
+
* Maximum magnitude in vector: max(|a[i]|)
|
|
770
|
+
* @param {Float64Array} a - Input vector
|
|
771
|
+
* @returns {number} Maximum magnitude
|
|
772
|
+
*/
|
|
773
|
+
function maxMagnitude(a) {
|
|
774
|
+
return accelerate.maxMagnitude(a);
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
/**
|
|
778
|
+
* Minimum magnitude in vector: min(|a[i]|)
|
|
779
|
+
* @param {Float64Array} a - Input vector
|
|
780
|
+
* @returns {number} Minimum magnitude
|
|
781
|
+
*/
|
|
782
|
+
function minMagnitude(a) {
|
|
783
|
+
return accelerate.minMagnitude(a);
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
// ============================================================================
|
|
787
|
+
// MORE MATH FUNCTIONS
|
|
788
|
+
// ============================================================================
|
|
789
|
+
|
|
790
|
+
/**
|
|
791
|
+
* Reciprocal: b = 1/a
|
|
792
|
+
* @param {Float64Array} a - Input vector
|
|
793
|
+
* @param {Float64Array} b - Output vector
|
|
794
|
+
* @returns {Float64Array} b
|
|
795
|
+
*/
|
|
796
|
+
function vreciprocal(a, b) {
|
|
797
|
+
return accelerate.vreciprocal(a, b);
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
/**
|
|
801
|
+
* Inverse square root: b = 1/sqrt(a)
|
|
802
|
+
* @param {Float64Array} a - Input vector
|
|
803
|
+
* @param {Float64Array} b - Output vector
|
|
804
|
+
* @returns {Float64Array} b
|
|
805
|
+
*/
|
|
806
|
+
function vrsqrt(a, b) {
|
|
807
|
+
return accelerate.vrsqrt(a, b);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
/**
|
|
811
|
+
* Hyperbolic sine: b = sinh(a)
|
|
812
|
+
* @param {Float64Array} a - Input vector
|
|
813
|
+
* @param {Float64Array} b - Output vector
|
|
814
|
+
* @returns {Float64Array} b
|
|
815
|
+
*/
|
|
816
|
+
function vsinh(a, b) {
|
|
817
|
+
return accelerate.vsinh(a, b);
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
/**
|
|
821
|
+
* Hyperbolic cosine: b = cosh(a)
|
|
822
|
+
* @param {Float64Array} a - Input vector
|
|
823
|
+
* @param {Float64Array} b - Output vector
|
|
824
|
+
* @returns {Float64Array} b
|
|
825
|
+
*/
|
|
826
|
+
function vcosh(a, b) {
|
|
827
|
+
return accelerate.vcosh(a, b);
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
/**
|
|
831
|
+
* Hyperbolic tangent: b = tanh(a)
|
|
832
|
+
* @param {Float64Array} a - Input vector
|
|
833
|
+
* @param {Float64Array} b - Output vector
|
|
834
|
+
* @returns {Float64Array} b
|
|
835
|
+
*/
|
|
836
|
+
function vtanh(a, b) {
|
|
837
|
+
return accelerate.vtanh(a, b);
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
/**
|
|
841
|
+
* Inverse sine: b = asin(a)
|
|
842
|
+
* @param {Float64Array} a - Input vector
|
|
843
|
+
* @param {Float64Array} b - Output vector
|
|
844
|
+
* @returns {Float64Array} b
|
|
845
|
+
*/
|
|
846
|
+
function vasin(a, b) {
|
|
847
|
+
return accelerate.vasin(a, b);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
/**
|
|
851
|
+
* Inverse cosine: b = acos(a)
|
|
852
|
+
* @param {Float64Array} a - Input vector
|
|
853
|
+
* @param {Float64Array} b - Output vector
|
|
854
|
+
* @returns {Float64Array} b
|
|
855
|
+
*/
|
|
856
|
+
function vacos(a, b) {
|
|
857
|
+
return accelerate.vacos(a, b);
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
/**
|
|
861
|
+
* Inverse tangent: b = atan(a)
|
|
862
|
+
* @param {Float64Array} a - Input vector
|
|
863
|
+
* @param {Float64Array} b - Output vector
|
|
864
|
+
* @returns {Float64Array} b
|
|
865
|
+
*/
|
|
866
|
+
function vatan(a, b) {
|
|
867
|
+
return accelerate.vatan(a, b);
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
/**
|
|
871
|
+
* Two-argument inverse tangent: c = atan2(a, b)
|
|
872
|
+
* @param {Float64Array} a - Y coordinates
|
|
873
|
+
* @param {Float64Array} b - X coordinates
|
|
874
|
+
* @param {Float64Array} c - Output vector (angles)
|
|
875
|
+
* @returns {Float64Array} c
|
|
876
|
+
*/
|
|
877
|
+
function vatan2(a, b, c) {
|
|
878
|
+
return accelerate.vatan2(a, b, c);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
/**
|
|
882
|
+
* Ceiling: b = ceil(a)
|
|
883
|
+
* @param {Float64Array} a - Input vector
|
|
884
|
+
* @param {Float64Array} b - Output vector
|
|
885
|
+
* @returns {Float64Array} b
|
|
886
|
+
*/
|
|
887
|
+
function vceil(a, b) {
|
|
888
|
+
return accelerate.vceil(a, b);
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
/**
|
|
892
|
+
* Floor: b = floor(a)
|
|
893
|
+
* @param {Float64Array} a - Input vector
|
|
894
|
+
* @param {Float64Array} b - Output vector
|
|
895
|
+
* @returns {Float64Array} b
|
|
896
|
+
*/
|
|
897
|
+
function vfloor(a, b) {
|
|
898
|
+
return accelerate.vfloor(a, b);
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
/**
|
|
902
|
+
* Truncate (round toward zero): b = trunc(a)
|
|
903
|
+
* @param {Float64Array} a - Input vector
|
|
904
|
+
* @param {Float64Array} b - Output vector
|
|
905
|
+
* @returns {Float64Array} b
|
|
906
|
+
*/
|
|
907
|
+
function vtrunc(a, b) {
|
|
908
|
+
return accelerate.vtrunc(a, b);
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
/**
|
|
912
|
+
* Copy sign: c = copysign(a, b) - magnitude of a with sign of b
|
|
913
|
+
* @param {Float64Array} a - Magnitude source
|
|
914
|
+
* @param {Float64Array} b - Sign source
|
|
915
|
+
* @param {Float64Array} c - Output vector
|
|
916
|
+
* @returns {Float64Array} c
|
|
917
|
+
*/
|
|
918
|
+
function vcopysign(a, b, c) {
|
|
919
|
+
return accelerate.vcopysign(a, b, c);
|
|
920
|
+
}
|
|
921
|
+
|
|
354
922
|
module.exports = {
|
|
355
923
|
// Matrix operations
|
|
356
924
|
matmul,
|
|
357
925
|
matmulFloat,
|
|
358
926
|
matvec,
|
|
927
|
+
transpose,
|
|
359
928
|
|
|
360
929
|
// BLAS operations
|
|
361
930
|
axpy,
|
|
931
|
+
copy,
|
|
932
|
+
swap,
|
|
933
|
+
norm,
|
|
934
|
+
abssum,
|
|
935
|
+
maxAbsIndex,
|
|
936
|
+
rot,
|
|
362
937
|
|
|
363
938
|
// Vector arithmetic
|
|
364
939
|
dot,
|
|
@@ -367,25 +942,86 @@ module.exports = {
|
|
|
367
942
|
vmul,
|
|
368
943
|
vdiv,
|
|
369
944
|
vscale,
|
|
945
|
+
vneg,
|
|
946
|
+
vaddScalar,
|
|
947
|
+
vma,
|
|
948
|
+
vmsa,
|
|
370
949
|
|
|
371
950
|
// Vector functions
|
|
372
951
|
vabs,
|
|
373
952
|
vsquare,
|
|
374
953
|
vsqrt,
|
|
375
954
|
normalize,
|
|
955
|
+
vreverse,
|
|
956
|
+
vfill,
|
|
957
|
+
vramp,
|
|
958
|
+
vlerp,
|
|
959
|
+
vclear,
|
|
960
|
+
vlimit,
|
|
961
|
+
|
|
962
|
+
// Trigonometric
|
|
963
|
+
vsin,
|
|
964
|
+
vcos,
|
|
965
|
+
vtan,
|
|
966
|
+
vasin,
|
|
967
|
+
vacos,
|
|
968
|
+
vatan,
|
|
969
|
+
vatan2,
|
|
970
|
+
|
|
971
|
+
// Hyperbolic
|
|
972
|
+
vsinh,
|
|
973
|
+
vcosh,
|
|
974
|
+
vtanh,
|
|
975
|
+
|
|
976
|
+
// Exponential/Logarithmic
|
|
977
|
+
vexp,
|
|
978
|
+
vlog,
|
|
979
|
+
vlog10,
|
|
980
|
+
vpow,
|
|
981
|
+
vreciprocal,
|
|
982
|
+
vrsqrt,
|
|
983
|
+
|
|
984
|
+
// Rounding
|
|
985
|
+
vceil,
|
|
986
|
+
vfloor,
|
|
987
|
+
vtrunc,
|
|
988
|
+
vcopysign,
|
|
989
|
+
|
|
990
|
+
// Clipping/Thresholding
|
|
991
|
+
vclip,
|
|
992
|
+
vthreshold,
|
|
376
993
|
|
|
377
994
|
// Reductions
|
|
378
995
|
sum,
|
|
379
996
|
mean,
|
|
380
997
|
max,
|
|
381
998
|
min,
|
|
999
|
+
minmax,
|
|
382
1000
|
rms,
|
|
1001
|
+
variance,
|
|
1002
|
+
stddev,
|
|
1003
|
+
sumOfSquares,
|
|
1004
|
+
meanMagnitude,
|
|
1005
|
+
meanSquare,
|
|
1006
|
+
maxMagnitude,
|
|
1007
|
+
minMagnitude,
|
|
383
1008
|
|
|
384
1009
|
// Distance metrics
|
|
385
1010
|
euclidean,
|
|
386
1011
|
|
|
387
1012
|
// Signal processing
|
|
388
1013
|
fft,
|
|
1014
|
+
ifft,
|
|
1015
|
+
conv,
|
|
1016
|
+
xcorr,
|
|
1017
|
+
|
|
1018
|
+
// Window functions
|
|
1019
|
+
hamming,
|
|
1020
|
+
hanning,
|
|
1021
|
+
blackman,
|
|
1022
|
+
|
|
1023
|
+
// Interpolation
|
|
1024
|
+
interp1d,
|
|
389
1025
|
|
|
390
1026
|
// Raw native bindings (for advanced use)
|
|
391
1027
|
_native: accelerate
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digitaldefiance/node-accelerate",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "High-performance Apple Accelerate framework bindings for Node.js -
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "High-performance Apple Accelerate framework bindings for Node.js - 80+ optimized functions including BLAS, vDSP, and vForce",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
7
7
|
"scripts": {
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"install": "node-gyp rebuild",
|
|
10
10
|
"build": "node-gyp rebuild",
|
|
11
11
|
"test": "node test.js",
|
|
12
|
-
"benchmark": "node benchmark.js",
|
|
12
|
+
"benchmark": "node benchmark-comprehensive.js",
|
|
13
|
+
"benchmark:simple": "node benchmark.js",
|
|
13
14
|
"compare": "node compare.js",
|
|
14
15
|
"prepublishOnly": "npm test",
|
|
15
16
|
"publish:public": "npm publish --access public"
|
|
@@ -27,6 +28,14 @@
|
|
|
27
28
|
"matrix",
|
|
28
29
|
"vector",
|
|
29
30
|
"fft",
|
|
31
|
+
"ifft",
|
|
32
|
+
"convolution",
|
|
33
|
+
"correlation",
|
|
34
|
+
"trigonometry",
|
|
35
|
+
"statistics",
|
|
36
|
+
"signal-processing",
|
|
37
|
+
"window-functions",
|
|
38
|
+
"interpolation",
|
|
30
39
|
"performance",
|
|
31
40
|
"native",
|
|
32
41
|
"addon",
|