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
@@ -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
  });