mathjs 10.6.2 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/HISTORY.md +74 -1
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +2 -41
  4. package/lib/browser/math.js.LICENSE.txt +43 -0
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +6 -5
  7. package/lib/cjs/core/function/import.js +4 -14
  8. package/lib/cjs/core/function/typed.js +54 -12
  9. package/lib/cjs/defaultInstance.js +3 -3
  10. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  11. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  12. package/lib/cjs/entry/configReadonly.js +1 -1
  13. package/lib/cjs/entry/dependenciesAny/dependenciesChainClass.generated.js +3 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesKldivergence.generated.js +3 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +3 -0
  17. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +3 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +56 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +6 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesSqrtm.generated.js +3 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesStd.generated.js +3 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesStdTransform.generated.js +3 -0
  23. package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesChainClass.generated.js +3 -0
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  26. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +3 -0
  27. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +3 -0
  28. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +50 -0
  29. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +6 -0
  30. package/lib/cjs/entry/dependenciesNumber/dependenciesStd.generated.js +3 -0
  31. package/lib/cjs/entry/dependenciesNumber/dependenciesStdTransform.generated.js +3 -0
  32. package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
  33. package/lib/cjs/entry/impureFunctionsAny.generated.js +87 -61
  34. package/lib/cjs/entry/impureFunctionsNumber.generated.js +93 -69
  35. package/lib/cjs/entry/pureFunctionsAny.generated.js +50 -45
  36. package/lib/cjs/entry/pureFunctionsNumber.generated.js +22 -19
  37. package/lib/cjs/expression/Parser.js +1 -1
  38. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
  39. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
  40. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  41. package/lib/cjs/expression/node/AccessorNode.js +216 -173
  42. package/lib/cjs/expression/node/ArrayNode.js +206 -160
  43. package/lib/cjs/expression/node/AssignmentNode.js +321 -270
  44. package/lib/cjs/expression/node/BlockNode.js +223 -172
  45. package/lib/cjs/expression/node/ConditionalNode.js +253 -193
  46. package/lib/cjs/expression/node/ConstantNode.js +216 -171
  47. package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
  48. package/lib/cjs/expression/node/FunctionNode.js +456 -416
  49. package/lib/cjs/expression/node/IndexNode.js +256 -210
  50. package/lib/cjs/expression/node/Node.js +411 -378
  51. package/lib/cjs/expression/node/ObjectNode.js +223 -178
  52. package/lib/cjs/expression/node/OperatorNode.js +474 -397
  53. package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
  54. package/lib/cjs/expression/node/RangeNode.js +272 -224
  55. package/lib/cjs/expression/node/RelationalNode.js +246 -195
  56. package/lib/cjs/expression/node/SymbolNode.js +219 -172
  57. package/lib/cjs/expression/node/utils/access.js +1 -1
  58. package/lib/cjs/expression/node/utils/assign.js +1 -1
  59. package/lib/cjs/expression/operators.js +117 -23
  60. package/lib/cjs/expression/parse.js +37 -19
  61. package/lib/cjs/expression/transform/std.transform.js +3 -1
  62. package/lib/cjs/factoriesAny.js +8 -0
  63. package/lib/cjs/factoriesNumber.js +10 -1
  64. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  65. package/lib/cjs/function/algebra/derivative.js +22 -30
  66. package/lib/cjs/function/algebra/leafCount.js +0 -3
  67. package/lib/cjs/function/algebra/rationalize.js +78 -108
  68. package/lib/cjs/function/algebra/resolve.js +53 -16
  69. package/lib/cjs/function/algebra/simplify/util.js +1 -1
  70. package/lib/cjs/function/algebra/simplify.js +87 -114
  71. package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
  72. package/lib/cjs/function/algebra/simplifyCore.js +196 -93
  73. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  74. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  75. package/lib/cjs/function/algebra/symbolicEqual.js +9 -26
  76. package/lib/cjs/function/arithmetic/abs.js +7 -14
  77. package/lib/cjs/function/arithmetic/add.js +26 -70
  78. package/lib/cjs/function/arithmetic/addScalar.js +17 -9
  79. package/lib/cjs/function/arithmetic/cbrt.js +7 -11
  80. package/lib/cjs/function/arithmetic/ceil.js +56 -46
  81. package/lib/cjs/function/arithmetic/cube.js +5 -10
  82. package/lib/cjs/function/arithmetic/divide.js +7 -7
  83. package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
  84. package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
  85. package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
  86. package/lib/cjs/function/arithmetic/dotPow.js +30 -63
  87. package/lib/cjs/function/arithmetic/exp.js +8 -12
  88. package/lib/cjs/function/arithmetic/expm1.js +10 -10
  89. package/lib/cjs/function/arithmetic/fix.js +33 -27
  90. package/lib/cjs/function/arithmetic/floor.js +56 -46
  91. package/lib/cjs/function/arithmetic/gcd.js +27 -68
  92. package/lib/cjs/function/arithmetic/hypot.js +9 -5
  93. package/lib/cjs/function/arithmetic/invmod.js +1 -1
  94. package/lib/cjs/function/arithmetic/lcm.js +27 -68
  95. package/lib/cjs/function/arithmetic/log.js +10 -12
  96. package/lib/cjs/function/arithmetic/log10.js +5 -3
  97. package/lib/cjs/function/arithmetic/log1p.js +11 -7
  98. package/lib/cjs/function/arithmetic/log2.js +5 -3
  99. package/lib/cjs/function/arithmetic/mod.js +22 -64
  100. package/lib/cjs/function/arithmetic/multiply.js +40 -35
  101. package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
  102. package/lib/cjs/function/arithmetic/norm.js +1 -5
  103. package/lib/cjs/function/arithmetic/nthRoot.js +80 -92
  104. package/lib/cjs/function/arithmetic/round.js +56 -42
  105. package/lib/cjs/function/arithmetic/sign.js +14 -10
  106. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  107. package/lib/cjs/function/arithmetic/square.js +6 -10
  108. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  109. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  110. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  111. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  112. package/lib/cjs/function/bitwise/bitNot.js +5 -3
  113. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  114. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  115. package/lib/cjs/function/bitwise/leftShift.js +68 -81
  116. package/lib/cjs/function/bitwise/rightArithShift.js +68 -81
  117. package/lib/cjs/function/bitwise/rightLogShift.js +68 -81
  118. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  119. package/lib/cjs/function/complex/arg.js +5 -3
  120. package/lib/cjs/function/complex/conj.js +6 -7
  121. package/lib/cjs/function/complex/im.js +7 -8
  122. package/lib/cjs/function/complex/re.js +6 -10
  123. package/lib/cjs/function/logical/and.js +74 -80
  124. package/lib/cjs/function/logical/not.js +13 -6
  125. package/lib/cjs/function/logical/or.js +21 -63
  126. package/lib/cjs/function/logical/xor.js +21 -63
  127. package/lib/cjs/function/matrix/diff.js +10 -7
  128. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  129. package/lib/cjs/function/matrix/fft.js +2 -2
  130. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  131. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  132. package/lib/cjs/function/matrix/ones.js +2 -1
  133. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  134. package/lib/cjs/function/matrix/transpose.js +47 -48
  135. package/lib/cjs/function/matrix/zeros.js +2 -1
  136. package/lib/cjs/function/probability/factorial.js +5 -3
  137. package/lib/cjs/function/probability/gamma.js +38 -40
  138. package/lib/cjs/function/probability/kldivergence.js +5 -2
  139. package/lib/cjs/function/probability/lgamma.js +30 -30
  140. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  141. package/lib/cjs/function/relational/compare.js +21 -67
  142. package/lib/cjs/function/relational/compareNatural.js +59 -54
  143. package/lib/cjs/function/relational/compareText.js +10 -43
  144. package/lib/cjs/function/relational/compareUnits.js +24 -0
  145. package/lib/cjs/function/relational/equal.js +19 -80
  146. package/lib/cjs/function/relational/equalScalar.js +7 -9
  147. package/lib/cjs/function/relational/larger.js +21 -67
  148. package/lib/cjs/function/relational/largerEq.js +21 -67
  149. package/lib/cjs/function/relational/smaller.js +21 -67
  150. package/lib/cjs/function/relational/smallerEq.js +21 -67
  151. package/lib/cjs/function/relational/unequal.js +19 -80
  152. package/lib/cjs/function/special/erf.js +5 -3
  153. package/lib/cjs/function/statistics/std.js +11 -2
  154. package/lib/cjs/function/trigonometry/acos.js +4 -8
  155. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  156. package/lib/cjs/function/trigonometry/acot.js +4 -8
  157. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  158. package/lib/cjs/function/trigonometry/acsc.js +4 -8
  159. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  160. package/lib/cjs/function/trigonometry/asec.js +4 -8
  161. package/lib/cjs/function/trigonometry/asech.js +4 -8
  162. package/lib/cjs/function/trigonometry/asin.js +4 -9
  163. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  164. package/lib/cjs/function/trigonometry/atan.js +4 -9
  165. package/lib/cjs/function/trigonometry/atan2.js +24 -62
  166. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  167. package/lib/cjs/function/trigonometry/cos.js +11 -20
  168. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  169. package/lib/cjs/function/trigonometry/cot.js +9 -15
  170. package/lib/cjs/function/trigonometry/coth.js +4 -15
  171. package/lib/cjs/function/trigonometry/csc.js +11 -17
  172. package/lib/cjs/function/trigonometry/csch.js +4 -15
  173. package/lib/cjs/function/trigonometry/sec.js +11 -17
  174. package/lib/cjs/function/trigonometry/sech.js +4 -15
  175. package/lib/cjs/function/trigonometry/sin.js +11 -21
  176. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  177. package/lib/cjs/function/trigonometry/tan.js +11 -21
  178. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  179. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  180. package/lib/cjs/function/unit/to.js +7 -41
  181. package/lib/cjs/function/utils/hasNumericValue.js +4 -0
  182. package/lib/cjs/function/utils/isInteger.js +5 -3
  183. package/lib/cjs/function/utils/isNegative.js +10 -6
  184. package/lib/cjs/function/utils/isNumeric.js +5 -3
  185. package/lib/cjs/function/utils/isPositive.js +10 -6
  186. package/lib/cjs/function/utils/isPrime.js +5 -3
  187. package/lib/cjs/function/utils/isZero.js +10 -6
  188. package/lib/cjs/function/utils/numeric.js +11 -4
  189. package/lib/cjs/function/utils/typeOf.js +38 -44
  190. package/lib/cjs/header.js +2 -2
  191. package/lib/cjs/plain/bignumber/index.js +1 -1
  192. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  193. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  194. package/lib/cjs/type/boolean.js +7 -5
  195. package/lib/cjs/type/chain/Chain.js +23 -3
  196. package/lib/cjs/type/complex/Complex.js +18 -14
  197. package/lib/cjs/type/complex/function/complex.js +6 -4
  198. package/lib/cjs/type/fraction/Fraction.js +10 -6
  199. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  200. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  201. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  202. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  203. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  204. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  205. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  206. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  207. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  208. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  209. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  210. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  211. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  213. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  214. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  217. package/lib/cjs/type/number.js +6 -4
  218. package/lib/cjs/type/string.js +7 -5
  219. package/lib/cjs/type/unit/Unit.js +69 -21
  220. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  221. package/lib/cjs/type/unit/function/unit.js +9 -3
  222. package/lib/cjs/utils/customs.js +2 -2
  223. package/lib/cjs/utils/emitter.js +1 -1
  224. package/lib/cjs/utils/function.js +2 -2
  225. package/lib/cjs/utils/is.js +27 -25
  226. package/lib/cjs/utils/latex.js +3 -3
  227. package/lib/cjs/utils/lruQueue.js +1 -1
  228. package/lib/cjs/utils/map.js +3 -3
  229. package/lib/cjs/utils/object.js +2 -2
  230. package/lib/cjs/utils/snapshot.js +30 -57
  231. package/lib/cjs/utils/string.js +3 -3
  232. package/lib/cjs/version.js +1 -1
  233. package/lib/esm/core/create.js +2 -1
  234. package/lib/esm/core/function/import.js +2 -12
  235. package/lib/esm/core/function/typed.js +47 -11
  236. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  237. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  238. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  239. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  240. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  241. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  242. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  243. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  244. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  247. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  249. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  250. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  251. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  252. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  253. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  254. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  255. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  256. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  257. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  258. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  259. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  260. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  261. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  262. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  263. package/lib/esm/expression/node/AccessorNode.js +158 -153
  264. package/lib/esm/expression/node/ArrayNode.js +162 -154
  265. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  266. package/lib/esm/expression/node/BlockNode.js +177 -163
  267. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  268. package/lib/esm/expression/node/ConstantNode.js +171 -163
  269. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  270. package/lib/esm/expression/node/FunctionNode.js +407 -407
  271. package/lib/esm/expression/node/IndexNode.js +206 -198
  272. package/lib/esm/expression/node/Node.js +325 -325
  273. package/lib/esm/expression/node/ObjectNode.js +166 -157
  274. package/lib/esm/expression/node/OperatorNode.js +414 -377
  275. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  276. package/lib/esm/expression/node/RangeNode.js +221 -212
  277. package/lib/esm/expression/node/RelationalNode.js +190 -176
  278. package/lib/esm/expression/node/SymbolNode.js +161 -152
  279. package/lib/esm/expression/operators.js +96 -4
  280. package/lib/esm/expression/parse.js +25 -7
  281. package/lib/esm/expression/transform/std.transform.js +3 -1
  282. package/lib/esm/factoriesAny.js +1 -0
  283. package/lib/esm/factoriesNumber.js +1 -0
  284. package/lib/esm/function/algebra/derivative.js +22 -30
  285. package/lib/esm/function/algebra/leafCount.js +0 -3
  286. package/lib/esm/function/algebra/rationalize.js +83 -114
  287. package/lib/esm/function/algebra/resolve.js +25 -16
  288. package/lib/esm/function/algebra/simplify.js +82 -112
  289. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  290. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  291. package/lib/esm/function/algebra/symbolicEqual.js +9 -26
  292. package/lib/esm/function/arithmetic/abs.js +3 -16
  293. package/lib/esm/function/arithmetic/add.js +21 -65
  294. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  295. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  296. package/lib/esm/function/arithmetic/ceil.js +25 -25
  297. package/lib/esm/function/arithmetic/cube.js +5 -9
  298. package/lib/esm/function/arithmetic/divide.js +7 -7
  299. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  300. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  301. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  302. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  303. package/lib/esm/function/arithmetic/exp.js +8 -11
  304. package/lib/esm/function/arithmetic/expm1.js +10 -9
  305. package/lib/esm/function/arithmetic/fix.js +17 -17
  306. package/lib/esm/function/arithmetic/floor.js +25 -25
  307. package/lib/esm/function/arithmetic/gcd.js +26 -70
  308. package/lib/esm/function/arithmetic/hypot.js +7 -6
  309. package/lib/esm/function/arithmetic/lcm.js +26 -70
  310. package/lib/esm/function/arithmetic/log.js +7 -10
  311. package/lib/esm/function/arithmetic/log10.js +1 -3
  312. package/lib/esm/function/arithmetic/log1p.js +4 -6
  313. package/lib/esm/function/arithmetic/log2.js +1 -3
  314. package/lib/esm/function/arithmetic/mod.js +21 -62
  315. package/lib/esm/function/arithmetic/multiply.js +23 -27
  316. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  317. package/lib/esm/function/arithmetic/norm.js +0 -4
  318. package/lib/esm/function/arithmetic/nthRoot.js +38 -73
  319. package/lib/esm/function/arithmetic/round.js +26 -28
  320. package/lib/esm/function/arithmetic/sign.js +5 -7
  321. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  322. package/lib/esm/function/arithmetic/square.js +6 -9
  323. package/lib/esm/function/arithmetic/subtract.js +31 -95
  324. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  325. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  326. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  327. package/lib/esm/function/bitwise/bitNot.js +1 -3
  328. package/lib/esm/function/bitwise/bitOr.js +16 -59
  329. package/lib/esm/function/bitwise/bitXor.js +16 -59
  330. package/lib/esm/function/bitwise/leftShift.js +38 -60
  331. package/lib/esm/function/bitwise/rightArithShift.js +38 -60
  332. package/lib/esm/function/bitwise/rightLogShift.js +38 -60
  333. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  334. package/lib/esm/function/complex/arg.js +1 -3
  335. package/lib/esm/function/complex/conj.js +3 -12
  336. package/lib/esm/function/complex/im.js +4 -15
  337. package/lib/esm/function/complex/re.js +3 -15
  338. package/lib/esm/function/logical/and.js +35 -57
  339. package/lib/esm/function/logical/not.js +3 -6
  340. package/lib/esm/function/logical/or.js +16 -61
  341. package/lib/esm/function/logical/xor.js +16 -61
  342. package/lib/esm/function/matrix/diff.js +2 -7
  343. package/lib/esm/function/matrix/ones.js +2 -1
  344. package/lib/esm/function/matrix/sqrtm.js +3 -2
  345. package/lib/esm/function/matrix/transpose.js +47 -50
  346. package/lib/esm/function/matrix/zeros.js +2 -1
  347. package/lib/esm/function/probability/factorial.js +1 -3
  348. package/lib/esm/function/probability/gamma.js +38 -39
  349. package/lib/esm/function/probability/kldivergence.js +3 -2
  350. package/lib/esm/function/probability/lgamma.js +29 -29
  351. package/lib/esm/function/relational/compare.js +21 -67
  352. package/lib/esm/function/relational/compareNatural.js +54 -49
  353. package/lib/esm/function/relational/compareText.js +10 -42
  354. package/lib/esm/function/relational/compareUnits.js +15 -0
  355. package/lib/esm/function/relational/equal.js +19 -79
  356. package/lib/esm/function/relational/equalScalar.js +6 -9
  357. package/lib/esm/function/relational/larger.js +23 -73
  358. package/lib/esm/function/relational/largerEq.js +23 -73
  359. package/lib/esm/function/relational/smaller.js +23 -73
  360. package/lib/esm/function/relational/smallerEq.js +23 -73
  361. package/lib/esm/function/relational/unequal.js +19 -79
  362. package/lib/esm/function/special/erf.js +1 -3
  363. package/lib/esm/function/statistics/std.js +10 -2
  364. package/lib/esm/function/trigonometry/acos.js +4 -7
  365. package/lib/esm/function/trigonometry/acosh.js +2 -6
  366. package/lib/esm/function/trigonometry/acot.js +4 -7
  367. package/lib/esm/function/trigonometry/acoth.js +4 -7
  368. package/lib/esm/function/trigonometry/acsc.js +4 -7
  369. package/lib/esm/function/trigonometry/acsch.js +4 -7
  370. package/lib/esm/function/trigonometry/asec.js +4 -7
  371. package/lib/esm/function/trigonometry/asech.js +4 -7
  372. package/lib/esm/function/trigonometry/asin.js +4 -8
  373. package/lib/esm/function/trigonometry/asinh.js +4 -8
  374. package/lib/esm/function/trigonometry/atan.js +4 -8
  375. package/lib/esm/function/trigonometry/atan2.js +25 -64
  376. package/lib/esm/function/trigonometry/atanh.js +4 -8
  377. package/lib/esm/function/trigonometry/cos.js +11 -22
  378. package/lib/esm/function/trigonometry/cosh.js +5 -20
  379. package/lib/esm/function/trigonometry/cot.js +10 -20
  380. package/lib/esm/function/trigonometry/coth.js +6 -20
  381. package/lib/esm/function/trigonometry/csc.js +12 -22
  382. package/lib/esm/function/trigonometry/csch.js +6 -20
  383. package/lib/esm/function/trigonometry/sec.js +12 -22
  384. package/lib/esm/function/trigonometry/sech.js +6 -20
  385. package/lib/esm/function/trigonometry/sin.js +11 -23
  386. package/lib/esm/function/trigonometry/sinh.js +5 -21
  387. package/lib/esm/function/trigonometry/tan.js +11 -23
  388. package/lib/esm/function/trigonometry/tanh.js +5 -21
  389. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  390. package/lib/esm/function/unit/to.js +8 -43
  391. package/lib/esm/function/utils/hasNumericValue.js +2 -0
  392. package/lib/esm/function/utils/isInteger.js +1 -3
  393. package/lib/esm/function/utils/isNegative.js +2 -6
  394. package/lib/esm/function/utils/isNumeric.js +3 -9
  395. package/lib/esm/function/utils/isPositive.js +2 -6
  396. package/lib/esm/function/utils/isPrime.js +1 -3
  397. package/lib/esm/function/utils/isZero.js +2 -6
  398. package/lib/esm/function/utils/numeric.js +11 -4
  399. package/lib/esm/function/utils/typeOf.js +38 -44
  400. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  401. package/lib/esm/type/boolean.js +1 -3
  402. package/lib/esm/type/chain/Chain.js +23 -3
  403. package/lib/esm/type/complex/Complex.js +4 -0
  404. package/lib/esm/type/complex/function/complex.js +1 -3
  405. package/lib/esm/type/fraction/Fraction.js +4 -0
  406. package/lib/esm/type/fraction/function/fraction.js +1 -3
  407. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  408. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  409. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  410. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  411. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  412. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  413. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  414. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  415. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  416. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  417. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  418. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  419. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  420. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  421. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  422. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  423. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  424. package/lib/esm/type/number.js +1 -3
  425. package/lib/esm/type/string.js +1 -3
  426. package/lib/esm/type/unit/Unit.js +61 -13
  427. package/lib/esm/type/unit/function/createUnit.js +2 -1
  428. package/lib/esm/type/unit/function/unit.js +5 -3
  429. package/lib/esm/utils/is.js +18 -18
  430. package/lib/esm/utils/snapshot.js +22 -48
  431. package/lib/esm/version.js +1 -1
  432. package/package.json +21 -24
  433. package/types/index.d.ts +202 -181
  434. package/types/index.ts +264 -57
  435. package/lib/cjs/utils/polyfills.js +0 -14
  436. package/lib/esm/utils/polyfills.js +0 -12
@@ -1,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
  });
@@ -49,32 +49,15 @@ export var createSymbolicEqual = /* #__PURE__ */factory(name, dependencies, _ref
49
49
  * Returns true if a valid manipulation making the expressions equal
50
50
  * is found.
51
51
  */
52
+ function _symbolicEqual(e1, e2) {
53
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
54
+ var diff = new OperatorNode('-', 'subtract', [e1, e2]);
55
+ var simplified = simplify(diff, {}, options);
56
+ return isConstantNode(simplified) && !simplified.value;
57
+ }
58
+
52
59
  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
- }
60
+ 'Node, Node': _symbolicEqual,
61
+ 'Node, Node, Object': _symbolicEqual
79
62
  });
80
63
  });
@@ -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
  });
@@ -1,6 +1,5 @@
1
1
  import { factory } from '../../utils/factory.js';
2
2
  import { isBigNumber, isComplex, isFraction } from '../../utils/is.js';
3
- import { deepMap } from '../../utils/collection.js';
4
3
  import { cbrtNumber } from '../../plain/number/index.js';
5
4
  var name = 'cbrt';
6
5
  var dependencies = ['config', 'typed', 'isNegative', 'unaryMinus', 'matrix', 'Complex', 'BigNumber', 'Fraction'];
@@ -19,7 +18,9 @@ export var createCbrt = /* #__PURE__ */factory(name, dependencies, _ref => {
19
18
  /**
20
19
  * Calculate the cubic root of a value.
21
20
  *
22
- * For matrices, the function is evaluated element wise.
21
+ * To avoid confusion with the matrix cube root, this function does not
22
+ * apply to matrices. For a matrix, to take the cube root elementwise,
23
+ * see the examples.
23
24
  *
24
25
  * Syntax:
25
26
  *
@@ -32,7 +33,7 @@ export var createCbrt = /* #__PURE__ */factory(name, dependencies, _ref => {
32
33
  * math.cube(3) // returns 27
33
34
  * math.cbrt(-64) // returns -4
34
35
  * math.cbrt(math.unit('27 m^3')) // returns Unit 3 m
35
- * math.cbrt([27, 64, 125]) // returns [3, 4, 5]
36
+ * math.map([27, 64, 125], x => math.cbrt(x)) // returns [3, 4, 5]
36
37
  *
37
38
  * const x = math.complex('8i')
38
39
  * math.cbrt(x) // returns Complex 1.7320508075689 + i
@@ -46,13 +47,13 @@ export var createCbrt = /* #__PURE__ */factory(name, dependencies, _ref => {
46
47
  *
47
48
  * square, sqrt, cube
48
49
  *
49
- * @param {number | BigNumber | Complex | Unit | Array | Matrix} x
50
+ * @param {number | BigNumber | Complex | Unit} x
50
51
  * Value for which to calculate the cubic root.
51
52
  * @param {boolean} [allRoots] Optional, false by default. Only applicable
52
53
  * when `x` is a number or complex number. If true, all complex
53
54
  * roots are returned, if false (default) the principal root is
54
55
  * returned.
55
- * @return {number | BigNumber | Complex | Unit | Array | Matrix}
56
+ * @return {number | BigNumber | Complex | Unit}
56
57
  * Returns the cubic root of `x`
57
58
  */
58
59
  return typed(name, {
@@ -64,11 +65,7 @@ export var createCbrt = /* #__PURE__ */factory(name, dependencies, _ref => {
64
65
  BigNumber: function BigNumber(x) {
65
66
  return x.cbrt();
66
67
  },
67
- Unit: _cbrtUnit,
68
- 'Array | Matrix': function ArrayMatrix(x) {
69
- // deep map collection, skip zeros since cbrt(0) = 0
70
- return deepMap(x, this, true);
71
- }
68
+ Unit: _cbrtUnit
72
69
  });
73
70
  /**
74
71
  * Calculate the cubic root for a complex number