mathjs 12.3.2 → 12.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. package/HISTORY.md +28 -0
  2. package/README.md +28 -0
  3. package/bin/cli.js +1 -1
  4. package/bin/repl.js +1 -1
  5. package/lib/browser/math.js +1 -1
  6. package/lib/browser/math.js.LICENSE.txt +2 -2
  7. package/lib/browser/math.js.map +1 -1
  8. package/lib/cjs/entry/pureFunctionsAny.generated.js +1 -0
  9. package/lib/cjs/expression/node/ConstantNode.js +5 -3
  10. package/lib/cjs/expression/parse.js +8 -4
  11. package/lib/cjs/function/algebra/simplifyCore.js +3 -0
  12. package/lib/cjs/function/algebra/sparse/csAmd.js +4 -2
  13. package/lib/cjs/function/algebra/sparse/csChol.js +4 -2
  14. package/lib/cjs/function/algebra/sparse/csCounts.js +4 -2
  15. package/lib/cjs/function/algebra/sparse/csCumsum.js +4 -2
  16. package/lib/cjs/function/algebra/sparse/csDfs.js +4 -2
  17. package/lib/cjs/function/algebra/sparse/csEreach.js +4 -2
  18. package/lib/cjs/function/algebra/sparse/csEtree.js +4 -2
  19. package/lib/cjs/function/algebra/sparse/csFkeep.js +4 -2
  20. package/lib/cjs/function/algebra/sparse/csFlip.js +4 -2
  21. package/lib/cjs/function/algebra/sparse/csIpvec.js +4 -0
  22. package/lib/cjs/function/algebra/sparse/csLeaf.js +4 -2
  23. package/lib/cjs/function/algebra/sparse/csLu.js +4 -2
  24. package/lib/cjs/function/algebra/sparse/csMark.js +4 -2
  25. package/lib/cjs/function/algebra/sparse/csMarked.js +4 -2
  26. package/lib/cjs/function/algebra/sparse/csPermute.js +4 -2
  27. package/lib/cjs/function/algebra/sparse/csPost.js +4 -2
  28. package/lib/cjs/function/algebra/sparse/csReach.js +4 -2
  29. package/lib/cjs/function/algebra/sparse/csSpsolve.js +4 -2
  30. package/lib/cjs/function/algebra/sparse/csSqr.js +4 -2
  31. package/lib/cjs/function/algebra/sparse/csSymperm.js +4 -2
  32. package/lib/cjs/function/algebra/sparse/csTdfs.js +4 -2
  33. package/lib/cjs/function/algebra/sparse/csUnflip.js +4 -2
  34. package/lib/cjs/function/arithmetic/multiply.js +30 -29
  35. package/lib/cjs/function/arithmetic/round.js +38 -7
  36. package/lib/cjs/function/matrix/dot.js +3 -3
  37. package/lib/cjs/header.js +2 -2
  38. package/lib/cjs/type/matrix/utils/matAlgo01xDSid.js +4 -4
  39. package/lib/cjs/type/matrix/utils/matAlgo02xDS0.js +4 -4
  40. package/lib/cjs/type/matrix/utils/matAlgo03xDSf.js +4 -4
  41. package/lib/cjs/type/matrix/utils/matAlgo04xSidSid.js +4 -4
  42. package/lib/cjs/type/matrix/utils/matAlgo05xSfSf.js +4 -4
  43. package/lib/cjs/type/matrix/utils/matAlgo06xS0S0.js +4 -4
  44. package/lib/cjs/type/matrix/utils/matAlgo07xSSf.js +4 -4
  45. package/lib/cjs/type/matrix/utils/matAlgo08xS0Sid.js +4 -4
  46. package/lib/cjs/type/matrix/utils/matAlgo09xS0Sf.js +4 -4
  47. package/lib/cjs/type/unit/Unit.js +6 -2
  48. package/lib/cjs/utils/map.js +2 -0
  49. package/lib/cjs/version.js +1 -1
  50. package/lib/esm/entry/pureFunctionsAny.generated.js +1 -0
  51. package/lib/esm/expression/node/ConstantNode.js +5 -3
  52. package/lib/esm/expression/parse.js +8 -4
  53. package/lib/esm/function/algebra/simplifyCore.js +3 -0
  54. package/lib/esm/function/algebra/sparse/csAmd.js +3 -2
  55. package/lib/esm/function/algebra/sparse/csChol.js +3 -2
  56. package/lib/esm/function/algebra/sparse/csCounts.js +3 -2
  57. package/lib/esm/function/algebra/sparse/csCumsum.js +4 -2
  58. package/lib/esm/function/algebra/sparse/csDfs.js +3 -2
  59. package/lib/esm/function/algebra/sparse/csEreach.js +3 -2
  60. package/lib/esm/function/algebra/sparse/csEtree.js +4 -2
  61. package/lib/esm/function/algebra/sparse/csFkeep.js +4 -2
  62. package/lib/esm/function/algebra/sparse/csFlip.js +4 -2
  63. package/lib/esm/function/algebra/sparse/csIpvec.js +4 -0
  64. package/lib/esm/function/algebra/sparse/csLeaf.js +4 -2
  65. package/lib/esm/function/algebra/sparse/csLu.js +4 -2
  66. package/lib/esm/function/algebra/sparse/csMark.js +4 -2
  67. package/lib/esm/function/algebra/sparse/csMarked.js +4 -2
  68. package/lib/esm/function/algebra/sparse/csPermute.js +4 -2
  69. package/lib/esm/function/algebra/sparse/csPost.js +3 -2
  70. package/lib/esm/function/algebra/sparse/csReach.js +4 -2
  71. package/lib/esm/function/algebra/sparse/csSpsolve.js +3 -2
  72. package/lib/esm/function/algebra/sparse/csSqr.js +3 -2
  73. package/lib/esm/function/algebra/sparse/csSymperm.js +3 -2
  74. package/lib/esm/function/algebra/sparse/csTdfs.js +4 -2
  75. package/lib/esm/function/algebra/sparse/csUnflip.js +3 -2
  76. package/lib/esm/function/arithmetic/multiply.js +30 -29
  77. package/lib/esm/function/arithmetic/round.js +38 -7
  78. package/lib/esm/function/matrix/dot.js +3 -3
  79. package/lib/esm/type/matrix/utils/matAlgo01xDSid.js +4 -4
  80. package/lib/esm/type/matrix/utils/matAlgo02xDS0.js +4 -4
  81. package/lib/esm/type/matrix/utils/matAlgo03xDSf.js +4 -4
  82. package/lib/esm/type/matrix/utils/matAlgo04xSidSid.js +4 -4
  83. package/lib/esm/type/matrix/utils/matAlgo05xSfSf.js +4 -4
  84. package/lib/esm/type/matrix/utils/matAlgo06xS0S0.js +4 -4
  85. package/lib/esm/type/matrix/utils/matAlgo07xSSf.js +4 -4
  86. package/lib/esm/type/matrix/utils/matAlgo08xS0Sid.js +4 -4
  87. package/lib/esm/type/matrix/utils/matAlgo09xS0Sf.js +4 -4
  88. package/lib/esm/type/unit/Unit.js +6 -2
  89. package/lib/esm/utils/map.js +2 -0
  90. package/lib/esm/version.js +1 -1
  91. package/package.json +16 -16
  92. package/types/index.d.ts +5 -5
@@ -119,11 +119,11 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
119
119
  // a dense
120
120
  var adata = a._data;
121
121
  var asize = a._size;
122
- var adt = a._datatype;
122
+ var adt = a._datatype || a.getDataType();
123
123
  // b dense
124
124
  var bdata = b._data;
125
125
  var bsize = b._size;
126
- var bdt = b._datatype;
126
+ var bdt = b._datatype || b.getDataType();
127
127
  // rows & columns
128
128
  var alength = asize[0];
129
129
  var bcolumns = bsize[1];
@@ -136,7 +136,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
136
136
  var mf = multiplyScalar;
137
137
 
138
138
  // process data types
139
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
139
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
140
140
  // datatype
141
141
  dt = adt;
142
142
  // find signatures that matches (dt, dt)
@@ -163,7 +163,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
163
163
  return a.createDenseMatrix({
164
164
  data: c,
165
165
  size: [bcolumns],
166
- datatype: dt
166
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
167
167
  });
168
168
  }
169
169
 
@@ -207,10 +207,10 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
207
207
  // a dense
208
208
  var adata = a._data;
209
209
  var asize = a._size;
210
- var adt = a._datatype;
210
+ var adt = a._datatype || a.getDataType();
211
211
  // b dense
212
212
  var bdata = b._data;
213
- var bdt = b._datatype;
213
+ var bdt = b._datatype || b.getDataType();
214
214
  // rows & columns
215
215
  var arows = asize[0];
216
216
  var acolumns = asize[1];
@@ -223,7 +223,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
223
223
  var mf = multiplyScalar;
224
224
 
225
225
  // process data types
226
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
226
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
227
227
  // datatype
228
228
  dt = adt;
229
229
  // find signatures that matches (dt, dt)
@@ -252,7 +252,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
252
252
  return a.createDenseMatrix({
253
253
  data: c,
254
254
  size: [arows],
255
- datatype: dt
255
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
256
256
  });
257
257
  }
258
258
 
@@ -265,14 +265,15 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
265
265
  * @return {Matrix} DenseMatrix (MxC)
266
266
  */
267
267
  function _multiplyDenseMatrixDenseMatrix(a, b) {
268
+ // getDataType()
268
269
  // a dense
269
270
  var adata = a._data;
270
271
  var asize = a._size;
271
- var adt = a._datatype;
272
+ var adt = a._datatype || a.getDataType();
272
273
  // b dense
273
274
  var bdata = b._data;
274
275
  var bsize = b._size;
275
- var bdt = b._datatype;
276
+ var bdt = b._datatype || b.getDataType();
276
277
  // rows & columns
277
278
  var arows = asize[0];
278
279
  var acolumns = asize[1];
@@ -286,7 +287,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
286
287
  var mf = multiplyScalar;
287
288
 
288
289
  // process data types
289
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
290
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed' && adt !== 'mixed') {
290
291
  // datatype
291
292
  dt = adt;
292
293
  // find signatures that matches (dt, dt)
@@ -320,7 +321,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
320
321
  return a.createDenseMatrix({
321
322
  data: c,
322
323
  size: [arows, bcolumns],
323
- datatype: dt
324
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
324
325
  });
325
326
  }
326
327
 
@@ -336,13 +337,13 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
336
337
  // a dense
337
338
  var adata = a._data;
338
339
  var asize = a._size;
339
- var adt = a._datatype;
340
+ var adt = a._datatype || a.getDataType();
340
341
  // b sparse
341
342
  var bvalues = b._values;
342
343
  var bindex = b._index;
343
344
  var bptr = b._ptr;
344
345
  var bsize = b._size;
345
- var bdt = b._datatype;
346
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
346
347
  // validate b matrix
347
348
  if (!bvalues) {
348
349
  throw new Error('Cannot multiply Dense Matrix times Pattern only Matrix');
@@ -363,7 +364,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
363
364
  var zero = 0;
364
365
 
365
366
  // process data types
366
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
367
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
367
368
  // datatype
368
369
  dt = adt;
369
370
  // find signatures that matches (dt, dt)
@@ -384,7 +385,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
384
385
  index: cindex,
385
386
  ptr: cptr,
386
387
  size: [arows, bcolumns],
387
- datatype: dt
388
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
388
389
  });
389
390
 
390
391
  // loop b columns
@@ -448,14 +449,14 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
448
449
  var avalues = a._values;
449
450
  var aindex = a._index;
450
451
  var aptr = a._ptr;
451
- var adt = a._datatype;
452
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
452
453
  // validate a matrix
453
454
  if (!avalues) {
454
455
  throw new Error('Cannot multiply Pattern only Matrix times Dense Matrix');
455
456
  }
456
457
  // b dense
457
458
  var bdata = b._data;
458
- var bdt = b._datatype;
459
+ var bdt = b._datatype || b.getDataType();
459
460
  // rows & columns
460
461
  var arows = a._size[0];
461
462
  var brows = b._size[0];
@@ -476,7 +477,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
476
477
  var zero = 0;
477
478
 
478
479
  // process data types
479
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
480
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
480
481
  // datatype
481
482
  dt = adt;
482
483
  // find signatures that matches (dt, dt)
@@ -529,13 +530,13 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
529
530
  // update ptr
530
531
  cptr[1] = cindex.length;
531
532
 
532
- // return sparse matrix
533
+ // matrix to return
533
534
  return a.createSparseMatrix({
534
535
  values: cvalues,
535
536
  index: cindex,
536
537
  ptr: cptr,
537
538
  size: [arows, 1],
538
- datatype: dt
539
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
539
540
  });
540
541
  }
541
542
 
@@ -552,14 +553,14 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
552
553
  var avalues = a._values;
553
554
  var aindex = a._index;
554
555
  var aptr = a._ptr;
555
- var adt = a._datatype;
556
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
556
557
  // validate a matrix
557
558
  if (!avalues) {
558
559
  throw new Error('Cannot multiply Pattern only Matrix times Dense Matrix');
559
560
  }
560
561
  // b dense
561
562
  var bdata = b._data;
562
- var bdt = b._datatype;
563
+ var bdt = b._datatype || b.getDataType();
563
564
  // rows & columns
564
565
  var arows = a._size[0];
565
566
  var brows = b._size[0];
@@ -577,7 +578,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
577
578
  var zero = 0;
578
579
 
579
580
  // process data types
580
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
581
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
581
582
  // datatype
582
583
  dt = adt;
583
584
  // find signatures that matches (dt, dt)
@@ -598,7 +599,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
598
599
  index: cindex,
599
600
  ptr: cptr,
600
601
  size: [arows, bcolumns],
601
- datatype: dt
602
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
602
603
  });
603
604
 
604
605
  // workspace
@@ -665,12 +666,12 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
665
666
  var avalues = a._values;
666
667
  var aindex = a._index;
667
668
  var aptr = a._ptr;
668
- var adt = a._datatype;
669
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
669
670
  // b sparse
670
671
  var bvalues = b._values;
671
672
  var bindex = b._index;
672
673
  var bptr = b._ptr;
673
- var bdt = b._datatype;
674
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
674
675
 
675
676
  // rows & columns
676
677
  var arows = a._size[0];
@@ -686,7 +687,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
686
687
  var mf = multiplyScalar;
687
688
 
688
689
  // process data types
689
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
690
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
690
691
  // datatype
691
692
  dt = adt;
692
693
  // find signatures that matches (dt, dt)
@@ -704,7 +705,7 @@ var createMultiply = exports.createMultiply = /* #__PURE__ */(0, _factory.factor
704
705
  index: cindex,
705
706
  ptr: cptr,
706
707
  size: [arows, bcolumns],
707
- datatype: dt
708
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
708
709
  });
709
710
 
710
711
  // workspace
@@ -6,19 +6,22 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.createRound = void 0;
7
7
  var _factory = require("../../utils/factory.js");
8
8
  var _collection = require("../../utils/collection.js");
9
+ var _number = require("../../utils/number.js");
10
+ var _nearlyEqual = require("../../utils/bignumber/nearlyEqual.js");
9
11
  var _matAlgo11xS0s = require("../../type/matrix/utils/matAlgo11xS0s.js");
10
12
  var _matAlgo12xSfs = require("../../type/matrix/utils/matAlgo12xSfs.js");
11
13
  var _matAlgo14xDs = require("../../type/matrix/utils/matAlgo14xDs.js");
12
14
  var _index = require("../../plain/number/index.js");
13
15
  var NO_INT = 'Number of decimals in function round must be an integer';
14
16
  var name = 'round';
15
- var dependencies = ['typed', 'matrix', 'equalScalar', 'zeros', 'BigNumber', 'DenseMatrix'];
17
+ var dependencies = ['typed', 'config', 'matrix', 'equalScalar', 'zeros', 'BigNumber', 'DenseMatrix'];
16
18
  var createRound = exports.createRound = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
19
  var typed = _ref.typed,
20
+ config = _ref.config,
18
21
  matrix = _ref.matrix,
19
22
  equalScalar = _ref.equalScalar,
20
23
  zeros = _ref.zeros,
21
- BigNumber = _ref.BigNumber,
24
+ _BigNumber = _ref.BigNumber,
22
25
  DenseMatrix = _ref.DenseMatrix;
23
26
  var matAlgo11xS0s = (0, _matAlgo11xS0s.createMatAlgo11xS0s)({
24
27
  typed: typed,
@@ -31,6 +34,9 @@ var createRound = exports.createRound = /* #__PURE__ */(0, _factory.factory)(nam
31
34
  var matAlgo14xDs = (0, _matAlgo14xDs.createMatAlgo14xDs)({
32
35
  typed: typed
33
36
  });
37
+ function toExponent(epsilon) {
38
+ return Math.abs((0, _number.splitNumber)(epsilon).exponent);
39
+ }
34
40
 
35
41
  /**
36
42
  * Round a value towards the nearest rounded value.
@@ -77,13 +83,27 @@ var createRound = exports.createRound = /* #__PURE__ */(0, _factory.factory)(nam
77
83
  * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
78
84
  */
79
85
  return typed(name, {
80
- number: _index.roundNumber,
81
- 'number, number': _index.roundNumber,
86
+ number: function number(x) {
87
+ // Handle round off errors by first rounding to epsilon precision
88
+ var xEpsilon = (0, _index.roundNumber)(x, toExponent(config.epsilon));
89
+ var xSelected = (0, _number.nearlyEqual)(x, xEpsilon, config.epsilon) ? xEpsilon : x;
90
+ return (0, _index.roundNumber)(xSelected);
91
+ },
92
+ 'number, number': function numberNumber(x, n) {
93
+ // Same as number: unless user specifies more decimals than epsilon
94
+ var epsilonExponent = toExponent(config.epsilon);
95
+ if (n >= epsilonExponent) {
96
+ return (0, _index.roundNumber)(x, n);
97
+ }
98
+ var xEpsilon = (0, _index.roundNumber)(x, epsilonExponent);
99
+ var xSelected = (0, _number.nearlyEqual)(x, xEpsilon, config.epsilon) ? xEpsilon : x;
100
+ return (0, _index.roundNumber)(xSelected, n);
101
+ },
82
102
  'number, BigNumber': function numberBigNumber(x, n) {
83
103
  if (!n.isInteger()) {
84
104
  throw new TypeError(NO_INT);
85
105
  }
86
- return new BigNumber(x).toDecimalPlaces(n.toNumber());
106
+ return new _BigNumber(x).toDecimalPlaces(n.toNumber());
87
107
  },
88
108
  Complex: function Complex(x) {
89
109
  return x.round();
@@ -102,13 +122,24 @@ var createRound = exports.createRound = /* #__PURE__ */(0, _factory.factory)(nam
102
122
  return x.round(_n);
103
123
  },
104
124
  BigNumber: function BigNumber(x) {
105
- return x.toDecimalPlaces(0);
125
+ // Handle round off errors by first rounding to epsilon precision
126
+ var xEpsilon = new _BigNumber(x).toDecimalPlaces(toExponent(config.epsilon));
127
+ var xSelected = (0, _nearlyEqual.nearlyEqual)(x, xEpsilon, config.epsilon) ? xEpsilon : x;
128
+ return xSelected.toDecimalPlaces(0);
106
129
  },
107
130
  'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {
108
131
  if (!n.isInteger()) {
109
132
  throw new TypeError(NO_INT);
110
133
  }
111
- return x.toDecimalPlaces(n.toNumber());
134
+
135
+ // Same as BigNumber: unless user specifies more decimals than epsilon
136
+ var epsilonExponent = toExponent(config.epsilon);
137
+ if (n >= epsilonExponent) {
138
+ return x.toDecimalPlaces(n.toNumber());
139
+ }
140
+ var xEpsilon = x.toDecimalPlaces(epsilonExponent);
141
+ var xSelected = (0, _nearlyEqual.nearlyEqual)(x, xEpsilon, config.epsilon) ? xEpsilon : x;
142
+ return xSelected.toDecimalPlaces(n.toNumber());
112
143
  },
113
144
  Fraction: function Fraction(x) {
114
145
  return x.round();
@@ -66,9 +66,9 @@ var createDot = exports.createDot = /* #__PURE__ */(0, _factory.factory)(name, d
66
66
  function _denseDot(a, b) {
67
67
  var N = _validateDim(a, b);
68
68
  var adata = (0, _is.isMatrix)(a) ? a._data : a;
69
- var adt = (0, _is.isMatrix)(a) ? a._datatype : undefined;
69
+ var adt = (0, _is.isMatrix)(a) ? a._datatype || a.getDataType() : undefined;
70
70
  var bdata = (0, _is.isMatrix)(b) ? b._data : b;
71
- var bdt = (0, _is.isMatrix)(b) ? b._datatype : undefined;
71
+ var bdt = (0, _is.isMatrix)(b) ? b._datatype || b.getDataType() : undefined;
72
72
 
73
73
  // are these 2-dimensional column vectors? (as opposed to 1-dimensional vectors)
74
74
  var aIsColumn = _size(a).length === 2;
@@ -77,7 +77,7 @@ var createDot = exports.createDot = /* #__PURE__ */(0, _factory.factory)(name, d
77
77
  var mul = multiplyScalar;
78
78
 
79
79
  // process data types
80
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
80
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
81
81
  var dt = adt;
82
82
  // find signatures that matches (dt, dt)
83
83
  add = typed.find(addScalar, [dt, dt]);
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 12.3.2
10
- * @date 2024-02-08
9
+ * @version 12.4.1
10
+ * @date 2024-03-13
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2024 Jos de Jong <wjosdejong@gmail.com>
@@ -33,13 +33,13 @@ var createMatAlgo01xDSid = exports.createMatAlgo01xDSid = /* #__PURE__ */(0, _fa
33
33
  // dense matrix arrays
34
34
  var adata = denseMatrix._data;
35
35
  var asize = denseMatrix._size;
36
- var adt = denseMatrix._datatype;
36
+ var adt = denseMatrix._datatype || denseMatrix.getDataType();
37
37
  // sparse matrix arrays
38
38
  var bvalues = sparseMatrix._values;
39
39
  var bindex = sparseMatrix._index;
40
40
  var bptr = sparseMatrix._ptr;
41
41
  var bsize = sparseMatrix._size;
42
- var bdt = sparseMatrix._datatype;
42
+ var bdt = sparseMatrix._datatype || sparseMatrix._data === undefined ? sparseMatrix._datatype : sparseMatrix.getDataType();
43
43
 
44
44
  // validate dimensions
45
45
  if (asize.length !== bsize.length) {
@@ -61,7 +61,7 @@ var createMatAlgo01xDSid = exports.createMatAlgo01xDSid = /* #__PURE__ */(0, _fa
61
61
  var columns = asize[1];
62
62
 
63
63
  // process data types
64
- var dt = typeof adt === 'string' && adt === bdt ? adt : undefined;
64
+ var dt = typeof adt === 'string' && adt !== 'mixed' && adt === bdt ? adt : undefined;
65
65
  // callback function
66
66
  var cf = dt ? typed.find(callback, [dt, dt]) : callback;
67
67
 
@@ -110,7 +110,7 @@ var createMatAlgo01xDSid = exports.createMatAlgo01xDSid = /* #__PURE__ */(0, _fa
110
110
  return denseMatrix.createDenseMatrix({
111
111
  data: cdata,
112
112
  size: [rows, columns],
113
- datatype: dt
113
+ datatype: adt === denseMatrix._datatype && bdt === sparseMatrix._datatype ? dt : undefined
114
114
  });
115
115
  };
116
116
  });
@@ -34,13 +34,13 @@ var createMatAlgo02xDS0 = exports.createMatAlgo02xDS0 = /* #__PURE__ */(0, _fact
34
34
  // dense matrix arrays
35
35
  var adata = denseMatrix._data;
36
36
  var asize = denseMatrix._size;
37
- var adt = denseMatrix._datatype;
37
+ var adt = denseMatrix._datatype || denseMatrix.getDataType();
38
38
  // sparse matrix arrays
39
39
  var bvalues = sparseMatrix._values;
40
40
  var bindex = sparseMatrix._index;
41
41
  var bptr = sparseMatrix._ptr;
42
42
  var bsize = sparseMatrix._size;
43
- var bdt = sparseMatrix._datatype;
43
+ var bdt = sparseMatrix._datatype || sparseMatrix._data === undefined ? sparseMatrix._datatype : sparseMatrix.getDataType();
44
44
 
45
45
  // validate dimensions
46
46
  if (asize.length !== bsize.length) {
@@ -71,7 +71,7 @@ var createMatAlgo02xDS0 = exports.createMatAlgo02xDS0 = /* #__PURE__ */(0, _fact
71
71
  var cf = callback;
72
72
 
73
73
  // process data types
74
- if (typeof adt === 'string' && adt === bdt) {
74
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
75
75
  // datatype
76
76
  dt = adt;
77
77
  // find signature that matches (dt, dt)
@@ -114,7 +114,7 @@ var createMatAlgo02xDS0 = exports.createMatAlgo02xDS0 = /* #__PURE__ */(0, _fact
114
114
  index: cindex,
115
115
  ptr: cptr,
116
116
  size: [rows, columns],
117
- datatype: dt
117
+ datatype: adt === denseMatrix._datatype && bdt === sparseMatrix._datatype ? dt : undefined
118
118
  });
119
119
  };
120
120
  });
@@ -33,13 +33,13 @@ var createMatAlgo03xDSf = exports.createMatAlgo03xDSf = /* #__PURE__ */(0, _fact
33
33
  // dense matrix arrays
34
34
  var adata = denseMatrix._data;
35
35
  var asize = denseMatrix._size;
36
- var adt = denseMatrix._datatype;
36
+ var adt = denseMatrix._datatype || denseMatrix.getDataType();
37
37
  // sparse matrix arrays
38
38
  var bvalues = sparseMatrix._values;
39
39
  var bindex = sparseMatrix._index;
40
40
  var bptr = sparseMatrix._ptr;
41
41
  var bsize = sparseMatrix._size;
42
- var bdt = sparseMatrix._datatype;
42
+ var bdt = sparseMatrix._datatype || sparseMatrix._data === undefined ? sparseMatrix._datatype : sparseMatrix.getDataType();
43
43
 
44
44
  // validate dimensions
45
45
  if (asize.length !== bsize.length) {
@@ -68,7 +68,7 @@ var createMatAlgo03xDSf = exports.createMatAlgo03xDSf = /* #__PURE__ */(0, _fact
68
68
  var cf = callback;
69
69
 
70
70
  // process data types
71
- if (typeof adt === 'string' && adt === bdt) {
71
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
72
72
  // datatype
73
73
  dt = adt;
74
74
  // convert 0 to the same datatype
@@ -120,7 +120,7 @@ var createMatAlgo03xDSf = exports.createMatAlgo03xDSf = /* #__PURE__ */(0, _fact
120
120
  return denseMatrix.createDenseMatrix({
121
121
  data: cdata,
122
122
  size: [rows, columns],
123
- datatype: dt
123
+ datatype: adt === denseMatrix._datatype && bdt === sparseMatrix._datatype ? dt : undefined
124
124
  });
125
125
  };
126
126
  });
@@ -35,13 +35,13 @@ var createMatAlgo04xSidSid = exports.createMatAlgo04xSidSid = /* #__PURE__ */(0,
35
35
  var aindex = a._index;
36
36
  var aptr = a._ptr;
37
37
  var asize = a._size;
38
- var adt = a._datatype;
38
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
39
39
  // sparse matrix arrays
40
40
  var bvalues = b._values;
41
41
  var bindex = b._index;
42
42
  var bptr = b._ptr;
43
43
  var bsize = b._size;
44
- var bdt = b._datatype;
44
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
45
45
 
46
46
  // validate dimensions
47
47
  if (asize.length !== bsize.length) {
@@ -67,7 +67,7 @@ var createMatAlgo04xSidSid = exports.createMatAlgo04xSidSid = /* #__PURE__ */(0,
67
67
  var cf = callback;
68
68
 
69
69
  // process data types
70
- if (typeof adt === 'string' && adt === bdt) {
70
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
71
71
  // datatype
72
72
  dt = adt;
73
73
  // find signature that matches (dt, dt)
@@ -177,7 +177,7 @@ var createMatAlgo04xSidSid = exports.createMatAlgo04xSidSid = /* #__PURE__ */(0,
177
177
  index: cindex,
178
178
  ptr: cptr,
179
179
  size: [rows, columns],
180
- datatype: dt
180
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
181
181
  });
182
182
  };
183
183
  });
@@ -35,13 +35,13 @@ var createMatAlgo05xSfSf = exports.createMatAlgo05xSfSf = /* #__PURE__ */(0, _fa
35
35
  var aindex = a._index;
36
36
  var aptr = a._ptr;
37
37
  var asize = a._size;
38
- var adt = a._datatype;
38
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
39
39
  // sparse matrix arrays
40
40
  var bvalues = b._values;
41
41
  var bindex = b._index;
42
42
  var bptr = b._ptr;
43
43
  var bsize = b._size;
44
- var bdt = b._datatype;
44
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
45
45
 
46
46
  // validate dimensions
47
47
  if (asize.length !== bsize.length) {
@@ -67,7 +67,7 @@ var createMatAlgo05xSfSf = exports.createMatAlgo05xSfSf = /* #__PURE__ */(0, _fa
67
67
  var cf = callback;
68
68
 
69
69
  // process data types
70
- if (typeof adt === 'string' && adt === bdt) {
70
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
71
71
  // datatype
72
72
  dt = adt;
73
73
  // find signature that matches (dt, dt)
@@ -169,7 +169,7 @@ var createMatAlgo05xSfSf = exports.createMatAlgo05xSfSf = /* #__PURE__ */(0, _fa
169
169
  index: cindex,
170
170
  ptr: cptr,
171
171
  size: [rows, columns],
172
- datatype: dt
172
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
173
173
  });
174
174
  };
175
175
  });
@@ -34,11 +34,11 @@ var createMatAlgo06xS0S0 = exports.createMatAlgo06xS0S0 = /* #__PURE__ */(0, _fa
34
34
  // sparse matrix arrays
35
35
  var avalues = a._values;
36
36
  var asize = a._size;
37
- var adt = a._datatype;
37
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
38
38
  // sparse matrix arrays
39
39
  var bvalues = b._values;
40
40
  var bsize = b._size;
41
- var bdt = b._datatype;
41
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
42
42
 
43
43
  // validate dimensions
44
44
  if (asize.length !== bsize.length) {
@@ -64,7 +64,7 @@ var createMatAlgo06xS0S0 = exports.createMatAlgo06xS0S0 = /* #__PURE__ */(0, _fa
64
64
  var cf = callback;
65
65
 
66
66
  // process data types
67
- if (typeof adt === 'string' && adt === bdt) {
67
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
68
68
  // datatype
69
69
  dt = adt;
70
70
  // find signature that matches (dt, dt)
@@ -151,7 +151,7 @@ var createMatAlgo06xS0S0 = exports.createMatAlgo06xS0S0 = /* #__PURE__ */(0, _fa
151
151
  index: cindex,
152
152
  ptr: cptr,
153
153
  size: [rows, columns],
154
- datatype: dt
154
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
155
155
  });
156
156
  };
157
157
  });
@@ -28,10 +28,10 @@ var createMatAlgo07xSSf = exports.createMatAlgo07xSSf = /* #__PURE__ */(0, _fact
28
28
  return function matAlgo07xSSf(a, b, callback) {
29
29
  // sparse matrix arrays
30
30
  var asize = a._size;
31
- var adt = a._datatype;
31
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
32
32
  // sparse matrix arrays
33
33
  var bsize = b._size;
34
- var bdt = b._datatype;
34
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
35
35
 
36
36
  // validate dimensions
37
37
  if (asize.length !== bsize.length) {
@@ -55,7 +55,7 @@ var createMatAlgo07xSSf = exports.createMatAlgo07xSSf = /* #__PURE__ */(0, _fact
55
55
  var cf = callback;
56
56
 
57
57
  // process data types
58
- if (typeof adt === 'string' && adt === bdt) {
58
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
59
59
  // datatype
60
60
  dt = adt;
61
61
  // convert 0 to the same datatype
@@ -103,7 +103,7 @@ var createMatAlgo07xSSf = exports.createMatAlgo07xSSf = /* #__PURE__ */(0, _fact
103
103
  return new DenseMatrix({
104
104
  data: cdata,
105
105
  size: [rows, columns],
106
- datatype: dt
106
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
107
107
  });
108
108
  };
109
109
  function _scatter(m, j, w, x, mark) {
@@ -35,13 +35,13 @@ var createMatAlgo08xS0Sid = exports.createMatAlgo08xS0Sid = /* #__PURE__ */(0, _
35
35
  var aindex = a._index;
36
36
  var aptr = a._ptr;
37
37
  var asize = a._size;
38
- var adt = a._datatype;
38
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
39
39
  // sparse matrix arrays
40
40
  var bvalues = b._values;
41
41
  var bindex = b._index;
42
42
  var bptr = b._ptr;
43
43
  var bsize = b._size;
44
- var bdt = b._datatype;
44
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
45
45
 
46
46
  // validate dimensions
47
47
  if (asize.length !== bsize.length) {
@@ -72,7 +72,7 @@ var createMatAlgo08xS0Sid = exports.createMatAlgo08xS0Sid = /* #__PURE__ */(0, _
72
72
  var cf = callback;
73
73
 
74
74
  // process data types
75
- if (typeof adt === 'string' && adt === bdt) {
75
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
76
76
  // datatype
77
77
  dt = adt;
78
78
  // find signature that matches (dt, dt)
@@ -152,7 +152,7 @@ var createMatAlgo08xS0Sid = exports.createMatAlgo08xS0Sid = /* #__PURE__ */(0, _
152
152
  index: cindex,
153
153
  ptr: cptr,
154
154
  size: [rows, columns],
155
- datatype: dt
155
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
156
156
  });
157
157
  };
158
158
  });
@@ -35,13 +35,13 @@ var createMatAlgo09xS0Sf = exports.createMatAlgo09xS0Sf = /* #__PURE__ */(0, _fa
35
35
  var aindex = a._index;
36
36
  var aptr = a._ptr;
37
37
  var asize = a._size;
38
- var adt = a._datatype;
38
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
39
39
  // sparse matrix arrays
40
40
  var bvalues = b._values;
41
41
  var bindex = b._index;
42
42
  var bptr = b._ptr;
43
43
  var bsize = b._size;
44
- var bdt = b._datatype;
44
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
45
45
 
46
46
  // validate dimensions
47
47
  if (asize.length !== bsize.length) {
@@ -67,7 +67,7 @@ var createMatAlgo09xS0Sf = exports.createMatAlgo09xS0Sf = /* #__PURE__ */(0, _fa
67
67
  var cf = callback;
68
68
 
69
69
  // process data types
70
- if (typeof adt === 'string' && adt === bdt) {
70
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
71
71
  // datatype
72
72
  dt = adt;
73
73
  // find signature that matches (dt, dt)
@@ -140,7 +140,7 @@ var createMatAlgo09xS0Sf = exports.createMatAlgo09xS0Sf = /* #__PURE__ */(0, _fa
140
140
  index: cindex,
141
141
  ptr: cptr,
142
142
  size: [rows, columns],
143
- datatype: dt
143
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
144
144
  });
145
145
  };
146
146
  });