mathjs 10.6.4 → 11.1.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 (454) hide show
  1. package/HISTORY.md +79 -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/construction/index.js +1 -1
  39. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
  40. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
  41. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  42. package/lib/cjs/expression/node/AccessorNode.js +216 -173
  43. package/lib/cjs/expression/node/ArrayNode.js +206 -160
  44. package/lib/cjs/expression/node/AssignmentNode.js +321 -270
  45. package/lib/cjs/expression/node/BlockNode.js +223 -172
  46. package/lib/cjs/expression/node/ConditionalNode.js +253 -193
  47. package/lib/cjs/expression/node/ConstantNode.js +216 -171
  48. package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
  49. package/lib/cjs/expression/node/FunctionNode.js +456 -416
  50. package/lib/cjs/expression/node/IndexNode.js +256 -210
  51. package/lib/cjs/expression/node/Node.js +411 -378
  52. package/lib/cjs/expression/node/ObjectNode.js +223 -178
  53. package/lib/cjs/expression/node/OperatorNode.js +474 -397
  54. package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
  55. package/lib/cjs/expression/node/RangeNode.js +272 -224
  56. package/lib/cjs/expression/node/RelationalNode.js +246 -195
  57. package/lib/cjs/expression/node/SymbolNode.js +219 -172
  58. package/lib/cjs/expression/node/utils/access.js +1 -1
  59. package/lib/cjs/expression/node/utils/assign.js +1 -1
  60. package/lib/cjs/expression/operators.js +117 -23
  61. package/lib/cjs/expression/parse.js +37 -19
  62. package/lib/cjs/expression/transform/std.transform.js +3 -1
  63. package/lib/cjs/factoriesAny.js +8 -0
  64. package/lib/cjs/factoriesNumber.js +10 -1
  65. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  66. package/lib/cjs/function/algebra/derivative.js +25 -33
  67. package/lib/cjs/function/algebra/leafCount.js +0 -3
  68. package/lib/cjs/function/algebra/rationalize.js +78 -108
  69. package/lib/cjs/function/algebra/resolve.js +53 -16
  70. package/lib/cjs/function/algebra/simplify/util.js +1 -1
  71. package/lib/cjs/function/algebra/simplify.js +90 -115
  72. package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
  73. package/lib/cjs/function/algebra/simplifyCore.js +196 -93
  74. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  75. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  76. package/lib/cjs/function/algebra/symbolicEqual.js +14 -32
  77. package/lib/cjs/function/arithmetic/abs.js +7 -14
  78. package/lib/cjs/function/arithmetic/add.js +26 -70
  79. package/lib/cjs/function/arithmetic/addScalar.js +17 -9
  80. package/lib/cjs/function/arithmetic/cbrt.js +7 -11
  81. package/lib/cjs/function/arithmetic/ceil.js +50 -40
  82. package/lib/cjs/function/arithmetic/cube.js +5 -10
  83. package/lib/cjs/function/arithmetic/divide.js +7 -7
  84. package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
  85. package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
  86. package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
  87. package/lib/cjs/function/arithmetic/dotPow.js +30 -63
  88. package/lib/cjs/function/arithmetic/exp.js +8 -12
  89. package/lib/cjs/function/arithmetic/expm1.js +10 -10
  90. package/lib/cjs/function/arithmetic/fix.js +34 -28
  91. package/lib/cjs/function/arithmetic/floor.js +51 -41
  92. package/lib/cjs/function/arithmetic/gcd.js +27 -68
  93. package/lib/cjs/function/arithmetic/hypot.js +9 -5
  94. package/lib/cjs/function/arithmetic/invmod.js +2 -2
  95. package/lib/cjs/function/arithmetic/lcm.js +27 -68
  96. package/lib/cjs/function/arithmetic/log.js +10 -12
  97. package/lib/cjs/function/arithmetic/log10.js +5 -3
  98. package/lib/cjs/function/arithmetic/log1p.js +11 -7
  99. package/lib/cjs/function/arithmetic/log2.js +5 -3
  100. package/lib/cjs/function/arithmetic/mod.js +22 -64
  101. package/lib/cjs/function/arithmetic/multiply.js +40 -35
  102. package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
  103. package/lib/cjs/function/arithmetic/norm.js +1 -5
  104. package/lib/cjs/function/arithmetic/nthRoot.js +83 -95
  105. package/lib/cjs/function/arithmetic/nthRoots.js +2 -2
  106. package/lib/cjs/function/arithmetic/round.js +56 -42
  107. package/lib/cjs/function/arithmetic/sign.js +14 -10
  108. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  109. package/lib/cjs/function/arithmetic/square.js +6 -10
  110. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  111. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  112. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  113. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  114. package/lib/cjs/function/bitwise/bitNot.js +6 -4
  115. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  116. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  117. package/lib/cjs/function/bitwise/leftShift.js +69 -82
  118. package/lib/cjs/function/bitwise/rightArithShift.js +69 -82
  119. package/lib/cjs/function/bitwise/rightLogShift.js +69 -82
  120. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  121. package/lib/cjs/function/complex/arg.js +5 -3
  122. package/lib/cjs/function/complex/conj.js +6 -7
  123. package/lib/cjs/function/complex/im.js +7 -8
  124. package/lib/cjs/function/complex/re.js +6 -10
  125. package/lib/cjs/function/geometry/distance.js +2 -2
  126. package/lib/cjs/function/logical/and.js +74 -80
  127. package/lib/cjs/function/logical/not.js +13 -6
  128. package/lib/cjs/function/logical/or.js +21 -63
  129. package/lib/cjs/function/logical/xor.js +21 -63
  130. package/lib/cjs/function/matrix/diff.js +11 -8
  131. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  132. package/lib/cjs/function/matrix/fft.js +2 -2
  133. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  134. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  135. package/lib/cjs/function/matrix/ones.js +2 -1
  136. package/lib/cjs/function/matrix/rotate.js +5 -5
  137. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  138. package/lib/cjs/function/matrix/transpose.js +47 -48
  139. package/lib/cjs/function/matrix/zeros.js +2 -1
  140. package/lib/cjs/function/probability/factorial.js +5 -3
  141. package/lib/cjs/function/probability/gamma.js +38 -40
  142. package/lib/cjs/function/probability/kldivergence.js +5 -2
  143. package/lib/cjs/function/probability/lgamma.js +30 -30
  144. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  145. package/lib/cjs/function/relational/compare.js +21 -67
  146. package/lib/cjs/function/relational/compareNatural.js +59 -54
  147. package/lib/cjs/function/relational/compareText.js +10 -43
  148. package/lib/cjs/function/relational/compareUnits.js +24 -0
  149. package/lib/cjs/function/relational/equal.js +19 -80
  150. package/lib/cjs/function/relational/equalScalar.js +7 -9
  151. package/lib/cjs/function/relational/larger.js +21 -67
  152. package/lib/cjs/function/relational/largerEq.js +21 -67
  153. package/lib/cjs/function/relational/smaller.js +21 -67
  154. package/lib/cjs/function/relational/smallerEq.js +21 -67
  155. package/lib/cjs/function/relational/unequal.js +19 -80
  156. package/lib/cjs/function/special/erf.js +5 -3
  157. package/lib/cjs/function/statistics/std.js +11 -2
  158. package/lib/cjs/function/string/format.js +2 -2
  159. package/lib/cjs/function/string/hex.js +1 -2
  160. package/lib/cjs/function/trigonometry/acos.js +4 -8
  161. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  162. package/lib/cjs/function/trigonometry/acot.js +6 -11
  163. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  164. package/lib/cjs/function/trigonometry/acsc.js +6 -11
  165. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  166. package/lib/cjs/function/trigonometry/asec.js +6 -10
  167. package/lib/cjs/function/trigonometry/asech.js +4 -8
  168. package/lib/cjs/function/trigonometry/asin.js +5 -10
  169. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  170. package/lib/cjs/function/trigonometry/atan.js +5 -11
  171. package/lib/cjs/function/trigonometry/atan2.js +25 -63
  172. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  173. package/lib/cjs/function/trigonometry/cos.js +11 -20
  174. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  175. package/lib/cjs/function/trigonometry/cot.js +9 -15
  176. package/lib/cjs/function/trigonometry/coth.js +4 -15
  177. package/lib/cjs/function/trigonometry/csc.js +11 -17
  178. package/lib/cjs/function/trigonometry/csch.js +4 -15
  179. package/lib/cjs/function/trigonometry/sec.js +11 -17
  180. package/lib/cjs/function/trigonometry/sech.js +4 -15
  181. package/lib/cjs/function/trigonometry/sin.js +11 -21
  182. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  183. package/lib/cjs/function/trigonometry/tan.js +11 -21
  184. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  185. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  186. package/lib/cjs/function/unit/to.js +7 -41
  187. package/lib/cjs/function/utils/clone.js +1 -1
  188. package/lib/cjs/function/utils/hasNumericValue.js +5 -1
  189. package/lib/cjs/function/utils/isInteger.js +6 -4
  190. package/lib/cjs/function/utils/isNaN.js +1 -1
  191. package/lib/cjs/function/utils/isNegative.js +11 -7
  192. package/lib/cjs/function/utils/isNumeric.js +6 -4
  193. package/lib/cjs/function/utils/isPositive.js +11 -7
  194. package/lib/cjs/function/utils/isPrime.js +5 -3
  195. package/lib/cjs/function/utils/isZero.js +21 -17
  196. package/lib/cjs/function/utils/numeric.js +11 -4
  197. package/lib/cjs/function/utils/typeOf.js +38 -44
  198. package/lib/cjs/header.js +2 -2
  199. package/lib/cjs/plain/bignumber/index.js +1 -1
  200. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  201. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  202. package/lib/cjs/type/boolean.js +7 -5
  203. package/lib/cjs/type/chain/Chain.js +23 -3
  204. package/lib/cjs/type/complex/Complex.js +18 -14
  205. package/lib/cjs/type/complex/function/complex.js +6 -4
  206. package/lib/cjs/type/fraction/Fraction.js +10 -6
  207. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  208. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  209. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  210. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  211. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  213. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  214. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  217. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  218. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  219. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  220. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  221. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  222. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  223. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  224. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  225. package/lib/cjs/type/number.js +6 -4
  226. package/lib/cjs/type/string.js +7 -5
  227. package/lib/cjs/type/unit/Unit.js +98 -45
  228. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  229. package/lib/cjs/type/unit/function/unit.js +14 -5
  230. package/lib/cjs/utils/customs.js +2 -2
  231. package/lib/cjs/utils/emitter.js +1 -1
  232. package/lib/cjs/utils/function.js +2 -2
  233. package/lib/cjs/utils/is.js +27 -25
  234. package/lib/cjs/utils/latex.js +3 -3
  235. package/lib/cjs/utils/lruQueue.js +1 -1
  236. package/lib/cjs/utils/map.js +3 -3
  237. package/lib/cjs/utils/object.js +2 -2
  238. package/lib/cjs/utils/snapshot.js +30 -57
  239. package/lib/cjs/utils/string.js +3 -3
  240. package/lib/cjs/version.js +1 -1
  241. package/lib/esm/core/create.js +2 -1
  242. package/lib/esm/core/function/import.js +2 -12
  243. package/lib/esm/core/function/typed.js +47 -11
  244. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  247. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  249. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  250. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  251. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  252. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  253. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  254. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  255. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  256. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  257. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  258. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  259. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  260. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  261. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  262. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  263. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  264. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  265. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  266. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  267. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  268. package/lib/esm/expression/embeddedDocs/construction/index.js +1 -1
  269. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  270. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  271. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  272. package/lib/esm/expression/node/AccessorNode.js +158 -153
  273. package/lib/esm/expression/node/ArrayNode.js +162 -154
  274. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  275. package/lib/esm/expression/node/BlockNode.js +177 -163
  276. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  277. package/lib/esm/expression/node/ConstantNode.js +171 -163
  278. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  279. package/lib/esm/expression/node/FunctionNode.js +407 -407
  280. package/lib/esm/expression/node/IndexNode.js +206 -198
  281. package/lib/esm/expression/node/Node.js +325 -325
  282. package/lib/esm/expression/node/ObjectNode.js +166 -157
  283. package/lib/esm/expression/node/OperatorNode.js +414 -377
  284. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  285. package/lib/esm/expression/node/RangeNode.js +221 -212
  286. package/lib/esm/expression/node/RelationalNode.js +190 -176
  287. package/lib/esm/expression/node/SymbolNode.js +161 -152
  288. package/lib/esm/expression/operators.js +96 -4
  289. package/lib/esm/expression/parse.js +25 -7
  290. package/lib/esm/expression/transform/std.transform.js +3 -1
  291. package/lib/esm/factoriesAny.js +1 -0
  292. package/lib/esm/factoriesNumber.js +1 -0
  293. package/lib/esm/function/algebra/derivative.js +25 -33
  294. package/lib/esm/function/algebra/leafCount.js +0 -3
  295. package/lib/esm/function/algebra/rationalize.js +83 -114
  296. package/lib/esm/function/algebra/resolve.js +25 -16
  297. package/lib/esm/function/algebra/simplify.js +85 -113
  298. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  299. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  300. package/lib/esm/function/algebra/symbolicEqual.js +14 -32
  301. package/lib/esm/function/arithmetic/abs.js +3 -16
  302. package/lib/esm/function/arithmetic/add.js +21 -65
  303. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  304. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  305. package/lib/esm/function/arithmetic/ceil.js +25 -25
  306. package/lib/esm/function/arithmetic/cube.js +5 -9
  307. package/lib/esm/function/arithmetic/divide.js +7 -7
  308. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  309. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  310. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  311. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  312. package/lib/esm/function/arithmetic/exp.js +8 -11
  313. package/lib/esm/function/arithmetic/expm1.js +10 -9
  314. package/lib/esm/function/arithmetic/fix.js +18 -18
  315. package/lib/esm/function/arithmetic/floor.js +26 -26
  316. package/lib/esm/function/arithmetic/gcd.js +26 -70
  317. package/lib/esm/function/arithmetic/hypot.js +7 -6
  318. package/lib/esm/function/arithmetic/invmod.js +1 -1
  319. package/lib/esm/function/arithmetic/lcm.js +26 -70
  320. package/lib/esm/function/arithmetic/log.js +7 -10
  321. package/lib/esm/function/arithmetic/log10.js +1 -3
  322. package/lib/esm/function/arithmetic/log1p.js +4 -6
  323. package/lib/esm/function/arithmetic/log2.js +1 -3
  324. package/lib/esm/function/arithmetic/mod.js +21 -62
  325. package/lib/esm/function/arithmetic/multiply.js +23 -27
  326. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  327. package/lib/esm/function/arithmetic/norm.js +0 -4
  328. package/lib/esm/function/arithmetic/nthRoot.js +41 -76
  329. package/lib/esm/function/arithmetic/nthRoots.js +2 -2
  330. package/lib/esm/function/arithmetic/round.js +26 -28
  331. package/lib/esm/function/arithmetic/sign.js +5 -7
  332. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  333. package/lib/esm/function/arithmetic/square.js +6 -9
  334. package/lib/esm/function/arithmetic/subtract.js +31 -95
  335. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  336. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  337. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  338. package/lib/esm/function/bitwise/bitNot.js +2 -4
  339. package/lib/esm/function/bitwise/bitOr.js +16 -59
  340. package/lib/esm/function/bitwise/bitXor.js +16 -59
  341. package/lib/esm/function/bitwise/leftShift.js +39 -61
  342. package/lib/esm/function/bitwise/rightArithShift.js +39 -61
  343. package/lib/esm/function/bitwise/rightLogShift.js +39 -61
  344. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  345. package/lib/esm/function/complex/arg.js +1 -3
  346. package/lib/esm/function/complex/conj.js +3 -12
  347. package/lib/esm/function/complex/im.js +4 -15
  348. package/lib/esm/function/complex/re.js +3 -15
  349. package/lib/esm/function/geometry/distance.js +2 -2
  350. package/lib/esm/function/logical/and.js +35 -57
  351. package/lib/esm/function/logical/not.js +3 -6
  352. package/lib/esm/function/logical/or.js +16 -61
  353. package/lib/esm/function/logical/xor.js +16 -61
  354. package/lib/esm/function/matrix/diff.js +3 -8
  355. package/lib/esm/function/matrix/ones.js +2 -1
  356. package/lib/esm/function/matrix/rotate.js +5 -5
  357. package/lib/esm/function/matrix/sqrtm.js +3 -2
  358. package/lib/esm/function/matrix/transpose.js +47 -50
  359. package/lib/esm/function/matrix/zeros.js +2 -1
  360. package/lib/esm/function/probability/factorial.js +1 -3
  361. package/lib/esm/function/probability/gamma.js +38 -39
  362. package/lib/esm/function/probability/kldivergence.js +3 -2
  363. package/lib/esm/function/probability/lgamma.js +29 -29
  364. package/lib/esm/function/relational/compare.js +21 -67
  365. package/lib/esm/function/relational/compareNatural.js +54 -49
  366. package/lib/esm/function/relational/compareText.js +10 -42
  367. package/lib/esm/function/relational/compareUnits.js +15 -0
  368. package/lib/esm/function/relational/equal.js +19 -79
  369. package/lib/esm/function/relational/equalScalar.js +6 -9
  370. package/lib/esm/function/relational/larger.js +23 -73
  371. package/lib/esm/function/relational/largerEq.js +23 -73
  372. package/lib/esm/function/relational/smaller.js +23 -73
  373. package/lib/esm/function/relational/smallerEq.js +23 -73
  374. package/lib/esm/function/relational/unequal.js +19 -79
  375. package/lib/esm/function/special/erf.js +1 -3
  376. package/lib/esm/function/statistics/std.js +10 -2
  377. package/lib/esm/function/string/format.js +2 -2
  378. package/lib/esm/function/string/hex.js +1 -2
  379. package/lib/esm/function/trigonometry/acos.js +4 -7
  380. package/lib/esm/function/trigonometry/acosh.js +2 -6
  381. package/lib/esm/function/trigonometry/acot.js +6 -10
  382. package/lib/esm/function/trigonometry/acoth.js +4 -7
  383. package/lib/esm/function/trigonometry/acsc.js +6 -10
  384. package/lib/esm/function/trigonometry/acsch.js +4 -7
  385. package/lib/esm/function/trigonometry/asec.js +6 -9
  386. package/lib/esm/function/trigonometry/asech.js +4 -7
  387. package/lib/esm/function/trigonometry/asin.js +5 -9
  388. package/lib/esm/function/trigonometry/asinh.js +4 -8
  389. package/lib/esm/function/trigonometry/atan.js +5 -10
  390. package/lib/esm/function/trigonometry/atan2.js +26 -65
  391. package/lib/esm/function/trigonometry/atanh.js +4 -8
  392. package/lib/esm/function/trigonometry/cos.js +11 -22
  393. package/lib/esm/function/trigonometry/cosh.js +5 -20
  394. package/lib/esm/function/trigonometry/cot.js +10 -20
  395. package/lib/esm/function/trigonometry/coth.js +6 -20
  396. package/lib/esm/function/trigonometry/csc.js +12 -22
  397. package/lib/esm/function/trigonometry/csch.js +6 -20
  398. package/lib/esm/function/trigonometry/sec.js +12 -22
  399. package/lib/esm/function/trigonometry/sech.js +6 -20
  400. package/lib/esm/function/trigonometry/sin.js +11 -23
  401. package/lib/esm/function/trigonometry/sinh.js +5 -21
  402. package/lib/esm/function/trigonometry/tan.js +11 -23
  403. package/lib/esm/function/trigonometry/tanh.js +5 -21
  404. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  405. package/lib/esm/function/unit/to.js +8 -43
  406. package/lib/esm/function/utils/clone.js +1 -1
  407. package/lib/esm/function/utils/hasNumericValue.js +3 -1
  408. package/lib/esm/function/utils/isInteger.js +2 -4
  409. package/lib/esm/function/utils/isNaN.js +1 -1
  410. package/lib/esm/function/utils/isNegative.js +3 -7
  411. package/lib/esm/function/utils/isNumeric.js +4 -10
  412. package/lib/esm/function/utils/isPositive.js +3 -7
  413. package/lib/esm/function/utils/isPrime.js +1 -3
  414. package/lib/esm/function/utils/isZero.js +13 -17
  415. package/lib/esm/function/utils/numeric.js +11 -4
  416. package/lib/esm/function/utils/typeOf.js +38 -44
  417. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  418. package/lib/esm/type/boolean.js +1 -3
  419. package/lib/esm/type/chain/Chain.js +23 -3
  420. package/lib/esm/type/complex/Complex.js +4 -0
  421. package/lib/esm/type/complex/function/complex.js +1 -3
  422. package/lib/esm/type/fraction/Fraction.js +4 -0
  423. package/lib/esm/type/fraction/function/fraction.js +1 -3
  424. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  425. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  426. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  427. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  428. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  429. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  430. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  431. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  432. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  433. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  434. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  435. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  436. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  437. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  438. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  439. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  440. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  441. package/lib/esm/type/number.js +1 -3
  442. package/lib/esm/type/string.js +1 -3
  443. package/lib/esm/type/unit/Unit.js +85 -36
  444. package/lib/esm/type/unit/function/createUnit.js +2 -1
  445. package/lib/esm/type/unit/function/unit.js +10 -5
  446. package/lib/esm/utils/is.js +18 -18
  447. package/lib/esm/utils/snapshot.js +22 -48
  448. package/lib/esm/version.js +1 -1
  449. package/package.json +22 -25
  450. package/types/index.d.ts +211 -180
  451. package/types/index.ts +358 -144
  452. package/types/tsconfig.json +4 -1
  453. package/lib/cjs/utils/polyfills.js +0 -14
  454. package/lib/esm/utils/polyfills.js +0 -12
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import { factory } from '../utils/factory.js';
3
- import { isAccessorNode, isConstantNode, isFunctionNode, isOperatorNode, isSymbolNode } from '../utils/is.js';
3
+ import { isAccessorNode, isConstantNode, isFunctionNode, isOperatorNode, isSymbolNode, rule2Node } from '../utils/is.js';
4
4
  import { deepMap } from '../utils/collection.js';
5
5
  import { hasOwnProperty } from '../utils/object.js';
6
6
  var name = 'parse';
@@ -614,7 +614,10 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
614
614
 
615
615
  if (state.token !== '' && state.token !== '\n' && state.token !== ';') {
616
616
  node = parseAssignment(state);
617
- node.comment = state.comment;
617
+
618
+ if (state.comment) {
619
+ node.comment = state.comment;
620
+ }
618
621
  } // TODO: simplify this loop
619
622
 
620
623
 
@@ -632,7 +635,11 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
632
635
 
633
636
  if (state.token !== '\n' && state.token !== ';' && state.token !== '') {
634
637
  node = parseAssignment(state);
635
- node.comment = state.comment;
638
+
639
+ if (state.comment) {
640
+ node.comment = state.comment;
641
+ }
642
+
636
643
  visible = state.token !== ';';
637
644
  blocks.push({
638
645
  node,
@@ -646,7 +653,10 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
646
653
  } else {
647
654
  if (!node) {
648
655
  node = new ConstantNode(undefined);
649
- node.comment = state.comment;
656
+
657
+ if (state.comment) {
658
+ node.comment = state.comment;
659
+ }
650
660
  }
651
661
 
652
662
  return node;
@@ -1088,8 +1098,10 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1088
1098
  }
1089
1099
  /**
1090
1100
  * Infamous "rule 2" as described in https://github.com/josdejong/mathjs/issues/792#issuecomment-361065370
1101
+ * And as amended in https://github.com/josdejong/mathjs/issues/2370#issuecomment-1054052164
1091
1102
  * Explicit division gets higher precedence than implicit multiplication
1092
- * when the division matches this pattern: [number] / [number] [symbol]
1103
+ * when the division matches this pattern:
1104
+ * [unaryPrefixOp]?[number] / [number] [symbol]
1093
1105
  * @return {Node} node
1094
1106
  * @private
1095
1107
  */
@@ -1102,7 +1114,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1102
1114
 
1103
1115
  while (true) {
1104
1116
  // Match the "number /" part of the pattern "number / number symbol"
1105
- if (state.token === '/' && isConstantNode(last)) {
1117
+ if (state.token === '/' && rule2Node(last)) {
1106
1118
  // Look ahead to see if the next token is a number
1107
1119
  tokenStates.push(_extends({}, state));
1108
1120
  getTokenSkipNewline(state); // Match the "number / number" part of the pattern
@@ -1796,7 +1808,13 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1796
1808
  var error = new SyntaxError(message + ' (char ' + c + ')');
1797
1809
  error.char = c;
1798
1810
  return error;
1799
- }
1811
+ } // Now that we can parse, automatically convert strings to Nodes by parsing
1812
+
1800
1813
 
1814
+ typed.addConversion({
1815
+ from: 'string',
1816
+ to: 'Node',
1817
+ convert: parse
1818
+ });
1801
1819
  return parse;
1802
1820
  });
@@ -3,7 +3,7 @@ import { createStd } from '../../function/statistics/std.js';
3
3
  import { errorTransform } from './utils/errorTransform.js';
4
4
  import { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';
5
5
  var name = 'std';
6
- var dependencies = ['typed', 'sqrt', 'variance'];
6
+ var dependencies = ['typed', 'map', 'sqrt', 'variance'];
7
7
  /**
8
8
  * Attach a transform function to math.std
9
9
  * Adds a property transform containing the transform function.
@@ -15,11 +15,13 @@ var dependencies = ['typed', 'sqrt', 'variance'];
15
15
  export var createStdTransform = /* #__PURE__ */factory(name, dependencies, _ref => {
16
16
  var {
17
17
  typed,
18
+ map,
18
19
  sqrt,
19
20
  variance
20
21
  } = _ref;
21
22
  var std = createStd({
22
23
  typed,
24
+ map,
23
25
  sqrt,
24
26
  variance
25
27
  });
@@ -248,6 +248,7 @@ export { createCatalan } from './function/combinatorics/catalan.js';
248
248
  export { createComposition } from './function/combinatorics/composition.js';
249
249
  export { createLeafCount } from './function/algebra/leafCount.js';
250
250
  export { createSimplify } from './function/algebra/simplify.js';
251
+ export { createSimplifyConstant } from './function/algebra/simplifyConstant.js';
251
252
  export { createSimplifyCore } from './function/algebra/simplifyCore.js';
252
253
  export { createResolve } from './function/algebra/resolve.js';
253
254
  export { createSymbolicEqual } from './function/algebra/symbolicEqual.js';
@@ -15,6 +15,7 @@ export { createChain } from './type/chain/function/chain.js'; // algebra
15
15
 
16
16
  export { createResolve } from './function/algebra/resolve.js';
17
17
  export { createSimplify } from './function/algebra/simplify.js';
18
+ export { createSimplifyConstant } from './function/algebra/simplifyConstant.js';
18
19
  export { createSimplifyCore } from './function/algebra/simplifyCore.js';
19
20
  export { createDerivative } from './function/algebra/derivative.js';
20
21
  export { createRationalize } from './function/algebra/rationalize.js'; // arithmetic
@@ -35,9 +35,9 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
35
35
  *
36
36
  * Examples:
37
37
  *
38
- * math.derivative('x^2', 'x') // Node {2 * x}
39
- * math.derivative('x^2', 'x', {simplify: false}) // Node {2 * 1 * x ^ (2 - 1)
40
- * math.derivative('sin(2x)', 'x')) // Node {2 * cos(2 * x)}
38
+ * math.derivative('x^2', 'x') // Node '2 * x'
39
+ * math.derivative('x^2', 'x', {simplify: false}) // Node '2 * 1 * x ^ (2 - 1)'
40
+ * math.derivative('sin(2x)', 'x')) // Node '2 * cos(2 * x)'
41
41
  * math.derivative('2*x', 'x').evaluate() // number 2
42
42
  * math.derivative('x^2', 'x').evaluate({x: 4}) // number 8
43
43
  * const f = math.parse('x^2')
@@ -56,39 +56,26 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
56
56
  * be simplified.
57
57
  * @return {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} The derivative of `expr`
58
58
  */
59
- var derivative = typed('derivative', {
60
- 'Node, SymbolNode, Object': function NodeSymbolNodeObject(expr, variable, options) {
61
- var constNodes = {};
62
- constTag(constNodes, expr, variable.name);
59
+ function plainDerivative(expr, variable) {
60
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
61
+ simplify: true
62
+ };
63
+ var constNodes = {};
64
+ constTag(constNodes, expr, variable.name);
63
65
 
64
- var res = _derivative(expr, constNodes);
66
+ var res = _derivative(expr, constNodes);
65
67
 
66
- return options.simplify ? simplify(res) : res;
67
- },
68
- 'Node, SymbolNode': function NodeSymbolNode(expr, variable) {
69
- return this(expr, variable, {
70
- simplify: true
71
- });
72
- },
73
- 'string, SymbolNode': function stringSymbolNode(expr, variable) {
74
- return this(parse(expr), variable);
75
- },
76
- 'string, SymbolNode, Object': function stringSymbolNodeObject(expr, variable, options) {
77
- return this(parse(expr), variable, options);
78
- },
79
- 'string, string': function stringString(expr, variable) {
80
- return this(parse(expr), parse(variable));
81
- },
82
- 'string, string, Object': function stringStringObject(expr, variable, options) {
83
- return this(parse(expr), parse(variable), options);
84
- },
85
- 'Node, string': function NodeString(expr, variable) {
86
- return this(expr, parse(variable));
87
- },
88
- 'Node, string, Object': function NodeStringObject(expr, variable, options) {
89
- return this(expr, parse(variable), options);
90
- } // TODO: replace the 8 signatures above with 4 as soon as typed-function supports optional arguments
68
+ return options.simplify ? simplify(res) : res;
69
+ }
91
70
 
71
+ typed.addConversion({
72
+ from: 'identifier',
73
+ to: 'SymbolNode',
74
+ convert: parse
75
+ });
76
+ var derivative = typed(name, {
77
+ 'Node, SymbolNode': plainDerivative,
78
+ 'Node, SymbolNode, Object': plainDerivative
92
79
  /* TODO: implement and test syntax with order of derivatives -> implement as an option {order: number}
93
80
  'Node, SymbolNode, ConstantNode': function (expr, variable, {order}) {
94
81
  let res = expr
@@ -102,6 +89,11 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
102
89
  */
103
90
 
104
91
  });
92
+ typed.removeConversion({
93
+ from: 'identifier',
94
+ to: 'SymbolNode',
95
+ convert: parse
96
+ });
105
97
  derivative._simplify = true;
106
98
 
107
99
  derivative.toTex = function (deriv) {
@@ -49,9 +49,6 @@ export var createLeafCount = /* #__PURE__ */factory(name, dependencies, _ref =>
49
49
 
50
50
 
51
51
  return typed(name, {
52
- string: function string(expr) {
53
- return this(parse(expr));
54
- },
55
52
  Node: function Node(expr) {
56
53
  return countLeaves(expr);
57
54
  }
@@ -1,8 +1,7 @@
1
1
  import { isInteger } from '../../utils/number.js';
2
2
  import { factory } from '../../utils/factory.js';
3
- import { createSimplifyConstant } from './simplify/simplifyConstant.js';
4
3
  var name = 'rationalize';
5
- var dependencies = ['config', 'typed', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'parse', 'simplifyCore', 'simplify', '?bignumber', '?fraction', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode', 'ParenthesisNode'];
4
+ var dependencies = ['config', 'typed', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'parse', 'simplifyConstant', 'simplifyCore', 'simplify', '?bignumber', '?fraction', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode', 'ParenthesisNode'];
6
5
  export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref => {
7
6
  var {
8
7
  config,
@@ -15,6 +14,7 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
15
14
  divide,
16
15
  pow,
17
16
  parse,
17
+ simplifyConstant,
18
18
  simplifyCore,
19
19
  simplify,
20
20
  fraction,
@@ -31,22 +31,7 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
31
31
  SymbolNode,
32
32
  ParenthesisNode
33
33
  } = _ref;
34
- var simplifyConstant = createSimplifyConstant({
35
- typed,
36
- config,
37
- mathWithTransform,
38
- matrix,
39
- fraction,
40
- bignumber,
41
- AccessorNode,
42
- ArrayNode,
43
- ConstantNode,
44
- FunctionNode,
45
- IndexNode,
46
- ObjectNode,
47
- OperatorNode,
48
- SymbolNode
49
- });
34
+
50
35
  /**
51
36
  * Transform a rationalizable expression in a rational fraction.
52
37
  * If rational fraction is one variable polynomial then converts
@@ -100,116 +85,100 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
100
85
  * {Expression Node} node simplified expression
101
86
  *
102
87
  */
88
+ function _rationalize(expr) {
89
+ var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
90
+ var detailed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
91
+ var setRules = rulesRationalize(); // Rules for change polynomial in near canonical form
103
92
 
104
- return typed(name, {
105
- string: function string(expr) {
106
- return this(parse(expr), {}, false);
107
- },
108
- 'string, boolean': function stringBoolean(expr, detailed) {
109
- return this(parse(expr), {}, detailed);
110
- },
111
- 'string, Object': function stringObject(expr, scope) {
112
- return this(parse(expr), scope, false);
113
- },
114
- 'string, Object, boolean': function stringObjectBoolean(expr, scope, detailed) {
115
- return this(parse(expr), scope, detailed);
116
- },
117
- Node: function Node(expr) {
118
- return this(expr, {}, false);
119
- },
120
- 'Node, boolean': function NodeBoolean(expr, detailed) {
121
- return this(expr, {}, detailed);
122
- },
123
- 'Node, Object': function NodeObject(expr, scope) {
124
- return this(expr, scope, false);
125
- },
126
- 'Node, Object, boolean': function NodeObjectBoolean(expr, scope, detailed) {
127
- var setRules = rulesRationalize(); // Rules for change polynomial in near canonical form
128
-
129
- var polyRet = polynomial(expr, scope, true, setRules.firstRules); // Check if expression is a rationalizable polynomial
130
-
131
- var nVars = polyRet.variables.length;
132
- var noExactFractions = {
133
- exactFractions: false
134
- };
135
- var withExactFractions = {
136
- exactFractions: true
137
- };
138
- expr = polyRet.expression;
139
-
140
- if (nVars >= 1) {
141
- // If expression in not a constant
142
- expr = expandPower(expr); // First expand power of polynomials (cannot be made from rules!)
143
-
144
- var sBefore; // Previous expression
145
-
146
- var rules;
147
- var eDistrDiv = true;
148
- var redoInic = false; // Apply the initial rules, including succ div rules:
149
-
150
- expr = simplify(expr, setRules.firstRules, {}, noExactFractions);
151
- var s;
152
-
153
- while (true) {
154
- // Alternate applying successive division rules and distr.div.rules
155
- // until there are no more changes:
156
- rules = eDistrDiv ? setRules.distrDivRules : setRules.sucDivRules;
157
- expr = simplify(expr, rules, {}, withExactFractions);
158
- eDistrDiv = !eDistrDiv; // Swap between Distr.Div and Succ. Div. Rules
159
-
160
- s = expr.toString();
161
-
162
- if (s === sBefore) {
163
- break; // No changes : end of the loop
164
- }
93
+ var polyRet = polynomial(expr, scope, true, setRules.firstRules); // Check if expression is a rationalizable polynomial
165
94
 
166
- redoInic = true;
167
- sBefore = s;
168
- }
95
+ var nVars = polyRet.variables.length;
96
+ var noExactFractions = {
97
+ exactFractions: false
98
+ };
99
+ var withExactFractions = {
100
+ exactFractions: true
101
+ };
102
+ expr = polyRet.expression;
169
103
 
170
- if (redoInic) {
171
- // Apply first rules again without succ div rules (if there are changes)
172
- expr = simplify(expr, setRules.firstRulesAgain, {}, noExactFractions);
173
- } // Apply final rules:
104
+ if (nVars >= 1) {
105
+ // If expression in not a constant
106
+ expr = expandPower(expr); // First expand power of polynomials (cannot be made from rules!)
174
107
 
108
+ var sBefore; // Previous expression
175
109
 
176
- expr = simplify(expr, setRules.finalRules, {}, noExactFractions);
177
- } // NVars >= 1
110
+ var rules;
111
+ var eDistrDiv = true;
112
+ var redoInic = false; // Apply the initial rules, including succ div rules:
178
113
 
114
+ expr = simplify(expr, setRules.firstRules, {}, noExactFractions);
115
+ var s;
179
116
 
180
- var coefficients = [];
181
- var retRationalize = {};
117
+ while (true) {
118
+ // Alternate applying successive division rules and distr.div.rules
119
+ // until there are no more changes:
120
+ rules = eDistrDiv ? setRules.distrDivRules : setRules.sucDivRules;
121
+ expr = simplify(expr, rules, {}, withExactFractions);
122
+ eDistrDiv = !eDistrDiv; // Swap between Distr.Div and Succ. Div. Rules
182
123
 
183
- if (expr.type === 'OperatorNode' && expr.isBinary() && expr.op === '/') {
184
- // Separate numerator from denominator
185
- if (nVars === 1) {
186
- expr.args[0] = polyToCanonical(expr.args[0], coefficients);
187
- expr.args[1] = polyToCanonical(expr.args[1]);
188
- }
124
+ s = expr.toString();
189
125
 
190
- if (detailed) {
191
- retRationalize.numerator = expr.args[0];
192
- retRationalize.denominator = expr.args[1];
193
- }
194
- } else {
195
- if (nVars === 1) {
196
- expr = polyToCanonical(expr, coefficients);
126
+ if (s === sBefore) {
127
+ break; // No changes : end of the loop
197
128
  }
198
129
 
199
- if (detailed) {
200
- retRationalize.numerator = expr;
201
- retRationalize.denominator = null;
202
- }
203
- } // nVars
130
+ redoInic = true;
131
+ sBefore = s;
132
+ }
133
+
134
+ if (redoInic) {
135
+ // Apply first rules again without succ div rules (if there are changes)
136
+ expr = simplify(expr, setRules.firstRulesAgain, {}, noExactFractions);
137
+ } // Apply final rules:
138
+
139
+
140
+ expr = simplify(expr, setRules.finalRules, {}, noExactFractions);
141
+ } // NVars >= 1
142
+
143
+
144
+ var coefficients = [];
145
+ var retRationalize = {};
204
146
 
147
+ if (expr.type === 'OperatorNode' && expr.isBinary() && expr.op === '/') {
148
+ // Separate numerator from denominator
149
+ if (nVars === 1) {
150
+ expr.args[0] = polyToCanonical(expr.args[0], coefficients);
151
+ expr.args[1] = polyToCanonical(expr.args[1]);
152
+ }
205
153
 
206
- if (!detailed) return expr;
207
- retRationalize.coefficients = coefficients;
208
- retRationalize.variables = polyRet.variables;
209
- retRationalize.expression = expr;
210
- return retRationalize;
211
- } // ^^^^^^^ end of rationalize ^^^^^^^^
154
+ if (detailed) {
155
+ retRationalize.numerator = expr.args[0];
156
+ retRationalize.denominator = expr.args[1];
157
+ }
158
+ } else {
159
+ if (nVars === 1) {
160
+ expr = polyToCanonical(expr, coefficients);
161
+ }
212
162
 
163
+ if (detailed) {
164
+ retRationalize.numerator = expr;
165
+ retRationalize.denominator = null;
166
+ }
167
+ } // nVars
168
+
169
+
170
+ if (!detailed) return expr;
171
+ retRationalize.coefficients = coefficients;
172
+ retRationalize.variables = polyRet.variables;
173
+ retRationalize.expression = expr;
174
+ return retRationalize;
175
+ }
176
+
177
+ return typed(name, {
178
+ Node: _rationalize,
179
+ 'Node, boolean': (expr, detailed) => _rationalize(expr, {}, detailed),
180
+ 'Node, Object': _rationalize,
181
+ 'Node, Object, boolean': _rationalize
213
182
  }); // end of typed rationalize
214
183
 
215
184
  /**
@@ -1,10 +1,11 @@
1
- import { createMap, isMap } from '../../utils/map.js';
1
+ import { createMap } from '../../utils/map.js';
2
2
  import { isFunctionNode, isNode, isOperatorNode, isParenthesisNode, isSymbolNode } from '../../utils/is.js';
3
3
  import { factory } from '../../utils/factory.js';
4
4
  var name = 'resolve';
5
- var dependencies = ['parse', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
5
+ var dependencies = ['typed', 'parse', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
6
6
  export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
7
7
  var {
8
+ typed,
8
9
  parse,
9
10
  ConstantNode,
10
11
  FunctionNode,
@@ -21,9 +22,9 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
21
22
  *
22
23
  * Examples:
23
24
  *
24
- * math.resolve('x + y', {x:1, y:2}) // Node {1 + 2}
25
- * math.resolve(math.parse('x+y'), {x:1, y:2}) // Node {1 + 2}
26
- * math.simplify('x+y', {x:2, y:'x+x'}).toString() // "6"
25
+ * math.resolve('x + y', {x:1, y:2}) // Node '1 + 2'
26
+ * math.resolve(math.parse('x+y'), {x:1, y:2}) // Node '1 + 2'
27
+ * math.simplify('x+y', {x:2, y: math.parse('x+x')}).toString() // "6"
27
28
  *
28
29
  * See also:
29
30
  *
@@ -38,7 +39,7 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
38
39
  * If there is a cyclic dependency among the variables in `scope`,
39
40
  * resolution is impossible and a ReferenceError is thrown.
40
41
  */
41
- function resolve(node, scope) {
42
+ function _resolve(node, scope) {
42
43
  var within = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Set();
43
44
 
44
45
  // note `within`:
@@ -48,10 +49,6 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
48
49
  return node;
49
50
  }
50
51
 
51
- if (!isMap(scope)) {
52
- scope = createMap(scope);
53
- }
54
-
55
52
  if (isSymbolNode(node)) {
56
53
  if (within.has(node.name)) {
57
54
  var variables = Array.from(within).join(', ');
@@ -63,7 +60,7 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
63
60
  if (isNode(value)) {
64
61
  var nextWithin = new Set(within);
65
62
  nextWithin.add(node.name);
66
- return resolve(value, scope, nextWithin);
63
+ return _resolve(value, scope, nextWithin);
67
64
  } else if (typeof value === 'number') {
68
65
  return parse(String(value));
69
66
  } else if (value !== undefined) {
@@ -73,14 +70,14 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
73
70
  }
74
71
  } else if (isOperatorNode(node)) {
75
72
  var args = node.args.map(function (arg) {
76
- return resolve(arg, scope, within);
73
+ return _resolve(arg, scope, within);
77
74
  });
78
75
  return new OperatorNode(node.op, node.fn, args, node.implicit);
79
76
  } else if (isParenthesisNode(node)) {
80
- return new ParenthesisNode(resolve(node.content, scope, within));
77
+ return new ParenthesisNode(_resolve(node.content, scope, within));
81
78
  } else if (isFunctionNode(node)) {
82
79
  var _args = node.args.map(function (arg) {
83
- return resolve(arg, scope, within);
80
+ return _resolve(arg, scope, within);
84
81
  });
85
82
 
86
83
  return new FunctionNode(node.name, _args);
@@ -88,8 +85,20 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
88
85
  // for some of the above special cases)
89
86
 
90
87
 
91
- return node.map(child => resolve(child, scope, within));
88
+ return node.map(child => _resolve(child, scope, within));
92
89
  }
93
90
 
94
- return resolve;
91
+ return typed('resolve', {
92
+ Node: _resolve,
93
+ 'Node, Map | null | undefined': _resolve,
94
+ 'Node, Object': (n, scope) => _resolve(n, createMap(scope)),
95
+ // For arrays and matrices, we map `self` rather than `_resolve`
96
+ // because resolve is fairly expensive anyway, and this way
97
+ // we get nice error messages if one entry in the array has wrong type.
98
+ 'Array | Matrix': typed.referToSelf(self => A => A.map(n => self(n))),
99
+ 'Array | Matrix, null | undefined': typed.referToSelf(self => A => A.map(n => self(n))),
100
+ 'Array, Object': typed.referTo('Array,Map', selfAM => (A, scope) => selfAM(A, createMap(scope))),
101
+ 'Matrix, Object': typed.referTo('Matrix,Map', selfMM => (A, scope) => selfMM(A, createMap(scope))),
102
+ 'Array | Matrix, Map': typed.referToSelf(self => (A, scope) => A.map(n => self(n, scope)))
103
+ });
95
104
  });