mathjs 10.0.0 → 10.1.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 +37 -0
- package/NOTICE +1 -1
- package/README.md +10 -2
- package/bin/cli.js +1 -1
- package/docs/expressions/syntax.md +1 -1
- package/docs/reference/constants.md +1 -1
- package/docs/reference/functions/invmod.md +41 -0
- package/docs/reference/functions/simplify.md +8 -5
- package/docs/reference/functions.md +1 -0
- package/examples/expressions.js +1 -1
- package/lib/browser/math.js +7 -7
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesIntersect.generated.js +6 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesInvmod.generated.js +41 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +15 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +15 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +15 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +15 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +11 -0
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +10 -0
- package/lib/cjs/entry/pureFunctionsAny.generated.js +16 -2
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +6 -1
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/invmod.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/matrix/forEach.js +1 -1
- package/lib/cjs/factoriesAny.js +8 -0
- package/lib/cjs/function/algebra/rationalize.js +18 -4
- package/lib/cjs/function/algebra/simplify/simplifyConstant.js +223 -29
- package/lib/cjs/function/algebra/simplify/simplifyCore.js +34 -6
- package/lib/cjs/function/algebra/simplify.js +103 -30
- package/lib/cjs/function/arithmetic/invmod.js +73 -0
- package/lib/cjs/function/arithmetic/round.js +2 -2
- package/lib/cjs/function/geometry/intersect.js +12 -13
- package/lib/cjs/function/probability/gamma.js +28 -30
- package/lib/cjs/header.js +3 -3
- package/lib/cjs/type/matrix/SparseMatrix.js +19 -15
- package/lib/cjs/type/unit/Unit.js +2 -2
- package/lib/cjs/utils/number.js +1 -1
- package/lib/cjs/utils/snapshot.js +2 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesIntersect.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesInvmod.generated.js +24 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +10 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +10 -0
- package/lib/esm/entry/dependenciesAny.generated.js +1 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +10 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +10 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +12 -1
- package/lib/esm/entry/impureFunctionsNumber.generated.js +10 -0
- package/lib/esm/entry/pureFunctionsAny.generated.js +14 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +4 -1
- package/lib/esm/expression/embeddedDocs/function/arithmetic/invmod.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/matrix/forEach.js +1 -1
- package/lib/esm/factoriesAny.js +1 -0
- package/lib/esm/function/algebra/rationalize.js +18 -4
- package/lib/esm/function/algebra/simplify/simplifyConstant.js +197 -29
- package/lib/esm/function/algebra/simplify/simplifyCore.js +35 -7
- package/lib/esm/function/algebra/simplify.js +103 -30
- package/lib/esm/function/arithmetic/invmod.js +57 -0
- package/lib/esm/function/arithmetic/round.js +2 -2
- package/lib/esm/function/geometry/intersect.js +12 -12
- package/lib/esm/function/probability/gamma.js +28 -30
- package/lib/esm/header.js +1 -1
- package/lib/esm/type/matrix/SparseMatrix.js +19 -15
- package/lib/esm/type/unit/Unit.js +2 -2
- package/lib/esm/utils/number.js +1 -1
- package/lib/esm/utils/snapshot.js +2 -2
- package/lib/esm/version.js +1 -1
- package/package.json +15 -14
- package/types/index.d.ts +4 -4
@@ -7,7 +7,7 @@ import { createResolve } from './simplify/resolve.js';
|
|
7
7
|
import { hasOwnProperty } from '../../utils/object.js';
|
8
8
|
import { createEmptyMap, createMap } from '../../utils/map.js';
|
9
9
|
var name = 'simplify';
|
10
|
-
var dependencies = ['config', 'typed', 'parse', 'add', 'subtract', 'multiply', 'divide', 'pow', 'isZero', 'equal', '?fraction', '?bignumber', 'mathWithTransform', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
|
10
|
+
var dependencies = ['config', 'typed', 'parse', 'add', 'subtract', 'multiply', 'divide', 'pow', 'isZero', 'equal', '?fraction', '?bignumber', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
|
11
11
|
export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
12
12
|
var {
|
13
13
|
config,
|
@@ -23,8 +23,13 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
23
23
|
fraction,
|
24
24
|
bignumber,
|
25
25
|
mathWithTransform,
|
26
|
+
matrix,
|
27
|
+
AccessorNode,
|
28
|
+
ArrayNode,
|
26
29
|
ConstantNode,
|
27
30
|
FunctionNode,
|
31
|
+
IndexNode,
|
32
|
+
ObjectNode,
|
28
33
|
OperatorNode,
|
29
34
|
ParenthesisNode,
|
30
35
|
SymbolNode
|
@@ -33,11 +38,16 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
33
38
|
typed,
|
34
39
|
config,
|
35
40
|
mathWithTransform,
|
41
|
+
matrix,
|
36
42
|
fraction,
|
37
43
|
bignumber,
|
44
|
+
AccessorNode,
|
45
|
+
ArrayNode,
|
38
46
|
ConstantNode,
|
39
|
-
OperatorNode,
|
40
47
|
FunctionNode,
|
48
|
+
IndexNode,
|
49
|
+
ObjectNode,
|
50
|
+
OperatorNode,
|
41
51
|
SymbolNode
|
42
52
|
});
|
43
53
|
var simplifyCore = createSimplifyCore({
|
@@ -48,9 +58,13 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
48
58
|
multiply,
|
49
59
|
divide,
|
50
60
|
pow,
|
61
|
+
AccessorNode,
|
62
|
+
ArrayNode,
|
51
63
|
ConstantNode,
|
52
|
-
OperatorNode,
|
53
64
|
FunctionNode,
|
65
|
+
IndexNode,
|
66
|
+
ObjectNode,
|
67
|
+
OperatorNode,
|
54
68
|
ParenthesisNode
|
55
69
|
});
|
56
70
|
var resolve = createResolve({
|
@@ -107,11 +121,14 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
107
121
|
* - [Symbolic computation - Simplification (Wikipedia)](https://en.wikipedia.org/wiki/Symbolic_computation#Simplification)
|
108
122
|
*
|
109
123
|
* An optional `options` argument can be passed as last argument of `simplify`.
|
110
|
-
*
|
111
|
-
* - `
|
112
|
-
|
113
|
-
*
|
114
|
-
|
124
|
+
* Currently available options (defaults in parentheses):
|
125
|
+
* - `consoleDebug` (false): whether to write the expression being simplified
|
126
|
+
and any changes to it, along with the rule responsible, to console
|
127
|
+
* - `exactFractions` (true): whether to try to convert all constants to
|
128
|
+
exact rational numbers.
|
129
|
+
* - `fractionsLimit` (10000): when `exactFractions` is true, constants will
|
130
|
+
be expressed as fractions only when both numerator and denominator
|
131
|
+
are smaller than `fractionsLimit`.
|
115
132
|
*
|
116
133
|
* Syntax:
|
117
134
|
*
|
@@ -181,6 +198,7 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
181
198
|
return this(expr, rules, createMap(scope), options);
|
182
199
|
},
|
183
200
|
'Node, Array, Map, Object': function NodeArrayMapObject(expr, rules, scope, options) {
|
201
|
+
var debug = options.consoleDebug;
|
184
202
|
rules = _buildRules(rules);
|
185
203
|
var res = resolve(expr, scope);
|
186
204
|
res = removeParens(res);
|
@@ -193,12 +211,33 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
193
211
|
visited[str] = true;
|
194
212
|
_lastsym = 0; // counter for placeholder symbols
|
195
213
|
|
214
|
+
var laststr = str;
|
215
|
+
if (debug) console.log('Working on: ', str);
|
216
|
+
|
196
217
|
for (var i = 0; i < rules.length; i++) {
|
218
|
+
var rulestr = '';
|
219
|
+
|
197
220
|
if (typeof rules[i] === 'function') {
|
198
221
|
res = rules[i](res, options);
|
222
|
+
if (debug) rulestr = rules[i].name;
|
199
223
|
} else {
|
200
224
|
flatten(res);
|
201
225
|
res = applyRule(res, rules[i]);
|
226
|
+
|
227
|
+
if (debug) {
|
228
|
+
rulestr = "".concat(rules[i].l.toString(), " -> ").concat(rules[i].r.toString());
|
229
|
+
}
|
230
|
+
}
|
231
|
+
|
232
|
+
if (debug) {
|
233
|
+
var newstr = res.toString({
|
234
|
+
parenthesis: 'all'
|
235
|
+
});
|
236
|
+
|
237
|
+
if (newstr !== laststr) {
|
238
|
+
console.log('Applying', rulestr, 'produced', newstr);
|
239
|
+
laststr = newstr;
|
240
|
+
}
|
202
241
|
}
|
203
242
|
|
204
243
|
unflattenl(res); // using left-heavy binary tree here since custom rule functions may expect it
|
@@ -262,17 +301,19 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
262
301
|
l: 'log(e)',
|
263
302
|
r: '1'
|
264
303
|
}, // temporary rules
|
304
|
+
// Note initially we tend constants to the right because like-term
|
305
|
+
// collection prefers the left, and we would rather collect nonconstants
|
265
306
|
{
|
266
307
|
l: 'n-n1',
|
267
308
|
r: 'n+-n1'
|
268
309
|
}, // temporarily replace 'subtract' so we can further flatten the 'add' operator
|
269
310
|
{
|
270
311
|
l: '-(c*v)',
|
271
|
-
r: '(-c)
|
312
|
+
r: 'v * (-c)'
|
272
313
|
}, // make non-constant terms positive
|
273
314
|
{
|
274
315
|
l: '-v',
|
275
|
-
r: '(-1)
|
316
|
+
r: 'v * (-1)'
|
276
317
|
}, {
|
277
318
|
l: 'n/n1^n2',
|
278
319
|
r: 'n*n1^-n2'
|
@@ -280,7 +321,7 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
280
321
|
{
|
281
322
|
l: 'n/n1',
|
282
323
|
r: 'n*n1^-1'
|
283
|
-
}, // expand nested exponentiation
|
324
|
+
}, simplifyConstant, // expand nested exponentiation
|
284
325
|
{
|
285
326
|
l: '(n ^ n1) ^ n2',
|
286
327
|
r: 'n ^ (n1 * n2)'
|
@@ -302,20 +343,29 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
302
343
|
l: 'n+-n',
|
303
344
|
r: '0'
|
304
345
|
}, {
|
305
|
-
l: '
|
306
|
-
r: '(
|
307
|
-
},
|
308
|
-
|
309
|
-
|
310
|
-
|
346
|
+
l: 'v*n + v',
|
347
|
+
r: 'v*(n+1)'
|
348
|
+
}, // NOTE: leftmost position is special:
|
349
|
+
{
|
350
|
+
l: 'n3*n1 + n3*n2',
|
351
|
+
r: 'n3*(n1+n2)'
|
352
|
+
}, // All sub-monomials tried there.
|
353
|
+
{
|
354
|
+
l: 'n*c + c',
|
355
|
+
r: '(n+1)*c'
|
356
|
+
}, // remove parenthesis in the case of negating a quantity
|
357
|
+
// (It might seem this rule should precede collecting like terms,
|
358
|
+
// but putting it after gives another chance of noticing like terms,
|
359
|
+
// and any new like terms produced by this will be collected
|
360
|
+
// on the next pass through all the rules.)
|
361
|
+
{
|
362
|
+
l: 'n1 + (n2 + n3)*(-1)',
|
363
|
+
r: 'n1 + n2*(-1) + n3*(-1)'
|
364
|
+
}, // make factors positive (and undo 'make non-constant terms positive')
|
311
365
|
{
|
312
|
-
l: 'n1 + -1 * (n2 + n3)',
|
313
|
-
r: 'n1 + -1 * n2 + -1 * n3'
|
314
|
-
}, simplifyConstant, {
|
315
366
|
l: '(-n)*n1',
|
316
367
|
r: '-(n*n1)'
|
317
|
-
}, //
|
318
|
-
// ordering of constants
|
368
|
+
}, // final ordering of constants
|
319
369
|
{
|
320
370
|
l: 'c+v',
|
321
371
|
r: 'v+c',
|
@@ -365,6 +415,9 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
365
415
|
{
|
366
416
|
l: 'n1/(n2/n3)',
|
367
417
|
r: '(n1*n3)/n2'
|
418
|
+
}, {
|
419
|
+
l: 'n1/(-n2)',
|
420
|
+
r: '-n1/n2'
|
368
421
|
}];
|
369
422
|
/**
|
370
423
|
* Parse the string array of rules into nodes
|
@@ -416,7 +469,7 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
416
469
|
};
|
417
470
|
|
418
471
|
if (rule.context) {
|
419
|
-
newRule.
|
472
|
+
newRule.context = rule.context;
|
420
473
|
}
|
421
474
|
|
422
475
|
if (rule.evaluate) {
|
@@ -460,6 +513,14 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
460
513
|
function _getExpandPlaceholderSymbol() {
|
461
514
|
return new SymbolNode('_p' + _lastsym++);
|
462
515
|
}
|
516
|
+
|
517
|
+
function mapRule(nodes, rule) {
|
518
|
+
if (nodes) {
|
519
|
+
for (var i = 0; i < nodes.length; ++i) {
|
520
|
+
nodes[i] = applyRule(nodes[i], rule);
|
521
|
+
}
|
522
|
+
}
|
523
|
+
}
|
463
524
|
/**
|
464
525
|
* Returns a simplfied form of node, or the original node if no simplification was possible.
|
465
526
|
*
|
@@ -473,19 +534,31 @@ export var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
473
534
|
// console.log('Entering applyRule(' + node.toString() + ')')
|
474
535
|
// Do not clone node unless we find a match
|
475
536
|
var res = node; // First replace our child nodes with their simplified versions
|
476
|
-
// If a child could not be simplified, the
|
477
|
-
// no effect since the node is returned unchanged
|
537
|
+
// If a child could not be simplified, applying the rule to it
|
538
|
+
// will have no effect since the node is returned unchanged
|
478
539
|
|
479
540
|
if (res instanceof OperatorNode || res instanceof FunctionNode) {
|
480
|
-
|
481
|
-
for (var i = 0; i < res.args.length; i++) {
|
482
|
-
res.args[i] = applyRule(res.args[i], rule);
|
483
|
-
}
|
484
|
-
}
|
541
|
+
mapRule(res.args, rule);
|
485
542
|
} else if (res instanceof ParenthesisNode) {
|
486
543
|
if (res.content) {
|
487
544
|
res.content = applyRule(res.content, rule);
|
488
545
|
}
|
546
|
+
} else if (res instanceof ArrayNode) {
|
547
|
+
mapRule(res.items, rule);
|
548
|
+
} else if (res instanceof AccessorNode) {
|
549
|
+
if (res.object) {
|
550
|
+
res.object = applyRule(res.object, rule);
|
551
|
+
}
|
552
|
+
|
553
|
+
if (res.index) {
|
554
|
+
res.index = applyRule(res.index, rule);
|
555
|
+
}
|
556
|
+
} else if (res instanceof IndexNode) {
|
557
|
+
mapRule(res.dimensions, rule);
|
558
|
+
} else if (res instanceof ObjectNode) {
|
559
|
+
for (var prop in res.properties) {
|
560
|
+
res.properties[prop] = applyRule(res.properties[prop], rule);
|
561
|
+
}
|
489
562
|
} // Try to match a rule against this node
|
490
563
|
|
491
564
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import { factory } from '../../utils/factory.js';
|
2
|
+
var name = 'invmod';
|
3
|
+
var dependencies = ['typed', 'config', 'BigNumber', 'xgcd', 'equal', 'smaller', 'mod', 'add', 'isInteger'];
|
4
|
+
export var createInvmod = /* #__PURE__ */factory(name, dependencies, _ref => {
|
5
|
+
var {
|
6
|
+
typed,
|
7
|
+
config,
|
8
|
+
BigNumber,
|
9
|
+
xgcd,
|
10
|
+
equal,
|
11
|
+
smaller,
|
12
|
+
mod,
|
13
|
+
add,
|
14
|
+
isInteger
|
15
|
+
} = _ref;
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Calculate the (modular) multiplicative inverse of a modulo b. Solution to the equation `ax ≣ 1 (mod b)`
|
19
|
+
* See https://en.wikipedia.org/wiki/Modular_multiplicative_inverse.
|
20
|
+
*
|
21
|
+
* Syntax:
|
22
|
+
*
|
23
|
+
* math.invmod(a, b)
|
24
|
+
*
|
25
|
+
* Examples:
|
26
|
+
*
|
27
|
+
* math.invmod(8, 12) // returns NaN
|
28
|
+
* math.invmod(7, 13) // return 2
|
29
|
+
* math.invmod(15151, 15122) // returns 10429
|
30
|
+
*
|
31
|
+
* See also:
|
32
|
+
*
|
33
|
+
* gcd, xgcd
|
34
|
+
*
|
35
|
+
* @param {number | BigNumber} a An integer number
|
36
|
+
* @param {number | BigNumber} b An integer number
|
37
|
+
* @return {number | BigNumber } Returns an integer number
|
38
|
+
* where `invmod(a,b)*a ≣ 1 (mod b)`
|
39
|
+
*/
|
40
|
+
return typed(name, {
|
41
|
+
'number, number': invmod,
|
42
|
+
'BigNumber, BigNumber': invmod
|
43
|
+
});
|
44
|
+
|
45
|
+
function invmod(a, b) {
|
46
|
+
if (!isInteger(a) || !isInteger(b)) throw new Error('Parameters in function invmod must be integer numbers');
|
47
|
+
a = mod(a, b);
|
48
|
+
if (equal(b, 0)) throw new Error('Divisor must be non zero');
|
49
|
+
var res = xgcd(a, b);
|
50
|
+
res = res.valueOf();
|
51
|
+
var [gcd, inv] = res;
|
52
|
+
if (!equal(gcd, BigNumber(1))) return NaN;
|
53
|
+
inv = mod(inv, b);
|
54
|
+
if (smaller(inv, BigNumber(0))) inv = add(inv, b);
|
55
|
+
return inv;
|
56
|
+
}
|
57
|
+
});
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
2
|
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
3
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
4
4
|
|
5
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
6
6
|
|
7
7
|
import { factory } from '../../utils/factory.js';
|
8
8
|
import { deepMap } from '../../utils/collection.js';
|
@@ -1,7 +1,6 @@
|
|
1
|
-
import { isBigNumber } from '../../utils/is.js';
|
2
1
|
import { factory } from '../../utils/factory.js';
|
3
2
|
var name = 'intersect';
|
4
|
-
var dependencies = ['typed', 'config', 'abs', 'add', 'addScalar', 'matrix', 'multiply', 'multiplyScalar', 'divideScalar', 'subtract', 'smaller', 'equalScalar', 'flatten'];
|
3
|
+
var dependencies = ['typed', 'config', 'abs', 'add', 'addScalar', 'matrix', 'multiply', 'multiplyScalar', 'divideScalar', 'subtract', 'smaller', 'equalScalar', 'flatten', 'isZero', 'isNumeric'];
|
5
4
|
export var createIntersect = /* #__PURE__ */factory(name, dependencies, _ref => {
|
6
5
|
var {
|
7
6
|
typed,
|
@@ -16,7 +15,9 @@ export var createIntersect = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
16
15
|
subtract,
|
17
16
|
smaller,
|
18
17
|
equalScalar,
|
19
|
-
flatten
|
18
|
+
flatten,
|
19
|
+
isZero,
|
20
|
+
isNumeric
|
20
21
|
} = _ref;
|
21
22
|
|
22
23
|
/**
|
@@ -142,21 +143,16 @@ export var createIntersect = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
142
143
|
return arr;
|
143
144
|
}
|
144
145
|
|
145
|
-
function _isNumeric(a) {
|
146
|
-
// intersect supports numbers and bignumbers
|
147
|
-
return typeof a === 'number' || isBigNumber(a);
|
148
|
-
}
|
149
|
-
|
150
146
|
function _2d(x) {
|
151
|
-
return x.length === 2 &&
|
147
|
+
return x.length === 2 && isNumeric(x[0]) && isNumeric(x[1]);
|
152
148
|
}
|
153
149
|
|
154
150
|
function _3d(x) {
|
155
|
-
return x.length === 3 &&
|
151
|
+
return x.length === 3 && isNumeric(x[0]) && isNumeric(x[1]) && isNumeric(x[2]);
|
156
152
|
}
|
157
153
|
|
158
154
|
function _4d(x) {
|
159
|
-
return x.length === 4 &&
|
155
|
+
return x.length === 4 && isNumeric(x[0]) && isNumeric(x[1]) && isNumeric(x[2]) && isNumeric(x[3]);
|
160
156
|
}
|
161
157
|
|
162
158
|
function _intersect2d(p1a, p1b, p2a, p2b) {
|
@@ -165,6 +161,7 @@ export var createIntersect = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
165
161
|
var d1 = subtract(o1, p1b);
|
166
162
|
var d2 = subtract(o2, p2b);
|
167
163
|
var det = subtract(multiplyScalar(d1[0], d2[1]), multiplyScalar(d2[0], d1[1]));
|
164
|
+
if (isZero(det)) return null;
|
168
165
|
|
169
166
|
if (smaller(abs(det), config.epsilon)) {
|
170
167
|
return null;
|
@@ -197,7 +194,10 @@ export var createIntersect = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
197
194
|
|
198
195
|
var d2121 = _intersect3dHelper(x2, x1, x2, x1, y2, y1, y2, y1, z2, z1, z2, z1);
|
199
196
|
|
200
|
-
var
|
197
|
+
var numerator = subtract(multiplyScalar(d1343, d4321), multiplyScalar(d1321, d4343));
|
198
|
+
var denominator = subtract(multiplyScalar(d2121, d4343), multiplyScalar(d4321, d4321));
|
199
|
+
if (isZero(denominator)) return null;
|
200
|
+
var ta = divideScalar(numerator, denominator);
|
201
201
|
var tb = divideScalar(addScalar(d1343, multiplyScalar(ta, d4321)), d4343);
|
202
202
|
var pax = addScalar(x1, multiplyScalar(ta, subtract(x2, x1)));
|
203
203
|
var pay = addScalar(y1, multiplyScalar(ta, subtract(y2, y1)));
|
@@ -41,44 +41,42 @@ export var createGamma = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
41
41
|
Complex: function Complex(n) {
|
42
42
|
if (n.im === 0) {
|
43
43
|
return this(n.re);
|
44
|
-
}
|
44
|
+
} // Lanczos approximation doesn't work well with real part lower than 0.5
|
45
|
+
// So reflection formula is required
|
46
|
+
|
47
|
+
|
48
|
+
if (n.re < 0.5) {
|
49
|
+
// Euler's reflection formula
|
50
|
+
// gamma(1-z) * gamma(z) = PI / sin(PI * z)
|
51
|
+
// real part of Z should not be integer [sin(PI) == 0 -> 1/0 - undefined]
|
52
|
+
// thanks to imperfect sin implementation sin(PI * n) != 0
|
53
|
+
// we can safely use it anyway
|
54
|
+
var _t = new _Complex(1 - n.re, -n.im);
|
55
|
+
|
56
|
+
var r = new _Complex(Math.PI * n.re, Math.PI * n.im);
|
57
|
+
return new _Complex(Math.PI).div(r.sin()).div(this(_t));
|
58
|
+
} // Lanczos approximation
|
59
|
+
// z -= 1
|
60
|
+
|
45
61
|
|
46
|
-
n = new _Complex(n.re - 1, n.im);
|
47
|
-
|
62
|
+
n = new _Complex(n.re - 1, n.im); // x = gammaPval[0]
|
63
|
+
|
64
|
+
var x = new _Complex(gammaP[0], 0); // for (i, gammaPval) in enumerate(gammaP):
|
48
65
|
|
49
66
|
for (var i = 1; i < gammaP.length; ++i) {
|
50
|
-
|
67
|
+
// x += gammaPval / (z + i)
|
68
|
+
var gammaPval = new _Complex(gammaP[i], 0);
|
69
|
+
x = x.add(gammaPval.div(n.add(i)));
|
70
|
+
} // t = z + gammaG + 0.5
|
51
71
|
|
52
|
-
var den = real * real + n.im * n.im;
|
53
72
|
|
54
|
-
|
55
|
-
x.re += gammaP[i] * real / den;
|
56
|
-
x.im += -(gammaP[i] * n.im) / den;
|
57
|
-
} else {
|
58
|
-
x.re = gammaP[i] < 0 ? -Infinity : Infinity;
|
59
|
-
}
|
60
|
-
}
|
73
|
+
var t = new _Complex(n.re + gammaG + 0.5, n.im); // y = sqrt(2 * pi) * t ** (z + 0.5) * exp(-t) * x
|
61
74
|
|
62
|
-
var t = new _Complex(n.re + gammaG + 0.5, n.im);
|
63
75
|
var twoPiSqrt = Math.sqrt(2 * Math.PI);
|
64
|
-
n.
|
65
|
-
var
|
66
|
-
|
67
|
-
if (result.im === 0) {
|
68
|
-
// sqrt(2*PI)*result
|
69
|
-
result.re *= twoPiSqrt;
|
70
|
-
} else if (result.re === 0) {
|
71
|
-
result.im *= twoPiSqrt;
|
72
|
-
} else {
|
73
|
-
result.re *= twoPiSqrt;
|
74
|
-
result.im *= twoPiSqrt;
|
75
|
-
}
|
76
|
-
|
77
|
-
var r = Math.exp(-t.re); // exp(-t)
|
76
|
+
var tpow = t.pow(n.add(0.5));
|
77
|
+
var expt = t.neg().exp(); // y = [x] * [sqrt(2 * pi)] * [t ** (z + 0.5)] * [exp(-t)]
|
78
78
|
|
79
|
-
|
80
|
-
t.im = r * Math.sin(-t.im);
|
81
|
-
return multiplyScalar(multiplyScalar(result, t), x);
|
79
|
+
return x.mul(twoPiSqrt).mul(tpow).mul(expt);
|
82
80
|
},
|
83
81
|
BigNumber: function BigNumber(n) {
|
84
82
|
if (n.isInteger()) {
|
package/lib/esm/header.js
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
* @date @@date
|
11
11
|
*
|
12
12
|
* @license
|
13
|
-
* Copyright (C) 2013-
|
13
|
+
* Copyright (C) 2013-2022 Jos de Jong <wjosdejong@gmail.com>
|
14
14
|
*
|
15
15
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
16
16
|
* use this file except in compliance with the License. You may obtain a copy
|
@@ -417,23 +417,27 @@ export var createSparseMatrixClass = /* #__PURE__ */factory(name, dependencies,
|
|
417
417
|
|
418
418
|
if (!deepStrictEqual(iSize, sSize)) {
|
419
419
|
throw new DimensionError(iSize, sSize, '>');
|
420
|
-
} //
|
420
|
+
} // insert the sub matrix
|
421
421
|
|
422
422
|
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
423
|
+
if (iSize.length === 1) {
|
424
|
+
// if the replacement index only has 1 dimension, go trough each one and set its value
|
425
|
+
var range = index.dimension(0);
|
426
|
+
range.forEach(function (dataIndex, subIndex) {
|
427
|
+
validateIndex(dataIndex);
|
428
|
+
matrix.set([dataIndex, 0], submatrix[subIndex[0]], defaultValue);
|
429
|
+
});
|
430
|
+
} else {
|
431
|
+
// if the replacement index has 2 dimensions, go through each one and set the value in the correct index
|
432
|
+
var firstDimensionRange = index.dimension(0);
|
433
|
+
var secondDimensionRange = index.dimension(1);
|
434
|
+
firstDimensionRange.forEach(function (firstDataIndex, firstSubIndex) {
|
435
|
+
validateIndex(firstDataIndex);
|
436
|
+
secondDimensionRange.forEach(function (secondDataIndex, secondSubIndex) {
|
437
|
+
validateIndex(secondDataIndex);
|
438
|
+
matrix.set([firstDataIndex, secondDataIndex], submatrix[firstSubIndex[0]][secondSubIndex[0]], defaultValue);
|
439
|
+
});
|
440
|
+
});
|
437
441
|
}
|
438
442
|
}
|
439
443
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
3
3
|
|
4
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
4
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
5
5
|
|
6
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
6
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
7
7
|
|
8
8
|
import { isComplex, isUnit, typeOf } from '../../utils/is.js';
|
9
9
|
import { factory } from '../../utils/factory.js';
|
package/lib/esm/utils/number.js
CHANGED
@@ -318,7 +318,7 @@ export function format(value, options) {
|
|
318
318
|
|
319
319
|
export function splitNumber(value) {
|
320
320
|
// parse the input value
|
321
|
-
var match = String(value).toLowerCase().match(/^
|
321
|
+
var match = String(value).toLowerCase().match(/^(-?)(\d+\.?\d*)(e([+-]?\d+))?$/);
|
322
322
|
|
323
323
|
if (!match) {
|
324
324
|
throw new SyntaxError('Invalid number ' + value);
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
3
3
|
|
4
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
4
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
5
5
|
|
6
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
6
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
7
7
|
|
8
8
|
/**
|
9
9
|
* This file contains helper methods to create expected snapshot structures
|
package/lib/esm/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export var version = '10.
|
1
|
+
export var version = '10.1.1'; // 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.1.1",
|
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",
|
@@ -25,43 +25,43 @@
|
|
25
25
|
"unit"
|
26
26
|
],
|
27
27
|
"dependencies": {
|
28
|
-
"@babel/runtime": "^7.16.
|
28
|
+
"@babel/runtime": "^7.16.7",
|
29
29
|
"complex.js": "^2.0.15",
|
30
30
|
"decimal.js": "^10.3.1",
|
31
31
|
"escape-latex": "^1.2.0",
|
32
|
-
"fraction.js": "^4.1.
|
32
|
+
"fraction.js": "^4.1.2",
|
33
33
|
"javascript-natural-sort": "^0.7.1",
|
34
34
|
"seedrandom": "^3.0.5",
|
35
35
|
"tiny-emitter": "^2.1.0",
|
36
36
|
"typed-function": "^2.0.0"
|
37
37
|
},
|
38
38
|
"devDependencies": {
|
39
|
-
"@babel/core": "7.16.
|
40
|
-
"@babel/plugin-transform-object-assign": "7.16.
|
41
|
-
"@babel/plugin-transform-runtime": "7.16.
|
42
|
-
"@babel/preset-env": "7.16.
|
43
|
-
"@babel/register": "7.16.
|
39
|
+
"@babel/core": "7.16.12",
|
40
|
+
"@babel/plugin-transform-object-assign": "7.16.7",
|
41
|
+
"@babel/plugin-transform-runtime": "7.16.10",
|
42
|
+
"@babel/preset-env": "7.16.11",
|
43
|
+
"@babel/register": "7.16.9",
|
44
44
|
"babel-loader": "8.2.3",
|
45
45
|
"benchmark": "2.1.4",
|
46
46
|
"codecov": "3.8.3",
|
47
|
-
"core-js": "3.
|
47
|
+
"core-js": "3.21.0",
|
48
48
|
"del": "6.0.0",
|
49
|
-
"dtslint": "4.2.
|
49
|
+
"dtslint": "4.2.1",
|
50
50
|
"expr-eval": "2.0.2",
|
51
|
-
"fancy-log": "
|
51
|
+
"fancy-log": "2.0.0",
|
52
52
|
"glob": "7.2.0",
|
53
53
|
"gulp": "4.0.2",
|
54
54
|
"gulp-babel": "8.0.0",
|
55
55
|
"handlebars": "4.7.7",
|
56
56
|
"istanbul": "0.4.5",
|
57
57
|
"jsep": "1.2.0",
|
58
|
-
"karma": "6.3.
|
58
|
+
"karma": "6.3.13",
|
59
59
|
"karma-browserstack-launcher": "1.6.0",
|
60
60
|
"karma-firefox-launcher": "2.1.2",
|
61
61
|
"karma-mocha": "2.0.1",
|
62
62
|
"karma-mocha-reporter": "2.2.5",
|
63
63
|
"karma-webpack": "4.0.2",
|
64
|
-
"math-expression-evaluator": "1.3.
|
64
|
+
"math-expression-evaluator": "1.3.14",
|
65
65
|
"mkdirp": "1.0.4",
|
66
66
|
"mocha": "8.4.0",
|
67
67
|
"ndarray": "1.0.19",
|
@@ -74,7 +74,7 @@
|
|
74
74
|
"pad-right": "0.2.2",
|
75
75
|
"standard": "16.0.4",
|
76
76
|
"sylvester": "0.0.21",
|
77
|
-
"typescript": "4.
|
77
|
+
"typescript": "4.5.5",
|
78
78
|
"webpack": "4.46.0",
|
79
79
|
"zeros": "1.0.0"
|
80
80
|
},
|
@@ -131,6 +131,7 @@
|
|
131
131
|
"compile": "gulp --gulpfile gulpfile.cjs compile",
|
132
132
|
"watch": "gulp --gulpfile gulpfile.cjs watch",
|
133
133
|
"lint": "standard --env=mocha --env=worker",
|
134
|
+
"format": "npm run lint -- --fix",
|
134
135
|
"validate:ascii": "gulp --gulpfile gulpfile.cjs validate:ascii",
|
135
136
|
"test": "npm run test:src && npm run lint",
|
136
137
|
"test:src": "mocha test/unit-tests",
|