mathjs 9.4.5 → 10.0.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 +35 -0
- package/bin/cli.js +0 -0
- package/docs/expressions/syntax.md +46 -43
- package/docs/reference/functions/format.md +5 -2
- package/docs/reference/functions/parser.md +4 -4
- package/docs/reference/functions/setCartesian.md +3 -1
- package/lib/browser/math.js +5 -5
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/constants.js +1 -1
- package/lib/cjs/core/function/config.js +1 -1
- package/lib/cjs/core/function/import.js +2 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesParserClass.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny.generated.js +999 -999
- package/lib/cjs/entry/dependenciesNumber/dependenciesParserClass.generated.js +2 -2
- package/lib/cjs/entry/dependenciesNumber.generated.js +581 -581
- package/lib/cjs/entry/impureFunctionsAny.generated.js +314 -313
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +223 -222
- package/lib/cjs/entry/mainAny.js +8 -8
- package/lib/cjs/entry/mainNumber.js +8 -8
- package/lib/cjs/entry/pureFunctionsAny.generated.js +1100 -1100
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +375 -375
- package/lib/cjs/entry/typeChecks.js +12 -12
- package/lib/cjs/expression/Parser.js +6 -5
- package/lib/cjs/expression/embeddedDocs/function/set/setCartesian.js +1 -1
- package/lib/cjs/expression/function/parser.js +4 -4
- package/lib/cjs/expression/node/OperatorNode.js +9 -6
- package/lib/cjs/expression/operators.js +1 -1
- package/lib/cjs/expression/parse.js +42 -6
- package/lib/cjs/factoriesAny.js +660 -660
- package/lib/cjs/factoriesNumber.js +268 -237
- package/lib/cjs/function/set/setCartesian.js +3 -1
- package/lib/cjs/function/string/format.js +5 -2
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/plain/bignumber/arithmetic.js +2 -2
- package/lib/cjs/plain/number/arithmetic.js +10 -10
- package/lib/cjs/plain/number/constants.js +1 -1
- package/lib/cjs/plain/number/logical.js +1 -1
- package/lib/cjs/plain/number/probability.js +2 -1
- package/lib/cjs/plain/number/trigonometry.js +1 -1
- package/lib/cjs/plain/number/utils.js +1 -1
- package/lib/cjs/type/unit/physicalConstants.js +1 -1
- package/lib/cjs/utils/array.js +14 -14
- package/lib/cjs/utils/bignumber/bitwise.js +1 -1
- package/lib/cjs/utils/customs.js +5 -5
- package/lib/cjs/utils/factory.js +3 -3
- package/lib/cjs/utils/function.js +1 -1
- package/lib/cjs/utils/is.js +23 -23
- package/lib/cjs/utils/latex.js +2 -1
- package/lib/cjs/utils/map.js +3 -3
- package/lib/cjs/utils/noop.js +1 -1
- package/lib/cjs/utils/number.js +10 -6
- package/lib/cjs/utils/object.js +8 -8
- package/lib/cjs/utils/snapshot.js +1 -1
- package/lib/cjs/utils/string.js +2 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/core/function/import.js +2 -1
- package/lib/esm/entry/dependenciesAny/dependenciesParserClass.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny.generated.js +270 -270
- package/lib/esm/entry/dependenciesNumber/dependenciesParserClass.generated.js +2 -2
- package/lib/esm/entry/dependenciesNumber.generated.js +163 -163
- package/lib/esm/entry/impureFunctionsAny.generated.js +301 -301
- package/lib/esm/entry/impureFunctionsNumber.generated.js +211 -211
- package/lib/esm/entry/pureFunctionsAny.generated.js +816 -816
- package/lib/esm/entry/pureFunctionsNumber.generated.js +234 -234
- package/lib/esm/expression/Parser.js +6 -5
- package/lib/esm/expression/embeddedDocs/function/set/setCartesian.js +1 -1
- package/lib/esm/expression/function/parser.js +4 -4
- package/lib/esm/expression/node/OperatorNode.js +9 -6
- package/lib/esm/expression/parse.js +42 -6
- package/lib/esm/function/set/setCartesian.js +3 -1
- package/lib/esm/function/string/format.js +5 -2
- package/lib/esm/version.js +1 -1
- package/package.json +16 -16
- package/types/index.d.ts +281 -77
| @@ -153,18 +153,6 @@ Object.defineProperty(exports, "isNumber", { | |
| 153 153 | 
             
                return _is.isNumber;
         | 
| 154 154 | 
             
              }
         | 
| 155 155 | 
             
            });
         | 
| 156 | 
            -
            Object.defineProperty(exports, "isString", {
         | 
| 157 | 
            -
              enumerable: true,
         | 
| 158 | 
            -
              get: function get() {
         | 
| 159 | 
            -
                return _is.isString;
         | 
| 160 | 
            -
              }
         | 
| 161 | 
            -
            });
         | 
| 162 | 
            -
            Object.defineProperty(exports, "isUndefined", {
         | 
| 163 | 
            -
              enumerable: true,
         | 
| 164 | 
            -
              get: function get() {
         | 
| 165 | 
            -
                return _is.isUndefined;
         | 
| 166 | 
            -
              }
         | 
| 167 | 
            -
            });
         | 
| 168 156 | 
             
            Object.defineProperty(exports, "isObject", {
         | 
| 169 157 | 
             
              enumerable: true,
         | 
| 170 158 | 
             
              get: function get() {
         | 
| @@ -219,12 +207,24 @@ Object.defineProperty(exports, "isSparseMatrix", { | |
| 219 207 | 
             
                return _is.isSparseMatrix;
         | 
| 220 208 | 
             
              }
         | 
| 221 209 | 
             
            });
         | 
| 210 | 
            +
            Object.defineProperty(exports, "isString", {
         | 
| 211 | 
            +
              enumerable: true,
         | 
| 212 | 
            +
              get: function get() {
         | 
| 213 | 
            +
                return _is.isString;
         | 
| 214 | 
            +
              }
         | 
| 215 | 
            +
            });
         | 
| 222 216 | 
             
            Object.defineProperty(exports, "isSymbolNode", {
         | 
| 223 217 | 
             
              enumerable: true,
         | 
| 224 218 | 
             
              get: function get() {
         | 
| 225 219 | 
             
                return _is.isSymbolNode;
         | 
| 226 220 | 
             
              }
         | 
| 227 221 | 
             
            });
         | 
| 222 | 
            +
            Object.defineProperty(exports, "isUndefined", {
         | 
| 223 | 
            +
              enumerable: true,
         | 
| 224 | 
            +
              get: function get() {
         | 
| 225 | 
            +
                return _is.isUndefined;
         | 
| 226 | 
            +
              }
         | 
| 227 | 
            +
            });
         | 
| 228 228 | 
             
            Object.defineProperty(exports, "isUnit", {
         | 
| 229 229 | 
             
              enumerable: true,
         | 
| 230 230 | 
             
              get: function get() {
         | 
| @@ -10,9 +10,9 @@ var _factory = require("../utils/factory.js"); | |
| 10 10 | 
             
            var _map = require("../utils/map.js");
         | 
| 11 11 |  | 
| 12 12 | 
             
            var name = 'Parser';
         | 
| 13 | 
            -
            var dependencies = [' | 
| 13 | 
            +
            var dependencies = ['evaluate'];
         | 
| 14 14 | 
             
            var createParserClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
         | 
| 15 | 
            -
              var  | 
| 15 | 
            +
              var evaluate = _ref.evaluate;
         | 
| 16 16 |  | 
| 17 17 | 
             
              /**
         | 
| 18 18 | 
             
               * @constructor Parser
         | 
| @@ -44,7 +44,7 @@ var createParserClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, | |
| 44 44 | 
             
               *    // define variables and functions
         | 
| 45 45 | 
             
               *    parser.evaluate('x = 7 / 2')              // 3.5
         | 
| 46 46 | 
             
               *    parser.evaluate('x + 3')                  // 6.5
         | 
| 47 | 
            -
               *    parser.evaluate(' | 
| 47 | 
            +
               *    parser.evaluate('f(x, y) = x^y')          // f(x, y)
         | 
| 48 48 | 
             
               *    parser.evaluate('f(2, 3)')                // 8
         | 
| 49 49 | 
             
               *
         | 
| 50 50 | 
             
               *    // get and set variables and functions
         | 
| @@ -81,14 +81,15 @@ var createParserClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, | |
| 81 81 | 
             
              Parser.prototype.isParser = true;
         | 
| 82 82 | 
             
              /**
         | 
| 83 83 | 
             
               * Parse and evaluate the given expression
         | 
| 84 | 
            -
               * @param {string} expr   A string containing an expression, | 
| 84 | 
            +
               * @param {string | string[]} expr   A string containing an expression,
         | 
| 85 | 
            +
               *                                   for example "2+3", or a list with expressions
         | 
| 85 86 | 
             
               * @return {*} result     The result, or undefined when the expression was empty
         | 
| 86 87 | 
             
               * @throws {Error}
         | 
| 87 88 | 
             
               */
         | 
| 88 89 |  | 
| 89 90 | 
             
              Parser.prototype.evaluate = function (expr) {
         | 
| 90 91 | 
             
                // TODO: validate arguments
         | 
| 91 | 
            -
                return  | 
| 92 | 
            +
                return evaluate(expr, this.scope);
         | 
| 92 93 | 
             
              };
         | 
| 93 94 | 
             
              /**
         | 
| 94 95 | 
             
               * Get a variable (a function or variable) by name from the parsers scope.
         | 
| @@ -8,7 +8,7 @@ var setCartesianDocs = { | |
| 8 8 | 
             
              name: 'setCartesian',
         | 
| 9 9 | 
             
              category: 'Set',
         | 
| 10 10 | 
             
              syntax: ['setCartesian(set1, set2)'],
         | 
| 11 | 
            -
              description: 'Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.',
         | 
| 11 | 
            +
              description: 'Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays and the values will be sorted in ascending order before the operation.',
         | 
| 12 12 | 
             
              examples: ['setCartesian([1, 2], [3, 4])'],
         | 
| 13 13 | 
             
              seealso: ['setUnion', 'setIntersect', 'setDifference', 'setPowerset']
         | 
| 14 14 | 
             
            };
         | 
| @@ -31,10 +31,10 @@ var createParser = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func | |
| 31 31 | 
             
               *     const d = parser.evaluate('cos(45 deg)')     // 0.7071067811865476
         | 
| 32 32 | 
             
               *
         | 
| 33 33 | 
             
               *     // define variables and functions
         | 
| 34 | 
            -
               *     parser.evaluate('x = 7 / 2') | 
| 35 | 
            -
               *     parser.evaluate('x + 3') | 
| 36 | 
            -
               *     parser.evaluate(' | 
| 37 | 
            -
               *     parser.evaluate('f(2, 3)') | 
| 34 | 
            +
               *     parser.evaluate('x = 7 / 2')             // 3.5
         | 
| 35 | 
            +
               *     parser.evaluate('x + 3')                 // 6.5
         | 
| 36 | 
            +
               *     parser.evaluate('f(x, y) = x^y')         // f(x, y)
         | 
| 37 | 
            +
               *     parser.evaluate('f(2, 3)')               // 8
         | 
| 38 38 | 
             
               *
         | 
| 39 39 | 
             
               *     // get and set variables and functions
         | 
| 40 40 | 
             
               *     const x = parser.get('x')                // 7
         | 
| @@ -33,8 +33,9 @@ var createOperatorNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies | |
| 33 33 | 
             
               * @param {string} fn           Function name, for example 'add'
         | 
| 34 34 | 
             
               * @param {Node[]} args         Operator arguments
         | 
| 35 35 | 
             
               * @param {boolean} [implicit]  Is this an implicit multiplication?
         | 
| 36 | 
            +
               * @param {boolean} [isPercentage] Is this an percentage Operation?
         | 
| 36 37 | 
             
               */
         | 
| 37 | 
            -
              function OperatorNode(op, fn, args, implicit) {
         | 
| 38 | 
            +
              function OperatorNode(op, fn, args, implicit, isPercentage) {
         | 
| 38 39 | 
             
                if (!(this instanceof OperatorNode)) {
         | 
| 39 40 | 
             
                  throw new SyntaxError('Constructor must be called with the new operator');
         | 
| 40 41 | 
             
                } // validate input
         | 
| @@ -53,6 +54,7 @@ var createOperatorNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies | |
| 53 54 | 
             
                }
         | 
| 54 55 |  | 
| 55 56 | 
             
                this.implicit = implicit === true;
         | 
| 57 | 
            +
                this.isPercentage = isPercentage === true;
         | 
| 56 58 | 
             
                this.op = op;
         | 
| 57 59 | 
             
                this.fn = fn;
         | 
| 58 60 | 
             
                this.args = args || [];
         | 
| @@ -135,7 +137,7 @@ var createOperatorNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies | |
| 135 137 | 
             
                  args[i] = this._ifNode(callback(this.args[i], 'args[' + i + ']', this));
         | 
| 136 138 | 
             
                }
         | 
| 137 139 |  | 
| 138 | 
            -
                return new OperatorNode(this.op, this.fn, args, this.implicit);
         | 
| 140 | 
            +
                return new OperatorNode(this.op, this.fn, args, this.implicit, this.isPercentage);
         | 
| 139 141 | 
             
              };
         | 
| 140 142 | 
             
              /**
         | 
| 141 143 | 
             
               * Create a clone of this node, a shallow copy
         | 
| @@ -144,7 +146,7 @@ var createOperatorNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies | |
| 144 146 |  | 
| 145 147 |  | 
| 146 148 | 
             
              OperatorNode.prototype.clone = function () {
         | 
| 147 | 
            -
                return new OperatorNode(this.op, this.fn, this.args.slice(0), this.implicit);
         | 
| 149 | 
            +
                return new OperatorNode(this.op, this.fn, this.args.slice(0), this.implicit, this.isPercentage);
         | 
| 148 150 | 
             
              };
         | 
| 149 151 | 
             
              /**
         | 
| 150 152 | 
             
               * Check whether this is an unary OperatorNode:
         | 
| @@ -478,20 +480,21 @@ var createOperatorNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies | |
| 478 480 | 
             
                  op: this.op,
         | 
| 479 481 | 
             
                  fn: this.fn,
         | 
| 480 482 | 
             
                  args: this.args,
         | 
| 481 | 
            -
                  implicit: this.implicit
         | 
| 483 | 
            +
                  implicit: this.implicit,
         | 
| 484 | 
            +
                  isPercentage: this.isPercentage
         | 
| 482 485 | 
             
                };
         | 
| 483 486 | 
             
              };
         | 
| 484 487 | 
             
              /**
         | 
| 485 488 | 
             
               * Instantiate an OperatorNode from its JSON representation
         | 
| 486 489 | 
             
               * @param {Object} json  An object structured like
         | 
| 487 | 
            -
               *                       `{"mathjs": "OperatorNode", "op": "+", "fn": "add", "args": [...], "implicit": false}`,
         | 
| 490 | 
            +
               *                       `{"mathjs": "OperatorNode", "op": "+", "fn": "add", "args": [...], "implicit": false, "isPercentage":false}`,
         | 
| 488 491 | 
             
               *                       where mathjs is optional
         | 
| 489 492 | 
             
               * @returns {OperatorNode}
         | 
| 490 493 | 
             
               */
         | 
| 491 494 |  | 
| 492 495 |  | 
| 493 496 | 
             
              OperatorNode.fromJSON = function (json) {
         | 
| 494 | 
            -
                return new OperatorNode(json.op, json.fn, json.args, json.implicit);
         | 
| 497 | 
            +
                return new OperatorNode(json.op, json.fn, json.args, json.implicit, json.isPercentage);
         | 
| 495 498 | 
             
              };
         | 
| 496 499 | 
             
              /**
         | 
| 497 500 | 
             
               * Get HTML representation.
         | 
| @@ -3,8 +3,8 @@ | |
| 3 3 | 
             
            Object.defineProperty(exports, "__esModule", {
         | 
| 4 4 | 
             
              value: true
         | 
| 5 5 | 
             
            });
         | 
| 6 | 
            -
            exports.getPrecedence = getPrecedence;
         | 
| 7 6 | 
             
            exports.getAssociativity = getAssociativity;
         | 
| 7 | 
            +
            exports.getPrecedence = getPrecedence;
         | 
| 8 8 | 
             
            exports.isAssociativeWith = isAssociativeWith;
         | 
| 9 9 | 
             
            exports.properties = void 0;
         | 
| 10 10 |  | 
| @@ -1018,7 +1018,14 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct | |
| 1018 1018 | 
             
                  name = state.token;
         | 
| 1019 1019 | 
             
                  fn = operators[name];
         | 
| 1020 1020 | 
             
                  getTokenSkipNewline(state);
         | 
| 1021 | 
            -
                   | 
| 1021 | 
            +
                  var rightNode = parseMultiplyDivide(state);
         | 
| 1022 | 
            +
             | 
| 1023 | 
            +
                  if (rightNode.isPercentage) {
         | 
| 1024 | 
            +
                    params = [node, new OperatorNode('*', 'multiply', [node, rightNode])];
         | 
| 1025 | 
            +
                  } else {
         | 
| 1026 | 
            +
                    params = [node, rightNode];
         | 
| 1027 | 
            +
                  }
         | 
| 1028 | 
            +
             | 
| 1022 1029 | 
             
                  node = new OperatorNode(name, fn, params);
         | 
| 1023 1030 | 
             
                }
         | 
| 1024 1031 |  | 
| @@ -1039,9 +1046,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct | |
| 1039 1046 | 
             
                  '*': 'multiply',
         | 
| 1040 1047 | 
             
                  '.*': 'dotMultiply',
         | 
| 1041 1048 | 
             
                  '/': 'divide',
         | 
| 1042 | 
            -
                  './': 'dotDivide' | 
| 1043 | 
            -
                  '%': 'mod',
         | 
| 1044 | 
            -
                  mod: 'mod'
         | 
| 1049 | 
            +
                  './': 'dotDivide'
         | 
| 1045 1050 | 
             
                };
         | 
| 1046 1051 |  | 
| 1047 1052 | 
             
                while (true) {
         | 
| @@ -1099,7 +1104,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct | |
| 1099 1104 |  | 
| 1100 1105 |  | 
| 1101 1106 | 
             
              function parseRule2(state) {
         | 
| 1102 | 
            -
                var node =  | 
| 1107 | 
            +
                var node = parsePercentage(state);
         | 
| 1103 1108 | 
             
                var last = node;
         | 
| 1104 1109 | 
             
                var tokenStates = [];
         | 
| 1105 1110 |  | 
| @@ -1120,7 +1125,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct | |
| 1120 1125 | 
             
                        // Rewind once and build the "number / number" node; the symbol will be consumed later
         | 
| 1121 1126 | 
             
                        (0, _extends2["default"])(state, tokenStates.pop());
         | 
| 1122 1127 | 
             
                        tokenStates.pop();
         | 
| 1123 | 
            -
                        last =  | 
| 1128 | 
            +
                        last = parsePercentage(state);
         | 
| 1124 1129 | 
             
                        node = new OperatorNode('/', 'divide', [node, last]);
         | 
| 1125 1130 | 
             
                      } else {
         | 
| 1126 1131 | 
             
                        // Not a match, so rewind
         | 
| @@ -1140,6 +1145,37 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct | |
| 1140 1145 |  | 
| 1141 1146 | 
             
                return node;
         | 
| 1142 1147 | 
             
              }
         | 
| 1148 | 
            +
              /**
         | 
| 1149 | 
            +
               * percentage or mod
         | 
| 1150 | 
            +
               * @return {Node} node
         | 
| 1151 | 
            +
               * @private
         | 
| 1152 | 
            +
               */
         | 
| 1153 | 
            +
             | 
| 1154 | 
            +
             | 
| 1155 | 
            +
              function parsePercentage(state) {
         | 
| 1156 | 
            +
                var node, name, fn, params;
         | 
| 1157 | 
            +
                node = parseUnary(state);
         | 
| 1158 | 
            +
                var operators = {
         | 
| 1159 | 
            +
                  '%': 'mod',
         | 
| 1160 | 
            +
                  mod: 'mod'
         | 
| 1161 | 
            +
                };
         | 
| 1162 | 
            +
             | 
| 1163 | 
            +
                while ((0, _object.hasOwnProperty)(operators, state.token)) {
         | 
| 1164 | 
            +
                  name = state.token;
         | 
| 1165 | 
            +
                  fn = operators[name];
         | 
| 1166 | 
            +
                  getTokenSkipNewline(state);
         | 
| 1167 | 
            +
             | 
| 1168 | 
            +
                  if (name === '%' && state.tokenType === TOKENTYPE.DELIMITER && state.token !== '(') {
         | 
| 1169 | 
            +
                    // If the expression contains only %, then treat that as /100
         | 
| 1170 | 
            +
                    node = new OperatorNode('/', 'divide', [node, new ConstantNode(100)], false, true);
         | 
| 1171 | 
            +
                  } else {
         | 
| 1172 | 
            +
                    params = [node, parseUnary(state)];
         | 
| 1173 | 
            +
                    node = new OperatorNode(name, fn, params);
         | 
| 1174 | 
            +
                  }
         | 
| 1175 | 
            +
                }
         | 
| 1176 | 
            +
             | 
| 1177 | 
            +
                return node;
         | 
| 1178 | 
            +
              }
         | 
| 1143 1179 | 
             
              /**
         | 
| 1144 1180 | 
             
               * Unary plus and minus, and logical and bitwise not
         | 
| 1145 1181 | 
             
               * @return {Node} node
         |