mathjs 9.4.0 → 9.4.4

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 (38) hide show
  1. package/HISTORY.md +39 -0
  2. package/README.md +1 -3
  3. package/docs/expressions/expression_trees.md +2 -1
  4. package/docs/expressions/parsing.md +1 -1
  5. package/docs/reference/functions/intersect.md +1 -1
  6. package/examples/advanced/custom_datatype.js +7 -4
  7. package/lib/browser/math.js +7 -7
  8. package/lib/browser/math.js.map +1 -1
  9. package/lib/cjs/entry/dependenciesAny/dependenciesEigs.generated.js +6 -9
  10. package/lib/cjs/entry/dependenciesAny/dependenciesIntersect.generated.js +3 -0
  11. package/lib/cjs/entry/impureFunctionsAny.generated.js +41 -41
  12. package/lib/cjs/entry/pureFunctionsAny.generated.js +128 -128
  13. package/lib/cjs/expression/node/ArrayNode.js +15 -15
  14. package/lib/cjs/expression/parse.js +1 -0
  15. package/lib/cjs/function/geometry/intersect.js +93 -58
  16. package/lib/cjs/function/matrix/eigs/complexEigs.js +168 -18
  17. package/lib/cjs/function/matrix/eigs.js +7 -9
  18. package/lib/cjs/header.js +2 -2
  19. package/lib/cjs/type/bignumber/BigNumber.js +3 -3
  20. package/lib/cjs/utils/is.js +13 -1
  21. package/lib/cjs/version.js +1 -1
  22. package/lib/esm/entry/dependenciesAny/dependenciesEigs.generated.js +4 -6
  23. package/lib/esm/entry/dependenciesAny/dependenciesIntersect.generated.js +2 -0
  24. package/lib/esm/entry/impureFunctionsAny.generated.js +38 -38
  25. package/lib/esm/entry/pureFunctionsAny.generated.js +107 -107
  26. package/lib/esm/expression/node/ArrayNode.js +16 -16
  27. package/lib/esm/expression/parse.js +1 -0
  28. package/lib/esm/function/geometry/intersect.js +91 -58
  29. package/lib/esm/function/matrix/eigs/complexEigs.js +152 -18
  30. package/lib/esm/function/matrix/eigs.js +7 -9
  31. package/lib/esm/type/bignumber/BigNumber.js +2 -3
  32. package/lib/esm/utils/is.js +13 -1
  33. package/lib/esm/version.js +1 -1
  34. package/package.json +22 -20
  35. package/types/index.d.ts +4772 -0
  36. package/types/index.ts +597 -0
  37. package/types/tsconfig.json +18 -0
  38. package/types/tslint.json +6 -0
@@ -10,7 +10,7 @@ var _is = require("../../utils/is.js");
10
10
  var _factory = require("../../utils/factory.js");
11
11
 
12
12
  var name = 'intersect';
13
- var dependencies = ['typed', 'config', 'abs', 'add', 'addScalar', 'matrix', 'multiply', 'multiplyScalar', 'divideScalar', 'subtract', 'smaller', 'equalScalar'];
13
+ var dependencies = ['typed', 'config', 'abs', 'add', 'addScalar', 'matrix', 'multiply', 'multiplyScalar', 'divideScalar', 'subtract', 'smaller', 'equalScalar', 'flatten'];
14
14
  var createIntersect = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
15
15
  var typed = _ref.typed,
16
16
  config = _ref.config,
@@ -23,7 +23,8 @@ var createIntersect = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
23
23
  divideScalar = _ref.divideScalar,
24
24
  subtract = _ref.subtract,
25
25
  smaller = _ref.smaller,
26
- equalScalar = _ref.equalScalar;
26
+ equalScalar = _ref.equalScalar,
27
+ flatten = _ref.flatten;
27
28
 
28
29
  /**
29
30
  * Calculates the point of intersection of two lines in two or three dimensions
@@ -49,74 +50,106 @@ var createIntersect = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
49
50
  * @param {Array | Matrix} y Co-ordinates of first end-point of second line
50
51
  * OR Co-efficients of the plane's equation
51
52
  * @param {Array | Matrix} z Co-ordinates of second end-point of second line
52
- * OR null if the calculation is for line and plane
53
+ * OR undefined if the calculation is for line and plane
53
54
  * @return {Array} Returns the point of intersection of lines/lines-planes
54
55
  */
55
56
  return typed('intersect', {
56
- 'Array, Array, Array': function ArrayArrayArray(x, y, plane) {
57
- if (!_3d(x)) {
57
+ 'Array, Array, Array': _AAA,
58
+ 'Array, Array, Array, Array': _AAAA,
59
+ 'Matrix, Matrix, Matrix': function MatrixMatrixMatrix(x, y, plane) {
60
+ var arr = _AAA(x.valueOf(), y.valueOf(), plane.valueOf());
61
+
62
+ return arr === null ? null : matrix(arr);
63
+ },
64
+ 'Matrix, Matrix, Matrix, Matrix': function MatrixMatrixMatrixMatrix(w, x, y, z) {
65
+ // TODO: output matrix type should match input matrix type
66
+ var arr = _AAAA(w.valueOf(), x.valueOf(), y.valueOf(), z.valueOf());
67
+
68
+ return arr === null ? null : matrix(arr);
69
+ }
70
+ });
71
+
72
+ function _AAA(x, y, plane) {
73
+ x = _coerceArr(x);
74
+ y = _coerceArr(y);
75
+ plane = _coerceArr(plane);
76
+
77
+ if (!_3d(x)) {
78
+ throw new TypeError('Array with 3 numbers or BigNumbers expected for first argument');
79
+ }
80
+
81
+ if (!_3d(y)) {
82
+ throw new TypeError('Array with 3 numbers or BigNumbers expected for second argument');
83
+ }
84
+
85
+ if (!_4d(plane)) {
86
+ throw new TypeError('Array with 4 numbers expected as third argument');
87
+ }
88
+
89
+ return _intersectLinePlane(x[0], x[1], x[2], y[0], y[1], y[2], plane[0], plane[1], plane[2], plane[3]);
90
+ }
91
+
92
+ function _AAAA(w, x, y, z) {
93
+ w = _coerceArr(w);
94
+ x = _coerceArr(x);
95
+ y = _coerceArr(y);
96
+ z = _coerceArr(z);
97
+
98
+ if (w.length === 2) {
99
+ if (!_2d(w)) {
100
+ throw new TypeError('Array with 2 numbers or BigNumbers expected for first argument');
101
+ }
102
+
103
+ if (!_2d(x)) {
104
+ throw new TypeError('Array with 2 numbers or BigNumbers expected for second argument');
105
+ }
106
+
107
+ if (!_2d(y)) {
108
+ throw new TypeError('Array with 2 numbers or BigNumbers expected for third argument');
109
+ }
110
+
111
+ if (!_2d(z)) {
112
+ throw new TypeError('Array with 2 numbers or BigNumbers expected for fourth argument');
113
+ }
114
+
115
+ return _intersect2d(w, x, y, z);
116
+ } else if (w.length === 3) {
117
+ if (!_3d(w)) {
58
118
  throw new TypeError('Array with 3 numbers or BigNumbers expected for first argument');
59
119
  }
60
120
 
61
- if (!_3d(y)) {
121
+ if (!_3d(x)) {
62
122
  throw new TypeError('Array with 3 numbers or BigNumbers expected for second argument');
63
123
  }
64
124
 
65
- if (!_4d(plane)) {
66
- throw new TypeError('Array with 4 numbers expected as third argument');
125
+ if (!_3d(y)) {
126
+ throw new TypeError('Array with 3 numbers or BigNumbers expected for third argument');
67
127
  }
68
128
 
69
- return _intersectLinePlane(x[0], x[1], x[2], y[0], y[1], y[2], plane[0], plane[1], plane[2], plane[3]);
70
- },
71
- 'Array, Array, Array, Array': function ArrayArrayArrayArray(w, x, y, z) {
72
- if (w.length === 2) {
73
- if (!_2d(w)) {
74
- throw new TypeError('Array with 2 numbers or BigNumbers expected for first argument');
75
- }
76
-
77
- if (!_2d(x)) {
78
- throw new TypeError('Array with 2 numbers or BigNumbers expected for second argument');
79
- }
80
-
81
- if (!_2d(y)) {
82
- throw new TypeError('Array with 2 numbers or BigNumbers expected for third argument');
83
- }
84
-
85
- if (!_2d(z)) {
86
- throw new TypeError('Array with 2 numbers or BigNumbers expected for fourth argument');
87
- }
88
-
89
- return _intersect2d(w, x, y, z);
90
- } else if (w.length === 3) {
91
- if (!_3d(w)) {
92
- throw new TypeError('Array with 3 numbers or BigNumbers expected for first argument');
93
- }
94
-
95
- if (!_3d(x)) {
96
- throw new TypeError('Array with 3 numbers or BigNumbers expected for second argument');
97
- }
98
-
99
- if (!_3d(y)) {
100
- throw new TypeError('Array with 3 numbers or BigNumbers expected for third argument');
101
- }
102
-
103
- if (!_3d(z)) {
104
- throw new TypeError('Array with 3 numbers or BigNumbers expected for fourth argument');
105
- }
106
-
107
- return _intersect3d(w[0], w[1], w[2], x[0], x[1], x[2], y[0], y[1], y[2], z[0], z[1], z[2]);
108
- } else {
109
- throw new TypeError('Arrays with two or thee dimensional points expected');
129
+ if (!_3d(z)) {
130
+ throw new TypeError('Array with 3 numbers or BigNumbers expected for fourth argument');
110
131
  }
111
- },
112
- 'Matrix, Matrix, Matrix': function MatrixMatrixMatrix(x, y, plane) {
113
- return matrix(this(x.valueOf(), y.valueOf(), plane.valueOf()));
114
- },
115
- 'Matrix, Matrix, Matrix, Matrix': function MatrixMatrixMatrixMatrix(w, x, y, z) {
116
- // TODO: output matrix type should match input matrix type
117
- return matrix(this(w.valueOf(), x.valueOf(), y.valueOf(), z.valueOf()));
132
+
133
+ return _intersect3d(w[0], w[1], w[2], x[0], x[1], x[2], y[0], y[1], y[2], z[0], z[1], z[2]);
134
+ } else {
135
+ throw new TypeError('Arrays with two or thee dimensional points expected');
118
136
  }
119
- });
137
+ }
138
+ /** Coerce row and column 2-dim arrays to 1-dim array */
139
+
140
+
141
+ function _coerceArr(arr) {
142
+ // row matrix
143
+ if (arr.length === 1) return arr[0]; // column matrix
144
+
145
+ if (arr.length > 1 && Array.isArray(arr[0])) {
146
+ if (arr.every(function (el) {
147
+ return Array.isArray(el) && el.length === 1;
148
+ })) return flatten(arr);
149
+ }
150
+
151
+ return arr;
152
+ }
120
153
 
121
154
  function _isNumeric(a) {
122
155
  // intersect supports numbers and bignumbers
@@ -196,7 +229,9 @@ var createIntersect = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
196
229
  var y2y = multiplyScalar(y2, y);
197
230
  var z1z = multiplyScalar(z1, z);
198
231
  var z2z = multiplyScalar(z2, z);
199
- var t = divideScalar(subtract(subtract(subtract(c, x1x), y1y), z1z), subtract(subtract(subtract(addScalar(addScalar(x2x, y2y), z2z), x1x), y1y), z1z));
232
+ var numerator = subtract(subtract(subtract(c, x1x), y1y), z1z);
233
+ var denominator = subtract(subtract(subtract(addScalar(addScalar(x2x, y2y), z2z), x1x), y1y), z1z);
234
+ var t = divideScalar(numerator, denominator);
200
235
  var px = addScalar(x1, multiplyScalar(t, subtract(x2, x1)));
201
236
  var py = addScalar(y1, multiplyScalar(t, subtract(y2, y1)));
202
237
  var pz = addScalar(z1, multiplyScalar(t, subtract(z2, z1)));
@@ -30,15 +30,14 @@ function createComplexEigs(_ref) {
30
30
  diag = _ref.diag,
31
31
  inv = _ref.inv,
32
32
  qr = _ref.qr,
33
+ usolve = _ref.usolve,
33
34
  usolveAll = _ref.usolveAll,
34
35
  equal = _ref.equal,
35
36
  complex = _ref.complex,
36
37
  larger = _ref.larger,
37
38
  smaller = _ref.smaller,
38
- round = _ref.round,
39
- log10 = _ref.log10,
40
- transpose = _ref.transpose,
41
- matrixFromColumns = _ref.matrixFromColumns;
39
+ matrixFromColumns = _ref.matrixFromColumns,
40
+ dot = _ref.dot;
42
41
 
43
42
  /**
44
43
  * @param {number[][]} arr the matrix to find eigenvalues of
@@ -80,7 +79,7 @@ function createComplexEigs(_ref) {
80
79
  var vectors;
81
80
 
82
81
  if (findVectors) {
83
- vectors = findEigenvectors(arr, N, C, values, prec);
82
+ vectors = findEigenvectors(arr, N, C, values, prec, type);
84
83
  vectors = matrixFromColumns.apply(void 0, (0, _toConsumableArray2["default"])(vectors));
85
84
  }
86
85
 
@@ -415,13 +414,18 @@ function createComplexEigs(_ref) {
415
414
  * @param {number} N size of A
416
415
  * @param {Matrix} C column transformation matrix that turns A into upper triangular
417
416
  * @param {number[]} values array of eigenvalues of A
417
+ * @param {'number'|'BigNumber'|'Complex'} type
418
418
  * @returns {number[][]} eigenvalues
419
419
  */
420
420
 
421
421
 
422
- function findEigenvectors(A, N, C, values, prec) {
422
+ function findEigenvectors(A, N, C, values, prec, type) {
423
423
  var Cinv = inv(C);
424
- var U = multiply(Cinv, A, C); // turn values into a kind of "multiset"
424
+ var U = multiply(Cinv, A, C);
425
+ var big = type === 'BigNumber';
426
+ var cplx = type === 'Complex';
427
+ var zero = big ? bignumber(0) : cplx ? complex(0) : 0;
428
+ var one = big ? bignumber(1) : cplx ? complex(1) : 1; // turn values into a kind of "multiset"
425
429
  // this way it is easier to find eigenvectors
426
430
 
427
431
  var uniqueValues = [];
@@ -437,11 +441,7 @@ function createComplexEigs(_ref) {
437
441
  var _i4 = indexOf(uniqueValues, _λ, equal);
438
442
 
439
443
  if (_i4 === -1) {
440
- // a dirty trick that helps us find more vectors
441
- // TODO with iterative algorithm this can be removed
442
- // Note: the round around log10 is needed to prevent rounding off errors in IE
443
- var rounded = round(_λ, subtract(-1, round(log10(prec))));
444
- uniqueValues.push(rounded);
444
+ uniqueValues.push(_λ);
445
445
  multiplicities.push(1);
446
446
  } else {
447
447
  multiplicities[_i4] += 1;
@@ -458,22 +458,34 @@ function createComplexEigs(_ref) {
458
458
 
459
459
  var vectors = [];
460
460
  var len = uniqueValues.length;
461
- var b = Array(N).fill(0);
462
- var E = diag(Array(N).fill(1)); // eigenvalues for which usolve failed (due to numerical error)
461
+ var b = Array(N).fill(zero);
462
+ var E = diag(Array(N).fill(one)); // eigenvalues for which usolve failed (due to numerical error)
463
463
 
464
464
  var failedLambdas = [];
465
465
 
466
466
  for (var i = 0; i < len; i++) {
467
467
  var λ = uniqueValues[i];
468
- var solutions = usolveAll(subtract(U, multiply(λ, E)), b);
468
+
469
+ var _A = subtract(U, multiply(λ, E)); // the characteristic matrix
470
+
471
+
472
+ var solutions = usolveAll(_A, b);
469
473
  solutions = solutions.map(function (v) {
470
474
  return multiply(C, v);
471
475
  });
472
476
  solutions.shift(); // ignore the null vector
473
- // looks like we missed something
477
+ // looks like we missed something, try inverse iteration
478
+
479
+ while (solutions.length < multiplicities[i]) {
480
+ var approxVec = inverseIterate(_A, N, solutions, prec, type);
474
481
 
475
- if (solutions.length < multiplicities[i]) {
476
- failedLambdas.push(λ);
482
+ if (approxVec == null) {
483
+ // no more vectors were found
484
+ failedLambdas.push(λ);
485
+ break;
486
+ }
487
+
488
+ solutions.push(approxVec);
477
489
  }
478
490
 
479
491
  vectors.push.apply(vectors, (0, _toConsumableArray2["default"])(solutions.map(function (v) {
@@ -626,6 +638,144 @@ function createComplexEigs(_ref) {
626
638
 
627
639
  return -1;
628
640
  }
641
+ /**
642
+ * Provided a near-singular upper-triangular matrix A and a list of vectors,
643
+ * finds an eigenvector of A with the smallest eigenvalue, which is orthogonal
644
+ * to each vector in the list
645
+ * @template T
646
+ * @param {T[][]} A near-singular square matrix
647
+ * @param {number} N dimension
648
+ * @param {T[][]} orthog list of vectors
649
+ * @param {number} prec epsilon
650
+ * @param {'number'|'BigNumber'|'Complex'} type
651
+ * @return {T[] | null} eigenvector
652
+ *
653
+ * @see Numerical Recipes for Fortran 77 – 11.7 Eigenvalues or Eigenvectors by Inverse Iteration
654
+ */
655
+
656
+
657
+ function inverseIterate(A, N, orthog, prec, type) {
658
+ var largeNum = type === 'BigNumber' ? bignumber(1000) : 1000;
659
+ var b; // the vector
660
+ // you better choose a random vector before I count to five
661
+
662
+ var i = 0;
663
+
664
+ while (true) {
665
+ b = randomOrthogonalVector(N, orthog, type);
666
+ b = usolve(A, b);
667
+
668
+ if (larger(norm(b), largeNum)) {
669
+ break;
670
+ }
671
+
672
+ if (++i >= 5) {
673
+ return null;
674
+ }
675
+ } // you better converge before I count to ten
676
+
677
+
678
+ i = 0;
679
+
680
+ while (true) {
681
+ var c = usolve(A, b);
682
+
683
+ if (smaller(norm(orthogonalComplement(b, [c])), prec)) {
684
+ break;
685
+ }
686
+
687
+ if (++i >= 10) {
688
+ return null;
689
+ }
690
+
691
+ b = normalize(c);
692
+ }
693
+
694
+ return b;
695
+ }
696
+ /**
697
+ * Generates a random unit vector of dimension N, orthogonal to each vector in the list
698
+ * @template T
699
+ * @param {number} N dimension
700
+ * @param {T[][]} orthog list of vectors
701
+ * @param {'number'|'BigNumber'|'Complex'} type
702
+ * @returns {T[]} random vector
703
+ */
704
+
705
+
706
+ function randomOrthogonalVector(N, orthog, type) {
707
+ var big = type === 'BigNumber';
708
+ var cplx = type === 'Complex'; // generate random vector with the correct type
709
+
710
+ var v = Array(N).fill(0).map(function (_) {
711
+ return 2 * Math.random() - 1;
712
+ });
713
+
714
+ if (big) {
715
+ v = v.map(function (n) {
716
+ return bignumber(n);
717
+ });
718
+ }
719
+
720
+ if (cplx) {
721
+ v = v.map(function (n) {
722
+ return complex(n);
723
+ });
724
+ } // project to orthogonal complement
725
+
726
+
727
+ v = orthogonalComplement(v, orthog); // normalize
728
+
729
+ return normalize(v, type);
730
+ }
731
+ /**
732
+ * Project vector v to the orthogonal complement of an array of vectors
733
+ */
734
+
735
+
736
+ function orthogonalComplement(v, orthog) {
737
+ var _iterator3 = _createForOfIteratorHelper(orthog),
738
+ _step3;
739
+
740
+ try {
741
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
742
+ var w = _step3.value;
743
+ // v := v − (w, v)/∥w∥² w
744
+ v = subtract(v, multiply(divideScalar(dot(w, v), dot(w, w)), w));
745
+ }
746
+ } catch (err) {
747
+ _iterator3.e(err);
748
+ } finally {
749
+ _iterator3.f();
750
+ }
751
+
752
+ return v;
753
+ }
754
+ /**
755
+ * Calculate the norm of a vector.
756
+ * We can't use math.norm because factory can't handle circular dependency.
757
+ * Seriously, I'm really fed up with factory.
758
+ */
759
+
760
+
761
+ function norm(v) {
762
+ return abs(sqrt(dot(v, v)));
763
+ }
764
+ /**
765
+ * Normalize a vector
766
+ * @template T
767
+ * @param {T[]} v
768
+ * @param {'number'|'BigNumber'|'Complex'} type
769
+ * @returns {T[]} normalized vec
770
+ */
771
+
772
+
773
+ function normalize(v, type) {
774
+ var big = type === 'BigNumber';
775
+ var cplx = type === 'Complex';
776
+ var one = big ? bignumber(1) : cplx ? complex(1) : 1;
777
+ return multiply(divideScalar(one, norm(v)), v);
778
+ }
629
779
 
630
780
  return complexEigs;
631
781
  }
@@ -17,7 +17,7 @@ var _is = require("../../utils/is.js");
17
17
 
18
18
  var name = 'eigs'; // The absolute state of math.js's dependency system:
19
19
 
20
- var dependencies = ['config', 'typed', 'matrix', 'addScalar', 'equal', 'subtract', 'abs', 'atan', 'cos', 'sin', 'multiplyScalar', 'divideScalar', 'inv', 'bignumber', 'multiply', 'add', 'larger', 'column', 'flatten', 'number', 'complex', 'sqrt', 'diag', 'qr', 'usolveAll', 'im', 're', 'smaller', 'round', 'log10', 'transpose', 'matrixFromColumns'];
20
+ var dependencies = ['config', 'typed', 'matrix', 'addScalar', 'equal', 'subtract', 'abs', 'atan', 'cos', 'sin', 'multiplyScalar', 'divideScalar', 'inv', 'bignumber', 'multiply', 'add', 'larger', 'column', 'flatten', 'number', 'complex', 'sqrt', 'diag', 'qr', 'usolve', 'usolveAll', 'im', 're', 'smaller', 'matrixFromColumns', 'dot'];
21
21
  var createEigs = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
22
22
  var config = _ref.config,
23
23
  typed = _ref.typed,
@@ -43,14 +43,13 @@ var createEigs = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
43
43
  sqrt = _ref.sqrt,
44
44
  diag = _ref.diag,
45
45
  qr = _ref.qr,
46
+ usolve = _ref.usolve,
46
47
  usolveAll = _ref.usolveAll,
47
48
  im = _ref.im,
48
49
  re = _ref.re,
49
50
  smaller = _ref.smaller,
50
- round = _ref.round,
51
- log10 = _ref.log10,
52
- transpose = _ref.transpose,
53
- matrixFromColumns = _ref.matrixFromColumns;
51
+ matrixFromColumns = _ref.matrixFromColumns,
52
+ dot = _ref.dot;
54
53
  var doRealSymetric = (0, _realSymetric.createRealSymmetric)({
55
54
  config: config,
56
55
  addScalar: addScalar,
@@ -83,15 +82,14 @@ var createEigs = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
83
82
  diag: diag,
84
83
  qr: qr,
85
84
  inv: inv,
85
+ usolve: usolve,
86
86
  usolveAll: usolveAll,
87
87
  equal: equal,
88
88
  complex: complex,
89
89
  larger: larger,
90
90
  smaller: smaller,
91
- round: round,
92
- log10: log10,
93
- transpose: transpose,
94
- matrixFromColumns: matrixFromColumns
91
+ matrixFromColumns: matrixFromColumns,
92
+ dot: dot
95
93
  });
96
94
  /**
97
95
  * Compute eigenvalues and eigenvectors of a matrix. The eigenvalues are sorted by their absolute value, ascending.
package/lib/cjs/header.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 9.4.0
10
- * @date 2021-05-16
9
+ * @version 9.4.4
10
+ * @date 2021-07-07
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2021 Jos de Jong <wjosdejong@gmail.com>
@@ -16,17 +16,17 @@ var dependencies = ['?on', 'config'];
16
16
  var createBigNumberClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
17
  var on = _ref.on,
18
18
  config = _ref.config;
19
- var EUCLID = 9; // Use euclidian division for mod calculation
20
19
 
21
20
  var BigNumber = _decimal["default"].clone({
22
21
  precision: config.precision,
23
- modulo: EUCLID
22
+ modulo: _decimal["default"].EUCLID
24
23
  });
24
+
25
+ BigNumber.prototype = Object.create(BigNumber.prototype);
25
26
  /**
26
27
  * Attach type information
27
28
  */
28
29
 
29
-
30
30
  BigNumber.prototype.type = 'BigNumber';
31
31
  BigNumber.prototype.isBigNumber = true;
32
32
  /**
@@ -65,7 +65,19 @@ function isNumber(x) {
65
65
  }
66
66
 
67
67
  function isBigNumber(x) {
68
- return x && x.constructor.prototype.isBigNumber === true || false;
68
+ if (!x || (0, _typeof2["default"])(x) !== 'object' || typeof x.constructor !== 'function') {
69
+ return false;
70
+ }
71
+
72
+ if (x.isBigNumber === true && (0, _typeof2["default"])(x.constructor.prototype) === 'object' && x.constructor.prototype.isBigNumber === true) {
73
+ return true;
74
+ }
75
+
76
+ if (typeof x.constructor.isDecimal === 'function' && x.constructor.isDecimal(x) === true) {
77
+ return true;
78
+ }
79
+
80
+ return false;
69
81
  }
70
82
 
71
83
  function isComplex(x) {
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- var version = '9.4.0'; // Note: This file is automatically generated when building math.js.
7
+ var version = '9.4.4'; // Note: This file is automatically generated when building math.js.
8
8
  // Changes made in this file will be overwritten.
9
9
 
10
10
  exports.version = version;
@@ -12,12 +12,12 @@ import { complexDependencies } from './dependenciesComplex.generated.js';
12
12
  import { cosDependencies } from './dependenciesCos.generated.js';
13
13
  import { diagDependencies } from './dependenciesDiag.generated.js';
14
14
  import { divideScalarDependencies } from './dependenciesDivideScalar.generated.js';
15
+ import { dotDependencies } from './dependenciesDot.generated.js';
15
16
  import { equalDependencies } from './dependenciesEqual.generated.js';
16
17
  import { flattenDependencies } from './dependenciesFlatten.generated.js';
17
18
  import { imDependencies } from './dependenciesIm.generated.js';
18
19
  import { invDependencies } from './dependenciesInv.generated.js';
19
20
  import { largerDependencies } from './dependenciesLarger.generated.js';
20
- import { log10Dependencies } from './dependenciesLog10.generated.js';
21
21
  import { matrixDependencies } from './dependenciesMatrix.generated.js';
22
22
  import { matrixFromColumnsDependencies } from './dependenciesMatrixFromColumns.generated.js';
23
23
  import { multiplyDependencies } from './dependenciesMultiply.generated.js';
@@ -25,13 +25,12 @@ import { multiplyScalarDependencies } from './dependenciesMultiplyScalar.generat
25
25
  import { numberDependencies } from './dependenciesNumber.generated.js';
26
26
  import { qrDependencies } from './dependenciesQr.generated.js';
27
27
  import { reDependencies } from './dependenciesRe.generated.js';
28
- import { roundDependencies } from './dependenciesRound.generated.js';
29
28
  import { sinDependencies } from './dependenciesSin.generated.js';
30
29
  import { smallerDependencies } from './dependenciesSmaller.generated.js';
31
30
  import { sqrtDependencies } from './dependenciesSqrt.generated.js';
32
31
  import { subtractDependencies } from './dependenciesSubtract.generated.js';
33
- import { transposeDependencies } from './dependenciesTranspose.generated.js';
34
32
  import { typedDependencies } from './dependenciesTyped.generated.js';
33
+ import { usolveDependencies } from './dependenciesUsolve.generated.js';
35
34
  import { usolveAllDependencies } from './dependenciesUsolveAll.generated.js';
36
35
  import { createEigs } from '../../factoriesAny.js';
37
36
  export var eigsDependencies = {
@@ -45,12 +44,12 @@ export var eigsDependencies = {
45
44
  cosDependencies,
46
45
  diagDependencies,
47
46
  divideScalarDependencies,
47
+ dotDependencies,
48
48
  equalDependencies,
49
49
  flattenDependencies,
50
50
  imDependencies,
51
51
  invDependencies,
52
52
  largerDependencies,
53
- log10Dependencies,
54
53
  matrixDependencies,
55
54
  matrixFromColumnsDependencies,
56
55
  multiplyDependencies,
@@ -58,13 +57,12 @@ export var eigsDependencies = {
58
57
  numberDependencies,
59
58
  qrDependencies,
60
59
  reDependencies,
61
- roundDependencies,
62
60
  sinDependencies,
63
61
  smallerDependencies,
64
62
  sqrtDependencies,
65
63
  subtractDependencies,
66
- transposeDependencies,
67
64
  typedDependencies,
65
+ usolveDependencies,
68
66
  usolveAllDependencies,
69
67
  createEigs
70
68
  };
@@ -7,6 +7,7 @@ import { addDependencies } from './dependenciesAdd.generated.js';
7
7
  import { addScalarDependencies } from './dependenciesAddScalar.generated.js';
8
8
  import { divideScalarDependencies } from './dependenciesDivideScalar.generated.js';
9
9
  import { equalScalarDependencies } from './dependenciesEqualScalar.generated.js';
10
+ import { flattenDependencies } from './dependenciesFlatten.generated.js';
10
11
  import { matrixDependencies } from './dependenciesMatrix.generated.js';
11
12
  import { multiplyDependencies } from './dependenciesMultiply.generated.js';
12
13
  import { multiplyScalarDependencies } from './dependenciesMultiplyScalar.generated.js';
@@ -20,6 +21,7 @@ export var intersectDependencies = {
20
21
  addScalarDependencies,
21
22
  divideScalarDependencies,
22
23
  equalScalarDependencies,
24
+ flattenDependencies,
23
25
  matrixDependencies,
24
26
  multiplyDependencies,
25
27
  multiplyScalarDependencies,