mathjs 14.4.0 → 14.5.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 +11 -0
- package/README.md +1 -1
- 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/constants.js +12 -12
- package/lib/cjs/core/create.js +1 -2
- package/lib/cjs/defaultInstance.js +1 -2
- package/lib/cjs/entry/allFactoriesAny.js +1 -2
- package/lib/cjs/entry/allFactoriesNumber.js +1 -2
- package/lib/cjs/expression/embeddedDocs/construction/index.js +1 -1
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +6 -0
- package/lib/cjs/expression/embeddedDocs/function/expression/compile.js +14 -0
- package/lib/cjs/expression/embeddedDocs/function/expression/evaluate.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/expression/parse.js +14 -0
- package/lib/cjs/expression/embeddedDocs/function/expression/parser.js +14 -0
- package/lib/cjs/expression/embeddedDocs/function/statistics/sum.js +1 -1
- package/lib/cjs/expression/function/parser.js +1 -1
- package/lib/cjs/expression/parse.js +3 -2
- package/lib/cjs/function/arithmetic/add.js +33 -33
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/matrix/DenseMatrix.js +127 -91
- package/lib/cjs/type/unit/Unit.js +19 -4
- package/lib/cjs/utils/snapshot.js +1 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/constants.js +12 -12
- package/lib/esm/expression/embeddedDocs/construction/index.js +1 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +6 -0
- package/lib/esm/expression/embeddedDocs/function/expression/compile.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/expression/evaluate.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/expression/parse.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/expression/parser.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/statistics/sum.js +1 -1
- package/lib/esm/expression/function/parser.js +1 -1
- package/lib/esm/expression/parse.js +3 -2
- package/lib/esm/function/arithmetic/add.js +33 -33
- package/lib/esm/type/matrix/DenseMatrix.js +133 -97
- package/lib/esm/type/unit/Unit.js +19 -4
- package/lib/esm/version.js +1 -1
- package/package.json +17 -17
@@ -624,8 +624,8 @@ const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fa
|
|
624
624
|
|
625
625
|
// If at least one operand has a value, then the result should also have a value
|
626
626
|
if (this.value !== null || other.value !== null) {
|
627
|
-
const valThis = this.value === null ? this._normalize(
|
628
|
-
const valOther = other.value === null ? other._normalize(
|
627
|
+
const valThis = this.value === null ? this._normalize(one(other.value)) : this.value;
|
628
|
+
const valOther = other.value === null ? other._normalize(one(this.value)) : other.value;
|
629
629
|
res.value = multiplyScalar(valThis, valOther);
|
630
630
|
} else {
|
631
631
|
res.value = null;
|
@@ -673,8 +673,8 @@ const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fa
|
|
673
673
|
|
674
674
|
// If at least one operand has a value, the result should have a value
|
675
675
|
if (this.value !== null || other.value !== null) {
|
676
|
-
const valThis = this.value === null ? this._normalize(
|
677
|
-
const valOther = other.value === null ? other._normalize(
|
676
|
+
const valThis = this.value === null ? this._normalize(one(other.value)) : this.value;
|
677
|
+
const valOther = other.value === null ? other._normalize(one(this.value)) : other.value;
|
678
678
|
res.value = divideScalar(valThis, valOther);
|
679
679
|
} else {
|
680
680
|
res.value = null;
|
@@ -730,6 +730,21 @@ const createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fa
|
|
730
730
|
}
|
731
731
|
}
|
732
732
|
|
733
|
+
/**
|
734
|
+
* Create a value one with the numeric type of `typeOfValue`.
|
735
|
+
* For example, `one(new BigNumber(3))` returns `BigNumber(1)`
|
736
|
+
* @param {number | Fraction | BigNumber} typeOfValue
|
737
|
+
* @returns {number | Fraction | BigNumber}
|
738
|
+
*/
|
739
|
+
function one(typeOfValue) {
|
740
|
+
// TODO: this is a workaround to prevent the following BigNumber conversion error from throwing:
|
741
|
+
// "TypeError: Cannot implicitly convert a number with >15 significant digits to BigNumber"
|
742
|
+
// see https://github.com/josdejong/mathjs/issues/3450
|
743
|
+
// https://github.com/josdejong/mathjs/pull/3375
|
744
|
+
const convert = Unit._getNumberConverter((0, _is.typeOf)(typeOfValue));
|
745
|
+
return convert(1);
|
746
|
+
}
|
747
|
+
|
733
748
|
/**
|
734
749
|
* Calculate the absolute value of a unit
|
735
750
|
* @memberof Unit
|
@@ -12,8 +12,7 @@ var _assert = _interopRequireDefault(require("assert"));
|
|
12
12
|
var allIsFunctions = _interopRequireWildcard(require("./is.js"));
|
13
13
|
var _create = require("../core/create.js");
|
14
14
|
var _string = require("./string.js");
|
15
|
-
function
|
16
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
15
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
17
16
|
/**
|
18
17
|
* This file contains helper methods to create expected snapshot structures
|
19
18
|
* of both instance and ES6 exports.
|
package/lib/cjs/version.js
CHANGED
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.version = void 0;
|
7
|
-
const version = exports.version = '14.
|
7
|
+
const version = exports.version = '14.5.0';
|
8
8
|
// Note: This file is automatically generated when building math.js.
|
9
9
|
// Changes made in this file will be overwritten.
|
package/lib/esm/constants.js
CHANGED
@@ -70,47 +70,47 @@ export var createLOG2E = /* #__PURE__ */recreateFactory('LOG2E', ['config', '?Bi
|
|
70
70
|
} = _ref9;
|
71
71
|
return config.number === 'BigNumber' ? new BigNumber(1).div(new BigNumber(2).ln()) : Math.LOG2E;
|
72
72
|
});
|
73
|
-
export var createLOG10E = /* #__PURE__ */recreateFactory('LOG10E', ['config', '?BigNumber'],
|
73
|
+
export var createLOG10E = /* #__PURE__ */recreateFactory('LOG10E', ['config', '?BigNumber'], _ref0 => {
|
74
74
|
var {
|
75
75
|
config,
|
76
76
|
BigNumber
|
77
|
-
} =
|
77
|
+
} = _ref0;
|
78
78
|
return config.number === 'BigNumber' ? new BigNumber(1).div(new BigNumber(10).ln()) : Math.LOG10E;
|
79
79
|
});
|
80
80
|
export var createSQRT1_2 = /* #__PURE__ */recreateFactory(
|
81
81
|
// eslint-disable-line camelcase
|
82
|
-
'SQRT1_2', ['config', '?BigNumber'],
|
82
|
+
'SQRT1_2', ['config', '?BigNumber'], _ref1 => {
|
83
83
|
var {
|
84
84
|
config,
|
85
85
|
BigNumber
|
86
|
-
} =
|
86
|
+
} = _ref1;
|
87
87
|
return config.number === 'BigNumber' ? new BigNumber('0.5').sqrt() : Math.SQRT1_2;
|
88
88
|
});
|
89
|
-
export var createSQRT2 = /* #__PURE__ */recreateFactory('SQRT2', ['config', '?BigNumber'],
|
89
|
+
export var createSQRT2 = /* #__PURE__ */recreateFactory('SQRT2', ['config', '?BigNumber'], _ref10 => {
|
90
90
|
var {
|
91
91
|
config,
|
92
92
|
BigNumber
|
93
|
-
} =
|
93
|
+
} = _ref10;
|
94
94
|
return config.number === 'BigNumber' ? new BigNumber(2).sqrt() : Math.SQRT2;
|
95
95
|
});
|
96
|
-
export var createI = /* #__PURE__ */recreateFactory('i', ['Complex'],
|
96
|
+
export var createI = /* #__PURE__ */recreateFactory('i', ['Complex'], _ref11 => {
|
97
97
|
var {
|
98
98
|
Complex
|
99
|
-
} =
|
99
|
+
} = _ref11;
|
100
100
|
return Complex.I;
|
101
101
|
});
|
102
102
|
|
103
103
|
// for backward compatibility with v5
|
104
|
-
export var createUppercasePi = /* #__PURE__ */factory('PI', ['pi'],
|
104
|
+
export var createUppercasePi = /* #__PURE__ */factory('PI', ['pi'], _ref12 => {
|
105
105
|
var {
|
106
106
|
pi
|
107
|
-
} =
|
107
|
+
} = _ref12;
|
108
108
|
return pi;
|
109
109
|
});
|
110
|
-
export var createUppercaseE = /* #__PURE__ */factory('E', ['e'],
|
110
|
+
export var createUppercaseE = /* #__PURE__ */factory('E', ['e'], _ref13 => {
|
111
111
|
var {
|
112
112
|
e
|
113
|
-
} =
|
113
|
+
} = _ref13;
|
114
114
|
return e;
|
115
115
|
});
|
116
116
|
export var createVersion = /* #__PURE__ */factory('version', [], () => version);
|
@@ -4,5 +4,5 @@ export var indexDocs = {
|
|
4
4
|
syntax: ['[start]', '[start:end]', '[start:step:end]', '[start1, start 2, ...]', '[start1:end1, start2:end2, ...]', '[start1:step1:end1, start2:step2:end2, ...]'],
|
5
5
|
description: 'Create an index to get or replace a subset of a matrix',
|
6
6
|
examples: ['A = [1, 2, 3; 4, 5, 6]', 'A[1, :]', 'A[1, 2] = 50', 'A[1:2, 1:2] = 1', 'B = [1, 2, 3]', 'B[B>1 and B<3]'],
|
7
|
-
seealso: ['bignumber', 'boolean', 'complex', 'matrix
|
7
|
+
seealso: ['bignumber', 'boolean', 'complex', 'matrix', 'number', 'range', 'string', 'unit']
|
8
8
|
};
|
@@ -104,6 +104,9 @@ import { conjDocs } from './function/complex/conj.js';
|
|
104
104
|
import { imDocs } from './function/complex/im.js';
|
105
105
|
import { reDocs } from './function/complex/re.js';
|
106
106
|
import { evaluateDocs } from './function/expression/evaluate.js';
|
107
|
+
import { parserDocs } from './function/expression/parser.js';
|
108
|
+
import { parseDocs } from './function/expression/parse.js';
|
109
|
+
import { compileDocs } from './function/expression/compile.js';
|
107
110
|
import { helpDocs } from './function/expression/help.js';
|
108
111
|
import { distanceDocs } from './function/geometry/distance.js';
|
109
112
|
import { intersectDocs } from './function/geometry/intersect.js';
|
@@ -564,6 +567,9 @@ export var embeddedDocs = {
|
|
564
567
|
// functions - expression
|
565
568
|
evaluate: evaluateDocs,
|
566
569
|
help: helpDocs,
|
570
|
+
parse: parseDocs,
|
571
|
+
parser: parserDocs,
|
572
|
+
compile: compileDocs,
|
567
573
|
// functions - geometry
|
568
574
|
distance: distanceDocs,
|
569
575
|
intersect: intersectDocs,
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export var compileDocs = {
|
2
|
+
name: 'compile',
|
3
|
+
category: 'Expression',
|
4
|
+
syntax: ['compile(expr) ', 'compile([expr1, expr2, expr3, ...])'],
|
5
|
+
description: 'Parse and compile an expression. Returns a an object with a function evaluate([scope]) to evaluate the compiled expression.',
|
6
|
+
examples: ['code1 = compile("sqrt(3^2 + 4^2)")', 'code1.evaluate() ', 'code2 = compile("a * b")', 'code2.evaluate({a: 3, b: 4})'],
|
7
|
+
seealso: ['parser', 'parse', 'evaluate']
|
8
|
+
};
|
@@ -4,5 +4,5 @@ export var evaluateDocs = {
|
|
4
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
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
|
-
seealso: []
|
7
|
+
seealso: ['parser', 'parse', 'compile']
|
8
8
|
};
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export var parseDocs = {
|
2
|
+
name: 'parse',
|
3
|
+
category: 'Expression',
|
4
|
+
syntax: ['parse(expr)', 'parse(expr, options)', 'parse([expr1, expr2, expr3, ...])', 'parse([expr1, expr2, expr3, ...], options)'],
|
5
|
+
description: 'Parse an expression. Returns a node tree, which can be evaluated by invoking node.evaluate() or transformed into a functional object via node.compile().',
|
6
|
+
examples: ['node1 = parse("sqrt(3^2 + 4^2)")', 'node1.evaluate()', 'code1 = node1.compile()', 'code1.evaluate()', 'scope = {a: 3, b: 4}', 'node2 = parse("a * b")', 'node2.evaluate(scope)', 'code2 = node2.compile()', 'code2.evaluate(scope)'],
|
7
|
+
seealso: ['parser', 'evaluate', 'compile']
|
8
|
+
};
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export var parserDocs = {
|
2
|
+
name: 'parser',
|
3
|
+
category: 'Expression',
|
4
|
+
syntax: ['parser()'],
|
5
|
+
description: 'Create a parser object that keeps a context of variables and their values, allowing the evaluation of expressions in that context.',
|
6
|
+
examples: ['myParser = parser()', 'myParser.evaluate("sqrt(3^2 + 4^2)")', 'myParser.set("x", 3)', 'myParser.evaluate("y = x + 3")', 'myParser.evaluate(["y = x + 3", "y = y + 1"])', 'myParser.get("y")'],
|
7
|
+
seealso: ['evaluate', 'parse', 'compile']
|
8
|
+
};
|
@@ -4,5 +4,5 @@ export var sumDocs = {
|
|
4
4
|
syntax: ['sum(a, b, c, ...)', 'sum(A)', 'sum(A, dimension)'],
|
5
5
|
description: 'Compute the sum of all values.',
|
6
6
|
examples: ['sum(2, 3, 4, 1)', 'sum([2, 3, 4, 1])', 'sum([2, 5; 4, 3])'],
|
7
|
-
seealso: ['max', 'mean', 'median', 'min', 'prod', 'std', '
|
7
|
+
seealso: ['max', 'mean', 'median', 'min', 'prod', 'std', 'variance']
|
8
8
|
};
|
@@ -7,7 +7,7 @@ export var createParser = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
7
7
|
Parser
|
8
8
|
} = _ref;
|
9
9
|
/**
|
10
|
-
* Create a
|
10
|
+
* Create a `math.Parser` object that keeps a context of variables and their values, allowing the evaluation of expressions in that context.
|
11
11
|
*
|
12
12
|
* Syntax:
|
13
13
|
*
|
@@ -29,7 +29,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
29
29
|
} = _ref;
|
30
30
|
/**
|
31
31
|
* Parse an expression. Returns a node tree, which can be evaluated by
|
32
|
-
* invoking node.evaluate().
|
32
|
+
* invoking node.evaluate() or transformed into a functional object via node.compile().
|
33
33
|
*
|
34
34
|
* Note the evaluating arbitrary expressions may involve security risks,
|
35
35
|
* see [https://mathjs.org/docs/expressions/security.html](https://mathjs.org/docs/expressions/security.html) for more information.
|
@@ -48,6 +48,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
48
48
|
*
|
49
49
|
* let scope = {a:3, b:4}
|
50
50
|
* const node2 = math.parse('a * b') // 12
|
51
|
+
* node2.evaluate(scope) // 12
|
51
52
|
* const code2 = node2.compile()
|
52
53
|
* code2.evaluate(scope) // 12
|
53
54
|
* scope.a = 5
|
@@ -870,7 +871,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
870
871
|
name = state.token;
|
871
872
|
fn = operators[name];
|
872
873
|
getTokenSkipNewline(state);
|
873
|
-
if (name === 'in' && state.token
|
874
|
+
if (name === 'in' && '])},;'.includes(state.token)) {
|
874
875
|
// end of expression -> this is the unit 'in' ('inch')
|
875
876
|
node = new OperatorNode('*', 'multiply', [node, new SymbolNode('in')], true);
|
876
877
|
} else {
|
@@ -32,39 +32,39 @@ export var createAdd = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
32
32
|
concat
|
33
33
|
});
|
34
34
|
/**
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
35
|
+
* Add two or more values, `x + y`.
|
36
|
+
* For matrices, the function is evaluated element wise.
|
37
|
+
*
|
38
|
+
* Syntax:
|
39
|
+
*
|
40
|
+
* math.add(x, y)
|
41
|
+
* math.add(x, y, z, ...)
|
42
|
+
*
|
43
|
+
* Examples:
|
44
|
+
*
|
45
|
+
* math.add(2, 3) // returns number 5
|
46
|
+
* math.add(2, 3, 4) // returns number 9
|
47
|
+
*
|
48
|
+
* const a = math.complex(2, 3)
|
49
|
+
* const b = math.complex(-4, 1)
|
50
|
+
* math.add(a, b) // returns Complex -2 + 4i
|
51
|
+
*
|
52
|
+
* math.add([1, 2, 3], 4) // returns Array [5, 6, 7]
|
53
|
+
*
|
54
|
+
* const c = math.unit('5 cm')
|
55
|
+
* const d = math.unit('2.1 mm')
|
56
|
+
* math.add(c, d) // returns Unit 52.1 mm
|
57
|
+
*
|
58
|
+
* math.add("2.3", "4") // returns number 6.3
|
59
|
+
*
|
60
|
+
* See also:
|
61
|
+
*
|
62
|
+
* subtract, sum
|
63
|
+
*
|
64
|
+
* @param {number | BigNumber | bigint | Fraction | Complex | Unit | Array | Matrix} x First value to add
|
65
|
+
* @param {number | BigNumber | bigint | Fraction | Complex | Unit | Array | Matrix} y Second value to add
|
66
|
+
* @return {number | BigNumber | bigint | Fraction | Complex | Unit | Array | Matrix} Sum of `x` and `y`
|
67
|
+
*/
|
68
68
|
return typed(name, {
|
69
69
|
'any, any': addScalar,
|
70
70
|
'any, any, ...any': typed.referToSelf(self => (x, y, rest) => {
|
@@ -241,36 +241,46 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
|
|
241
241
|
}
|
242
242
|
|
243
243
|
// retrieve submatrix
|
244
|
-
|
245
|
-
|
244
|
+
var returnMatrix = new DenseMatrix([]);
|
245
|
+
var submatrix = _getSubmatrix(matrix._data, index);
|
246
|
+
returnMatrix._size = submatrix.size;
|
247
|
+
returnMatrix._datatype = matrix._datatype;
|
248
|
+
returnMatrix._data = submatrix.data;
|
249
|
+
return returnMatrix;
|
246
250
|
}
|
247
251
|
}
|
248
252
|
|
249
253
|
/**
|
250
|
-
*
|
254
|
+
* Get a submatrix of a multi dimensional matrix.
|
251
255
|
* Index is not checked for correct number or length of dimensions.
|
252
256
|
* @memberof DenseMatrix
|
253
257
|
* @param {Array} data
|
254
258
|
* @param {Index} index
|
255
|
-
* @param {number} dims Total number of dimensions
|
256
|
-
* @param {number} dim Current dimension
|
257
259
|
* @return {Array} submatrix
|
258
260
|
* @private
|
259
261
|
*/
|
260
|
-
function _getSubmatrix(data, index
|
261
|
-
var
|
262
|
-
var
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
return
|
273
|
-
|
262
|
+
function _getSubmatrix(data, index) {
|
263
|
+
var maxDepth = index.size().length - 1;
|
264
|
+
var size = Array(maxDepth);
|
265
|
+
return {
|
266
|
+
data: getSubmatrixRecursive(data),
|
267
|
+
size
|
268
|
+
};
|
269
|
+
function getSubmatrixRecursive(data) {
|
270
|
+
var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
271
|
+
var ranges = index.dimension(depth);
|
272
|
+
size[depth] = ranges.size()[0];
|
273
|
+
if (depth < maxDepth) {
|
274
|
+
return ranges.map(rangeIndex => {
|
275
|
+
validateIndex(rangeIndex, data.length);
|
276
|
+
return getSubmatrixRecursive(data[rangeIndex], depth + 1);
|
277
|
+
}).valueOf();
|
278
|
+
} else {
|
279
|
+
return ranges.map(rangeIndex => {
|
280
|
+
validateIndex(rangeIndex, data.length);
|
281
|
+
return data[rangeIndex];
|
282
|
+
}).valueOf();
|
283
|
+
}
|
274
284
|
}
|
275
285
|
}
|
276
286
|
|
@@ -358,9 +368,7 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
|
|
358
368
|
_fit(matrix, size, defaultValue);
|
359
369
|
|
360
370
|
// insert the sub matrix
|
361
|
-
|
362
|
-
var dim = 0;
|
363
|
-
_setSubmatrix(matrix._data, index, submatrix, dims, dim);
|
371
|
+
_setSubmatrix(matrix._data, index, submatrix);
|
364
372
|
}
|
365
373
|
return matrix;
|
366
374
|
}
|
@@ -371,23 +379,25 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
|
|
371
379
|
* @param {Array} data
|
372
380
|
* @param {Index} index
|
373
381
|
* @param {Array} submatrix
|
374
|
-
* @param {number} dims Total number of dimensions
|
375
|
-
* @param {number} dim
|
376
382
|
* @private
|
377
383
|
*/
|
378
|
-
function _setSubmatrix(data, index, submatrix
|
379
|
-
var
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
384
|
+
function _setSubmatrix(data, index, submatrix) {
|
385
|
+
var maxDepth = index.size().length - 1;
|
386
|
+
setSubmatrixRecursive(data, submatrix);
|
387
|
+
function setSubmatrixRecursive(data, submatrix) {
|
388
|
+
var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
389
|
+
var range = index.dimension(depth);
|
390
|
+
if (depth < maxDepth) {
|
391
|
+
range.forEach((rangeIndex, i) => {
|
392
|
+
validateIndex(rangeIndex, data.length);
|
393
|
+
setSubmatrixRecursive(data[rangeIndex], submatrix[i[0]], depth + 1);
|
394
|
+
});
|
395
|
+
} else {
|
396
|
+
range.forEach((rangeIndex, i) => {
|
397
|
+
validateIndex(rangeIndex, data.length);
|
398
|
+
data[rangeIndex] = submatrix[i[0]];
|
399
|
+
});
|
400
|
+
}
|
391
401
|
}
|
392
402
|
}
|
393
403
|
|
@@ -518,84 +528,75 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
|
|
518
528
|
};
|
519
529
|
|
520
530
|
/**
|
521
|
-
*
|
531
|
+
* Create a new matrix with the results of the callback function executed on
|
532
|
+
* each entry of the matrix.
|
522
533
|
* @memberof DenseMatrix
|
523
534
|
* @param {Function} callback The callback function is invoked with three
|
524
|
-
* parameters: the
|
525
|
-
*
|
526
|
-
*
|
535
|
+
* parameters: the value of the element, the index
|
536
|
+
* of the element, and the Matrix being traversed.
|
537
|
+
* @param {boolean} skipZeros If true, the callback function is invoked only for non-zero entries
|
538
|
+
* @param {boolean} isUnary If true, the callback function is invoked with one parameter
|
539
|
+
*
|
540
|
+
* @return {DenseMatrix} matrix
|
527
541
|
*/
|
528
|
-
DenseMatrix.prototype.
|
529
|
-
var
|
530
|
-
var
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
542
|
+
DenseMatrix.prototype.map = function (callback) {
|
543
|
+
var skipZeros = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
544
|
+
var isUnary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
545
|
+
var me = this;
|
546
|
+
var maxDepth = me._size.length - 1;
|
547
|
+
if (maxDepth < 0) return me.clone();
|
548
|
+
var fastCallback = optimizeCallback(callback, me, 'map', isUnary);
|
549
|
+
var fastCallbackFn = fastCallback.fn;
|
550
|
+
var result = me.create(undefined, me._datatype);
|
551
|
+
result._size = me._size;
|
552
|
+
if (isUnary || fastCallback.isUnary) {
|
553
|
+
result._data = iterateUnary(me._data);
|
554
|
+
return result;
|
535
555
|
}
|
536
556
|
if (maxDepth === 0) {
|
537
|
-
|
538
|
-
|
557
|
+
var inputData = me.valueOf();
|
558
|
+
var data = Array(inputData.length);
|
559
|
+
for (var i = 0; i < inputData.length; i++) {
|
560
|
+
data[i] = fastCallbackFn(inputData[i], [i], me);
|
539
561
|
}
|
540
|
-
|
562
|
+
result._data = data;
|
563
|
+
return result;
|
541
564
|
}
|
542
|
-
var index =
|
543
|
-
iterate(
|
565
|
+
var index = [];
|
566
|
+
result._data = iterate(me._data);
|
567
|
+
return result;
|
544
568
|
function iterate(data) {
|
545
569
|
var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
570
|
+
var result = Array(data.length);
|
546
571
|
if (depth < maxDepth) {
|
547
572
|
for (var _i = 0; _i < data.length; _i++) {
|
548
573
|
index[depth] = _i;
|
549
|
-
iterate(data[_i], depth + 1);
|
574
|
+
result[_i] = iterate(data[_i], depth + 1);
|
550
575
|
}
|
551
576
|
} else {
|
552
577
|
for (var _i2 = 0; _i2 < data.length; _i2++) {
|
553
578
|
index[depth] = _i2;
|
554
|
-
|
579
|
+
result[_i2] = fastCallbackFn(data[_i2], index.slice(), me);
|
555
580
|
}
|
556
581
|
}
|
582
|
+
return result;
|
557
583
|
}
|
558
584
|
function iterateUnary(data) {
|
559
585
|
var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
586
|
+
var result = Array(data.length);
|
560
587
|
if (depth < maxDepth) {
|
561
588
|
for (var _i3 = 0; _i3 < data.length; _i3++) {
|
562
|
-
iterateUnary(data[_i3], depth + 1);
|
589
|
+
result[_i3] = iterateUnary(data[_i3], depth + 1);
|
563
590
|
}
|
564
591
|
} else {
|
565
592
|
for (var _i4 = 0; _i4 < data.length; _i4++) {
|
566
|
-
|
593
|
+
result[_i4] = fastCallbackFn(data[_i4]);
|
567
594
|
}
|
568
595
|
}
|
596
|
+
return result;
|
569
597
|
}
|
570
598
|
};
|
571
599
|
|
572
|
-
/**
|
573
|
-
* Create a new matrix with the results of the callback function executed on
|
574
|
-
* each entry of the matrix.
|
575
|
-
* @memberof DenseMatrix
|
576
|
-
* @param {Function} callback The callback function is invoked with three
|
577
|
-
* parameters: the value of the element, the index
|
578
|
-
* of the element, and the Matrix being traversed.
|
579
|
-
* @param {boolean} skipZeros If true, the callback function is invoked only for non-zero entries
|
580
|
-
* @param {boolean} isUnary If true, the callback function is invoked with one parameter
|
581
|
-
*
|
582
|
-
* @return {DenseMatrix} matrix
|
583
|
-
*/
|
584
|
-
DenseMatrix.prototype.map = function (callback) {
|
585
|
-
var skipZeros = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
586
|
-
var isUnary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
587
|
-
var me = this;
|
588
|
-
var result = new DenseMatrix(me);
|
589
|
-
var fastCallback = optimizeCallback(callback, me._data, 'map', isUnary);
|
590
|
-
var applyCallback = isUnary || fastCallback.isUnary ? (arr, i) => {
|
591
|
-
arr[i] = fastCallback.fn(arr[i]);
|
592
|
-
} : (arr, i, index) => {
|
593
|
-
arr[i] = fastCallback.fn(arr[i], index, me);
|
594
|
-
};
|
595
|
-
result._forEach(applyCallback);
|
596
|
-
return result;
|
597
|
-
};
|
598
|
-
|
599
600
|
/**
|
600
601
|
* Execute a callback function on each entry of the matrix.
|
601
602
|
* @memberof DenseMatrix
|
@@ -609,13 +610,48 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
|
|
609
610
|
var skipZeros = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
610
611
|
var isUnary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
611
612
|
var me = this;
|
612
|
-
var
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
613
|
+
var maxDepth = me._size.length - 1;
|
614
|
+
if (maxDepth < 0) return;
|
615
|
+
var fastCallback = optimizeCallback(callback, me, 'map', isUnary);
|
616
|
+
var fastCallbackFn = fastCallback.fn;
|
617
|
+
if (isUnary || fastCallback.isUnary) {
|
618
|
+
iterateUnary(me._data);
|
619
|
+
return;
|
620
|
+
}
|
621
|
+
if (maxDepth === 0) {
|
622
|
+
for (var i = 0; i < me._data.length; i++) {
|
623
|
+
fastCallbackFn(me._data[i], [i], me);
|
624
|
+
}
|
625
|
+
return;
|
626
|
+
}
|
627
|
+
var index = [];
|
628
|
+
iterate(me._data);
|
629
|
+
function iterate(data) {
|
630
|
+
var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
631
|
+
if (depth < maxDepth) {
|
632
|
+
for (var _i5 = 0; _i5 < data.length; _i5++) {
|
633
|
+
index[depth] = _i5;
|
634
|
+
iterate(data[_i5], depth + 1);
|
635
|
+
}
|
636
|
+
} else {
|
637
|
+
for (var _i6 = 0; _i6 < data.length; _i6++) {
|
638
|
+
index[depth] = _i6;
|
639
|
+
fastCallbackFn(data[_i6], index.slice(), me);
|
640
|
+
}
|
641
|
+
}
|
642
|
+
}
|
643
|
+
function iterateUnary(data) {
|
644
|
+
var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
645
|
+
if (depth < maxDepth) {
|
646
|
+
for (var _i7 = 0; _i7 < data.length; _i7++) {
|
647
|
+
iterateUnary(data[_i7], depth + 1);
|
648
|
+
}
|
649
|
+
} else {
|
650
|
+
for (var _i8 = 0; _i8 < data.length; _i8++) {
|
651
|
+
fastCallbackFn(data[_i8]);
|
652
|
+
}
|
653
|
+
}
|
654
|
+
}
|
619
655
|
};
|
620
656
|
|
621
657
|
/**
|
@@ -639,15 +675,15 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
|
|
639
675
|
var index = [];
|
640
676
|
var _recurse = function* recurse(value, depth) {
|
641
677
|
if (depth < maxDepth) {
|
642
|
-
for (var
|
643
|
-
index[depth] =
|
644
|
-
yield* _recurse(value[
|
678
|
+
for (var _i9 = 0; _i9 < value.length; _i9++) {
|
679
|
+
index[depth] = _i9;
|
680
|
+
yield* _recurse(value[_i9], depth + 1);
|
645
681
|
}
|
646
682
|
} else {
|
647
|
-
for (var
|
648
|
-
index[depth] =
|
683
|
+
for (var _i0 = 0; _i0 < value.length; _i0++) {
|
684
|
+
index[depth] = _i0;
|
649
685
|
yield {
|
650
|
-
value: value[
|
686
|
+
value: value[_i0],
|
651
687
|
index: index.slice()
|
652
688
|
};
|
653
689
|
}
|