mathjs 10.6.3 → 11.0.1

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 (451) 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 +25 -33
  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 +90 -115
  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 +14 -32
  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 +34 -28
  90. package/lib/cjs/function/arithmetic/floor.js +57 -47
  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 +2 -2
  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 +83 -95
  104. package/lib/cjs/function/arithmetic/nthRoots.js +2 -2
  105. package/lib/cjs/function/arithmetic/round.js +56 -42
  106. package/lib/cjs/function/arithmetic/sign.js +14 -10
  107. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  108. package/lib/cjs/function/arithmetic/square.js +6 -10
  109. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  110. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  111. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  112. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  113. package/lib/cjs/function/bitwise/bitNot.js +6 -4
  114. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  115. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  116. package/lib/cjs/function/bitwise/leftShift.js +69 -82
  117. package/lib/cjs/function/bitwise/rightArithShift.js +69 -82
  118. package/lib/cjs/function/bitwise/rightLogShift.js +69 -82
  119. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  120. package/lib/cjs/function/complex/arg.js +5 -3
  121. package/lib/cjs/function/complex/conj.js +6 -7
  122. package/lib/cjs/function/complex/im.js +7 -8
  123. package/lib/cjs/function/complex/re.js +6 -10
  124. package/lib/cjs/function/geometry/distance.js +2 -2
  125. package/lib/cjs/function/logical/and.js +74 -80
  126. package/lib/cjs/function/logical/not.js +13 -6
  127. package/lib/cjs/function/logical/or.js +21 -63
  128. package/lib/cjs/function/logical/xor.js +21 -63
  129. package/lib/cjs/function/matrix/diff.js +11 -8
  130. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  131. package/lib/cjs/function/matrix/fft.js +2 -2
  132. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  133. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  134. package/lib/cjs/function/matrix/ones.js +2 -1
  135. package/lib/cjs/function/matrix/rotate.js +5 -5
  136. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  137. package/lib/cjs/function/matrix/transpose.js +47 -48
  138. package/lib/cjs/function/matrix/zeros.js +2 -1
  139. package/lib/cjs/function/probability/factorial.js +5 -3
  140. package/lib/cjs/function/probability/gamma.js +38 -40
  141. package/lib/cjs/function/probability/kldivergence.js +5 -2
  142. package/lib/cjs/function/probability/lgamma.js +30 -30
  143. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  144. package/lib/cjs/function/relational/compare.js +21 -67
  145. package/lib/cjs/function/relational/compareNatural.js +59 -54
  146. package/lib/cjs/function/relational/compareText.js +10 -43
  147. package/lib/cjs/function/relational/compareUnits.js +24 -0
  148. package/lib/cjs/function/relational/equal.js +19 -80
  149. package/lib/cjs/function/relational/equalScalar.js +7 -9
  150. package/lib/cjs/function/relational/larger.js +21 -67
  151. package/lib/cjs/function/relational/largerEq.js +21 -67
  152. package/lib/cjs/function/relational/smaller.js +21 -67
  153. package/lib/cjs/function/relational/smallerEq.js +21 -67
  154. package/lib/cjs/function/relational/unequal.js +19 -80
  155. package/lib/cjs/function/special/erf.js +5 -3
  156. package/lib/cjs/function/statistics/std.js +11 -2
  157. package/lib/cjs/function/string/format.js +2 -2
  158. package/lib/cjs/function/string/hex.js +1 -2
  159. package/lib/cjs/function/trigonometry/acos.js +4 -8
  160. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  161. package/lib/cjs/function/trigonometry/acot.js +6 -11
  162. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  163. package/lib/cjs/function/trigonometry/acsc.js +6 -11
  164. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  165. package/lib/cjs/function/trigonometry/asec.js +6 -10
  166. package/lib/cjs/function/trigonometry/asech.js +4 -8
  167. package/lib/cjs/function/trigonometry/asin.js +5 -10
  168. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  169. package/lib/cjs/function/trigonometry/atan.js +5 -11
  170. package/lib/cjs/function/trigonometry/atan2.js +25 -63
  171. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  172. package/lib/cjs/function/trigonometry/cos.js +11 -20
  173. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  174. package/lib/cjs/function/trigonometry/cot.js +9 -15
  175. package/lib/cjs/function/trigonometry/coth.js +4 -15
  176. package/lib/cjs/function/trigonometry/csc.js +11 -17
  177. package/lib/cjs/function/trigonometry/csch.js +4 -15
  178. package/lib/cjs/function/trigonometry/sec.js +11 -17
  179. package/lib/cjs/function/trigonometry/sech.js +4 -15
  180. package/lib/cjs/function/trigonometry/sin.js +11 -21
  181. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  182. package/lib/cjs/function/trigonometry/tan.js +11 -21
  183. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  184. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  185. package/lib/cjs/function/unit/to.js +7 -41
  186. package/lib/cjs/function/utils/clone.js +1 -1
  187. package/lib/cjs/function/utils/hasNumericValue.js +5 -1
  188. package/lib/cjs/function/utils/isInteger.js +6 -4
  189. package/lib/cjs/function/utils/isNaN.js +1 -1
  190. package/lib/cjs/function/utils/isNegative.js +11 -7
  191. package/lib/cjs/function/utils/isNumeric.js +6 -4
  192. package/lib/cjs/function/utils/isPositive.js +11 -7
  193. package/lib/cjs/function/utils/isPrime.js +5 -3
  194. package/lib/cjs/function/utils/isZero.js +21 -17
  195. package/lib/cjs/function/utils/numeric.js +11 -4
  196. package/lib/cjs/function/utils/typeOf.js +38 -44
  197. package/lib/cjs/header.js +2 -2
  198. package/lib/cjs/plain/bignumber/index.js +1 -1
  199. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  200. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  201. package/lib/cjs/type/boolean.js +7 -5
  202. package/lib/cjs/type/chain/Chain.js +23 -3
  203. package/lib/cjs/type/complex/Complex.js +18 -14
  204. package/lib/cjs/type/complex/function/complex.js +6 -4
  205. package/lib/cjs/type/fraction/Fraction.js +10 -6
  206. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  207. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  208. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  209. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  210. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  211. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  213. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  214. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  217. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  218. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  219. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  220. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  221. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  222. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  223. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  224. package/lib/cjs/type/number.js +6 -4
  225. package/lib/cjs/type/string.js +7 -5
  226. package/lib/cjs/type/unit/Unit.js +69 -21
  227. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  228. package/lib/cjs/type/unit/function/unit.js +9 -3
  229. package/lib/cjs/utils/customs.js +2 -2
  230. package/lib/cjs/utils/emitter.js +1 -1
  231. package/lib/cjs/utils/function.js +2 -2
  232. package/lib/cjs/utils/is.js +27 -25
  233. package/lib/cjs/utils/latex.js +3 -3
  234. package/lib/cjs/utils/lruQueue.js +1 -1
  235. package/lib/cjs/utils/map.js +3 -3
  236. package/lib/cjs/utils/object.js +2 -2
  237. package/lib/cjs/utils/snapshot.js +30 -57
  238. package/lib/cjs/utils/string.js +3 -3
  239. package/lib/cjs/version.js +1 -1
  240. package/lib/esm/core/create.js +2 -1
  241. package/lib/esm/core/function/import.js +2 -12
  242. package/lib/esm/core/function/typed.js +47 -11
  243. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  244. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  247. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  249. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  250. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  251. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  252. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  253. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  254. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  255. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  256. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  257. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  258. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  259. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  260. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  261. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  262. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  263. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  264. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  265. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  266. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  267. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  268. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  269. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  270. package/lib/esm/expression/node/AccessorNode.js +158 -153
  271. package/lib/esm/expression/node/ArrayNode.js +162 -154
  272. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  273. package/lib/esm/expression/node/BlockNode.js +177 -163
  274. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  275. package/lib/esm/expression/node/ConstantNode.js +171 -163
  276. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  277. package/lib/esm/expression/node/FunctionNode.js +407 -407
  278. package/lib/esm/expression/node/IndexNode.js +206 -198
  279. package/lib/esm/expression/node/Node.js +325 -325
  280. package/lib/esm/expression/node/ObjectNode.js +166 -157
  281. package/lib/esm/expression/node/OperatorNode.js +414 -377
  282. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  283. package/lib/esm/expression/node/RangeNode.js +221 -212
  284. package/lib/esm/expression/node/RelationalNode.js +190 -176
  285. package/lib/esm/expression/node/SymbolNode.js +161 -152
  286. package/lib/esm/expression/operators.js +96 -4
  287. package/lib/esm/expression/parse.js +25 -7
  288. package/lib/esm/expression/transform/std.transform.js +3 -1
  289. package/lib/esm/factoriesAny.js +1 -0
  290. package/lib/esm/factoriesNumber.js +1 -0
  291. package/lib/esm/function/algebra/derivative.js +25 -33
  292. package/lib/esm/function/algebra/leafCount.js +0 -3
  293. package/lib/esm/function/algebra/rationalize.js +83 -114
  294. package/lib/esm/function/algebra/resolve.js +25 -16
  295. package/lib/esm/function/algebra/simplify.js +85 -113
  296. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  297. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  298. package/lib/esm/function/algebra/symbolicEqual.js +14 -32
  299. package/lib/esm/function/arithmetic/abs.js +3 -16
  300. package/lib/esm/function/arithmetic/add.js +21 -65
  301. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  302. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  303. package/lib/esm/function/arithmetic/ceil.js +25 -25
  304. package/lib/esm/function/arithmetic/cube.js +5 -9
  305. package/lib/esm/function/arithmetic/divide.js +7 -7
  306. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  307. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  308. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  309. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  310. package/lib/esm/function/arithmetic/exp.js +8 -11
  311. package/lib/esm/function/arithmetic/expm1.js +10 -9
  312. package/lib/esm/function/arithmetic/fix.js +18 -18
  313. package/lib/esm/function/arithmetic/floor.js +26 -26
  314. package/lib/esm/function/arithmetic/gcd.js +26 -70
  315. package/lib/esm/function/arithmetic/hypot.js +7 -6
  316. package/lib/esm/function/arithmetic/invmod.js +1 -1
  317. package/lib/esm/function/arithmetic/lcm.js +26 -70
  318. package/lib/esm/function/arithmetic/log.js +7 -10
  319. package/lib/esm/function/arithmetic/log10.js +1 -3
  320. package/lib/esm/function/arithmetic/log1p.js +4 -6
  321. package/lib/esm/function/arithmetic/log2.js +1 -3
  322. package/lib/esm/function/arithmetic/mod.js +21 -62
  323. package/lib/esm/function/arithmetic/multiply.js +23 -27
  324. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  325. package/lib/esm/function/arithmetic/norm.js +0 -4
  326. package/lib/esm/function/arithmetic/nthRoot.js +41 -76
  327. package/lib/esm/function/arithmetic/nthRoots.js +2 -2
  328. package/lib/esm/function/arithmetic/round.js +26 -28
  329. package/lib/esm/function/arithmetic/sign.js +5 -7
  330. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  331. package/lib/esm/function/arithmetic/square.js +6 -9
  332. package/lib/esm/function/arithmetic/subtract.js +31 -95
  333. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  334. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  335. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  336. package/lib/esm/function/bitwise/bitNot.js +2 -4
  337. package/lib/esm/function/bitwise/bitOr.js +16 -59
  338. package/lib/esm/function/bitwise/bitXor.js +16 -59
  339. package/lib/esm/function/bitwise/leftShift.js +39 -61
  340. package/lib/esm/function/bitwise/rightArithShift.js +39 -61
  341. package/lib/esm/function/bitwise/rightLogShift.js +39 -61
  342. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  343. package/lib/esm/function/complex/arg.js +1 -3
  344. package/lib/esm/function/complex/conj.js +3 -12
  345. package/lib/esm/function/complex/im.js +4 -15
  346. package/lib/esm/function/complex/re.js +3 -15
  347. package/lib/esm/function/geometry/distance.js +2 -2
  348. package/lib/esm/function/logical/and.js +35 -57
  349. package/lib/esm/function/logical/not.js +3 -6
  350. package/lib/esm/function/logical/or.js +16 -61
  351. package/lib/esm/function/logical/xor.js +16 -61
  352. package/lib/esm/function/matrix/diff.js +3 -8
  353. package/lib/esm/function/matrix/ones.js +2 -1
  354. package/lib/esm/function/matrix/rotate.js +5 -5
  355. package/lib/esm/function/matrix/sqrtm.js +3 -2
  356. package/lib/esm/function/matrix/transpose.js +47 -50
  357. package/lib/esm/function/matrix/zeros.js +2 -1
  358. package/lib/esm/function/probability/factorial.js +1 -3
  359. package/lib/esm/function/probability/gamma.js +38 -39
  360. package/lib/esm/function/probability/kldivergence.js +3 -2
  361. package/lib/esm/function/probability/lgamma.js +29 -29
  362. package/lib/esm/function/relational/compare.js +21 -67
  363. package/lib/esm/function/relational/compareNatural.js +54 -49
  364. package/lib/esm/function/relational/compareText.js +10 -42
  365. package/lib/esm/function/relational/compareUnits.js +15 -0
  366. package/lib/esm/function/relational/equal.js +19 -79
  367. package/lib/esm/function/relational/equalScalar.js +6 -9
  368. package/lib/esm/function/relational/larger.js +23 -73
  369. package/lib/esm/function/relational/largerEq.js +23 -73
  370. package/lib/esm/function/relational/smaller.js +23 -73
  371. package/lib/esm/function/relational/smallerEq.js +23 -73
  372. package/lib/esm/function/relational/unequal.js +19 -79
  373. package/lib/esm/function/special/erf.js +1 -3
  374. package/lib/esm/function/statistics/std.js +10 -2
  375. package/lib/esm/function/string/format.js +2 -2
  376. package/lib/esm/function/string/hex.js +1 -2
  377. package/lib/esm/function/trigonometry/acos.js +4 -7
  378. package/lib/esm/function/trigonometry/acosh.js +2 -6
  379. package/lib/esm/function/trigonometry/acot.js +6 -10
  380. package/lib/esm/function/trigonometry/acoth.js +4 -7
  381. package/lib/esm/function/trigonometry/acsc.js +6 -10
  382. package/lib/esm/function/trigonometry/acsch.js +4 -7
  383. package/lib/esm/function/trigonometry/asec.js +6 -9
  384. package/lib/esm/function/trigonometry/asech.js +4 -7
  385. package/lib/esm/function/trigonometry/asin.js +5 -9
  386. package/lib/esm/function/trigonometry/asinh.js +4 -8
  387. package/lib/esm/function/trigonometry/atan.js +5 -10
  388. package/lib/esm/function/trigonometry/atan2.js +26 -65
  389. package/lib/esm/function/trigonometry/atanh.js +4 -8
  390. package/lib/esm/function/trigonometry/cos.js +11 -22
  391. package/lib/esm/function/trigonometry/cosh.js +5 -20
  392. package/lib/esm/function/trigonometry/cot.js +10 -20
  393. package/lib/esm/function/trigonometry/coth.js +6 -20
  394. package/lib/esm/function/trigonometry/csc.js +12 -22
  395. package/lib/esm/function/trigonometry/csch.js +6 -20
  396. package/lib/esm/function/trigonometry/sec.js +12 -22
  397. package/lib/esm/function/trigonometry/sech.js +6 -20
  398. package/lib/esm/function/trigonometry/sin.js +11 -23
  399. package/lib/esm/function/trigonometry/sinh.js +5 -21
  400. package/lib/esm/function/trigonometry/tan.js +11 -23
  401. package/lib/esm/function/trigonometry/tanh.js +5 -21
  402. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  403. package/lib/esm/function/unit/to.js +8 -43
  404. package/lib/esm/function/utils/clone.js +1 -1
  405. package/lib/esm/function/utils/hasNumericValue.js +3 -1
  406. package/lib/esm/function/utils/isInteger.js +2 -4
  407. package/lib/esm/function/utils/isNaN.js +1 -1
  408. package/lib/esm/function/utils/isNegative.js +3 -7
  409. package/lib/esm/function/utils/isNumeric.js +4 -10
  410. package/lib/esm/function/utils/isPositive.js +3 -7
  411. package/lib/esm/function/utils/isPrime.js +1 -3
  412. package/lib/esm/function/utils/isZero.js +13 -17
  413. package/lib/esm/function/utils/numeric.js +11 -4
  414. package/lib/esm/function/utils/typeOf.js +38 -44
  415. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  416. package/lib/esm/type/boolean.js +1 -3
  417. package/lib/esm/type/chain/Chain.js +23 -3
  418. package/lib/esm/type/complex/Complex.js +4 -0
  419. package/lib/esm/type/complex/function/complex.js +1 -3
  420. package/lib/esm/type/fraction/Fraction.js +4 -0
  421. package/lib/esm/type/fraction/function/fraction.js +1 -3
  422. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  423. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  424. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  425. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  426. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  427. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  428. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  429. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  430. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  431. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  432. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  433. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  434. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  435. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  436. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  437. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  438. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  439. package/lib/esm/type/number.js +1 -3
  440. package/lib/esm/type/string.js +1 -3
  441. package/lib/esm/type/unit/Unit.js +61 -13
  442. package/lib/esm/type/unit/function/createUnit.js +2 -1
  443. package/lib/esm/type/unit/function/unit.js +5 -3
  444. package/lib/esm/utils/is.js +18 -18
  445. package/lib/esm/utils/snapshot.js +22 -48
  446. package/lib/esm/version.js +1 -1
  447. package/package.json +21 -24
  448. package/types/index.d.ts +215 -183
  449. package/types/index.ts +358 -144
  450. package/lib/cjs/utils/polyfills.js +0 -14
  451. package/lib/esm/utils/polyfills.js +0 -12
package/types/index.ts CHANGED
@@ -1,34 +1,48 @@
1
1
  import {
2
- create,
3
- factory,
4
- all,
5
- MathJsFunctionName,
6
- fractionDependencies,
2
+ AccessorNode,
7
3
  addDependencies,
8
- divideDependencies,
9
- formatDependencies,
10
- MathNode,
11
- MathJsChain,
4
+ all,
5
+ ArrayNode,
6
+ AssignmentNode,
12
7
  BigNumber,
13
- MathCollection,
8
+ BlockNode,
14
9
  Complex,
15
- Unit,
10
+ ConditionalNode,
11
+ ConstantNode,
12
+ create,
13
+ divideDependencies,
14
+ EvalFunction,
15
+ factory,
16
+ formatDependencies,
16
17
  Fraction,
17
- MathArray,
18
+ fractionDependencies,
19
+ FunctionAssignmentNode,
20
+ FunctionNode,
21
+ Help,
18
22
  Index,
19
- Matrix,
20
- EvalFunction,
23
+ IndexNode,
21
24
  LUDecomposition,
22
- QRDecomposition,
23
- SLUDecomposition,
24
- MathType,
25
+ MathArray,
26
+ MathCollection,
27
+ MathJsChain,
28
+ MathJsFunctionName,
29
+ MathNode,
30
+ MathNodeCommon,
25
31
  MathNumericType,
26
- ConstantNode,
32
+ MathType,
33
+ Matrix,
34
+ ObjectNode,
27
35
  OperatorNode,
28
36
  OperatorNodeFn,
29
37
  OperatorNodeOp,
30
- SymbolNode,
31
38
  ParenthesisNode,
39
+ PolarCoordinates,
40
+ QRDecomposition,
41
+ RangeNode,
42
+ SimplifyRule,
43
+ SLUDecomposition,
44
+ SymbolNode,
45
+ Unit,
32
46
  } from 'mathjs'
33
47
  import * as assert from 'assert'
34
48
  import { expectTypeOf } from 'expect-type'
@@ -88,6 +102,22 @@ Basic usage examples
88
102
 
89
103
  math.variance(math.variance(m2by3, 'uncorrected'))
90
104
 
105
+ // count and sum check
106
+ math.count([10, 10, 10])
107
+ math.count([
108
+ [1, 2, 3],
109
+ [4, 5, 6],
110
+ ])
111
+ math.count('mathjs')
112
+
113
+ math.sum(1, 2, 3, 4)
114
+ math.sum([1, 2, 3, 4])
115
+ math.sum([
116
+ [1, 2],
117
+ [3, 4],
118
+ [5, 6],
119
+ ])
120
+
91
121
  // expressions
92
122
  math.evaluate('1.2 * (2 + 4.5)')
93
123
 
@@ -108,8 +138,8 @@ Basic usage examples
108
138
  ) // Matrix + Array
109
139
 
110
140
  // narrowed type inference
111
- const _b: math.Matrix = math.add(math.matrix([2]), math.matrix([3]))
112
- const _c: math.Matrix = math.subtract(math.matrix([4]), math.matrix([5]))
141
+ const _b: Matrix = math.add(math.matrix([2]), math.matrix([3]))
142
+ const _c: Matrix = math.subtract(math.matrix([4]), math.matrix([5]))
113
143
  }
114
144
 
115
145
  /*
@@ -134,6 +164,23 @@ Bignumbers examples
134
164
  }
135
165
  }
136
166
 
167
+ /*
168
+ Arithmetic function examples
169
+ */
170
+ {
171
+ const math = create(all, {})
172
+
173
+ const _e: number = math.exp(1)
174
+ const _bige: BigNumber = math.exp(math.bignumber(1))
175
+ const _compe: Complex = math.exp(math.complex(1, 0))
176
+ // TODO: Typescript type declarations are not understanding typed-function's
177
+ // automatic conversions, so the following do not work:
178
+
179
+ // const _compeagain: Complex = math.exp(math.fraction(1, 1))
180
+ // const _eagain: number = math.exp('1')
181
+ // const _eanother: number = math.exp(true)
182
+ }
183
+
137
184
  /*
138
185
  Chaining examples
139
186
  */
@@ -524,21 +571,23 @@ Chaining examples
524
571
  expectTypeOf(math.chain(math.complex(1, 2)).cbrt()).toMatchTypeOf<
525
572
  MathJsChain<Complex>
526
573
  >()
527
- expectTypeOf(math.chain([1, 2]).cbrt()).toMatchTypeOf<
528
- MathJsChain<MathArray>
529
- >()
530
- expectTypeOf(
531
- math
532
- .chain(
533
- math.matrix([
534
- [1, 2],
535
- [3, 4],
536
- ])
537
- )
538
- .cbrt()
539
- ).toMatchTypeOf<MathJsChain<Matrix>>()
574
+ // @ts-expect-error ... verify cbrt does not run on arrays.
575
+ assert.throws(() => math.chain([1, 2]).cbrt(), TypeError)
576
+ assert.throws(
577
+ () =>
578
+ // @ts-expect-error ... verify cbrt does not run on matrices.
579
+ math
580
+ .chain(
581
+ math.matrix([
582
+ [1, 2],
583
+ [3, 4],
584
+ ])
585
+ )
586
+ .cbrt(),
587
+ TypeError
588
+ )
540
589
 
541
- // cbrt
590
+ // ceil
542
591
  expectTypeOf(math.chain(1).ceil()).toMatchTypeOf<
543
592
  MathJsChain<MathNumericType>
544
593
  >()
@@ -581,19 +630,23 @@ Chaining examples
581
630
  expectTypeOf(math.chain(math.complex(1, 2)).cube()).toMatchTypeOf<
582
631
  MathJsChain<Complex>
583
632
  >()
584
- expectTypeOf(math.chain([1, 2]).cube()).toMatchTypeOf<
585
- MathJsChain<MathArray>
586
- >()
587
- expectTypeOf(
588
- math
589
- .chain(
590
- math.matrix([
591
- [1, 2],
592
- [3, 4],
593
- ])
594
- )
595
- .cube()
596
- ).toMatchTypeOf<MathJsChain<Matrix>>()
633
+
634
+ // @ts-expect-error ... verify cube does not run on arrays.
635
+ assert.throws(() => math.chain([1, 2]).cube(), TypeError)
636
+ assert.throws(
637
+ () =>
638
+ // @ts-expect-error ... verify cube does not run on matrices.
639
+ math
640
+ .chain(
641
+ math.matrix([
642
+ [1, 2],
643
+ [3, 4],
644
+ ])
645
+ )
646
+ .cube(),
647
+ TypeError
648
+ )
649
+
597
650
  expectTypeOf(math.chain(math.unit('furlong')).cube()).toMatchTypeOf<
598
651
  MathJsChain<Unit>
599
652
  >()
@@ -655,33 +708,40 @@ Chaining examples
655
708
 
656
709
  // exp
657
710
  expectTypeOf(math.chain(1).exp()).toMatchTypeOf<MathJsChain<MathType>>()
658
- expectTypeOf(math.chain([1, 2]).exp()).toMatchTypeOf<MathJsChain<MathArray>>()
659
- expectTypeOf(
660
- math
661
- .chain(
662
- math.matrix([
663
- [1, 2],
664
- [3, 4],
665
- ])
666
- )
667
- .exp()
668
- ).toMatchTypeOf<MathJsChain<Matrix>>()
711
+ // @ts-expect-error ... verify exp does not run on arrays.
712
+ assert.throws(() => math.chain([1, 2]).exp(), TypeError)
713
+ assert.throws(
714
+ () =>
715
+ // @ts-expect-error ... verify exp does not run on matrices.
716
+ math
717
+ .chain(
718
+ math.matrix([
719
+ [1, 2],
720
+ [3, 4],
721
+ ])
722
+ )
723
+ .exp(),
724
+ TypeError
725
+ )
669
726
 
670
727
  // expm1
671
728
  expectTypeOf(math.chain(1).expm1()).toMatchTypeOf<MathJsChain<MathType>>()
672
- expectTypeOf(math.chain([1, 2]).expm1()).toMatchTypeOf<
673
- MathJsChain<MathArray>
674
- >()
675
- expectTypeOf(
676
- math
677
- .chain(
678
- math.matrix([
679
- [1, 2],
680
- [3, 4],
681
- ])
682
- )
683
- .expm1()
684
- ).toMatchTypeOf<MathJsChain<Matrix>>()
729
+
730
+ // @ts-expect-error ... verify expm1 does not run on arrays
731
+ assert.throws(() => math.chain([1, 2]).expm1(), TypeError)
732
+ assert.throws(
733
+ () =>
734
+ // @ts-expect-error ... verify expm1 does not run on arrays
735
+ math
736
+ .chain(
737
+ math.matrix([
738
+ [1, 2],
739
+ [3, 4],
740
+ ])
741
+ )
742
+ .expm1(),
743
+ TypeError
744
+ )
685
745
 
686
746
  // gcd
687
747
  expectTypeOf(math.chain([1, 2]).gcd(3)).toMatchTypeOf<MathJsChain<number>>()
@@ -765,6 +825,11 @@ Chaining examples
765
825
  .log10()
766
826
  ).toMatchTypeOf<MathJsChain<Matrix>>()
767
827
 
828
+ expectTypeOf(math.chain([1, 2]).count()).toMatchTypeOf<MathJsChain<number>>()
829
+ expectTypeOf(math.chain('mathjs').count()).toMatchTypeOf<
830
+ MathJsChain<number>
831
+ >()
832
+ expectTypeOf(math.chain([1, 2]).sum()).toMatchTypeOf<MathJsChain<number>>()
768
833
  // TODO complete the rest of these...
769
834
  }
770
835
 
@@ -775,13 +840,89 @@ Simplify examples
775
840
  const math = create(all)
776
841
 
777
842
  math.simplify('2 * 1 * x ^ (2 - 1)')
843
+ math.simplifyConstant('2 * 1 * x ^ (2 - 1)')
844
+ math.simplifyCore('2 * 1 * x ^ (2 - 1)')
778
845
  math.simplify('2 * 3 * x', { x: 4 })
779
846
 
847
+ expectTypeOf(math.simplify.rules).toMatchTypeOf<Array<SimplifyRule>>()
848
+
780
849
  const f = math.parse('2 * 1 * x ^ (2 - 1)')
781
850
  math.simplify(f)
782
851
 
783
852
  math.simplify('0.4 * x', {}, { exactFractions: true })
853
+ math.simplifyConstant('0.4 * x', { exactFractions: true })
784
854
  math.simplify('0.4 * x', {}, { exactFractions: false })
855
+ math.simplify('0.4 * x', {}, { fractionsLimit: 2 })
856
+ math.simplify('0.4 * x', {}, { consoleDebug: false })
857
+
858
+ math.simplify(
859
+ '0.4 * x',
860
+ {},
861
+ {
862
+ context: {
863
+ xor: {
864
+ trivial: true,
865
+ total: true,
866
+ commutative: true,
867
+ associative: true,
868
+ },
869
+ },
870
+ }
871
+ )
872
+
873
+ math.simplify('0.4 * x', [])
874
+ math.simplify('0.4 * x', [
875
+ 'n * n -> 2n',
876
+ {
877
+ s: 'n * n -> 2n',
878
+ repeat: true,
879
+ assuming: {
880
+ multiply: {
881
+ trivial: true,
882
+ total: true,
883
+ commutative: true,
884
+ associative: true,
885
+ },
886
+ },
887
+ imposeContext: {
888
+ multiply: {
889
+ trivial: true,
890
+ total: true,
891
+ commutative: true,
892
+ associative: true,
893
+ },
894
+ },
895
+ },
896
+ {
897
+ l: 'n * n',
898
+ r: '2n',
899
+ repeat: true,
900
+ assuming: {
901
+ multiply: {
902
+ trivial: true,
903
+ total: true,
904
+ commutative: true,
905
+ associative: true,
906
+ },
907
+ },
908
+ imposeContext: {
909
+ multiply: {
910
+ trivial: true,
911
+ total: true,
912
+ commutative: true,
913
+ associative: true,
914
+ },
915
+ },
916
+ },
917
+ (node: MathNode) => node,
918
+ ])
919
+ math.simplifyCore('0.4 * x + 0', { exactFractions: false })
920
+
921
+ math
922
+ .chain('0.4 * x + 0')
923
+ .parse()
924
+ .simplifyCore({ exactFractions: false })
925
+ .simplifyConstant()
785
926
  }
786
927
 
787
928
  /*
@@ -816,13 +957,18 @@ Complex numbers examples
816
957
 
817
958
  // create a complex number from polar coordinates
818
959
  {
819
- const p: math.PolarCoordinates = { r: math.sqrt(2), phi: math.pi / 4 }
820
- const _c: math.Complex = math.complex(p)
960
+ const p: PolarCoordinates = {
961
+ r: math.sqrt(2) as number, // must be real but a sqrt could be Complex
962
+ phi: math.pi / 4,
963
+ }
964
+ const c: Complex = math.complex(p)
965
+ assert.strictEqual(c.im, 1)
966
+ assert.ok(Math.abs(c.re - 1) < 1e-12)
821
967
  }
822
968
 
823
969
  // get polar coordinates of a complex number
824
970
  {
825
- const _p: math.PolarCoordinates = math.complex(3, 4).toPolar()
971
+ const _p: PolarCoordinates = math.complex(3, 4).toPolar()
826
972
  }
827
973
  }
828
974
 
@@ -881,7 +1027,7 @@ Expressions examples
881
1027
 
882
1028
  {
883
1029
  const node2 = math.parse('x^a')
884
- const _code2: math.EvalFunction = node2.compile()
1030
+ const _code2: EvalFunction = node2.compile()
885
1031
  node2.toString()
886
1032
  }
887
1033
 
@@ -984,18 +1130,23 @@ Matrices examples
984
1130
 
985
1131
  // create matrices and arrays. a matrix is just a wrapper around an Array,
986
1132
  // providing some handy utilities.
987
- const a: math.Matrix = math.matrix([1, 4, 9, 16, 25])
988
- const b: math.Matrix = math.matrix(math.ones([2, 3]))
1133
+ const a: Matrix = math.matrix([1, 4, 9, 16, 25])
1134
+ const b: Matrix = math.matrix(math.ones([2, 3]))
989
1135
  b.size()
990
1136
 
1137
+ // @ts-expect-error ... ones() in a chain cannot take more dimensions
1138
+ assert.throws(() => math.chain(3).ones(2, 'dense').done(), /Error:.*ones/)
1139
+ // @ts-expect-error ... and neither can zeros()
1140
+ assert.throws(() => math.chain(3).zeros(2, 'sparse').done(), /Error:.*zeros/)
1141
+
991
1142
  // the Array data of a Matrix can be retrieved using valueOf()
992
1143
  const _array = a.valueOf()
993
1144
 
994
1145
  // Matrices can be cloned
995
- const _clone: math.Matrix = a.clone()
1146
+ const _clone: Matrix = a.clone()
996
1147
 
997
1148
  // perform operations with matrices
998
- math.sqrt(a)
1149
+ math.map(a, math.sqrt)
999
1150
  math.factorial(a)
1000
1151
 
1001
1152
  // create and manipulate matrices. Arrays and Matrices can be used mixed.
@@ -1004,22 +1155,22 @@ Matrices examples
1004
1155
  [1, 2],
1005
1156
  [3, 4],
1006
1157
  ]
1007
- const b: math.Matrix = math.matrix([
1158
+ const b: Matrix = math.matrix([
1008
1159
  [5, 6],
1009
1160
  [1, 1],
1010
1161
  ])
1011
1162
 
1012
1163
  b.subset(math.index(1, [0, 1]), [[7, 8]])
1013
1164
  const _c = math.multiply(a, b)
1014
- const f: math.Matrix = math.matrix([1, 0])
1015
- const _d: math.Matrix = f.subset(math.index(1))
1165
+ const f: Matrix = math.matrix([1, 0])
1166
+ const _d: Matrix = f.subset(math.index(1))
1016
1167
  }
1017
1168
 
1018
1169
  // get a sub matrix
1019
1170
  {
1020
- const a: math.Matrix = math.diag(math.range(1, 4))
1171
+ const a: Matrix = math.diag(math.range(1, 4))
1021
1172
  a.subset(math.index([1, 2], [1, 2]))
1022
- const b: math.Matrix = math.range(1, 6)
1173
+ const b: Matrix = math.range(1, 6)
1023
1174
  b.subset(math.index(math.range(1, 4)))
1024
1175
  }
1025
1176
 
@@ -1065,7 +1216,7 @@ Matrices examples
1065
1216
  [6, 4, 3]
1066
1217
  )
1067
1218
  assert.deepStrictEqual(
1068
- math.filter(['23', 'foo', '100', '55', 'bar'], /[0-9]+/),
1219
+ math.filter(['23', 'foo', '100', '55', 'bar'], /\d+/),
1069
1220
  ['23', '100', '55']
1070
1221
  )
1071
1222
  }
@@ -1143,6 +1294,69 @@ Matrices examples
1143
1294
  }
1144
1295
  }
1145
1296
 
1297
+ /*
1298
+ Math types examples: Type results after multiplying 'MathTypes' with matrices
1299
+ */
1300
+ {
1301
+ const math = create(all, {})
1302
+
1303
+ const abc: MathArray = [1, 2, 3, 4]
1304
+ const bcd: MathArray = [
1305
+ [1, 2, 3, 4],
1306
+ [2, 3, 4, 5],
1307
+ [4, 5, 6, 7],
1308
+ [5, 6, 7, 8],
1309
+ ]
1310
+
1311
+ const Mbcd = math.matrix(bcd)
1312
+ const Mabc = math.matrix(abc)
1313
+
1314
+ // Number
1315
+ const _r1 = math.multiply(1, 2)
1316
+
1317
+ // Unit
1318
+ const a = math.unit(45, 'cm') // 450 mm
1319
+ const b = math.unit(45, 'cm') // 450 mm
1320
+ const _r2 = math.multiply(a, b)
1321
+
1322
+ // 1D JS Array
1323
+ const r3 = math.multiply(abc, bcd)
1324
+ const _r31 = r3[1] // By default least promised valid syntax
1325
+
1326
+ // 2D JS Array
1327
+ const r12 = math.multiply(bcd, bcd)
1328
+ // Example to sort ambiguity between multidimensional & singledimensional arrays
1329
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1330
+ const multiDimensional = (x: any): x is any[][] => x.length && x[0].length
1331
+ if (multiDimensional(r12)) {
1332
+ const _r1211 = r12[1][1]
1333
+ }
1334
+ const _r121 = r12[1] // Valid syntax
1335
+
1336
+ // Matrix: matrix * vector
1337
+ const r7 = math.multiply(Mabc, bcd)
1338
+ r7.toArray() // Matrix-es have toArray function
1339
+
1340
+ // Matrix
1341
+ const _r8 = math.multiply(Mabc, 4)
1342
+
1343
+ // Matrix
1344
+ const _r11 = math.multiply(4, Mabc)
1345
+
1346
+ // Matrix of units
1347
+ const _r9 = math.multiply(Mabc, a)
1348
+ const _r10 = math.multiply(a, Mabc)
1349
+
1350
+ // Matrix
1351
+ const _r6 = math.multiply(abc, Mbcd)
1352
+
1353
+ // 2D JS Array
1354
+ const _r5 = math.multiply(bcd, abc)
1355
+
1356
+ // Number
1357
+ const _r4 = math.multiply(abc, math.transpose(abc))
1358
+ }
1359
+
1146
1360
  /*
1147
1361
  Sparse matrices examples
1148
1362
  */
@@ -1218,6 +1432,7 @@ Units examples
1218
1432
  // use Unit as definition
1219
1433
  math.createUnit('c', { definition: b })
1220
1434
  math.createUnit('c', { definition: b }, { override: true })
1435
+ math.createUnit('customUnit', math.unit(0.5, 'm'))
1221
1436
 
1222
1437
  // units can be added, subtracted, and multiplied or divided by numbers and by other units
1223
1438
  math.add(a, b)
@@ -1248,29 +1463,27 @@ Expression tree examples
1248
1463
  const math = create(all, {})
1249
1464
 
1250
1465
  // Filter an expression tree
1251
- const node: math.MathNode = math.parse('x^2 + x/4 + 3*y')
1252
- const filtered: math.MathNode[] = node.filter(
1253
- (node: math.MathNode) => node.type === 'SymbolNode' && node.name === 'x'
1466
+ const node: MathNode = math.parse('x^2 + x/4 + 3*y')
1467
+ const filtered: MathNode[] = node.filter(
1468
+ (node: MathNode) => node.type === 'SymbolNode' && node.name === 'x'
1254
1469
  )
1255
1470
 
1256
- const _arr: string[] = filtered.map((node: math.MathNode) => node.toString())
1471
+ const _arr: string[] = filtered.map((node: MathNode) => node.toString())
1257
1472
 
1258
1473
  // Traverse an expression tree
1259
- const node1: math.MathNode = math.parse('3 * x + 2')
1260
- node1.traverse(
1261
- (node: math.MathNode, _path: string, _parent: math.MathNode) => {
1262
- switch (node.type) {
1263
- case 'OperatorNode':
1264
- return node.type === 'OperatorNode'
1265
- case 'ConstantNode':
1266
- return node.type === 'ConstantNode'
1267
- case 'SymbolNode':
1268
- return node.type === 'SymbolNode'
1269
- default:
1270
- return
1271
- }
1474
+ const node1: MathNode = math.parse('3 * x + 2')
1475
+ node1.traverse((node: MathNode, _path: string, _parent: MathNode) => {
1476
+ switch (node.type) {
1477
+ case 'OperatorNode':
1478
+ return node.type === 'OperatorNode'
1479
+ case 'ConstantNode':
1480
+ return node.type === 'ConstantNode'
1481
+ case 'SymbolNode':
1482
+ return node.type === 'SymbolNode'
1483
+ default:
1484
+ return
1272
1485
  }
1273
- )
1486
+ })
1274
1487
  }
1275
1488
 
1276
1489
  /*
@@ -1333,9 +1546,9 @@ Function ceil examples
1333
1546
  )
1334
1547
 
1335
1548
  // numeric input, array or matrix of decimals
1336
- const numCeiled: math.MathArray = math.ceil(math.tau, [2, 3])
1549
+ const numCeiled: MathArray = math.ceil(math.tau, [2, 3])
1337
1550
  assert.deepStrictEqual(numCeiled, [6.29, 6.284])
1338
- const bigCeiled: math.Matrix = math.ceil(
1551
+ const bigCeiled: Matrix = math.ceil(
1339
1552
  math.bignumber(6.28318),
1340
1553
  math.matrix([2, 3])
1341
1554
  )
@@ -1409,9 +1622,9 @@ Function fix examples
1409
1622
  )
1410
1623
 
1411
1624
  // numeric input, array or matrix of decimals
1412
- const numFixed: math.MathArray = math.fix(math.tau, [2, 3])
1625
+ const numFixed: MathArray = math.fix(math.tau, [2, 3])
1413
1626
  assert.deepStrictEqual(numFixed, [6.28, 6.283])
1414
- const bigFixed: math.Matrix = math.fix(
1627
+ const bigFixed: Matrix = math.fix(
1415
1628
  math.bignumber(6.28318),
1416
1629
  math.matrix([2, 3])
1417
1630
  )
@@ -1485,9 +1698,9 @@ Function floor examples
1485
1698
  )
1486
1699
 
1487
1700
  // numeric input, array or matrix of decimals
1488
- const numFloored: math.MathArray = math.floor(math.tau, [2, 3])
1701
+ const numFloored: MathArray = math.floor(math.tau, [2, 3])
1489
1702
  assert.deepStrictEqual(numFloored, [6.28, 6.283])
1490
- const bigFloored: math.Matrix = math.floor(
1703
+ const bigFloored: Matrix = math.floor(
1491
1704
  math.bignumber(6.28318),
1492
1705
  math.matrix([2, 3])
1493
1706
  )
@@ -1561,9 +1774,9 @@ Function round examples
1561
1774
  )
1562
1775
 
1563
1776
  // numeric input, array or matrix of decimals
1564
- const numRounded: math.MathArray = math.round(math.tau, [2, 3])
1777
+ const numRounded: MathArray = math.round(math.tau, [2, 3])
1565
1778
  assert.deepStrictEqual(numRounded, [6.28, 6.283])
1566
- const bigRounded: math.Matrix = math.round(
1779
+ const bigRounded: Matrix = math.round(
1567
1780
  math.bignumber(6.28318),
1568
1781
  math.matrix([2, 3])
1569
1782
  )
@@ -1875,22 +2088,22 @@ Factory Test
1875
2088
 
1876
2089
  // Check guards do type refinement
1877
2090
 
1878
- let x: unknown
2091
+ const x: unknown = undefined
1879
2092
 
1880
2093
  if (math.isNumber(x)) {
1881
2094
  expectTypeOf(x).toMatchTypeOf<number>()
1882
2095
  }
1883
2096
  if (math.isBigNumber(x)) {
1884
- expectTypeOf(x).toMatchTypeOf<math.BigNumber>()
2097
+ expectTypeOf(x).toMatchTypeOf<BigNumber>()
1885
2098
  }
1886
2099
  if (math.isComplex(x)) {
1887
- expectTypeOf(x).toMatchTypeOf<math.Complex>()
2100
+ expectTypeOf(x).toMatchTypeOf<Complex>()
1888
2101
  }
1889
2102
  if (math.isFraction(x)) {
1890
- expectTypeOf(x).toMatchTypeOf<math.Fraction>()
2103
+ expectTypeOf(x).toMatchTypeOf<Fraction>()
1891
2104
  }
1892
2105
  if (math.isUnit(x)) {
1893
- expectTypeOf(x).toMatchTypeOf<math.Unit>()
2106
+ expectTypeOf(x).toMatchTypeOf<Unit>()
1894
2107
  }
1895
2108
  if (math.isString(x)) {
1896
2109
  expectTypeOf(x).toMatchTypeOf<string>()
@@ -1899,22 +2112,22 @@ Factory Test
1899
2112
  expectTypeOf(x).toMatchTypeOf<unknown[]>()
1900
2113
  }
1901
2114
  if (math.isMatrix(x)) {
1902
- expectTypeOf(x).toMatchTypeOf<math.Matrix>()
2115
+ expectTypeOf(x).toMatchTypeOf<Matrix>()
1903
2116
  }
1904
2117
  if (math.isDenseMatrix(x)) {
1905
- expectTypeOf(x).toMatchTypeOf<math.Matrix>()
2118
+ expectTypeOf(x).toMatchTypeOf<Matrix>()
1906
2119
  }
1907
2120
  if (math.isSparseMatrix(x)) {
1908
- expectTypeOf(x).toMatchTypeOf<math.Matrix>()
2121
+ expectTypeOf(x).toMatchTypeOf<Matrix>()
1909
2122
  }
1910
2123
  if (math.isIndex(x)) {
1911
- expectTypeOf(x).toMatchTypeOf<math.Index>()
2124
+ expectTypeOf(x).toMatchTypeOf<Index>()
1912
2125
  }
1913
2126
  if (math.isBoolean(x)) {
1914
2127
  expectTypeOf(x).toMatchTypeOf<boolean>()
1915
2128
  }
1916
2129
  if (math.isHelp(x)) {
1917
- expectTypeOf(x).toMatchTypeOf<math.Help>()
2130
+ expectTypeOf(x).toMatchTypeOf<Help>()
1918
2131
  }
1919
2132
  if (math.isDate(x)) {
1920
2133
  expectTypeOf(x).toMatchTypeOf<Date>()
@@ -1930,40 +2143,40 @@ Factory Test
1930
2143
  }
1931
2144
 
1932
2145
  if (math.isAccessorNode(x)) {
1933
- expectTypeOf(x).toMatchTypeOf<math.AccessorNode>()
2146
+ expectTypeOf(x).toMatchTypeOf<AccessorNode>()
1934
2147
  }
1935
2148
  if (math.isArrayNode(x)) {
1936
- expectTypeOf(x).toMatchTypeOf<math.ArrayNode>()
2149
+ expectTypeOf(x).toMatchTypeOf<ArrayNode>()
1937
2150
  }
1938
2151
  if (math.isAssignmentNode(x)) {
1939
- expectTypeOf(x).toMatchTypeOf<math.AssignmentNode>()
2152
+ expectTypeOf(x).toMatchTypeOf<AssignmentNode>()
1940
2153
  }
1941
2154
  if (math.isBlockNode(x)) {
1942
- expectTypeOf(x).toMatchTypeOf<math.BlockNode>()
2155
+ expectTypeOf(x).toMatchTypeOf<BlockNode>()
1943
2156
  }
1944
2157
  if (math.isConditionalNode(x)) {
1945
- expectTypeOf(x).toMatchTypeOf<math.ConditionalNode>()
2158
+ expectTypeOf(x).toMatchTypeOf<ConditionalNode>()
1946
2159
  }
1947
2160
  if (math.isConstantNode(x)) {
1948
- expectTypeOf(x).toMatchTypeOf<math.ConstantNode>()
2161
+ expectTypeOf(x).toMatchTypeOf<ConstantNode>()
1949
2162
  }
1950
2163
  if (math.isFunctionAssignmentNode(x)) {
1951
- expectTypeOf(x).toMatchTypeOf<math.FunctionAssignmentNode>()
2164
+ expectTypeOf(x).toMatchTypeOf<FunctionAssignmentNode>()
1952
2165
  }
1953
2166
  if (math.isFunctionNode(x)) {
1954
- expectTypeOf(x).toMatchTypeOf<math.FunctionNode>()
2167
+ expectTypeOf(x).toMatchTypeOf<FunctionNode>()
1955
2168
  }
1956
2169
  if (math.isIndexNode(x)) {
1957
- expectTypeOf(x).toMatchTypeOf<math.IndexNode>()
2170
+ expectTypeOf(x).toMatchTypeOf<IndexNode>()
1958
2171
  }
1959
2172
  if (math.isNode(x)) {
1960
- expectTypeOf(x).toMatchTypeOf<math.MathNodeCommon>()
2173
+ expectTypeOf(x).toMatchTypeOf<MathNodeCommon>()
1961
2174
  }
1962
2175
  if (math.isNode(x)) {
1963
- expectTypeOf(x).toMatchTypeOf<math.MathNodeCommon>()
2176
+ expectTypeOf(x).toMatchTypeOf<MathNodeCommon>()
1964
2177
  }
1965
2178
  if (math.isObjectNode(x)) {
1966
- expectTypeOf(x).toMatchTypeOf<math.ObjectNode>()
2179
+ expectTypeOf(x).toMatchTypeOf<ObjectNode>()
1967
2180
  }
1968
2181
  if (math.isOperatorNode(x)) {
1969
2182
  expectTypeOf(x).toMatchTypeOf<
@@ -1971,17 +2184,17 @@ Factory Test
1971
2184
  >()
1972
2185
  }
1973
2186
  if (math.isParenthesisNode(x)) {
1974
- expectTypeOf(x).toMatchTypeOf<math.ParenthesisNode>()
2187
+ expectTypeOf(x).toMatchTypeOf<ParenthesisNode>()
1975
2188
  }
1976
2189
  if (math.isRangeNode(x)) {
1977
- expectTypeOf(x).toMatchTypeOf<math.RangeNode>()
2190
+ expectTypeOf(x).toMatchTypeOf<RangeNode>()
1978
2191
  }
1979
2192
  if (math.isSymbolNode(x)) {
1980
- expectTypeOf(x).toMatchTypeOf<math.SymbolNode>()
2193
+ expectTypeOf(x).toMatchTypeOf<SymbolNode>()
1981
2194
  }
1982
2195
  if (math.isChain(x)) {
1983
2196
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1984
- expectTypeOf(x).toMatchTypeOf<math.MathJsChain<any>>()
2197
+ expectTypeOf(x).toMatchTypeOf<MathJsChain<any>>()
1985
2198
  }
1986
2199
  }
1987
2200
 
@@ -1992,9 +2205,7 @@ Probability function examples
1992
2205
  const math = create(all, {})
1993
2206
 
1994
2207
  expectTypeOf(math.lgamma(1.5)).toMatchTypeOf<number>()
1995
- expectTypeOf(
1996
- math.lgamma(math.complex(1.5, -1.5))
1997
- ).toMatchTypeOf<math.Complex>()
2208
+ expectTypeOf(math.lgamma(math.complex(1.5, -1.5))).toMatchTypeOf<Complex>()
1998
2209
  }
1999
2210
 
2000
2211
  /*
@@ -2020,11 +2231,14 @@ Resolve examples
2020
2231
  {
2021
2232
  const math = create(all, {})
2022
2233
 
2234
+ expectTypeOf(math.resolve('x + y')).toMatchTypeOf<MathNode>()
2023
2235
  expectTypeOf(math.resolve(math.parse('x + y'))).toMatchTypeOf<MathNode>()
2024
2236
  expectTypeOf(
2025
2237
  math.resolve(math.parse('x + y'), { x: 0 })
2026
2238
  ).toMatchTypeOf<MathNode>()
2027
- expectTypeOf(math.resolve([math.parse('x + y')], { x: 0 })).toMatchTypeOf<
2028
- MathNode[]
2029
- >()
2239
+ expectTypeOf(math.resolve('x + y', { x: 0 })).toMatchTypeOf<MathNode>()
2240
+ expectTypeOf(
2241
+ math.resolve([math.parse('x + y'), 'x*x'], { x: 0 })
2242
+ ).toMatchTypeOf<MathNode[]>()
2243
+ expectTypeOf(math.resolve(math.matrix(['x', 'y']))).toMatchTypeOf<Matrix>()
2030
2244
  }