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
@@ -9,10 +9,8 @@ var _number = require("../../utils/number.js");
9
9
 
10
10
  var _factory = require("../../utils/factory.js");
11
11
 
12
- var _simplifyConstant = require("./simplify/simplifyConstant.js");
13
-
14
12
  var name = 'rationalize';
15
- 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'];
13
+ 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'];
16
14
  var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
15
  var config = _ref.config,
18
16
  typed = _ref.typed,
@@ -24,6 +22,7 @@ var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
24
22
  divide = _ref.divide,
25
23
  pow = _ref.pow,
26
24
  parse = _ref.parse,
25
+ simplifyConstant = _ref.simplifyConstant,
27
26
  simplifyCore = _ref.simplifyCore,
28
27
  simplify = _ref.simplify,
29
28
  fraction = _ref.fraction,
@@ -39,22 +38,7 @@ var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
39
38
  OperatorNode = _ref.OperatorNode,
40
39
  SymbolNode = _ref.SymbolNode,
41
40
  ParenthesisNode = _ref.ParenthesisNode;
42
- var simplifyConstant = (0, _simplifyConstant.createSimplifyConstant)({
43
- typed: typed,
44
- config: config,
45
- mathWithTransform: mathWithTransform,
46
- matrix: matrix,
47
- fraction: fraction,
48
- bignumber: bignumber,
49
- AccessorNode: AccessorNode,
50
- ArrayNode: ArrayNode,
51
- ConstantNode: ConstantNode,
52
- FunctionNode: FunctionNode,
53
- IndexNode: IndexNode,
54
- ObjectNode: ObjectNode,
55
- OperatorNode: OperatorNode,
56
- SymbolNode: SymbolNode
57
- });
41
+
58
42
  /**
59
43
  * Transform a rationalizable expression in a rational fraction.
60
44
  * If rational fraction is one variable polynomial then converts
@@ -108,116 +92,102 @@ var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
108
92
  * {Expression Node} node simplified expression
109
93
  *
110
94
  */
95
+ function _rationalize(expr) {
96
+ var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
97
+ var detailed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
98
+ var setRules = rulesRationalize(); // Rules for change polynomial in near canonical form
111
99
 
112
- return typed(name, {
113
- string: function string(expr) {
114
- return this(parse(expr), {}, false);
115
- },
116
- 'string, boolean': function stringBoolean(expr, detailed) {
117
- return this(parse(expr), {}, detailed);
118
- },
119
- 'string, Object': function stringObject(expr, scope) {
120
- return this(parse(expr), scope, false);
121
- },
122
- 'string, Object, boolean': function stringObjectBoolean(expr, scope, detailed) {
123
- return this(parse(expr), scope, detailed);
124
- },
125
- Node: function Node(expr) {
126
- return this(expr, {}, false);
127
- },
128
- 'Node, boolean': function NodeBoolean(expr, detailed) {
129
- return this(expr, {}, detailed);
130
- },
131
- 'Node, Object': function NodeObject(expr, scope) {
132
- return this(expr, scope, false);
133
- },
134
- 'Node, Object, boolean': function NodeObjectBoolean(expr, scope, detailed) {
135
- var setRules = rulesRationalize(); // Rules for change polynomial in near canonical form
136
-
137
- var polyRet = polynomial(expr, scope, true, setRules.firstRules); // Check if expression is a rationalizable polynomial
100
+ var polyRet = polynomial(expr, scope, true, setRules.firstRules); // Check if expression is a rationalizable polynomial
138
101
 
139
- var nVars = polyRet.variables.length;
140
- var noExactFractions = {
141
- exactFractions: false
142
- };
143
- var withExactFractions = {
144
- exactFractions: true
145
- };
146
- expr = polyRet.expression;
147
-
148
- if (nVars >= 1) {
149
- // If expression in not a constant
150
- expr = expandPower(expr); // First expand power of polynomials (cannot be made from rules!)
102
+ var nVars = polyRet.variables.length;
103
+ var noExactFractions = {
104
+ exactFractions: false
105
+ };
106
+ var withExactFractions = {
107
+ exactFractions: true
108
+ };
109
+ expr = polyRet.expression;
151
110
 
152
- var sBefore; // Previous expression
111
+ if (nVars >= 1) {
112
+ // If expression in not a constant
113
+ expr = expandPower(expr); // First expand power of polynomials (cannot be made from rules!)
153
114
 
154
- var rules;
155
- var eDistrDiv = true;
156
- var redoInic = false; // Apply the initial rules, including succ div rules:
115
+ var sBefore; // Previous expression
157
116
 
158
- expr = simplify(expr, setRules.firstRules, {}, noExactFractions);
159
- var s;
117
+ var rules;
118
+ var eDistrDiv = true;
119
+ var redoInic = false; // Apply the initial rules, including succ div rules:
160
120
 
161
- while (true) {
162
- // Alternate applying successive division rules and distr.div.rules
163
- // until there are no more changes:
164
- rules = eDistrDiv ? setRules.distrDivRules : setRules.sucDivRules;
165
- expr = simplify(expr, rules, {}, withExactFractions);
166
- eDistrDiv = !eDistrDiv; // Swap between Distr.Div and Succ. Div. Rules
121
+ expr = simplify(expr, setRules.firstRules, {}, noExactFractions);
122
+ var s;
167
123
 
168
- s = expr.toString();
124
+ while (true) {
125
+ // Alternate applying successive division rules and distr.div.rules
126
+ // until there are no more changes:
127
+ rules = eDistrDiv ? setRules.distrDivRules : setRules.sucDivRules;
128
+ expr = simplify(expr, rules, {}, withExactFractions);
129
+ eDistrDiv = !eDistrDiv; // Swap between Distr.Div and Succ. Div. Rules
169
130
 
170
- if (s === sBefore) {
171
- break; // No changes : end of the loop
172
- }
131
+ s = expr.toString();
173
132
 
174
- redoInic = true;
175
- sBefore = s;
133
+ if (s === sBefore) {
134
+ break; // No changes : end of the loop
176
135
  }
177
136
 
178
- if (redoInic) {
179
- // Apply first rules again without succ div rules (if there are changes)
180
- expr = simplify(expr, setRules.firstRulesAgain, {}, noExactFractions);
181
- } // Apply final rules:
137
+ redoInic = true;
138
+ sBefore = s;
139
+ }
182
140
 
141
+ if (redoInic) {
142
+ // Apply first rules again without succ div rules (if there are changes)
143
+ expr = simplify(expr, setRules.firstRulesAgain, {}, noExactFractions);
144
+ } // Apply final rules:
183
145
 
184
- expr = simplify(expr, setRules.finalRules, {}, noExactFractions);
185
- } // NVars >= 1
186
146
 
147
+ expr = simplify(expr, setRules.finalRules, {}, noExactFractions);
148
+ } // NVars >= 1
187
149
 
188
- var coefficients = [];
189
- var retRationalize = {};
190
150
 
191
- if (expr.type === 'OperatorNode' && expr.isBinary() && expr.op === '/') {
192
- // Separate numerator from denominator
193
- if (nVars === 1) {
194
- expr.args[0] = polyToCanonical(expr.args[0], coefficients);
195
- expr.args[1] = polyToCanonical(expr.args[1]);
196
- }
151
+ var coefficients = [];
152
+ var retRationalize = {};
197
153
 
198
- if (detailed) {
199
- retRationalize.numerator = expr.args[0];
200
- retRationalize.denominator = expr.args[1];
201
- }
202
- } else {
203
- if (nVars === 1) {
204
- expr = polyToCanonical(expr, coefficients);
205
- }
154
+ if (expr.type === 'OperatorNode' && expr.isBinary() && expr.op === '/') {
155
+ // Separate numerator from denominator
156
+ if (nVars === 1) {
157
+ expr.args[0] = polyToCanonical(expr.args[0], coefficients);
158
+ expr.args[1] = polyToCanonical(expr.args[1]);
159
+ }
206
160
 
207
- if (detailed) {
208
- retRationalize.numerator = expr;
209
- retRationalize.denominator = null;
210
- }
211
- } // nVars
161
+ if (detailed) {
162
+ retRationalize.numerator = expr.args[0];
163
+ retRationalize.denominator = expr.args[1];
164
+ }
165
+ } else {
166
+ if (nVars === 1) {
167
+ expr = polyToCanonical(expr, coefficients);
168
+ }
169
+
170
+ if (detailed) {
171
+ retRationalize.numerator = expr;
172
+ retRationalize.denominator = null;
173
+ }
174
+ } // nVars
212
175
 
213
176
 
214
- if (!detailed) return expr;
215
- retRationalize.coefficients = coefficients;
216
- retRationalize.variables = polyRet.variables;
217
- retRationalize.expression = expr;
218
- return retRationalize;
219
- } // ^^^^^^^ end of rationalize ^^^^^^^^
177
+ if (!detailed) return expr;
178
+ retRationalize.coefficients = coefficients;
179
+ retRationalize.variables = polyRet.variables;
180
+ retRationalize.expression = expr;
181
+ return retRationalize;
182
+ }
220
183
 
184
+ return typed(name, {
185
+ Node: _rationalize,
186
+ 'Node, boolean': function NodeBoolean(expr, detailed) {
187
+ return _rationalize(expr, {}, detailed);
188
+ },
189
+ 'Node, Object': _rationalize,
190
+ 'Node, Object, boolean': _rationalize
221
191
  }); // end of typed rationalize
222
192
 
223
193
  /**
@@ -12,9 +12,10 @@ var _is = require("../../utils/is.js");
12
12
  var _factory = require("../../utils/factory.js");
13
13
 
14
14
  var name = 'resolve';
15
- var dependencies = ['parse', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
15
+ var dependencies = ['typed', 'parse', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
16
16
  var createResolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
- var parse = _ref.parse,
17
+ var typed = _ref.typed,
18
+ parse = _ref.parse,
18
19
  ConstantNode = _ref.ConstantNode,
19
20
  FunctionNode = _ref.FunctionNode,
20
21
  OperatorNode = _ref.OperatorNode,
@@ -29,9 +30,9 @@ var createResolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
29
30
  *
30
31
  * Examples:
31
32
  *
32
- * math.resolve('x + y', {x:1, y:2}) // Node {1 + 2}
33
- * math.resolve(math.parse('x+y'), {x:1, y:2}) // Node {1 + 2}
34
- * math.simplify('x+y', {x:2, y:'x+x'}).toString() // "6"
33
+ * math.resolve('x + y', {x:1, y:2}) // Node '1 + 2'
34
+ * math.resolve(math.parse('x+y'), {x:1, y:2}) // Node '1 + 2'
35
+ * math.simplify('x+y', {x:2, y: math.parse('x+x')}).toString() // "6"
35
36
  *
36
37
  * See also:
37
38
  *
@@ -46,7 +47,7 @@ var createResolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
46
47
  * If there is a cyclic dependency among the variables in `scope`,
47
48
  * resolution is impossible and a ReferenceError is thrown.
48
49
  */
49
- function resolve(node, scope) {
50
+ function _resolve(node, scope) {
50
51
  var within = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Set();
51
52
 
52
53
  // note `within`:
@@ -56,10 +57,6 @@ var createResolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
56
57
  return node;
57
58
  }
58
59
 
59
- if (!(0, _map.isMap)(scope)) {
60
- scope = (0, _map.createMap)(scope);
61
- }
62
-
63
60
  if ((0, _is.isSymbolNode)(node)) {
64
61
  if (within.has(node.name)) {
65
62
  var variables = Array.from(within).join(', ');
@@ -71,7 +68,7 @@ var createResolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
71
68
  if ((0, _is.isNode)(value)) {
72
69
  var nextWithin = new Set(within);
73
70
  nextWithin.add(node.name);
74
- return resolve(value, scope, nextWithin);
71
+ return _resolve(value, scope, nextWithin);
75
72
  } else if (typeof value === 'number') {
76
73
  return parse(String(value));
77
74
  } else if (value !== undefined) {
@@ -81,14 +78,14 @@ var createResolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
81
78
  }
82
79
  } else if ((0, _is.isOperatorNode)(node)) {
83
80
  var args = node.args.map(function (arg) {
84
- return resolve(arg, scope, within);
81
+ return _resolve(arg, scope, within);
85
82
  });
86
83
  return new OperatorNode(node.op, node.fn, args, node.implicit);
87
84
  } else if ((0, _is.isParenthesisNode)(node)) {
88
- return new ParenthesisNode(resolve(node.content, scope, within));
85
+ return new ParenthesisNode(_resolve(node.content, scope, within));
89
86
  } else if ((0, _is.isFunctionNode)(node)) {
90
87
  var _args = node.args.map(function (arg) {
91
- return resolve(arg, scope, within);
88
+ return _resolve(arg, scope, within);
92
89
  });
93
90
 
94
91
  return new FunctionNode(node.name, _args);
@@ -97,10 +94,50 @@ var createResolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
97
94
 
98
95
 
99
96
  return node.map(function (child) {
100
- return resolve(child, scope, within);
97
+ return _resolve(child, scope, within);
101
98
  });
102
99
  }
103
100
 
104
- return resolve;
101
+ return typed('resolve', {
102
+ Node: _resolve,
103
+ 'Node, Map | null | undefined': _resolve,
104
+ 'Node, Object': function NodeObject(n, scope) {
105
+ return _resolve(n, (0, _map.createMap)(scope));
106
+ },
107
+ // For arrays and matrices, we map `self` rather than `_resolve`
108
+ // because resolve is fairly expensive anyway, and this way
109
+ // we get nice error messages if one entry in the array has wrong type.
110
+ 'Array | Matrix': typed.referToSelf(function (self) {
111
+ return function (A) {
112
+ return A.map(function (n) {
113
+ return self(n);
114
+ });
115
+ };
116
+ }),
117
+ 'Array | Matrix, null | undefined': typed.referToSelf(function (self) {
118
+ return function (A) {
119
+ return A.map(function (n) {
120
+ return self(n);
121
+ });
122
+ };
123
+ }),
124
+ 'Array, Object': typed.referTo('Array,Map', function (selfAM) {
125
+ return function (A, scope) {
126
+ return selfAM(A, (0, _map.createMap)(scope));
127
+ };
128
+ }),
129
+ 'Matrix, Object': typed.referTo('Matrix,Map', function (selfMM) {
130
+ return function (A, scope) {
131
+ return selfMM(A, (0, _map.createMap)(scope));
132
+ };
133
+ }),
134
+ 'Array | Matrix, Map': typed.referToSelf(function (self) {
135
+ return function (A, scope) {
136
+ return A.map(function (n) {
137
+ return self(n, scope);
138
+ });
139
+ };
140
+ })
141
+ });
105
142
  });
106
143
  exports.createResolve = createResolve;
@@ -17,7 +17,7 @@ var _object = require("../../../utils/object.js");
17
17
 
18
18
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
19
 
20
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
20
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
21
 
22
22
  var name = 'simplifyUtil';
23
23
  var dependencies = ['FunctionNode', 'OperatorNode', 'SymbolNode'];
@@ -15,14 +15,12 @@ var _factory = require("../../utils/factory.js");
15
15
 
16
16
  var _util = require("./simplify/util.js");
17
17
 
18
- var _simplifyConstant = require("./simplify/simplifyConstant.js");
19
-
20
18
  var _object = require("../../utils/object.js");
21
19
 
22
20
  var _map = require("../../utils/map.js");
23
21
 
24
22
  var name = 'simplify';
25
- var dependencies = ['config', 'typed', 'parse', 'add', 'subtract', 'multiply', 'divide', 'pow', 'isZero', 'equal', 'resolve', 'simplifyCore', '?fraction', '?bignumber', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
23
+ var dependencies = ['config', 'typed', 'parse', 'add', 'subtract', 'multiply', 'divide', 'pow', 'isZero', 'equal', 'resolve', 'simplifyConstant', 'simplifyCore', '?fraction', '?bignumber', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
26
24
  var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
27
25
  var config = _ref.config,
28
26
  typed = _ref.typed,
@@ -35,6 +33,7 @@ var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
35
33
  isZero = _ref.isZero,
36
34
  equal = _ref.equal,
37
35
  resolve = _ref.resolve,
36
+ simplifyConstant = _ref.simplifyConstant,
38
37
  simplifyCore = _ref.simplifyCore,
39
38
  fraction = _ref.fraction,
40
39
  bignumber = _ref.bignumber,
@@ -49,22 +48,6 @@ var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
49
48
  OperatorNode = _ref.OperatorNode,
50
49
  ParenthesisNode = _ref.ParenthesisNode,
51
50
  SymbolNode = _ref.SymbolNode;
52
- var simplifyConstant = (0, _simplifyConstant.createSimplifyConstant)({
53
- typed: typed,
54
- config: config,
55
- mathWithTransform: mathWithTransform,
56
- matrix: matrix,
57
- fraction: fraction,
58
- bignumber: bignumber,
59
- AccessorNode: AccessorNode,
60
- ArrayNode: ArrayNode,
61
- ConstantNode: ConstantNode,
62
- FunctionNode: FunctionNode,
63
- IndexNode: IndexNode,
64
- ObjectNode: ObjectNode,
65
- OperatorNode: OperatorNode,
66
- SymbolNode: SymbolNode
67
- });
68
51
 
69
52
  var _createUtil = (0, _util.createUtil)({
70
53
  FunctionNode: FunctionNode,
@@ -110,7 +93,10 @@ var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
110
93
  * - 'v' - matches any Node that is not a ConstantNode
111
94
  *
112
95
  * The default list of rules is exposed on the function as `simplify.rules`
113
- * and can be used as a basis to built a set of custom rules.
96
+ * and can be used as a basis to built a set of custom rules. Note that since
97
+ * the `simplifyCore` function is in the default list of rules, by default
98
+ * simplify will convert any function calls in the expression that have
99
+ * operator equivalents to their operator forms.
114
100
  *
115
101
  * To specify a rule as a string, separate the left and right pattern by '->'
116
102
  * When specifying a rule as an object, the following keys are meaningful:
@@ -181,106 +167,35 @@ var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
181
167
  *
182
168
  * @param {Node | string} expr
183
169
  * The expression to be simplified
184
- * @param {Array<{l:string, r: string} | string | function>} [rules]
170
+ * @param {SimplifyRule[]} [rules]
185
171
  * Optional list with custom rules
172
+ * @param {Object} [scope] Optional scope with variables
173
+ * @param {SimplifyOptions} [options] Optional configuration settings
186
174
  * @return {Node} Returns the simplified form of `expr`
187
175
  */
188
176
 
189
177
 
178
+ typed.addConversion({
179
+ from: 'Object',
180
+ to: 'Map',
181
+ convert: _map.createMap
182
+ });
190
183
  var simplify = typed('simplify', {
191
- string: function string(expr) {
192
- return this(parse(expr), this.rules, (0, _map.createEmptyMap)(), {});
193
- },
194
- 'string, Map | Object': function stringMapObject(expr, scope) {
195
- return this(parse(expr), this.rules, scope, {});
196
- },
197
- 'string, Map | Object, Object': function stringMapObjectObject(expr, scope, options) {
198
- return this(parse(expr), this.rules, scope, options);
199
- },
200
- 'string, Array': function stringArray(expr, rules) {
201
- return this(parse(expr), rules, (0, _map.createEmptyMap)(), {});
202
- },
203
- 'string, Array, Map | Object': function stringArrayMapObject(expr, rules, scope) {
204
- return this(parse(expr), rules, scope, {});
205
- },
206
- 'string, Array, Map | Object, Object': function stringArrayMapObjectObject(expr, rules, scope, options) {
207
- return this(parse(expr), rules, scope, options);
208
- },
209
- 'Node, Map | Object': function NodeMapObject(expr, scope) {
210
- return this(expr, this.rules, scope, {});
211
- },
212
- 'Node, Map | Object, Object': function NodeMapObjectObject(expr, scope, options) {
213
- return this(expr, this.rules, scope, options);
214
- },
215
- Node: function Node(expr) {
216
- return this(expr, this.rules, (0, _map.createEmptyMap)(), {});
217
- },
218
- 'Node, Array': function NodeArray(expr, rules) {
219
- return this(expr, rules, (0, _map.createEmptyMap)(), {});
220
- },
221
- 'Node, Array, Map | Object': function NodeArrayMapObject(expr, rules, scope) {
222
- return this(expr, rules, scope, {});
184
+ Node: _simplify,
185
+ 'Node, Map': function NodeMap(expr, scope) {
186
+ return _simplify(expr, false, scope);
223
187
  },
224
- 'Node, Array, Object, Object': function NodeArrayObjectObject(expr, rules, scope, options) {
225
- return this(expr, rules, (0, _map.createMap)(scope), options);
188
+ 'Node, Map, Object': function NodeMapObject(expr, scope, options) {
189
+ return _simplify(expr, false, scope, options);
226
190
  },
227
- 'Node, Array, Map, Object': function NodeArrayMapObject(expr, rules, scope, options) {
228
- var debug = options.consoleDebug;
229
- rules = _buildRules(rules, options.context);
230
- var res = resolve(expr, scope);
231
- res = removeParens(res);
232
- var visited = {};
233
- var str = res.toString({
234
- parenthesis: 'all'
235
- });
236
-
237
- while (!visited[str]) {
238
- visited[str] = true;
239
- _lastsym = 0; // counter for placeholder symbols
240
-
241
- var laststr = str;
242
- if (debug) console.log('Working on: ', str);
243
-
244
- for (var i = 0; i < rules.length; i++) {
245
- var rulestr = '';
246
-
247
- if (typeof rules[i] === 'function') {
248
- res = rules[i](res, options);
249
- if (debug) rulestr = rules[i].name;
250
- } else {
251
- flatten(res, options.context);
252
- res = applyRule(res, rules[i], options.context);
253
-
254
- if (debug) {
255
- rulestr = "".concat(rules[i].l.toString(), " -> ").concat(rules[i].r.toString());
256
- }
257
- }
258
-
259
- if (debug) {
260
- var newstr = res.toString({
261
- parenthesis: 'all'
262
- });
263
-
264
- if (newstr !== laststr) {
265
- console.log('Applying', rulestr, 'produced', newstr);
266
- laststr = newstr;
267
- }
268
- }
269
- /* Use left-heavy binary tree internally,
270
- * since custom rule functions may expect it
271
- */
272
-
273
-
274
- unflattenl(res, options.context);
275
- }
276
-
277
- str = res.toString({
278
- parenthesis: 'all'
279
- });
280
- }
281
-
282
- return res;
283
- }
191
+ 'Node, Array': _simplify,
192
+ 'Node, Array, Map': _simplify,
193
+ 'Node, Array, Map, Object': _simplify
194
+ });
195
+ typed.removeConversion({
196
+ from: 'Object',
197
+ to: 'Map',
198
+ convert: _map.createMap
284
199
  });
285
200
  simplify.defaultContext = defaultContext;
286
201
  simplify.realContext = realContext;
@@ -294,8 +209,8 @@ var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
294
209
 
295
210
 
296
211
  var SUPPORTED_CONSTANTS = {
297
- true: true,
298
- false: true,
212
+ "true": true,
213
+ "false": true,
299
214
  e: true,
300
215
  i: true,
301
216
  Infinity: true,
@@ -739,7 +654,7 @@ var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
739
654
  for (var i = 0; i < rules.length; i++) {
740
655
  var rule = rules[i];
741
656
  var newRule = void 0;
742
- var ruleType = (0, _typeof2.default)(rule);
657
+ var ruleType = (0, _typeof2["default"])(rule);
743
658
 
744
659
  switch (ruleType) {
745
660
  case 'string':
@@ -775,6 +690,66 @@ var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
775
690
  return new SymbolNode('_p' + _lastsym++);
776
691
  }
777
692
 
693
+ function _simplify(expr, rules) {
694
+ var scope = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : (0, _map.createEmptyMap)();
695
+ var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
696
+ var debug = options.consoleDebug;
697
+ rules = _buildRules(rules || simplify.rules, options.context);
698
+ var res = resolve(expr, scope);
699
+ res = removeParens(res);
700
+ var visited = {};
701
+ var str = res.toString({
702
+ parenthesis: 'all'
703
+ });
704
+
705
+ while (!visited[str]) {
706
+ visited[str] = true;
707
+ _lastsym = 0; // counter for placeholder symbols
708
+
709
+ var laststr = str;
710
+ if (debug) console.log('Working on: ', str);
711
+
712
+ for (var i = 0; i < rules.length; i++) {
713
+ var rulestr = '';
714
+
715
+ if (typeof rules[i] === 'function') {
716
+ res = rules[i](res, options);
717
+ if (debug) rulestr = rules[i].name;
718
+ } else {
719
+ flatten(res, options.context);
720
+ res = applyRule(res, rules[i], options.context);
721
+
722
+ if (debug) {
723
+ rulestr = "".concat(rules[i].l.toString(), " -> ").concat(rules[i].r.toString());
724
+ }
725
+ }
726
+
727
+ if (debug) {
728
+ var newstr = res.toString({
729
+ parenthesis: 'all'
730
+ });
731
+
732
+ if (newstr !== laststr) {
733
+ console.log('Applying', rulestr, 'produced', newstr);
734
+ laststr = newstr;
735
+ }
736
+ }
737
+ /* Use left-heavy binary tree internally,
738
+ * since custom rule functions may expect it
739
+ */
740
+
741
+
742
+ unflattenl(res, options.context);
743
+ }
744
+
745
+ str = res.toString({
746
+ parenthesis: 'all'
747
+ });
748
+ }
749
+
750
+ return res;
751
+ }
752
+
778
753
  function mapRule(nodes, rule, context) {
779
754
  var resNodes = nodes;
780
755