mathjs 7.5.1 → 7.6.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.
Files changed (64) hide show
  1. package/HISTORY.md +7 -0
  2. package/dist/math.js +123 -29
  3. package/dist/math.min.js +3 -3
  4. package/dist/math.min.map +1 -1
  5. package/docs/datatypes/units.md +21 -0
  6. package/docs/reference/functions/rotate.md +47 -0
  7. package/docs/reference/functions/rotationMatrix.md +1 -1
  8. package/docs/reference/functions.md +1 -0
  9. package/es/entry/dependenciesAny/dependenciesRotate.generated.js +14 -0
  10. package/es/entry/dependenciesAny.generated.js +1 -0
  11. package/es/entry/impureFunctionsAny.generated.js +24 -23
  12. package/es/entry/pureFunctionsAny.generated.js +10 -5
  13. package/es/expression/embeddedDocs/embeddedDocs.js +2 -0
  14. package/es/expression/embeddedDocs/function/matrix/rotate.js +8 -0
  15. package/es/expression/node/FunctionNode.js +1 -1
  16. package/es/expression/node/Node.js +2 -2
  17. package/es/factoriesAny.js +1 -0
  18. package/es/function/matrix/rotate.js +78 -0
  19. package/es/function/matrix/rotationMatrix.js +5 -4
  20. package/es/function/special/erf.js +1 -0
  21. package/es/plain/number/constants.js +1 -1
  22. package/es/plain/number/probability.js +1 -0
  23. package/es/type/unit/Unit.js +17 -18
  24. package/es/version.js +1 -1
  25. package/examples/bignumbers.js +2 -0
  26. package/lib/entry/dependenciesAny/dependenciesRotate.generated.js +26 -0
  27. package/lib/entry/dependenciesAny.generated.js +8 -0
  28. package/lib/entry/impureFunctionsAny.generated.js +27 -26
  29. package/lib/entry/mainAny.js +5 -0
  30. package/lib/entry/mainNumber.js +5 -0
  31. package/lib/entry/pureFunctionsAny.generated.js +14 -8
  32. package/lib/expression/embeddedDocs/embeddedDocs.js +3 -0
  33. package/lib/expression/embeddedDocs/function/matrix/rotate.js +15 -0
  34. package/lib/expression/node/FunctionNode.js +1 -1
  35. package/lib/expression/node/Node.js +2 -2
  36. package/lib/factoriesAny.js +8 -0
  37. package/lib/function/matrix/rotate.js +88 -0
  38. package/lib/function/matrix/rotationMatrix.js +5 -4
  39. package/lib/function/special/erf.js +1 -0
  40. package/lib/header.js +2 -2
  41. package/lib/plain/bignumber/index.js +1 -0
  42. package/lib/plain/number/constants.js +2 -1
  43. package/lib/plain/number/index.js +9 -0
  44. package/lib/plain/number/probability.js +1 -0
  45. package/lib/type/unit/Unit.js +17 -18
  46. package/lib/version.js +1 -1
  47. package/package.json +9 -9
  48. package/src/core/function/import.js +2 -2
  49. package/src/entry/dependenciesAny/dependenciesRotate.generated.js +15 -0
  50. package/src/entry/dependenciesAny.generated.js +1 -0
  51. package/src/entry/impureFunctionsAny.generated.js +20 -18
  52. package/src/entry/pureFunctionsAny.generated.js +7 -5
  53. package/src/expression/embeddedDocs/embeddedDocs.js +2 -0
  54. package/src/expression/embeddedDocs/function/matrix/rotate.js +19 -0
  55. package/src/expression/node/FunctionNode.js +1 -1
  56. package/src/expression/node/Node.js +2 -1
  57. package/src/factoriesAny.js +1 -0
  58. package/src/function/matrix/rotate.js +79 -0
  59. package/src/function/matrix/rotationMatrix.js +5 -4
  60. package/src/function/special/erf.js +2 -0
  61. package/src/plain/number/constants.js +1 -1
  62. package/src/plain/number/probability.js +2 -0
  63. package/src/type/unit/Unit.js +18 -21
  64. package/src/version.js +1 -1
package/HISTORY.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # History
2
2
 
3
+ # 2020-11-02, version 7.6.0
4
+
5
+ - Implemented function `rotate(w, theta)`. See #1992, #1160. Thanks @rnd-debug.
6
+ - Implemented support for custom characters in Units via `Unit.isValidAlpha`.
7
+ See #1663, #2000. Thanks @rnd-debug.
8
+
9
+
3
10
  # 2020-10-10, version 7.5.1
4
11
 
5
12
  - Fix object pollution vulnerability in `math.config`. Thanks Snyk.
package/dist/math.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 7.5.1
10
- * @date 2020-10-10
9
+ * @version 7.6.0
10
+ * @date 2020-11-02
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2020 Jos de Jong <wjosdejong@gmail.com>
@@ -11733,6 +11733,7 @@ __webpack_require__.d(__webpack_exports__, "createOnes", function() { return /*
11733
11733
  __webpack_require__.d(__webpack_exports__, "createRange", function() { return /* reexport */ range_createRange; });
11734
11734
  __webpack_require__.d(__webpack_exports__, "createReshape", function() { return /* reexport */ createReshape; });
11735
11735
  __webpack_require__.d(__webpack_exports__, "createResize", function() { return /* reexport */ createResize; });
11736
+ __webpack_require__.d(__webpack_exports__, "createRotate", function() { return /* reexport */ createRotate; });
11736
11737
  __webpack_require__.d(__webpack_exports__, "createRotationMatrix", function() { return /* reexport */ createRotationMatrix; });
11737
11738
  __webpack_require__.d(__webpack_exports__, "createRow", function() { return /* reexport */ createRow; });
11738
11739
  __webpack_require__.d(__webpack_exports__, "createSize", function() { return /* reexport */ createSize; });
@@ -25694,6 +25695,85 @@ var createResize = /* #__PURE__ */Object(factory["a" /* factory */])(resize_name
25694
25695
  }
25695
25696
  }
25696
25697
  });
25698
+ // CONCATENATED MODULE: ./src/function/matrix/rotate.js
25699
+
25700
+
25701
+ var rotate_name = 'rotate';
25702
+ var rotate_dependencies = ['typed', 'multiply', 'rotationMatrix'];
25703
+ var createRotate = /* #__PURE__ */Object(factory["a" /* factory */])(rotate_name, rotate_dependencies, function (_ref) {
25704
+ var typed = _ref.typed,
25705
+ multiply = _ref.multiply,
25706
+ rotationMatrix = _ref.rotationMatrix;
25707
+
25708
+ /**
25709
+ * Rotate a vector of size 1x2 counter-clockwise by a given angle
25710
+ * Rotate a vector of size 1x3 counter-clockwise by a given angle around the given axis
25711
+ *
25712
+ * Syntax:
25713
+ *
25714
+ * math.rotate(w, theta)
25715
+ * math.rotate(w, theta, v)
25716
+ *
25717
+ * Examples:
25718
+ *
25719
+ * math.rotate([11, 12], math.pi / 2) // returns matrix([-12, 11])
25720
+ * math.rotate(matrix([11, 12]), math.pi / 2) // returns matrix([-12, 11])
25721
+ *
25722
+ * math.rotate([1, 0, 0], unit('90deg'), [0, 0, 1]) // returns matrix([0, 1, 0])
25723
+ * math.rotate(matrix([1, 0, 0]), unit('90deg'), [0, 0, 1]) // returns matrix([0, 1, 0])
25724
+ *
25725
+ * math.rotate([1, 0], math.complex(1 + i)) // returns matrix([cos(1 + i) - sin(1 + i), sin(1 + i) + cos(1 + i)])
25726
+ *
25727
+ * See also:
25728
+ *
25729
+ * matrix, rotationMatrix
25730
+ *
25731
+ * @param {Array | Matrix} w Vector to rotate
25732
+ * @param {number | BigNumber | Complex | Unit} theta Rotation angle
25733
+ * @param {Array | Matrix} [v] Rotation axis
25734
+ * @return {Array | Matrix} Multiplication of the rotation matrix and w
25735
+ */
25736
+ return typed(rotate_name, {
25737
+ 'Array , number | BigNumber | Complex | Unit': function ArrayNumberBigNumberComplexUnit(w, theta) {
25738
+ _validateSize(w, 2);
25739
+
25740
+ var matrixRes = multiply(rotationMatrix(theta), w);
25741
+ return matrixRes.toArray();
25742
+ },
25743
+ 'Matrix , number | BigNumber | Complex | Unit': function MatrixNumberBigNumberComplexUnit(w, theta) {
25744
+ _validateSize(w, 2);
25745
+
25746
+ return multiply(rotationMatrix(theta), w);
25747
+ },
25748
+ 'Array, number | BigNumber | Complex | Unit, Array | Matrix': function ArrayNumberBigNumberComplexUnitArrayMatrix(w, theta, v) {
25749
+ _validateSize(w, 3);
25750
+
25751
+ var matrixRes = multiply(rotationMatrix(theta, v), w);
25752
+ return matrixRes;
25753
+ },
25754
+ 'Matrix, number | BigNumber | Complex | Unit, Array | Matrix': function MatrixNumberBigNumberComplexUnitArrayMatrix(w, theta, v) {
25755
+ _validateSize(w, 3);
25756
+
25757
+ return multiply(rotationMatrix(theta, v), w);
25758
+ }
25759
+ });
25760
+
25761
+ function _validateSize(v, expectedSize) {
25762
+ var actualSize = Array.isArray(v) ? Object(utils_array["a" /* arraySize */])(v) : v.size();
25763
+
25764
+ if (actualSize.length > 2) {
25765
+ throw new RangeError("Vector must be of dimensions 1x".concat(expectedSize));
25766
+ }
25767
+
25768
+ if (actualSize.length === 2 && actualSize[1] !== 1) {
25769
+ throw new RangeError("Vector must be of dimensions 1x".concat(expectedSize));
25770
+ }
25771
+
25772
+ if (actualSize[0] !== expectedSize) {
25773
+ throw new RangeError("Vector must be of dimensions 1x".concat(expectedSize));
25774
+ }
25775
+ }
25776
+ });
25697
25777
  // CONCATENATED MODULE: ./src/function/matrix/rotationMatrix.js
25698
25778
 
25699
25779
 
@@ -25727,7 +25807,7 @@ var createRotationMatrix = /* #__PURE__ */Object(factory["a" /* factory */])(rot
25727
25807
  * Examples:
25728
25808
  *
25729
25809
  * math.rotationMatrix(math.pi / 2) // returns [[0, -1], [1, 0]]
25730
- * math.rotationMatrix(math.bignumber(45)) // returns [[ bignumber(1 / sqrt(2)), - bignumber(1 / sqrt(2))], [ bignumber(1 / sqrt(2)), bignumber(1 / sqrt(2))]]
25810
+ * math.rotationMatrix(math.bignumber(1)) // returns [[bignumber(cos(1)), bignumber(-sin(1))], [bignumber(sin(1)), bignumber(cos(1))]]
25731
25811
  * math.rotationMatrix(math.complex(1 + i)) // returns [[cos(1 + i), -sin(1 + i)], [sin(1 + i), cos(1 + i)]]
25732
25812
  * math.rotationMatrix(math.unit('1rad')) // returns [[cos(1), -sin(1)], [sin(1), cos(1)]]
25733
25813
  *
@@ -25763,12 +25843,13 @@ var createRotationMatrix = /* #__PURE__ */Object(factory["a" /* factory */])(rot
25763
25843
 
25764
25844
  _validateVector(matrixV);
25765
25845
 
25766
- return _rotationMatrix3x3(theta, matrixV, config.matrix === 'Matrix' ? 'dense' : undefined);
25846
+ return _rotationMatrix3x3(theta, matrixV, undefined);
25767
25847
  },
25768
25848
  'number | BigNumber | Complex | Unit, Matrix': function numberBigNumberComplexUnitMatrix(theta, v) {
25769
25849
  _validateVector(v);
25770
25850
 
25771
- return _rotationMatrix3x3(theta, v, config.matrix === 'Matrix' ? 'dense' : undefined);
25851
+ var storageType = v.storage() || (config.matrix === 'Matrix' ? 'dense' : undefined);
25852
+ return _rotationMatrix3x3(theta, v, storageType);
25772
25853
  },
25773
25854
  'number | BigNumber | Complex | Unit, Array, string': function numberBigNumberComplexUnitArrayString(theta, v, format) {
25774
25855
  var matrixV = matrix(v);
@@ -25845,7 +25926,7 @@ var createRotationMatrix = /* #__PURE__ */Object(factory["a" /* factory */])(rot
25845
25926
  var normV = norm(v);
25846
25927
 
25847
25928
  if (normV === 0) {
25848
- return _convertToFormat([], format);
25929
+ throw new RangeError('Rotation around zero vector');
25849
25930
  }
25850
25931
 
25851
25932
  var Big = Object(is["e" /* isBigNumber */])(theta) ? BigNumber : null;
@@ -26753,6 +26834,7 @@ var createZeros = /* #__PURE__ */Object(factory["a" /* factory */])(zeros_name,
26753
26834
  }
26754
26835
  }); // TODO: zeros contains almost the same code as ones. Reuse this?
26755
26836
  // CONCATENATED MODULE: ./src/function/special/erf.js
26837
+ /* eslint-disable no-loss-of-precision */
26756
26838
 
26757
26839
 
26758
26840
 
@@ -33542,19 +33624,16 @@ var createUnitClass = /* #__PURE__ */Object(factory["a" /* factory */])(Unit_nam
33542
33624
  function parseUnit() {
33543
33625
  var unitName = ''; // Alphanumeric characters only; matches [a-zA-Z0-9]
33544
33626
 
33545
- var code = text.charCodeAt(index);
33546
-
33547
- while (code >= 48 && code <= 57 || code >= 65 && code <= 90 || code >= 97 && code <= 122) {
33627
+ while (isDigit(c) || Unit.isValidAlpha(c)) {
33548
33628
  unitName += c;
33549
33629
  next();
33550
- code = text.charCodeAt(index);
33551
33630
  } // Must begin with [a-zA-Z]
33552
33631
 
33553
33632
 
33554
- code = unitName.charCodeAt(0);
33633
+ var firstC = unitName.charAt(0);
33555
33634
 
33556
- if (code >= 65 && code <= 90 || code >= 97 && code <= 122) {
33557
- return unitName || null;
33635
+ if (Unit.isValidAlpha(firstC)) {
33636
+ return unitName;
33558
33637
  } else {
33559
33638
  return null;
33560
33639
  }
@@ -37009,24 +37088,26 @@ var createUnitClass = /* #__PURE__ */Object(factory["a" /* factory */])(Unit_nam
37009
37088
  UNITS[_name2] = alias;
37010
37089
  }
37011
37090
  }
37091
+ /**
37092
+ * Checks if a character is a valid latin letter (upper or lower case).
37093
+ * Note that this function can be overridden, for example to allow support of other alphabets.
37094
+ * @param {string} c Tested character
37095
+ */
37012
37096
 
37013
- function assertUnitNameIsValid(name) {
37014
- for (var i = 0; i < name.length; i++) {
37015
- var _c = name.charAt(i);
37016
37097
 
37017
- var isValidAlpha = function isValidAlpha(p) {
37018
- return /^[a-zA-Z]$/.test(p);
37019
- };
37098
+ Unit.isValidAlpha = function isValidAlpha(c) {
37099
+ return /^[a-zA-Z]$/.test(c);
37100
+ };
37020
37101
 
37021
- var _isDigit = function _isDigit(c) {
37022
- return c >= '0' && c <= '9';
37023
- };
37102
+ function assertUnitNameIsValid(name) {
37103
+ for (var i = 0; i < name.length; i++) {
37104
+ c = name.charAt(i);
37024
37105
 
37025
- if (i === 0 && !isValidAlpha(_c)) {
37106
+ if (i === 0 && !Unit.isValidAlpha(c)) {
37026
37107
  throw new Error('Invalid unit name (must begin with alpha character): "' + name + '"');
37027
37108
  }
37028
37109
 
37029
- if (i > 0 && !(isValidAlpha(_c) || _isDigit(_c))) {
37110
+ if (i > 0 && !(Unit.isValidAlpha(c) || isDigit(c))) {
37030
37111
  throw new Error('Invalid unit name (only alphanumeric characters are allowed): "' + name + '"');
37031
37112
  }
37032
37113
  }
@@ -40614,8 +40695,8 @@ var createNode = /* #__PURE__ */Object(factory["a" /* factory */])(Node_name, No
40614
40695
 
40615
40696
  Node.prototype.traverse = function (callback) {
40616
40697
  // execute callback for itself
40617
- callback(this, null, null); // eslint-disable-line standard/no-callback-literal
40618
- // recursively traverse over all childs of a node
40698
+ // eslint-disable-next-line
40699
+ callback(this, null, null); // recursively traverse over all childs of a node
40619
40700
 
40620
40701
  function _traverse(node, callback) {
40621
40702
  node.forEach(function (child, path, parent) {
@@ -45745,7 +45826,7 @@ var createFunctionNode = /* #__PURE__ */Object(factory["a" /* factory */])(Funct
45745
45826
  var latex = ''; // Match everything of the form ${identifier} or ${identifier[2]} or $$
45746
45827
  // while submatching identifier and 2 (in the second case)
45747
45828
 
45748
- var regex = new RegExp('\\$(?:\\{([a-z_][a-z_0-9]*)(?:\\[([0-9]+)\\])?\\}|\\$)', 'ig');
45829
+ var regex = /\$(?:\{([a-z_][a-z_0-9]*)(?:\[([0-9]+)\])?\}|\$)/gi;
45749
45830
  var inputPos = 0; // position in the input string
45750
45831
 
45751
45832
  var match;
@@ -52948,6 +53029,15 @@ var rotationMatrixDocs = {
52948
53029
  examples: ['rotationMatrix(pi / 2)', 'rotationMatrix(unit("45deg"), [0, 0, 1])', 'rotationMatrix(1, matrix([0, 0, 1]), "sparse")'],
52949
53030
  seealso: ['cos', 'sin']
52950
53031
  };
53032
+ // CONCATENATED MODULE: ./src/expression/embeddedDocs/function/matrix/rotate.js
53033
+ var rotateDocs = {
53034
+ name: 'rotate',
53035
+ category: 'Matrix',
53036
+ syntax: ['rotate(w, theta)', 'rotate(w, theta, v)'],
53037
+ description: 'Returns a 2-D rotation matrix (2x2) for a given angle (in radians). ' + 'Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.',
53038
+ examples: ['rotate([1, 0], math.pi / 2)', 'rotate(matrix([1, 0]), unit("35deg"))', 'rotate([1, 0, 0], unit("90deg"), [0, 0, 1])', 'rotate(matrix([1, 0, 0]), unit("90deg"), matrix([0, 0, 1]))'],
53039
+ seealso: ['matrix', 'rotationMatrix']
53040
+ };
52951
53041
  // CONCATENATED MODULE: ./src/expression/embeddedDocs/embeddedDocs.js
52952
53042
 
52953
53043
 
@@ -53164,6 +53254,7 @@ var rotationMatrixDocs = {
53164
53254
 
53165
53255
 
53166
53256
 
53257
+
53167
53258
 
53168
53259
 
53169
53260
  var embeddedDocs = {
@@ -53509,6 +53600,7 @@ var embeddedDocs = {
53509
53600
  range: rangeDocs,
53510
53601
  resize: resizeDocs,
53511
53602
  reshape: reshapeDocs,
53603
+ rotate: rotateDocs,
53512
53604
  rotationMatrix: rotationMatrixDocs,
53513
53605
  row: rowDocs,
53514
53606
  size: sizeDocs,
@@ -56512,6 +56604,7 @@ function combinationsWithRep_isPositiveInteger(n) {
56512
56604
  return n.isInteger() && n.gte(0);
56513
56605
  }
56514
56606
  // CONCATENATED MODULE: ./src/plain/number/probability.js
56607
+ /* eslint-disable no-loss-of-precision */
56515
56608
 
56516
56609
 
56517
56610
  function gammaNumber(n) {
@@ -60661,13 +60754,13 @@ var createReplacer = /* #__PURE__ */Object(factory["a" /* factory */])(replacer_
60661
60754
  };
60662
60755
  });
60663
60756
  // CONCATENATED MODULE: ./src/version.js
60664
- var version = '7.5.1'; // Note: This file is automatically generated when building math.js.
60757
+ var version = '7.6.0'; // Note: This file is automatically generated when building math.js.
60665
60758
  // Changes made in this file will be overwritten.
60666
60759
  // CONCATENATED MODULE: ./src/plain/number/constants.js
60667
60760
  var constants_pi = Math.PI;
60668
60761
  var tau = 2 * Math.PI;
60669
60762
  var constants_e = Math.E;
60670
- var constants_phi = 1.61803398874989484820458683436563811772030917980576286213545;
60763
+ var constants_phi = 1.6180339887498948; // eslint-disable-line no-loss-of-precision
60671
60764
  // CONCATENATED MODULE: ./src/constants.js
60672
60765
 
60673
60766
 
@@ -62045,6 +62138,7 @@ var createVarianceTransform = /* #__PURE__ */Object(factory["a" /* factory */])(
62045
62138
 
62046
62139
 
62047
62140
 
62141
+
62048
62142
 
62049
62143
 
62050
62144
  /***/ }),