mathjs 11.8.2 → 11.9.1
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 +24 -0
- 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/entry/dependenciesAny/dependenciesFreqz.generated.js +28 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRange.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRangeTransform.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSolveODE.generated.js +46 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesZpk2tf.generated.js +26 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +21 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRange.generated.js +4 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRangeTransform.generated.js +4 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +35 -30
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +2 -0
- package/lib/cjs/entry/pureFunctionsAny.generated.js +82 -45
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +2 -0
- package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +11 -3
- package/lib/cjs/expression/embeddedDocs/function/{matrix → algebra}/lyap.js +2 -2
- package/lib/cjs/expression/embeddedDocs/function/algebra/polynomialRoot.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/{matrix → algebra}/schur.js +2 -2
- package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/{matrix → algebra}/sylvester.js +2 -2
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/invmod.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/expression/evaluate.js +2 -2
- package/lib/cjs/expression/embeddedDocs/function/matrix/diff.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/range.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/numeric/solveODE.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/signal/freqz.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/signal/zpk2tf.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/utils/numeric.js +1 -1
- package/lib/cjs/expression/node/FunctionNode.js +5 -6
- package/lib/cjs/expression/node/ObjectNode.js +5 -7
- package/lib/cjs/expression/node/SymbolNode.js +1 -1
- package/lib/cjs/expression/transform/range.transform.js +7 -3
- package/lib/cjs/factoriesAny.js +21 -0
- package/lib/cjs/function/algebra/simplify.js +3 -0
- package/lib/cjs/function/matrix/range.js +34 -110
- package/lib/cjs/function/numeric/solveODE.js +315 -0
- package/lib/cjs/function/signal/freqz.js +117 -0
- package/lib/cjs/function/signal/zpk2tf.js +95 -0
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/unit/Unit.js +15 -13
- package/lib/cjs/utils/customs.js +4 -3
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesFreqz.generated.js +20 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRange.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRangeTransform.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSolveODE.generated.js +38 -0
- package/lib/esm/entry/dependenciesAny/dependenciesZpk2tf.generated.js +18 -0
- package/lib/esm/entry/dependenciesAny.generated.js +3 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRange.generated.js +4 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRangeTransform.generated.js +4 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +34 -29
- package/lib/esm/entry/impureFunctionsNumber.generated.js +2 -0
- package/lib/esm/entry/pureFunctionsAny.generated.js +70 -36
- package/lib/esm/entry/pureFunctionsNumber.generated.js +2 -0
- package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +11 -3
- package/lib/esm/expression/embeddedDocs/function/{matrix → algebra}/lyap.js +2 -2
- package/lib/esm/expression/embeddedDocs/function/algebra/polynomialRoot.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/{matrix → algebra}/schur.js +2 -2
- package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/{matrix → algebra}/sylvester.js +2 -2
- package/lib/esm/expression/embeddedDocs/function/arithmetic/invmod.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/expression/evaluate.js +2 -2
- package/lib/esm/expression/embeddedDocs/function/matrix/diff.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/range.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/numeric/solveODE.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/signal/freqz.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/signal/zpk2tf.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/utils/numeric.js +1 -1
- package/lib/esm/expression/node/FunctionNode.js +6 -7
- package/lib/esm/expression/node/ObjectNode.js +5 -7
- package/lib/esm/expression/node/SymbolNode.js +1 -1
- package/lib/esm/expression/transform/range.transform.js +7 -3
- package/lib/esm/factoriesAny.js +3 -0
- package/lib/esm/function/algebra/simplify.js +3 -0
- package/lib/esm/function/matrix/range.js +34 -110
- package/lib/esm/function/numeric/solveODE.js +284 -0
- package/lib/esm/function/signal/freqz.js +115 -0
- package/lib/esm/function/signal/zpk2tf.js +82 -0
- package/lib/esm/type/unit/Unit.js +15 -13
- package/lib/esm/utils/customs.js +4 -3
- package/lib/esm/version.js +1 -1
- package/package.json +15 -15
- package/types/index.d.ts +51 -6
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export var schurDocs = {
|
|
2
2
|
name: 'schur',
|
|
3
|
-
category: '
|
|
3
|
+
category: 'Algebra',
|
|
4
4
|
syntax: ['schur(A)'],
|
|
5
5
|
description: 'Performs a real Schur decomposition of the real matrix A = UTU\'',
|
|
6
|
-
examples: ['schur([[1, 0], [-4, 3]])', 'schur(A)'],
|
|
6
|
+
examples: ['schur([[1, 0], [-4, 3]])', 'A = [[1, 0], [-4, 3]]', 'schur(A)'],
|
|
7
7
|
seealso: ['lyap', 'sylvester']
|
|
8
8
|
};
|
|
@@ -3,6 +3,6 @@ export var simplifyConstantDocs = {
|
|
|
3
3
|
category: 'Algebra',
|
|
4
4
|
syntax: ['simplifyConstant(expr)', 'simplifyConstant(expr, options)'],
|
|
5
5
|
description: 'Replace constant subexpressions of node with their values.',
|
|
6
|
-
examples: ['
|
|
6
|
+
examples: ['simplifyConstant("(3-3)*x")', 'simplifyConstant(parse("z-cos(tau/8)"))'],
|
|
7
7
|
seealso: ['simplify', 'simplifyCore', 'evaluate']
|
|
8
8
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export var sylvesterDocs = {
|
|
2
2
|
name: 'sylvester',
|
|
3
|
-
category: '
|
|
3
|
+
category: 'Algebra',
|
|
4
4
|
syntax: ['sylvester(A,B,C)'],
|
|
5
5
|
description: 'Solves the real-valued Sylvester equation AX+XB=C for X',
|
|
6
|
-
examples: ['sylvester([[-1, -2], [1, 1]], [[-2, 1], [-1, 2]], [[-3, 2], [3, 0]])', 'sylvester(A,B,C)'],
|
|
6
|
+
examples: ['sylvester([[-1, -2], [1, 1]], [[-2, 1], [-1, 2]], [[-3, 2], [3, 0]])', 'A = [[-1, -2], [1, 1]]; B = [[2, -1], [1, -2]]; C = [[-3, 2], [3, 0]]', 'sylvester(A, B, C)'],
|
|
7
7
|
seealso: ['schur', 'lyap']
|
|
8
8
|
};
|
|
@@ -3,6 +3,6 @@ export var invmodDocs = {
|
|
|
3
3
|
category: 'Arithmetic',
|
|
4
4
|
syntax: ['invmod(a, b)'],
|
|
5
5
|
description: 'Calculate the (modular) multiplicative inverse of a modulo b. Solution to the equation ax ≣ 1 (mod b)',
|
|
6
|
-
examples: ['invmod(8, 12)
|
|
6
|
+
examples: ['invmod(8, 12)', 'invmod(7, 13)', 'invmod(15151, 15122)'],
|
|
7
7
|
seealso: ['gcd', 'xgcd']
|
|
8
8
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export var evaluateDocs = {
|
|
2
2
|
name: 'evaluate',
|
|
3
3
|
category: 'Expression',
|
|
4
|
-
syntax: ['evaluate(expression)', 'evaluate([expr1, expr2, expr3, ...])'],
|
|
4
|
+
syntax: ['evaluate(expression)', 'evaluate(expression, scope)', 'evaluate([expr1, expr2, expr3, ...])', 'evaluate([expr1, expr2, expr3, ...], scope)'],
|
|
5
5
|
description: 'Evaluate an expression or an array with expressions.',
|
|
6
|
-
examples: ['evaluate("2 + 3")', 'evaluate("sqrt("
|
|
6
|
+
examples: ['evaluate("2 + 3")', 'evaluate("sqrt(16)")', 'evaluate("2 inch to cm")', 'evaluate("sin(x * pi)", { "x": 1/2 })', 'evaluate(["width=2", "height=4","width*height"])'],
|
|
7
7
|
seealso: []
|
|
8
8
|
};
|
|
@@ -3,6 +3,6 @@ export var diffDocs = {
|
|
|
3
3
|
category: 'Matrix',
|
|
4
4
|
syntax: ['diff(arr)', 'diff(arr, dim)'],
|
|
5
5
|
description: ['Create a new matrix or array with the difference of the passed matrix or array.', 'Dim parameter is optional and used to indicant the dimension of the array/matrix to apply the difference', 'If no dimension parameter is passed it is assumed as dimension 0', 'Dimension is zero-based in javascript and one-based in the parser', 'Arrays must be \'rectangular\' meaning arrays like [1, 2]', 'If something is passed as a matrix it will be returned as a matrix but other than that all matrices are converted to arrays'],
|
|
6
|
-
examples: ['
|
|
6
|
+
examples: ['A = [1, 2, 4, 7, 0]', 'diff(A)', 'diff(A, 1)', 'B = [[1, 2], [3, 4]]', 'diff(B)', 'diff(B, 1)', 'diff(B, 2)', 'diff(B, bignumber(2))', 'diff([[1, 2], matrix([3, 4])], 2)'],
|
|
7
7
|
seealso: ['subtract', 'partitionSelect']
|
|
8
8
|
};
|
|
@@ -3,6 +3,6 @@ export var rangeDocs = {
|
|
|
3
3
|
category: 'Type',
|
|
4
4
|
syntax: ['start:end', 'start:step:end', 'range(start, end)', 'range(start, end, step)', 'range(string)'],
|
|
5
5
|
description: 'Create a range. Lower bound of the range is included, upper bound is excluded.',
|
|
6
|
-
examples: ['1:5', '3:-1:-3', 'range(3, 7)', 'range(0, 12, 2)', 'range("4:10")', 'a = [1, 2, 3, 4; 5, 6, 7, 8]', 'a[1:2, 1:2]'],
|
|
6
|
+
examples: ['1:5', '3:-1:-3', 'range(3, 7)', 'range(0, 12, 2)', 'range("4:10")', 'range(1m, 1m, 3m)', 'a = [1, 2, 3, 4; 5, 6, 7, 8]', 'a[1:2, 1:2]'],
|
|
7
7
|
seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'size', 'squeeze', 'subset', 'trace', 'transpose', 'zeros']
|
|
8
8
|
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export var solveODEDocs = {
|
|
2
|
+
name: 'solveODE',
|
|
3
|
+
category: 'Numeric',
|
|
4
|
+
syntax: ['solveODE(func, tspan, y0)', 'solveODE(func, tspan, y0, options)'],
|
|
5
|
+
description: 'Numerical Integration of Ordinary Differential Equations.',
|
|
6
|
+
examples: ['f(t,y) = y', 'tspan = [0, 4]', 'solveODE(f, tspan, 1)', 'solveODE(f, tspan, [1, 2])', 'solveODE(f, tspan, 1, { method:"RK23", maxStep:0.1 })'],
|
|
7
|
+
seealso: ['derivative', 'simplifyCore']
|
|
8
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export var freqzDocs = {
|
|
2
|
+
name: 'freqz',
|
|
3
|
+
category: 'Signal',
|
|
4
|
+
syntax: ['freqz(b, a)', 'freqz(b, a, w)'],
|
|
5
|
+
description: 'Calculates the frequency response of a filter given its numerator and denominator coefficients.',
|
|
6
|
+
examples: ['freqz([1, 2], [1, 2, 3])', 'freqz([1, 2], [1, 2, 3], [0, 1])', 'freqz([1, 2], [1, 2, 3], 512)'],
|
|
7
|
+
seealso: []
|
|
8
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export var zpk2tfDocs = {
|
|
2
|
+
name: 'zpk2tf',
|
|
3
|
+
category: 'Signal',
|
|
4
|
+
syntax: ['zpk2tf(z, p, k)'],
|
|
5
|
+
description: 'Compute the transfer function of a zero-pole-gain model.',
|
|
6
|
+
examples: ['zpk2tf([1, 2], [-1, -2], 1)', 'zpk2tf([1, 2], [-1, -2])', 'zpk2tf([1 - 3i, 2 + 2i], [-1, -2])'],
|
|
7
|
+
seealso: []
|
|
8
|
+
};
|
|
@@ -3,6 +3,6 @@ export var numericDocs = {
|
|
|
3
3
|
category: 'Utils',
|
|
4
4
|
syntax: ['numeric(x)'],
|
|
5
5
|
description: 'Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.',
|
|
6
|
-
examples: ['numeric("4")', 'numeric("4", "number")', 'numeric("4", "BigNumber")', 'numeric("4", "Fraction)', 'numeric(4, "Fraction")', 'numeric(fraction(2, 5), "number)'],
|
|
6
|
+
examples: ['numeric("4")', 'numeric("4", "number")', 'numeric("4", "BigNumber")', 'numeric("4", "Fraction")', 'numeric(4, "Fraction")', 'numeric(fraction(2, 5), "number")'],
|
|
7
7
|
seealso: ['number', 'fraction', 'bignumber', 'string', 'format']
|
|
8
8
|
};
|
|
@@ -2,7 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
2
2
|
import { isAccessorNode, isFunctionAssignmentNode, isIndexNode, isNode, isSymbolNode } from '../../utils/is.js';
|
|
3
3
|
import { escape, format } from '../../utils/string.js';
|
|
4
4
|
import { hasOwnProperty } from '../../utils/object.js';
|
|
5
|
-
import { getSafeProperty,
|
|
5
|
+
import { getSafeProperty, getSafeMethod } from '../../utils/customs.js';
|
|
6
6
|
import { createSubScope } from '../../utils/scope.js';
|
|
7
7
|
import { factory } from '../../utils/factory.js';
|
|
8
8
|
import { defaultTemplate, latexFunctions } from '../../utils/latex.js';
|
|
@@ -203,7 +203,7 @@ export var createFunctionNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
|
203
203
|
// the function symbol is an argName
|
|
204
204
|
var _rawArgs = this.args;
|
|
205
205
|
return function evalFunctionNode(scope, args, context) {
|
|
206
|
-
var fn = args
|
|
206
|
+
var fn = getSafeProperty(args, _name);
|
|
207
207
|
if (typeof fn !== 'function') {
|
|
208
208
|
throw new TypeError("Argument '".concat(_name, "' was not a function; received: ").concat(strin(fn)));
|
|
209
209
|
}
|
|
@@ -225,15 +225,14 @@ export var createFunctionNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
|
225
225
|
var _rawArgs2 = this.args;
|
|
226
226
|
return function evalFunctionNode(scope, args, context) {
|
|
227
227
|
var object = evalObject(scope, args, context);
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
if (isRaw) {
|
|
228
|
+
var fn = getSafeMethod(object, prop);
|
|
229
|
+
if (fn !== null && fn !== void 0 && fn.rawArgs) {
|
|
231
230
|
// "Raw" evaluation
|
|
232
|
-
return
|
|
231
|
+
return fn(_rawArgs2, math, createSubScope(scope, args), scope);
|
|
233
232
|
} else {
|
|
234
233
|
// "regular" evaluation
|
|
235
234
|
var values = evalArgs.map(evalArg => evalArg(scope, args, context));
|
|
236
|
-
return
|
|
235
|
+
return fn.apply(object, values);
|
|
237
236
|
}
|
|
238
237
|
};
|
|
239
238
|
} else {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import { getSafeProperty } from '../../utils/customs.js';
|
|
3
|
+
import { factory } from '../../utils/factory.js';
|
|
2
4
|
import { isNode } from '../../utils/is.js';
|
|
3
|
-
import { escape, stringify } from '../../utils/string.js';
|
|
4
|
-
import { isSafeProperty } from '../../utils/customs.js';
|
|
5
5
|
import { hasOwnProperty } from '../../utils/object.js';
|
|
6
|
-
import {
|
|
6
|
+
import { escape, stringify } from '../../utils/string.js';
|
|
7
7
|
var name = 'ObjectNode';
|
|
8
8
|
var dependencies = ['Node'];
|
|
9
9
|
export var createObjectNode = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
@@ -58,10 +58,8 @@ export var createObjectNode = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
|
58
58
|
// so you cannot create a key like {"co\\u006Estructor": null}
|
|
59
59
|
var stringifiedKey = stringify(key);
|
|
60
60
|
var parsedKey = JSON.parse(stringifiedKey);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
evalEntries[parsedKey] = this.properties[key]._compile(math, argNames);
|
|
61
|
+
var prop = getSafeProperty(this.properties, key);
|
|
62
|
+
evalEntries[parsedKey] = prop._compile(math, argNames);
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
65
|
return function evalObjectNode(scope, args, context) {
|
|
@@ -61,7 +61,7 @@ export var createSymbolNode = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
|
61
61
|
// (like an x when inside the expression of a function
|
|
62
62
|
// assignment `f(x) = ...`)
|
|
63
63
|
return function (scope, args, context) {
|
|
64
|
-
return args
|
|
64
|
+
return getSafeProperty(args, name);
|
|
65
65
|
};
|
|
66
66
|
} else if (name in math) {
|
|
67
67
|
return function (scope, args, context) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { factory } from '../../utils/factory.js';
|
|
2
2
|
import { createRange } from '../../function/matrix/range.js';
|
|
3
3
|
var name = 'range';
|
|
4
|
-
var dependencies = ['typed', 'config', '?matrix', '?bignumber', 'smaller', 'smallerEq', 'larger', 'largerEq'];
|
|
4
|
+
var dependencies = ['typed', 'config', '?matrix', '?bignumber', 'smaller', 'smallerEq', 'larger', 'largerEq', 'add', 'isPositive'];
|
|
5
5
|
export var createRangeTransform = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
6
6
|
var {
|
|
7
7
|
typed,
|
|
@@ -11,7 +11,9 @@ export var createRangeTransform = /* #__PURE__ */factory(name, dependencies, _re
|
|
|
11
11
|
smaller,
|
|
12
12
|
smallerEq,
|
|
13
13
|
larger,
|
|
14
|
-
largerEq
|
|
14
|
+
largerEq,
|
|
15
|
+
add,
|
|
16
|
+
isPositive
|
|
15
17
|
} = _ref;
|
|
16
18
|
var range = createRange({
|
|
17
19
|
typed,
|
|
@@ -21,7 +23,9 @@ export var createRangeTransform = /* #__PURE__ */factory(name, dependencies, _re
|
|
|
21
23
|
smaller,
|
|
22
24
|
smallerEq,
|
|
23
25
|
larger,
|
|
24
|
-
largerEq
|
|
26
|
+
largerEq,
|
|
27
|
+
add,
|
|
28
|
+
isPositive
|
|
25
29
|
});
|
|
26
30
|
|
|
27
31
|
/**
|
package/lib/esm/factoriesAny.js
CHANGED
|
@@ -94,6 +94,7 @@ export { createCtranspose } from './function/matrix/ctranspose.js';
|
|
|
94
94
|
export { createZeros } from './function/matrix/zeros.js';
|
|
95
95
|
export { createFft } from './function/matrix/fft.js';
|
|
96
96
|
export { createIfft } from './function/matrix/ifft.js';
|
|
97
|
+
export { createSolveODE } from './function/numeric/solveODE.js';
|
|
97
98
|
export { createErf } from './function/special/erf.js';
|
|
98
99
|
export { createMode } from './function/statistics/mode.js';
|
|
99
100
|
export { createProd } from './function/statistics/prod.js';
|
|
@@ -258,6 +259,8 @@ export { createResolve } from './function/algebra/resolve.js';
|
|
|
258
259
|
export { createSymbolicEqual } from './function/algebra/symbolicEqual.js';
|
|
259
260
|
export { createDerivative } from './function/algebra/derivative.js';
|
|
260
261
|
export { createRationalize } from './function/algebra/rationalize.js';
|
|
262
|
+
export { createZpk2tf } from './function/signal/zpk2tf.js';
|
|
263
|
+
export { createFreqz } from './function/signal/freqz.js';
|
|
261
264
|
export { createReviver } from './json/reviver.js';
|
|
262
265
|
export { createReplacer } from './json/replacer.js';
|
|
263
266
|
export { createE, createUppercaseE, createFalse, createI, createInfinity, createLN10, createLN2, createLOG10E, createLOG2E, createNaN, createNull, createPhi, createPi, createUppercasePi, createSQRT1_2,
|
|
@@ -533,6 +533,9 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
533
533
|
},
|
|
534
534
|
// undo replace 'subtract'
|
|
535
535
|
{
|
|
536
|
+
l: 'n+-(n1)',
|
|
537
|
+
r: 'n-(n1)'
|
|
538
|
+
}, {
|
|
536
539
|
s: 'n*(n1^-1) -> n/n1',
|
|
537
540
|
// undo replace 'divide'; for * commutative
|
|
538
541
|
assuming: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { factory } from '../../utils/factory.js';
|
|
2
2
|
import { noBignumber, noMatrix } from '../../utils/noop.js';
|
|
3
3
|
var name = 'range';
|
|
4
|
-
var dependencies = ['typed', 'config', '?matrix', '?bignumber', 'smaller', 'smallerEq', 'larger', 'largerEq'];
|
|
4
|
+
var dependencies = ['typed', 'config', '?matrix', '?bignumber', 'smaller', 'smallerEq', 'larger', 'largerEq', 'add', 'isPositive'];
|
|
5
5
|
export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
6
6
|
var {
|
|
7
7
|
typed,
|
|
@@ -11,7 +11,9 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
11
11
|
smaller,
|
|
12
12
|
smallerEq,
|
|
13
13
|
larger,
|
|
14
|
-
largerEq
|
|
14
|
+
largerEq,
|
|
15
|
+
add,
|
|
16
|
+
isPositive
|
|
15
17
|
} = _ref;
|
|
16
18
|
/**
|
|
17
19
|
* Create an array from a range.
|
|
@@ -33,11 +35,11 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
33
35
|
*
|
|
34
36
|
* - `str: string`
|
|
35
37
|
* A string 'start:end' or 'start:step:end'
|
|
36
|
-
* - `start: {number | BigNumber}`
|
|
38
|
+
* - `start: {number | BigNumber | Unit}`
|
|
37
39
|
* Start of the range
|
|
38
|
-
* - `end: number | BigNumber`
|
|
40
|
+
* - `end: number | BigNumber | Unit`
|
|
39
41
|
* End of the range, excluded by default, included when parameter includeEnd=true
|
|
40
|
-
* - `step: number | BigNumber`
|
|
42
|
+
* - `step: number | BigNumber | Unit`
|
|
41
43
|
* Step size. Default value is 1.
|
|
42
44
|
* - `includeEnd: boolean`
|
|
43
45
|
* Option to specify whether to include the end or not. False by default.
|
|
@@ -48,6 +50,7 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
48
50
|
* math.range(2, -3, -1) // [2, 1, 0, -1, -2]
|
|
49
51
|
* math.range('2:1:6') // [2, 3, 4, 5]
|
|
50
52
|
* math.range(2, 6, true) // [2, 3, 4, 5, 6]
|
|
53
|
+
* math.range(math.unit(2, 'm'), math.unit(-3, 'm'), math.unit(-1, 'm')) // [2 m, 1 m, 0 m , -1 m, -2 m]
|
|
51
54
|
*
|
|
52
55
|
* See also:
|
|
53
56
|
*
|
|
@@ -63,30 +66,36 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
63
66
|
string: _strRange,
|
|
64
67
|
'string, boolean': _strRange,
|
|
65
68
|
'number, number': function numberNumber(start, end) {
|
|
66
|
-
return _out(
|
|
69
|
+
return _out(_range(start, end, 1, false));
|
|
67
70
|
},
|
|
68
71
|
'number, number, number': function numberNumberNumber(start, end, step) {
|
|
69
|
-
return _out(
|
|
72
|
+
return _out(_range(start, end, step, false));
|
|
70
73
|
},
|
|
71
74
|
'number, number, boolean': function numberNumberBoolean(start, end, includeEnd) {
|
|
72
|
-
return
|
|
75
|
+
return _out(_range(start, end, 1, includeEnd));
|
|
73
76
|
},
|
|
74
77
|
'number, number, number, boolean': function numberNumberNumberBoolean(start, end, step, includeEnd) {
|
|
75
|
-
return
|
|
78
|
+
return _out(_range(start, end, step, includeEnd));
|
|
76
79
|
},
|
|
77
80
|
'BigNumber, BigNumber': function BigNumberBigNumber(start, end) {
|
|
78
81
|
var BigNumber = start.constructor;
|
|
79
|
-
return _out(
|
|
82
|
+
return _out(_range(start, end, new BigNumber(1), false));
|
|
80
83
|
},
|
|
81
84
|
'BigNumber, BigNumber, BigNumber': function BigNumberBigNumberBigNumber(start, end, step) {
|
|
82
|
-
return _out(
|
|
85
|
+
return _out(_range(start, end, step, false));
|
|
83
86
|
},
|
|
84
87
|
'BigNumber, BigNumber, boolean': function BigNumberBigNumberBoolean(start, end, includeEnd) {
|
|
85
88
|
var BigNumber = start.constructor;
|
|
86
|
-
return
|
|
89
|
+
return _out(_range(start, end, new BigNumber(1), includeEnd));
|
|
87
90
|
},
|
|
88
91
|
'BigNumber, BigNumber, BigNumber, boolean': function BigNumberBigNumberBigNumberBoolean(start, end, step, includeEnd) {
|
|
89
|
-
return
|
|
92
|
+
return _out(_range(start, end, step, includeEnd));
|
|
93
|
+
},
|
|
94
|
+
'Unit, Unit, Unit': function UnitUnitUnit(start, end, step) {
|
|
95
|
+
return _out(_range(start, end, step, false));
|
|
96
|
+
},
|
|
97
|
+
'Unit, Unit, Unit, boolean': function UnitUnitUnitBoolean(start, end, step, includeEnd) {
|
|
98
|
+
return _out(_range(start, end, step, includeEnd));
|
|
90
99
|
}
|
|
91
100
|
});
|
|
92
101
|
function _out(arr) {
|
|
@@ -100,117 +109,32 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
100
109
|
if (!r) {
|
|
101
110
|
throw new SyntaxError('String "' + str + '" is no valid range');
|
|
102
111
|
}
|
|
103
|
-
var fn;
|
|
104
112
|
if (config.number === 'BigNumber') {
|
|
105
113
|
if (bignumber === undefined) {
|
|
106
114
|
noBignumber();
|
|
107
115
|
}
|
|
108
|
-
|
|
109
|
-
return _out(fn(bignumber(r.start), bignumber(r.end), bignumber(r.step)));
|
|
116
|
+
return _out(_range(bignumber(r.start), bignumber(r.end), bignumber(r.step)), includeEnd);
|
|
110
117
|
} else {
|
|
111
|
-
|
|
112
|
-
return _out(fn(r.start, r.end, r.step));
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Create a range with numbers. End is excluded
|
|
118
|
-
* @param {number} start
|
|
119
|
-
* @param {number} end
|
|
120
|
-
* @param {number} step
|
|
121
|
-
* @returns {Array} range
|
|
122
|
-
* @private
|
|
123
|
-
*/
|
|
124
|
-
function _rangeEx(start, end, step) {
|
|
125
|
-
var array = [];
|
|
126
|
-
var x = start;
|
|
127
|
-
if (step > 0) {
|
|
128
|
-
while (smaller(x, end)) {
|
|
129
|
-
array.push(x);
|
|
130
|
-
x += step;
|
|
131
|
-
}
|
|
132
|
-
} else if (step < 0) {
|
|
133
|
-
while (larger(x, end)) {
|
|
134
|
-
array.push(x);
|
|
135
|
-
x += step;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return array;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Create a range with numbers. End is included
|
|
143
|
-
* @param {number} start
|
|
144
|
-
* @param {number} end
|
|
145
|
-
* @param {number} step
|
|
146
|
-
* @returns {Array} range
|
|
147
|
-
* @private
|
|
148
|
-
*/
|
|
149
|
-
function _rangeInc(start, end, step) {
|
|
150
|
-
var array = [];
|
|
151
|
-
var x = start;
|
|
152
|
-
if (step > 0) {
|
|
153
|
-
while (smallerEq(x, end)) {
|
|
154
|
-
array.push(x);
|
|
155
|
-
x += step;
|
|
156
|
-
}
|
|
157
|
-
} else if (step < 0) {
|
|
158
|
-
while (largerEq(x, end)) {
|
|
159
|
-
array.push(x);
|
|
160
|
-
x += step;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return array;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Create a range with big numbers. End is excluded
|
|
168
|
-
* @param {BigNumber} start
|
|
169
|
-
* @param {BigNumber} end
|
|
170
|
-
* @param {BigNumber} step
|
|
171
|
-
* @returns {Array} range
|
|
172
|
-
* @private
|
|
173
|
-
*/
|
|
174
|
-
function _bigRangeEx(start, end, step) {
|
|
175
|
-
var zero = bignumber(0);
|
|
176
|
-
var array = [];
|
|
177
|
-
var x = start;
|
|
178
|
-
if (step.gt(zero)) {
|
|
179
|
-
while (smaller(x, end)) {
|
|
180
|
-
array.push(x);
|
|
181
|
-
x = x.plus(step);
|
|
182
|
-
}
|
|
183
|
-
} else if (step.lt(zero)) {
|
|
184
|
-
while (larger(x, end)) {
|
|
185
|
-
array.push(x);
|
|
186
|
-
x = x.plus(step);
|
|
187
|
-
}
|
|
118
|
+
return _out(_range(r.start, r.end, r.step, includeEnd));
|
|
188
119
|
}
|
|
189
|
-
return array;
|
|
190
120
|
}
|
|
191
121
|
|
|
192
122
|
/**
|
|
193
|
-
* Create a range with
|
|
194
|
-
* @param {BigNumber} start
|
|
195
|
-
* @param {BigNumber} end
|
|
196
|
-
* @param {BigNumber} step
|
|
123
|
+
* Create a range with numbers or BigNumbers
|
|
124
|
+
* @param {number | BigNumber | Unit} start
|
|
125
|
+
* @param {number | BigNumber | Unit} end
|
|
126
|
+
* @param {number | BigNumber | Unit} step
|
|
127
|
+
* @param {boolean} includeEnd
|
|
197
128
|
* @returns {Array} range
|
|
198
129
|
* @private
|
|
199
130
|
*/
|
|
200
|
-
function
|
|
201
|
-
var zero = bignumber(0);
|
|
131
|
+
function _range(start, end, step, includeEnd) {
|
|
202
132
|
var array = [];
|
|
133
|
+
var ongoing = isPositive(step) ? includeEnd ? smallerEq : smaller : includeEnd ? largerEq : larger;
|
|
203
134
|
var x = start;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
x = x.plus(step);
|
|
208
|
-
}
|
|
209
|
-
} else if (step.lt(zero)) {
|
|
210
|
-
while (largerEq(x, end)) {
|
|
211
|
-
array.push(x);
|
|
212
|
-
x = x.plus(step);
|
|
213
|
-
}
|
|
135
|
+
while (ongoing(x, end)) {
|
|
136
|
+
array.push(x);
|
|
137
|
+
x = add(x, step);
|
|
214
138
|
}
|
|
215
139
|
return array;
|
|
216
140
|
}
|