mathjs 12.3.1 → 12.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. package/HISTORY.md +23 -0
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +2 -2
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/entry/pureFunctionsAny.generated.js +1 -0
  6. package/lib/cjs/expression/node/OperatorNode.js +2 -1
  7. package/lib/cjs/expression/parse.js +8 -4
  8. package/lib/cjs/expression/transform/utils/compileInlineExpression.js +5 -4
  9. package/lib/cjs/function/arithmetic/multiply.js +30 -29
  10. package/lib/cjs/function/arithmetic/round.js +38 -7
  11. package/lib/cjs/function/matrix/dot.js +3 -3
  12. package/lib/cjs/header.js +2 -2
  13. package/lib/cjs/type/matrix/utils/matAlgo01xDSid.js +4 -4
  14. package/lib/cjs/type/matrix/utils/matAlgo02xDS0.js +4 -4
  15. package/lib/cjs/type/matrix/utils/matAlgo03xDSf.js +4 -4
  16. package/lib/cjs/type/matrix/utils/matAlgo04xSidSid.js +4 -4
  17. package/lib/cjs/type/matrix/utils/matAlgo05xSfSf.js +4 -4
  18. package/lib/cjs/type/matrix/utils/matAlgo06xS0S0.js +4 -4
  19. package/lib/cjs/type/matrix/utils/matAlgo07xSSf.js +4 -4
  20. package/lib/cjs/type/matrix/utils/matAlgo08xS0Sid.js +4 -4
  21. package/lib/cjs/type/matrix/utils/matAlgo09xS0Sf.js +4 -4
  22. package/lib/cjs/utils/map.js +176 -14
  23. package/lib/cjs/utils/scope.js +4 -10
  24. package/lib/cjs/version.js +1 -1
  25. package/lib/esm/entry/pureFunctionsAny.generated.js +1 -0
  26. package/lib/esm/expression/node/OperatorNode.js +2 -1
  27. package/lib/esm/expression/parse.js +8 -4
  28. package/lib/esm/expression/transform/utils/compileInlineExpression.js +5 -4
  29. package/lib/esm/function/arithmetic/multiply.js +30 -29
  30. package/lib/esm/function/arithmetic/round.js +38 -7
  31. package/lib/esm/function/matrix/dot.js +3 -3
  32. package/lib/esm/type/matrix/utils/matAlgo01xDSid.js +4 -4
  33. package/lib/esm/type/matrix/utils/matAlgo02xDS0.js +4 -4
  34. package/lib/esm/type/matrix/utils/matAlgo03xDSf.js +4 -4
  35. package/lib/esm/type/matrix/utils/matAlgo04xSidSid.js +4 -4
  36. package/lib/esm/type/matrix/utils/matAlgo05xSfSf.js +4 -4
  37. package/lib/esm/type/matrix/utils/matAlgo06xS0S0.js +4 -4
  38. package/lib/esm/type/matrix/utils/matAlgo07xSSf.js +4 -4
  39. package/lib/esm/type/matrix/utils/matAlgo08xS0Sid.js +4 -4
  40. package/lib/esm/type/matrix/utils/matAlgo09xS0Sf.js +4 -4
  41. package/lib/esm/utils/map.js +99 -1
  42. package/lib/esm/utils/scope.js +5 -11
  43. package/lib/esm/version.js +1 -1
  44. package/package.json +9 -9
  45. package/types/index.d.ts +5 -5
@@ -115,11 +115,11 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
115
115
  // a dense
116
116
  var adata = a._data;
117
117
  var asize = a._size;
118
- var adt = a._datatype;
118
+ var adt = a._datatype || a.getDataType();
119
119
  // b dense
120
120
  var bdata = b._data;
121
121
  var bsize = b._size;
122
- var bdt = b._datatype;
122
+ var bdt = b._datatype || b.getDataType();
123
123
  // rows & columns
124
124
  var alength = asize[0];
125
125
  var bcolumns = bsize[1];
@@ -132,7 +132,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
132
132
  var mf = multiplyScalar;
133
133
 
134
134
  // process data types
135
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
135
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
136
136
  // datatype
137
137
  dt = adt;
138
138
  // find signatures that matches (dt, dt)
@@ -159,7 +159,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
159
159
  return a.createDenseMatrix({
160
160
  data: c,
161
161
  size: [bcolumns],
162
- datatype: dt
162
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
163
163
  });
164
164
  }
165
165
 
@@ -203,10 +203,10 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
203
203
  // a dense
204
204
  var adata = a._data;
205
205
  var asize = a._size;
206
- var adt = a._datatype;
206
+ var adt = a._datatype || a.getDataType();
207
207
  // b dense
208
208
  var bdata = b._data;
209
- var bdt = b._datatype;
209
+ var bdt = b._datatype || b.getDataType();
210
210
  // rows & columns
211
211
  var arows = asize[0];
212
212
  var acolumns = asize[1];
@@ -219,7 +219,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
219
219
  var mf = multiplyScalar;
220
220
 
221
221
  // process data types
222
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
222
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
223
223
  // datatype
224
224
  dt = adt;
225
225
  // find signatures that matches (dt, dt)
@@ -248,7 +248,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
248
248
  return a.createDenseMatrix({
249
249
  data: c,
250
250
  size: [arows],
251
- datatype: dt
251
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
252
252
  });
253
253
  }
254
254
 
@@ -261,14 +261,15 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
261
261
  * @return {Matrix} DenseMatrix (MxC)
262
262
  */
263
263
  function _multiplyDenseMatrixDenseMatrix(a, b) {
264
+ // getDataType()
264
265
  // a dense
265
266
  var adata = a._data;
266
267
  var asize = a._size;
267
- var adt = a._datatype;
268
+ var adt = a._datatype || a.getDataType();
268
269
  // b dense
269
270
  var bdata = b._data;
270
271
  var bsize = b._size;
271
- var bdt = b._datatype;
272
+ var bdt = b._datatype || b.getDataType();
272
273
  // rows & columns
273
274
  var arows = asize[0];
274
275
  var acolumns = asize[1];
@@ -282,7 +283,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
282
283
  var mf = multiplyScalar;
283
284
 
284
285
  // process data types
285
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
286
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed' && adt !== 'mixed') {
286
287
  // datatype
287
288
  dt = adt;
288
289
  // find signatures that matches (dt, dt)
@@ -316,7 +317,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
316
317
  return a.createDenseMatrix({
317
318
  data: c,
318
319
  size: [arows, bcolumns],
319
- datatype: dt
320
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
320
321
  });
321
322
  }
322
323
 
@@ -332,13 +333,13 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
332
333
  // a dense
333
334
  var adata = a._data;
334
335
  var asize = a._size;
335
- var adt = a._datatype;
336
+ var adt = a._datatype || a.getDataType();
336
337
  // b sparse
337
338
  var bvalues = b._values;
338
339
  var bindex = b._index;
339
340
  var bptr = b._ptr;
340
341
  var bsize = b._size;
341
- var bdt = b._datatype;
342
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
342
343
  // validate b matrix
343
344
  if (!bvalues) {
344
345
  throw new Error('Cannot multiply Dense Matrix times Pattern only Matrix');
@@ -359,7 +360,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
359
360
  var zero = 0;
360
361
 
361
362
  // process data types
362
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
363
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
363
364
  // datatype
364
365
  dt = adt;
365
366
  // find signatures that matches (dt, dt)
@@ -380,7 +381,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
380
381
  index: cindex,
381
382
  ptr: cptr,
382
383
  size: [arows, bcolumns],
383
- datatype: dt
384
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
384
385
  });
385
386
 
386
387
  // loop b columns
@@ -444,14 +445,14 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
444
445
  var avalues = a._values;
445
446
  var aindex = a._index;
446
447
  var aptr = a._ptr;
447
- var adt = a._datatype;
448
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
448
449
  // validate a matrix
449
450
  if (!avalues) {
450
451
  throw new Error('Cannot multiply Pattern only Matrix times Dense Matrix');
451
452
  }
452
453
  // b dense
453
454
  var bdata = b._data;
454
- var bdt = b._datatype;
455
+ var bdt = b._datatype || b.getDataType();
455
456
  // rows & columns
456
457
  var arows = a._size[0];
457
458
  var brows = b._size[0];
@@ -472,7 +473,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
472
473
  var zero = 0;
473
474
 
474
475
  // process data types
475
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
476
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
476
477
  // datatype
477
478
  dt = adt;
478
479
  // find signatures that matches (dt, dt)
@@ -525,13 +526,13 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
525
526
  // update ptr
526
527
  cptr[1] = cindex.length;
527
528
 
528
- // return sparse matrix
529
+ // matrix to return
529
530
  return a.createSparseMatrix({
530
531
  values: cvalues,
531
532
  index: cindex,
532
533
  ptr: cptr,
533
534
  size: [arows, 1],
534
- datatype: dt
535
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
535
536
  });
536
537
  }
537
538
 
@@ -548,14 +549,14 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
548
549
  var avalues = a._values;
549
550
  var aindex = a._index;
550
551
  var aptr = a._ptr;
551
- var adt = a._datatype;
552
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
552
553
  // validate a matrix
553
554
  if (!avalues) {
554
555
  throw new Error('Cannot multiply Pattern only Matrix times Dense Matrix');
555
556
  }
556
557
  // b dense
557
558
  var bdata = b._data;
558
- var bdt = b._datatype;
559
+ var bdt = b._datatype || b.getDataType();
559
560
  // rows & columns
560
561
  var arows = a._size[0];
561
562
  var brows = b._size[0];
@@ -573,7 +574,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
573
574
  var zero = 0;
574
575
 
575
576
  // process data types
576
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
577
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
577
578
  // datatype
578
579
  dt = adt;
579
580
  // find signatures that matches (dt, dt)
@@ -594,7 +595,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
594
595
  index: cindex,
595
596
  ptr: cptr,
596
597
  size: [arows, bcolumns],
597
- datatype: dt
598
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
598
599
  });
599
600
 
600
601
  // workspace
@@ -661,12 +662,12 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
661
662
  var avalues = a._values;
662
663
  var aindex = a._index;
663
664
  var aptr = a._ptr;
664
- var adt = a._datatype;
665
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
665
666
  // b sparse
666
667
  var bvalues = b._values;
667
668
  var bindex = b._index;
668
669
  var bptr = b._ptr;
669
- var bdt = b._datatype;
670
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
670
671
 
671
672
  // rows & columns
672
673
  var arows = a._size[0];
@@ -682,7 +683,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
682
683
  var mf = multiplyScalar;
683
684
 
684
685
  // process data types
685
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
686
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
686
687
  // datatype
687
688
  dt = adt;
688
689
  // find signatures that matches (dt, dt)
@@ -700,7 +701,7 @@ export var createMultiply = /* #__PURE__ */factory(name, dependencies, _ref => {
700
701
  index: cindex,
701
702
  ptr: cptr,
702
703
  size: [arows, bcolumns],
703
- datatype: dt
704
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
704
705
  });
705
706
 
706
707
  // workspace
@@ -1,19 +1,22 @@
1
1
  import { factory } from '../../utils/factory.js';
2
2
  import { deepMap } from '../../utils/collection.js';
3
+ import { nearlyEqual, splitNumber } from '../../utils/number.js';
4
+ import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';
3
5
  import { createMatAlgo11xS0s } from '../../type/matrix/utils/matAlgo11xS0s.js';
4
6
  import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
5
7
  import { createMatAlgo14xDs } from '../../type/matrix/utils/matAlgo14xDs.js';
6
8
  import { roundNumber } from '../../plain/number/index.js';
7
9
  var NO_INT = 'Number of decimals in function round must be an integer';
8
10
  var name = 'round';
9
- var dependencies = ['typed', 'matrix', 'equalScalar', 'zeros', 'BigNumber', 'DenseMatrix'];
11
+ var dependencies = ['typed', 'config', 'matrix', 'equalScalar', 'zeros', 'BigNumber', 'DenseMatrix'];
10
12
  export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
11
13
  var {
12
14
  typed,
15
+ config,
13
16
  matrix,
14
17
  equalScalar,
15
18
  zeros,
16
- BigNumber,
19
+ BigNumber: _BigNumber,
17
20
  DenseMatrix
18
21
  } = _ref;
19
22
  var matAlgo11xS0s = createMatAlgo11xS0s({
@@ -27,6 +30,9 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
27
30
  var matAlgo14xDs = createMatAlgo14xDs({
28
31
  typed
29
32
  });
33
+ function toExponent(epsilon) {
34
+ return Math.abs(splitNumber(epsilon).exponent);
35
+ }
30
36
 
31
37
  /**
32
38
  * Round a value towards the nearest rounded value.
@@ -73,13 +79,27 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
73
79
  * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
74
80
  */
75
81
  return typed(name, {
76
- number: roundNumber,
77
- 'number, number': roundNumber,
82
+ number: function number(x) {
83
+ // Handle round off errors by first rounding to epsilon precision
84
+ var xEpsilon = roundNumber(x, toExponent(config.epsilon));
85
+ var xSelected = nearlyEqual(x, xEpsilon, config.epsilon) ? xEpsilon : x;
86
+ return roundNumber(xSelected);
87
+ },
88
+ 'number, number': function numberNumber(x, n) {
89
+ // Same as number: unless user specifies more decimals than epsilon
90
+ var epsilonExponent = toExponent(config.epsilon);
91
+ if (n >= epsilonExponent) {
92
+ return roundNumber(x, n);
93
+ }
94
+ var xEpsilon = roundNumber(x, epsilonExponent);
95
+ var xSelected = nearlyEqual(x, xEpsilon, config.epsilon) ? xEpsilon : x;
96
+ return roundNumber(xSelected, n);
97
+ },
78
98
  'number, BigNumber': function numberBigNumber(x, n) {
79
99
  if (!n.isInteger()) {
80
100
  throw new TypeError(NO_INT);
81
101
  }
82
- return new BigNumber(x).toDecimalPlaces(n.toNumber());
102
+ return new _BigNumber(x).toDecimalPlaces(n.toNumber());
83
103
  },
84
104
  Complex: function Complex(x) {
85
105
  return x.round();
@@ -98,13 +118,24 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
98
118
  return x.round(_n);
99
119
  },
100
120
  BigNumber: function BigNumber(x) {
101
- return x.toDecimalPlaces(0);
121
+ // Handle round off errors by first rounding to epsilon precision
122
+ var xEpsilon = new _BigNumber(x).toDecimalPlaces(toExponent(config.epsilon));
123
+ var xSelected = bigNearlyEqual(x, xEpsilon, config.epsilon) ? xEpsilon : x;
124
+ return xSelected.toDecimalPlaces(0);
102
125
  },
103
126
  'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {
104
127
  if (!n.isInteger()) {
105
128
  throw new TypeError(NO_INT);
106
129
  }
107
- return x.toDecimalPlaces(n.toNumber());
130
+
131
+ // Same as BigNumber: unless user specifies more decimals than epsilon
132
+ var epsilonExponent = toExponent(config.epsilon);
133
+ if (n >= epsilonExponent) {
134
+ return x.toDecimalPlaces(n.toNumber());
135
+ }
136
+ var xEpsilon = x.toDecimalPlaces(epsilonExponent);
137
+ var xSelected = bigNearlyEqual(x, xEpsilon, config.epsilon) ? xEpsilon : x;
138
+ return xSelected.toDecimalPlaces(n.toNumber());
108
139
  },
109
140
  Fraction: function Fraction(x) {
110
141
  return x.round();
@@ -62,9 +62,9 @@ export var createDot = /* #__PURE__ */factory(name, dependencies, _ref => {
62
62
  function _denseDot(a, b) {
63
63
  var N = _validateDim(a, b);
64
64
  var adata = isMatrix(a) ? a._data : a;
65
- var adt = isMatrix(a) ? a._datatype : undefined;
65
+ var adt = isMatrix(a) ? a._datatype || a.getDataType() : undefined;
66
66
  var bdata = isMatrix(b) ? b._data : b;
67
- var bdt = isMatrix(b) ? b._datatype : undefined;
67
+ var bdt = isMatrix(b) ? b._datatype || b.getDataType() : undefined;
68
68
 
69
69
  // are these 2-dimensional column vectors? (as opposed to 1-dimensional vectors)
70
70
  var aIsColumn = _size(a).length === 2;
@@ -73,7 +73,7 @@ export var createDot = /* #__PURE__ */factory(name, dependencies, _ref => {
73
73
  var mul = multiplyScalar;
74
74
 
75
75
  // process data types
76
- if (adt && bdt && adt === bdt && typeof adt === 'string') {
76
+ if (adt && bdt && adt === bdt && typeof adt === 'string' && adt !== 'mixed') {
77
77
  var dt = adt;
78
78
  // find signatures that matches (dt, dt)
79
79
  add = typed.find(addScalar, [dt, dt]);
@@ -29,13 +29,13 @@ export var createMatAlgo01xDSid = /* #__PURE__ */factory(name, dependencies, _re
29
29
  // dense matrix arrays
30
30
  var adata = denseMatrix._data;
31
31
  var asize = denseMatrix._size;
32
- var adt = denseMatrix._datatype;
32
+ var adt = denseMatrix._datatype || denseMatrix.getDataType();
33
33
  // sparse matrix arrays
34
34
  var bvalues = sparseMatrix._values;
35
35
  var bindex = sparseMatrix._index;
36
36
  var bptr = sparseMatrix._ptr;
37
37
  var bsize = sparseMatrix._size;
38
- var bdt = sparseMatrix._datatype;
38
+ var bdt = sparseMatrix._datatype || sparseMatrix._data === undefined ? sparseMatrix._datatype : sparseMatrix.getDataType();
39
39
 
40
40
  // validate dimensions
41
41
  if (asize.length !== bsize.length) {
@@ -57,7 +57,7 @@ export var createMatAlgo01xDSid = /* #__PURE__ */factory(name, dependencies, _re
57
57
  var columns = asize[1];
58
58
 
59
59
  // process data types
60
- var dt = typeof adt === 'string' && adt === bdt ? adt : undefined;
60
+ var dt = typeof adt === 'string' && adt !== 'mixed' && adt === bdt ? adt : undefined;
61
61
  // callback function
62
62
  var cf = dt ? typed.find(callback, [dt, dt]) : callback;
63
63
 
@@ -106,7 +106,7 @@ export var createMatAlgo01xDSid = /* #__PURE__ */factory(name, dependencies, _re
106
106
  return denseMatrix.createDenseMatrix({
107
107
  data: cdata,
108
108
  size: [rows, columns],
109
- datatype: dt
109
+ datatype: adt === denseMatrix._datatype && bdt === sparseMatrix._datatype ? dt : undefined
110
110
  });
111
111
  };
112
112
  });
@@ -30,13 +30,13 @@ export var createMatAlgo02xDS0 = /* #__PURE__ */factory(name, dependencies, _ref
30
30
  // dense matrix arrays
31
31
  var adata = denseMatrix._data;
32
32
  var asize = denseMatrix._size;
33
- var adt = denseMatrix._datatype;
33
+ var adt = denseMatrix._datatype || denseMatrix.getDataType();
34
34
  // sparse matrix arrays
35
35
  var bvalues = sparseMatrix._values;
36
36
  var bindex = sparseMatrix._index;
37
37
  var bptr = sparseMatrix._ptr;
38
38
  var bsize = sparseMatrix._size;
39
- var bdt = sparseMatrix._datatype;
39
+ var bdt = sparseMatrix._datatype || sparseMatrix._data === undefined ? sparseMatrix._datatype : sparseMatrix.getDataType();
40
40
 
41
41
  // validate dimensions
42
42
  if (asize.length !== bsize.length) {
@@ -67,7 +67,7 @@ export var createMatAlgo02xDS0 = /* #__PURE__ */factory(name, dependencies, _ref
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)
@@ -110,7 +110,7 @@ export var createMatAlgo02xDS0 = /* #__PURE__ */factory(name, dependencies, _ref
110
110
  index: cindex,
111
111
  ptr: cptr,
112
112
  size: [rows, columns],
113
- datatype: dt
113
+ datatype: adt === denseMatrix._datatype && bdt === sparseMatrix._datatype ? dt : undefined
114
114
  });
115
115
  };
116
116
  });
@@ -29,13 +29,13 @@ export var createMatAlgo03xDSf = /* #__PURE__ */factory(name, dependencies, _ref
29
29
  // dense matrix arrays
30
30
  var adata = denseMatrix._data;
31
31
  var asize = denseMatrix._size;
32
- var adt = denseMatrix._datatype;
32
+ var adt = denseMatrix._datatype || denseMatrix.getDataType();
33
33
  // sparse matrix arrays
34
34
  var bvalues = sparseMatrix._values;
35
35
  var bindex = sparseMatrix._index;
36
36
  var bptr = sparseMatrix._ptr;
37
37
  var bsize = sparseMatrix._size;
38
- var bdt = sparseMatrix._datatype;
38
+ var bdt = sparseMatrix._datatype || sparseMatrix._data === undefined ? sparseMatrix._datatype : sparseMatrix.getDataType();
39
39
 
40
40
  // validate dimensions
41
41
  if (asize.length !== bsize.length) {
@@ -64,7 +64,7 @@ export var createMatAlgo03xDSf = /* #__PURE__ */factory(name, dependencies, _ref
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
  // convert 0 to the same datatype
@@ -116,7 +116,7 @@ export var createMatAlgo03xDSf = /* #__PURE__ */factory(name, dependencies, _ref
116
116
  return denseMatrix.createDenseMatrix({
117
117
  data: cdata,
118
118
  size: [rows, columns],
119
- datatype: dt
119
+ datatype: adt === denseMatrix._datatype && bdt === sparseMatrix._datatype ? dt : undefined
120
120
  });
121
121
  };
122
122
  });
@@ -31,13 +31,13 @@ export var createMatAlgo04xSidSid = /* #__PURE__ */factory(name, dependencies, _
31
31
  var aindex = a._index;
32
32
  var aptr = a._ptr;
33
33
  var asize = a._size;
34
- var adt = a._datatype;
34
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
35
35
  // sparse matrix arrays
36
36
  var bvalues = b._values;
37
37
  var bindex = b._index;
38
38
  var bptr = b._ptr;
39
39
  var bsize = b._size;
40
- var bdt = b._datatype;
40
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
41
41
 
42
42
  // validate dimensions
43
43
  if (asize.length !== bsize.length) {
@@ -63,7 +63,7 @@ export var createMatAlgo04xSidSid = /* #__PURE__ */factory(name, dependencies, _
63
63
  var cf = callback;
64
64
 
65
65
  // process data types
66
- if (typeof adt === 'string' && adt === bdt) {
66
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
67
67
  // datatype
68
68
  dt = adt;
69
69
  // find signature that matches (dt, dt)
@@ -173,7 +173,7 @@ export var createMatAlgo04xSidSid = /* #__PURE__ */factory(name, dependencies, _
173
173
  index: cindex,
174
174
  ptr: cptr,
175
175
  size: [rows, columns],
176
- datatype: dt
176
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
177
177
  });
178
178
  };
179
179
  });
@@ -31,13 +31,13 @@ export var createMatAlgo05xSfSf = /* #__PURE__ */factory(name, dependencies, _re
31
31
  var aindex = a._index;
32
32
  var aptr = a._ptr;
33
33
  var asize = a._size;
34
- var adt = a._datatype;
34
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
35
35
  // sparse matrix arrays
36
36
  var bvalues = b._values;
37
37
  var bindex = b._index;
38
38
  var bptr = b._ptr;
39
39
  var bsize = b._size;
40
- var bdt = b._datatype;
40
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
41
41
 
42
42
  // validate dimensions
43
43
  if (asize.length !== bsize.length) {
@@ -63,7 +63,7 @@ export var createMatAlgo05xSfSf = /* #__PURE__ */factory(name, dependencies, _re
63
63
  var cf = callback;
64
64
 
65
65
  // process data types
66
- if (typeof adt === 'string' && adt === bdt) {
66
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
67
67
  // datatype
68
68
  dt = adt;
69
69
  // find signature that matches (dt, dt)
@@ -165,7 +165,7 @@ export var createMatAlgo05xSfSf = /* #__PURE__ */factory(name, dependencies, _re
165
165
  index: cindex,
166
166
  ptr: cptr,
167
167
  size: [rows, columns],
168
- datatype: dt
168
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
169
169
  });
170
170
  };
171
171
  });
@@ -30,11 +30,11 @@ export var createMatAlgo06xS0S0 = /* #__PURE__ */factory(name, dependencies, _re
30
30
  // sparse matrix arrays
31
31
  var avalues = a._values;
32
32
  var asize = a._size;
33
- var adt = a._datatype;
33
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
34
34
  // sparse matrix arrays
35
35
  var bvalues = b._values;
36
36
  var bsize = b._size;
37
- var bdt = b._datatype;
37
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
38
38
 
39
39
  // validate dimensions
40
40
  if (asize.length !== bsize.length) {
@@ -60,7 +60,7 @@ export var createMatAlgo06xS0S0 = /* #__PURE__ */factory(name, dependencies, _re
60
60
  var cf = callback;
61
61
 
62
62
  // process data types
63
- if (typeof adt === 'string' && adt === bdt) {
63
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
64
64
  // datatype
65
65
  dt = adt;
66
66
  // find signature that matches (dt, dt)
@@ -147,7 +147,7 @@ export var createMatAlgo06xS0S0 = /* #__PURE__ */factory(name, dependencies, _re
147
147
  index: cindex,
148
148
  ptr: cptr,
149
149
  size: [rows, columns],
150
- datatype: dt
150
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
151
151
  });
152
152
  };
153
153
  });
@@ -24,10 +24,10 @@ export var createMatAlgo07xSSf = /* #__PURE__ */factory(name, dependencies, _ref
24
24
  return function matAlgo07xSSf(a, b, callback) {
25
25
  // sparse matrix arrays
26
26
  var asize = a._size;
27
- var adt = a._datatype;
27
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
28
28
  // sparse matrix arrays
29
29
  var bsize = b._size;
30
- var bdt = b._datatype;
30
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
31
31
 
32
32
  // validate dimensions
33
33
  if (asize.length !== bsize.length) {
@@ -51,7 +51,7 @@ export var createMatAlgo07xSSf = /* #__PURE__ */factory(name, dependencies, _ref
51
51
  var cf = callback;
52
52
 
53
53
  // process data types
54
- if (typeof adt === 'string' && adt === bdt) {
54
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
55
55
  // datatype
56
56
  dt = adt;
57
57
  // convert 0 to the same datatype
@@ -99,7 +99,7 @@ export var createMatAlgo07xSSf = /* #__PURE__ */factory(name, dependencies, _ref
99
99
  return new DenseMatrix({
100
100
  data: cdata,
101
101
  size: [rows, columns],
102
- datatype: dt
102
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
103
103
  });
104
104
  };
105
105
  function _scatter(m, j, w, x, mark) {
@@ -31,13 +31,13 @@ export var createMatAlgo08xS0Sid = /* #__PURE__ */factory(name, dependencies, _r
31
31
  var aindex = a._index;
32
32
  var aptr = a._ptr;
33
33
  var asize = a._size;
34
- var adt = a._datatype;
34
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
35
35
  // sparse matrix arrays
36
36
  var bvalues = b._values;
37
37
  var bindex = b._index;
38
38
  var bptr = b._ptr;
39
39
  var bsize = b._size;
40
- var bdt = b._datatype;
40
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
41
41
 
42
42
  // validate dimensions
43
43
  if (asize.length !== bsize.length) {
@@ -68,7 +68,7 @@ export var createMatAlgo08xS0Sid = /* #__PURE__ */factory(name, dependencies, _r
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
  // find signature that matches (dt, dt)
@@ -148,7 +148,7 @@ export var createMatAlgo08xS0Sid = /* #__PURE__ */factory(name, dependencies, _r
148
148
  index: cindex,
149
149
  ptr: cptr,
150
150
  size: [rows, columns],
151
- datatype: dt
151
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
152
152
  });
153
153
  };
154
154
  });
@@ -31,13 +31,13 @@ export var createMatAlgo09xS0Sf = /* #__PURE__ */factory(name, dependencies, _re
31
31
  var aindex = a._index;
32
32
  var aptr = a._ptr;
33
33
  var asize = a._size;
34
- var adt = a._datatype;
34
+ var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
35
35
  // sparse matrix arrays
36
36
  var bvalues = b._values;
37
37
  var bindex = b._index;
38
38
  var bptr = b._ptr;
39
39
  var bsize = b._size;
40
- var bdt = b._datatype;
40
+ var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
41
41
 
42
42
  // validate dimensions
43
43
  if (asize.length !== bsize.length) {
@@ -63,7 +63,7 @@ export var createMatAlgo09xS0Sf = /* #__PURE__ */factory(name, dependencies, _re
63
63
  var cf = callback;
64
64
 
65
65
  // process data types
66
- if (typeof adt === 'string' && adt === bdt) {
66
+ if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
67
67
  // datatype
68
68
  dt = adt;
69
69
  // find signature that matches (dt, dt)
@@ -136,7 +136,7 @@ export var createMatAlgo09xS0Sf = /* #__PURE__ */factory(name, dependencies, _re
136
136
  index: cindex,
137
137
  ptr: cptr,
138
138
  size: [rows, columns],
139
- datatype: dt
139
+ datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
140
140
  });
141
141
  };
142
142
  });