mathjs 13.0.3 → 13.1.1
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +30 -1
- package/bin/cli.js +24 -10
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +2 -2
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/create.js +12 -9
- package/lib/cjs/core/function/typed.js +3 -4
- package/lib/cjs/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
- package/lib/cjs/entry/impureFunctionsAny.generated.js +2 -2
- package/lib/cjs/entry/pureFunctionsAny.generated.js +6 -8
- package/lib/cjs/entry/typeChecks.js +18 -0
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -2
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/diff.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/fft.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/ifft.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/kron.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/map.js +3 -3
- package/lib/cjs/expression/embeddedDocs/function/special/zeta.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/utils/clone.js +1 -1
- package/lib/cjs/expression/function/evaluate.js +5 -0
- package/lib/cjs/expression/node/FunctionNode.js +10 -2
- package/lib/cjs/expression/transform/filter.transform.js +2 -2
- package/lib/cjs/expression/transform/map.transform.js +104 -37
- package/lib/cjs/expression/transform/utils/dimToZeroBase.js +23 -0
- package/lib/cjs/expression/transform/utils/lastDimToZeroBase.js +3 -4
- package/lib/cjs/function/arithmetic/hypot.js +3 -3
- package/lib/cjs/function/matrix/apply.js +1 -1
- package/lib/cjs/function/matrix/fft.js +3 -3
- package/lib/cjs/function/matrix/filter.js +2 -2
- package/lib/cjs/function/matrix/flatten.js +5 -6
- package/lib/cjs/function/matrix/ifft.js +2 -2
- package/lib/cjs/function/matrix/kron.js +4 -4
- package/lib/cjs/function/matrix/map.js +109 -18
- package/lib/cjs/function/matrix/size.js +7 -7
- package/lib/cjs/function/matrix/squeeze.js +3 -4
- package/lib/cjs/function/probability/random.js +1 -1
- package/lib/cjs/function/probability/randomInt.js +1 -1
- package/lib/cjs/function/statistics/cumsum.js +2 -2
- package/lib/cjs/function/trigonometry/acoth.js +2 -2
- package/lib/cjs/function/trigonometry/acsch.js +2 -2
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/matrix/DenseMatrix.js +3 -28
- package/lib/cjs/type/matrix/SparseMatrix.js +5 -8
- package/lib/cjs/utils/array.js +27 -0
- package/lib/cjs/utils/collection.js +1 -1
- package/lib/cjs/utils/customs.js +5 -12
- package/lib/cjs/utils/function.js +0 -14
- package/lib/cjs/utils/is.js +27 -0
- package/lib/cjs/utils/map.js +7 -23
- package/lib/cjs/version.js +1 -1
- package/lib/esm/core/create.js +9 -6
- package/lib/esm/core/function/typed.js +2 -3
- package/lib/esm/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
- package/lib/esm/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
- package/lib/esm/entry/impureFunctionsAny.generated.js +3 -3
- package/lib/esm/entry/pureFunctionsAny.generated.js +7 -9
- package/lib/esm/entry/typeChecks.js +1 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -2
- package/lib/esm/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/diff.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/fft.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/ifft.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/kron.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/map.js +3 -3
- package/lib/esm/expression/embeddedDocs/function/special/zeta.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/utils/clone.js +1 -1
- package/lib/esm/expression/function/compile.js +1 -1
- package/lib/esm/expression/function/evaluate.js +8 -3
- package/lib/esm/expression/node/FunctionNode.js +10 -2
- package/lib/esm/expression/parse.js +2 -2
- package/lib/esm/expression/transform/filter.transform.js +4 -4
- package/lib/esm/expression/transform/forEach.transform.js +4 -4
- package/lib/esm/expression/transform/map.transform.js +104 -37
- package/lib/esm/expression/transform/print.transform.js +2 -2
- package/lib/esm/expression/transform/utils/dimToZeroBase.js +16 -0
- package/lib/esm/expression/transform/utils/lastDimToZeroBase.js +4 -6
- package/lib/esm/function/algebra/decomposition/slu.js +1 -1
- package/lib/esm/function/algebra/derivative.js +15 -15
- package/lib/esm/function/algebra/lyap.js +4 -4
- package/lib/esm/function/algebra/simplify/util.js +3 -3
- package/lib/esm/function/algebra/simplifyConstant.js +9 -9
- package/lib/esm/function/algebra/solver/lsolve.js +3 -3
- package/lib/esm/function/algebra/solver/lsolveAll.js +3 -3
- package/lib/esm/function/algebra/solver/lusolve.js +5 -5
- package/lib/esm/function/algebra/solver/usolve.js +3 -3
- package/lib/esm/function/algebra/solver/usolveAll.js +3 -3
- package/lib/esm/function/algebra/sylvester.js +7 -7
- package/lib/esm/function/arithmetic/addScalar.js +4 -4
- package/lib/esm/function/arithmetic/ceil.js +6 -6
- package/lib/esm/function/arithmetic/divide.js +5 -5
- package/lib/esm/function/arithmetic/divideScalar.js +5 -5
- package/lib/esm/function/arithmetic/fix.js +5 -5
- package/lib/esm/function/arithmetic/floor.js +6 -6
- package/lib/esm/function/arithmetic/hypot.js +3 -3
- package/lib/esm/function/arithmetic/mod.js +3 -3
- package/lib/esm/function/arithmetic/multiply.js +7 -7
- package/lib/esm/function/arithmetic/multiplyScalar.js +4 -4
- package/lib/esm/function/arithmetic/norm.js +2 -2
- package/lib/esm/function/arithmetic/pow.js +6 -6
- package/lib/esm/function/arithmetic/round.js +7 -7
- package/lib/esm/function/arithmetic/subtractScalar.js +4 -4
- package/lib/esm/function/arithmetic/xgcd.js +1 -1
- package/lib/esm/function/combinatorics/bellNumbers.js +1 -1
- package/lib/esm/function/combinatorics/catalan.js +1 -1
- package/lib/esm/function/combinatorics/composition.js +1 -1
- package/lib/esm/function/combinatorics/stirlingS2.js +1 -1
- package/lib/esm/function/geometry/distance.js +4 -4
- package/lib/esm/function/geometry/intersect.js +2 -2
- package/lib/esm/function/logical/and.js +2 -2
- package/lib/esm/function/logical/or.js +2 -2
- package/lib/esm/function/logical/xor.js +2 -2
- package/lib/esm/function/matrix/apply.js +2 -2
- package/lib/esm/function/matrix/column.js +1 -1
- package/lib/esm/function/matrix/concat.js +1 -1
- package/lib/esm/function/matrix/count.js +1 -1
- package/lib/esm/function/matrix/cross.js +3 -3
- package/lib/esm/function/matrix/diag.js +10 -10
- package/lib/esm/function/matrix/diff.js +2 -2
- package/lib/esm/function/matrix/eigs.js +3 -3
- package/lib/esm/function/matrix/fft.js +3 -3
- package/lib/esm/function/matrix/filter.js +4 -4
- package/lib/esm/function/matrix/flatten.js +5 -6
- package/lib/esm/function/matrix/forEach.js +4 -4
- package/lib/esm/function/matrix/identity.js +6 -6
- package/lib/esm/function/matrix/ifft.js +3 -3
- package/lib/esm/function/matrix/inv.js +1 -1
- package/lib/esm/function/matrix/kron.js +7 -7
- package/lib/esm/function/matrix/map.js +110 -19
- package/lib/esm/function/matrix/matrixFromFunction.js +6 -6
- package/lib/esm/function/matrix/ones.js +2 -2
- package/lib/esm/function/matrix/partitionSelect.js +2 -2
- package/lib/esm/function/matrix/pinv.js +1 -1
- package/lib/esm/function/matrix/range.js +10 -10
- package/lib/esm/function/matrix/reshape.js +2 -2
- package/lib/esm/function/matrix/rotate.js +4 -4
- package/lib/esm/function/matrix/rotationMatrix.js +6 -6
- package/lib/esm/function/matrix/row.js +1 -1
- package/lib/esm/function/matrix/size.js +8 -8
- package/lib/esm/function/matrix/sort.js +4 -4
- package/lib/esm/function/matrix/sqrtm.js +1 -1
- package/lib/esm/function/matrix/squeeze.js +3 -4
- package/lib/esm/function/matrix/subset.js +2 -2
- package/lib/esm/function/matrix/zeros.js +2 -2
- package/lib/esm/function/probability/combinations.js +1 -1
- package/lib/esm/function/probability/combinationsWithRep.js +2 -2
- package/lib/esm/function/probability/kldivergence.js +4 -4
- package/lib/esm/function/probability/multinomial.js +1 -1
- package/lib/esm/function/probability/permutations.js +2 -2
- package/lib/esm/function/probability/pickRandom.js +6 -6
- package/lib/esm/function/probability/random.js +1 -1
- package/lib/esm/function/probability/randomInt.js +1 -1
- package/lib/esm/function/relational/compare.js +6 -6
- package/lib/esm/function/relational/deepEqual.js +1 -1
- package/lib/esm/function/relational/equal.js +1 -1
- package/lib/esm/function/relational/equalScalar.js +7 -7
- package/lib/esm/function/relational/equalText.js +1 -1
- package/lib/esm/function/relational/larger.js +3 -3
- package/lib/esm/function/relational/largerEq.js +4 -4
- package/lib/esm/function/relational/smaller.js +3 -3
- package/lib/esm/function/relational/smallerEq.js +3 -3
- package/lib/esm/function/relational/unequal.js +1 -1
- package/lib/esm/function/set/setCartesian.js +1 -1
- package/lib/esm/function/set/setDifference.js +1 -1
- package/lib/esm/function/set/setDistinct.js +1 -1
- package/lib/esm/function/set/setIntersect.js +1 -1
- package/lib/esm/function/set/setIsSubset.js +1 -1
- package/lib/esm/function/set/setMultiplicity.js +1 -1
- package/lib/esm/function/set/setPowerset.js +1 -1
- package/lib/esm/function/set/setSize.js +2 -2
- package/lib/esm/function/set/setSymDifference.js +1 -1
- package/lib/esm/function/set/setUnion.js +1 -1
- package/lib/esm/function/signal/freqz.js +6 -6
- package/lib/esm/function/statistics/corr.js +2 -2
- package/lib/esm/function/statistics/cumsum.js +3 -3
- package/lib/esm/function/statistics/max.js +1 -1
- package/lib/esm/function/statistics/median.js +3 -3
- package/lib/esm/function/statistics/min.js +1 -1
- package/lib/esm/function/statistics/prod.js +1 -1
- package/lib/esm/function/statistics/variance.js +2 -2
- package/lib/esm/function/string/bin.js +2 -2
- package/lib/esm/function/string/hex.js +2 -2
- package/lib/esm/function/string/oct.js +2 -2
- package/lib/esm/function/trigonometry/acoth.js +2 -2
- package/lib/esm/function/trigonometry/acsch.js +2 -2
- package/lib/esm/type/bigint.js +1 -1
- package/lib/esm/type/complex/function/complex.js +2 -2
- package/lib/esm/type/fraction/function/fraction.js +1 -1
- package/lib/esm/type/matrix/DenseMatrix.js +13 -38
- package/lib/esm/type/matrix/SparseMatrix.js +5 -8
- package/lib/esm/type/matrix/function/index.js +1 -1
- package/lib/esm/type/matrix/function/matrix.js +1 -1
- package/lib/esm/type/matrix/function/sparse.js +2 -2
- package/lib/esm/type/number.js +1 -1
- package/lib/esm/type/unit/function/createUnit.js +3 -3
- package/lib/esm/type/unit/function/splitUnit.js +1 -1
- package/lib/esm/type/unit/function/unit.js +2 -2
- package/lib/esm/utils/array.js +26 -0
- package/lib/esm/utils/collection.js +1 -1
- package/lib/esm/utils/customs.js +5 -12
- package/lib/esm/utils/function.js +0 -13
- package/lib/esm/utils/is.js +24 -0
- package/lib/esm/utils/map.js +7 -22
- package/lib/esm/version.js +1 -1
- package/package.json +13 -13
- package/types/index.d.ts +57 -18
@@ -1,7 +1,6 @@
|
|
1
|
-
import { applyCallback } from '../../utils/applyCallback.js';
|
2
|
-
import { map } from '../../utils/array.js';
|
3
1
|
import { factory } from '../../utils/factory.js';
|
4
2
|
import { isFunctionAssignmentNode, isSymbolNode } from '../../utils/is.js';
|
3
|
+
import { createMap } from '../../function/matrix/map.js';
|
5
4
|
import { compileInlineExpression } from './utils/compileInlineExpression.js';
|
6
5
|
var name = 'map';
|
7
6
|
var dependencies = ['typed'];
|
@@ -15,57 +14,125 @@ export var createMapTransform = /* #__PURE__ */factory(name, dependencies, _ref
|
|
15
14
|
*
|
16
15
|
* This transform creates a one-based index instead of a zero-based index
|
17
16
|
*/
|
17
|
+
var map = createMap({
|
18
|
+
typed
|
19
|
+
});
|
18
20
|
function mapTransform(args, math, scope) {
|
19
|
-
|
20
|
-
|
21
|
-
x = args[0].compile().evaluate(scope);
|
21
|
+
if (args.length === 0) {
|
22
|
+
return map();
|
22
23
|
}
|
23
|
-
if (args
|
24
|
-
|
24
|
+
if (args.length === 1) {
|
25
|
+
return map(args[0]);
|
26
|
+
}
|
27
|
+
var N = args.length - 1;
|
28
|
+
var X, callback;
|
29
|
+
callback = args[N];
|
30
|
+
X = args.slice(0, N);
|
31
|
+
X = X.map(arg => _compileAndEvaluate(arg, scope));
|
32
|
+
if (callback) {
|
33
|
+
if (isSymbolNode(callback) || isFunctionAssignmentNode(callback)) {
|
25
34
|
// a function pointer, like filter([3, -2, 5], myTestFunction)
|
26
|
-
callback =
|
35
|
+
callback = _compileAndEvaluate(callback, scope);
|
27
36
|
} else {
|
28
37
|
// an expression like filter([3, -2, 5], x > 0)
|
29
|
-
callback = compileInlineExpression(
|
38
|
+
callback = compileInlineExpression(callback, math, scope);
|
30
39
|
}
|
31
40
|
}
|
32
|
-
return map(
|
41
|
+
return map(...X, _transformCallback(callback, N));
|
42
|
+
function _compileAndEvaluate(arg, scope) {
|
43
|
+
return arg.compile().evaluate(scope);
|
44
|
+
}
|
33
45
|
}
|
34
46
|
mapTransform.rawArgs = true;
|
47
|
+
return mapTransform;
|
35
48
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
49
|
+
/**
|
50
|
+
* Transforms the given callback function based on its type and number of arrays.
|
51
|
+
*
|
52
|
+
* @param {Function} callback - The callback function to transform.
|
53
|
+
* @param {number} numberOfArrays - The number of arrays to pass to the callback function.
|
54
|
+
* @returns {*} - The transformed callback function.
|
55
|
+
*/
|
56
|
+
function _transformCallback(callback, numberOfArrays) {
|
57
|
+
if (typed.isTypedFunction(callback)) {
|
58
|
+
return _transformTypedCallbackFunction(callback, numberOfArrays);
|
59
|
+
} else {
|
60
|
+
return _transformCallbackFunction(callback, callback.length, numberOfArrays);
|
43
61
|
}
|
44
|
-
}
|
45
|
-
|
62
|
+
}
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Transforms the given typed callback function based on the number of arrays.
|
66
|
+
*
|
67
|
+
* @param {Function} typedFunction - The typed callback function to transform.
|
68
|
+
* @param {number} numberOfArrays - The number of arrays to pass to the callback function.
|
69
|
+
* @returns {*} - The transformed typed callback function.
|
70
|
+
*/
|
71
|
+
function _transformTypedCallbackFunction(typedFunction, numberOfArrays) {
|
72
|
+
var signatures = Object.fromEntries(Object.entries(typedFunction.signatures).map(_ref2 => {
|
73
|
+
var [signature, callbackFunction] = _ref2;
|
74
|
+
var numberOfCallbackInputs = signature.split(',').length;
|
75
|
+
if (typed.isTypedFunction(callbackFunction)) {
|
76
|
+
return [signature, _transformTypedCallbackFunction(callbackFunction, numberOfArrays)];
|
77
|
+
} else {
|
78
|
+
return [signature, _transformCallbackFunction(callbackFunction, numberOfCallbackInputs, numberOfArrays)];
|
79
|
+
}
|
80
|
+
}));
|
81
|
+
if (typeof typedFunction.name === 'string') {
|
82
|
+
return typed(typedFunction.name, signatures);
|
83
|
+
} else {
|
84
|
+
return typed(signatures);
|
85
|
+
}
|
86
|
+
}
|
46
87
|
}, {
|
47
88
|
isTransformFunction: true
|
48
89
|
});
|
49
90
|
|
50
91
|
/**
|
51
|
-
*
|
52
|
-
*
|
53
|
-
*
|
54
|
-
*
|
55
|
-
*
|
56
|
-
*
|
92
|
+
* Transforms the callback function based on the number of callback inputs and arrays.
|
93
|
+
* There are three cases:
|
94
|
+
* 1. The callback function has N arguments.
|
95
|
+
* 2. The callback function has N+1 arguments.
|
96
|
+
* 3. The callback function has 2N+1 arguments.
|
97
|
+
*
|
98
|
+
* @param {Function} callbackFunction - The callback function to transform.
|
99
|
+
* @param {number} numberOfCallbackInputs - The number of callback inputs.
|
100
|
+
* @param {number} numberOfArrays - The number of arrays.
|
101
|
+
* @returns {Function} The transformed callback function.
|
57
102
|
*/
|
58
|
-
function
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
103
|
+
function _transformCallbackFunction(callbackFunction, numberOfCallbackInputs, numberOfArrays) {
|
104
|
+
if (numberOfCallbackInputs === numberOfArrays) {
|
105
|
+
return callbackFunction;
|
106
|
+
} else if (numberOfCallbackInputs === numberOfArrays + 1) {
|
107
|
+
return function () {
|
108
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
109
|
+
args[_key] = arguments[_key];
|
110
|
+
}
|
111
|
+
var vals = args.slice(0, numberOfArrays);
|
112
|
+
var idx = _transformDims(args[numberOfArrays]);
|
113
|
+
return callbackFunction(...vals, idx);
|
114
|
+
};
|
115
|
+
} else if (numberOfCallbackInputs > numberOfArrays + 1) {
|
116
|
+
return function () {
|
117
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
118
|
+
args[_key2] = arguments[_key2];
|
119
|
+
}
|
120
|
+
var vals = args.slice(0, numberOfArrays);
|
121
|
+
var idx = _transformDims(args[numberOfArrays]);
|
122
|
+
var rest = args.slice(numberOfArrays + 1);
|
123
|
+
return callbackFunction(...vals, idx, ...rest);
|
124
|
+
};
|
125
|
+
} else {
|
126
|
+
return callbackFunction;
|
69
127
|
}
|
70
|
-
|
128
|
+
}
|
129
|
+
|
130
|
+
/**
|
131
|
+
* Transforms the dimensions by adding 1 to each dimension.
|
132
|
+
*
|
133
|
+
* @param {Array} dims - The dimensions to transform.
|
134
|
+
* @returns {Array} The transformed dimensions.
|
135
|
+
*/
|
136
|
+
function _transformDims(dims) {
|
137
|
+
return dims.map(dim => dim.isBigNumber ? dim.plus(1) : dim + 1);
|
71
138
|
}
|
@@ -17,10 +17,10 @@ export var createPrintTransform = /* #__PURE__ */factory(name, dependencies, _re
|
|
17
17
|
add
|
18
18
|
});
|
19
19
|
return typed(name, {
|
20
|
-
'string, Object | Array': function
|
20
|
+
'string, Object | Array': function string_Object__Array(template, values) {
|
21
21
|
return print(_convertTemplateToZeroBasedIndex(template), values);
|
22
22
|
},
|
23
|
-
'string, Object | Array, number | Object': function
|
23
|
+
'string, Object | Array, number | Object': function string_Object__Array_number__Object(template, values, options) {
|
24
24
|
return print(_convertTemplateToZeroBasedIndex(template), values, options);
|
25
25
|
}
|
26
26
|
});
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { isNumber, isBigNumber } from '../../../utils/is.js';
|
2
|
+
/**
|
3
|
+
* Change last argument dim from one-based to zero-based.
|
4
|
+
*/
|
5
|
+
export function dimToZeroBase(dim) {
|
6
|
+
if (isNumber(dim)) {
|
7
|
+
return dim - 1;
|
8
|
+
} else if (isBigNumber(dim)) {
|
9
|
+
return dim.minus(1);
|
10
|
+
} else {
|
11
|
+
return dim;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
export function isNumberOrBigNumber(n) {
|
15
|
+
return isNumber(n) || isBigNumber(n);
|
16
|
+
}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import {
|
2
|
-
|
1
|
+
import { isCollection } from '../../../utils/is.js';
|
2
|
+
import { dimToZeroBase, isNumberOrBigNumber } from './dimToZeroBase.js';
|
3
3
|
/**
|
4
4
|
* Change last argument dim from one-based to zero-based.
|
5
5
|
*/
|
@@ -7,10 +7,8 @@ export function lastDimToZeroBase(args) {
|
|
7
7
|
if (args.length === 2 && isCollection(args[0])) {
|
8
8
|
args = args.slice();
|
9
9
|
var dim = args[1];
|
10
|
-
if (
|
11
|
-
args[1] = dim
|
12
|
-
} else if (isBigNumber(dim)) {
|
13
|
-
args[1] = dim.minus(1);
|
10
|
+
if (isNumberOrBigNumber(dim)) {
|
11
|
+
args[1] = dimToZeroBase(dim);
|
14
12
|
}
|
15
13
|
}
|
16
14
|
return args;
|
@@ -70,7 +70,7 @@ export var createSlu = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
70
70
|
* @return {Object} The lower triangular matrix, the upper triangular matrix and the permutation vectors.
|
71
71
|
*/
|
72
72
|
return typed(name, {
|
73
|
-
'SparseMatrix, number, number': function
|
73
|
+
'SparseMatrix, number, number': function SparseMatrix_number_number(a, order, threshold) {
|
74
74
|
// verify order
|
75
75
|
if (!isInteger(order) || order < 0 || order > 3) {
|
76
76
|
throw new Error('Symbolic Ordering and Analysis order must be an integer number in the interval [0, 3]');
|
@@ -99,24 +99,24 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
99
99
|
// FIXME: move the toTex method of derivative to latex.js. Difficulty is that it relies on parse.
|
100
100
|
// NOTE: the optional "order" parameter here is currently unused
|
101
101
|
var _derivTex = typed('_derivTex', {
|
102
|
-
'Node, SymbolNode': function
|
102
|
+
'Node, SymbolNode': function Node_SymbolNode(expr, x) {
|
103
103
|
if (isConstantNode(expr) && typeOf(expr.value) === 'string') {
|
104
104
|
return _derivTex(parse(expr.value).toString(), x.toString(), 1);
|
105
105
|
} else {
|
106
106
|
return _derivTex(expr.toTex(), x.toString(), 1);
|
107
107
|
}
|
108
108
|
},
|
109
|
-
'Node, ConstantNode': function
|
109
|
+
'Node, ConstantNode': function Node_ConstantNode(expr, x) {
|
110
110
|
if (typeOf(x.value) === 'string') {
|
111
111
|
return _derivTex(expr, parse(x.value));
|
112
112
|
} else {
|
113
113
|
throw new Error("The second parameter to 'derivative' is a non-string constant");
|
114
114
|
}
|
115
115
|
},
|
116
|
-
'Node, SymbolNode, ConstantNode': function
|
116
|
+
'Node, SymbolNode, ConstantNode': function Node_SymbolNode_ConstantNode(expr, x, order) {
|
117
117
|
return _derivTex(expr.toString(), x.name, order.value);
|
118
118
|
},
|
119
|
-
'string, string, number': function
|
119
|
+
'string, string, number': function string_string_number(expr, x, order) {
|
120
120
|
var d;
|
121
121
|
if (order === 1) {
|
122
122
|
d = '{d\\over d' + x + '}';
|
@@ -143,11 +143,11 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
143
143
|
*/
|
144
144
|
// TODO: can we rewrite constTag into a pure function?
|
145
145
|
var constTag = typed('constTag', {
|
146
|
-
'Object, ConstantNode, string': function
|
146
|
+
'Object, ConstantNode, string': function Object_ConstantNode_string(constNodes, node) {
|
147
147
|
constNodes[node] = true;
|
148
148
|
return true;
|
149
149
|
},
|
150
|
-
'Object, SymbolNode, string': function
|
150
|
+
'Object, SymbolNode, string': function Object_SymbolNode_string(constNodes, node, varName) {
|
151
151
|
// Treat other variables like constants. For reasoning, see:
|
152
152
|
// https://en.wikipedia.org/wiki/Partial_derivative
|
153
153
|
if (node.name !== varName) {
|
@@ -156,17 +156,17 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
156
156
|
}
|
157
157
|
return false;
|
158
158
|
},
|
159
|
-
'Object, ParenthesisNode, string': function
|
159
|
+
'Object, ParenthesisNode, string': function Object_ParenthesisNode_string(constNodes, node, varName) {
|
160
160
|
return constTag(constNodes, node.content, varName);
|
161
161
|
},
|
162
|
-
'Object, FunctionAssignmentNode, string': function
|
162
|
+
'Object, FunctionAssignmentNode, string': function Object_FunctionAssignmentNode_string(constNodes, node, varName) {
|
163
163
|
if (!node.params.includes(varName)) {
|
164
164
|
constNodes[node] = true;
|
165
165
|
return true;
|
166
166
|
}
|
167
167
|
return constTag(constNodes, node.expr, varName);
|
168
168
|
},
|
169
|
-
'Object, FunctionNode | OperatorNode, string': function
|
169
|
+
'Object, FunctionNode | OperatorNode, string': function Object_FunctionNode__OperatorNode_string(constNodes, node, varName) {
|
170
170
|
if (node.args.length > 0) {
|
171
171
|
var isConst = constTag(constNodes, node.args[0], varName);
|
172
172
|
for (var i = 1; i < node.args.length; ++i) {
|
@@ -189,25 +189,25 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
189
189
|
* @return {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} The derivative of `expr`
|
190
190
|
*/
|
191
191
|
var _derivative = typed('_derivative', {
|
192
|
-
'ConstantNode, Object': function
|
192
|
+
'ConstantNode, Object': function ConstantNode_Object(node) {
|
193
193
|
return createConstantNode(0);
|
194
194
|
},
|
195
|
-
'SymbolNode, Object': function
|
195
|
+
'SymbolNode, Object': function SymbolNode_Object(node, constNodes) {
|
196
196
|
if (constNodes[node] !== undefined) {
|
197
197
|
return createConstantNode(0);
|
198
198
|
}
|
199
199
|
return createConstantNode(1);
|
200
200
|
},
|
201
|
-
'ParenthesisNode, Object': function
|
201
|
+
'ParenthesisNode, Object': function ParenthesisNode_Object(node, constNodes) {
|
202
202
|
return new ParenthesisNode(_derivative(node.content, constNodes));
|
203
203
|
},
|
204
|
-
'FunctionAssignmentNode, Object': function
|
204
|
+
'FunctionAssignmentNode, Object': function FunctionAssignmentNode_Object(node, constNodes) {
|
205
205
|
if (constNodes[node] !== undefined) {
|
206
206
|
return createConstantNode(0);
|
207
207
|
}
|
208
208
|
return _derivative(node.expr, constNodes);
|
209
209
|
},
|
210
|
-
'FunctionNode, Object': function
|
210
|
+
'FunctionNode, Object': function FunctionNode_Object(node, constNodes) {
|
211
211
|
if (constNodes[node] !== undefined) {
|
212
212
|
return createConstantNode(0);
|
213
213
|
}
|
@@ -411,7 +411,7 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
411
411
|
}
|
412
412
|
return new OperatorNode(op, func, [chainDerivative, funcDerivative]);
|
413
413
|
},
|
414
|
-
'OperatorNode, Object': function
|
414
|
+
'OperatorNode, Object': function OperatorNode_Object(node, constNodes) {
|
415
415
|
if (constNodes[node] !== undefined) {
|
416
416
|
return createConstantNode(0);
|
417
417
|
}
|
@@ -36,16 +36,16 @@ export var createLyap = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
36
36
|
* @return {Matrix | Array} Matrix P solution to the Continuous-time Lyapunov equation AP+PA'=Q
|
37
37
|
*/
|
38
38
|
return typed(name, {
|
39
|
-
'Matrix, Matrix': function
|
39
|
+
'Matrix, Matrix': function Matrix_Matrix(A, Q) {
|
40
40
|
return sylvester(A, transpose(A), multiply(-1, Q));
|
41
41
|
},
|
42
|
-
'Array, Matrix': function
|
42
|
+
'Array, Matrix': function Array_Matrix(A, Q) {
|
43
43
|
return sylvester(matrix(A), transpose(matrix(A)), multiply(-1, Q));
|
44
44
|
},
|
45
|
-
'Matrix, Array': function
|
45
|
+
'Matrix, Array': function Matrix_Array(A, Q) {
|
46
46
|
return sylvester(A, transpose(matrix(A)), matrix(multiply(-1, Q)));
|
47
47
|
},
|
48
|
-
'Array, Array': function
|
48
|
+
'Array, Array': function Array_Array(A, Q) {
|
49
49
|
return sylvester(matrix(A), transpose(matrix(A)), matrix(multiply(-1, Q))).toArray();
|
50
50
|
}
|
51
51
|
});
|
@@ -168,11 +168,11 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
168
168
|
function allChildren(node, context) {
|
169
169
|
var op;
|
170
170
|
var children = [];
|
171
|
-
var
|
171
|
+
var _findChildren = function findChildren(node) {
|
172
172
|
for (var i = 0; i < node.args.length; i++) {
|
173
173
|
var child = node.args[i];
|
174
174
|
if (isOperatorNode(child) && op === child.op) {
|
175
|
-
|
175
|
+
_findChildren(child);
|
176
176
|
} else {
|
177
177
|
children.push(child);
|
178
178
|
}
|
@@ -180,7 +180,7 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
180
180
|
};
|
181
181
|
if (isAssociative(node, context)) {
|
182
182
|
op = node.op;
|
183
|
-
|
183
|
+
_findChildren(node);
|
184
184
|
return children;
|
185
185
|
} else {
|
186
186
|
return node.args;
|
@@ -62,7 +62,7 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
62
62
|
*/
|
63
63
|
var simplifyConstant = typed('simplifyConstant', {
|
64
64
|
Node: node => _ensureNode(foldFraction(node, {})),
|
65
|
-
'Node, Object': function
|
65
|
+
'Node, Object': function Node_Object(expr, options) {
|
66
66
|
return _ensureNode(foldFraction(expr, options));
|
67
67
|
}
|
68
68
|
});
|
@@ -142,7 +142,7 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
142
142
|
// Convert numbers to a preferred number type in preference order: Fraction, number, Complex
|
143
143
|
// BigNumbers are left alone
|
144
144
|
var _toNumber = typed({
|
145
|
-
'string, Object': function
|
145
|
+
'string, Object': function string_Object(s, options) {
|
146
146
|
var numericType = safeNumberType(s, config);
|
147
147
|
if (numericType === 'BigNumber') {
|
148
148
|
if (bignumber === undefined) {
|
@@ -161,32 +161,32 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
161
161
|
return _exactFraction(n, options);
|
162
162
|
}
|
163
163
|
},
|
164
|
-
'Fraction, Object': function
|
164
|
+
'Fraction, Object': function Fraction_Object(s, options) {
|
165
165
|
return s;
|
166
166
|
},
|
167
167
|
// we don't need options here
|
168
168
|
|
169
|
-
'BigNumber, Object': function
|
169
|
+
'BigNumber, Object': function BigNumber_Object(s, options) {
|
170
170
|
return s;
|
171
171
|
},
|
172
172
|
// we don't need options here
|
173
173
|
|
174
|
-
'number, Object': function
|
174
|
+
'number, Object': function number_Object(s, options) {
|
175
175
|
return _exactFraction(s, options);
|
176
176
|
},
|
177
|
-
'bigint, Object': function
|
177
|
+
'bigint, Object': function bigint_Object(s, options) {
|
178
178
|
return s;
|
179
179
|
},
|
180
|
-
'Complex, Object': function
|
180
|
+
'Complex, Object': function Complex_Object(s, options) {
|
181
181
|
if (s.im !== 0) {
|
182
182
|
return s;
|
183
183
|
}
|
184
184
|
return _exactFraction(s.re, options);
|
185
185
|
},
|
186
|
-
'Matrix, Object': function
|
186
|
+
'Matrix, Object': function Matrix_Object(s, options) {
|
187
187
|
return matrix(_exactFraction(s.valueOf()));
|
188
188
|
},
|
189
|
-
'Array, Object': function
|
189
|
+
'Array, Object': function Array_Object(s, options) {
|
190
190
|
return s.map(_exactFraction);
|
191
191
|
}
|
192
192
|
});
|
@@ -41,13 +41,13 @@ export var createLsolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
41
41
|
* @return {DenseMatrix | Array} A column vector with the linear system solution (x)
|
42
42
|
*/
|
43
43
|
return typed(name, {
|
44
|
-
'SparseMatrix, Array | Matrix': function
|
44
|
+
'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(m, b) {
|
45
45
|
return _sparseForwardSubstitution(m, b);
|
46
46
|
},
|
47
|
-
'DenseMatrix, Array | Matrix': function
|
47
|
+
'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(m, b) {
|
48
48
|
return _denseForwardSubstitution(m, b);
|
49
49
|
},
|
50
|
-
'Array, Array | Matrix': function
|
50
|
+
'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
|
51
51
|
var m = matrix(a);
|
52
52
|
var r = _denseForwardSubstitution(m, b);
|
53
53
|
return r.valueOf();
|
@@ -41,13 +41,13 @@ export var createLsolveAll = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
41
41
|
* @return {DenseMatrix[] | Array[]} An array of affine-independent column vectors (x) that solve the linear system
|
42
42
|
*/
|
43
43
|
return typed(name, {
|
44
|
-
'SparseMatrix, Array | Matrix': function
|
44
|
+
'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(m, b) {
|
45
45
|
return _sparseForwardSubstitution(m, b);
|
46
46
|
},
|
47
|
-
'DenseMatrix, Array | Matrix': function
|
47
|
+
'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(m, b) {
|
48
48
|
return _denseForwardSubstitution(m, b);
|
49
49
|
},
|
50
|
-
'Array, Array | Matrix': function
|
50
|
+
'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
|
51
51
|
var m = matrix(a);
|
52
52
|
var R = _denseForwardSubstitution(m, b);
|
53
53
|
return R.map(r => r.valueOf());
|
@@ -52,25 +52,25 @@ export var createLusolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
52
52
|
* @return {DenseMatrix | Array} Column vector with the solution to the linear system A * x = b
|
53
53
|
*/
|
54
54
|
return typed(name, {
|
55
|
-
'Array, Array | Matrix': function
|
55
|
+
'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
|
56
56
|
a = matrix(a);
|
57
57
|
var d = lup(a);
|
58
58
|
var x = _lusolve(d.L, d.U, d.p, null, b);
|
59
59
|
return x.valueOf();
|
60
60
|
},
|
61
|
-
'DenseMatrix, Array | Matrix': function
|
61
|
+
'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(a, b) {
|
62
62
|
var d = lup(a);
|
63
63
|
return _lusolve(d.L, d.U, d.p, null, b);
|
64
64
|
},
|
65
|
-
'SparseMatrix, Array | Matrix': function
|
65
|
+
'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(a, b) {
|
66
66
|
var d = lup(a);
|
67
67
|
return _lusolve(d.L, d.U, d.p, null, b);
|
68
68
|
},
|
69
|
-
'SparseMatrix, Array | Matrix, number, number': function
|
69
|
+
'SparseMatrix, Array | Matrix, number, number': function SparseMatrix_Array__Matrix_number_number(a, b, order, threshold) {
|
70
70
|
var d = slu(a, order, threshold);
|
71
71
|
return _lusolve(d.L, d.U, d.p, d.q, b);
|
72
72
|
},
|
73
|
-
'Object, Array | Matrix': function
|
73
|
+
'Object, Array | Matrix': function Object_Array__Matrix(d, b) {
|
74
74
|
return _lusolve(d.L, d.U, d.p, d.q, b);
|
75
75
|
}
|
76
76
|
});
|
@@ -41,13 +41,13 @@ export var createUsolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
41
41
|
* @return {DenseMatrix | Array} A column vector with the linear system solution (x)
|
42
42
|
*/
|
43
43
|
return typed(name, {
|
44
|
-
'SparseMatrix, Array | Matrix': function
|
44
|
+
'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(m, b) {
|
45
45
|
return _sparseBackwardSubstitution(m, b);
|
46
46
|
},
|
47
|
-
'DenseMatrix, Array | Matrix': function
|
47
|
+
'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(m, b) {
|
48
48
|
return _denseBackwardSubstitution(m, b);
|
49
49
|
},
|
50
|
-
'Array, Array | Matrix': function
|
50
|
+
'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
|
51
51
|
var m = matrix(a);
|
52
52
|
var r = _denseBackwardSubstitution(m, b);
|
53
53
|
return r.valueOf();
|
@@ -41,13 +41,13 @@ export var createUsolveAll = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
41
41
|
* @return {DenseMatrix[] | Array[]} An array of affine-independent column vectors (x) that solve the linear system
|
42
42
|
*/
|
43
43
|
return typed(name, {
|
44
|
-
'SparseMatrix, Array | Matrix': function
|
44
|
+
'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(m, b) {
|
45
45
|
return _sparseBackwardSubstitution(m, b);
|
46
46
|
},
|
47
|
-
'DenseMatrix, Array | Matrix': function
|
47
|
+
'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(m, b) {
|
48
48
|
return _denseBackwardSubstitution(m, b);
|
49
49
|
},
|
50
|
-
'Array, Array | Matrix': function
|
50
|
+
'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
|
51
51
|
var m = matrix(a);
|
52
52
|
var R = _denseBackwardSubstitution(m, b);
|
53
53
|
return R.map(r => r.valueOf());
|
@@ -50,25 +50,25 @@ export var createSylvester = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
50
50
|
*/
|
51
51
|
return typed(name, {
|
52
52
|
'Matrix, Matrix, Matrix': _sylvester,
|
53
|
-
'Array, Matrix, Matrix': function
|
53
|
+
'Array, Matrix, Matrix': function Array_Matrix_Matrix(A, B, C) {
|
54
54
|
return _sylvester(matrix(A), B, C);
|
55
55
|
},
|
56
|
-
'Array, Array, Matrix': function
|
56
|
+
'Array, Array, Matrix': function Array_Array_Matrix(A, B, C) {
|
57
57
|
return _sylvester(matrix(A), matrix(B), C);
|
58
58
|
},
|
59
|
-
'Array, Matrix, Array': function
|
59
|
+
'Array, Matrix, Array': function Array_Matrix_Array(A, B, C) {
|
60
60
|
return _sylvester(matrix(A), B, matrix(C));
|
61
61
|
},
|
62
|
-
'Matrix, Array, Matrix': function
|
62
|
+
'Matrix, Array, Matrix': function Matrix_Array_Matrix(A, B, C) {
|
63
63
|
return _sylvester(A, matrix(B), C);
|
64
64
|
},
|
65
|
-
'Matrix, Array, Array': function
|
65
|
+
'Matrix, Array, Array': function Matrix_Array_Array(A, B, C) {
|
66
66
|
return _sylvester(A, matrix(B), matrix(C));
|
67
67
|
},
|
68
|
-
'Matrix, Matrix, Array': function
|
68
|
+
'Matrix, Matrix, Array': function Matrix_Matrix_Array(A, B, C) {
|
69
69
|
return _sylvester(A, B, matrix(C));
|
70
70
|
},
|
71
|
-
'Array, Array, Array': function
|
71
|
+
'Array, Array, Array': function Array_Array_Array(A, B, C) {
|
72
72
|
return _sylvester(matrix(A), matrix(B), matrix(C)).toArray();
|
73
73
|
}
|
74
74
|
});
|
@@ -20,16 +20,16 @@ export var createAddScalar = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
20
20
|
*/
|
21
21
|
return typed(name, {
|
22
22
|
'number, number': addNumber,
|
23
|
-
'Complex, Complex': function
|
23
|
+
'Complex, Complex': function Complex_Complex(x, y) {
|
24
24
|
return x.add(y);
|
25
25
|
},
|
26
|
-
'BigNumber, BigNumber': function
|
26
|
+
'BigNumber, BigNumber': function BigNumber_BigNumber(x, y) {
|
27
27
|
return x.plus(y);
|
28
28
|
},
|
29
|
-
'bigint, bigint': function
|
29
|
+
'bigint, bigint': function bigint_bigint(x, y) {
|
30
30
|
return x + y;
|
31
31
|
},
|
32
|
-
'Fraction, Fraction': function
|
32
|
+
'Fraction, Fraction': function Fraction_Fraction(x, y) {
|
33
33
|
return x.add(y);
|
34
34
|
},
|
35
35
|
'Unit, Unit': typed.referToSelf(self => (x, y) => {
|
@@ -22,7 +22,7 @@ export var createCeilNumber = /* #__PURE__ */factory(name, ['typed', 'config', '
|
|
22
22
|
return Math.ceil(x);
|
23
23
|
}
|
24
24
|
},
|
25
|
-
'number, number': function
|
25
|
+
'number, number': function number_number(x, n) {
|
26
26
|
if (nearlyEqual(x, round(x, n), config.relTol, config.absTol)) {
|
27
27
|
return round(x, n);
|
28
28
|
} else {
|
@@ -103,10 +103,10 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {
|
|
103
103
|
Complex: function Complex(x) {
|
104
104
|
return x.ceil();
|
105
105
|
},
|
106
|
-
'Complex, number': function
|
106
|
+
'Complex, number': function Complex_number(x, n) {
|
107
107
|
return x.ceil(n);
|
108
108
|
},
|
109
|
-
'Complex, BigNumber': function
|
109
|
+
'Complex, BigNumber': function Complex_BigNumber(x, n) {
|
110
110
|
return x.ceil(n.toNumber());
|
111
111
|
},
|
112
112
|
BigNumber: function BigNumber(x) {
|
@@ -116,7 +116,7 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {
|
|
116
116
|
return x.ceil();
|
117
117
|
}
|
118
118
|
},
|
119
|
-
'BigNumber, BigNumber': function
|
119
|
+
'BigNumber, BigNumber': function BigNumber_BigNumber(x, n) {
|
120
120
|
if (bigNearlyEqual(x, round(x, n), config.relTol, config.absTol)) {
|
121
121
|
return round(x, n);
|
122
122
|
} else {
|
@@ -126,10 +126,10 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {
|
|
126
126
|
Fraction: function Fraction(x) {
|
127
127
|
return x.ceil();
|
128
128
|
},
|
129
|
-
'Fraction, number': function
|
129
|
+
'Fraction, number': function Fraction_number(x, n) {
|
130
130
|
return x.ceil(n);
|
131
131
|
},
|
132
|
-
'Fraction, BigNumber': function
|
132
|
+
'Fraction, BigNumber': function Fraction_BigNumber(x, n) {
|
133
133
|
return x.ceil(n.toNumber());
|
134
134
|
},
|
135
135
|
'Array | Matrix': typed.referToSelf(self => x => {
|