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
@@ -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
  });
@@ -4,12 +4,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.ObjectWrappingMap = void 0;
7
+ exports.PartitionedMap = exports.ObjectWrappingMap = void 0;
8
8
  exports.assign = assign;
9
9
  exports.createEmptyMap = createEmptyMap;
10
10
  exports.createMap = createMap;
11
11
  exports.isMap = isMap;
12
12
  exports.toObject = toObject;
13
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
14
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
14
15
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
16
  var _customs = require("./customs.js");
@@ -29,11 +30,12 @@ var ObjectWrappingMap = exports.ObjectWrappingMap = /*#__PURE__*/function () {
29
30
  function ObjectWrappingMap(object) {
30
31
  (0, _classCallCheck2["default"])(this, ObjectWrappingMap);
31
32
  this.wrappedObject = object;
33
+ this[Symbol.iterator] = this.entries;
32
34
  }
33
35
  (0, _createClass2["default"])(ObjectWrappingMap, [{
34
36
  key: "keys",
35
37
  value: function keys() {
36
- return Object.keys(this.wrappedObject);
38
+ return Object.keys(this.wrappedObject).values();
37
39
  }
38
40
  }, {
39
41
  key: "get",
@@ -51,9 +53,169 @@ var ObjectWrappingMap = exports.ObjectWrappingMap = /*#__PURE__*/function () {
51
53
  value: function has(key) {
52
54
  return (0, _customs.hasSafeProperty)(this.wrappedObject, key);
53
55
  }
56
+ }, {
57
+ key: "entries",
58
+ value: function entries() {
59
+ var _this = this;
60
+ return mapIterator(this.keys(), function (key) {
61
+ return [key, _this.get(key)];
62
+ });
63
+ }
64
+ }, {
65
+ key: "forEach",
66
+ value: function forEach(callback) {
67
+ var _iterator = _createForOfIteratorHelper(this.keys()),
68
+ _step;
69
+ try {
70
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
71
+ var key = _step.value;
72
+ callback(this.get(key), key, this);
73
+ }
74
+ } catch (err) {
75
+ _iterator.e(err);
76
+ } finally {
77
+ _iterator.f();
78
+ }
79
+ }
80
+ }, {
81
+ key: "delete",
82
+ value: function _delete(key) {
83
+ delete this.wrappedObject[key];
84
+ }
85
+ }, {
86
+ key: "clear",
87
+ value: function clear() {
88
+ var _iterator2 = _createForOfIteratorHelper(this.keys()),
89
+ _step2;
90
+ try {
91
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
92
+ var key = _step2.value;
93
+ this["delete"](key);
94
+ }
95
+ } catch (err) {
96
+ _iterator2.e(err);
97
+ } finally {
98
+ _iterator2.f();
99
+ }
100
+ }
101
+ }, {
102
+ key: "size",
103
+ get: function get() {
104
+ return Object.keys(this.wrappedObject).length;
105
+ }
54
106
  }]);
55
107
  return ObjectWrappingMap;
56
108
  }();
109
+ /**
110
+ * Create a map with two partitions: a and b.
111
+ * The set with bKeys determines which keys/values are read/written to map b,
112
+ * all other values are read/written to map a
113
+ *
114
+ * For example:
115
+ *
116
+ * const a = new Map()
117
+ * const b = new Map()
118
+ * const p = new PartitionedMap(a, b, new Set(['x', 'y']))
119
+ *
120
+ * In this case, values `x` and `y` are read/written to map `b`,
121
+ * all other values are read/written to map `a`.
122
+ */
123
+ var PartitionedMap = exports.PartitionedMap = /*#__PURE__*/function () {
124
+ /**
125
+ * @param {Map} a
126
+ * @param {Map} b
127
+ * @param {Set} bKeys
128
+ */
129
+ function PartitionedMap(a, b, bKeys) {
130
+ (0, _classCallCheck2["default"])(this, PartitionedMap);
131
+ this.a = a;
132
+ this.b = b;
133
+ this.bKeys = bKeys;
134
+ this[Symbol.iterator] = this.entries;
135
+ }
136
+ (0, _createClass2["default"])(PartitionedMap, [{
137
+ key: "get",
138
+ value: function get(key) {
139
+ return this.bKeys.has(key) ? this.b.get(key) : this.a.get(key);
140
+ }
141
+ }, {
142
+ key: "set",
143
+ value: function set(key, value) {
144
+ if (this.bKeys.has(key)) {
145
+ this.b.set(key, value);
146
+ } else {
147
+ this.a.set(key, value);
148
+ }
149
+ return this;
150
+ }
151
+ }, {
152
+ key: "has",
153
+ value: function has(key) {
154
+ return this.b.has(key) || this.a.has(key);
155
+ }
156
+ }, {
157
+ key: "keys",
158
+ value: function keys() {
159
+ return new Set([].concat((0, _toConsumableArray2["default"])(this.a.keys()), (0, _toConsumableArray2["default"])(this.b.keys())))[Symbol.iterator]();
160
+ }
161
+ }, {
162
+ key: "entries",
163
+ value: function entries() {
164
+ var _this2 = this;
165
+ return mapIterator(this.keys(), function (key) {
166
+ return [key, _this2.get(key)];
167
+ });
168
+ }
169
+ }, {
170
+ key: "forEach",
171
+ value: function forEach(callback) {
172
+ var _iterator3 = _createForOfIteratorHelper(this.keys()),
173
+ _step3;
174
+ try {
175
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
176
+ var key = _step3.value;
177
+ callback(this.get(key), key, this);
178
+ }
179
+ } catch (err) {
180
+ _iterator3.e(err);
181
+ } finally {
182
+ _iterator3.f();
183
+ }
184
+ }
185
+ }, {
186
+ key: "delete",
187
+ value: function _delete(key) {
188
+ return this.bKeys.has(key) ? this.b["delete"](key) : this.a["delete"](key);
189
+ }
190
+ }, {
191
+ key: "clear",
192
+ value: function clear() {
193
+ this.a.clear();
194
+ this.b.clear();
195
+ }
196
+ }, {
197
+ key: "size",
198
+ get: function get() {
199
+ return (0, _toConsumableArray2["default"])(this.keys()).length;
200
+ }
201
+ }]);
202
+ return PartitionedMap;
203
+ }();
204
+ /**
205
+ * Create a new iterator that maps over the provided iterator, applying a mapping function to each item
206
+ */
207
+ function mapIterator(it, callback) {
208
+ return {
209
+ next: function next() {
210
+ var n = it.next();
211
+ return n.done ? n : {
212
+ value: callback(n.value),
213
+ done: false
214
+ };
215
+ }
216
+ };
217
+ }
218
+
57
219
  /**
58
220
  * Creates an empty map, or whatever your platform's polyfill is.
59
221
  *
@@ -93,18 +255,18 @@ function toObject(map) {
93
255
  return map.wrappedObject;
94
256
  }
95
257
  var object = {};
96
- var _iterator = _createForOfIteratorHelper(map.keys()),
97
- _step;
258
+ var _iterator4 = _createForOfIteratorHelper(map.keys()),
259
+ _step4;
98
260
  try {
99
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
100
- var key = _step.value;
261
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
262
+ var key = _step4.value;
101
263
  var value = map.get(key);
102
264
  (0, _customs.setSafeProperty)(object, key, value);
103
265
  }
104
266
  } catch (err) {
105
- _iterator.e(err);
267
+ _iterator4.e(err);
106
268
  } finally {
107
- _iterator.f();
269
+ _iterator4.f();
108
270
  }
109
271
  return object;
110
272
  }
@@ -143,17 +305,17 @@ function assign(map) {
143
305
  continue;
144
306
  }
145
307
  if (isMap(args)) {
146
- var _iterator2 = _createForOfIteratorHelper(args.keys()),
147
- _step2;
308
+ var _iterator5 = _createForOfIteratorHelper(args.keys()),
309
+ _step5;
148
310
  try {
149
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
150
- var key = _step2.value;
311
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
312
+ var key = _step5.value;
151
313
  map.set(key, args.get(key));
152
314
  }
153
315
  } catch (err) {
154
- _iterator2.e(err);
316
+ _iterator5.e(err);
155
317
  } finally {
156
- _iterator2.f();
318
+ _iterator5.f();
157
319
  }
158
320
  } else if ((0, _is.isObject)(args)) {
159
321
  for (var _i2 = 0, _Object$keys = Object.keys(args); _i2 < _Object$keys.length; _i2++) {
@@ -15,15 +15,9 @@ var _map = require("./map.js");
15
15
  * the remaining `args`.
16
16
  *
17
17
  * @param {Map} parentScope
18
- * @param {...any} args
19
- * @returns {Map}
18
+ * @param {Object} args
19
+ * @returns {PartitionedMap}
20
20
  */
21
- function createSubScope(parentScope) {
22
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
23
- args[_key - 1] = arguments[_key];
24
- }
25
- if (typeof parentScope.createSubScope === 'function') {
26
- return _map.assign.apply(void 0, [parentScope.createSubScope()].concat(args));
27
- }
28
- return _map.assign.apply(void 0, [(0, _map.createEmptyMap)(), parentScope].concat(args));
21
+ function createSubScope(parentScope, args) {
22
+ return new _map.PartitionedMap(parentScope, new _map.ObjectWrappingMap(args), new Set(Object.keys(args)));
29
23
  }
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- var version = exports.version = '12.3.1';
7
+ var version = exports.version = '12.4.0';
8
8
  // Note: This file is automatically generated when building math.js.
9
9
  // Changes made in this file will be overwritten.
@@ -593,6 +593,7 @@ export var rightArithShift = /* #__PURE__ */createRightArithShift({
593
593
  export var round = /* #__PURE__ */createRound({
594
594
  BigNumber,
595
595
  DenseMatrix,
596
+ config,
596
597
  equalScalar,
597
598
  matrix,
598
599
  typed,
@@ -1,6 +1,7 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import { isNode, isConstantNode, isOperatorNode, isParenthesisNode } from '../../utils/is.js';
3
3
  import { map } from '../../utils/array.js';
4
+ import { createSubScope } from '../../utils/scope.js';
4
5
  import { escape } from '../../utils/string.js';
5
6
  import { getSafeProperty, isSafeMethod } from '../../utils/customs.js';
6
7
  import { getAssociativity, getPrecedence, isAssociativeWith, properties } from '../operators.js';
@@ -289,7 +290,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
289
290
  // "raw" evaluation
290
291
  var rawArgs = this.args;
291
292
  return function evalOperatorNode(scope, args, context) {
292
- return fn(rawArgs, math, scope);
293
+ return fn(rawArgs, math, createSubScope(scope, args));
293
294
  };
294
295
  } else if (evalArgs.length === 1) {
295
296
  var evalArg0 = evalArgs[0];
@@ -1409,8 +1409,10 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1409
1409
  while (state.token === ';') {
1410
1410
  // eslint-disable-line no-unmodified-loop-condition
1411
1411
  getToken(state);
1412
- params[rows] = parseRow(state);
1413
- rows++;
1412
+ if (state.token !== ']') {
1413
+ params[rows] = parseRow(state);
1414
+ rows++;
1415
+ }
1414
1416
  }
1415
1417
  if (state.token !== ']') {
1416
1418
  throw createSyntaxError(state, 'End of matrix ] expected');
@@ -1458,8 +1460,10 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1458
1460
  getToken(state);
1459
1461
 
1460
1462
  // parse expression
1461
- params[len] = parseAssignment(state);
1462
- len++;
1463
+ if (state.token !== ']' && state.token !== ';') {
1464
+ params[len] = parseAssignment(state);
1465
+ len++;
1466
+ }
1463
1467
  }
1464
1468
  return new ArrayNode(params);
1465
1469
  }
@@ -1,11 +1,11 @@
1
1
  import { isSymbolNode } from '../../../utils/is.js';
2
- import { createSubScope } from '../../../utils/scope.js';
2
+ import { PartitionedMap } from '../../../utils/map.js';
3
3
 
4
4
  /**
5
5
  * Compile an inline expression like "x > 0"
6
6
  * @param {Node} expression
7
7
  * @param {Object} math
8
- * @param {Object} scope
8
+ * @param {Map} scope
9
9
  * @return {function} Returns a function with one argument which fills in the
10
10
  * undefined variable (like "x") and evaluates the expression
11
11
  */
@@ -20,10 +20,11 @@ export function compileInlineExpression(expression, math, scope) {
20
20
 
21
21
  // create a test function for this equation
22
22
  var name = symbol.name; // variable name
23
- var subScope = createSubScope(scope);
23
+ var argsScope = new Map();
24
+ var subScope = new PartitionedMap(scope, argsScope, new Set([name]));
24
25
  var eq = expression.compile();
25
26
  return function inlineExpression(x) {
26
- subScope.set(name, x);
27
+ argsScope.set(name, x);
27
28
  return eq.evaluate(subScope);
28
29
  };
29
30
  }