mathjs 10.6.2 → 11.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.
Files changed (436) hide show
  1. package/HISTORY.md +74 -1
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +2 -41
  4. package/lib/browser/math.js.LICENSE.txt +43 -0
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +6 -5
  7. package/lib/cjs/core/function/import.js +4 -14
  8. package/lib/cjs/core/function/typed.js +54 -12
  9. package/lib/cjs/defaultInstance.js +3 -3
  10. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  11. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  12. package/lib/cjs/entry/configReadonly.js +1 -1
  13. package/lib/cjs/entry/dependenciesAny/dependenciesChainClass.generated.js +3 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesKldivergence.generated.js +3 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +3 -0
  17. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +3 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +56 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +6 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesSqrtm.generated.js +3 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesStd.generated.js +3 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesStdTransform.generated.js +3 -0
  23. package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesChainClass.generated.js +3 -0
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  26. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +3 -0
  27. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +3 -0
  28. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +50 -0
  29. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +6 -0
  30. package/lib/cjs/entry/dependenciesNumber/dependenciesStd.generated.js +3 -0
  31. package/lib/cjs/entry/dependenciesNumber/dependenciesStdTransform.generated.js +3 -0
  32. package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
  33. package/lib/cjs/entry/impureFunctionsAny.generated.js +87 -61
  34. package/lib/cjs/entry/impureFunctionsNumber.generated.js +93 -69
  35. package/lib/cjs/entry/pureFunctionsAny.generated.js +50 -45
  36. package/lib/cjs/entry/pureFunctionsNumber.generated.js +22 -19
  37. package/lib/cjs/expression/Parser.js +1 -1
  38. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
  39. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
  40. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  41. package/lib/cjs/expression/node/AccessorNode.js +216 -173
  42. package/lib/cjs/expression/node/ArrayNode.js +206 -160
  43. package/lib/cjs/expression/node/AssignmentNode.js +321 -270
  44. package/lib/cjs/expression/node/BlockNode.js +223 -172
  45. package/lib/cjs/expression/node/ConditionalNode.js +253 -193
  46. package/lib/cjs/expression/node/ConstantNode.js +216 -171
  47. package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
  48. package/lib/cjs/expression/node/FunctionNode.js +456 -416
  49. package/lib/cjs/expression/node/IndexNode.js +256 -210
  50. package/lib/cjs/expression/node/Node.js +411 -378
  51. package/lib/cjs/expression/node/ObjectNode.js +223 -178
  52. package/lib/cjs/expression/node/OperatorNode.js +474 -397
  53. package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
  54. package/lib/cjs/expression/node/RangeNode.js +272 -224
  55. package/lib/cjs/expression/node/RelationalNode.js +246 -195
  56. package/lib/cjs/expression/node/SymbolNode.js +219 -172
  57. package/lib/cjs/expression/node/utils/access.js +1 -1
  58. package/lib/cjs/expression/node/utils/assign.js +1 -1
  59. package/lib/cjs/expression/operators.js +117 -23
  60. package/lib/cjs/expression/parse.js +37 -19
  61. package/lib/cjs/expression/transform/std.transform.js +3 -1
  62. package/lib/cjs/factoriesAny.js +8 -0
  63. package/lib/cjs/factoriesNumber.js +10 -1
  64. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  65. package/lib/cjs/function/algebra/derivative.js +22 -30
  66. package/lib/cjs/function/algebra/leafCount.js +0 -3
  67. package/lib/cjs/function/algebra/rationalize.js +78 -108
  68. package/lib/cjs/function/algebra/resolve.js +53 -16
  69. package/lib/cjs/function/algebra/simplify/util.js +1 -1
  70. package/lib/cjs/function/algebra/simplify.js +87 -114
  71. package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
  72. package/lib/cjs/function/algebra/simplifyCore.js +196 -93
  73. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  74. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  75. package/lib/cjs/function/algebra/symbolicEqual.js +9 -26
  76. package/lib/cjs/function/arithmetic/abs.js +7 -14
  77. package/lib/cjs/function/arithmetic/add.js +26 -70
  78. package/lib/cjs/function/arithmetic/addScalar.js +17 -9
  79. package/lib/cjs/function/arithmetic/cbrt.js +7 -11
  80. package/lib/cjs/function/arithmetic/ceil.js +56 -46
  81. package/lib/cjs/function/arithmetic/cube.js +5 -10
  82. package/lib/cjs/function/arithmetic/divide.js +7 -7
  83. package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
  84. package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
  85. package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
  86. package/lib/cjs/function/arithmetic/dotPow.js +30 -63
  87. package/lib/cjs/function/arithmetic/exp.js +8 -12
  88. package/lib/cjs/function/arithmetic/expm1.js +10 -10
  89. package/lib/cjs/function/arithmetic/fix.js +33 -27
  90. package/lib/cjs/function/arithmetic/floor.js +56 -46
  91. package/lib/cjs/function/arithmetic/gcd.js +27 -68
  92. package/lib/cjs/function/arithmetic/hypot.js +9 -5
  93. package/lib/cjs/function/arithmetic/invmod.js +1 -1
  94. package/lib/cjs/function/arithmetic/lcm.js +27 -68
  95. package/lib/cjs/function/arithmetic/log.js +10 -12
  96. package/lib/cjs/function/arithmetic/log10.js +5 -3
  97. package/lib/cjs/function/arithmetic/log1p.js +11 -7
  98. package/lib/cjs/function/arithmetic/log2.js +5 -3
  99. package/lib/cjs/function/arithmetic/mod.js +22 -64
  100. package/lib/cjs/function/arithmetic/multiply.js +40 -35
  101. package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
  102. package/lib/cjs/function/arithmetic/norm.js +1 -5
  103. package/lib/cjs/function/arithmetic/nthRoot.js +80 -92
  104. package/lib/cjs/function/arithmetic/round.js +56 -42
  105. package/lib/cjs/function/arithmetic/sign.js +14 -10
  106. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  107. package/lib/cjs/function/arithmetic/square.js +6 -10
  108. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  109. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  110. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  111. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  112. package/lib/cjs/function/bitwise/bitNot.js +5 -3
  113. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  114. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  115. package/lib/cjs/function/bitwise/leftShift.js +68 -81
  116. package/lib/cjs/function/bitwise/rightArithShift.js +68 -81
  117. package/lib/cjs/function/bitwise/rightLogShift.js +68 -81
  118. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  119. package/lib/cjs/function/complex/arg.js +5 -3
  120. package/lib/cjs/function/complex/conj.js +6 -7
  121. package/lib/cjs/function/complex/im.js +7 -8
  122. package/lib/cjs/function/complex/re.js +6 -10
  123. package/lib/cjs/function/logical/and.js +74 -80
  124. package/lib/cjs/function/logical/not.js +13 -6
  125. package/lib/cjs/function/logical/or.js +21 -63
  126. package/lib/cjs/function/logical/xor.js +21 -63
  127. package/lib/cjs/function/matrix/diff.js +10 -7
  128. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  129. package/lib/cjs/function/matrix/fft.js +2 -2
  130. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  131. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  132. package/lib/cjs/function/matrix/ones.js +2 -1
  133. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  134. package/lib/cjs/function/matrix/transpose.js +47 -48
  135. package/lib/cjs/function/matrix/zeros.js +2 -1
  136. package/lib/cjs/function/probability/factorial.js +5 -3
  137. package/lib/cjs/function/probability/gamma.js +38 -40
  138. package/lib/cjs/function/probability/kldivergence.js +5 -2
  139. package/lib/cjs/function/probability/lgamma.js +30 -30
  140. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  141. package/lib/cjs/function/relational/compare.js +21 -67
  142. package/lib/cjs/function/relational/compareNatural.js +59 -54
  143. package/lib/cjs/function/relational/compareText.js +10 -43
  144. package/lib/cjs/function/relational/compareUnits.js +24 -0
  145. package/lib/cjs/function/relational/equal.js +19 -80
  146. package/lib/cjs/function/relational/equalScalar.js +7 -9
  147. package/lib/cjs/function/relational/larger.js +21 -67
  148. package/lib/cjs/function/relational/largerEq.js +21 -67
  149. package/lib/cjs/function/relational/smaller.js +21 -67
  150. package/lib/cjs/function/relational/smallerEq.js +21 -67
  151. package/lib/cjs/function/relational/unequal.js +19 -80
  152. package/lib/cjs/function/special/erf.js +5 -3
  153. package/lib/cjs/function/statistics/std.js +11 -2
  154. package/lib/cjs/function/trigonometry/acos.js +4 -8
  155. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  156. package/lib/cjs/function/trigonometry/acot.js +4 -8
  157. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  158. package/lib/cjs/function/trigonometry/acsc.js +4 -8
  159. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  160. package/lib/cjs/function/trigonometry/asec.js +4 -8
  161. package/lib/cjs/function/trigonometry/asech.js +4 -8
  162. package/lib/cjs/function/trigonometry/asin.js +4 -9
  163. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  164. package/lib/cjs/function/trigonometry/atan.js +4 -9
  165. package/lib/cjs/function/trigonometry/atan2.js +24 -62
  166. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  167. package/lib/cjs/function/trigonometry/cos.js +11 -20
  168. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  169. package/lib/cjs/function/trigonometry/cot.js +9 -15
  170. package/lib/cjs/function/trigonometry/coth.js +4 -15
  171. package/lib/cjs/function/trigonometry/csc.js +11 -17
  172. package/lib/cjs/function/trigonometry/csch.js +4 -15
  173. package/lib/cjs/function/trigonometry/sec.js +11 -17
  174. package/lib/cjs/function/trigonometry/sech.js +4 -15
  175. package/lib/cjs/function/trigonometry/sin.js +11 -21
  176. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  177. package/lib/cjs/function/trigonometry/tan.js +11 -21
  178. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  179. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  180. package/lib/cjs/function/unit/to.js +7 -41
  181. package/lib/cjs/function/utils/hasNumericValue.js +4 -0
  182. package/lib/cjs/function/utils/isInteger.js +5 -3
  183. package/lib/cjs/function/utils/isNegative.js +10 -6
  184. package/lib/cjs/function/utils/isNumeric.js +5 -3
  185. package/lib/cjs/function/utils/isPositive.js +10 -6
  186. package/lib/cjs/function/utils/isPrime.js +5 -3
  187. package/lib/cjs/function/utils/isZero.js +10 -6
  188. package/lib/cjs/function/utils/numeric.js +11 -4
  189. package/lib/cjs/function/utils/typeOf.js +38 -44
  190. package/lib/cjs/header.js +2 -2
  191. package/lib/cjs/plain/bignumber/index.js +1 -1
  192. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  193. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  194. package/lib/cjs/type/boolean.js +7 -5
  195. package/lib/cjs/type/chain/Chain.js +23 -3
  196. package/lib/cjs/type/complex/Complex.js +18 -14
  197. package/lib/cjs/type/complex/function/complex.js +6 -4
  198. package/lib/cjs/type/fraction/Fraction.js +10 -6
  199. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  200. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  201. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  202. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  203. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  204. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  205. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  206. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  207. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  208. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  209. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  210. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  211. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  213. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  214. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  217. package/lib/cjs/type/number.js +6 -4
  218. package/lib/cjs/type/string.js +7 -5
  219. package/lib/cjs/type/unit/Unit.js +69 -21
  220. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  221. package/lib/cjs/type/unit/function/unit.js +9 -3
  222. package/lib/cjs/utils/customs.js +2 -2
  223. package/lib/cjs/utils/emitter.js +1 -1
  224. package/lib/cjs/utils/function.js +2 -2
  225. package/lib/cjs/utils/is.js +27 -25
  226. package/lib/cjs/utils/latex.js +3 -3
  227. package/lib/cjs/utils/lruQueue.js +1 -1
  228. package/lib/cjs/utils/map.js +3 -3
  229. package/lib/cjs/utils/object.js +2 -2
  230. package/lib/cjs/utils/snapshot.js +30 -57
  231. package/lib/cjs/utils/string.js +3 -3
  232. package/lib/cjs/version.js +1 -1
  233. package/lib/esm/core/create.js +2 -1
  234. package/lib/esm/core/function/import.js +2 -12
  235. package/lib/esm/core/function/typed.js +47 -11
  236. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  237. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  238. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  239. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  240. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  241. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  242. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  243. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  244. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  247. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  249. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  250. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  251. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  252. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  253. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  254. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  255. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  256. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  257. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  258. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  259. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  260. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  261. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  262. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  263. package/lib/esm/expression/node/AccessorNode.js +158 -153
  264. package/lib/esm/expression/node/ArrayNode.js +162 -154
  265. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  266. package/lib/esm/expression/node/BlockNode.js +177 -163
  267. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  268. package/lib/esm/expression/node/ConstantNode.js +171 -163
  269. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  270. package/lib/esm/expression/node/FunctionNode.js +407 -407
  271. package/lib/esm/expression/node/IndexNode.js +206 -198
  272. package/lib/esm/expression/node/Node.js +325 -325
  273. package/lib/esm/expression/node/ObjectNode.js +166 -157
  274. package/lib/esm/expression/node/OperatorNode.js +414 -377
  275. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  276. package/lib/esm/expression/node/RangeNode.js +221 -212
  277. package/lib/esm/expression/node/RelationalNode.js +190 -176
  278. package/lib/esm/expression/node/SymbolNode.js +161 -152
  279. package/lib/esm/expression/operators.js +96 -4
  280. package/lib/esm/expression/parse.js +25 -7
  281. package/lib/esm/expression/transform/std.transform.js +3 -1
  282. package/lib/esm/factoriesAny.js +1 -0
  283. package/lib/esm/factoriesNumber.js +1 -0
  284. package/lib/esm/function/algebra/derivative.js +22 -30
  285. package/lib/esm/function/algebra/leafCount.js +0 -3
  286. package/lib/esm/function/algebra/rationalize.js +83 -114
  287. package/lib/esm/function/algebra/resolve.js +25 -16
  288. package/lib/esm/function/algebra/simplify.js +82 -112
  289. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  290. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  291. package/lib/esm/function/algebra/symbolicEqual.js +9 -26
  292. package/lib/esm/function/arithmetic/abs.js +3 -16
  293. package/lib/esm/function/arithmetic/add.js +21 -65
  294. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  295. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  296. package/lib/esm/function/arithmetic/ceil.js +25 -25
  297. package/lib/esm/function/arithmetic/cube.js +5 -9
  298. package/lib/esm/function/arithmetic/divide.js +7 -7
  299. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  300. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  301. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  302. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  303. package/lib/esm/function/arithmetic/exp.js +8 -11
  304. package/lib/esm/function/arithmetic/expm1.js +10 -9
  305. package/lib/esm/function/arithmetic/fix.js +17 -17
  306. package/lib/esm/function/arithmetic/floor.js +25 -25
  307. package/lib/esm/function/arithmetic/gcd.js +26 -70
  308. package/lib/esm/function/arithmetic/hypot.js +7 -6
  309. package/lib/esm/function/arithmetic/lcm.js +26 -70
  310. package/lib/esm/function/arithmetic/log.js +7 -10
  311. package/lib/esm/function/arithmetic/log10.js +1 -3
  312. package/lib/esm/function/arithmetic/log1p.js +4 -6
  313. package/lib/esm/function/arithmetic/log2.js +1 -3
  314. package/lib/esm/function/arithmetic/mod.js +21 -62
  315. package/lib/esm/function/arithmetic/multiply.js +23 -27
  316. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  317. package/lib/esm/function/arithmetic/norm.js +0 -4
  318. package/lib/esm/function/arithmetic/nthRoot.js +38 -73
  319. package/lib/esm/function/arithmetic/round.js +26 -28
  320. package/lib/esm/function/arithmetic/sign.js +5 -7
  321. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  322. package/lib/esm/function/arithmetic/square.js +6 -9
  323. package/lib/esm/function/arithmetic/subtract.js +31 -95
  324. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  325. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  326. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  327. package/lib/esm/function/bitwise/bitNot.js +1 -3
  328. package/lib/esm/function/bitwise/bitOr.js +16 -59
  329. package/lib/esm/function/bitwise/bitXor.js +16 -59
  330. package/lib/esm/function/bitwise/leftShift.js +38 -60
  331. package/lib/esm/function/bitwise/rightArithShift.js +38 -60
  332. package/lib/esm/function/bitwise/rightLogShift.js +38 -60
  333. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  334. package/lib/esm/function/complex/arg.js +1 -3
  335. package/lib/esm/function/complex/conj.js +3 -12
  336. package/lib/esm/function/complex/im.js +4 -15
  337. package/lib/esm/function/complex/re.js +3 -15
  338. package/lib/esm/function/logical/and.js +35 -57
  339. package/lib/esm/function/logical/not.js +3 -6
  340. package/lib/esm/function/logical/or.js +16 -61
  341. package/lib/esm/function/logical/xor.js +16 -61
  342. package/lib/esm/function/matrix/diff.js +2 -7
  343. package/lib/esm/function/matrix/ones.js +2 -1
  344. package/lib/esm/function/matrix/sqrtm.js +3 -2
  345. package/lib/esm/function/matrix/transpose.js +47 -50
  346. package/lib/esm/function/matrix/zeros.js +2 -1
  347. package/lib/esm/function/probability/factorial.js +1 -3
  348. package/lib/esm/function/probability/gamma.js +38 -39
  349. package/lib/esm/function/probability/kldivergence.js +3 -2
  350. package/lib/esm/function/probability/lgamma.js +29 -29
  351. package/lib/esm/function/relational/compare.js +21 -67
  352. package/lib/esm/function/relational/compareNatural.js +54 -49
  353. package/lib/esm/function/relational/compareText.js +10 -42
  354. package/lib/esm/function/relational/compareUnits.js +15 -0
  355. package/lib/esm/function/relational/equal.js +19 -79
  356. package/lib/esm/function/relational/equalScalar.js +6 -9
  357. package/lib/esm/function/relational/larger.js +23 -73
  358. package/lib/esm/function/relational/largerEq.js +23 -73
  359. package/lib/esm/function/relational/smaller.js +23 -73
  360. package/lib/esm/function/relational/smallerEq.js +23 -73
  361. package/lib/esm/function/relational/unequal.js +19 -79
  362. package/lib/esm/function/special/erf.js +1 -3
  363. package/lib/esm/function/statistics/std.js +10 -2
  364. package/lib/esm/function/trigonometry/acos.js +4 -7
  365. package/lib/esm/function/trigonometry/acosh.js +2 -6
  366. package/lib/esm/function/trigonometry/acot.js +4 -7
  367. package/lib/esm/function/trigonometry/acoth.js +4 -7
  368. package/lib/esm/function/trigonometry/acsc.js +4 -7
  369. package/lib/esm/function/trigonometry/acsch.js +4 -7
  370. package/lib/esm/function/trigonometry/asec.js +4 -7
  371. package/lib/esm/function/trigonometry/asech.js +4 -7
  372. package/lib/esm/function/trigonometry/asin.js +4 -8
  373. package/lib/esm/function/trigonometry/asinh.js +4 -8
  374. package/lib/esm/function/trigonometry/atan.js +4 -8
  375. package/lib/esm/function/trigonometry/atan2.js +25 -64
  376. package/lib/esm/function/trigonometry/atanh.js +4 -8
  377. package/lib/esm/function/trigonometry/cos.js +11 -22
  378. package/lib/esm/function/trigonometry/cosh.js +5 -20
  379. package/lib/esm/function/trigonometry/cot.js +10 -20
  380. package/lib/esm/function/trigonometry/coth.js +6 -20
  381. package/lib/esm/function/trigonometry/csc.js +12 -22
  382. package/lib/esm/function/trigonometry/csch.js +6 -20
  383. package/lib/esm/function/trigonometry/sec.js +12 -22
  384. package/lib/esm/function/trigonometry/sech.js +6 -20
  385. package/lib/esm/function/trigonometry/sin.js +11 -23
  386. package/lib/esm/function/trigonometry/sinh.js +5 -21
  387. package/lib/esm/function/trigonometry/tan.js +11 -23
  388. package/lib/esm/function/trigonometry/tanh.js +5 -21
  389. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  390. package/lib/esm/function/unit/to.js +8 -43
  391. package/lib/esm/function/utils/hasNumericValue.js +2 -0
  392. package/lib/esm/function/utils/isInteger.js +1 -3
  393. package/lib/esm/function/utils/isNegative.js +2 -6
  394. package/lib/esm/function/utils/isNumeric.js +3 -9
  395. package/lib/esm/function/utils/isPositive.js +2 -6
  396. package/lib/esm/function/utils/isPrime.js +1 -3
  397. package/lib/esm/function/utils/isZero.js +2 -6
  398. package/lib/esm/function/utils/numeric.js +11 -4
  399. package/lib/esm/function/utils/typeOf.js +38 -44
  400. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  401. package/lib/esm/type/boolean.js +1 -3
  402. package/lib/esm/type/chain/Chain.js +23 -3
  403. package/lib/esm/type/complex/Complex.js +4 -0
  404. package/lib/esm/type/complex/function/complex.js +1 -3
  405. package/lib/esm/type/fraction/Fraction.js +4 -0
  406. package/lib/esm/type/fraction/function/fraction.js +1 -3
  407. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  408. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  409. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  410. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  411. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  412. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  413. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  414. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  415. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  416. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  417. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  418. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  419. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  420. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  421. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  422. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  423. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  424. package/lib/esm/type/number.js +1 -3
  425. package/lib/esm/type/string.js +1 -3
  426. package/lib/esm/type/unit/Unit.js +61 -13
  427. package/lib/esm/type/unit/function/createUnit.js +2 -1
  428. package/lib/esm/type/unit/function/unit.js +5 -3
  429. package/lib/esm/utils/is.js +18 -18
  430. package/lib/esm/utils/snapshot.js +22 -48
  431. package/lib/esm/version.js +1 -1
  432. package/package.json +21 -24
  433. package/types/index.d.ts +202 -181
  434. package/types/index.ts +264 -57
  435. package/lib/cjs/utils/polyfills.js +0 -14
  436. package/lib/esm/utils/polyfills.js +0 -12
@@ -4,30 +4,21 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getAssociativity = getAssociativity;
7
+ exports.getOperator = getOperator;
7
8
  exports.getPrecedence = getPrecedence;
8
9
  exports.isAssociativeWith = isAssociativeWith;
9
10
  exports.properties = void 0;
10
11
 
11
12
  var _object = require("../utils/object.js");
12
13
 
13
- // list of identifiers of nodes in order of their precedence
14
- // also contains information about left/right associativity
15
- // and which other operator the operator is associative with
16
- // Example:
17
- // addition is associative with addition and subtraction, because:
18
- // (a+b)+c=a+(b+c)
19
- // (a+b)-c=a+(b-c)
20
- //
21
- // postfix operators are left associative, prefix operators
22
- // are right associative
23
- //
24
- // It's also possible to set the following properties:
25
- // latexParens: if set to false, this node doesn't need to be enclosed
26
- // in parentheses when using LaTeX
27
- // latexLeftParens: if set to false, this !OperatorNode's!
28
- // left argument doesn't need to be enclosed
29
- // in parentheses
30
- // latexRightParens: the same for the right argument
14
+ var _is = require("../utils/is.js");
15
+
16
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
17
+
18
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
+
20
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
21
+
31
22
  var properties = [{
32
23
  // assignment
33
24
  AssignmentNode: {},
@@ -44,62 +35,74 @@ var properties = [{
44
35
  }, {
45
36
  // logical or
46
37
  'OperatorNode:or': {
38
+ op: 'or',
47
39
  associativity: 'left',
48
40
  associativeWith: []
49
41
  }
50
42
  }, {
51
43
  // logical xor
52
44
  'OperatorNode:xor': {
45
+ op: 'xor',
53
46
  associativity: 'left',
54
47
  associativeWith: []
55
48
  }
56
49
  }, {
57
50
  // logical and
58
51
  'OperatorNode:and': {
52
+ op: 'and',
59
53
  associativity: 'left',
60
54
  associativeWith: []
61
55
  }
62
56
  }, {
63
57
  // bitwise or
64
58
  'OperatorNode:bitOr': {
59
+ op: '|',
65
60
  associativity: 'left',
66
61
  associativeWith: []
67
62
  }
68
63
  }, {
69
64
  // bitwise xor
70
65
  'OperatorNode:bitXor': {
66
+ op: '^|',
71
67
  associativity: 'left',
72
68
  associativeWith: []
73
69
  }
74
70
  }, {
75
71
  // bitwise and
76
72
  'OperatorNode:bitAnd': {
73
+ op: '&',
77
74
  associativity: 'left',
78
75
  associativeWith: []
79
76
  }
80
77
  }, {
81
78
  // relational operators
82
79
  'OperatorNode:equal': {
80
+ op: '==',
83
81
  associativity: 'left',
84
82
  associativeWith: []
85
83
  },
86
84
  'OperatorNode:unequal': {
85
+ op: '!=',
87
86
  associativity: 'left',
88
87
  associativeWith: []
89
88
  },
90
89
  'OperatorNode:smaller': {
90
+ op: '<',
91
91
  associativity: 'left',
92
92
  associativeWith: []
93
93
  },
94
94
  'OperatorNode:larger': {
95
+ op: '>',
95
96
  associativity: 'left',
96
97
  associativeWith: []
97
98
  },
98
99
  'OperatorNode:smallerEq': {
100
+ op: '<=',
99
101
  associativity: 'left',
100
102
  associativeWith: []
101
103
  },
102
104
  'OperatorNode:largerEq': {
105
+ op: '>=',
103
106
  associativity: 'left',
104
107
  associativeWith: []
105
108
  },
@@ -110,20 +113,24 @@ var properties = [{
110
113
  }, {
111
114
  // bitshift operators
112
115
  'OperatorNode:leftShift': {
116
+ op: '<<',
113
117
  associativity: 'left',
114
118
  associativeWith: []
115
119
  },
116
120
  'OperatorNode:rightArithShift': {
121
+ op: '>>',
117
122
  associativity: 'left',
118
123
  associativeWith: []
119
124
  },
120
125
  'OperatorNode:rightLogShift': {
126
+ op: '>>>',
121
127
  associativity: 'left',
122
128
  associativeWith: []
123
129
  }
124
130
  }, {
125
131
  // unit conversion
126
132
  'OperatorNode:to': {
133
+ op: 'to',
127
134
  associativity: 'left',
128
135
  associativeWith: []
129
136
  }
@@ -133,20 +140,24 @@ var properties = [{
133
140
  }, {
134
141
  // addition, subtraction
135
142
  'OperatorNode:add': {
143
+ op: '+',
136
144
  associativity: 'left',
137
145
  associativeWith: ['OperatorNode:add', 'OperatorNode:subtract']
138
146
  },
139
147
  'OperatorNode:subtract': {
148
+ op: '-',
140
149
  associativity: 'left',
141
150
  associativeWith: []
142
151
  }
143
152
  }, {
144
153
  // multiply, divide, modulus
145
154
  'OperatorNode:multiply': {
155
+ op: '*',
146
156
  associativity: 'left',
147
157
  associativeWith: ['OperatorNode:multiply', 'OperatorNode:divide', 'Operator:dotMultiply', 'Operator:dotDivide']
148
158
  },
149
159
  'OperatorNode:divide': {
160
+ op: '/',
150
161
  associativity: 'left',
151
162
  associativeWith: [],
152
163
  latexLeftParens: false,
@@ -157,34 +168,48 @@ var properties = [{
157
168
 
158
169
  },
159
170
  'OperatorNode:dotMultiply': {
171
+ op: '.*',
160
172
  associativity: 'left',
161
173
  associativeWith: ['OperatorNode:multiply', 'OperatorNode:divide', 'OperatorNode:dotMultiply', 'OperatorNode:doDivide']
162
174
  },
163
175
  'OperatorNode:dotDivide': {
176
+ op: './',
164
177
  associativity: 'left',
165
178
  associativeWith: []
166
179
  },
167
180
  'OperatorNode:mod': {
181
+ op: 'mod',
168
182
  associativity: 'left',
169
183
  associativeWith: []
170
184
  }
185
+ }, {
186
+ // Repeat multiplication for implicit multiplication
187
+ 'OperatorNode:multiply': {
188
+ associativity: 'left',
189
+ associativeWith: ['OperatorNode:multiply', 'OperatorNode:divide', 'Operator:dotMultiply', 'Operator:dotDivide']
190
+ }
171
191
  }, {
172
192
  // unary prefix operators
173
193
  'OperatorNode:unaryPlus': {
194
+ op: '+',
174
195
  associativity: 'right'
175
196
  },
176
197
  'OperatorNode:unaryMinus': {
198
+ op: '-',
177
199
  associativity: 'right'
178
200
  },
179
201
  'OperatorNode:bitNot': {
202
+ op: '~',
180
203
  associativity: 'right'
181
204
  },
182
205
  'OperatorNode:not': {
206
+ op: 'not',
183
207
  associativity: 'right'
184
208
  }
185
209
  }, {
186
210
  // exponentiation
187
211
  'OperatorNode:pow': {
212
+ op: '^',
188
213
  associativity: 'right',
189
214
  associativeWith: [],
190
215
  latexRightParens: false // the exponent doesn't need parentheses in
@@ -193,20 +218,43 @@ var properties = [{
193
218
 
194
219
  },
195
220
  'OperatorNode:dotPow': {
221
+ op: '.^',
196
222
  associativity: 'right',
197
223
  associativeWith: []
198
224
  }
199
225
  }, {
200
226
  // factorial
201
227
  'OperatorNode:factorial': {
228
+ op: '!',
202
229
  associativity: 'left'
203
230
  }
204
231
  }, {
205
232
  // matrix transpose
206
- 'OperatorNode:transpose': {
233
+ 'OperatorNode:ctranspose': {
234
+ op: "'",
207
235
  associativity: 'left'
208
236
  }
209
237
  }];
238
+ /**
239
+ * Returns the first non-parenthesis internal node, but only
240
+ * when the 'parenthesis' option is unset or auto.
241
+ * @param {Node} _node
242
+ * @param {string} parenthesis
243
+ * @return {Node}
244
+ */
245
+
246
+ exports.properties = properties;
247
+
248
+ function unwrapParen(_node, parenthesis) {
249
+ if (!parenthesis || parenthesis !== 'auto') return _node;
250
+ var node = _node;
251
+
252
+ while ((0, _is.isParenthesisNode)(node)) {
253
+ node = node.content;
254
+ }
255
+
256
+ return node;
257
+ }
210
258
  /**
211
259
  * Get the precedence of a Node.
212
260
  * Higher number for higher precedence, starting with 0.
@@ -214,12 +262,13 @@ var properties = [{
214
262
  *
215
263
  * @param {Node} _node
216
264
  * @param {string} parenthesis
265
+ * @param {string} implicit
266
+ * @param {Node} parent (for determining context for implicit multiplication)
217
267
  * @return {number | null}
218
268
  */
219
269
 
220
- exports.properties = properties;
221
270
 
222
- function getPrecedence(_node, parenthesis) {
271
+ function getPrecedence(_node, parenthesis, implicit, parent) {
223
272
  var node = _node;
224
273
 
225
274
  if (parenthesis !== 'keep') {
@@ -228,14 +277,26 @@ function getPrecedence(_node, parenthesis) {
228
277
  }
229
278
 
230
279
  var identifier = node.getIdentifier();
280
+ var precedence = null;
231
281
 
232
282
  for (var i = 0; i < properties.length; i++) {
233
283
  if (identifier in properties[i]) {
234
- return i;
284
+ precedence = i;
285
+ break;
286
+ }
287
+ } // Bump up precedence of implicit multiplication, except when preceded
288
+ // by a "Rule 2" fraction ( [unaryOp]constant / constant )
289
+
290
+
291
+ if (identifier === 'OperatorNode:multiply' && node.implicit && implicit !== 'show') {
292
+ var leftArg = unwrapParen(node.args[0], parenthesis);
293
+
294
+ if (!((0, _is.isConstantNode)(leftArg) && parent && parent.getIdentifier() === 'OperatorNode:divide' && (0, _is.rule2Node)(unwrapParen(parent.args[0], parenthesis))) && !(leftArg.getIdentifier() === 'OperatorNode:divide' && (0, _is.rule2Node)(unwrapParen(leftArg.args[0], parenthesis)) && (0, _is.isConstantNode)(unwrapParen(leftArg.args[1])))) {
295
+ precedence += 1;
235
296
  }
236
297
  }
237
298
 
238
- return null;
299
+ return precedence;
239
300
  }
240
301
  /**
241
302
  * Get the associativity of an operator (left or right).
@@ -320,5 +381,38 @@ function isAssociativeWith(nodeA, nodeB, parenthesis) {
320
381
  } // associativeWith is not defined
321
382
 
322
383
 
384
+ return null;
385
+ }
386
+ /**
387
+ * Get the operator associated with a function name.
388
+ * Returns a string with the operator symbol, or null if the
389
+ * input is not the name of a function associated with an
390
+ * operator.
391
+ *
392
+ * @param {string} Function name
393
+ * @return {string | null} Associated operator symbol, if any
394
+ */
395
+
396
+
397
+ function getOperator(fn) {
398
+ var identifier = 'OperatorNode:' + fn;
399
+
400
+ var _iterator = _createForOfIteratorHelper(properties),
401
+ _step;
402
+
403
+ try {
404
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
405
+ var group = _step.value;
406
+
407
+ if (identifier in group) {
408
+ return group[identifier].op;
409
+ }
410
+ }
411
+ } catch (err) {
412
+ _iterator.e(err);
413
+ } finally {
414
+ _iterator.f();
415
+ }
416
+
323
417
  return null;
324
418
  }
@@ -153,16 +153,16 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
153
153
  var NAMED_DELIMITERS = {
154
154
  mod: true,
155
155
  to: true,
156
- in: true,
156
+ "in": true,
157
157
  and: true,
158
158
  xor: true,
159
159
  or: true,
160
160
  not: true
161
161
  };
162
162
  var CONSTANTS = {
163
- true: true,
164
- false: false,
165
- null: null,
163
+ "true": true,
164
+ "false": false,
165
+ "null": null,
166
166
  undefined: undefined
167
167
  };
168
168
  var NUMERIC_CONSTANTS = ['NaN', 'Infinity'];
@@ -588,7 +588,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
588
588
 
589
589
  function parseStart(expression, extraNodes) {
590
590
  var state = initialState();
591
- (0, _extends2.default)(state, {
591
+ (0, _extends2["default"])(state, {
592
592
  expression: expression,
593
593
  extraNodes: extraNodes
594
594
  });
@@ -624,7 +624,10 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
624
624
 
625
625
  if (state.token !== '' && state.token !== '\n' && state.token !== ';') {
626
626
  node = parseAssignment(state);
627
- node.comment = state.comment;
627
+
628
+ if (state.comment) {
629
+ node.comment = state.comment;
630
+ }
628
631
  } // TODO: simplify this loop
629
632
 
630
633
 
@@ -642,7 +645,11 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
642
645
 
643
646
  if (state.token !== '\n' && state.token !== ';' && state.token !== '') {
644
647
  node = parseAssignment(state);
645
- node.comment = state.comment;
648
+
649
+ if (state.comment) {
650
+ node.comment = state.comment;
651
+ }
652
+
646
653
  visible = state.token !== ';';
647
654
  blocks.push({
648
655
  node: node,
@@ -656,7 +663,10 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
656
663
  } else {
657
664
  if (!node) {
658
665
  node = new ConstantNode(undefined);
659
- node.comment = state.comment;
666
+
667
+ if (state.comment) {
668
+ node.comment = state.comment;
669
+ }
660
670
  }
661
671
 
662
672
  return node;
@@ -934,7 +944,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
934
944
  node = parseRange(state);
935
945
  var operators = {
936
946
  to: 'to',
937
- in: 'to' // alias of 'to'
947
+ "in": 'to' // alias of 'to'
938
948
 
939
949
  };
940
950
 
@@ -1100,8 +1110,10 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
1100
1110
  }
1101
1111
  /**
1102
1112
  * Infamous "rule 2" as described in https://github.com/josdejong/mathjs/issues/792#issuecomment-361065370
1113
+ * And as amended in https://github.com/josdejong/mathjs/issues/2370#issuecomment-1054052164
1103
1114
  * Explicit division gets higher precedence than implicit multiplication
1104
- * when the division matches this pattern: [number] / [number] [symbol]
1115
+ * when the division matches this pattern:
1116
+ * [unaryPrefixOp]?[number] / [number] [symbol]
1105
1117
  * @return {Node} node
1106
1118
  * @private
1107
1119
  */
@@ -1114,32 +1126,32 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
1114
1126
 
1115
1127
  while (true) {
1116
1128
  // Match the "number /" part of the pattern "number / number symbol"
1117
- if (state.token === '/' && (0, _is.isConstantNode)(last)) {
1129
+ if (state.token === '/' && (0, _is.rule2Node)(last)) {
1118
1130
  // Look ahead to see if the next token is a number
1119
- tokenStates.push((0, _extends2.default)({}, state));
1131
+ tokenStates.push((0, _extends2["default"])({}, state));
1120
1132
  getTokenSkipNewline(state); // Match the "number / number" part of the pattern
1121
1133
 
1122
1134
  if (state.tokenType === TOKENTYPE.NUMBER) {
1123
1135
  // Look ahead again
1124
- tokenStates.push((0, _extends2.default)({}, state));
1136
+ tokenStates.push((0, _extends2["default"])({}, state));
1125
1137
  getTokenSkipNewline(state); // Match the "symbol" part of the pattern, or a left parenthesis
1126
1138
 
1127
1139
  if (state.tokenType === TOKENTYPE.SYMBOL || state.token === '(') {
1128
1140
  // We've matched the pattern "number / number symbol".
1129
1141
  // Rewind once and build the "number / number" node; the symbol will be consumed later
1130
- (0, _extends2.default)(state, tokenStates.pop());
1142
+ (0, _extends2["default"])(state, tokenStates.pop());
1131
1143
  tokenStates.pop();
1132
1144
  last = parsePercentage(state);
1133
1145
  node = new OperatorNode('/', 'divide', [node, last]);
1134
1146
  } else {
1135
1147
  // Not a match, so rewind
1136
1148
  tokenStates.pop();
1137
- (0, _extends2.default)(state, tokenStates.pop());
1149
+ (0, _extends2["default"])(state, tokenStates.pop());
1138
1150
  break;
1139
1151
  }
1140
1152
  } else {
1141
1153
  // Not a match, so rewind
1142
- (0, _extends2.default)(state, tokenStates.pop());
1154
+ (0, _extends2["default"])(state, tokenStates.pop());
1143
1155
  break;
1144
1156
  }
1145
1157
  } else {
@@ -1787,7 +1799,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
1787
1799
  function createSyntaxError(state, message) {
1788
1800
  var c = col(state);
1789
1801
  var error = new SyntaxError(message + ' (char ' + c + ')');
1790
- error.char = c;
1802
+ error["char"] = c;
1791
1803
  return error;
1792
1804
  }
1793
1805
  /**
@@ -1802,10 +1814,16 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
1802
1814
  function createError(state, message) {
1803
1815
  var c = col(state);
1804
1816
  var error = new SyntaxError(message + ' (char ' + c + ')');
1805
- error.char = c;
1817
+ error["char"] = c;
1806
1818
  return error;
1807
- }
1819
+ } // Now that we can parse, automatically convert strings to Nodes by parsing
1820
+
1808
1821
 
1822
+ typed.addConversion({
1823
+ from: 'string',
1824
+ to: 'Node',
1825
+ convert: parse
1826
+ });
1809
1827
  return parse;
1810
1828
  });
1811
1829
  exports.createParse = createParse;
@@ -14,7 +14,7 @@ var _errorTransform = require("./utils/errorTransform.js");
14
14
  var _lastDimToZeroBase = require("./utils/lastDimToZeroBase.js");
15
15
 
16
16
  var name = 'std';
17
- var dependencies = ['typed', 'sqrt', 'variance'];
17
+ var dependencies = ['typed', 'map', 'sqrt', 'variance'];
18
18
  /**
19
19
  * Attach a transform function to math.std
20
20
  * Adds a property transform containing the transform function.
@@ -25,10 +25,12 @@ var dependencies = ['typed', 'sqrt', 'variance'];
25
25
 
26
26
  var createStdTransform = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
27
27
  var typed = _ref.typed,
28
+ map = _ref.map,
28
29
  sqrt = _ref.sqrt,
29
30
  variance = _ref.variance;
30
31
  var std = (0, _std.createStd)({
31
32
  typed: typed,
33
+ map: map,
32
34
  sqrt: sqrt,
33
35
  variance: variance
34
36
  });
@@ -1725,6 +1725,12 @@ Object.defineProperty(exports, "createSimplify", {
1725
1725
  return _simplify.createSimplify;
1726
1726
  }
1727
1727
  });
1728
+ Object.defineProperty(exports, "createSimplifyConstant", {
1729
+ enumerable: true,
1730
+ get: function get() {
1731
+ return _simplifyConstant.createSimplifyConstant;
1732
+ }
1733
+ });
1728
1734
  Object.defineProperty(exports, "createSimplifyCore", {
1729
1735
  enumerable: true,
1730
1736
  get: function get() {
@@ -2568,6 +2574,8 @@ var _leafCount = require("./function/algebra/leafCount.js");
2568
2574
 
2569
2575
  var _simplify = require("./function/algebra/simplify.js");
2570
2576
 
2577
+ var _simplifyConstant = require("./function/algebra/simplifyConstant.js");
2578
+
2571
2579
  var _simplifyCore = require("./function/algebra/simplifyCore.js");
2572
2580
 
2573
2581
  var _resolve = require("./function/algebra/resolve.js");
@@ -640,6 +640,12 @@ Object.defineProperty(exports, "createSimplify", {
640
640
  return _simplify.createSimplify;
641
641
  }
642
642
  });
643
+ Object.defineProperty(exports, "createSimplifyConstant", {
644
+ enumerable: true,
645
+ get: function get() {
646
+ return _simplifyConstant.createSimplifyConstant;
647
+ }
648
+ });
643
649
  Object.defineProperty(exports, "createSimplifyCore", {
644
650
  enumerable: true,
645
651
  get: function get() {
@@ -771,7 +777,8 @@ Object.defineProperty(exports, "createVersion", {
771
777
  return _constants.createVersion;
772
778
  }
773
779
  });
774
- exports.createXor = exports.createXgcd = void 0;
780
+ exports.createXgcd = void 0;
781
+ exports.createXor = void 0;
775
782
 
776
783
  var _index = require("./plain/number/index.js");
777
784
 
@@ -797,6 +804,8 @@ var _resolve = require("./function/algebra/resolve.js");
797
804
 
798
805
  var _simplify = require("./function/algebra/simplify.js");
799
806
 
807
+ var _simplifyConstant = require("./function/algebra/simplifyConstant.js");
808
+
800
809
  var _simplifyCore = require("./function/algebra/simplifyCore.js");
801
810
 
802
811
  var _derivative = require("./function/algebra/derivative.js");
@@ -73,7 +73,7 @@ var createQr = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function
73
73
  * @return {{Q: Array | Matrix, R: Array | Matrix}} Q: the orthogonal
74
74
  * matrix and R: the upper triangular matrix
75
75
  */
76
- return (0, _extends2.default)(typed(name, {
76
+ return (0, _extends2["default"])(typed(name, {
77
77
  DenseMatrix: function DenseMatrix(m) {
78
78
  return _denseQR(m);
79
79
  },
@@ -63,39 +63,26 @@ var createDerivative = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
63
63
  * be simplified.
64
64
  * @return {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} The derivative of `expr`
65
65
  */
66
- var derivative = typed('derivative', {
67
- 'Node, SymbolNode, Object': function NodeSymbolNodeObject(expr, variable, options) {
68
- var constNodes = {};
69
- constTag(constNodes, expr, variable.name);
66
+ function plainDerivative(expr, variable) {
67
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
68
+ simplify: true
69
+ };
70
+ var constNodes = {};
71
+ constTag(constNodes, expr, variable.name);
70
72
 
71
- var res = _derivative(expr, constNodes);
73
+ var res = _derivative(expr, constNodes);
72
74
 
73
- return options.simplify ? simplify(res) : res;
74
- },
75
- 'Node, SymbolNode': function NodeSymbolNode(expr, variable) {
76
- return this(expr, variable, {
77
- simplify: true
78
- });
79
- },
80
- 'string, SymbolNode': function stringSymbolNode(expr, variable) {
81
- return this(parse(expr), variable);
82
- },
83
- 'string, SymbolNode, Object': function stringSymbolNodeObject(expr, variable, options) {
84
- return this(parse(expr), variable, options);
85
- },
86
- 'string, string': function stringString(expr, variable) {
87
- return this(parse(expr), parse(variable));
88
- },
89
- 'string, string, Object': function stringStringObject(expr, variable, options) {
90
- return this(parse(expr), parse(variable), options);
91
- },
92
- 'Node, string': function NodeString(expr, variable) {
93
- return this(expr, parse(variable));
94
- },
95
- 'Node, string, Object': function NodeStringObject(expr, variable, options) {
96
- return this(expr, parse(variable), options);
97
- } // TODO: replace the 8 signatures above with 4 as soon as typed-function supports optional arguments
75
+ return options.simplify ? simplify(res) : res;
76
+ }
98
77
 
78
+ typed.addConversion({
79
+ from: 'identifier',
80
+ to: 'SymbolNode',
81
+ convert: parse
82
+ });
83
+ var derivative = typed(name, {
84
+ 'Node, SymbolNode': plainDerivative,
85
+ 'Node, SymbolNode, Object': plainDerivative
99
86
  /* TODO: implement and test syntax with order of derivatives -> implement as an option {order: number}
100
87
  'Node, SymbolNode, ConstantNode': function (expr, variable, {order}) {
101
88
  let res = expr
@@ -109,6 +96,11 @@ var createDerivative = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
109
96
  */
110
97
 
111
98
  });
99
+ typed.removeConversion({
100
+ from: 'identifier',
101
+ to: 'SymbolNode',
102
+ convert: parse
103
+ });
112
104
  derivative._simplify = true;
113
105
 
114
106
  derivative.toTex = function (deriv) {
@@ -55,9 +55,6 @@ var createLeafCount = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
55
55
 
56
56
 
57
57
  return typed(name, {
58
- string: function string(expr) {
59
- return this(parse(expr));
60
- },
61
58
  Node: function Node(expr) {
62
59
  return countLeaves(expr);
63
60
  }