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
@@ -77,76 +77,93 @@ export var createFunctionNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
77
77
|
var evalArgs = this.args.map(arg => arg._compile(math, argNames));
|
78
78
|
|
79
79
|
if (isSymbolNode(this.fn)) {
|
80
|
-
// we can statically determine whether the function has an rawArgs property
|
81
80
|
var _name = this.fn.name;
|
82
|
-
var fn = _name in math ? getSafeProperty(math, _name) : undefined;
|
83
|
-
var isRaw = typeof fn === 'function' && fn.rawArgs === true;
|
84
81
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
82
|
+
if (!argNames[_name]) {
|
83
|
+
// we can statically determine whether the function has an rawArgs property
|
84
|
+
var fn = _name in math ? getSafeProperty(math, _name) : undefined;
|
85
|
+
var isRaw = typeof fn === 'function' && fn.rawArgs === true;
|
89
86
|
|
90
|
-
|
91
|
-
|
92
|
-
|
87
|
+
var resolveFn = scope => {
|
88
|
+
if (scope.has(_name)) {
|
89
|
+
return scope.get(_name);
|
90
|
+
}
|
93
91
|
|
94
|
-
|
95
|
-
|
92
|
+
if (_name in math) {
|
93
|
+
return getSafeProperty(math, _name);
|
94
|
+
}
|
96
95
|
|
97
|
-
|
98
|
-
// pass unevaluated parameters (nodes) to the function
|
99
|
-
// "raw" evaluation
|
100
|
-
var rawArgs = this.args;
|
101
|
-
return function evalFunctionNode(scope, args, context) {
|
102
|
-
var fn = resolveFn(scope);
|
103
|
-
return fn(rawArgs, math, createSubScope(scope, args), scope);
|
96
|
+
return FunctionNode.onUndefinedFunction(_name);
|
104
97
|
};
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
return
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
98
|
+
|
99
|
+
if (isRaw) {
|
100
|
+
// pass unevaluated parameters (nodes) to the function
|
101
|
+
// "raw" evaluation
|
102
|
+
var rawArgs = this.args;
|
103
|
+
return function evalFunctionNode(scope, args, context) {
|
104
|
+
var fn = resolveFn(scope);
|
105
|
+
return fn(rawArgs, math, createSubScope(scope, args), scope);
|
106
|
+
};
|
107
|
+
} else {
|
108
|
+
// "regular" evaluation
|
109
|
+
switch (evalArgs.length) {
|
110
|
+
case 0:
|
111
|
+
return function evalFunctionNode(scope, args, context) {
|
112
|
+
var fn = resolveFn(scope);
|
113
|
+
return fn();
|
114
|
+
};
|
115
|
+
|
116
|
+
case 1:
|
117
|
+
return function evalFunctionNode(scope, args, context) {
|
118
|
+
var fn = resolveFn(scope);
|
119
|
+
var evalArg0 = evalArgs[0];
|
120
|
+
return fn(evalArg0(scope, args, context));
|
121
|
+
};
|
122
|
+
|
123
|
+
case 2:
|
124
|
+
return function evalFunctionNode(scope, args, context) {
|
125
|
+
var fn = resolveFn(scope);
|
126
|
+
var evalArg0 = evalArgs[0];
|
127
|
+
var evalArg1 = evalArgs[1];
|
128
|
+
return fn(evalArg0(scope, args, context), evalArg1(scope, args, context));
|
129
|
+
};
|
130
|
+
|
131
|
+
default:
|
132
|
+
return function evalFunctionNode(scope, args, context) {
|
133
|
+
var fn = resolveFn(scope);
|
134
|
+
var values = evalArgs.map(evalArg => evalArg(scope, args, context));
|
135
|
+
return fn(...values);
|
136
|
+
};
|
137
|
+
}
|
135
138
|
}
|
139
|
+
} else {
|
140
|
+
// the function symbol is an argName
|
141
|
+
var _rawArgs = this.args;
|
142
|
+
return function evalFunctionNode(scope, args, context) {
|
143
|
+
var fn = args[_name];
|
144
|
+
var isRaw = fn && fn.rawArgs;
|
145
|
+
|
146
|
+
if (isRaw) {
|
147
|
+
return fn(_rawArgs, math, createSubScope(scope, args), scope); // "raw" evaluation
|
148
|
+
} else {
|
149
|
+
var values = evalArgs.map(evalArg => evalArg(scope, args, context));
|
150
|
+
return fn.apply(fn, values);
|
151
|
+
}
|
152
|
+
};
|
136
153
|
}
|
137
154
|
} else if (isAccessorNode(this.fn) && isIndexNode(this.fn.index) && this.fn.index.isObjectProperty()) {
|
138
155
|
// execute the function with the right context: the object of the AccessorNode
|
139
156
|
var evalObject = this.fn.object._compile(math, argNames);
|
140
157
|
|
141
158
|
var prop = this.fn.index.getObjectProperty();
|
142
|
-
var
|
159
|
+
var _rawArgs2 = this.args;
|
143
160
|
return function evalFunctionNode(scope, args, context) {
|
144
161
|
var object = evalObject(scope, args, context);
|
145
162
|
validateSafeMethod(object, prop);
|
146
163
|
var isRaw = object[prop] && object[prop].rawArgs;
|
147
164
|
|
148
165
|
if (isRaw) {
|
149
|
-
return object[prop](
|
166
|
+
return object[prop](_rawArgs2, math, createSubScope(scope, args), scope); // "raw" evaluation
|
150
167
|
} else {
|
151
168
|
// "regular" evaluation
|
152
169
|
var values = evalArgs.map(evalArg => evalArg(scope, args, context));
|
@@ -158,13 +175,13 @@ export var createFunctionNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
158
175
|
// we have to dynamically determine whether the function has a rawArgs property
|
159
176
|
var evalFn = this.fn._compile(math, argNames);
|
160
177
|
|
161
|
-
var
|
178
|
+
var _rawArgs3 = this.args;
|
162
179
|
return function evalFunctionNode(scope, args, context) {
|
163
180
|
var fn = evalFn(scope, args, context);
|
164
181
|
var isRaw = fn && fn.rawArgs;
|
165
182
|
|
166
183
|
if (isRaw) {
|
167
|
-
return fn(
|
184
|
+
return fn(_rawArgs3, math, createSubScope(scope, args), scope); // "raw" evaluation
|
168
185
|
} else {
|
169
186
|
// "regular" evaluation
|
170
187
|
var values = evalArgs.map(evalArg => evalArg(scope, args, context));
|
package/lib/esm/factoriesAny.js
CHANGED
@@ -245,6 +245,7 @@ export { createLeafCount } from './function/algebra/leafCount.js';
|
|
245
245
|
export { createSimplify } from './function/algebra/simplify.js';
|
246
246
|
export { createSimplifyCore } from './function/algebra/simplifyCore.js';
|
247
247
|
export { createResolve } from './function/algebra/resolve.js';
|
248
|
+
export { createSymbolicEqual } from './function/algebra/symbolicEqual.js';
|
248
249
|
export { createDerivative } from './function/algebra/derivative.js';
|
249
250
|
export { createRationalize } from './function/algebra/rationalize.js';
|
250
251
|
export { createReviver } from './json/reviver.js';
|
@@ -327,6 +327,14 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
327
327
|
total: true
|
328
328
|
}
|
329
329
|
}
|
330
|
+
}, {
|
331
|
+
s: 'n-n -> 0',
|
332
|
+
// partial alternative when we can't always subtract
|
333
|
+
assuming: {
|
334
|
+
subtract: {
|
335
|
+
total: false
|
336
|
+
}
|
337
|
+
}
|
330
338
|
}, {
|
331
339
|
s: '-(c*v) -> v * (-c)',
|
332
340
|
// make non-constant terms positive
|
@@ -0,0 +1,80 @@
|
|
1
|
+
import { isConstantNode } from '../../utils/is.js';
|
2
|
+
import { factory } from '../../utils/factory.js';
|
3
|
+
var name = 'symbolicEqual';
|
4
|
+
var dependencies = ['parse', 'simplify', 'typed', 'OperatorNode'];
|
5
|
+
export var createSymbolicEqual = /* #__PURE__ */factory(name, dependencies, _ref => {
|
6
|
+
var {
|
7
|
+
parse,
|
8
|
+
simplify,
|
9
|
+
typed,
|
10
|
+
OperatorNode
|
11
|
+
} = _ref;
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Attempts to determine if two expressions are symbolically equal, i.e.
|
15
|
+
* one is the result of valid algebraic manipulations on the other.
|
16
|
+
* Currently, this simply checks if the difference of the two expressions
|
17
|
+
* simplifies down to 0. So there are two important caveats:
|
18
|
+
* 1. whether two expressions are symbolically equal depends on the
|
19
|
+
* manipulations allowed. Therefore, this function takes an optional
|
20
|
+
* third argument, which are the options that control the behavior
|
21
|
+
* as documented for the `simplify()` function.
|
22
|
+
* 2. it is in general intractable to find the minimal simplification of
|
23
|
+
* an arbitrarily complicated expression. So while a `true` value
|
24
|
+
* of `symbolicEqual` ensures that the two expressions can be manipulated
|
25
|
+
* to match each other, a `false` value does not absolutely rule this out.
|
26
|
+
*
|
27
|
+
* Syntax:
|
28
|
+
*
|
29
|
+
* symbolicEqual(expr1, expr2)
|
30
|
+
* symbolicEqual(expr1, expr2, options)
|
31
|
+
*
|
32
|
+
* Examples:
|
33
|
+
*
|
34
|
+
* symbolicEqual('x*y', 'y*x') // true
|
35
|
+
* symbolicEqual('x*y', 'y*x', {context: {multiply: {commutative: false}}})
|
36
|
+
* //false
|
37
|
+
* symbolicEqual('x/y', '(y*x^(-1))^(-1)') // true
|
38
|
+
* symbolicEqual('abs(x)','x') // false
|
39
|
+
* symbolicEqual('abs(x)','x', simplify.positiveContext) // true
|
40
|
+
*
|
41
|
+
* See also:
|
42
|
+
*
|
43
|
+
* simplify, evaluate
|
44
|
+
*
|
45
|
+
* @param {Node|string} expr1 The first expression to compare
|
46
|
+
* @param {Node|string} expr2 The second expression to compare
|
47
|
+
* @param {Object} [options] Optional option object, passed to simplify
|
48
|
+
* @returns {boolean}
|
49
|
+
* Returns true if a valid manipulation making the expressions equal
|
50
|
+
* is found.
|
51
|
+
*/
|
52
|
+
return typed(name, {
|
53
|
+
'string, string': function stringString(s1, s2) {
|
54
|
+
return this(parse(s1), parse(s2), {});
|
55
|
+
},
|
56
|
+
'string, string, Object': function stringStringObject(s1, s2, options) {
|
57
|
+
return this(parse(s1), parse(s2), options);
|
58
|
+
},
|
59
|
+
'Node, string': function NodeString(e1, s2) {
|
60
|
+
return this(e1, parse(s2), {});
|
61
|
+
},
|
62
|
+
'Node, string, Object': function NodeStringObject(e1, s2, options) {
|
63
|
+
return this(e1, parse(s2), options);
|
64
|
+
},
|
65
|
+
'string, Node': function stringNode(s1, e2) {
|
66
|
+
return this(parse(s1), e2, {});
|
67
|
+
},
|
68
|
+
'string, Node, Object': function stringNodeObject(s1, e2, options) {
|
69
|
+
return this(parse(s1), e2, options);
|
70
|
+
},
|
71
|
+
'Node, Node': function NodeNode(e1, e2) {
|
72
|
+
return this(e1, e2, {});
|
73
|
+
},
|
74
|
+
'Node, Node, Object': function NodeNodeObject(e1, e2, options) {
|
75
|
+
var diff = new OperatorNode('-', 'subtract', [e1, e2]);
|
76
|
+
var simplified = simplify(diff, {}, options);
|
77
|
+
return isConstantNode(simplified) && !simplified.value;
|
78
|
+
}
|
79
|
+
});
|
80
|
+
});
|
@@ -84,8 +84,9 @@ export function createComplexEigs(_ref) {
|
|
84
84
|
function balance(arr, N, prec, type, findVectors) {
|
85
85
|
var big = type === 'BigNumber';
|
86
86
|
var cplx = type === 'Complex';
|
87
|
-
var
|
88
|
-
var one = big ? bignumber(1) : cplx ? complex(1) : 1;
|
87
|
+
var realzero = big ? bignumber(0) : 0;
|
88
|
+
var one = big ? bignumber(1) : cplx ? complex(1) : 1;
|
89
|
+
var realone = big ? bignumber(1) : 1; // base of the floating-point arithmetic
|
89
90
|
|
90
91
|
var radix = big ? bignumber(10) : 2;
|
91
92
|
var radixSq = multiplyScalar(radix, radix); // the diagonal transformation matrix R
|
@@ -106,12 +107,13 @@ export function createComplexEigs(_ref) {
|
|
106
107
|
for (var i = 0; i < N; i++) {
|
107
108
|
// compute the taxicab norm of i-th column and row
|
108
109
|
// TODO optimize for complex numbers
|
109
|
-
var colNorm =
|
110
|
-
var rowNorm =
|
110
|
+
var colNorm = realzero;
|
111
|
+
var rowNorm = realzero;
|
111
112
|
|
112
113
|
for (var j = 0; j < N; j++) {
|
113
114
|
if (i === j) continue;
|
114
|
-
var c = abs(arr[i][j]);
|
115
|
+
var c = abs(arr[i][j]); // should be real
|
116
|
+
|
115
117
|
colNorm = addScalar(colNorm, c);
|
116
118
|
rowNorm = addScalar(rowNorm, c);
|
117
119
|
}
|
@@ -120,7 +122,7 @@ export function createComplexEigs(_ref) {
|
|
120
122
|
// find integer power closest to balancing the matrix
|
121
123
|
// (we want to scale only by integer powers of radix,
|
122
124
|
// so that we don't lose any precision due to round-off)
|
123
|
-
var f =
|
125
|
+
var f = realone;
|
124
126
|
var _c = colNorm;
|
125
127
|
var rowDivRadix = divideScalar(rowNorm, radix);
|
126
128
|
var rowMulRadix = multiplyScalar(rowNorm, radix);
|
@@ -8,8 +8,15 @@ export var createMap = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
8
8
|
} = _ref;
|
9
9
|
|
10
10
|
/**
|
11
|
-
* Create a new matrix or array with the results of
|
12
|
-
* each entry of
|
11
|
+
* Create a new matrix or array with the results of a callback function executed on
|
12
|
+
* each entry of a given matrix/array.
|
13
|
+
*
|
14
|
+
* For each entry of the input, the callback is invoked with three arguments:
|
15
|
+
* the value of the entry, the index at which that entry occurs, and the full
|
16
|
+
* matrix/array being traversed. Note that because the matrix/array might be
|
17
|
+
* multidimensional, the "index" argument is always an array of numbers giving
|
18
|
+
* the index in each dimension. This is true even for vectors: the "index"
|
19
|
+
* argument is an array of length 1, rather than simply a number.
|
13
20
|
*
|
14
21
|
* Syntax:
|
15
22
|
*
|
@@ -21,15 +28,25 @@ export var createMap = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
21
28
|
* return value * value
|
22
29
|
* }) // returns [1, 4, 9]
|
23
30
|
*
|
31
|
+
* // The calling convention for the callback can cause subtleties:
|
32
|
+
* math.map([1, 2, 3], math.format)
|
33
|
+
* // 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
|
34
|
+
* // [This happens because `format` _can_ take a second argument,
|
35
|
+
* // but its semantics don't match that of the 2nd argument `map` provides]
|
36
|
+
*
|
37
|
+
* // To avoid this error, use a function that takes exactly the
|
38
|
+
* // desired arguments:
|
39
|
+
* math.map([1, 2, 3], x => math.format(x)) // returns ['1', '2', '3']
|
40
|
+
*
|
24
41
|
* See also:
|
25
42
|
*
|
26
43
|
* filter, forEach, sort
|
27
44
|
*
|
28
|
-
* @param {Matrix | Array} x The
|
29
|
-
* @param {Function} callback
|
30
|
-
*
|
31
|
-
*
|
32
|
-
*
|
45
|
+
* @param {Matrix | Array} x The input to iterate on.
|
46
|
+
* @param {Function} callback
|
47
|
+
* The function to call (as described above) on each entry of the input
|
48
|
+
* @return {Matrix | array}
|
49
|
+
* Transformed map of x; always has the same type and shape as x
|
33
50
|
*/
|
34
51
|
return typed(name, {
|
35
52
|
'Array, function': _map,
|
@@ -57,14 +74,35 @@ function _map(array, callback) {
|
|
57
74
|
return recurse(child, index.concat(i));
|
58
75
|
});
|
59
76
|
} else {
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
77
|
+
try {
|
78
|
+
// invoke the callback function with the right number of arguments
|
79
|
+
if (args === 1) {
|
80
|
+
return callback(value);
|
81
|
+
} else if (args === 2) {
|
82
|
+
return callback(value, index);
|
83
|
+
} else {
|
84
|
+
// 3 or -1
|
85
|
+
return callback(value, index, array);
|
86
|
+
}
|
87
|
+
} catch (err) {
|
88
|
+
// But maybe the arguments still weren't right
|
89
|
+
if (err instanceof TypeError && 'data' in err && err.data.category === 'wrongType') {
|
90
|
+
var newmsg = "map attempted to call '".concat(err.data.fn, "(").concat(value);
|
91
|
+
var indexString = JSON.stringify(index);
|
92
|
+
|
93
|
+
if (args === 2) {
|
94
|
+
newmsg += ',' + indexString;
|
95
|
+
} else if (args !== 1) {
|
96
|
+
newmsg += ",".concat(indexString, ",").concat(array);
|
97
|
+
}
|
98
|
+
|
99
|
+
newmsg += ")' but argument ".concat(err.data.index + 1, " of type ");
|
100
|
+
newmsg += "".concat(err.data.actual, " does not match expected type ");
|
101
|
+
newmsg += err.data.expected.join(' or ');
|
102
|
+
throw new TypeError(newmsg);
|
103
|
+
}
|
104
|
+
|
105
|
+
throw err;
|
68
106
|
}
|
69
107
|
}
|
70
108
|
};
|
@@ -28,16 +28,26 @@ export var createSubset = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
28
28
|
*
|
29
29
|
* // replace a subset
|
30
30
|
* const e = []
|
31
|
-
* const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]]
|
31
|
+
* const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]] and e = [[5, 0, 6]]
|
32
32
|
* const g = math.subset(f, math.index(1, 1), 7, 0) // g = [[5, 6], [0, 7]]
|
33
33
|
*
|
34
|
+
* // get submatrix using ranges
|
35
|
+
* const M = [
|
36
|
+
* [1,2,3],
|
37
|
+
* [4,5,6],
|
38
|
+
* [7,8,9]
|
39
|
+
* ]
|
40
|
+
* math.subset(M, math.index(math.range(0,2), math.range(0,3))) // [[1,2,3],[4,5,6]]
|
41
|
+
*
|
34
42
|
* See also:
|
35
43
|
*
|
36
44
|
* size, resize, squeeze, index
|
37
45
|
*
|
38
46
|
* @param {Array | Matrix | string} matrix An array, matrix, or string
|
39
|
-
* @param {Index} index
|
40
|
-
*
|
47
|
+
* @param {Index} index
|
48
|
+
* For each dimension of the target, specifies an index or a list of
|
49
|
+
* indices to fetch or set. `subset` uses the cartesian product of
|
50
|
+
* the indices specified in each dimension.
|
41
51
|
* @param {*} [replacement] An array, matrix, or scalar.
|
42
52
|
* If provided, the subset is replaced with replacement.
|
43
53
|
* If not provided, the subset is returned
|
@@ -80,7 +90,7 @@ export var createSubset = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
80
90
|
/**
|
81
91
|
* Retrieve a subset of a string
|
82
92
|
* @param {string} str string from which to get a substring
|
83
|
-
* @param {Index} index An index
|
93
|
+
* @param {Index} index An index or list of indices (character positions)
|
84
94
|
* @returns {string} substring
|
85
95
|
* @private
|
86
96
|
*/
|
@@ -109,7 +119,7 @@ function _getSubstring(str, index) {
|
|
109
119
|
/**
|
110
120
|
* Replace a substring in a string
|
111
121
|
* @param {string} str string to be replaced
|
112
|
-
* @param {Index} index An index
|
122
|
+
* @param {Index} index An index or list of indices (character positions)
|
113
123
|
* @param {string} replacement Replacement string
|
114
124
|
* @param {string} [defaultValue] Default value to be uses when resizing
|
115
125
|
* the string. is ' ' by default
|
package/lib/esm/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export var version = '10.
|
1
|
+
export var version = '10.3.0'; // Note: This file is automatically generated when building math.js.
|
2
2
|
// Changes made in this file will be overwritten.
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "mathjs",
|
3
|
-
"version": "10.
|
3
|
+
"version": "10.3.0",
|
4
4
|
"description": "Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types like numbers, big numbers, complex numbers, fractions, units, and matrices.",
|
5
5
|
"author": "Jos de Jong <wjosdejong@gmail.com> (https://github.com/josdejong)",
|
6
6
|
"homepage": "https://mathjs.org",
|
package/types/index.d.ts
CHANGED
@@ -1723,7 +1723,7 @@ declare namespace math {
|
|
1723
1723
|
/**
|
1724
1724
|
* Get or set a subset of a matrix or string.
|
1725
1725
|
* @param value An array, matrix, or string
|
1726
|
-
* @param index
|
1726
|
+
* @param index For each dimension, an index or list of indices to get or set.
|
1727
1727
|
* @param replacement An array, matrix, or scalar. If provided, the
|
1728
1728
|
* subset is replaced with replacement. If not provided, the subset is
|
1729
1729
|
* returned
|
@@ -3218,8 +3218,6 @@ declare namespace math {
|
|
3218
3218
|
): MathNode;
|
3219
3219
|
|
3220
3220
|
rules: SimplifyRule[];
|
3221
|
-
|
3222
|
-
simplifyCore(expr: MathNode): MathNode;
|
3223
3221
|
}
|
3224
3222
|
|
3225
3223
|
interface UnitDefinition {
|
@@ -3682,6 +3680,8 @@ declare namespace math {
|
|
3682
3680
|
*/
|
3683
3681
|
simplify(rules?: SimplifyRule[], scope?: object): MathJsChain;
|
3684
3682
|
|
3683
|
+
simplifyCore(expr: MathNode): MathNode;
|
3684
|
+
|
3685
3685
|
/**
|
3686
3686
|
* Calculate the Sparse Matrix LU decomposition with full pivoting.
|
3687
3687
|
* Sparse Matrix A is decomposed in two matrices (L, U) and two
|
@@ -4319,7 +4319,7 @@ declare namespace math {
|
|
4319
4319
|
|
4320
4320
|
/**
|
4321
4321
|
* Get or set a subset of a matrix or string.
|
4322
|
-
* @param index
|
4322
|
+
* @param index For each dimension, an index or list of indices to get or set
|
4323
4323
|
* @param replacement An array, matrix, or scalar. If provided, the
|
4324
4324
|
* subset is replaced with replacement. If not provided, the subset is
|
4325
4325
|
* returned
|