mathjs 10.2.0 → 10.3.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.
- package/HISTORY.md +12 -0
- package/docs/expressions/syntax.md +31 -2
- package/docs/reference/functions/map.md +22 -5
- package/docs/reference/functions/subset.md +10 -2
- package/docs/reference/functions/symbolicEqual.md +62 -0
- package/docs/reference/functions.md +2 -1
- package/lib/browser/math.js +5 -5
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +29 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +16 -8
- package/lib/cjs/entry/pureFunctionsAny.generated.js +9 -9
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +237 -234
- package/lib/cjs/expression/embeddedDocs/function/algebra/symbolicEqual.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/matrix/subset.js +2 -2
- package/lib/cjs/expression/node/FunctionNode.js +74 -55
- package/lib/cjs/factoriesAny.js +8 -0
- package/lib/cjs/function/algebra/simplify.js +8 -0
- package/lib/cjs/function/algebra/symbolicEqual.js +88 -0
- package/lib/cjs/function/matrix/eigs/complexEigs.js +8 -6
- package/lib/cjs/function/matrix/map.js +53 -15
- package/lib/cjs/function/matrix/subset.js +15 -5
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +16 -0
- package/lib/esm/entry/dependenciesAny.generated.js +1 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +16 -9
- package/lib/esm/entry/pureFunctionsAny.generated.js +8 -8
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +218 -216
- package/lib/esm/expression/embeddedDocs/function/algebra/symbolicEqual.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/matrix/subset.js +2 -2
- package/lib/esm/expression/node/FunctionNode.js +70 -53
- package/lib/esm/factoriesAny.js +1 -0
- package/lib/esm/function/algebra/simplify.js +8 -0
- package/lib/esm/function/algebra/symbolicEqual.js +80 -0
- package/lib/esm/function/matrix/eigs/complexEigs.js +8 -6
- package/lib/esm/function/matrix/map.js +53 -15
- package/lib/esm/function/matrix/subset.js +15 -5
- package/lib/esm/version.js +1 -1
- package/package.json +1 -1
- package/types/index.d.ts +4 -4
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.symbolicEqualDocs = void 0;
|
7
|
+
var symbolicEqualDocs = {
|
8
|
+
name: 'symbolicEqual',
|
9
|
+
category: 'Algebra',
|
10
|
+
syntax: ['symbolicEqual(expr1, expr2)', 'symbolicEqual(expr1, expr2, options)'],
|
11
|
+
description: 'Returns true if the difference of the expressions simplifies to 0',
|
12
|
+
examples: ['symbolicEqual("x*y","y*x")', 'symbolicEqual("abs(x^2)", "x^2")', 'symbolicEqual("abs(x)", "x", {context: {abs: {trivial: true}}})'],
|
13
|
+
seealso: ['simplify', 'evaluate']
|
14
|
+
};
|
15
|
+
exports.symbolicEqualDocs = symbolicEqualDocs;
|
@@ -8,8 +8,8 @@ var subsetDocs = {
|
|
8
8
|
name: 'subset',
|
9
9
|
category: 'Matrix',
|
10
10
|
syntax: ['value(index)', 'value(index) = replacement', 'subset(value, [index])', 'subset(value, [index], replacement)'],
|
11
|
-
description: 'Get or set a subset of a matrix or string. ' + 'Indexes are one-based. ' + '
|
12
|
-
examples: ['d = [1, 2; 3, 4]', 'e = []', 'e[1, 1:2] = [5, 6]', 'e[2, :] = [7, 8]', 'f = d * e', 'f[2, 1]', 'f[:, 1]'],
|
11
|
+
description: 'Get or set a subset of the entries of a matrix or ' + 'characters of a string. ' + 'Indexes are one-based. There should be one index specification for ' + 'each dimension of the target. Each specification can be a single ' + 'index, a list of indices, or a range in colon notation `l:u`. ' + 'In a range, both the lower bound l and upper bound u are included; ' + 'and if a bound is omitted it defaults to the most extreme valid value. ' + 'The cartesian product of the indices specified in each dimension ' + 'determines the target of the operation.',
|
12
|
+
examples: ['d = [1, 2; 3, 4]', 'e = []', 'e[1, 1:2] = [5, 6]', 'e[2, :] = [7, 8]', 'f = d * e', 'f[2, 1]', 'f[:, 1]', 'f[[1,2], [1,3]] = [9, 10; 11, 12]', 'f'],
|
13
13
|
seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'trace', 'transpose', 'zeros']
|
14
14
|
};
|
15
15
|
exports.subsetDocs = subsetDocs;
|
@@ -97,78 +97,97 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
97
97
|
});
|
98
98
|
|
99
99
|
if ((0, _is.isSymbolNode)(this.fn)) {
|
100
|
-
// we can statically determine whether the function has an rawArgs property
|
101
100
|
var _name = this.fn.name;
|
102
|
-
var fn = _name in math ? (0, _customs.getSafeProperty)(math, _name) : undefined;
|
103
|
-
var isRaw = typeof fn === 'function' && fn.rawArgs === true;
|
104
101
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
102
|
+
if (!argNames[_name]) {
|
103
|
+
// we can statically determine whether the function has an rawArgs property
|
104
|
+
var fn = _name in math ? (0, _customs.getSafeProperty)(math, _name) : undefined;
|
105
|
+
var isRaw = typeof fn === 'function' && fn.rawArgs === true;
|
109
106
|
|
110
|
-
|
111
|
-
|
112
|
-
|
107
|
+
var resolveFn = function resolveFn(scope) {
|
108
|
+
if (scope.has(_name)) {
|
109
|
+
return scope.get(_name);
|
110
|
+
}
|
113
111
|
|
114
|
-
|
115
|
-
|
112
|
+
if (_name in math) {
|
113
|
+
return (0, _customs.getSafeProperty)(math, _name);
|
114
|
+
}
|
116
115
|
|
117
|
-
|
118
|
-
// pass unevaluated parameters (nodes) to the function
|
119
|
-
// "raw" evaluation
|
120
|
-
var rawArgs = this.args;
|
121
|
-
return function evalFunctionNode(scope, args, context) {
|
122
|
-
var fn = resolveFn(scope);
|
123
|
-
return fn(rawArgs, math, (0, _scope.createSubScope)(scope, args), scope);
|
116
|
+
return FunctionNode.onUndefinedFunction(_name);
|
124
117
|
};
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
return
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
118
|
+
|
119
|
+
if (isRaw) {
|
120
|
+
// pass unevaluated parameters (nodes) to the function
|
121
|
+
// "raw" evaluation
|
122
|
+
var rawArgs = this.args;
|
123
|
+
return function evalFunctionNode(scope, args, context) {
|
124
|
+
var fn = resolveFn(scope);
|
125
|
+
return fn(rawArgs, math, (0, _scope.createSubScope)(scope, args), scope);
|
126
|
+
};
|
127
|
+
} else {
|
128
|
+
// "regular" evaluation
|
129
|
+
switch (evalArgs.length) {
|
130
|
+
case 0:
|
131
|
+
return function evalFunctionNode(scope, args, context) {
|
132
|
+
var fn = resolveFn(scope);
|
133
|
+
return fn();
|
134
|
+
};
|
135
|
+
|
136
|
+
case 1:
|
137
|
+
return function evalFunctionNode(scope, args, context) {
|
138
|
+
var fn = resolveFn(scope);
|
139
|
+
var evalArg0 = evalArgs[0];
|
140
|
+
return fn(evalArg0(scope, args, context));
|
141
|
+
};
|
142
|
+
|
143
|
+
case 2:
|
144
|
+
return function evalFunctionNode(scope, args, context) {
|
145
|
+
var fn = resolveFn(scope);
|
146
|
+
var evalArg0 = evalArgs[0];
|
147
|
+
var evalArg1 = evalArgs[1];
|
148
|
+
return fn(evalArg0(scope, args, context), evalArg1(scope, args, context));
|
149
|
+
};
|
150
|
+
|
151
|
+
default:
|
152
|
+
return function evalFunctionNode(scope, args, context) {
|
153
|
+
var fn = resolveFn(scope);
|
154
|
+
var values = evalArgs.map(function (evalArg) {
|
155
|
+
return evalArg(scope, args, context);
|
156
|
+
});
|
157
|
+
return fn.apply(void 0, (0, _toConsumableArray2.default)(values));
|
158
|
+
};
|
159
|
+
}
|
157
160
|
}
|
161
|
+
} else {
|
162
|
+
// the function symbol is an argName
|
163
|
+
var _rawArgs = this.args;
|
164
|
+
return function evalFunctionNode(scope, args, context) {
|
165
|
+
var fn = args[_name];
|
166
|
+
var isRaw = fn && fn.rawArgs;
|
167
|
+
|
168
|
+
if (isRaw) {
|
169
|
+
return fn(_rawArgs, math, (0, _scope.createSubScope)(scope, args), scope); // "raw" evaluation
|
170
|
+
} else {
|
171
|
+
var values = evalArgs.map(function (evalArg) {
|
172
|
+
return evalArg(scope, args, context);
|
173
|
+
});
|
174
|
+
return fn.apply(fn, values);
|
175
|
+
}
|
176
|
+
};
|
158
177
|
}
|
159
178
|
} else if ((0, _is.isAccessorNode)(this.fn) && (0, _is.isIndexNode)(this.fn.index) && this.fn.index.isObjectProperty()) {
|
160
179
|
// execute the function with the right context: the object of the AccessorNode
|
161
180
|
var evalObject = this.fn.object._compile(math, argNames);
|
162
181
|
|
163
182
|
var prop = this.fn.index.getObjectProperty();
|
164
|
-
var
|
183
|
+
var _rawArgs2 = this.args;
|
165
184
|
return function evalFunctionNode(scope, args, context) {
|
166
185
|
var object = evalObject(scope, args, context);
|
167
186
|
(0, _customs.validateSafeMethod)(object, prop);
|
168
187
|
var isRaw = object[prop] && object[prop].rawArgs;
|
169
188
|
|
170
189
|
if (isRaw) {
|
171
|
-
return object[prop](
|
190
|
+
return object[prop](_rawArgs2, math, (0, _scope.createSubScope)(scope, args), scope); // "raw" evaluation
|
172
191
|
} else {
|
173
192
|
// "regular" evaluation
|
174
193
|
var values = evalArgs.map(function (evalArg) {
|
@@ -182,13 +201,13 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
182
201
|
// we have to dynamically determine whether the function has a rawArgs property
|
183
202
|
var evalFn = this.fn._compile(math, argNames);
|
184
203
|
|
185
|
-
var
|
204
|
+
var _rawArgs3 = this.args;
|
186
205
|
return function evalFunctionNode(scope, args, context) {
|
187
206
|
var fn = evalFn(scope, args, context);
|
188
207
|
var isRaw = fn && fn.rawArgs;
|
189
208
|
|
190
209
|
if (isRaw) {
|
191
|
-
return fn(
|
210
|
+
return fn(_rawArgs3, math, (0, _scope.createSubScope)(scope, args), scope); // "raw" evaluation
|
192
211
|
} else {
|
193
212
|
// "regular" evaluation
|
194
213
|
var values = evalArgs.map(function (evalArg) {
|
package/lib/cjs/factoriesAny.js
CHANGED
@@ -1857,6 +1857,12 @@ Object.defineProperty(exports, "createSymbolNode", {
|
|
1857
1857
|
return _SymbolNode.createSymbolNode;
|
1858
1858
|
}
|
1859
1859
|
});
|
1860
|
+
Object.defineProperty(exports, "createSymbolicEqual", {
|
1861
|
+
enumerable: true,
|
1862
|
+
get: function get() {
|
1863
|
+
return _symbolicEqual.createSymbolicEqual;
|
1864
|
+
}
|
1865
|
+
});
|
1860
1866
|
Object.defineProperty(exports, "createTan", {
|
1861
1867
|
enumerable: true,
|
1862
1868
|
get: function get() {
|
@@ -2520,6 +2526,8 @@ var _simplifyCore = require("./function/algebra/simplifyCore.js");
|
|
2520
2526
|
|
2521
2527
|
var _resolve = require("./function/algebra/resolve.js");
|
2522
2528
|
|
2529
|
+
var _symbolicEqual = require("./function/algebra/symbolicEqual.js");
|
2530
|
+
|
2523
2531
|
var _derivative = require("./function/algebra/derivative.js");
|
2524
2532
|
|
2525
2533
|
var _rationalize = require("./function/algebra/rationalize.js");
|
@@ -343,6 +343,14 @@ var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
|
|
343
343
|
total: true
|
344
344
|
}
|
345
345
|
}
|
346
|
+
}, {
|
347
|
+
s: 'n-n -> 0',
|
348
|
+
// partial alternative when we can't always subtract
|
349
|
+
assuming: {
|
350
|
+
subtract: {
|
351
|
+
total: false
|
352
|
+
}
|
353
|
+
}
|
346
354
|
}, {
|
347
355
|
s: '-(c*v) -> v * (-c)',
|
348
356
|
// make non-constant terms positive
|
@@ -0,0 +1,88 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.createSymbolicEqual = void 0;
|
7
|
+
|
8
|
+
var _is = require("../../utils/is.js");
|
9
|
+
|
10
|
+
var _factory = require("../../utils/factory.js");
|
11
|
+
|
12
|
+
var name = 'symbolicEqual';
|
13
|
+
var dependencies = ['parse', 'simplify', 'typed', 'OperatorNode'];
|
14
|
+
var createSymbolicEqual = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
15
|
+
var parse = _ref.parse,
|
16
|
+
simplify = _ref.simplify,
|
17
|
+
typed = _ref.typed,
|
18
|
+
OperatorNode = _ref.OperatorNode;
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Attempts to determine if two expressions are symbolically equal, i.e.
|
22
|
+
* one is the result of valid algebraic manipulations on the other.
|
23
|
+
* Currently, this simply checks if the difference of the two expressions
|
24
|
+
* simplifies down to 0. So there are two important caveats:
|
25
|
+
* 1. whether two expressions are symbolically equal depends on the
|
26
|
+
* manipulations allowed. Therefore, this function takes an optional
|
27
|
+
* third argument, which are the options that control the behavior
|
28
|
+
* as documented for the `simplify()` function.
|
29
|
+
* 2. it is in general intractable to find the minimal simplification of
|
30
|
+
* an arbitrarily complicated expression. So while a `true` value
|
31
|
+
* of `symbolicEqual` ensures that the two expressions can be manipulated
|
32
|
+
* to match each other, a `false` value does not absolutely rule this out.
|
33
|
+
*
|
34
|
+
* Syntax:
|
35
|
+
*
|
36
|
+
* symbolicEqual(expr1, expr2)
|
37
|
+
* symbolicEqual(expr1, expr2, options)
|
38
|
+
*
|
39
|
+
* Examples:
|
40
|
+
*
|
41
|
+
* symbolicEqual('x*y', 'y*x') // true
|
42
|
+
* symbolicEqual('x*y', 'y*x', {context: {multiply: {commutative: false}}})
|
43
|
+
* //false
|
44
|
+
* symbolicEqual('x/y', '(y*x^(-1))^(-1)') // true
|
45
|
+
* symbolicEqual('abs(x)','x') // false
|
46
|
+
* symbolicEqual('abs(x)','x', simplify.positiveContext) // true
|
47
|
+
*
|
48
|
+
* See also:
|
49
|
+
*
|
50
|
+
* simplify, evaluate
|
51
|
+
*
|
52
|
+
* @param {Node|string} expr1 The first expression to compare
|
53
|
+
* @param {Node|string} expr2 The second expression to compare
|
54
|
+
* @param {Object} [options] Optional option object, passed to simplify
|
55
|
+
* @returns {boolean}
|
56
|
+
* Returns true if a valid manipulation making the expressions equal
|
57
|
+
* is found.
|
58
|
+
*/
|
59
|
+
return typed(name, {
|
60
|
+
'string, string': function stringString(s1, s2) {
|
61
|
+
return this(parse(s1), parse(s2), {});
|
62
|
+
},
|
63
|
+
'string, string, Object': function stringStringObject(s1, s2, options) {
|
64
|
+
return this(parse(s1), parse(s2), options);
|
65
|
+
},
|
66
|
+
'Node, string': function NodeString(e1, s2) {
|
67
|
+
return this(e1, parse(s2), {});
|
68
|
+
},
|
69
|
+
'Node, string, Object': function NodeStringObject(e1, s2, options) {
|
70
|
+
return this(e1, parse(s2), options);
|
71
|
+
},
|
72
|
+
'string, Node': function stringNode(s1, e2) {
|
73
|
+
return this(parse(s1), e2, {});
|
74
|
+
},
|
75
|
+
'string, Node, Object': function stringNodeObject(s1, e2, options) {
|
76
|
+
return this(parse(s1), e2, options);
|
77
|
+
},
|
78
|
+
'Node, Node': function NodeNode(e1, e2) {
|
79
|
+
return this(e1, e2, {});
|
80
|
+
},
|
81
|
+
'Node, Node, Object': function NodeNodeObject(e1, e2, options) {
|
82
|
+
var diff = new OperatorNode('-', 'subtract', [e1, e2]);
|
83
|
+
var simplified = simplify(diff, {}, options);
|
84
|
+
return (0, _is.isConstantNode)(simplified) && !simplified.value;
|
85
|
+
}
|
86
|
+
});
|
87
|
+
});
|
88
|
+
exports.createSymbolicEqual = createSymbolicEqual;
|
@@ -100,8 +100,9 @@ function createComplexEigs(_ref) {
|
|
100
100
|
function balance(arr, N, prec, type, findVectors) {
|
101
101
|
var big = type === 'BigNumber';
|
102
102
|
var cplx = type === 'Complex';
|
103
|
-
var
|
104
|
-
var one = big ? bignumber(1) : cplx ? complex(1) : 1;
|
103
|
+
var realzero = big ? bignumber(0) : 0;
|
104
|
+
var one = big ? bignumber(1) : cplx ? complex(1) : 1;
|
105
|
+
var realone = big ? bignumber(1) : 1; // base of the floating-point arithmetic
|
105
106
|
|
106
107
|
var radix = big ? bignumber(10) : 2;
|
107
108
|
var radixSq = multiplyScalar(radix, radix); // the diagonal transformation matrix R
|
@@ -122,12 +123,13 @@ function createComplexEigs(_ref) {
|
|
122
123
|
for (var i = 0; i < N; i++) {
|
123
124
|
// compute the taxicab norm of i-th column and row
|
124
125
|
// TODO optimize for complex numbers
|
125
|
-
var colNorm =
|
126
|
-
var rowNorm =
|
126
|
+
var colNorm = realzero;
|
127
|
+
var rowNorm = realzero;
|
127
128
|
|
128
129
|
for (var j = 0; j < N; j++) {
|
129
130
|
if (i === j) continue;
|
130
|
-
var c = abs(arr[i][j]);
|
131
|
+
var c = abs(arr[i][j]); // should be real
|
132
|
+
|
131
133
|
colNorm = addScalar(colNorm, c);
|
132
134
|
rowNorm = addScalar(rowNorm, c);
|
133
135
|
}
|
@@ -136,7 +138,7 @@ function createComplexEigs(_ref) {
|
|
136
138
|
// find integer power closest to balancing the matrix
|
137
139
|
// (we want to scale only by integer powers of radix,
|
138
140
|
// so that we don't lose any precision due to round-off)
|
139
|
-
var f =
|
141
|
+
var f = realone;
|
140
142
|
var _c = colNorm;
|
141
143
|
var rowDivRadix = divideScalar(rowNorm, radix);
|
142
144
|
var rowMulRadix = multiplyScalar(rowNorm, radix);
|
@@ -15,8 +15,15 @@ var createMap = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
15
15
|
var typed = _ref.typed;
|
16
16
|
|
17
17
|
/**
|
18
|
-
* Create a new matrix or array with the results of
|
19
|
-
* each entry of
|
18
|
+
* Create a new matrix or array with the results of a callback function executed on
|
19
|
+
* each entry of a given matrix/array.
|
20
|
+
*
|
21
|
+
* For each entry of the input, the callback is invoked with three arguments:
|
22
|
+
* the value of the entry, the index at which that entry occurs, and the full
|
23
|
+
* matrix/array being traversed. Note that because the matrix/array might be
|
24
|
+
* multidimensional, the "index" argument is always an array of numbers giving
|
25
|
+
* the index in each dimension. This is true even for vectors: the "index"
|
26
|
+
* argument is an array of length 1, rather than simply a number.
|
20
27
|
*
|
21
28
|
* Syntax:
|
22
29
|
*
|
@@ -28,15 +35,25 @@ var createMap = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
28
35
|
* return value * value
|
29
36
|
* }) // returns [1, 4, 9]
|
30
37
|
*
|
38
|
+
* // The calling convention for the callback can cause subtleties:
|
39
|
+
* math.map([1, 2, 3], math.format)
|
40
|
+
* // throws TypeError: map attempted to call 'format(1,[0])' but argument 2 of type Array does not match expected type number or function or Object or string or boolean
|
41
|
+
* // [This happens because `format` _can_ take a second argument,
|
42
|
+
* // but its semantics don't match that of the 2nd argument `map` provides]
|
43
|
+
*
|
44
|
+
* // To avoid this error, use a function that takes exactly the
|
45
|
+
* // desired arguments:
|
46
|
+
* math.map([1, 2, 3], x => math.format(x)) // returns ['1', '2', '3']
|
47
|
+
*
|
31
48
|
* See also:
|
32
49
|
*
|
33
50
|
* filter, forEach, sort
|
34
51
|
*
|
35
|
-
* @param {Matrix | Array} x The
|
36
|
-
* @param {Function} callback
|
37
|
-
*
|
38
|
-
*
|
39
|
-
*
|
52
|
+
* @param {Matrix | Array} x The input to iterate on.
|
53
|
+
* @param {Function} callback
|
54
|
+
* The function to call (as described above) on each entry of the input
|
55
|
+
* @return {Matrix | array}
|
56
|
+
* Transformed map of x; always has the same type and shape as x
|
40
57
|
*/
|
41
58
|
return typed(name, {
|
42
59
|
'Array, function': _map,
|
@@ -66,14 +83,35 @@ function _map(array, callback) {
|
|
66
83
|
return recurse(child, index.concat(i));
|
67
84
|
});
|
68
85
|
} else {
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
86
|
+
try {
|
87
|
+
// invoke the callback function with the right number of arguments
|
88
|
+
if (args === 1) {
|
89
|
+
return callback(value);
|
90
|
+
} else if (args === 2) {
|
91
|
+
return callback(value, index);
|
92
|
+
} else {
|
93
|
+
// 3 or -1
|
94
|
+
return callback(value, index, array);
|
95
|
+
}
|
96
|
+
} catch (err) {
|
97
|
+
// But maybe the arguments still weren't right
|
98
|
+
if (err instanceof TypeError && 'data' in err && err.data.category === 'wrongType') {
|
99
|
+
var newmsg = "map attempted to call '".concat(err.data.fn, "(").concat(value);
|
100
|
+
var indexString = JSON.stringify(index);
|
101
|
+
|
102
|
+
if (args === 2) {
|
103
|
+
newmsg += ',' + indexString;
|
104
|
+
} else if (args !== 1) {
|
105
|
+
newmsg += ",".concat(indexString, ",").concat(array);
|
106
|
+
}
|
107
|
+
|
108
|
+
newmsg += ")' but argument ".concat(err.data.index + 1, " of type ");
|
109
|
+
newmsg += "".concat(err.data.actual, " does not match expected type ");
|
110
|
+
newmsg += err.data.expected.join(' or ');
|
111
|
+
throw new TypeError(newmsg);
|
112
|
+
}
|
113
|
+
|
114
|
+
throw err;
|
77
115
|
}
|
78
116
|
}
|
79
117
|
};
|
@@ -39,16 +39,26 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
39
39
|
*
|
40
40
|
* // replace a subset
|
41
41
|
* const e = []
|
42
|
-
* const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]]
|
42
|
+
* const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]] and e = [[5, 0, 6]]
|
43
43
|
* const g = math.subset(f, math.index(1, 1), 7, 0) // g = [[5, 6], [0, 7]]
|
44
44
|
*
|
45
|
+
* // get submatrix using ranges
|
46
|
+
* const M = [
|
47
|
+
* [1,2,3],
|
48
|
+
* [4,5,6],
|
49
|
+
* [7,8,9]
|
50
|
+
* ]
|
51
|
+
* math.subset(M, math.index(math.range(0,2), math.range(0,3))) // [[1,2,3],[4,5,6]]
|
52
|
+
*
|
45
53
|
* See also:
|
46
54
|
*
|
47
55
|
* size, resize, squeeze, index
|
48
56
|
*
|
49
57
|
* @param {Array | Matrix | string} matrix An array, matrix, or string
|
50
|
-
* @param {Index} index
|
51
|
-
*
|
58
|
+
* @param {Index} index
|
59
|
+
* For each dimension of the target, specifies an index or a list of
|
60
|
+
* indices to fetch or set. `subset` uses the cartesian product of
|
61
|
+
* the indices specified in each dimension.
|
52
62
|
* @param {*} [replacement] An array, matrix, or scalar.
|
53
63
|
* If provided, the subset is replaced with replacement.
|
54
64
|
* If not provided, the subset is returned
|
@@ -91,7 +101,7 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
91
101
|
/**
|
92
102
|
* Retrieve a subset of a string
|
93
103
|
* @param {string} str string from which to get a substring
|
94
|
-
* @param {Index} index An index
|
104
|
+
* @param {Index} index An index or list of indices (character positions)
|
95
105
|
* @returns {string} substring
|
96
106
|
* @private
|
97
107
|
*/
|
@@ -122,7 +132,7 @@ function _getSubstring(str, index) {
|
|
122
132
|
/**
|
123
133
|
* Replace a substring in a string
|
124
134
|
* @param {string} str string to be replaced
|
125
|
-
* @param {Index} index An index
|
135
|
+
* @param {Index} index An index or list of indices (character positions)
|
126
136
|
* @param {string} replacement Replacement string
|
127
137
|
* @param {string} [defaultValue] Default value to be uses when resizing
|
128
138
|
* the string. is ' ' by default
|
package/lib/cjs/header.js
CHANGED
@@ -6,8 +6,8 @@
|
|
6
6
|
* It features real and complex numbers, units, matrices, a large set of
|
7
7
|
* mathematical functions, and a flexible expression parser.
|
8
8
|
*
|
9
|
-
* @version 10.
|
10
|
-
* @date 2022-03-
|
9
|
+
* @version 10.3.0
|
10
|
+
* @date 2022-03-02
|
11
11
|
*
|
12
12
|
* @license
|
13
13
|
* Copyright (C) 2013-2022 Jos de Jong <wjosdejong@gmail.com>
|
package/lib/cjs/version.js
CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.version = void 0;
|
7
|
-
var version = '10.
|
7
|
+
var version = '10.3.0'; // Note: This file is automatically generated when building math.js.
|
8
8
|
// Changes made in this file will be overwritten.
|
9
9
|
|
10
10
|
exports.version = version;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/**
|
2
|
+
* THIS FILE IS AUTO-GENERATED
|
3
|
+
* DON'T MAKE CHANGES HERE
|
4
|
+
*/
|
5
|
+
import { OperatorNodeDependencies } from './dependenciesOperatorNode.generated.js';
|
6
|
+
import { parseDependencies } from './dependenciesParse.generated.js';
|
7
|
+
import { simplifyDependencies } from './dependenciesSimplify.generated.js';
|
8
|
+
import { typedDependencies } from './dependenciesTyped.generated.js';
|
9
|
+
import { createSymbolicEqual } from '../../factoriesAny.js';
|
10
|
+
export var symbolicEqualDependencies = {
|
11
|
+
OperatorNodeDependencies,
|
12
|
+
parseDependencies,
|
13
|
+
simplifyDependencies,
|
14
|
+
typedDependencies,
|
15
|
+
createSymbolicEqual
|
16
|
+
};
|
@@ -312,6 +312,7 @@ export { subtractDependencies } from './dependenciesAny/dependenciesSubtract.gen
|
|
312
312
|
export { sumDependencies } from './dependenciesAny/dependenciesSum.generated.js';
|
313
313
|
export { sumTransformDependencies } from './dependenciesAny/dependenciesSumTransform.generated.js';
|
314
314
|
export { SymbolNodeDependencies } from './dependenciesAny/dependenciesSymbolNode.generated.js';
|
315
|
+
export { symbolicEqualDependencies } from './dependenciesAny/dependenciesSymbolicEqual.generated.js';
|
315
316
|
export { tanDependencies } from './dependenciesAny/dependenciesTan.generated.js';
|
316
317
|
export { tanhDependencies } from './dependenciesAny/dependenciesTanh.generated.js';
|
317
318
|
export { tauDependencies } from './dependenciesAny/dependenciesTau.generated.js';
|
@@ -5,9 +5,9 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
5
5
|
* DON'T MAKE CHANGES HERE
|
6
6
|
*/
|
7
7
|
import { config } from './configReadonly.js';
|
8
|
-
import { createChainClass, createNode, createObjectNode, createOperatorNode, createParenthesisNode, createRelationalNode, createArrayNode, createBlockNode, createConditionalNode, createConstantNode, createRangeNode, createReviver, createChain, createFunctionAssignmentNode, createAccessorNode, createAssignmentNode, createIndexNode, createSymbolNode, createFunctionNode, createParse, createResolve, createCompile, createEvaluate, createHelpClass, createLeafCount, createParserClass, createParser, createSimplifyCore, createSimplify, createDerivative, createRationalize, createHelp, createFilterTransform, createForEachTransform, createMapTransform, createApplyTransform, createDiffTransform, createIndexTransform, createSubsetTransform, createConcatTransform, createMaxTransform, createMinTransform, createRangeTransform, createRowTransform, createSumTransform, createColumnTransform, createStdTransform,
|
8
|
+
import { createChainClass, createNode, createObjectNode, createOperatorNode, createParenthesisNode, createRelationalNode, createArrayNode, createBlockNode, createConditionalNode, createConstantNode, createRangeNode, createReviver, createChain, createFunctionAssignmentNode, createAccessorNode, createAssignmentNode, createIndexNode, createSymbolNode, createFunctionNode, createParse, createResolve, createCompile, createEvaluate, createHelpClass, createLeafCount, createParserClass, createParser, createSimplifyCore, createSimplify, createDerivative, createRationalize, createHelp, createSymbolicEqual, createFilterTransform, createForEachTransform, createMapTransform, createApplyTransform, createDiffTransform, createIndexTransform, createSubsetTransform, createConcatTransform, createMaxTransform, createMinTransform, createRangeTransform, createRowTransform, createSumTransform, createColumnTransform, createStdTransform, createVarianceTransform, createMeanTransform } from '../factoriesAny.js';
|
9
9
|
import { BigNumber, Complex, e, _false, fineStructure, Fraction, i, _Infinity, LN10, LOG10E, Matrix, _NaN, _null, phi, Range, ResultSet, SQRT1_2, // eslint-disable-line camelcase
|
10
|
-
sackurTetrode, tau, _true, version, DenseMatrix, efimovFactor, LN2, pi, replacer, SQRT2, typed, unaryPlus, weakMixingAngle, abs, acos, acot, acsc, addScalar, arg, asech, asinh, atan, atanh, bignumber, bitNot, boolean, clone, combinations, complex, conj, cosh, coth, csc, cube, equalScalar, erf, exp, expm1, filter, forEach, format, getMatrixDataType, hex, im, isInteger, isNegative, isPositive, isZero, LOG2E, log10, log2, map, multiplyScalar, not, number, oct, pickRandom, print, random, re, sec, sign, sin, SparseMatrix, splitUnit, square, string, tan, typeOf, acosh, acsch, apply, asec, bin, combinationsWithRep, cos, csch, isNaN, isPrime, randomInt, sech, sinh, sparse, sqrt, tanh, unaryMinus, acoth, cot, fraction, isNumeric, matrix, matrixFromFunction, mod, nthRoot, numeric, or, prod, reshape, size, smaller, squeeze, subset, subtract, to, transpose, xgcd, zeros, and, bitAnd, bitXor, cbrt, compare, compareText, concat, count, ctranspose, diag, divideScalar, dotDivide, equal, flatten, gcd, hasNumericValue, hypot, ImmutableDenseMatrix, Index, kron, largerEq, leftShift, lsolve, matrixFromColumns, min, mode, nthRoots, ones, partitionSelect, resize, rightArithShift, round, smallerEq, unequal, usolve, xor, add, atan2, bitOr, catalan, compareNatural, deepEqual, diff, dot, equalText, floor, identity, invmod, larger, log, lsolveAll, matrixFromRows, multiply, pow, qr, range, rightLogShift, row, setCartesian, setDistinct, setIsSubset, setPowerset, slu, sum, trace, usolveAll, asin, ceil, column, composition, cross, distance, dotMultiply, FibonacciHeap, fix, gamma, index, lcm, log1p, max, quantileSeq, setDifference, setMultiplicity, setSymDifference, sort, Unit, vacuumImpedance, wienDisplacement, atomicMass, bohrMagneton, boltzmann, conductanceQuantum, createUnit, deuteronMass, dotPow, electricConstant, elementaryCharge, factorial, fermiCoupling, gasConstant, gravity, intersect, inverseConductanceQuantum, klitzing, loschmidt, magneticConstant, molarMass, molarPlanckConstant, neutronMass, nuclearMagneton, permutations, planckConstant, planckMass, planckTime, quantumOfCirculation, reducedPlanckConstant, rydberg, setIntersect, setUnion, Spa, stefanBoltzmann,
|
10
|
+
sackurTetrode, tau, _true, version, DenseMatrix, efimovFactor, LN2, pi, replacer, SQRT2, typed, unaryPlus, weakMixingAngle, abs, acos, acot, acsc, addScalar, arg, asech, asinh, atan, atanh, bignumber, bitNot, boolean, clone, combinations, complex, conj, cosh, coth, csc, cube, equalScalar, erf, exp, expm1, filter, forEach, format, getMatrixDataType, hex, im, isInteger, isNegative, isPositive, isZero, LOG2E, log10, log2, map, multiplyScalar, not, number, oct, pickRandom, print, random, re, sec, sign, sin, SparseMatrix, splitUnit, square, string, tan, typeOf, acosh, acsch, apply, asec, bin, combinationsWithRep, cos, csch, isNaN, isPrime, randomInt, sech, sinh, sparse, sqrt, tanh, unaryMinus, acoth, cot, fraction, isNumeric, matrix, matrixFromFunction, mod, nthRoot, numeric, or, prod, reshape, size, smaller, squeeze, subset, subtract, to, transpose, xgcd, zeros, and, bitAnd, bitXor, cbrt, compare, compareText, concat, count, ctranspose, diag, divideScalar, dotDivide, equal, flatten, gcd, hasNumericValue, hypot, ImmutableDenseMatrix, Index, kron, largerEq, leftShift, lsolve, matrixFromColumns, min, mode, nthRoots, ones, partitionSelect, resize, rightArithShift, round, smallerEq, unequal, usolve, xor, add, atan2, bitOr, catalan, compareNatural, deepEqual, diff, dot, equalText, floor, identity, invmod, larger, log, lsolveAll, matrixFromRows, multiply, pow, qr, range, rightLogShift, row, setCartesian, setDistinct, setIsSubset, setPowerset, slu, sum, trace, usolveAll, asin, ceil, column, composition, cross, distance, dotMultiply, FibonacciHeap, fix, gamma, index, lcm, log1p, max, quantileSeq, setDifference, setMultiplicity, setSymDifference, sort, Unit, vacuumImpedance, wienDisplacement, atomicMass, bohrMagneton, boltzmann, conductanceQuantum, createUnit, deuteronMass, dotPow, electricConstant, elementaryCharge, factorial, fermiCoupling, gasConstant, gravity, intersect, inverseConductanceQuantum, klitzing, loschmidt, magneticConstant, molarMass, molarPlanckConstant, neutronMass, nuclearMagneton, permutations, planckConstant, planckMass, planckTime, quantumOfCirculation, reducedPlanckConstant, rydberg, setIntersect, setUnion, Spa, stefanBoltzmann, thomsonCrossSection, avogadro, bohrRadius, coulomb, electronMass, faraday, hartreeEnergy, lup, magneticFluxQuantum, molarMassC12, planckCharge, planckTemperature, secondRadiation, speedOfLight, stirlingS2, unit, bellNumbers, det, firstRadiation, molarVolume, protonMass, setSize, classicalElectronRadius, gravitationConstant, inv, lusolve, sqrtm, divide, expm, kldivergence, mean, median, planckLength, variance, eigs, mad, multinomial, std, norm, rotationMatrix, rotate } from './pureFunctionsAny.generated.js';
|
11
11
|
var math = {}; // NOT pure!
|
12
12
|
|
13
13
|
var mathWithTransform = {}; // NOT pure!
|
@@ -223,6 +223,12 @@ export var help = createHelp({
|
|
223
223
|
mathWithTransform,
|
224
224
|
typed
|
225
225
|
});
|
226
|
+
export var symbolicEqual = createSymbolicEqual({
|
227
|
+
OperatorNode,
|
228
|
+
parse,
|
229
|
+
simplify,
|
230
|
+
typed
|
231
|
+
});
|
226
232
|
|
227
233
|
_extends(math, {
|
228
234
|
e,
|
@@ -461,7 +467,7 @@ _extends(math, {
|
|
461
467
|
setIntersect,
|
462
468
|
setUnion,
|
463
469
|
stefanBoltzmann,
|
464
|
-
|
470
|
+
thomsonCrossSection,
|
465
471
|
avogadro,
|
466
472
|
bohrRadius,
|
467
473
|
coulomb,
|
@@ -478,6 +484,7 @@ _extends(math, {
|
|
478
484
|
secondRadiation,
|
479
485
|
speedOfLight,
|
480
486
|
stirlingS2,
|
487
|
+
unit,
|
481
488
|
bellNumbers,
|
482
489
|
compile,
|
483
490
|
det,
|
@@ -487,7 +494,6 @@ _extends(math, {
|
|
487
494
|
molarVolume,
|
488
495
|
protonMass,
|
489
496
|
setSize,
|
490
|
-
thomsonCrossSection,
|
491
497
|
classicalElectronRadius,
|
492
498
|
gravitationConstant,
|
493
499
|
inv,
|
@@ -510,6 +516,7 @@ _extends(math, {
|
|
510
516
|
rationalize,
|
511
517
|
std,
|
512
518
|
help,
|
519
|
+
symbolicEqual,
|
513
520
|
norm,
|
514
521
|
rotationMatrix,
|
515
522
|
rotate,
|
@@ -594,11 +601,6 @@ _extends(mathWithTransform, math, {
|
|
594
601
|
typed,
|
595
602
|
variance
|
596
603
|
}),
|
597
|
-
mean: createMeanTransform({
|
598
|
-
add,
|
599
|
-
divide,
|
600
|
-
typed
|
601
|
-
}),
|
602
604
|
variance: createVarianceTransform({
|
603
605
|
add,
|
604
606
|
apply,
|
@@ -607,6 +609,11 @@ _extends(mathWithTransform, math, {
|
|
607
609
|
multiply,
|
608
610
|
subtract,
|
609
611
|
typed
|
612
|
+
}),
|
613
|
+
mean: createMeanTransform({
|
614
|
+
add,
|
615
|
+
divide,
|
616
|
+
typed
|
610
617
|
})
|
611
618
|
});
|
612
619
|
|