mathjs 9.4.0 → 9.4.4

Sign up to get free protection for your applications and to get access to all the features.
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,