mathjs 13.0.2 → 13.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. package/HISTORY.md +26 -1
  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/core/create.js +12 -9
  6. package/lib/cjs/core/function/import.js +1 -1
  7. package/lib/cjs/core/function/typed.js +3 -4
  8. package/lib/cjs/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
  9. package/lib/cjs/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
  10. package/lib/cjs/entry/impureFunctionsAny.generated.js +2 -2
  11. package/lib/cjs/entry/pureFunctionsAny.generated.js +6 -8
  12. package/lib/cjs/entry/typeChecks.js +18 -0
  13. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -2
  14. package/lib/cjs/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
  15. package/lib/cjs/expression/embeddedDocs/function/matrix/diff.js +1 -1
  16. package/lib/cjs/expression/embeddedDocs/function/matrix/fft.js +1 -1
  17. package/lib/cjs/expression/embeddedDocs/function/matrix/ifft.js +1 -1
  18. package/lib/cjs/expression/embeddedDocs/function/matrix/kron.js +1 -1
  19. package/lib/cjs/expression/embeddedDocs/function/matrix/map.js +3 -3
  20. package/lib/cjs/expression/embeddedDocs/function/special/zeta.js +1 -1
  21. package/lib/cjs/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
  22. package/lib/cjs/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
  23. package/lib/cjs/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
  24. package/lib/cjs/expression/embeddedDocs/function/utils/clone.js +1 -1
  25. package/lib/cjs/expression/function/evaluate.js +5 -0
  26. package/lib/cjs/expression/node/FunctionNode.js +1 -1
  27. package/lib/cjs/expression/transform/filter.transform.js +2 -2
  28. package/lib/cjs/expression/transform/map.transform.js +104 -37
  29. package/lib/cjs/expression/transform/utils/dimToZeroBase.js +23 -0
  30. package/lib/cjs/expression/transform/utils/lastDimToZeroBase.js +3 -4
  31. package/lib/cjs/function/arithmetic/hypot.js +3 -3
  32. package/lib/cjs/function/matrix/apply.js +1 -1
  33. package/lib/cjs/function/matrix/fft.js +3 -3
  34. package/lib/cjs/function/matrix/filter.js +2 -2
  35. package/lib/cjs/function/matrix/flatten.js +5 -6
  36. package/lib/cjs/function/matrix/ifft.js +2 -2
  37. package/lib/cjs/function/matrix/kron.js +4 -4
  38. package/lib/cjs/function/matrix/map.js +109 -18
  39. package/lib/cjs/function/matrix/size.js +7 -7
  40. package/lib/cjs/function/matrix/squeeze.js +3 -4
  41. package/lib/cjs/function/probability/random.js +1 -1
  42. package/lib/cjs/function/probability/randomInt.js +1 -1
  43. package/lib/cjs/function/statistics/cumsum.js +2 -2
  44. package/lib/cjs/function/trigonometry/acoth.js +2 -2
  45. package/lib/cjs/function/trigonometry/acsch.js +2 -2
  46. package/lib/cjs/header.js +2 -2
  47. package/lib/cjs/type/matrix/DenseMatrix.js +3 -28
  48. package/lib/cjs/type/matrix/SparseMatrix.js +5 -8
  49. package/lib/cjs/type/unit/Unit.js +57 -114
  50. package/lib/cjs/utils/array.js +27 -0
  51. package/lib/cjs/utils/collection.js +1 -1
  52. package/lib/cjs/utils/function.js +0 -14
  53. package/lib/cjs/utils/is.js +27 -0
  54. package/lib/cjs/utils/map.js +2 -20
  55. package/lib/cjs/version.js +1 -1
  56. package/lib/esm/core/create.js +9 -6
  57. package/lib/esm/core/function/import.js +1 -1
  58. package/lib/esm/core/function/typed.js +2 -3
  59. package/lib/esm/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
  60. package/lib/esm/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
  61. package/lib/esm/entry/impureFunctionsAny.generated.js +3 -3
  62. package/lib/esm/entry/pureFunctionsAny.generated.js +7 -9
  63. package/lib/esm/entry/typeChecks.js +1 -1
  64. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -2
  65. package/lib/esm/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
  66. package/lib/esm/expression/embeddedDocs/function/matrix/diff.js +1 -1
  67. package/lib/esm/expression/embeddedDocs/function/matrix/fft.js +1 -1
  68. package/lib/esm/expression/embeddedDocs/function/matrix/ifft.js +1 -1
  69. package/lib/esm/expression/embeddedDocs/function/matrix/kron.js +1 -1
  70. package/lib/esm/expression/embeddedDocs/function/matrix/map.js +3 -3
  71. package/lib/esm/expression/embeddedDocs/function/special/zeta.js +1 -1
  72. package/lib/esm/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
  73. package/lib/esm/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
  74. package/lib/esm/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
  75. package/lib/esm/expression/embeddedDocs/function/utils/clone.js +1 -1
  76. package/lib/esm/expression/function/compile.js +1 -1
  77. package/lib/esm/expression/function/evaluate.js +8 -3
  78. package/lib/esm/expression/node/FunctionNode.js +1 -1
  79. package/lib/esm/expression/parse.js +2 -2
  80. package/lib/esm/expression/transform/filter.transform.js +4 -4
  81. package/lib/esm/expression/transform/forEach.transform.js +4 -4
  82. package/lib/esm/expression/transform/map.transform.js +104 -37
  83. package/lib/esm/expression/transform/print.transform.js +2 -2
  84. package/lib/esm/expression/transform/utils/dimToZeroBase.js +16 -0
  85. package/lib/esm/expression/transform/utils/lastDimToZeroBase.js +4 -6
  86. package/lib/esm/function/algebra/decomposition/slu.js +1 -1
  87. package/lib/esm/function/algebra/derivative.js +15 -15
  88. package/lib/esm/function/algebra/lyap.js +4 -4
  89. package/lib/esm/function/algebra/simplify/util.js +3 -3
  90. package/lib/esm/function/algebra/simplifyConstant.js +9 -9
  91. package/lib/esm/function/algebra/solver/lsolve.js +3 -3
  92. package/lib/esm/function/algebra/solver/lsolveAll.js +3 -3
  93. package/lib/esm/function/algebra/solver/lusolve.js +5 -5
  94. package/lib/esm/function/algebra/solver/usolve.js +3 -3
  95. package/lib/esm/function/algebra/solver/usolveAll.js +3 -3
  96. package/lib/esm/function/algebra/sylvester.js +7 -7
  97. package/lib/esm/function/arithmetic/addScalar.js +4 -4
  98. package/lib/esm/function/arithmetic/ceil.js +6 -6
  99. package/lib/esm/function/arithmetic/divide.js +5 -5
  100. package/lib/esm/function/arithmetic/divideScalar.js +5 -5
  101. package/lib/esm/function/arithmetic/fix.js +5 -5
  102. package/lib/esm/function/arithmetic/floor.js +6 -6
  103. package/lib/esm/function/arithmetic/hypot.js +3 -3
  104. package/lib/esm/function/arithmetic/mod.js +3 -3
  105. package/lib/esm/function/arithmetic/multiply.js +7 -7
  106. package/lib/esm/function/arithmetic/multiplyScalar.js +4 -4
  107. package/lib/esm/function/arithmetic/norm.js +2 -2
  108. package/lib/esm/function/arithmetic/pow.js +6 -6
  109. package/lib/esm/function/arithmetic/round.js +7 -7
  110. package/lib/esm/function/arithmetic/subtractScalar.js +4 -4
  111. package/lib/esm/function/arithmetic/xgcd.js +1 -1
  112. package/lib/esm/function/combinatorics/bellNumbers.js +1 -1
  113. package/lib/esm/function/combinatorics/catalan.js +1 -1
  114. package/lib/esm/function/combinatorics/composition.js +1 -1
  115. package/lib/esm/function/combinatorics/stirlingS2.js +1 -1
  116. package/lib/esm/function/geometry/distance.js +4 -4
  117. package/lib/esm/function/geometry/intersect.js +2 -2
  118. package/lib/esm/function/logical/and.js +2 -2
  119. package/lib/esm/function/logical/or.js +2 -2
  120. package/lib/esm/function/logical/xor.js +2 -2
  121. package/lib/esm/function/matrix/apply.js +2 -2
  122. package/lib/esm/function/matrix/column.js +1 -1
  123. package/lib/esm/function/matrix/concat.js +1 -1
  124. package/lib/esm/function/matrix/count.js +1 -1
  125. package/lib/esm/function/matrix/cross.js +3 -3
  126. package/lib/esm/function/matrix/diag.js +10 -10
  127. package/lib/esm/function/matrix/diff.js +2 -2
  128. package/lib/esm/function/matrix/eigs.js +3 -3
  129. package/lib/esm/function/matrix/fft.js +3 -3
  130. package/lib/esm/function/matrix/filter.js +4 -4
  131. package/lib/esm/function/matrix/flatten.js +5 -6
  132. package/lib/esm/function/matrix/forEach.js +4 -4
  133. package/lib/esm/function/matrix/identity.js +6 -6
  134. package/lib/esm/function/matrix/ifft.js +3 -3
  135. package/lib/esm/function/matrix/inv.js +1 -1
  136. package/lib/esm/function/matrix/kron.js +7 -7
  137. package/lib/esm/function/matrix/map.js +110 -19
  138. package/lib/esm/function/matrix/matrixFromFunction.js +6 -6
  139. package/lib/esm/function/matrix/ones.js +2 -2
  140. package/lib/esm/function/matrix/partitionSelect.js +2 -2
  141. package/lib/esm/function/matrix/pinv.js +1 -1
  142. package/lib/esm/function/matrix/range.js +10 -10
  143. package/lib/esm/function/matrix/reshape.js +2 -2
  144. package/lib/esm/function/matrix/rotate.js +4 -4
  145. package/lib/esm/function/matrix/rotationMatrix.js +6 -6
  146. package/lib/esm/function/matrix/row.js +1 -1
  147. package/lib/esm/function/matrix/size.js +8 -8
  148. package/lib/esm/function/matrix/sort.js +4 -4
  149. package/lib/esm/function/matrix/sqrtm.js +1 -1
  150. package/lib/esm/function/matrix/squeeze.js +3 -4
  151. package/lib/esm/function/matrix/subset.js +2 -2
  152. package/lib/esm/function/matrix/zeros.js +2 -2
  153. package/lib/esm/function/probability/combinations.js +1 -1
  154. package/lib/esm/function/probability/combinationsWithRep.js +2 -2
  155. package/lib/esm/function/probability/kldivergence.js +4 -4
  156. package/lib/esm/function/probability/multinomial.js +1 -1
  157. package/lib/esm/function/probability/permutations.js +2 -2
  158. package/lib/esm/function/probability/pickRandom.js +6 -6
  159. package/lib/esm/function/probability/random.js +1 -1
  160. package/lib/esm/function/probability/randomInt.js +1 -1
  161. package/lib/esm/function/relational/compare.js +6 -6
  162. package/lib/esm/function/relational/deepEqual.js +1 -1
  163. package/lib/esm/function/relational/equal.js +1 -1
  164. package/lib/esm/function/relational/equalScalar.js +7 -7
  165. package/lib/esm/function/relational/equalText.js +1 -1
  166. package/lib/esm/function/relational/larger.js +3 -3
  167. package/lib/esm/function/relational/largerEq.js +4 -4
  168. package/lib/esm/function/relational/smaller.js +3 -3
  169. package/lib/esm/function/relational/smallerEq.js +3 -3
  170. package/lib/esm/function/relational/unequal.js +1 -1
  171. package/lib/esm/function/set/setCartesian.js +1 -1
  172. package/lib/esm/function/set/setDifference.js +1 -1
  173. package/lib/esm/function/set/setDistinct.js +1 -1
  174. package/lib/esm/function/set/setIntersect.js +1 -1
  175. package/lib/esm/function/set/setIsSubset.js +1 -1
  176. package/lib/esm/function/set/setMultiplicity.js +1 -1
  177. package/lib/esm/function/set/setPowerset.js +1 -1
  178. package/lib/esm/function/set/setSize.js +2 -2
  179. package/lib/esm/function/set/setSymDifference.js +1 -1
  180. package/lib/esm/function/set/setUnion.js +1 -1
  181. package/lib/esm/function/signal/freqz.js +6 -6
  182. package/lib/esm/function/statistics/corr.js +2 -2
  183. package/lib/esm/function/statistics/cumsum.js +3 -3
  184. package/lib/esm/function/statistics/max.js +1 -1
  185. package/lib/esm/function/statistics/median.js +3 -3
  186. package/lib/esm/function/statistics/min.js +1 -1
  187. package/lib/esm/function/statistics/prod.js +1 -1
  188. package/lib/esm/function/statistics/variance.js +2 -2
  189. package/lib/esm/function/string/bin.js +2 -2
  190. package/lib/esm/function/string/hex.js +2 -2
  191. package/lib/esm/function/string/oct.js +2 -2
  192. package/lib/esm/function/trigonometry/acoth.js +2 -2
  193. package/lib/esm/function/trigonometry/acsch.js +2 -2
  194. package/lib/esm/type/bigint.js +1 -1
  195. package/lib/esm/type/complex/function/complex.js +2 -2
  196. package/lib/esm/type/fraction/function/fraction.js +1 -1
  197. package/lib/esm/type/matrix/DenseMatrix.js +13 -38
  198. package/lib/esm/type/matrix/SparseMatrix.js +5 -8
  199. package/lib/esm/type/matrix/function/index.js +1 -1
  200. package/lib/esm/type/matrix/function/matrix.js +1 -1
  201. package/lib/esm/type/matrix/function/sparse.js +2 -2
  202. package/lib/esm/type/number.js +1 -1
  203. package/lib/esm/type/unit/Unit.js +57 -114
  204. package/lib/esm/type/unit/function/createUnit.js +3 -3
  205. package/lib/esm/type/unit/function/splitUnit.js +1 -1
  206. package/lib/esm/type/unit/function/unit.js +2 -2
  207. package/lib/esm/utils/array.js +26 -0
  208. package/lib/esm/utils/collection.js +1 -1
  209. package/lib/esm/utils/function.js +0 -13
  210. package/lib/esm/utils/is.js +24 -0
  211. package/lib/esm/utils/map.js +2 -19
  212. package/lib/esm/version.js +1 -1
  213. package/package.json +19 -19
  214. package/types/index.d.ts +108 -25
@@ -54,7 +54,7 @@ export var createFraction = /* #__PURE__ */factory(name, dependencies, _ref => {
54
54
  string: function string(x) {
55
55
  return new Fraction(x);
56
56
  },
57
- 'number, number': function numberNumber(numerator, denominator) {
57
+ 'number, number': function number_number(numerator, denominator) {
58
58
  return new Fraction(numerator, denominator);
59
59
  },
60
60
  null: function _null(x) {
@@ -1,11 +1,11 @@
1
1
  import { isArray, isBigNumber, isCollection, isIndex, isMatrix, isNumber, isString, typeOf } from '../../utils/is.js';
2
- import { arraySize, getArrayDataType, processSizesWildcard, reshape, resize, unsqueeze, validate, validateIndex, broadcastTo } from '../../utils/array.js';
2
+ import { arraySize, getArrayDataType, processSizesWildcard, reshape, resize, unsqueeze, validate, validateIndex, broadcastTo, get } from '../../utils/array.js';
3
3
  import { format } from '../../utils/string.js';
4
4
  import { isInteger } from '../../utils/number.js';
5
5
  import { clone, deepStrictEqual } from '../../utils/object.js';
6
6
  import { DimensionError } from '../../error/DimensionError.js';
7
7
  import { factory } from '../../utils/factory.js';
8
- import { maxArgumentCount } from '../../utils/function.js';
8
+ import { applyCallback } from '../../utils/applyCallback.js';
9
9
  var name = 'DenseMatrix';
10
10
  var dependencies = ['Matrix'];
11
11
  export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _ref => {
@@ -166,24 +166,7 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
166
166
  * @return {*} value
167
167
  */
168
168
  DenseMatrix.prototype.get = function (index) {
169
- if (!isArray(index)) {
170
- throw new TypeError('Array expected');
171
- }
172
- if (index.length !== this._size.length) {
173
- throw new DimensionError(index.length, this._size.length);
174
- }
175
-
176
- // check index
177
- for (var x = 0; x < index.length; x++) {
178
- validateIndex(index[x], this._size[x]);
179
- }
180
- var data = this._data;
181
- for (var i = 0, ii = index.length; i < ii; i++) {
182
- var indexI = index[i];
183
- validateIndex(indexI, data.length);
184
- data = data[indexI];
185
- }
186
- return data;
169
+ return get(this._data, index);
187
170
  };
188
171
 
189
172
  /**
@@ -546,28 +529,20 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
546
529
  DenseMatrix.prototype.map = function (callback) {
547
530
  // matrix instance
548
531
  var me = this;
549
- var args = maxArgumentCount(callback);
550
- var recurse = function recurse(value, index) {
532
+ var _recurse = function recurse(value, index) {
551
533
  if (isArray(value)) {
552
534
  return value.map(function (child, i) {
553
- return recurse(child, index.concat(i));
535
+ return _recurse(child, index.concat(i));
554
536
  });
555
537
  } else {
556
538
  // invoke the callback function with the right number of arguments
557
- if (args === 1) {
558
- return callback(value);
559
- } else if (args === 2) {
560
- return callback(value, index);
561
- } else {
562
- // 3 or -1
563
- return callback(value, index, me);
564
- }
539
+ return applyCallback(callback, value, index, me, 'map');
565
540
  }
566
541
  };
567
542
 
568
543
  // determine the new datatype when the original matrix has datatype defined
569
544
  // TODO: should be done in matrix constructor instead
570
- var data = recurse(this._data, []);
545
+ var data = _recurse(this._data, []);
571
546
  var datatype = this._datatype !== undefined ? getArrayDataType(data, typeOf) : undefined;
572
547
  return new DenseMatrix(data, datatype);
573
548
  };
@@ -582,16 +557,16 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
582
557
  DenseMatrix.prototype.forEach = function (callback) {
583
558
  // matrix instance
584
559
  var me = this;
585
- var recurse = function recurse(value, index) {
560
+ var _recurse2 = function recurse(value, index) {
586
561
  if (isArray(value)) {
587
562
  value.forEach(function (child, i) {
588
- recurse(child, index.concat(i));
563
+ _recurse2(child, index.concat(i));
589
564
  });
590
565
  } else {
591
566
  callback(value, index, me);
592
567
  }
593
568
  };
594
- recurse(this._data, []);
569
+ _recurse2(this._data, []);
595
570
  };
596
571
 
597
572
  /**
@@ -599,10 +574,10 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
599
574
  * @return {Iterable<{ value, index: number[] }>}
600
575
  */
601
576
  DenseMatrix.prototype[Symbol.iterator] = function* () {
602
- var recurse = function* recurse(value, index) {
577
+ var _recurse3 = function* recurse(value, index) {
603
578
  if (isArray(value)) {
604
579
  for (var i = 0; i < value.length; i++) {
605
- yield* recurse(value[i], index.concat(i));
580
+ yield* _recurse3(value[i], index.concat(i));
606
581
  }
607
582
  } else {
608
583
  yield {
@@ -611,7 +586,7 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
611
586
  };
612
587
  }
613
588
  };
614
- yield* recurse(this._data, []);
589
+ yield* _recurse3(this._data, []);
615
590
  };
616
591
 
617
592
  /**
@@ -5,7 +5,7 @@ import { clone, deepStrictEqual } from '../../utils/object.js';
5
5
  import { arraySize, getArrayDataType, processSizesWildcard, unsqueeze, validateIndex } from '../../utils/array.js';
6
6
  import { factory } from '../../utils/factory.js';
7
7
  import { DimensionError } from '../../error/DimensionError.js';
8
- import { maxArgumentCount } from '../../utils/function.js';
8
+ import { applyCallback } from '../../utils/applyCallback.js';
9
9
  var name = 'SparseMatrix';
10
10
  var dependencies = ['typed', 'equalScalar', 'Matrix'];
11
11
  export var createSparseMatrixClass = /* #__PURE__ */factory(name, dependencies, _ref => {
@@ -873,12 +873,9 @@ export var createSparseMatrixClass = /* #__PURE__ */factory(name, dependencies,
873
873
  var rows = this._size[0];
874
874
  var columns = this._size[1];
875
875
  // invoke callback
876
- var args = maxArgumentCount(callback);
877
876
  var invoke = function invoke(v, i, j) {
878
877
  // invoke callback
879
- if (args === 1) return callback(v);
880
- if (args === 2) return callback(v, [i, j]);
881
- return callback(v, [i, j], me);
878
+ return applyCallback(callback, v, [i, j], me, 'map');
882
879
  };
883
880
  // invoke _map
884
881
  return _map(this, 0, rows - 1, 0, columns - 1, invoke, skipZeros);
@@ -908,11 +905,11 @@ export var createSparseMatrixClass = /* #__PURE__ */factory(name, dependencies,
908
905
  // invoke callback
909
906
  var invoke = function invoke(v, x, y) {
910
907
  // invoke callback
911
- v = callback(v, x, y);
908
+ var value = callback(v, x, y);
912
909
  // check value != 0
913
- if (!eq(v, zero)) {
910
+ if (!eq(value, zero)) {
914
911
  // store value
915
- values.push(v);
912
+ values.push(value);
916
913
  // index
917
914
  index.push(x);
918
915
  }
@@ -43,7 +43,7 @@ export var createIndex = /* #__PURE__ */factory(name, dependencies, _ref => {
43
43
  * @return {Index} Returns the created index
44
44
  */
45
45
  return typed(name, {
46
- '...number | string | BigNumber | Range | Array | Matrix': function numberStringBigNumberRangeArrayMatrix(args) {
46
+ '...number | string | BigNumber | Range | Array | Matrix': function number__string__BigNumber__Range__Array__Matrix(args) {
47
47
  var ranges = args.map(function (arg) {
48
48
  if (isBigNumber(arg)) {
49
49
  return arg.toNumber(); // convert BigNumber to Number
@@ -48,7 +48,7 @@ export var createMatrix = /* #__PURE__ */factory(name, dependencies, _ref => {
48
48
  string: function string(format) {
49
49
  return _create([], format);
50
50
  },
51
- 'string, string': function stringString(format, datatype) {
51
+ 'string, string': function string_string(format, datatype) {
52
52
  return _create([], format, datatype);
53
53
  },
54
54
  Array: function Array(data) {
@@ -46,10 +46,10 @@ export var createSparse = /* #__PURE__ */factory(name, dependencies, _ref => {
46
46
  string: function string(datatype) {
47
47
  return new SparseMatrix([], datatype);
48
48
  },
49
- 'Array | Matrix': function ArrayMatrix(data) {
49
+ 'Array | Matrix': function Array__Matrix(data) {
50
50
  return new SparseMatrix(data);
51
51
  },
52
- 'Array | Matrix, string': function ArrayMatrixString(data, datatype) {
52
+ 'Array | Matrix, string': function Array__Matrix_string(data, datatype) {
53
53
  return new SparseMatrix(data, datatype);
54
54
  }
55
55
  });
@@ -132,7 +132,7 @@ export var createNumber = /* #__PURE__ */factory(name, dependencies, _ref => {
132
132
  null: function _null(x) {
133
133
  return 0;
134
134
  },
135
- 'Unit, string | Unit': function UnitStringUnit(unit, valuelessUnit) {
135
+ 'Unit, string | Unit': function Unit_string__Unit(unit, valuelessUnit) {
136
136
  return unit.toNumber(valuelessUnit);
137
137
  },
138
138
  'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
@@ -426,7 +426,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
426
426
  * Return the type of the value of this unit
427
427
  *
428
428
  * @memberof Unit
429
- * @ return {string} type of the value of the unit
429
+ * @return {string} type of the value of the unit
430
430
  */
431
431
  Unit.prototype.valueType = function () {
432
432
  return typeOf(this.value);
@@ -436,6 +436,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
436
436
  * Return whether the unit is derived (such as m/s, or cm^2, but not N)
437
437
  * @memberof Unit
438
438
  * @return {boolean} True if the unit is derived
439
+ * @private
439
440
  */
440
441
  Unit.prototype._isDerived = function () {
441
442
  if (this.units.length === 0) {
@@ -548,7 +549,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
548
549
  * check if this unit has given base unit
549
550
  * If this unit is a derived unit, this will ALWAYS return false, since by definition base units are not derived.
550
551
  * @memberof Unit
551
- * @param {BASE_UNITS | string | undefined} base
552
+ * @param {BASE_UNIT | string | undefined} base
552
553
  */
553
554
  Unit.prototype.hasBase = function (base) {
554
555
  if (typeof base === 'string') {
@@ -2316,34 +2317,34 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
2316
2317
  name: 'minim',
2317
2318
  base: BASE_UNITS.VOLUME,
2318
2319
  prefixes: PREFIXES.NONE,
2319
- value: 0.00000006161152,
2320
+ value: 0.000000061611519921875,
2320
2321
  offset: 0
2321
2322
  },
2322
- // 0.06161152 mL
2323
+ // 1/61440 gallons
2323
2324
  fluiddram: {
2324
2325
  name: 'fluiddram',
2325
2326
  base: BASE_UNITS.VOLUME,
2326
2327
  prefixes: PREFIXES.NONE,
2327
- value: 0.0000036966911,
2328
+ value: 0.0000036966911953125,
2328
2329
  offset: 0
2329
2330
  },
2330
- // 3.696691 mL
2331
+ // 1/1024 gallons
2331
2332
  fluidounce: {
2332
2333
  name: 'fluidounce',
2333
2334
  base: BASE_UNITS.VOLUME,
2334
2335
  prefixes: PREFIXES.NONE,
2335
- value: 0.00002957353,
2336
+ value: 0.0000295735295625,
2336
2337
  offset: 0
2337
2338
  },
2338
- // 29.57353 mL
2339
+ // 1/128 gallons
2339
2340
  gill: {
2340
2341
  name: 'gill',
2341
2342
  base: BASE_UNITS.VOLUME,
2342
2343
  prefixes: PREFIXES.NONE,
2343
- value: 0.0001182941,
2344
+ value: 0.00011829411825,
2344
2345
  offset: 0
2345
2346
  },
2346
- // 118.2941 mL
2347
+ // 1/32 gallons
2347
2348
  cc: {
2348
2349
  name: 'cc',
2349
2350
  base: BASE_UNITS.VOLUME,
@@ -2356,133 +2357,58 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
2356
2357
  name: 'cup',
2357
2358
  base: BASE_UNITS.VOLUME,
2358
2359
  prefixes: PREFIXES.NONE,
2359
- value: 0.0002365882,
2360
+ value: 0.0002365882365,
2360
2361
  offset: 0
2361
2362
  },
2362
- // 236.5882 mL
2363
+ // 1/16 gallons
2363
2364
  pint: {
2364
2365
  name: 'pint',
2365
2366
  base: BASE_UNITS.VOLUME,
2366
2367
  prefixes: PREFIXES.NONE,
2367
- value: 0.0004731765,
2368
+ value: 0.000473176473,
2368
2369
  offset: 0
2369
2370
  },
2370
- // 473.1765 mL
2371
+ // 1/8 gallons
2371
2372
  quart: {
2372
2373
  name: 'quart',
2373
2374
  base: BASE_UNITS.VOLUME,
2374
2375
  prefixes: PREFIXES.NONE,
2375
- value: 0.0009463529,
2376
+ value: 0.000946352946,
2376
2377
  offset: 0
2377
2378
  },
2378
- // 946.3529 mL
2379
+ // 1/4 gallons
2379
2380
  gallon: {
2380
2381
  name: 'gallon',
2381
2382
  base: BASE_UNITS.VOLUME,
2382
2383
  prefixes: PREFIXES.NONE,
2383
- value: 0.003785412,
2384
+ value: 0.003785411784,
2384
2385
  offset: 0
2385
2386
  },
2386
- // 3.785412 L
2387
+ // 3.785411784 L
2387
2388
  beerbarrel: {
2388
2389
  name: 'beerbarrel',
2389
2390
  base: BASE_UNITS.VOLUME,
2390
2391
  prefixes: PREFIXES.NONE,
2391
- value: 0.1173478,
2392
+ value: 0.117347765304,
2392
2393
  offset: 0
2393
2394
  },
2394
- // 117.3478 L
2395
+ // 31 gallons
2395
2396
  oilbarrel: {
2396
2397
  name: 'oilbarrel',
2397
2398
  base: BASE_UNITS.VOLUME,
2398
2399
  prefixes: PREFIXES.NONE,
2399
- value: 0.1589873,
2400
+ value: 0.158987294928,
2400
2401
  offset: 0
2401
2402
  },
2402
- // 158.9873 L
2403
+ // 42 gallons
2403
2404
  hogshead: {
2404
2405
  name: 'hogshead',
2405
2406
  base: BASE_UNITS.VOLUME,
2406
2407
  prefixes: PREFIXES.NONE,
2407
- value: 0.2384810,
2408
+ value: 0.238480942392,
2408
2409
  offset: 0
2409
2410
  },
2410
- // 238.4810 L
2411
-
2412
- // {name: 'min', base: BASE_UNITS.VOLUME, prefixes: PREFIXES.NONE, value: 0.00000006161152, offset: 0}, // 0.06161152 mL // min is already in use as minute
2413
- fldr: {
2414
- name: 'fldr',
2415
- base: BASE_UNITS.VOLUME,
2416
- prefixes: PREFIXES.NONE,
2417
- value: 0.0000036966911,
2418
- offset: 0
2419
- },
2420
- // 3.696691 mL
2421
- floz: {
2422
- name: 'floz',
2423
- base: BASE_UNITS.VOLUME,
2424
- prefixes: PREFIXES.NONE,
2425
- value: 0.00002957353,
2426
- offset: 0
2427
- },
2428
- // 29.57353 mL
2429
- gi: {
2430
- name: 'gi',
2431
- base: BASE_UNITS.VOLUME,
2432
- prefixes: PREFIXES.NONE,
2433
- value: 0.0001182941,
2434
- offset: 0
2435
- },
2436
- // 118.2941 mL
2437
- cp: {
2438
- name: 'cp',
2439
- base: BASE_UNITS.VOLUME,
2440
- prefixes: PREFIXES.NONE,
2441
- value: 0.0002365882,
2442
- offset: 0
2443
- },
2444
- // 236.5882 mL
2445
- pt: {
2446
- name: 'pt',
2447
- base: BASE_UNITS.VOLUME,
2448
- prefixes: PREFIXES.NONE,
2449
- value: 0.0004731765,
2450
- offset: 0
2451
- },
2452
- // 473.1765 mL
2453
- qt: {
2454
- name: 'qt',
2455
- base: BASE_UNITS.VOLUME,
2456
- prefixes: PREFIXES.NONE,
2457
- value: 0.0009463529,
2458
- offset: 0
2459
- },
2460
- // 946.3529 mL
2461
- gal: {
2462
- name: 'gal',
2463
- base: BASE_UNITS.VOLUME,
2464
- prefixes: PREFIXES.NONE,
2465
- value: 0.003785412,
2466
- offset: 0
2467
- },
2468
- // 3.785412 L
2469
- bbl: {
2470
- name: 'bbl',
2471
- base: BASE_UNITS.VOLUME,
2472
- prefixes: PREFIXES.NONE,
2473
- value: 0.1173478,
2474
- offset: 0
2475
- },
2476
- // 117.3478 L
2477
- obl: {
2478
- name: 'obl',
2479
- base: BASE_UNITS.VOLUME,
2480
- prefixes: PREFIXES.NONE,
2481
- value: 0.1589873,
2482
- offset: 0
2483
- },
2484
- // 158.9873 L
2485
- // {name: 'hogshead', base: BASE_UNITS.VOLUME, prefixes: PREFIXES.NONE, value: 0.2384810, offset: 0}, // 238.4810 L // TODO: hh?
2411
+ // 63 gallons
2486
2412
 
2487
2413
  // Mass
2488
2414
  g: {
@@ -3286,14 +3212,23 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
3286
3212
  teaspoons: 'teaspoon',
3287
3213
  tablespoons: 'tablespoon',
3288
3214
  minims: 'minim',
3215
+ fldr: 'fluiddram',
3289
3216
  fluiddrams: 'fluiddram',
3217
+ floz: 'fluidounce',
3290
3218
  fluidounces: 'fluidounce',
3219
+ gi: 'gill',
3291
3220
  gills: 'gill',
3221
+ cp: 'cup',
3292
3222
  cups: 'cup',
3223
+ pt: 'pint',
3293
3224
  pints: 'pint',
3225
+ qt: 'quart',
3294
3226
  quarts: 'quart',
3227
+ gal: 'gallon',
3295
3228
  gallons: 'gallon',
3229
+ bbl: 'beerbarrel',
3296
3230
  beerbarrels: 'beerbarrel',
3231
+ obl: 'oilbarrel',
3297
3232
  oilbarrels: 'oilbarrel',
3298
3233
  hogsheads: 'hogshead',
3299
3234
  gtts: 'gtt',
@@ -3566,6 +3501,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
3566
3501
 
3567
3502
  /**
3568
3503
  * Set a unit system for formatting derived units.
3504
+ * @memberof Unit
3569
3505
  * @param {string} [name] The name of the unit system.
3570
3506
  */
3571
3507
  Unit.setUnitSystem = function (name) {
@@ -3578,6 +3514,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
3578
3514
 
3579
3515
  /**
3580
3516
  * Return the current unit system.
3517
+ * @memberof Unit
3581
3518
  * @return {string} The current unit system.
3582
3519
  */
3583
3520
  Unit.getUnitSystem = function () {
@@ -3667,7 +3604,9 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
3667
3604
  /**
3668
3605
  * Checks if a character is a valid latin letter (upper or lower case).
3669
3606
  * Note that this function can be overridden, for example to allow support of other alphabets.
3607
+ * @memberof Unit
3670
3608
  * @param {string} c Tested character
3609
+ * @return {boolean} true if the character is a latin letter
3671
3610
  */
3672
3611
  Unit.isValidAlpha = function isValidAlpha(c) {
3673
3612
  return /^[a-zA-Z]$/.test(c);
@@ -3687,20 +3626,24 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
3687
3626
  /**
3688
3627
  * Wrapper around createUnitSingle.
3689
3628
  * Example:
3690
- * createUnit({
3691
- * foo: { },
3692
- * bar: {
3693
- * definition: 'kg/foo',
3694
- * aliases: ['ba', 'barr', 'bars'],
3695
- * offset: 200
3696
- * },
3697
- * baz: '4 bar'
3698
- * },
3699
- * {
3700
- * override: true
3701
- * })
3629
+ * createUnit( {
3630
+ * foo: {
3631
+ * prefixes: 'long',
3632
+ * baseName: 'essence-of-foo'
3633
+ * },
3634
+ * bar: '40 foo',
3635
+ * baz: {
3636
+ * definition: '1 bar/hour',
3637
+ * prefixes: 'long'
3638
+ * }
3639
+ * },
3640
+ * {
3641
+ * override: true
3642
+ * })
3643
+ * @memberof Unit
3702
3644
  * @param {object} obj Object map. Each key becomes a unit which is defined by its value.
3703
3645
  * @param {object} options
3646
+ * @return {Unit} the last created unit
3704
3647
  */
3705
3648
  Unit.createUnit = function (obj, options) {
3706
3649
  if (typeof obj !== 'object') {
@@ -3735,13 +3678,13 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
3735
3678
  * Create a user-defined unit and register it with the Unit type.
3736
3679
  * Example:
3737
3680
  * createUnitSingle('knot', '0.514444444 m/s')
3738
- * createUnitSingle('acre', new Unit(43560, 'ft^2'))
3739
3681
  *
3682
+ * @memberof Unit
3740
3683
  * @param {string} name The name of the new unit. Must be unique. Example: 'knot'
3741
- * @param {string, Unit, Object} definition Definition of the unit in terms
3684
+ * @param {string | Unit | object} definition Definition of the unit in terms
3742
3685
  * of existing units. For example, '0.514444444 m / s'. Can be a Unit, a string,
3743
3686
  * or an Object. If an Object, may have the following properties:
3744
- * - definition {string|Unit} The definition of this unit.
3687
+ * - definition {string | Unit} The definition of this unit.
3745
3688
  * - prefixes {string} "none", "short", "long", "binary_short", or "binary_long".
3746
3689
  * The default is "none".
3747
3690
  * - aliases {Array} Array of strings. Example: ['knots', 'kt', 'kts']
@@ -50,7 +50,7 @@ export var createCreateUnit = /* #__PURE__ */factory(name, dependencies, _ref =>
50
50
  */
51
51
  return typed(name, {
52
52
  // General function signature. First parameter is an object where each property is the definition of a new unit. The object keys are the unit names and the values are the definitions. The values can be objects, strings, or Units. If a property is an empty object or an empty string, a new base unit is created. The second parameter is the options.
53
- 'Object, Object': function ObjectObject(obj, options) {
53
+ 'Object, Object': function Object_Object(obj, options) {
54
54
  return Unit.createUnit(obj, options);
55
55
  },
56
56
  // Same as above but without the options.
@@ -58,13 +58,13 @@ export var createCreateUnit = /* #__PURE__ */factory(name, dependencies, _ref =>
58
58
  return Unit.createUnit(obj, {});
59
59
  },
60
60
  // Shortcut method for creating one unit.
61
- 'string, Unit | string | Object, Object': function stringUnitStringObjectObject(name, def, options) {
61
+ 'string, Unit | string | Object, Object': function string_Unit__string__Object_Object(name, def, options) {
62
62
  var obj = {};
63
63
  obj[name] = def;
64
64
  return Unit.createUnit(obj, options);
65
65
  },
66
66
  // Same as above but without the options.
67
- 'string, Unit | string | Object': function stringUnitStringObject(name, def) {
67
+ 'string, Unit | string | Object': function string_Unit__string__Object(name, def) {
68
68
  var obj = {};
69
69
  obj[name] = def;
70
70
  return Unit.createUnit(obj, {});
@@ -25,7 +25,7 @@ export var createSplitUnit = /* #__PURE__ */factory(name, dependencies, _ref =>
25
25
  * @return {Array} An array of units.
26
26
  */
27
27
  return typed(name, {
28
- 'Unit, Array': function UnitArray(unit, parts) {
28
+ 'Unit, Array': function Unit_Array(unit, parts) {
29
29
  return unit.splitUnit(parts);
30
30
  }
31
31
  });
@@ -48,10 +48,10 @@ export var createUnitFunction = /* #__PURE__ */factory(name, dependencies, _ref
48
48
  allowNoUnits: true
49
49
  }); // a unit with value, like '5cm'
50
50
  },
51
- 'number | BigNumber | Fraction | Complex, string | Unit': function numberBigNumberFractionComplexStringUnit(value, unit) {
51
+ 'number | BigNumber | Fraction | Complex, string | Unit': function number__BigNumber__Fraction__Complex_string__Unit(value, unit) {
52
52
  return new Unit(value, unit);
53
53
  },
54
- 'number | BigNumber | Fraction': function numberBigNumberFraction(value) {
54
+ 'number | BigNumber | Fraction': function number__BigNumber__Fraction(value) {
55
55
  // dimensionless
56
56
  return new Unit(value);
57
57
  },
@@ -780,6 +780,32 @@ export function stretch(arrayToStretch, sizeToStretch, dimToStretch) {
780
780
  return concat(...Array(sizeToStretch).fill(arrayToStretch), dimToStretch);
781
781
  }
782
782
 
783
+ /**
784
+ * Retrieves a single element from an array given an index.
785
+ *
786
+ * @param {Array} array - The array from which to retrieve the value.
787
+ * @param {Array<number>} idx - An array of indices specifying the position of the desired element in each dimension.
788
+ * @returns {*} - The value at the specified position in the array.
789
+ *
790
+ * @example
791
+ * const arr = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]];
792
+ * const index = [1, 0, 1];
793
+ * console.log(getValue(arr, index)); // 6
794
+ */
795
+ export function get(array, index) {
796
+ if (!Array.isArray(array)) {
797
+ throw new Error('Array expected');
798
+ }
799
+ var size = arraySize(array);
800
+ if (index.length !== size.length) {
801
+ throw new DimensionError(index.length, size.length);
802
+ }
803
+ for (var x = 0; x < index.length; x++) {
804
+ validateIndex(index[x], size[x]);
805
+ }
806
+ return index.reduce((acc, curr) => acc[curr], array);
807
+ }
808
+
783
809
  /**
784
810
  * Deep clones a multidimensional array
785
811
  * @param {Array} array
@@ -78,7 +78,7 @@ export function reduce(mat, dim, callback) {
78
78
  throw new IndexError(dim, size.length);
79
79
  }
80
80
  if (isMatrix(mat)) {
81
- return mat.create(_reduce(mat.valueOf(), dim, callback));
81
+ return mat.create(_reduce(mat.valueOf(), dim, callback), mat.datatype());
82
82
  } else {
83
83
  return _reduce(mat, dim, callback);
84
84
  }
@@ -83,17 +83,4 @@ export function memoizeCompare(fn, isEqual) {
83
83
  };
84
84
  memoize.cache = [];
85
85
  return memoize;
86
- }
87
-
88
- /**
89
- * Find the maximum number of arguments expected by a typed function.
90
- * @param {function} fn A typed function
91
- * @return {number} Returns the maximum number of expected arguments.
92
- * Returns -1 when no signatures where found on the function.
93
- */
94
- export function maxArgumentCount(fn) {
95
- return Object.keys(fn.signatures || {}).reduce(function (args, signature) {
96
- var count = (signature.match(/,/g) || []).length + 1;
97
- return Math.max(args, count);
98
- }, -1);
99
86
  }