mathjs 12.3.1 → 12.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -601,6 +601,7 @@ var rightArithShift = exports.rightArithShift = /* #__PURE__ */(0, _factoriesAny
601
601
  var round = exports.round = /* #__PURE__ */(0, _factoriesAny.createRound)({
602
602
  BigNumber: BigNumber,
603
603
  DenseMatrix: DenseMatrix,
604
+ config: _configReadonly.config,
604
605
  equalScalar: equalScalar,
605
606
  matrix: matrix,
606
607
  typed: typed,
@@ -13,6 +13,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
14
  var _is = require("../../utils/is.js");
15
15
  var _array = require("../../utils/array.js");
16
+ var _scope = require("../../utils/scope.js");
16
17
  var _string = require("../../utils/string.js");
17
18
  var _customs = require("../../utils/customs.js");
18
19
  var _operators = require("../operators.js");
@@ -311,7 +312,7 @@ var createOperatorNode = exports.createOperatorNode = /* #__PURE__ */(0, _factor
311
312
  // "raw" evaluation
312
313
  var rawArgs = this.args;
313
314
  return function evalOperatorNode(scope, args, context) {
314
- return fn(rawArgs, math, scope);
315
+ return fn(rawArgs, math, (0, _scope.createSubScope)(scope, args));
315
316
  };
316
317
  } else if (evalArgs.length === 1) {
317
318
  var evalArg0 = evalArgs[0];
@@ -1416,8 +1416,10 @@ var createParse = exports.createParse = /* #__PURE__ */(0, _factory.factory)(nam
1416
1416
  while (state.token === ';') {
1417
1417
  // eslint-disable-line no-unmodified-loop-condition
1418
1418
  getToken(state);
1419
- params[rows] = parseRow(state);
1420
- rows++;
1419
+ if (state.token !== ']') {
1420
+ params[rows] = parseRow(state);
1421
+ rows++;
1422
+ }
1421
1423
  }
1422
1424
  if (state.token !== ']') {
1423
1425
  throw createSyntaxError(state, 'End of matrix ] expected');
@@ -1465,8 +1467,10 @@ var createParse = exports.createParse = /* #__PURE__ */(0, _factory.factory)(nam
1465
1467
  getToken(state);
1466
1468
 
1467
1469
  // parse expression
1468
- params[len] = parseAssignment(state);
1469
- len++;
1470
+ if (state.token !== ']' && state.token !== ';') {
1471
+ params[len] = parseAssignment(state);
1472
+ len++;
1473
+ }
1470
1474
  }
1471
1475
  return new ArrayNode(params);
1472
1476
  }
@@ -5,12 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.compileInlineExpression = compileInlineExpression;
7
7
  var _is = require("../../../utils/is.js");
8
- var _scope = require("../../../utils/scope.js");
8
+ var _map = require("../../../utils/map.js");
9
9
  /**
10
10
  * Compile an inline expression like "x > 0"
11
11
  * @param {Node} expression
12
12
  * @param {Object} math
13
- * @param {Object} scope
13
+ * @param {Map} scope
14
14
  * @return {function} Returns a function with one argument which fills in the
15
15
  * undefined variable (like "x") and evaluates the expression
16
16
  */
@@ -25,10 +25,11 @@ function compileInlineExpression(expression, math, scope) {
25
25
 
26
26
  // create a test function for this equation
27
27
  var name = symbol.name; // variable name
28
- var subScope = (0, _scope.createSubScope)(scope);
28
+ var argsScope = new Map();
29
+ var subScope = new _map.PartitionedMap(scope, argsScope, new Set([name]));
29
30
  var eq = expression.compile();
30
31
  return function inlineExpression(x) {
31
- subScope.set(name, x);
32
+ argsScope.set(name, x);
32
33
  return eq.evaluate(subScope);
33
34
  };
34
35
  }
@@ -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.1
10
- * @date 2024-02-01
9
+ * @version 12.4.0
10
+ * @date 2024-02-22
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
  });