mathjs 11.8.2 → 11.9.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|