mathjs 10.6.4 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/HISTORY.md +79 -1
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +2 -41
  4. package/lib/browser/math.js.LICENSE.txt +43 -0
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +6 -5
  7. package/lib/cjs/core/function/import.js +4 -14
  8. package/lib/cjs/core/function/typed.js +54 -12
  9. package/lib/cjs/defaultInstance.js +3 -3
  10. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  11. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  12. package/lib/cjs/entry/configReadonly.js +1 -1
  13. package/lib/cjs/entry/dependenciesAny/dependenciesChainClass.generated.js +3 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesKldivergence.generated.js +3 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +3 -0
  17. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +3 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +56 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +6 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesSqrtm.generated.js +3 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesStd.generated.js +3 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesStdTransform.generated.js +3 -0
  23. package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesChainClass.generated.js +3 -0
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  26. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +3 -0
  27. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +3 -0
  28. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +50 -0
  29. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +6 -0
  30. package/lib/cjs/entry/dependenciesNumber/dependenciesStd.generated.js +3 -0
  31. package/lib/cjs/entry/dependenciesNumber/dependenciesStdTransform.generated.js +3 -0
  32. package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
  33. package/lib/cjs/entry/impureFunctionsAny.generated.js +87 -61
  34. package/lib/cjs/entry/impureFunctionsNumber.generated.js +93 -69
  35. package/lib/cjs/entry/pureFunctionsAny.generated.js +50 -45
  36. package/lib/cjs/entry/pureFunctionsNumber.generated.js +22 -19
  37. package/lib/cjs/expression/Parser.js +1 -1
  38. package/lib/cjs/expression/embeddedDocs/construction/index.js +1 -1
  39. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
  40. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
  41. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  42. package/lib/cjs/expression/node/AccessorNode.js +216 -173
  43. package/lib/cjs/expression/node/ArrayNode.js +206 -160
  44. package/lib/cjs/expression/node/AssignmentNode.js +321 -270
  45. package/lib/cjs/expression/node/BlockNode.js +223 -172
  46. package/lib/cjs/expression/node/ConditionalNode.js +253 -193
  47. package/lib/cjs/expression/node/ConstantNode.js +216 -171
  48. package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
  49. package/lib/cjs/expression/node/FunctionNode.js +456 -416
  50. package/lib/cjs/expression/node/IndexNode.js +256 -210
  51. package/lib/cjs/expression/node/Node.js +411 -378
  52. package/lib/cjs/expression/node/ObjectNode.js +223 -178
  53. package/lib/cjs/expression/node/OperatorNode.js +474 -397
  54. package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
  55. package/lib/cjs/expression/node/RangeNode.js +272 -224
  56. package/lib/cjs/expression/node/RelationalNode.js +246 -195
  57. package/lib/cjs/expression/node/SymbolNode.js +219 -172
  58. package/lib/cjs/expression/node/utils/access.js +1 -1
  59. package/lib/cjs/expression/node/utils/assign.js +1 -1
  60. package/lib/cjs/expression/operators.js +117 -23
  61. package/lib/cjs/expression/parse.js +37 -19
  62. package/lib/cjs/expression/transform/std.transform.js +3 -1
  63. package/lib/cjs/factoriesAny.js +8 -0
  64. package/lib/cjs/factoriesNumber.js +10 -1
  65. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  66. package/lib/cjs/function/algebra/derivative.js +25 -33
  67. package/lib/cjs/function/algebra/leafCount.js +0 -3
  68. package/lib/cjs/function/algebra/rationalize.js +78 -108
  69. package/lib/cjs/function/algebra/resolve.js +53 -16
  70. package/lib/cjs/function/algebra/simplify/util.js +1 -1
  71. package/lib/cjs/function/algebra/simplify.js +90 -115
  72. package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
  73. package/lib/cjs/function/algebra/simplifyCore.js +196 -93
  74. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  75. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  76. package/lib/cjs/function/algebra/symbolicEqual.js +14 -32
  77. package/lib/cjs/function/arithmetic/abs.js +7 -14
  78. package/lib/cjs/function/arithmetic/add.js +26 -70
  79. package/lib/cjs/function/arithmetic/addScalar.js +17 -9
  80. package/lib/cjs/function/arithmetic/cbrt.js +7 -11
  81. package/lib/cjs/function/arithmetic/ceil.js +50 -40
  82. package/lib/cjs/function/arithmetic/cube.js +5 -10
  83. package/lib/cjs/function/arithmetic/divide.js +7 -7
  84. package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
  85. package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
  86. package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
  87. package/lib/cjs/function/arithmetic/dotPow.js +30 -63
  88. package/lib/cjs/function/arithmetic/exp.js +8 -12
  89. package/lib/cjs/function/arithmetic/expm1.js +10 -10
  90. package/lib/cjs/function/arithmetic/fix.js +34 -28
  91. package/lib/cjs/function/arithmetic/floor.js +51 -41
  92. package/lib/cjs/function/arithmetic/gcd.js +27 -68
  93. package/lib/cjs/function/arithmetic/hypot.js +9 -5
  94. package/lib/cjs/function/arithmetic/invmod.js +2 -2
  95. package/lib/cjs/function/arithmetic/lcm.js +27 -68
  96. package/lib/cjs/function/arithmetic/log.js +10 -12
  97. package/lib/cjs/function/arithmetic/log10.js +5 -3
  98. package/lib/cjs/function/arithmetic/log1p.js +11 -7
  99. package/lib/cjs/function/arithmetic/log2.js +5 -3
  100. package/lib/cjs/function/arithmetic/mod.js +22 -64
  101. package/lib/cjs/function/arithmetic/multiply.js +40 -35
  102. package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
  103. package/lib/cjs/function/arithmetic/norm.js +1 -5
  104. package/lib/cjs/function/arithmetic/nthRoot.js +83 -95
  105. package/lib/cjs/function/arithmetic/nthRoots.js +2 -2
  106. package/lib/cjs/function/arithmetic/round.js +56 -42
  107. package/lib/cjs/function/arithmetic/sign.js +14 -10
  108. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  109. package/lib/cjs/function/arithmetic/square.js +6 -10
  110. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  111. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  112. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  113. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  114. package/lib/cjs/function/bitwise/bitNot.js +6 -4
  115. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  116. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  117. package/lib/cjs/function/bitwise/leftShift.js +69 -82
  118. package/lib/cjs/function/bitwise/rightArithShift.js +69 -82
  119. package/lib/cjs/function/bitwise/rightLogShift.js +69 -82
  120. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  121. package/lib/cjs/function/complex/arg.js +5 -3
  122. package/lib/cjs/function/complex/conj.js +6 -7
  123. package/lib/cjs/function/complex/im.js +7 -8
  124. package/lib/cjs/function/complex/re.js +6 -10
  125. package/lib/cjs/function/geometry/distance.js +2 -2
  126. package/lib/cjs/function/logical/and.js +74 -80
  127. package/lib/cjs/function/logical/not.js +13 -6
  128. package/lib/cjs/function/logical/or.js +21 -63
  129. package/lib/cjs/function/logical/xor.js +21 -63
  130. package/lib/cjs/function/matrix/diff.js +11 -8
  131. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  132. package/lib/cjs/function/matrix/fft.js +2 -2
  133. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  134. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  135. package/lib/cjs/function/matrix/ones.js +2 -1
  136. package/lib/cjs/function/matrix/rotate.js +5 -5
  137. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  138. package/lib/cjs/function/matrix/transpose.js +47 -48
  139. package/lib/cjs/function/matrix/zeros.js +2 -1
  140. package/lib/cjs/function/probability/factorial.js +5 -3
  141. package/lib/cjs/function/probability/gamma.js +38 -40
  142. package/lib/cjs/function/probability/kldivergence.js +5 -2
  143. package/lib/cjs/function/probability/lgamma.js +30 -30
  144. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  145. package/lib/cjs/function/relational/compare.js +21 -67
  146. package/lib/cjs/function/relational/compareNatural.js +59 -54
  147. package/lib/cjs/function/relational/compareText.js +10 -43
  148. package/lib/cjs/function/relational/compareUnits.js +24 -0
  149. package/lib/cjs/function/relational/equal.js +19 -80
  150. package/lib/cjs/function/relational/equalScalar.js +7 -9
  151. package/lib/cjs/function/relational/larger.js +21 -67
  152. package/lib/cjs/function/relational/largerEq.js +21 -67
  153. package/lib/cjs/function/relational/smaller.js +21 -67
  154. package/lib/cjs/function/relational/smallerEq.js +21 -67
  155. package/lib/cjs/function/relational/unequal.js +19 -80
  156. package/lib/cjs/function/special/erf.js +5 -3
  157. package/lib/cjs/function/statistics/std.js +11 -2
  158. package/lib/cjs/function/string/format.js +2 -2
  159. package/lib/cjs/function/string/hex.js +1 -2
  160. package/lib/cjs/function/trigonometry/acos.js +4 -8
  161. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  162. package/lib/cjs/function/trigonometry/acot.js +6 -11
  163. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  164. package/lib/cjs/function/trigonometry/acsc.js +6 -11
  165. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  166. package/lib/cjs/function/trigonometry/asec.js +6 -10
  167. package/lib/cjs/function/trigonometry/asech.js +4 -8
  168. package/lib/cjs/function/trigonometry/asin.js +5 -10
  169. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  170. package/lib/cjs/function/trigonometry/atan.js +5 -11
  171. package/lib/cjs/function/trigonometry/atan2.js +25 -63
  172. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  173. package/lib/cjs/function/trigonometry/cos.js +11 -20
  174. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  175. package/lib/cjs/function/trigonometry/cot.js +9 -15
  176. package/lib/cjs/function/trigonometry/coth.js +4 -15
  177. package/lib/cjs/function/trigonometry/csc.js +11 -17
  178. package/lib/cjs/function/trigonometry/csch.js +4 -15
  179. package/lib/cjs/function/trigonometry/sec.js +11 -17
  180. package/lib/cjs/function/trigonometry/sech.js +4 -15
  181. package/lib/cjs/function/trigonometry/sin.js +11 -21
  182. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  183. package/lib/cjs/function/trigonometry/tan.js +11 -21
  184. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  185. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  186. package/lib/cjs/function/unit/to.js +7 -41
  187. package/lib/cjs/function/utils/clone.js +1 -1
  188. package/lib/cjs/function/utils/hasNumericValue.js +5 -1
  189. package/lib/cjs/function/utils/isInteger.js +6 -4
  190. package/lib/cjs/function/utils/isNaN.js +1 -1
  191. package/lib/cjs/function/utils/isNegative.js +11 -7
  192. package/lib/cjs/function/utils/isNumeric.js +6 -4
  193. package/lib/cjs/function/utils/isPositive.js +11 -7
  194. package/lib/cjs/function/utils/isPrime.js +5 -3
  195. package/lib/cjs/function/utils/isZero.js +21 -17
  196. package/lib/cjs/function/utils/numeric.js +11 -4
  197. package/lib/cjs/function/utils/typeOf.js +38 -44
  198. package/lib/cjs/header.js +2 -2
  199. package/lib/cjs/plain/bignumber/index.js +1 -1
  200. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  201. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  202. package/lib/cjs/type/boolean.js +7 -5
  203. package/lib/cjs/type/chain/Chain.js +23 -3
  204. package/lib/cjs/type/complex/Complex.js +18 -14
  205. package/lib/cjs/type/complex/function/complex.js +6 -4
  206. package/lib/cjs/type/fraction/Fraction.js +10 -6
  207. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  208. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  209. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  210. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  211. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  213. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  214. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  217. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  218. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  219. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  220. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  221. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  222. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  223. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  224. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  225. package/lib/cjs/type/number.js +6 -4
  226. package/lib/cjs/type/string.js +7 -5
  227. package/lib/cjs/type/unit/Unit.js +98 -45
  228. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  229. package/lib/cjs/type/unit/function/unit.js +14 -5
  230. package/lib/cjs/utils/customs.js +2 -2
  231. package/lib/cjs/utils/emitter.js +1 -1
  232. package/lib/cjs/utils/function.js +2 -2
  233. package/lib/cjs/utils/is.js +27 -25
  234. package/lib/cjs/utils/latex.js +3 -3
  235. package/lib/cjs/utils/lruQueue.js +1 -1
  236. package/lib/cjs/utils/map.js +3 -3
  237. package/lib/cjs/utils/object.js +2 -2
  238. package/lib/cjs/utils/snapshot.js +30 -57
  239. package/lib/cjs/utils/string.js +3 -3
  240. package/lib/cjs/version.js +1 -1
  241. package/lib/esm/core/create.js +2 -1
  242. package/lib/esm/core/function/import.js +2 -12
  243. package/lib/esm/core/function/typed.js +47 -11
  244. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  247. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  249. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  250. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  251. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  252. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  253. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  254. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  255. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  256. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  257. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  258. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  259. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  260. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  261. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  262. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  263. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  264. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  265. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  266. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  267. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  268. package/lib/esm/expression/embeddedDocs/construction/index.js +1 -1
  269. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  270. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  271. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  272. package/lib/esm/expression/node/AccessorNode.js +158 -153
  273. package/lib/esm/expression/node/ArrayNode.js +162 -154
  274. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  275. package/lib/esm/expression/node/BlockNode.js +177 -163
  276. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  277. package/lib/esm/expression/node/ConstantNode.js +171 -163
  278. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  279. package/lib/esm/expression/node/FunctionNode.js +407 -407
  280. package/lib/esm/expression/node/IndexNode.js +206 -198
  281. package/lib/esm/expression/node/Node.js +325 -325
  282. package/lib/esm/expression/node/ObjectNode.js +166 -157
  283. package/lib/esm/expression/node/OperatorNode.js +414 -377
  284. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  285. package/lib/esm/expression/node/RangeNode.js +221 -212
  286. package/lib/esm/expression/node/RelationalNode.js +190 -176
  287. package/lib/esm/expression/node/SymbolNode.js +161 -152
  288. package/lib/esm/expression/operators.js +96 -4
  289. package/lib/esm/expression/parse.js +25 -7
  290. package/lib/esm/expression/transform/std.transform.js +3 -1
  291. package/lib/esm/factoriesAny.js +1 -0
  292. package/lib/esm/factoriesNumber.js +1 -0
  293. package/lib/esm/function/algebra/derivative.js +25 -33
  294. package/lib/esm/function/algebra/leafCount.js +0 -3
  295. package/lib/esm/function/algebra/rationalize.js +83 -114
  296. package/lib/esm/function/algebra/resolve.js +25 -16
  297. package/lib/esm/function/algebra/simplify.js +85 -113
  298. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  299. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  300. package/lib/esm/function/algebra/symbolicEqual.js +14 -32
  301. package/lib/esm/function/arithmetic/abs.js +3 -16
  302. package/lib/esm/function/arithmetic/add.js +21 -65
  303. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  304. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  305. package/lib/esm/function/arithmetic/ceil.js +25 -25
  306. package/lib/esm/function/arithmetic/cube.js +5 -9
  307. package/lib/esm/function/arithmetic/divide.js +7 -7
  308. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  309. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  310. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  311. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  312. package/lib/esm/function/arithmetic/exp.js +8 -11
  313. package/lib/esm/function/arithmetic/expm1.js +10 -9
  314. package/lib/esm/function/arithmetic/fix.js +18 -18
  315. package/lib/esm/function/arithmetic/floor.js +26 -26
  316. package/lib/esm/function/arithmetic/gcd.js +26 -70
  317. package/lib/esm/function/arithmetic/hypot.js +7 -6
  318. package/lib/esm/function/arithmetic/invmod.js +1 -1
  319. package/lib/esm/function/arithmetic/lcm.js +26 -70
  320. package/lib/esm/function/arithmetic/log.js +7 -10
  321. package/lib/esm/function/arithmetic/log10.js +1 -3
  322. package/lib/esm/function/arithmetic/log1p.js +4 -6
  323. package/lib/esm/function/arithmetic/log2.js +1 -3
  324. package/lib/esm/function/arithmetic/mod.js +21 -62
  325. package/lib/esm/function/arithmetic/multiply.js +23 -27
  326. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  327. package/lib/esm/function/arithmetic/norm.js +0 -4
  328. package/lib/esm/function/arithmetic/nthRoot.js +41 -76
  329. package/lib/esm/function/arithmetic/nthRoots.js +2 -2
  330. package/lib/esm/function/arithmetic/round.js +26 -28
  331. package/lib/esm/function/arithmetic/sign.js +5 -7
  332. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  333. package/lib/esm/function/arithmetic/square.js +6 -9
  334. package/lib/esm/function/arithmetic/subtract.js +31 -95
  335. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  336. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  337. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  338. package/lib/esm/function/bitwise/bitNot.js +2 -4
  339. package/lib/esm/function/bitwise/bitOr.js +16 -59
  340. package/lib/esm/function/bitwise/bitXor.js +16 -59
  341. package/lib/esm/function/bitwise/leftShift.js +39 -61
  342. package/lib/esm/function/bitwise/rightArithShift.js +39 -61
  343. package/lib/esm/function/bitwise/rightLogShift.js +39 -61
  344. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  345. package/lib/esm/function/complex/arg.js +1 -3
  346. package/lib/esm/function/complex/conj.js +3 -12
  347. package/lib/esm/function/complex/im.js +4 -15
  348. package/lib/esm/function/complex/re.js +3 -15
  349. package/lib/esm/function/geometry/distance.js +2 -2
  350. package/lib/esm/function/logical/and.js +35 -57
  351. package/lib/esm/function/logical/not.js +3 -6
  352. package/lib/esm/function/logical/or.js +16 -61
  353. package/lib/esm/function/logical/xor.js +16 -61
  354. package/lib/esm/function/matrix/diff.js +3 -8
  355. package/lib/esm/function/matrix/ones.js +2 -1
  356. package/lib/esm/function/matrix/rotate.js +5 -5
  357. package/lib/esm/function/matrix/sqrtm.js +3 -2
  358. package/lib/esm/function/matrix/transpose.js +47 -50
  359. package/lib/esm/function/matrix/zeros.js +2 -1
  360. package/lib/esm/function/probability/factorial.js +1 -3
  361. package/lib/esm/function/probability/gamma.js +38 -39
  362. package/lib/esm/function/probability/kldivergence.js +3 -2
  363. package/lib/esm/function/probability/lgamma.js +29 -29
  364. package/lib/esm/function/relational/compare.js +21 -67
  365. package/lib/esm/function/relational/compareNatural.js +54 -49
  366. package/lib/esm/function/relational/compareText.js +10 -42
  367. package/lib/esm/function/relational/compareUnits.js +15 -0
  368. package/lib/esm/function/relational/equal.js +19 -79
  369. package/lib/esm/function/relational/equalScalar.js +6 -9
  370. package/lib/esm/function/relational/larger.js +23 -73
  371. package/lib/esm/function/relational/largerEq.js +23 -73
  372. package/lib/esm/function/relational/smaller.js +23 -73
  373. package/lib/esm/function/relational/smallerEq.js +23 -73
  374. package/lib/esm/function/relational/unequal.js +19 -79
  375. package/lib/esm/function/special/erf.js +1 -3
  376. package/lib/esm/function/statistics/std.js +10 -2
  377. package/lib/esm/function/string/format.js +2 -2
  378. package/lib/esm/function/string/hex.js +1 -2
  379. package/lib/esm/function/trigonometry/acos.js +4 -7
  380. package/lib/esm/function/trigonometry/acosh.js +2 -6
  381. package/lib/esm/function/trigonometry/acot.js +6 -10
  382. package/lib/esm/function/trigonometry/acoth.js +4 -7
  383. package/lib/esm/function/trigonometry/acsc.js +6 -10
  384. package/lib/esm/function/trigonometry/acsch.js +4 -7
  385. package/lib/esm/function/trigonometry/asec.js +6 -9
  386. package/lib/esm/function/trigonometry/asech.js +4 -7
  387. package/lib/esm/function/trigonometry/asin.js +5 -9
  388. package/lib/esm/function/trigonometry/asinh.js +4 -8
  389. package/lib/esm/function/trigonometry/atan.js +5 -10
  390. package/lib/esm/function/trigonometry/atan2.js +26 -65
  391. package/lib/esm/function/trigonometry/atanh.js +4 -8
  392. package/lib/esm/function/trigonometry/cos.js +11 -22
  393. package/lib/esm/function/trigonometry/cosh.js +5 -20
  394. package/lib/esm/function/trigonometry/cot.js +10 -20
  395. package/lib/esm/function/trigonometry/coth.js +6 -20
  396. package/lib/esm/function/trigonometry/csc.js +12 -22
  397. package/lib/esm/function/trigonometry/csch.js +6 -20
  398. package/lib/esm/function/trigonometry/sec.js +12 -22
  399. package/lib/esm/function/trigonometry/sech.js +6 -20
  400. package/lib/esm/function/trigonometry/sin.js +11 -23
  401. package/lib/esm/function/trigonometry/sinh.js +5 -21
  402. package/lib/esm/function/trigonometry/tan.js +11 -23
  403. package/lib/esm/function/trigonometry/tanh.js +5 -21
  404. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  405. package/lib/esm/function/unit/to.js +8 -43
  406. package/lib/esm/function/utils/clone.js +1 -1
  407. package/lib/esm/function/utils/hasNumericValue.js +3 -1
  408. package/lib/esm/function/utils/isInteger.js +2 -4
  409. package/lib/esm/function/utils/isNaN.js +1 -1
  410. package/lib/esm/function/utils/isNegative.js +3 -7
  411. package/lib/esm/function/utils/isNumeric.js +4 -10
  412. package/lib/esm/function/utils/isPositive.js +3 -7
  413. package/lib/esm/function/utils/isPrime.js +1 -3
  414. package/lib/esm/function/utils/isZero.js +13 -17
  415. package/lib/esm/function/utils/numeric.js +11 -4
  416. package/lib/esm/function/utils/typeOf.js +38 -44
  417. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  418. package/lib/esm/type/boolean.js +1 -3
  419. package/lib/esm/type/chain/Chain.js +23 -3
  420. package/lib/esm/type/complex/Complex.js +4 -0
  421. package/lib/esm/type/complex/function/complex.js +1 -3
  422. package/lib/esm/type/fraction/Fraction.js +4 -0
  423. package/lib/esm/type/fraction/function/fraction.js +1 -3
  424. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  425. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  426. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  427. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  428. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  429. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  430. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  431. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  432. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  433. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  434. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  435. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  436. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  437. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  438. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  439. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  440. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  441. package/lib/esm/type/number.js +1 -3
  442. package/lib/esm/type/string.js +1 -3
  443. package/lib/esm/type/unit/Unit.js +85 -36
  444. package/lib/esm/type/unit/function/createUnit.js +2 -1
  445. package/lib/esm/type/unit/function/unit.js +10 -5
  446. package/lib/esm/utils/is.js +18 -18
  447. package/lib/esm/utils/snapshot.js +22 -48
  448. package/lib/esm/version.js +1 -1
  449. package/package.json +22 -25
  450. package/types/index.d.ts +211 -180
  451. package/types/index.ts +358 -144
  452. package/types/tsconfig.json +4 -1
  453. package/lib/cjs/utils/polyfills.js +0 -14
  454. package/lib/esm/utils/polyfills.js +0 -12
@@ -1,10 +1,13 @@
1
1
  import { isAccessorNode, isArrayNode, isConstantNode, isFunctionNode, isIndexNode, isObjectNode, isOperatorNode } from '../../utils/is.js';
2
+ import { getOperator } from '../../expression/operators.js';
2
3
  import { createUtil } from './simplify/util.js';
3
4
  import { factory } from '../../utils/factory.js';
4
5
  var name = 'simplifyCore';
5
- var dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
6
+ var dependencies = ['typed', 'parse', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
6
7
  export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref => {
7
8
  var {
9
+ typed,
10
+ parse,
8
11
  equal,
9
12
  isZero,
10
13
  add,
@@ -24,6 +27,14 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
24
27
  } = _ref;
25
28
  var node0 = new ConstantNode(0);
26
29
  var node1 = new ConstantNode(1);
30
+ var nodeT = new ConstantNode(true);
31
+ var nodeF = new ConstantNode(false); // test if a node will always have a boolean value (true/false)
32
+ // not sure if this list is complete
33
+
34
+ function isAlwaysBoolean(node) {
35
+ return isOperatorNode(node) && ['and', 'not', 'or'].includes(node.op);
36
+ }
37
+
27
38
  var {
28
39
  hasProperty,
29
40
  isCommutative
@@ -34,49 +45,68 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
34
45
  });
35
46
  /**
36
47
  * simplifyCore() performs single pass simplification suitable for
37
- * applications requiring ultimate performance. In contrast, simplify()
38
- * extends simplifyCore() with additional passes to provide deeper
39
- * simplification.
48
+ * applications requiring ultimate performance. To roughly summarize,
49
+ * it handles cases along the lines of simplifyConstant() but where
50
+ * knowledge of a single argument is sufficient to determine the value.
51
+ * In contrast, simplify() extends simplifyCore() with additional passes
52
+ * to provide deeper simplification (such as gathering like terms).
53
+ *
54
+ * Specifically, simplifyCore:
55
+ *
56
+ * * Converts all function calls with operator equivalents to their
57
+ * operator forms.
58
+ * * Removes operators or function calls that are guaranteed to have no
59
+ * effect (such as unary '+').
60
+ * * Removes double unary '-', '~', and 'not'
61
+ * * Eliminates addition/subtraction of 0 and multiplication/division/powers
62
+ * by 1 or 0.
63
+ * * Converts addition of a negation into subtraction.
64
+ * * Eliminates logical operations with constant true or false leading
65
+ * arguments.
66
+ * * Puts constants on the left of a product, if multiplication is
67
+ * considered commutative by the options (which is the default)
40
68
  *
41
69
  * Syntax:
42
70
  *
43
71
  * simplifyCore(expr)
72
+ * simplifyCore(expr, options)
44
73
  *
45
74
  * Examples:
46
75
  *
47
- * const f = math.parse('2 * 1 * x ^ (2 - 1)')
48
- * math.simpifyCore(f) // Node {2 * x}
49
- * math.simplify('2 * 1 * x ^ (2 - 1)', [math.simplifyCore]) // Node {2 * x}
76
+ * const f = math.parse('2 * 1 * x ^ (1 - 0)')
77
+ * math.simplifyCore(f) // Node "2 * x"
78
+ * math.simplify('2 * 1 * x ^ (1 - 0)', [math.simplifyCore]) // Node "2 * x"
50
79
  *
51
80
  * See also:
52
81
  *
53
- * simplify, resolve, derivative
82
+ * simplify, simplifyConstant, resolve, derivative
54
83
  *
55
- * @param {Node} node
84
+ * @param {Node | string} node
56
85
  * The expression to be simplified
57
86
  * @param {Object} options
58
87
  * Simplification options, as per simplify()
59
88
  * @return {Node} Returns expression with basic simplifications applied
60
89
  */
61
90
 
62
- function simplifyCore(node, options) {
91
+ function _simplifyCore(nodeToSimplify) {
92
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
63
93
  var context = options ? options.context : undefined;
64
94
 
65
- if (hasProperty(node, 'trivial', context)) {
95
+ if (hasProperty(nodeToSimplify, 'trivial', context)) {
66
96
  // This node does nothing if it has only one argument, so if so,
67
97
  // return that argument simplified
68
- if (isFunctionNode(node) && node.args.length === 1) {
69
- return simplifyCore(node.args[0], options);
98
+ if (isFunctionNode(nodeToSimplify) && nodeToSimplify.args.length === 1) {
99
+ return _simplifyCore(nodeToSimplify.args[0], options);
70
100
  } // For other node types, we try the generic methods
71
101
 
72
102
 
73
103
  var simpChild = false;
74
104
  var childCount = 0;
75
- node.forEach(c => {
105
+ nodeToSimplify.forEach(c => {
76
106
  ++childCount;
77
107
 
78
108
  if (childCount === 1) {
79
- simpChild = simplifyCore(c, options);
109
+ simpChild = _simplifyCore(c, options);
80
110
  }
81
111
  });
82
112
 
@@ -85,33 +115,77 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
85
115
  }
86
116
  }
87
117
 
118
+ var node = nodeToSimplify;
119
+
120
+ if (isFunctionNode(node)) {
121
+ var op = getOperator(node.name);
122
+
123
+ if (op) {
124
+ // Replace FunctionNode with a new OperatorNode
125
+ if (node.args.length > 2 && hasProperty(node, 'associative', context)) {
126
+ // unflatten into binary operations since that's what simplifyCore handles
127
+ while (node.args.length > 2) {
128
+ var last = node.args.pop();
129
+ var seclast = node.args.pop();
130
+ node.args.push(new OperatorNode(op, node.name, [last, seclast]));
131
+ }
132
+ }
133
+
134
+ node = new OperatorNode(op, node.name, node.args);
135
+ } else {
136
+ return new FunctionNode(_simplifyCore(node.fn), node.args.map(n => _simplifyCore(n, options)));
137
+ }
138
+ }
139
+
88
140
  if (isOperatorNode(node) && node.isUnary()) {
89
- var a0 = simplifyCore(node.args[0], options);
141
+ var a0 = _simplifyCore(node.args[0], options);
142
+
143
+ if (node.op === '~') {
144
+ // bitwise not
145
+ if (isOperatorNode(a0) && a0.isUnary() && a0.op === '~') {
146
+ return a0.args[0];
147
+ }
148
+ }
149
+
150
+ if (node.op === 'not') {
151
+ // logical not
152
+ if (isOperatorNode(a0) && a0.isUnary() && a0.op === 'not') {
153
+ // Has the effect of turning the argument into a boolean
154
+ // So can only eliminate the double negation if
155
+ // the inside is already boolean
156
+ if (isAlwaysBoolean(a0.args[0])) {
157
+ return a0.args[0];
158
+ }
159
+ }
160
+ }
161
+
162
+ var finish = true;
90
163
 
91
164
  if (node.op === '-') {
92
165
  // unary minus
93
166
  if (isOperatorNode(a0)) {
167
+ if (a0.isBinary() && a0.fn === 'subtract') {
168
+ node = new OperatorNode('-', 'subtract', [a0.args[1], a0.args[0]]);
169
+ finish = false; // continue to process the new binary node
170
+ }
171
+
94
172
  if (a0.isUnary() && a0.op === '-') {
95
173
  return a0.args[0];
96
- } else if (a0.isBinary() && a0.fn === 'subtract') {
97
- return new OperatorNode('-', 'subtract', [a0.args[1], a0.args[0]]);
98
174
  }
99
175
  }
100
-
101
- return new OperatorNode(node.op, node.fn, [a0]);
102
176
  }
103
- } else if (isOperatorNode(node) && node.isBinary()) {
104
- var _a = simplifyCore(node.args[0], options);
105
177
 
106
- var a1 = simplifyCore(node.args[1], options);
178
+ if (finish) return new OperatorNode(node.op, node.fn, [a0]);
179
+ }
180
+
181
+ if (isOperatorNode(node) && node.isBinary()) {
182
+ var _a = _simplifyCore(node.args[0], options);
183
+
184
+ var a1 = _simplifyCore(node.args[1], options);
107
185
 
108
186
  if (node.op === '+') {
109
- if (isConstantNode(_a)) {
110
- if (isZero(_a.value)) {
111
- return a1;
112
- } else if (isConstantNode(a1)) {
113
- return new ConstantNode(add(_a.value, a1.value));
114
- }
187
+ if (isConstantNode(_a) && isZero(_a.value)) {
188
+ return a1;
115
189
  }
116
190
 
117
191
  if (isConstantNode(a1) && isZero(a1.value)) {
@@ -119,39 +193,33 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
119
193
  }
120
194
 
121
195
  if (isOperatorNode(a1) && a1.isUnary() && a1.op === '-') {
122
- return new OperatorNode('-', 'subtract', [_a, a1.args[0]]);
196
+ a1 = a1.args[0];
197
+ node = new OperatorNode('-', 'subtract', [_a, a1]);
123
198
  }
199
+ }
124
200
 
125
- return new OperatorNode(node.op, node.fn, a1 ? [_a, a1] : [_a]);
126
- } else if (node.op === '-') {
127
- if (isConstantNode(_a) && a1) {
128
- if (isConstantNode(a1)) {
129
- return new ConstantNode(subtract(_a.value, a1.value));
130
- } else if (isZero(_a.value)) {
131
- return new OperatorNode('-', 'unaryMinus', [a1]);
132
- }
133
- } // if (node.fn === "subtract" && node.args.length === 2) {
201
+ if (node.op === '-') {
202
+ if (isOperatorNode(a1) && a1.isUnary() && a1.op === '-') {
203
+ return _simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);
204
+ }
134
205
 
206
+ if (isConstantNode(_a) && isZero(_a.value)) {
207
+ return _simplifyCore(new OperatorNode('-', 'unaryMinus', [a1]));
208
+ }
135
209
 
136
- if (node.fn === 'subtract') {
137
- if (isConstantNode(a1) && isZero(a1.value)) {
138
- return _a;
139
- }
210
+ if (isConstantNode(a1) && isZero(a1.value)) {
211
+ return _a;
212
+ }
140
213
 
141
- if (isOperatorNode(a1) && a1.isUnary() && a1.op === '-') {
142
- return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);
143
- }
214
+ return new OperatorNode(node.op, node.fn, [_a, a1]);
215
+ }
144
216
 
145
- return new OperatorNode(node.op, node.fn, [_a, a1]);
146
- }
147
- } else if (node.op === '*') {
217
+ if (node.op === '*') {
148
218
  if (isConstantNode(_a)) {
149
219
  if (isZero(_a.value)) {
150
220
  return node0;
151
221
  } else if (equal(_a.value, 1)) {
152
222
  return a1;
153
- } else if (isConstantNode(a1)) {
154
- return new ConstantNode(multiply(_a.value, a1.value));
155
223
  }
156
224
  }
157
225
 
@@ -160,76 +228,109 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
160
228
  return node0;
161
229
  } else if (equal(a1.value, 1)) {
162
230
  return _a;
163
- } else if (isOperatorNode(_a) && _a.isBinary() && _a.op === node.op && isCommutative(node, context)) {
164
- var a00 = _a.args[0];
165
-
166
- if (isConstantNode(a00)) {
167
- var a00a1 = new ConstantNode(multiply(a00.value, a1.value));
168
- return new OperatorNode(node.op, node.fn, [a00a1, _a.args[1]], node.implicit); // constants on left
169
- }
170
231
  }
171
232
 
172
233
  if (isCommutative(node, context)) {
173
234
  return new OperatorNode(node.op, node.fn, [a1, _a], node.implicit); // constants on left
174
- } else {
175
- return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
176
235
  }
177
236
  }
178
237
 
179
238
  return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
180
- } else if (node.op === '/') {
181
- if (isConstantNode(_a)) {
182
- if (isZero(_a.value)) {
183
- return node0;
184
- } else if (isConstantNode(a1) && (equal(a1.value, 1) || equal(a1.value, 2) || equal(a1.value, 4))) {
185
- return new ConstantNode(divide(_a.value, a1.value));
186
- }
239
+ }
240
+
241
+ if (node.op === '/') {
242
+ if (isConstantNode(_a) && isZero(_a.value)) {
243
+ return node0;
244
+ }
245
+
246
+ if (isConstantNode(a1) && equal(a1.value, 1)) {
247
+ return _a;
187
248
  }
188
249
 
189
250
  return new OperatorNode(node.op, node.fn, [_a, a1]);
190
- } else if (node.op === '^') {
251
+ }
252
+
253
+ if (node.op === '^') {
191
254
  if (isConstantNode(a1)) {
192
255
  if (isZero(a1.value)) {
193
256
  return node1;
194
257
  } else if (equal(a1.value, 1)) {
195
258
  return _a;
259
+ }
260
+ }
261
+ }
262
+
263
+ if (node.op === 'and') {
264
+ if (isConstantNode(_a)) {
265
+ if (_a.value) {
266
+ if (isAlwaysBoolean(a1)) return a1;
196
267
  } else {
197
- if (isConstantNode(_a)) {
198
- // fold constant
199
- return new ConstantNode(pow(_a.value, a1.value));
200
- } else if (isOperatorNode(_a) && _a.isBinary() && _a.op === '^') {
201
- var a01 = _a.args[1];
202
-
203
- if (isConstantNode(a01)) {
204
- return new OperatorNode(node.op, node.fn, [_a.args[0], new ConstantNode(multiply(a01.value, a1.value))]);
205
- }
206
- }
268
+ return nodeF;
269
+ }
270
+ }
271
+
272
+ if (isConstantNode(a1)) {
273
+ if (a1.value) {
274
+ if (isAlwaysBoolean(_a)) return _a;
275
+ } else {
276
+ return nodeF;
277
+ }
278
+ }
279
+ }
280
+
281
+ if (node.op === 'or') {
282
+ if (isConstantNode(_a)) {
283
+ if (_a.value) {
284
+ return nodeT;
285
+ } else {
286
+ if (isAlwaysBoolean(a1)) return a1;
287
+ }
288
+ }
289
+
290
+ if (isConstantNode(a1)) {
291
+ if (a1.value) {
292
+ return nodeT;
293
+ } else {
294
+ if (isAlwaysBoolean(_a)) return _a;
207
295
  }
208
296
  }
209
297
  }
210
298
 
211
299
  return new OperatorNode(node.op, node.fn, [_a, a1]);
212
- } else if (isFunctionNode(node)) {
213
- return new FunctionNode(simplifyCore(node.fn), node.args.map(n => simplifyCore(n, options)));
214
- } else if (isArrayNode(node)) {
215
- return new ArrayNode(node.items.map(n => simplifyCore(n, options)));
216
- } else if (isAccessorNode(node)) {
217
- return new AccessorNode(simplifyCore(node.object, options), simplifyCore(node.index, options));
218
- } else if (isIndexNode(node)) {
219
- return new IndexNode(node.dimensions.map(n => simplifyCore(n, options)));
220
- } else if (isObjectNode(node)) {
300
+ }
301
+
302
+ if (isOperatorNode(node)) {
303
+ return new OperatorNode(node.op, node.fn, node.args.map(a => _simplifyCore(a, options)));
304
+ }
305
+
306
+ if (isArrayNode(node)) {
307
+ return new ArrayNode(node.items.map(n => _simplifyCore(n, options)));
308
+ }
309
+
310
+ if (isAccessorNode(node)) {
311
+ return new AccessorNode(_simplifyCore(node.object, options), _simplifyCore(node.index, options));
312
+ }
313
+
314
+ if (isIndexNode(node)) {
315
+ return new IndexNode(node.dimensions.map(n => _simplifyCore(n, options)));
316
+ }
317
+
318
+ if (isObjectNode(node)) {
221
319
  var newProps = {};
222
320
 
223
321
  for (var prop in node.properties) {
224
- newProps[prop] = simplifyCore(node.properties[prop], options);
322
+ newProps[prop] = _simplifyCore(node.properties[prop], options);
225
323
  }
226
324
 
227
325
  return new ObjectNode(newProps);
228
- } else {// cannot simplify
229
- }
326
+ } // cannot simplify
327
+
230
328
 
231
329
  return node;
232
330
  }
233
331
 
234
- return simplifyCore;
332
+ return typed(name, {
333
+ Node: _simplifyCore,
334
+ 'Node,Object': _simplifyCore
335
+ });
235
336
  });
@@ -31,12 +31,11 @@ export var createSymbolicEqual = /* #__PURE__ */factory(name, dependencies, _ref
31
31
  *
32
32
  * Examples:
33
33
  *
34
- * symbolicEqual('x*y', 'y*x') // true
35
- * symbolicEqual('x*y', 'y*x', {context: {multiply: {commutative: false}}})
36
- * //false
37
- * symbolicEqual('x/y', '(y*x^(-1))^(-1)') // true
38
- * symbolicEqual('abs(x)','x') // false
39
- * symbolicEqual('abs(x)','x', simplify.positiveContext) // true
34
+ * symbolicEqual('x*y', 'y*x') // Returns true
35
+ * symbolicEqual('x*y', 'y*x', {context: {multiply: {commutative: false}}}) // Returns false
36
+ * symbolicEqual('x/y', '(y*x^(-1))^(-1)') // Returns true
37
+ * symbolicEqual('abs(x)','x') // Returns false
38
+ * symbolicEqual('abs(x)','x', simplify.positiveContext) // Returns true
40
39
  *
41
40
  * See also:
42
41
  *
@@ -49,32 +48,15 @@ export var createSymbolicEqual = /* #__PURE__ */factory(name, dependencies, _ref
49
48
  * Returns true if a valid manipulation making the expressions equal
50
49
  * is found.
51
50
  */
51
+ function _symbolicEqual(e1, e2) {
52
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
53
+ var diff = new OperatorNode('-', 'subtract', [e1, e2]);
54
+ var simplified = simplify(diff, {}, options);
55
+ return isConstantNode(simplified) && !simplified.value;
56
+ }
57
+
52
58
  return typed(name, {
53
- 'string, string': function stringString(s1, s2) {
54
- return this(parse(s1), parse(s2), {});
55
- },
56
- 'string, string, Object': function stringStringObject(s1, s2, options) {
57
- return this(parse(s1), parse(s2), options);
58
- },
59
- 'Node, string': function NodeString(e1, s2) {
60
- return this(e1, parse(s2), {});
61
- },
62
- 'Node, string, Object': function NodeStringObject(e1, s2, options) {
63
- return this(e1, parse(s2), options);
64
- },
65
- 'string, Node': function stringNode(s1, e2) {
66
- return this(parse(s1), e2, {});
67
- },
68
- 'string, Node, Object': function stringNodeObject(s1, e2, options) {
69
- return this(parse(s1), e2, options);
70
- },
71
- 'Node, Node': function NodeNode(e1, e2) {
72
- return this(e1, e2, {});
73
- },
74
- 'Node, Node, Object': function NodeNodeObject(e1, e2, options) {
75
- var diff = new OperatorNode('-', 'subtract', [e1, e2]);
76
- var simplified = simplify(diff, {}, options);
77
- return isConstantNode(simplified) && !simplified.value;
78
- }
59
+ 'Node, Node': _symbolicEqual,
60
+ 'Node, Node, Object': _symbolicEqual
79
61
  });
80
62
  });
@@ -34,21 +34,8 @@ export var createAbs = /* #__PURE__ */factory(name, dependencies, _ref => {
34
34
  */
35
35
  return typed(name, {
36
36
  number: absNumber,
37
- Complex: function Complex(x) {
38
- return x.abs();
39
- },
40
- BigNumber: function BigNumber(x) {
41
- return x.abs();
42
- },
43
- Fraction: function Fraction(x) {
44
- return x.abs();
45
- },
46
- 'Array | Matrix': function ArrayMatrix(x) {
47
- // deep map collection, skip zeros since abs(0) = 0
48
- return deepMap(x, this, true);
49
- },
50
- Unit: function Unit(x) {
51
- return x.abs();
52
- }
37
+ 'Complex | BigNumber | Fraction | Unit': x => x.abs(),
38
+ // deep map collection, skip zeros since abs(0) = 0
39
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self, true))
53
40
  });
54
41
  });
@@ -1,10 +1,8 @@
1
1
  import { factory } from '../../utils/factory.js';
2
- import { extend } from '../../utils/object.js';
3
- import { createAlgorithm01 } from '../../type/matrix/utils/algorithm01.js';
4
- import { createAlgorithm04 } from '../../type/matrix/utils/algorithm04.js';
5
- import { createAlgorithm10 } from '../../type/matrix/utils/algorithm10.js';
6
- import { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';
7
- import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
2
+ import { createMatAlgo01xDSid } from '../../type/matrix/utils/matAlgo01xDSid.js';
3
+ import { createMatAlgo04xSidSid } from '../../type/matrix/utils/matAlgo04xSidSid.js';
4
+ import { createMatAlgo10xSids } from '../../type/matrix/utils/matAlgo10xSids.js';
5
+ import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
8
6
  var name = 'add';
9
7
  var dependencies = ['typed', 'matrix', 'addScalar', 'equalScalar', 'DenseMatrix', 'SparseMatrix'];
10
8
  export var createAdd = /* #__PURE__ */factory(name, dependencies, _ref => {
@@ -16,22 +14,20 @@ export var createAdd = /* #__PURE__ */factory(name, dependencies, _ref => {
16
14
  DenseMatrix,
17
15
  SparseMatrix
18
16
  } = _ref;
19
- var algorithm01 = createAlgorithm01({
17
+ var matAlgo01xDSid = createMatAlgo01xDSid({
20
18
  typed
21
19
  });
22
- var algorithm04 = createAlgorithm04({
20
+ var matAlgo04xSidSid = createMatAlgo04xSidSid({
23
21
  typed,
24
22
  equalScalar
25
23
  });
26
- var algorithm10 = createAlgorithm10({
24
+ var matAlgo10xSids = createMatAlgo10xSids({
27
25
  typed,
28
26
  DenseMatrix
29
27
  });
30
- var algorithm13 = createAlgorithm13({
31
- typed
32
- });
33
- var algorithm14 = createAlgorithm14({
34
- typed
28
+ var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
29
+ typed,
30
+ matrix
35
31
  });
36
32
  /**
37
33
  * Add two or more values, `x + y`.
@@ -68,61 +64,21 @@ export var createAdd = /* #__PURE__ */factory(name, dependencies, _ref => {
68
64
  * @return {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} Sum of `x` and `y`
69
65
  */
70
66
 
71
- return typed(name, extend({
72
- // we extend the signatures of addScalar with signatures dealing with matrices
73
- 'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {
74
- return algorithm13(x, y, addScalar);
75
- },
76
- 'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {
77
- return algorithm01(x, y, addScalar, false);
78
- },
79
- 'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {
80
- return algorithm01(y, x, addScalar, true);
81
- },
82
- 'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {
83
- return algorithm04(x, y, addScalar);
84
- },
85
- 'Array, Array': function ArrayArray(x, y) {
86
- // use matrix implementation
87
- return this(matrix(x), matrix(y)).valueOf();
88
- },
89
- 'Array, Matrix': function ArrayMatrix(x, y) {
90
- // use matrix implementation
91
- return this(matrix(x), y);
92
- },
93
- 'Matrix, Array': function MatrixArray(x, y) {
94
- // use matrix implementation
95
- return this(x, matrix(y));
96
- },
97
- 'DenseMatrix, any': function DenseMatrixAny(x, y) {
98
- return algorithm14(x, y, addScalar, false);
99
- },
100
- 'SparseMatrix, any': function SparseMatrixAny(x, y) {
101
- return algorithm10(x, y, addScalar, false);
102
- },
103
- 'any, DenseMatrix': function anyDenseMatrix(x, y) {
104
- return algorithm14(y, x, addScalar, true);
105
- },
106
- 'any, SparseMatrix': function anySparseMatrix(x, y) {
107
- return algorithm10(y, x, addScalar, true);
108
- },
109
- 'Array, any': function ArrayAny(x, y) {
110
- // use matrix implementation
111
- return algorithm14(matrix(x), y, addScalar, false).valueOf();
112
- },
113
- 'any, Array': function anyArray(x, y) {
114
- // use matrix implementation
115
- return algorithm14(matrix(y), x, addScalar, true).valueOf();
116
- },
67
+ return typed(name, {
117
68
  'any, any': addScalar,
118
- 'any, any, ...any': function anyAnyAny(x, y, rest) {
119
- var result = this(x, y);
69
+ 'any, any, ...any': typed.referToSelf(self => (x, y, rest) => {
70
+ var result = self(x, y);
120
71
 
121
72
  for (var i = 0; i < rest.length; i++) {
122
- result = this(result, rest[i]);
73
+ result = self(result, rest[i]);
123
74
  }
124
75
 
125
76
  return result;
126
- }
127
- }, addScalar.signatures));
77
+ })
78
+ }, matrixAlgorithmSuite({
79
+ elop: addScalar,
80
+ DS: matAlgo01xDSid,
81
+ SS: matAlgo04xSidSid,
82
+ Ss: matAlgo10xSids
83
+ }));
128
84
  });
@@ -30,14 +30,20 @@ export var createAddScalar = /* #__PURE__ */factory(name, dependencies, _ref =>
30
30
  'Fraction, Fraction': function FractionFraction(x, y) {
31
31
  return x.add(y);
32
32
  },
33
- 'Unit, Unit': function UnitUnit(x, y) {
34
- if (x.value === null || x.value === undefined) throw new Error('Parameter x contains a unit with undefined value');
35
- if (y.value === null || y.value === undefined) throw new Error('Parameter y contains a unit with undefined value');
33
+ 'Unit, Unit': typed.referToSelf(self => (x, y) => {
34
+ if (x.value === null || x.value === undefined) {
35
+ throw new Error('Parameter x contains a unit with undefined value');
36
+ }
37
+
38
+ if (y.value === null || y.value === undefined) {
39
+ throw new Error('Parameter y contains a unit with undefined value');
40
+ }
41
+
36
42
  if (!x.equalBase(y)) throw new Error('Units do not match');
37
43
  var res = x.clone();
38
- res.value = this(res.value, y.value);
44
+ res.value = typed.find(self, [res.valueType(), y.valueType()])(res.value, y.value);
39
45
  res.fixPrefix = false;
40
46
  return res;
41
- }
47
+ })
42
48
  });
43
49
  });