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
@@ -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
@@ -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
  });