mathjs 13.1.0 → 13.2.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 +30 -0
- package/bin/cli.js +24 -10
- 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/core/function/typed.js +1 -0
- package/lib/cjs/expression/node/FunctionNode.js +9 -1
- package/lib/cjs/expression/parse.js +1 -1
- package/lib/cjs/expression/transform/filter.transform.js +28 -40
- package/lib/cjs/expression/transform/forEach.transform.js +29 -30
- package/lib/cjs/expression/transform/map.transform.js +8 -93
- package/lib/cjs/expression/transform/utils/transformCallback.js +101 -0
- package/lib/cjs/function/algebra/derivative.js +10 -11
- package/lib/cjs/function/matrix/filter.js +3 -2
- package/lib/cjs/function/matrix/forEach.js +3 -14
- package/lib/cjs/function/matrix/map.js +11 -33
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/matrix/DenseMatrix.js +73 -29
- package/lib/cjs/type/matrix/SparseMatrix.js +7 -4
- package/lib/cjs/utils/array.js +22 -0
- package/lib/cjs/utils/customs.js +5 -12
- package/lib/cjs/utils/map.js +5 -3
- package/lib/cjs/utils/optimizeCallback.js +94 -0
- package/lib/cjs/version.js +1 -1
- package/lib/esm/core/function/typed.js +1 -0
- package/lib/esm/expression/node/FunctionNode.js +9 -1
- package/lib/esm/expression/parse.js +1 -1
- package/lib/esm/expression/transform/filter.transform.js +28 -40
- package/lib/esm/expression/transform/forEach.transform.js +29 -30
- package/lib/esm/expression/transform/map.transform.js +8 -93
- package/lib/esm/expression/transform/utils/transformCallback.js +95 -0
- package/lib/esm/function/algebra/derivative.js +10 -11
- package/lib/esm/function/matrix/filter.js +3 -2
- package/lib/esm/function/matrix/forEach.js +3 -14
- package/lib/esm/function/matrix/map.js +12 -34
- package/lib/esm/type/matrix/DenseMatrix.js +75 -32
- package/lib/esm/type/matrix/SparseMatrix.js +7 -4
- package/lib/esm/utils/array.js +21 -0
- package/lib/esm/utils/customs.js +5 -12
- package/lib/esm/utils/map.js +6 -4
- package/lib/esm/utils/optimizeCallback.js +88 -0
- package/lib/esm/version.js +1 -1
- package/package.json +7 -7
- package/types/index.d.ts +50 -12
- package/lib/cjs/utils/applyCallback.js +0 -73
- package/lib/esm/utils/applyCallback.js +0 -67
@@ -11,7 +11,9 @@ var _number = require("../../utils/number.js");
|
|
11
11
|
var _object = require("../../utils/object.js");
|
12
12
|
var _DimensionError = require("../../error/DimensionError.js");
|
13
13
|
var _factory = require("../../utils/factory.js");
|
14
|
-
var
|
14
|
+
var _optimizeCallback = require("../../utils/optimizeCallback.js");
|
15
|
+
// deno-lint-ignore-file no-this-alias
|
16
|
+
|
15
17
|
const name = 'DenseMatrix';
|
16
18
|
const dependencies = ['Matrix'];
|
17
19
|
const createDenseMatrixClass = exports.createDenseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
|
@@ -522,6 +524,66 @@ const createDenseMatrixClass = exports.createDenseMatrixClass = /* #__PURE__ */(
|
|
522
524
|
return this._size.slice(0); // return a clone of _size
|
523
525
|
};
|
524
526
|
|
527
|
+
/**
|
528
|
+
* Applies a callback function to a reference to each element of the matrix
|
529
|
+
* @memberof DenseMatrix
|
530
|
+
* @param {Function} callback The callback function is invoked with three
|
531
|
+
* parameters: an array, an integer index to that
|
532
|
+
* array, and the Matrix being traversed.
|
533
|
+
*/
|
534
|
+
DenseMatrix.prototype._forEach = function (callback) {
|
535
|
+
// matrix instance
|
536
|
+
const me = this;
|
537
|
+
const s = me.size();
|
538
|
+
|
539
|
+
// if there is only one dimension, just loop through it
|
540
|
+
if (s.length === 1) {
|
541
|
+
for (let i = 0; i < s[0]; i++) {
|
542
|
+
callback(me._data, i, [i]);
|
543
|
+
}
|
544
|
+
return;
|
545
|
+
}
|
546
|
+
|
547
|
+
// keep track of the current index permutation
|
548
|
+
const index = Array(s.length).fill(0);
|
549
|
+
|
550
|
+
// store a reference of each dimension of the matrix for faster access
|
551
|
+
const data = Array(s.length - 1);
|
552
|
+
const last = data.length - 1;
|
553
|
+
data[0] = me._data[0];
|
554
|
+
for (let i = 0; i < last; i++) {
|
555
|
+
data[i + 1] = data[i][0];
|
556
|
+
}
|
557
|
+
index[last] = -1;
|
558
|
+
while (true) {
|
559
|
+
let i;
|
560
|
+
for (i = last; i >= 0; i--) {
|
561
|
+
// march index to the next permutation
|
562
|
+
index[i]++;
|
563
|
+
if (index[i] === s[i]) {
|
564
|
+
index[i] = 0;
|
565
|
+
continue;
|
566
|
+
}
|
567
|
+
|
568
|
+
// update references to matrix dimensions
|
569
|
+
data[i] = i === 0 ? me._data[index[i]] : data[i - 1][index[i]];
|
570
|
+
for (let j = i; j < last; j++) {
|
571
|
+
data[j + 1] = data[j][0];
|
572
|
+
}
|
573
|
+
|
574
|
+
// loop through the last dimension and map each value
|
575
|
+
for (let j = 0; j < s[data.length]; j++) {
|
576
|
+
index[data.length] = j;
|
577
|
+
callback(data[last], j, index.slice(0));
|
578
|
+
}
|
579
|
+
break;
|
580
|
+
}
|
581
|
+
if (i === -1) {
|
582
|
+
break;
|
583
|
+
}
|
584
|
+
}
|
585
|
+
};
|
586
|
+
|
525
587
|
/**
|
526
588
|
* Create a new matrix with the results of the callback function executed on
|
527
589
|
* each entry of the matrix.
|
@@ -533,24 +595,13 @@ const createDenseMatrixClass = exports.createDenseMatrixClass = /* #__PURE__ */(
|
|
533
595
|
* @return {DenseMatrix} matrix
|
534
596
|
*/
|
535
597
|
DenseMatrix.prototype.map = function (callback) {
|
536
|
-
// matrix instance
|
537
598
|
const me = this;
|
538
|
-
const
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
// invoke the callback function with the right number of arguments
|
545
|
-
return (0, _applyCallback.applyCallback)(callback, value, index, me, 'map');
|
546
|
-
}
|
547
|
-
};
|
548
|
-
|
549
|
-
// determine the new datatype when the original matrix has datatype defined
|
550
|
-
// TODO: should be done in matrix constructor instead
|
551
|
-
const data = recurse(this._data, []);
|
552
|
-
const datatype = this._datatype !== undefined ? (0, _array.getArrayDataType)(data, _is.typeOf) : undefined;
|
553
|
-
return new DenseMatrix(data, datatype);
|
599
|
+
const result = new DenseMatrix(me);
|
600
|
+
const fastCallback = (0, _optimizeCallback.optimizeCallback)(callback, me._data, 'map');
|
601
|
+
result._forEach(function (arr, i, index) {
|
602
|
+
arr[i] = fastCallback(arr[i], index, me);
|
603
|
+
});
|
604
|
+
return result;
|
554
605
|
};
|
555
606
|
|
556
607
|
/**
|
@@ -561,18 +612,11 @@ const createDenseMatrixClass = exports.createDenseMatrixClass = /* #__PURE__ */(
|
|
561
612
|
* of the element, and the Matrix being traversed.
|
562
613
|
*/
|
563
614
|
DenseMatrix.prototype.forEach = function (callback) {
|
564
|
-
// matrix instance
|
565
615
|
const me = this;
|
566
|
-
const
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
});
|
571
|
-
} else {
|
572
|
-
callback(value, index, me);
|
573
|
-
}
|
574
|
-
};
|
575
|
-
recurse(this._data, []);
|
616
|
+
const fastCallback = (0, _optimizeCallback.optimizeCallback)(callback, me._data, 'map');
|
617
|
+
me._forEach(function (arr, i, index) {
|
618
|
+
fastCallback(arr[i], index, me);
|
619
|
+
});
|
576
620
|
};
|
577
621
|
|
578
622
|
/**
|
@@ -11,7 +11,7 @@ var _object = require("../../utils/object.js");
|
|
11
11
|
var _array = require("../../utils/array.js");
|
12
12
|
var _factory = require("../../utils/factory.js");
|
13
13
|
var _DimensionError = require("../../error/DimensionError.js");
|
14
|
-
var
|
14
|
+
var _optimizeCallback = require("../../utils/optimizeCallback.js");
|
15
15
|
const name = 'SparseMatrix';
|
16
16
|
const dependencies = ['typed', 'equalScalar', 'Matrix'];
|
17
17
|
const createSparseMatrixClass = exports.createSparseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
|
@@ -878,10 +878,11 @@ const createSparseMatrixClass = exports.createSparseMatrixClass = /* #__PURE__ *
|
|
878
878
|
// rows and columns
|
879
879
|
const rows = this._size[0];
|
880
880
|
const columns = this._size[1];
|
881
|
+
const fastCallback = (0, _optimizeCallback.optimizeCallback)(callback, me, 'map');
|
881
882
|
// invoke callback
|
882
883
|
const invoke = function (v, i, j) {
|
883
884
|
// invoke callback
|
884
|
-
return (
|
885
|
+
return fastCallback(v, [i, j], me);
|
885
886
|
};
|
886
887
|
// invoke _map
|
887
888
|
return _map(this, 0, rows - 1, 0, columns - 1, invoke, skipZeros);
|
@@ -986,6 +987,7 @@ const createSparseMatrixClass = exports.createSparseMatrixClass = /* #__PURE__ *
|
|
986
987
|
// rows and columns
|
987
988
|
const rows = this._size[0];
|
988
989
|
const columns = this._size[1];
|
990
|
+
const fastCallback = (0, _optimizeCallback.optimizeCallback)(callback, me, 'forEach');
|
989
991
|
// loop columns
|
990
992
|
for (let j = 0; j < columns; j++) {
|
991
993
|
// k0 <= k < k1 where k0 = _ptr[j] && k1 = _ptr[j+1]
|
@@ -998,7 +1000,7 @@ const createSparseMatrixClass = exports.createSparseMatrixClass = /* #__PURE__ *
|
|
998
1000
|
const i = this._index[k];
|
999
1001
|
|
1000
1002
|
// value @ k
|
1001
|
-
|
1003
|
+
fastCallback(this._values[k], [i, j], me);
|
1002
1004
|
}
|
1003
1005
|
} else {
|
1004
1006
|
// create a cache holding all defined values
|
@@ -1012,7 +1014,7 @@ const createSparseMatrixClass = exports.createSparseMatrixClass = /* #__PURE__ *
|
|
1012
1014
|
// and either read the value or zero
|
1013
1015
|
for (let i = 0; i < rows; i++) {
|
1014
1016
|
const value = i in values ? values[i] : 0;
|
1015
|
-
|
1017
|
+
fastCallback(value, [i, j], me);
|
1016
1018
|
}
|
1017
1019
|
}
|
1018
1020
|
}
|
@@ -1411,6 +1413,7 @@ const createSparseMatrixClass = exports.createSparseMatrixClass = /* #__PURE__ *
|
|
1411
1413
|
// indeces for column j
|
1412
1414
|
const k0 = ptr[j];
|
1413
1415
|
const k1 = ptr[j + 1];
|
1416
|
+
|
1414
1417
|
// loop
|
1415
1418
|
for (let k = k0; k < k1; k++) {
|
1416
1419
|
// invoke callback
|
package/lib/cjs/utils/array.js
CHANGED
@@ -25,6 +25,7 @@ exports.join = join;
|
|
25
25
|
exports.last = last;
|
26
26
|
exports.map = map;
|
27
27
|
exports.processSizesWildcard = processSizesWildcard;
|
28
|
+
exports.recurse = recurse;
|
28
29
|
exports.reshape = reshape;
|
29
30
|
exports.resize = resize;
|
30
31
|
exports.squeeze = squeeze;
|
@@ -840,6 +841,27 @@ function get(array, index) {
|
|
840
841
|
return index.reduce((acc, curr) => acc[curr], array);
|
841
842
|
}
|
842
843
|
|
844
|
+
/**
|
845
|
+
* Recursive function to map a multi-dimensional array.
|
846
|
+
*
|
847
|
+
* @param {*} value - The current value being processed in the array.
|
848
|
+
* @param {Array} index - The index of the current value being processed in the array.
|
849
|
+
* @param {Array} array - The array being processed.
|
850
|
+
* @param {Function} callback - Function that produces the element of the new Array, taking three arguments: the value of the element, the index of the element, and the Array being processed.
|
851
|
+
* @returns {*} The new array with each element being the result of the callback function.
|
852
|
+
*/
|
853
|
+
function recurse(value, index, array, callback) {
|
854
|
+
if (Array.isArray(value)) {
|
855
|
+
return value.map(function (child, i) {
|
856
|
+
// we create a copy of the index array and append the new index value
|
857
|
+
return recurse(child, index.concat(i), array, callback);
|
858
|
+
});
|
859
|
+
} else {
|
860
|
+
// invoke the callback function with the right number of arguments
|
861
|
+
return callback(value, index, array);
|
862
|
+
}
|
863
|
+
}
|
864
|
+
|
843
865
|
/**
|
844
866
|
* Deep clones a multidimensional array
|
845
867
|
* @param {Array} array
|
package/lib/cjs/utils/customs.js
CHANGED
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.getSafeMethod = getSafeMethod;
|
7
|
-
exports.getSafeProperties = getSafeProperties;
|
8
7
|
exports.getSafeProperty = getSafeProperty;
|
9
|
-
exports.hasSafeProperty = hasSafeProperty;
|
10
8
|
exports.isPlainObject = isPlainObject;
|
11
9
|
exports.isSafeMethod = isSafeMethod;
|
12
10
|
exports.isSafeProperty = isSafeProperty;
|
@@ -22,7 +20,7 @@ var _object = require("./object.js");
|
|
22
20
|
*/
|
23
21
|
function getSafeProperty(object, prop) {
|
24
22
|
// only allow getting safe properties of a plain object
|
25
|
-
if (
|
23
|
+
if (isSafeProperty(object, prop)) {
|
26
24
|
return object[prop];
|
27
25
|
}
|
28
26
|
if (typeof object[prop] === 'function' && isSafeMethod(object, prop)) {
|
@@ -43,27 +41,22 @@ function getSafeProperty(object, prop) {
|
|
43
41
|
// TODO: merge this function into access.js?
|
44
42
|
function setSafeProperty(object, prop, value) {
|
45
43
|
// only allow setting safe properties of a plain object
|
46
|
-
if (
|
44
|
+
if (isSafeProperty(object, prop)) {
|
47
45
|
object[prop] = value;
|
48
46
|
return value;
|
49
47
|
}
|
50
48
|
throw new Error('No access to property "' + prop + '"');
|
51
49
|
}
|
52
|
-
function getSafeProperties(object) {
|
53
|
-
return Object.keys(object).filter(prop => (0, _object.hasOwnProperty)(object, prop));
|
54
|
-
}
|
55
|
-
function hasSafeProperty(object, prop) {
|
56
|
-
return prop in object;
|
57
|
-
}
|
58
50
|
|
59
51
|
/**
|
60
|
-
* Test whether a property is safe to use
|
52
|
+
* Test whether a property is safe to use on an object or Array.
|
61
53
|
* For example .toString and .constructor are not safe
|
54
|
+
* @param {Object | Array} object
|
62
55
|
* @param {string} prop
|
63
56
|
* @return {boolean} Returns true when safe
|
64
57
|
*/
|
65
58
|
function isSafeProperty(object, prop) {
|
66
|
-
if (!object
|
59
|
+
if (!isPlainObject(object) && !Array.isArray(object)) {
|
67
60
|
return false;
|
68
61
|
}
|
69
62
|
// SAFE: whitelisted
|
package/lib/cjs/utils/map.js
CHANGED
@@ -24,7 +24,7 @@ class ObjectWrappingMap {
|
|
24
24
|
this[Symbol.iterator] = this.entries;
|
25
25
|
}
|
26
26
|
keys() {
|
27
|
-
return Object.keys(this.wrappedObject).values();
|
27
|
+
return Object.keys(this.wrappedObject).filter(key => this.has(key)).values();
|
28
28
|
}
|
29
29
|
get(key) {
|
30
30
|
return (0, _customs.getSafeProperty)(this.wrappedObject, key);
|
@@ -34,7 +34,7 @@ class ObjectWrappingMap {
|
|
34
34
|
return this;
|
35
35
|
}
|
36
36
|
has(key) {
|
37
|
-
return (0, _customs.
|
37
|
+
return (0, _customs.isSafeProperty)(this.wrappedObject, key) && key in this.wrappedObject;
|
38
38
|
}
|
39
39
|
entries() {
|
40
40
|
return mapIterator(this.keys(), key => [key, this.get(key)]);
|
@@ -45,7 +45,9 @@ class ObjectWrappingMap {
|
|
45
45
|
}
|
46
46
|
}
|
47
47
|
delete(key) {
|
48
|
-
|
48
|
+
if ((0, _customs.isSafeProperty)(this.wrappedObject, key)) {
|
49
|
+
delete this.wrappedObject[key];
|
50
|
+
}
|
49
51
|
}
|
50
52
|
clear() {
|
51
53
|
for (const key of this.keys()) {
|
@@ -0,0 +1,94 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports.optimizeCallback = optimizeCallback;
|
8
|
+
var _typedFunction = _interopRequireDefault(require("typed-function"));
|
9
|
+
var _array = require("./array.js");
|
10
|
+
var _is = require("./is.js");
|
11
|
+
/**
|
12
|
+
* Simplifies a callback function by reducing its complexity and potentially improving its performance.
|
13
|
+
*
|
14
|
+
* @param {Function} callback The original callback function to simplify.
|
15
|
+
* @param {Array|Matrix} array The array that will be used with the callback function.
|
16
|
+
* @param {string} name The name of the function that is using the callback.
|
17
|
+
* @returns {Function} Returns a simplified version of the callback function.
|
18
|
+
*/
|
19
|
+
function optimizeCallback(callback, array, name) {
|
20
|
+
if (_typedFunction.default.isTypedFunction(callback)) {
|
21
|
+
const firstIndex = (array.isMatrix ? array.size() : (0, _array.arraySize)(array)).map(() => 0);
|
22
|
+
const firstValue = array.isMatrix ? array.get(firstIndex) : (0, _array.get)(array, firstIndex);
|
23
|
+
const hasSingleSignature = Object.keys(callback.signatures).length === 1;
|
24
|
+
const numberOfArguments = _findNumberOfArguments(callback, firstValue, firstIndex, array);
|
25
|
+
const fastCallback = hasSingleSignature ? Object.values(callback.signatures)[0] : callback;
|
26
|
+
if (numberOfArguments >= 1 && numberOfArguments <= 3) {
|
27
|
+
return function () {
|
28
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
29
|
+
args[_key] = arguments[_key];
|
30
|
+
}
|
31
|
+
return _tryFunctionWithArgs(fastCallback, args.slice(0, numberOfArguments), name, callback.name);
|
32
|
+
};
|
33
|
+
}
|
34
|
+
return function () {
|
35
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
36
|
+
args[_key2] = arguments[_key2];
|
37
|
+
}
|
38
|
+
return _tryFunctionWithArgs(fastCallback, args, name, callback.name);
|
39
|
+
};
|
40
|
+
}
|
41
|
+
return callback;
|
42
|
+
}
|
43
|
+
function _findNumberOfArguments(callback, value, index, array) {
|
44
|
+
const testArgs = [value, index, array];
|
45
|
+
for (let i = 3; i > 0; i--) {
|
46
|
+
const args = testArgs.slice(0, i);
|
47
|
+
if (_typedFunction.default.resolve(callback, args) !== null) {
|
48
|
+
return i;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
/**
|
54
|
+
* @param {function} func The selected function taken from one of the signatures of the callback function
|
55
|
+
* @param {Array} args List with arguments to apply to the selected signature
|
56
|
+
* @param {string} mappingFnName the name of the function that is using the callback
|
57
|
+
* @param {string} callbackName the name of the callback function
|
58
|
+
* @returns {*} Returns the return value of the invoked signature
|
59
|
+
* @throws {TypeError} Throws an error when no matching signature was found
|
60
|
+
*/
|
61
|
+
function _tryFunctionWithArgs(func, args, mappingFnName, callbackName) {
|
62
|
+
try {
|
63
|
+
return func(...args);
|
64
|
+
} catch (err) {
|
65
|
+
_createCallbackError(err, args, mappingFnName, callbackName);
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
/**
|
70
|
+
* Creates and throws a detailed TypeError when a callback function fails.
|
71
|
+
*
|
72
|
+
* @param {Error} err The original error thrown by the callback function.
|
73
|
+
* @param {Array} args The arguments that were passed to the callback function.
|
74
|
+
* @param {string} mappingFnName The name of the function that is using the callback.
|
75
|
+
* @param {string} callbackName The name of the callback function.
|
76
|
+
* @throws {TypeError} Throws a detailed TypeError with enriched error message.
|
77
|
+
*/
|
78
|
+
function _createCallbackError(err, args, mappingFnName, callbackName) {
|
79
|
+
var _err$data;
|
80
|
+
// Enrich the error message so the user understands that it took place inside the callback function
|
81
|
+
if (err instanceof TypeError && ((_err$data = err.data) === null || _err$data === void 0 ? void 0 : _err$data.category) === 'wrongType') {
|
82
|
+
const argsDesc = [];
|
83
|
+
argsDesc.push(`value: ${(0, _is.typeOf)(args[0])}`);
|
84
|
+
if (args.length >= 2) {
|
85
|
+
argsDesc.push(`index: ${(0, _is.typeOf)(args[1])}`);
|
86
|
+
}
|
87
|
+
if (args.length >= 3) {
|
88
|
+
argsDesc.push(`array: ${(0, _is.typeOf)(args[2])}`);
|
89
|
+
}
|
90
|
+
throw new TypeError(`Function ${mappingFnName} cannot apply callback arguments ` + `${callbackName}(${argsDesc.join(', ')}) at index ${JSON.stringify(args[1])}`);
|
91
|
+
} else {
|
92
|
+
throw new TypeError(`Function ${mappingFnName} cannot apply callback arguments ` + `to function ${callbackName}: ${err.message}`);
|
93
|
+
}
|
94
|
+
}
|
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 = '13.
|
7
|
+
const version = exports.version = '13.2.0';
|
8
8
|
// Note: This file is automatically generated when building math.js.
|
9
9
|
// Changes made in this file will be overwritten.
|
@@ -94,6 +94,7 @@ export var createTyped = /* #__PURE__ */factory('typed', dependencies, function
|
|
94
94
|
// string starting with an alphabetic character. It is used (at least)
|
95
95
|
// in the definition of the derivative() function, as the argument telling
|
96
96
|
// what to differentiate over must (currently) be a variable.
|
97
|
+
// TODO: deprecate the identifier type (it's not used anymore, see https://github.com/josdejong/mathjs/issues/3253)
|
97
98
|
{
|
98
99
|
name: 'identifier',
|
99
100
|
test: s => isString && /^(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])*$/.test(s)
|
@@ -169,7 +169,15 @@ export var createFunctionNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
169
169
|
var rawArgs = this.args;
|
170
170
|
return function evalFunctionNode(scope, args, context) {
|
171
171
|
var fn = resolveFn(scope);
|
172
|
-
|
172
|
+
|
173
|
+
// the original function can be overwritten in the scope with a non-rawArgs function
|
174
|
+
if (fn.rawArgs === true) {
|
175
|
+
return fn(rawArgs, math, createSubScope(scope, args));
|
176
|
+
} else {
|
177
|
+
// "regular" evaluation
|
178
|
+
var values = evalArgs.map(evalArg => evalArg(scope, args, context));
|
179
|
+
return fn(...values);
|
180
|
+
}
|
173
181
|
};
|
174
182
|
} else {
|
175
183
|
// "regular" evaluation
|
@@ -992,7 +992,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
992
992
|
node = parseRule2(state);
|
993
993
|
last = node;
|
994
994
|
while (true) {
|
995
|
-
if (state.tokenType === TOKENTYPE.SYMBOL || state.token === 'in' && isConstantNode(node) || state.tokenType === TOKENTYPE.NUMBER && !isConstantNode(last) && (!isOperatorNode(last) || last.op === '!') || state.token === '(') {
|
995
|
+
if (state.tokenType === TOKENTYPE.SYMBOL || state.token === 'in' && isConstantNode(node) || state.token === 'in' && isOperatorNode(node) && node.fn === 'unaryMinus' && isConstantNode(node.args[0]) || state.tokenType === TOKENTYPE.NUMBER && !isConstantNode(last) && (!isOperatorNode(last) || last.op === '!') || state.token === '(') {
|
996
996
|
// parse implicit multiplication
|
997
997
|
//
|
998
998
|
// symbol: implicit multiplication like '2a', '(2+3)a', 'a b'
|
@@ -1,8 +1,8 @@
|
|
1
|
-
import {
|
2
|
-
import { filter, filterRegExp } from '../../utils/array.js';
|
1
|
+
import { createFilter } from '../../function/matrix/filter.js';
|
3
2
|
import { factory } from '../../utils/factory.js';
|
4
3
|
import { isFunctionAssignmentNode, isSymbolNode } from '../../utils/is.js';
|
5
4
|
import { compileInlineExpression } from './utils/compileInlineExpression.js';
|
5
|
+
import { createTransformCallback } from './utils/transformCallback.js';
|
6
6
|
var name = 'filter';
|
7
7
|
var dependencies = ['typed'];
|
8
8
|
export var createFilterTransform = /* #__PURE__ */factory(name, dependencies, _ref => {
|
@@ -17,52 +17,40 @@ export var createFilterTransform = /* #__PURE__ */factory(name, dependencies, _r
|
|
17
17
|
* so you can do something like 'filter([3, -2, 5], x > 0)'.
|
18
18
|
*/
|
19
19
|
function filterTransform(args, math, scope) {
|
20
|
-
var
|
21
|
-
|
22
|
-
|
20
|
+
var filter = createFilter({
|
21
|
+
typed
|
22
|
+
});
|
23
|
+
var transformCallback = createTransformCallback({
|
24
|
+
typed
|
25
|
+
});
|
26
|
+
if (args.length === 0) {
|
27
|
+
return filter();
|
23
28
|
}
|
24
|
-
|
25
|
-
|
29
|
+
var x = args[0];
|
30
|
+
if (args.length === 1) {
|
31
|
+
return filter(x);
|
32
|
+
}
|
33
|
+
var N = args.length - 1;
|
34
|
+
var callback = args[N];
|
35
|
+
if (x) {
|
36
|
+
x = _compileAndEvaluate(x, scope);
|
37
|
+
}
|
38
|
+
if (callback) {
|
39
|
+
if (isSymbolNode(callback) || isFunctionAssignmentNode(callback)) {
|
26
40
|
// a function pointer, like filter([3, -2, 5], myTestFunction)
|
27
|
-
callback =
|
41
|
+
callback = _compileAndEvaluate(callback, scope);
|
28
42
|
} else {
|
29
43
|
// an expression like filter([3, -2, 5], x > 0)
|
30
|
-
callback = compileInlineExpression(
|
44
|
+
callback = compileInlineExpression(callback, math, scope);
|
31
45
|
}
|
32
46
|
}
|
33
|
-
return filter(x, callback);
|
47
|
+
return filter(x, transformCallback(callback, N));
|
34
48
|
}
|
35
49
|
filterTransform.rawArgs = true;
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
'Array, function': _filter,
|
40
|
-
'Matrix, function': function Matrix_function(x, test) {
|
41
|
-
return x.create(_filter(x.toArray(), test), x.datatype());
|
42
|
-
},
|
43
|
-
'Array, RegExp': filterRegExp,
|
44
|
-
'Matrix, RegExp': function Matrix_RegExp(x, test) {
|
45
|
-
return x.create(filterRegExp(x.toArray(), test), x.datatype());
|
46
|
-
}
|
47
|
-
});
|
50
|
+
function _compileAndEvaluate(arg, scope) {
|
51
|
+
return arg.compile().evaluate(scope);
|
52
|
+
}
|
48
53
|
return filterTransform;
|
49
54
|
}, {
|
50
55
|
isTransformFunction: true
|
51
|
-
});
|
52
|
-
|
53
|
-
/**
|
54
|
-
* Filter values in a callback given a callback function
|
55
|
-
*
|
56
|
-
* !!! Passes a one-based index !!!
|
57
|
-
*
|
58
|
-
* @param {Array} x
|
59
|
-
* @param {Function} callback
|
60
|
-
* @return {Array} Returns the filtered array
|
61
|
-
* @private
|
62
|
-
*/
|
63
|
-
function _filter(x, callback) {
|
64
|
-
return filter(x, function (value, index, array) {
|
65
|
-
// invoke the callback function with the right number of arguments
|
66
|
-
return applyCallback(callback, value, [index + 1], array, 'filter');
|
67
|
-
});
|
68
|
-
}
|
56
|
+
});
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
1
|
+
import { createForEach } from '../../function/matrix/forEach.js';
|
2
|
+
import { createTransformCallback } from './utils/transformCallback.js';
|
3
3
|
import { factory } from '../../utils/factory.js';
|
4
4
|
import { isFunctionAssignmentNode, isSymbolNode } from '../../utils/is.js';
|
5
5
|
import { compileInlineExpression } from './utils/compileInlineExpression.js';
|
@@ -15,41 +15,40 @@ export var createForEachTransform = /* #__PURE__ */factory(name, dependencies, _
|
|
15
15
|
*
|
16
16
|
* This transform creates a one-based index instead of a zero-based index
|
17
17
|
*/
|
18
|
+
var forEach = createForEach({
|
19
|
+
typed
|
20
|
+
});
|
21
|
+
var transformCallback = createTransformCallback({
|
22
|
+
typed
|
23
|
+
});
|
18
24
|
function forEachTransform(args, math, scope) {
|
19
|
-
|
20
|
-
|
21
|
-
|
25
|
+
if (args.length === 0) {
|
26
|
+
return forEach();
|
27
|
+
}
|
28
|
+
var x = args[0];
|
29
|
+
if (args.length === 1) {
|
30
|
+
return forEach(x);
|
22
31
|
}
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
32
|
+
var N = args.length - 1;
|
33
|
+
var callback = args[N];
|
34
|
+
if (x) {
|
35
|
+
x = _compileAndEvaluate(x, scope);
|
36
|
+
}
|
37
|
+
if (callback) {
|
38
|
+
if (isSymbolNode(callback) || isFunctionAssignmentNode(callback)) {
|
39
|
+
// a function pointer, like filter([3, -2, 5], myTestFunction)
|
40
|
+
callback = _compileAndEvaluate(callback, scope);
|
27
41
|
} else {
|
28
|
-
// an expression like
|
29
|
-
callback = compileInlineExpression(
|
42
|
+
// an expression like filter([3, -2, 5], x > 0)
|
43
|
+
callback = compileInlineExpression(callback, math, scope);
|
30
44
|
}
|
31
45
|
}
|
32
|
-
return
|
46
|
+
return forEach(x, transformCallback(callback, N));
|
33
47
|
}
|
34
48
|
forEachTransform.rawArgs = true;
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
'Array | Matrix, function': function Array__Matrix_function(array, callback) {
|
39
|
-
var _recurse = function recurse(value, index) {
|
40
|
-
if (Array.isArray(value)) {
|
41
|
-
forEach(value, function (child, i) {
|
42
|
-
// we create a copy of the index array and append the new index value
|
43
|
-
_recurse(child, index.concat(i + 1)); // one based index, hence i+1
|
44
|
-
});
|
45
|
-
} else {
|
46
|
-
// invoke the callback function with the right number of arguments
|
47
|
-
return applyCallback(callback, value, index, array, 'forEach');
|
48
|
-
}
|
49
|
-
};
|
50
|
-
_recurse(array.valueOf(), []); // pass Array
|
51
|
-
}
|
52
|
-
});
|
49
|
+
function _compileAndEvaluate(arg, scope) {
|
50
|
+
return arg.compile().evaluate(scope);
|
51
|
+
}
|
53
52
|
return forEachTransform;
|
54
53
|
}, {
|
55
54
|
isTransformFunction: true
|