mathjs 14.9.1 → 15.0.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 (50) hide show
  1. package/HISTORY.md +19 -0
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +1 -1
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/core/config.js +5 -1
  6. package/lib/cjs/core/function/config.js +4 -0
  7. package/lib/cjs/entry/dependenciesAny/dependenciesSize.generated.js +0 -2
  8. package/lib/cjs/entry/dependenciesNumber/dependenciesSize.generated.js +0 -2
  9. package/lib/cjs/entry/impureFunctionsAny.generated.js +40 -40
  10. package/lib/cjs/entry/pureFunctionsAny.generated.js +143 -144
  11. package/lib/cjs/entry/pureFunctionsNumber.generated.js +0 -2
  12. package/lib/cjs/expression/node/IndexNode.js +1 -1
  13. package/lib/cjs/expression/parse.js +38 -34
  14. package/lib/cjs/function/algebra/sylvester.js +6 -5
  15. package/lib/cjs/function/logical/nullish.js +2 -2
  16. package/lib/cjs/function/matrix/column.js +2 -1
  17. package/lib/cjs/function/matrix/dot.js +4 -9
  18. package/lib/cjs/function/matrix/flatten.js +6 -3
  19. package/lib/cjs/function/matrix/kron.js +31 -30
  20. package/lib/cjs/function/matrix/row.js +2 -1
  21. package/lib/cjs/function/matrix/size.js +11 -17
  22. package/lib/cjs/function/matrix/subset.js +21 -11
  23. package/lib/cjs/header.js +1 -1
  24. package/lib/cjs/type/matrix/DenseMatrix.js +52 -41
  25. package/lib/cjs/type/matrix/MatrixIndex.js +19 -20
  26. package/lib/cjs/type/matrix/SparseMatrix.js +13 -7
  27. package/lib/cjs/version.js +1 -1
  28. package/lib/esm/core/config.js +5 -1
  29. package/lib/esm/core/function/config.js +4 -0
  30. package/lib/esm/entry/dependenciesAny/dependenciesSize.generated.js +0 -2
  31. package/lib/esm/entry/dependenciesNumber/dependenciesSize.generated.js +0 -2
  32. package/lib/esm/entry/impureFunctionsAny.generated.js +42 -42
  33. package/lib/esm/entry/pureFunctionsAny.generated.js +144 -145
  34. package/lib/esm/entry/pureFunctionsNumber.generated.js +0 -2
  35. package/lib/esm/expression/node/IndexNode.js +1 -1
  36. package/lib/esm/expression/parse.js +38 -34
  37. package/lib/esm/function/algebra/sylvester.js +6 -5
  38. package/lib/esm/function/logical/nullish.js +2 -2
  39. package/lib/esm/function/matrix/column.js +2 -1
  40. package/lib/esm/function/matrix/dot.js +4 -9
  41. package/lib/esm/function/matrix/flatten.js +6 -3
  42. package/lib/esm/function/matrix/kron.js +31 -30
  43. package/lib/esm/function/matrix/row.js +2 -1
  44. package/lib/esm/function/matrix/size.js +11 -17
  45. package/lib/esm/function/matrix/subset.js +21 -11
  46. package/lib/esm/type/matrix/DenseMatrix.js +52 -41
  47. package/lib/esm/type/matrix/MatrixIndex.js +20 -21
  48. package/lib/esm/type/matrix/SparseMatrix.js +13 -7
  49. package/lib/esm/version.js +1 -1
  50. package/package.json +1 -1
@@ -62,8 +62,8 @@ export var createNullish = /* #__PURE__ */factory(name, dependencies, _ref => {
62
62
  'undefined, any': (_x, y) => y,
63
63
  // SparseMatrix-first with collection RHS: enforce exact shape match
64
64
  'SparseMatrix, Array | Matrix': (x, y) => {
65
- var sx = flatten(size(x).valueOf()); // work around #3529/#3530
66
- var sy = flatten(size(y).valueOf());
65
+ var sx = size(x);
66
+ var sy = size(y);
67
67
  if (deepEqual(sx, sy)) return x;
68
68
  throw new DimensionError(sx, sy);
69
69
  },
@@ -52,8 +52,9 @@ export var createColumn = /* #__PURE__ */factory(name, dependencies, _ref => {
52
52
  }
53
53
  validateIndex(column, value.size()[1]);
54
54
  var rowRange = range(0, value.size()[0]);
55
- var index = new Index(rowRange, column);
55
+ var index = new Index(rowRange, [column]);
56
56
  var result = value.subset(index);
57
+ // once config.legacySubset just return result
57
58
  return isMatrix(result) ? result : matrix([[result]]);
58
59
  }
59
60
  });
@@ -38,8 +38,8 @@ export var createDot = /* #__PURE__ */factory(name, dependencies, _ref => {
38
38
  'SparseMatrix, SparseMatrix': _sparseDot
39
39
  });
40
40
  function _validateDim(x, y) {
41
- var xSize = _size(x);
42
- var ySize = _size(y);
41
+ var xSize = size(x);
42
+ var ySize = size(y);
43
43
  var xLen, yLen;
44
44
  if (xSize.length === 1) {
45
45
  xLen = xSize[0];
@@ -67,8 +67,8 @@ export var createDot = /* #__PURE__ */factory(name, dependencies, _ref => {
67
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
- var aIsColumn = _size(a).length === 2;
71
- var bIsColumn = _size(b).length === 2;
70
+ var aIsColumn = size(a).length === 2;
71
+ var bIsColumn = size(b).length === 2;
72
72
  var add = addScalar;
73
73
  var mul = multiplyScalar;
74
74
 
@@ -148,9 +148,4 @@ export var createDot = /* #__PURE__ */factory(name, dependencies, _ref => {
148
148
  }
149
149
  return c;
150
150
  }
151
-
152
- // TODO remove this once #1771 is fixed
153
- function _size(x) {
154
- return isMatrix(x) ? x.size() : size(x);
155
- }
156
151
  });
@@ -22,17 +22,20 @@ export var createFlatten = /* #__PURE__ */factory(name, dependencies, _ref => {
22
22
  *
23
23
  * concat, resize, size, squeeze
24
24
  *
25
- * @param {Matrix | Array} x Matrix to be flattened
26
- * @return {Matrix | Array} Returns the flattened matrix
25
+ * @param {DenseMatrix | Array} x Matrix to be flattened
26
+ * @return {DenseMatrix | Array} Returns the flattened matrix
27
27
  */
28
28
  return typed(name, {
29
29
  Array: function Array(x) {
30
30
  return flattenArray(x);
31
31
  },
32
- Matrix: function Matrix(x) {
32
+ DenseMatrix: function DenseMatrix(x) {
33
33
  // Return the same matrix type as x (Dense or Sparse Matrix)
34
34
  // Return the same data type as x
35
35
  return x.create(flattenArray(x.valueOf(), true), x.datatype());
36
+ },
37
+ SparseMatrix: function SparseMatrix(_x) {
38
+ throw new TypeError('SparseMatrix is not supported by function flatten ' + 'because it does not support 1D vectors. ' + 'Convert to a DenseMatrix or Array first. Example: flatten(x.toArray())');
36
39
  }
37
40
  });
38
41
  });
@@ -25,7 +25,7 @@ export var createKron = /* #__PURE__ */factory(name, dependencies, _ref => {
25
25
  * // returns [ [ 1, 2, 0, 0 ], [ 3, 4, 0, 0 ], [ 0, 0, 1, 2 ], [ 0, 0, 3, 4 ] ]
26
26
  *
27
27
  * math.kron([1,1], [2,3,4])
28
- * // returns [ [ 2, 3, 4, 2, 3, 4 ] ]
28
+ * // returns [2, 3, 4, 2, 3, 4]
29
29
  *
30
30
  * See also:
31
31
  *
@@ -49,37 +49,38 @@ export var createKron = /* #__PURE__ */factory(name, dependencies, _ref => {
49
49
  });
50
50
 
51
51
  /**
52
- * Calculate the Kronecker product of two matrices / vectors
53
- * @param {Array} a First vector
54
- * @param {Array} b Second vector
55
- * @returns {Array} Returns the Kronecker product of x and y
56
- * @private
52
+ * Calculate the Kronecker product of two (1-dimensional) vectors,
53
+ * with no dimension checking
54
+ * @param {Array} a First vector
55
+ * @param {Array} b Second vector
56
+ * @returns {Array} the 1-dimensional Kronecker product of a and b
57
+ * @private
58
+ */
59
+ function _kron1d(a, b) {
60
+ // TODO in core overhaul: would be faster to see if we can choose a
61
+ // particular implementation of multiplyScalar at the beginning,
62
+ // rather than re-dispatch for _every_ ordered pair of entries.
63
+ return a.flatMap(x => b.map(y => multiplyScalar(x, y)));
64
+ }
65
+
66
+ /**
67
+ * Calculate the Kronecker product of two possibly multidimensional arrays
68
+ * @param {Array} a First array
69
+ * @param {Array} b Second array
70
+ * @param {number} [d] common dimension; if missing, compute and match args
71
+ * @returns {Array} Returns the Kronecker product of x and y
72
+ * @private
57
73
  */
58
74
  function _kron(a, b) {
59
- // Deal with the dimensions of the matricies.
60
- if (size(a).length === 1) {
61
- // Wrap it in a 2D Matrix
62
- a = [a];
63
- }
64
- if (size(b).length === 1) {
65
- // Wrap it in a 2D Matrix
66
- b = [b];
67
- }
68
- if (size(a).length > 2 || size(b).length > 2) {
69
- throw new RangeError('Vectors with dimensions greater then 2 are not supported expected ' + '(Size x = ' + JSON.stringify(a.length) + ', y = ' + JSON.stringify(b.length) + ')');
75
+ var d = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
76
+ if (d < 0) {
77
+ var adim = size(a).length;
78
+ var bdim = size(b).length;
79
+ d = Math.max(adim, bdim);
80
+ while (adim++ < d) a = [a];
81
+ while (bdim++ < d) b = [b];
70
82
  }
71
- var t = [];
72
- var r = [];
73
- return a.map(function (a) {
74
- return b.map(function (b) {
75
- r = [];
76
- t.push(r);
77
- return a.map(function (y) {
78
- return b.map(function (x) {
79
- return r.push(multiplyScalar(y, x));
80
- });
81
- });
82
- });
83
- }) && t;
83
+ if (d === 1) return _kron1d(a, b);
84
+ return a.flatMap(aSlice => b.map(bSlice => _kron(aSlice, bSlice, d - 1)));
84
85
  }
85
86
  });
@@ -52,8 +52,9 @@ export var createRow = /* #__PURE__ */factory(name, dependencies, _ref => {
52
52
  }
53
53
  validateIndex(row, value.size()[0]);
54
54
  var columnRange = range(0, value.size()[1]);
55
- var index = new Index(row, columnRange);
55
+ var index = new Index([row], columnRange);
56
56
  var result = value.subset(index);
57
+ // once config.legacySubset just return result
57
58
  return isMatrix(result) ? result : matrix([[result]]);
58
59
  }
59
60
  });
@@ -1,16 +1,16 @@
1
1
  import { arraySize } from '../../utils/array.js';
2
2
  import { factory } from '../../utils/factory.js';
3
- import { noMatrix } from '../../utils/noop.js';
4
3
  var name = 'size';
5
- var dependencies = ['typed', 'config', '?matrix'];
4
+ var dependencies = ['typed'];
6
5
  export var createSize = /* #__PURE__ */factory(name, dependencies, _ref => {
7
6
  var {
8
- typed,
9
- config,
10
- matrix
7
+ typed
11
8
  } = _ref;
12
9
  /**
13
- * Calculate the size of a matrix or scalar.
10
+ * Calculate the size of a matrix or scalar. Always returns an Array containing numbers.
11
+ *
12
+ * Note that in mathjs v14 and older, function size could return a Matrix depending on
13
+ * the input type and configuration.
14
14
  *
15
15
  * Syntax:
16
16
  *
@@ -30,19 +30,13 @@ export var createSize = /* #__PURE__ */factory(name, dependencies, _ref => {
30
30
  * count, resize, squeeze, subset
31
31
  *
32
32
  * @param {boolean | number | Complex | Unit | string | Array | Matrix} x A matrix
33
- * @return {Array | Matrix} A vector with size of `x`.
33
+ * @return {Array} A vector with size of `x`.
34
34
  */
35
35
  return typed(name, {
36
- Matrix: function Matrix(x) {
37
- return x.create(x.size(), 'number');
38
- },
36
+ Matrix: x => x.size(),
39
37
  Array: arraySize,
40
- string: function string(x) {
41
- return config.matrix === 'Array' ? [x.length] : matrix([x.length], 'dense', 'number');
42
- },
43
- 'number | Complex | BigNumber | Unit | boolean | null': function number__Complex__BigNumber__Unit__boolean__null(x) {
44
- // scalar
45
- return config.matrix === 'Array' ? [] : matrix ? matrix([], 'dense', 'number') : noMatrix();
46
- }
38
+ string: x => [x.length],
39
+ // scalar
40
+ 'number | Complex | BigNumber | Unit | boolean | null': _x => []
47
41
  });
48
42
  });
@@ -25,8 +25,8 @@ export var createSubset = /* #__PURE__ */factory(name, dependencies, _ref => {
25
25
  * // get a subset
26
26
  * const d = [[1, 2], [3, 4]]
27
27
  * math.subset(d, math.index(1, 0)) // returns 3
28
- * math.subset(d, math.index([0, 1], 1)) // returns [[2], [4]]
29
- * math.subset(d, math.index([false, true], 0)) // returns [[3]]
28
+ * math.subset(d, math.index([0, 1], [1])) // returns [[2], [4]]
29
+ * math.subset(d, math.index([false, true], [0])) // returns [[3]]
30
30
  *
31
31
  * // replace a subset
32
32
  * const e = []
@@ -36,9 +36,9 @@ export var createSubset = /* #__PURE__ */factory(name, dependencies, _ref => {
36
36
  *
37
37
  * // get submatrix using ranges
38
38
  * const M = [
39
- * [1,2,3],
40
- * [4,5,6],
41
- * [7,8,9]
39
+ * [1, 2, 3],
40
+ * [4, 5, 6],
41
+ * [7, 8, 9]
42
42
  * ]
43
43
  * math.subset(M, math.index(math.range(0,2), math.range(0,3))) // [[1, 2, 3], [4, 5, 6]]
44
44
  *
@@ -117,7 +117,7 @@ export var createSubset = /* #__PURE__ */factory(name, dependencies, _ref => {
117
117
  if (typeof replacement === 'string') {
118
118
  throw new Error('can\'t boradcast a string');
119
119
  }
120
- if (index._isScalar) {
120
+ if (index.isScalar()) {
121
121
  return replacement;
122
122
  }
123
123
  var indexSize = index.size();
@@ -159,9 +159,14 @@ function _getSubstring(str, index) {
159
159
  validateIndex(index.max()[0], strLen);
160
160
  var range = index.dimension(0);
161
161
  var substr = '';
162
- range.forEach(function (v) {
162
+ function callback(v) {
163
163
  substr += str.charAt(v);
164
- });
164
+ }
165
+ if (Number.isInteger(range)) {
166
+ callback(range);
167
+ } else {
168
+ range.forEach(callback);
169
+ }
165
170
  return substr;
166
171
  }
167
172
 
@@ -195,7 +200,7 @@ function _setSubstring(str, index, replacement, defaultValue) {
195
200
  defaultValue = ' ';
196
201
  }
197
202
  var range = index.dimension(0);
198
- var len = range.size()[0];
203
+ var len = Number.isInteger(range) ? 1 : range.size()[0];
199
204
  if (len !== replacement.length) {
200
205
  throw new DimensionError(range.size()[0], replacement.length);
201
206
  }
@@ -210,9 +215,14 @@ function _setSubstring(str, index, replacement, defaultValue) {
210
215
  for (var i = 0; i < strLen; i++) {
211
216
  chars[i] = str.charAt(i);
212
217
  }
213
- range.forEach(function (v, i) {
218
+ function callback(v, i) {
214
219
  chars[v] = replacement.charAt(i[0]);
215
- });
220
+ }
221
+ if (Number.isInteger(range)) {
222
+ callback(range, [0]);
223
+ } else {
224
+ range.forEach(callback);
225
+ }
216
226
 
217
227
  // initialize undefined characters with a space
218
228
  if (chars.length > strLen) {
@@ -8,10 +8,11 @@ import { DimensionError } from '../../error/DimensionError.js';
8
8
  import { factory } from '../../utils/factory.js';
9
9
  import { optimizeCallback } from '../../utils/optimizeCallback.js';
10
10
  var name = 'DenseMatrix';
11
- var dependencies = ['Matrix'];
11
+ var dependencies = ['Matrix', 'config'];
12
12
  export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _ref => {
13
13
  var {
14
- Matrix
14
+ Matrix,
15
+ config
15
16
  } = _ref;
16
17
  /**
17
18
  * Dense Matrix implementation. A regular, dense matrix, supporting multi-dimensional matrices. This is the default matrix type.
@@ -221,7 +222,7 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
221
222
  if (!isIndex(index)) {
222
223
  throw new TypeError('Invalid index');
223
224
  }
224
- var isScalar = index.isScalar();
225
+ var isScalar = config.legacySubset ? index.size().every(idx => idx === 1) : index.isScalar();
225
226
  if (isScalar) {
226
227
  // return a scalar
227
228
  return matrix.get(index.min());
@@ -241,12 +242,12 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
241
242
  }
242
243
 
243
244
  // retrieve submatrix
244
- var returnMatrix = new DenseMatrix([]);
245
+ var returnMatrix = new DenseMatrix();
245
246
  var submatrix = _getSubmatrix(matrix._data, index);
246
247
  returnMatrix._size = submatrix.size;
247
248
  returnMatrix._datatype = matrix._datatype;
248
249
  returnMatrix._data = submatrix.data;
249
- return returnMatrix;
250
+ return config.legacySubset ? returnMatrix.reshape(index.size()) : returnMatrix;
250
251
  }
251
252
  }
252
253
 
@@ -264,22 +265,30 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
264
265
  var size = Array(maxDepth);
265
266
  return {
266
267
  data: getSubmatrixRecursive(data),
267
- size
268
+ size: size.filter(x => x !== null)
268
269
  };
269
270
  function getSubmatrixRecursive(data) {
270
271
  var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
271
- var ranges = index.dimension(depth);
272
- size[depth] = ranges.size()[0];
272
+ var dims = index.dimension(depth);
273
+ function _mapIndex(dim, callback) {
274
+ // applies a callback for when the index is a Number or a Matrix
275
+ if (isNumber(dim)) return callback(dim);else return dim.map(callback).valueOf();
276
+ }
277
+ if (isNumber(dims)) {
278
+ size[depth] = null;
279
+ } else {
280
+ size[depth] = dims.size()[0];
281
+ }
273
282
  if (depth < maxDepth) {
274
- return ranges.map(rangeIndex => {
275
- validateIndex(rangeIndex, data.length);
276
- return getSubmatrixRecursive(data[rangeIndex], depth + 1);
277
- }).valueOf();
283
+ return _mapIndex(dims, dimIndex => {
284
+ validateIndex(dimIndex, data.length);
285
+ return getSubmatrixRecursive(data[dimIndex], depth + 1);
286
+ });
278
287
  } else {
279
- return ranges.map(rangeIndex => {
280
- validateIndex(rangeIndex, data.length);
281
- return data[rangeIndex];
282
- }).valueOf();
288
+ return _mapIndex(dims, dimIndex => {
289
+ validateIndex(dimIndex, data.length);
290
+ return data[dimIndex];
291
+ });
283
292
  }
284
293
  }
285
294
  }
@@ -306,18 +315,18 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
306
315
  var isScalar = index.isScalar();
307
316
 
308
317
  // calculate the size of the submatrix, and convert it into an Array if needed
309
- var sSize;
318
+ var submatrixSize;
310
319
  if (isMatrix(submatrix)) {
311
- sSize = submatrix.size();
320
+ submatrixSize = submatrix.size();
312
321
  submatrix = submatrix.valueOf();
313
322
  } else {
314
- sSize = arraySize(submatrix);
323
+ submatrixSize = arraySize(submatrix);
315
324
  }
316
325
  if (isScalar) {
317
326
  // set a scalar
318
327
 
319
328
  // check whether submatrix is a scalar
320
- if (sSize.length !== 0) {
329
+ if (submatrixSize.length !== 0) {
321
330
  throw new TypeError('Scalar expected');
322
331
  }
323
332
  matrix.set(index.min(), submatrix, defaultValue);
@@ -325,26 +334,26 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
325
334
  // set a submatrix
326
335
 
327
336
  // broadcast submatrix
328
- if (!deepStrictEqual(sSize, iSize)) {
329
- try {
330
- if (sSize.length === 0) {
331
- submatrix = broadcastTo([submatrix], iSize);
332
- } else {
337
+ if (!deepStrictEqual(submatrixSize, iSize)) {
338
+ if (submatrixSize.length === 0) {
339
+ submatrix = broadcastTo([submatrix], iSize);
340
+ } else {
341
+ try {
333
342
  submatrix = broadcastTo(submatrix, iSize);
334
- }
335
- sSize = arraySize(submatrix);
336
- } catch (_unused) {}
343
+ } catch (error) {}
344
+ }
345
+ submatrixSize = arraySize(submatrix);
337
346
  }
338
347
 
339
348
  // validate dimensions
340
349
  if (iSize.length < matrix._size.length) {
341
350
  throw new DimensionError(iSize.length, matrix._size.length, '<');
342
351
  }
343
- if (sSize.length < iSize.length) {
352
+ if (submatrixSize.length < iSize.length) {
344
353
  // calculate number of missing outer dimensions
345
354
  var i = 0;
346
355
  var outer = 0;
347
- while (iSize[i] === 1 && sSize[i] === 1) {
356
+ while (iSize[i] === 1 && submatrixSize[i] === 1) {
348
357
  i++;
349
358
  }
350
359
  while (iSize[i] === 1) {
@@ -353,12 +362,12 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
353
362
  }
354
363
 
355
364
  // unsqueeze both outer and inner dimensions
356
- submatrix = unsqueeze(submatrix, iSize.length, outer, sSize);
365
+ submatrix = unsqueeze(submatrix, iSize.length, outer, submatrixSize);
357
366
  }
358
367
 
359
368
  // check whether the size of the submatrix matches the index size
360
- if (!deepStrictEqual(iSize, sSize)) {
361
- throw new DimensionError(iSize, sSize, '>');
369
+ if (!deepStrictEqual(iSize, submatrixSize)) {
370
+ throw new DimensionError(iSize, submatrixSize, '>');
362
371
  }
363
372
 
364
373
  // enlarge matrix when needed
@@ -387,16 +396,18 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
387
396
  function setSubmatrixRecursive(data, submatrix) {
388
397
  var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
389
398
  var range = index.dimension(depth);
399
+ var recursiveCallback = (rangeIndex, i) => {
400
+ validateIndex(rangeIndex, data.length);
401
+ setSubmatrixRecursive(data[rangeIndex], submatrix[i[0]], depth + 1);
402
+ };
403
+ var finalCallback = (rangeIndex, i) => {
404
+ validateIndex(rangeIndex, data.length);
405
+ data[rangeIndex] = submatrix[i[0]];
406
+ };
390
407
  if (depth < maxDepth) {
391
- range.forEach((rangeIndex, i) => {
392
- validateIndex(rangeIndex, data.length);
393
- setSubmatrixRecursive(data[rangeIndex], submatrix[i[0]], depth + 1);
394
- });
408
+ if (isNumber(range)) recursiveCallback(range, [0]);else range.forEach(recursiveCallback);
395
409
  } else {
396
- range.forEach((rangeIndex, i) => {
397
- validateIndex(rangeIndex, data.length);
398
- data[rangeIndex] = submatrix[i[0]];
399
- });
410
+ if (isNumber(range)) finalCallback(range, [0]);else range.forEach(finalCallback);
400
411
  }
401
412
  }
402
413
  }
@@ -1,4 +1,4 @@
1
- import { isArray, isMatrix, isRange } from '../../utils/is.js';
1
+ import { isArray, isMatrix, isRange, isNumber, isString } from '../../utils/is.js';
2
2
  import { clone } from '../../utils/object.js';
3
3
  import { isInteger } from '../../utils/number.js';
4
4
  import { factory } from '../../utils/factory.js';
@@ -31,7 +31,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
31
31
  * @Constructor Index
32
32
  * @param {...*} ranges
33
33
  */
34
- function Index(ranges) {
34
+ function Index() {
35
35
  if (!(this instanceof Index)) {
36
36
  throw new SyntaxError('Constructor must be called with the new operator');
37
37
  }
@@ -39,7 +39,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
39
39
  this._sourceSize = [];
40
40
  this._isScalar = true;
41
41
  for (var i = 0, ii = arguments.length; i < ii; i++) {
42
- var arg = arguments[i];
42
+ var arg = i < 0 || arguments.length <= i ? undefined : arguments[i];
43
43
  var argIsArray = isArray(arg);
44
44
  var argIsMatrix = isMatrix(arg);
45
45
  var argType = typeof arg;
@@ -50,6 +50,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
50
50
  } else if (argIsArray || argIsMatrix) {
51
51
  // create matrix
52
52
  var m = void 0;
53
+ this._isScalar = false;
53
54
  if (getMatrixDataType(arg) === 'boolean') {
54
55
  if (argIsArray) m = _createImmutableMatrix(_booleansArrayToNumbersForIndex(arg).valueOf());
55
56
  if (argIsMatrix) m = _createImmutableMatrix(_booleansArrayToNumbersForIndex(arg._data).valueOf());
@@ -58,16 +59,10 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
58
59
  m = _createImmutableMatrix(arg.valueOf());
59
60
  }
60
61
  this._dimensions.push(m);
61
- // size
62
- var size = m.size();
63
- // scalar
64
- if (size.length !== 1 || size[0] !== 1 || sourceSize !== null) {
65
- this._isScalar = false;
66
- }
67
62
  } else if (argType === 'number') {
68
- this._dimensions.push(_createImmutableMatrix([arg]));
63
+ this._dimensions.push(arg);
69
64
  } else if (argType === 'bigint') {
70
- this._dimensions.push(_createImmutableMatrix([Number(arg)]));
65
+ this._dimensions.push(Number(arg));
71
66
  } else if (argType === 'string') {
72
67
  // object property (arguments.count should be 1)
73
68
  this._dimensions.push(arg);
@@ -87,12 +82,15 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
87
82
  function _createImmutableMatrix(arg) {
88
83
  // loop array elements
89
84
  for (var i = 0, l = arg.length; i < l; i++) {
90
- if (typeof arg[i] !== 'number' || !isInteger(arg[i])) {
85
+ if (!isNumber(arg[i]) || !isInteger(arg[i])) {
91
86
  throw new TypeError('Index parameters must be positive integer numbers');
92
87
  }
93
88
  }
94
89
  // create matrix
95
- return new ImmutableDenseMatrix(arg);
90
+ var matrix = new ImmutableDenseMatrix();
91
+ matrix._data = arg;
92
+ matrix._size = [arg.length];
93
+ return matrix;
96
94
  }
97
95
 
98
96
  /**
@@ -130,7 +128,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
130
128
  var size = [];
131
129
  for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
132
130
  var d = this._dimensions[i];
133
- size[i] = typeof d === 'string' ? 1 : d.size()[0];
131
+ size[i] = isString(d) || isNumber(d) ? 1 : d.size()[0];
134
132
  }
135
133
  return size;
136
134
  };
@@ -144,7 +142,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
144
142
  var values = [];
145
143
  for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
146
144
  var range = this._dimensions[i];
147
- values[i] = typeof range === 'string' ? range : range.max();
145
+ values[i] = isString(range) || isNumber(range) ? range : range.max();
148
146
  }
149
147
  return values;
150
148
  };
@@ -158,7 +156,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
158
156
  var values = [];
159
157
  for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
160
158
  var range = this._dimensions[i];
161
- values[i] = typeof range === 'string' ? range : range.min();
159
+ values[i] = isString(range) || isNumber(range) ? range : range.min();
162
160
  }
163
161
  return values;
164
162
  };
@@ -183,10 +181,11 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
183
181
  * @returns {Range | null} range
184
182
  */
185
183
  Index.prototype.dimension = function (dim) {
186
- if (typeof dim !== 'number') {
184
+ var _this$_dimensions$dim;
185
+ if (!isNumber(dim)) {
187
186
  return null;
188
187
  }
189
- return this._dimensions[dim] || null;
188
+ return (_this$_dimensions$dim = this._dimensions[dim]) !== null && _this$_dimensions$dim !== void 0 ? _this$_dimensions$dim : null;
190
189
  };
191
190
 
192
191
  /**
@@ -194,7 +193,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
194
193
  * @returns {boolean} Returns true if the index is an object property
195
194
  */
196
195
  Index.prototype.isObjectProperty = function () {
197
- return this._dimensions.length === 1 && typeof this._dimensions[0] === 'string';
196
+ return this._dimensions.length === 1 && isString(this._dimensions[0]);
198
197
  };
199
198
 
200
199
  /**
@@ -228,7 +227,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
228
227
  var array = [];
229
228
  for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
230
229
  var dimension = this._dimensions[i];
231
- array.push(typeof dimension === 'string' ? dimension : dimension.toArray());
230
+ array.push(isString(dimension) || isNumber(dimension) ? dimension : dimension.toArray());
232
231
  }
233
232
  return array;
234
233
  };
@@ -250,7 +249,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
250
249
  var strings = [];
251
250
  for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
252
251
  var dimension = this._dimensions[i];
253
- if (typeof dimension === 'string') {
252
+ if (isString(dimension)) {
254
253
  strings.push(JSON.stringify(dimension));
255
254
  } else {
256
255
  strings.push(dimension.toString());