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
@@ -9,24 +9,25 @@ exports.createSimplifyConstant = void 0;
9
9
 
10
10
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
11
 
12
- var _is = require("../../../utils/is.js");
12
+ var _is = require("../../utils/is.js");
13
13
 
14
- var _factory = require("../../../utils/factory.js");
14
+ var _factory = require("../../utils/factory.js");
15
15
 
16
- var _util = require("./util.js");
16
+ var _util = require("./simplify/util.js");
17
17
 
18
- var _noop = require("../../../utils/noop.js");
18
+ var _noop = require("../../utils/noop.js");
19
19
 
20
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
20
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
21
21
 
22
22
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
23
23
 
24
24
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
25
25
 
26
26
  var name = 'simplifyConstant';
27
- var dependencies = ['typed', 'config', 'mathWithTransform', 'matrix', '?fraction', '?bignumber', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode'];
27
+ var dependencies = ['typed', 'parse', 'config', 'mathWithTransform', 'matrix', '?fraction', '?bignumber', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode'];
28
28
  var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
29
29
  var typed = _ref.typed,
30
+ parse = _ref.parse,
30
31
  config = _ref.config,
31
32
  mathWithTransform = _ref.mathWithTransform,
32
33
  matrix = _ref.matrix,
@@ -50,10 +51,43 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
50
51
  isAssociative = _createUtil.isAssociative,
51
52
  allChildren = _createUtil.allChildren,
52
53
  createMakeNodeFunction = _createUtil.createMakeNodeFunction;
54
+ /**
55
+ * simplifyConstant() takes a mathjs expression (either a Node representing
56
+ * a parse tree or a string which it parses to produce a node), and replaces
57
+ * any subexpression of it consisting entirely of constants with the computed
58
+ * value of that subexpression.
59
+ *
60
+ * Syntax:
61
+ *
62
+ * simplifyConstant(expr)
63
+ * simplifyConstant(expr, options)
64
+ *
65
+ * Examples:
66
+ *
67
+ * math.simplifyConstant('x + 4*3/6') // Node "x + 2"
68
+ * math.simplifyConstant('z cos(0)') // Node "z 1"
69
+ * math.simplifyConstant('(5.2 + 1.08)t', {exactFractions: false}) // Node "6.28 t"
70
+ *
71
+ * See also:
72
+ *
73
+ * simplify, simplifyCore, resolve, derivative
74
+ *
75
+ * @param {Node | string} node
76
+ * The expression to be simplified
77
+ * @param {Object} options
78
+ * Simplification options, as per simplify()
79
+ * @return {Node} Returns expression with constant subexpressions evaluated
80
+ */
53
81
 
54
- function simplifyConstant(expr, options) {
55
- return _ensureNode(foldFraction(expr, options));
56
- }
82
+
83
+ var simplifyConstant = typed('simplifyConstant', {
84
+ Node: function Node(node) {
85
+ return _ensureNode(foldFraction(node, {}));
86
+ },
87
+ 'Node, Object': function NodeObject(expr, options) {
88
+ return _ensureNode(foldFraction(expr, options));
89
+ }
90
+ });
57
91
 
58
92
  function _removeFractions(thing) {
59
93
  if ((0, _is.isFraction)(thing)) {
@@ -348,7 +382,7 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
348
382
  return node;
349
383
 
350
384
  case 'ConstantNode':
351
- switch ((0, _typeof2.default)(node.value)) {
385
+ switch ((0, _typeof2["default"])(node.value)) {
352
386
  case 'number':
353
387
  return _toNumber(node.value, options);
354
388
 
@@ -7,14 +7,18 @@ exports.createSimplifyCore = void 0;
7
7
 
8
8
  var _is = require("../../utils/is.js");
9
9
 
10
+ var _operators = require("../../expression/operators.js");
11
+
10
12
  var _util = require("./simplify/util.js");
11
13
 
12
14
  var _factory = require("../../utils/factory.js");
13
15
 
14
16
  var name = 'simplifyCore';
15
- var dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
17
+ var dependencies = ['typed', 'parse', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
16
18
  var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
- var equal = _ref.equal,
19
+ var typed = _ref.typed,
20
+ parse = _ref.parse,
21
+ equal = _ref.equal,
18
22
  isZero = _ref.isZero,
19
23
  add = _ref.add,
20
24
  subtract = _ref.subtract,
@@ -32,6 +36,13 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
32
36
  SymbolNode = _ref.SymbolNode;
33
37
  var node0 = new ConstantNode(0);
34
38
  var node1 = new ConstantNode(1);
39
+ var nodeT = new ConstantNode(true);
40
+ var nodeF = new ConstantNode(false); // test if a node will always have a boolean value (true/false)
41
+ // not sure if this list is complete
42
+
43
+ function isAlwaysBoolean(node) {
44
+ return (0, _is.isOperatorNode)(node) && ['and', 'not', 'or'].includes(node.op);
45
+ }
35
46
 
36
47
  var _createUtil = (0, _util.createUtil)({
37
48
  FunctionNode: FunctionNode,
@@ -42,25 +53,43 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
42
53
  isCommutative = _createUtil.isCommutative;
43
54
  /**
44
55
  * simplifyCore() performs single pass simplification suitable for
45
- * applications requiring ultimate performance. In contrast, simplify()
46
- * extends simplifyCore() with additional passes to provide deeper
47
- * simplification.
56
+ * applications requiring ultimate performance. To roughly summarize,
57
+ * it handles cases along the lines of simplifyConstant() but where
58
+ * knowledge of a single argument is sufficient to determine the value.
59
+ * In contrast, simplify() extends simplifyCore() with additional passes
60
+ * to provide deeper simplification (such as gathering like terms).
61
+ *
62
+ * Specifically, simplifyCore:
63
+ *
64
+ * * Converts all function calls with operator equivalents to their
65
+ * operator forms.
66
+ * * Removes operators or function calls that are guaranteed to have no
67
+ * effect (such as unary '+').
68
+ * * Removes double unary '-', '~', and 'not'
69
+ * * Eliminates addition/subtraction of 0 and multiplication/division/powers
70
+ * by 1 or 0.
71
+ * * Converts addition of a negation into subtraction.
72
+ * * Eliminates logical operations with constant true or false leading
73
+ * arguments.
74
+ * * Puts constants on the left of a product, if multiplication is
75
+ * considered commutative by the options (which is the default)
48
76
  *
49
77
  * Syntax:
50
78
  *
51
79
  * simplifyCore(expr)
80
+ * simplifyCore(expr, options)
52
81
  *
53
82
  * Examples:
54
83
  *
55
- * const f = math.parse('2 * 1 * x ^ (2 - 1)')
56
- * math.simpifyCore(f) // Node {2 * x}
57
- * math.simplify('2 * 1 * x ^ (2 - 1)', [math.simplifyCore]) // Node {2 * x}
84
+ * const f = math.parse('2 * 1 * x ^ (1 - 0)')
85
+ * math.simplifyCore(f) // Node "2 * x"
86
+ * math.simplify('2 * 1 * x ^ (1 - 0)', [math.simplifyCore]) // Node "2 * x"
58
87
  *
59
88
  * See also:
60
89
  *
61
- * simplify, resolve, derivative
90
+ * simplify, simplifyConstant, resolve, derivative
62
91
  *
63
- * @param {Node} node
92
+ * @param {Node | string} node
64
93
  * The expression to be simplified
65
94
  * @param {Object} options
66
95
  * Simplification options, as per simplify()
@@ -68,24 +97,25 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
68
97
  */
69
98
 
70
99
 
71
- function simplifyCore(node, options) {
100
+ function _simplifyCore(nodeToSimplify) {
101
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
72
102
  var context = options ? options.context : undefined;
73
103
 
74
- if (hasProperty(node, 'trivial', context)) {
104
+ if (hasProperty(nodeToSimplify, 'trivial', context)) {
75
105
  // This node does nothing if it has only one argument, so if so,
76
106
  // return that argument simplified
77
- if ((0, _is.isFunctionNode)(node) && node.args.length === 1) {
78
- return simplifyCore(node.args[0], options);
107
+ if ((0, _is.isFunctionNode)(nodeToSimplify) && nodeToSimplify.args.length === 1) {
108
+ return _simplifyCore(nodeToSimplify.args[0], options);
79
109
  } // For other node types, we try the generic methods
80
110
 
81
111
 
82
112
  var simpChild = false;
83
113
  var childCount = 0;
84
- node.forEach(function (c) {
114
+ nodeToSimplify.forEach(function (c) {
85
115
  ++childCount;
86
116
 
87
117
  if (childCount === 1) {
88
- simpChild = simplifyCore(c, options);
118
+ simpChild = _simplifyCore(c, options);
89
119
  }
90
120
  });
91
121
 
@@ -94,33 +124,79 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
94
124
  }
95
125
  }
96
126
 
127
+ var node = nodeToSimplify;
128
+
129
+ if ((0, _is.isFunctionNode)(node)) {
130
+ var op = (0, _operators.getOperator)(node.name);
131
+
132
+ if (op) {
133
+ // Replace FunctionNode with a new OperatorNode
134
+ if (node.args.length > 2 && hasProperty(node, 'associative', context)) {
135
+ // unflatten into binary operations since that's what simplifyCore handles
136
+ while (node.args.length > 2) {
137
+ var last = node.args.pop();
138
+ var seclast = node.args.pop();
139
+ node.args.push(new OperatorNode(op, node.name, [last, seclast]));
140
+ }
141
+ }
142
+
143
+ node = new OperatorNode(op, node.name, node.args);
144
+ } else {
145
+ return new FunctionNode(_simplifyCore(node.fn), node.args.map(function (n) {
146
+ return _simplifyCore(n, options);
147
+ }));
148
+ }
149
+ }
150
+
97
151
  if ((0, _is.isOperatorNode)(node) && node.isUnary()) {
98
- var a0 = simplifyCore(node.args[0], options);
152
+ var a0 = _simplifyCore(node.args[0], options);
153
+
154
+ if (node.op === '~') {
155
+ // bitwise not
156
+ if ((0, _is.isOperatorNode)(a0) && a0.isUnary() && a0.op === '~') {
157
+ return a0.args[0];
158
+ }
159
+ }
160
+
161
+ if (node.op === 'not') {
162
+ // logical not
163
+ if ((0, _is.isOperatorNode)(a0) && a0.isUnary() && a0.op === 'not') {
164
+ // Has the effect of turning the argument into a boolean
165
+ // So can only eliminate the double negation if
166
+ // the inside is already boolean
167
+ if (isAlwaysBoolean(a0.args[0])) {
168
+ return a0.args[0];
169
+ }
170
+ }
171
+ }
172
+
173
+ var finish = true;
99
174
 
100
175
  if (node.op === '-') {
101
176
  // unary minus
102
177
  if ((0, _is.isOperatorNode)(a0)) {
178
+ if (a0.isBinary() && a0.fn === 'subtract') {
179
+ node = new OperatorNode('-', 'subtract', [a0.args[1], a0.args[0]]);
180
+ finish = false; // continue to process the new binary node
181
+ }
182
+
103
183
  if (a0.isUnary() && a0.op === '-') {
104
184
  return a0.args[0];
105
- } else if (a0.isBinary() && a0.fn === 'subtract') {
106
- return new OperatorNode('-', 'subtract', [a0.args[1], a0.args[0]]);
107
185
  }
108
186
  }
109
-
110
- return new OperatorNode(node.op, node.fn, [a0]);
111
187
  }
112
- } else if ((0, _is.isOperatorNode)(node) && node.isBinary()) {
113
- var _a = simplifyCore(node.args[0], options);
114
188
 
115
- var a1 = simplifyCore(node.args[1], options);
189
+ if (finish) return new OperatorNode(node.op, node.fn, [a0]);
190
+ }
191
+
192
+ if ((0, _is.isOperatorNode)(node) && node.isBinary()) {
193
+ var _a = _simplifyCore(node.args[0], options);
194
+
195
+ var a1 = _simplifyCore(node.args[1], options);
116
196
 
117
197
  if (node.op === '+') {
118
- if ((0, _is.isConstantNode)(_a)) {
119
- if (isZero(_a.value)) {
120
- return a1;
121
- } else if ((0, _is.isConstantNode)(a1)) {
122
- return new ConstantNode(add(_a.value, a1.value));
123
- }
198
+ if ((0, _is.isConstantNode)(_a) && isZero(_a.value)) {
199
+ return a1;
124
200
  }
125
201
 
126
202
  if ((0, _is.isConstantNode)(a1) && isZero(a1.value)) {
@@ -128,39 +204,33 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
128
204
  }
129
205
 
130
206
  if ((0, _is.isOperatorNode)(a1) && a1.isUnary() && a1.op === '-') {
131
- return new OperatorNode('-', 'subtract', [_a, a1.args[0]]);
207
+ a1 = a1.args[0];
208
+ node = new OperatorNode('-', 'subtract', [_a, a1]);
132
209
  }
210
+ }
133
211
 
134
- return new OperatorNode(node.op, node.fn, a1 ? [_a, a1] : [_a]);
135
- } else if (node.op === '-') {
136
- if ((0, _is.isConstantNode)(_a) && a1) {
137
- if ((0, _is.isConstantNode)(a1)) {
138
- return new ConstantNode(subtract(_a.value, a1.value));
139
- } else if (isZero(_a.value)) {
140
- return new OperatorNode('-', 'unaryMinus', [a1]);
141
- }
142
- } // if (node.fn === "subtract" && node.args.length === 2) {
212
+ if (node.op === '-') {
213
+ if ((0, _is.isOperatorNode)(a1) && a1.isUnary() && a1.op === '-') {
214
+ return _simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);
215
+ }
143
216
 
217
+ if ((0, _is.isConstantNode)(_a) && isZero(_a.value)) {
218
+ return _simplifyCore(new OperatorNode('-', 'unaryMinus', [a1]));
219
+ }
144
220
 
145
- if (node.fn === 'subtract') {
146
- if ((0, _is.isConstantNode)(a1) && isZero(a1.value)) {
147
- return _a;
148
- }
221
+ if ((0, _is.isConstantNode)(a1) && isZero(a1.value)) {
222
+ return _a;
223
+ }
149
224
 
150
- if ((0, _is.isOperatorNode)(a1) && a1.isUnary() && a1.op === '-') {
151
- return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);
152
- }
225
+ return new OperatorNode(node.op, node.fn, [_a, a1]);
226
+ }
153
227
 
154
- return new OperatorNode(node.op, node.fn, [_a, a1]);
155
- }
156
- } else if (node.op === '*') {
228
+ if (node.op === '*') {
157
229
  if ((0, _is.isConstantNode)(_a)) {
158
230
  if (isZero(_a.value)) {
159
231
  return node0;
160
232
  } else if (equal(_a.value, 1)) {
161
233
  return a1;
162
- } else if ((0, _is.isConstantNode)(a1)) {
163
- return new ConstantNode(multiply(_a.value, a1.value));
164
234
  }
165
235
  }
166
236
 
@@ -169,83 +239,116 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
169
239
  return node0;
170
240
  } else if (equal(a1.value, 1)) {
171
241
  return _a;
172
- } else if ((0, _is.isOperatorNode)(_a) && _a.isBinary() && _a.op === node.op && isCommutative(node, context)) {
173
- var a00 = _a.args[0];
174
-
175
- if ((0, _is.isConstantNode)(a00)) {
176
- var a00a1 = new ConstantNode(multiply(a00.value, a1.value));
177
- return new OperatorNode(node.op, node.fn, [a00a1, _a.args[1]], node.implicit); // constants on left
178
- }
179
242
  }
180
243
 
181
244
  if (isCommutative(node, context)) {
182
245
  return new OperatorNode(node.op, node.fn, [a1, _a], node.implicit); // constants on left
183
- } else {
184
- return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
185
246
  }
186
247
  }
187
248
 
188
249
  return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
189
- } else if (node.op === '/') {
190
- if ((0, _is.isConstantNode)(_a)) {
191
- if (isZero(_a.value)) {
192
- return node0;
193
- } else if ((0, _is.isConstantNode)(a1) && (equal(a1.value, 1) || equal(a1.value, 2) || equal(a1.value, 4))) {
194
- return new ConstantNode(divide(_a.value, a1.value));
195
- }
250
+ }
251
+
252
+ if (node.op === '/') {
253
+ if ((0, _is.isConstantNode)(_a) && isZero(_a.value)) {
254
+ return node0;
255
+ }
256
+
257
+ if ((0, _is.isConstantNode)(a1) && equal(a1.value, 1)) {
258
+ return _a;
196
259
  }
197
260
 
198
261
  return new OperatorNode(node.op, node.fn, [_a, a1]);
199
- } else if (node.op === '^') {
262
+ }
263
+
264
+ if (node.op === '^') {
200
265
  if ((0, _is.isConstantNode)(a1)) {
201
266
  if (isZero(a1.value)) {
202
267
  return node1;
203
268
  } else if (equal(a1.value, 1)) {
204
269
  return _a;
270
+ }
271
+ }
272
+ }
273
+
274
+ if (node.op === 'and') {
275
+ if ((0, _is.isConstantNode)(_a)) {
276
+ if (_a.value) {
277
+ if (isAlwaysBoolean(a1)) return a1;
278
+ } else {
279
+ return nodeF;
280
+ }
281
+ }
282
+
283
+ if ((0, _is.isConstantNode)(a1)) {
284
+ if (a1.value) {
285
+ if (isAlwaysBoolean(_a)) return _a;
205
286
  } else {
206
- if ((0, _is.isConstantNode)(_a)) {
207
- // fold constant
208
- return new ConstantNode(pow(_a.value, a1.value));
209
- } else if ((0, _is.isOperatorNode)(_a) && _a.isBinary() && _a.op === '^') {
210
- var a01 = _a.args[1];
211
-
212
- if ((0, _is.isConstantNode)(a01)) {
213
- return new OperatorNode(node.op, node.fn, [_a.args[0], new ConstantNode(multiply(a01.value, a1.value))]);
214
- }
215
- }
287
+ return nodeF;
288
+ }
289
+ }
290
+ }
291
+
292
+ if (node.op === 'or') {
293
+ if ((0, _is.isConstantNode)(_a)) {
294
+ if (_a.value) {
295
+ return nodeT;
296
+ } else {
297
+ if (isAlwaysBoolean(a1)) return a1;
298
+ }
299
+ }
300
+
301
+ if ((0, _is.isConstantNode)(a1)) {
302
+ if (a1.value) {
303
+ return nodeT;
304
+ } else {
305
+ if (isAlwaysBoolean(_a)) return _a;
216
306
  }
217
307
  }
218
308
  }
219
309
 
220
310
  return new OperatorNode(node.op, node.fn, [_a, a1]);
221
- } else if ((0, _is.isFunctionNode)(node)) {
222
- return new FunctionNode(simplifyCore(node.fn), node.args.map(function (n) {
223
- return simplifyCore(n, options);
311
+ }
312
+
313
+ if ((0, _is.isOperatorNode)(node)) {
314
+ return new OperatorNode(node.op, node.fn, node.args.map(function (a) {
315
+ return _simplifyCore(a, options);
224
316
  }));
225
- } else if ((0, _is.isArrayNode)(node)) {
317
+ }
318
+
319
+ if ((0, _is.isArrayNode)(node)) {
226
320
  return new ArrayNode(node.items.map(function (n) {
227
- return simplifyCore(n, options);
321
+ return _simplifyCore(n, options);
228
322
  }));
229
- } else if ((0, _is.isAccessorNode)(node)) {
230
- return new AccessorNode(simplifyCore(node.object, options), simplifyCore(node.index, options));
231
- } else if ((0, _is.isIndexNode)(node)) {
323
+ }
324
+
325
+ if ((0, _is.isAccessorNode)(node)) {
326
+ return new AccessorNode(_simplifyCore(node.object, options), _simplifyCore(node.index, options));
327
+ }
328
+
329
+ if ((0, _is.isIndexNode)(node)) {
232
330
  return new IndexNode(node.dimensions.map(function (n) {
233
- return simplifyCore(n, options);
331
+ return _simplifyCore(n, options);
234
332
  }));
235
- } else if ((0, _is.isObjectNode)(node)) {
333
+ }
334
+
335
+ if ((0, _is.isObjectNode)(node)) {
236
336
  var newProps = {};
237
337
 
238
338
  for (var prop in node.properties) {
239
- newProps[prop] = simplifyCore(node.properties[prop], options);
339
+ newProps[prop] = _simplifyCore(node.properties[prop], options);
240
340
  }
241
341
 
242
342
  return new ObjectNode(newProps);
243
- } else {// cannot simplify
244
- }
343
+ } // cannot simplify
344
+
245
345
 
246
346
  return node;
247
347
  }
248
348
 
249
- return simplifyCore;
349
+ return typed(name, {
350
+ Node: _simplifyCore,
351
+ 'Node,Object': _simplifyCore
352
+ });
250
353
  });
251
354
  exports.createSimplifyCore = createSimplifyCore;
@@ -107,7 +107,7 @@ var createLsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
107
107
  }
108
108
  } else if (k === 0) {
109
109
  // singular row, RHS is zero
110
- var bNew = (0, _toConsumableArray2.default)(b);
110
+ var bNew = (0, _toConsumableArray2["default"])(b);
111
111
  bNew[i] = 1;
112
112
 
113
113
  for (var _j = i + 1; _j < columns; _j++) {
@@ -187,7 +187,7 @@ var createLsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
187
187
  }
188
188
  } else if (k === 0) {
189
189
  // singular row, RHS is zero
190
- var bNew = (0, _toConsumableArray2.default)(b);
190
+ var bNew = (0, _toConsumableArray2["default"])(b);
191
191
  bNew[i] = 1;
192
192
 
193
193
  for (var _j3 = 0, _lastIndex2 = iIndices.length; _j3 < _lastIndex2; _j3++) {
@@ -107,7 +107,7 @@ var createUsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
107
107
  }
108
108
  } else if (k === 0) {
109
109
  // singular row, RHS is zero
110
- var bNew = (0, _toConsumableArray2.default)(b);
110
+ var bNew = (0, _toConsumableArray2["default"])(b);
111
111
  bNew[i] = 1;
112
112
 
113
113
  for (var _j = i - 1; _j >= 0; _j--) {
@@ -187,7 +187,7 @@ var createUsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
187
187
  }
188
188
  } else if (k === 0) {
189
189
  // singular row, RHS is zero
190
- var bNew = (0, _toConsumableArray2.default)(b);
190
+ var bNew = (0, _toConsumableArray2["default"])(b);
191
191
  bNew[i] = 1; // loop upper triangular
192
192
 
193
193
  for (var _j3 = 0, _lastIndex2 = iIndices.length; _j3 < _lastIndex2; _j3++) {
@@ -56,33 +56,16 @@ var createSymbolicEqual = /* #__PURE__ */(0, _factory.factory)(name, dependencie
56
56
  * Returns true if a valid manipulation making the expressions equal
57
57
  * is found.
58
58
  */
59
+ function _symbolicEqual(e1, e2) {
60
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
61
+ var diff = new OperatorNode('-', 'subtract', [e1, e2]);
62
+ var simplified = simplify(diff, {}, options);
63
+ return (0, _is.isConstantNode)(simplified) && !simplified.value;
64
+ }
65
+
59
66
  return typed(name, {
60
- 'string, string': function stringString(s1, s2) {
61
- return this(parse(s1), parse(s2), {});
62
- },
63
- 'string, string, Object': function stringStringObject(s1, s2, options) {
64
- return this(parse(s1), parse(s2), options);
65
- },
66
- 'Node, string': function NodeString(e1, s2) {
67
- return this(e1, parse(s2), {});
68
- },
69
- 'Node, string, Object': function NodeStringObject(e1, s2, options) {
70
- return this(e1, parse(s2), options);
71
- },
72
- 'string, Node': function stringNode(s1, e2) {
73
- return this(parse(s1), e2, {});
74
- },
75
- 'string, Node, Object': function stringNodeObject(s1, e2, options) {
76
- return this(parse(s1), e2, options);
77
- },
78
- 'Node, Node': function NodeNode(e1, e2) {
79
- return this(e1, e2, {});
80
- },
81
- 'Node, Node, Object': function NodeNodeObject(e1, e2, options) {
82
- var diff = new OperatorNode('-', 'subtract', [e1, e2]);
83
- var simplified = simplify(diff, {}, options);
84
- return (0, _is.isConstantNode)(simplified) && !simplified.value;
85
- }
67
+ 'Node, Node': _symbolicEqual,
68
+ 'Node, Node, Object': _symbolicEqual
86
69
  });
87
70
  });
88
71
  exports.createSymbolicEqual = createSymbolicEqual;
@@ -42,22 +42,15 @@ var createAbs = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
42
42
  */
43
43
  return typed(name, {
44
44
  number: _index.absNumber,
45
- Complex: function Complex(x) {
45
+ 'Complex | BigNumber | Fraction | Unit': function ComplexBigNumberFractionUnit(x) {
46
46
  return x.abs();
47
47
  },
48
- BigNumber: function BigNumber(x) {
49
- return x.abs();
50
- },
51
- Fraction: function Fraction(x) {
52
- return x.abs();
53
- },
54
- 'Array | Matrix': function ArrayMatrix(x) {
55
- // deep map collection, skip zeros since abs(0) = 0
56
- return (0, _collection.deepMap)(x, this, true);
57
- },
58
- Unit: function Unit(x) {
59
- return x.abs();
60
- }
48
+ // deep map collection, skip zeros since abs(0) = 0
49
+ 'Array | Matrix': typed.referToSelf(function (self) {
50
+ return function (x) {
51
+ return (0, _collection.deepMap)(x, self, true);
52
+ };
53
+ })
61
54
  });
62
55
  });
63
56
  exports.createAbs = createAbs;