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
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createMatrixAlgorithmSuite = void 0;
7
+
8
+ var _factory = require("../../../utils/factory.js");
9
+
10
+ var _object = require("../../../utils/object.js");
11
+
12
+ var _matAlgo13xDD = require("./matAlgo13xDD.js");
13
+
14
+ var _matAlgo14xDs = require("./matAlgo14xDs.js");
15
+
16
+ var name = 'matrixAlgorithmSuite';
17
+ var dependencies = ['typed', 'matrix'];
18
+ var createMatrixAlgorithmSuite = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
19
+ var typed = _ref.typed,
20
+ matrix = _ref.matrix;
21
+ var matAlgo13xDD = (0, _matAlgo13xDD.createMatAlgo13xDD)({
22
+ typed: typed
23
+ });
24
+ var matAlgo14xDs = (0, _matAlgo14xDs.createMatAlgo14xDs)({
25
+ typed: typed
26
+ });
27
+ /**
28
+ * Return a signatures object with the usual boilerplate of
29
+ * matrix algorithms, based on a plain options object with the
30
+ * following properties:
31
+ * elop: function -- the elementwise operation to use, defaults to self
32
+ * SS: function -- the algorithm to apply for two sparse matrices
33
+ * DS: function -- the algorithm to apply for a dense and a sparse matrix
34
+ * SD: function -- algo for a sparse and a dense; defaults to SD flipped
35
+ * Ss: function -- the algorithm to apply for a sparse matrix and scalar
36
+ * sS: function -- algo for scalar and sparse; defaults to Ss flipped
37
+ * scalar: string -- typed-function type for scalars, defaults to 'any'
38
+ *
39
+ * If Ss is not specified, no matrix-scalar signatures are generated.
40
+ *
41
+ * @param {object} options
42
+ * @return {Object<string, function>} signatures
43
+ */
44
+
45
+ return function matrixAlgorithmSuite(options) {
46
+ var elop = options.elop;
47
+ var SD = options.SD || options.DS;
48
+ var matrixSignatures;
49
+
50
+ if (elop) {
51
+ // First the dense ones
52
+ matrixSignatures = {
53
+ 'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {
54
+ return matAlgo13xDD(x, y, elop);
55
+ },
56
+ 'Array, Array': function ArrayArray(x, y) {
57
+ return matAlgo13xDD(matrix(x), matrix(y), elop).valueOf();
58
+ },
59
+ 'Array, DenseMatrix': function ArrayDenseMatrix(x, y) {
60
+ return matAlgo13xDD(matrix(x), y, elop);
61
+ },
62
+ 'DenseMatrix, Array': function DenseMatrixArray(x, y) {
63
+ return matAlgo13xDD(x, matrix(y), elop);
64
+ }
65
+ }; // Now incorporate sparse matrices
66
+
67
+ if (options.SS) {
68
+ matrixSignatures['SparseMatrix, SparseMatrix'] = function (x, y) {
69
+ return options.SS(x, y, elop, false);
70
+ };
71
+ }
72
+
73
+ if (options.DS) {
74
+ matrixSignatures['DenseMatrix, SparseMatrix'] = function (x, y) {
75
+ return options.DS(x, y, elop, false);
76
+ };
77
+
78
+ matrixSignatures['Array, SparseMatrix'] = function (x, y) {
79
+ return options.DS(matrix(x), y, elop, false);
80
+ };
81
+ }
82
+
83
+ if (SD) {
84
+ matrixSignatures['SparseMatrix, DenseMatrix'] = function (x, y) {
85
+ return SD(y, x, elop, true);
86
+ };
87
+
88
+ matrixSignatures['SparseMatrix, Array'] = function (x, y) {
89
+ return SD(matrix(y), x, elop, true);
90
+ };
91
+ }
92
+ } else {
93
+ // No elop, use this
94
+ // First the dense ones
95
+ matrixSignatures = {
96
+ 'DenseMatrix, DenseMatrix': typed.referToSelf(function (self) {
97
+ return function (x, y) {
98
+ return matAlgo13xDD(x, y, self);
99
+ };
100
+ }),
101
+ 'Array, Array': typed.referToSelf(function (self) {
102
+ return function (x, y) {
103
+ return matAlgo13xDD(matrix(x), matrix(y), self).valueOf();
104
+ };
105
+ }),
106
+ 'Array, DenseMatrix': typed.referToSelf(function (self) {
107
+ return function (x, y) {
108
+ return matAlgo13xDD(matrix(x), y, self);
109
+ };
110
+ }),
111
+ 'DenseMatrix, Array': typed.referToSelf(function (self) {
112
+ return function (x, y) {
113
+ return matAlgo13xDD(x, matrix(y), self);
114
+ };
115
+ })
116
+ }; // Now incorporate sparse matrices
117
+
118
+ if (options.SS) {
119
+ matrixSignatures['SparseMatrix, SparseMatrix'] = typed.referToSelf(function (self) {
120
+ return function (x, y) {
121
+ return options.SS(x, y, self, false);
122
+ };
123
+ });
124
+ }
125
+
126
+ if (options.DS) {
127
+ matrixSignatures['DenseMatrix, SparseMatrix'] = typed.referToSelf(function (self) {
128
+ return function (x, y) {
129
+ return options.DS(x, y, self, false);
130
+ };
131
+ });
132
+ matrixSignatures['Array, SparseMatrix'] = typed.referToSelf(function (self) {
133
+ return function (x, y) {
134
+ return options.DS(matrix(x), y, self, false);
135
+ };
136
+ });
137
+ }
138
+
139
+ if (SD) {
140
+ matrixSignatures['SparseMatrix, DenseMatrix'] = typed.referToSelf(function (self) {
141
+ return function (x, y) {
142
+ return SD(y, x, self, true);
143
+ };
144
+ });
145
+ matrixSignatures['SparseMatrix, Array'] = typed.referToSelf(function (self) {
146
+ return function (x, y) {
147
+ return SD(matrix(y), x, self, true);
148
+ };
149
+ });
150
+ }
151
+ } // Now add the scalars
152
+
153
+
154
+ var scalar = options.scalar || 'any';
155
+ var Ds = options.Ds || options.Ss;
156
+
157
+ if (Ds) {
158
+ if (elop) {
159
+ matrixSignatures['DenseMatrix,' + scalar] = function (x, y) {
160
+ return matAlgo14xDs(x, y, elop, false);
161
+ };
162
+
163
+ matrixSignatures[scalar + ', DenseMatrix'] = function (x, y) {
164
+ return matAlgo14xDs(y, x, elop, true);
165
+ };
166
+
167
+ matrixSignatures['Array,' + scalar] = function (x, y) {
168
+ return matAlgo14xDs(matrix(x), y, elop, false).valueOf();
169
+ };
170
+
171
+ matrixSignatures[scalar + ', Array'] = function (x, y) {
172
+ return matAlgo14xDs(matrix(y), x, elop, true).valueOf();
173
+ };
174
+ } else {
175
+ matrixSignatures['DenseMatrix,' + scalar] = typed.referToSelf(function (self) {
176
+ return function (x, y) {
177
+ return matAlgo14xDs(x, y, self, false);
178
+ };
179
+ });
180
+ matrixSignatures[scalar + ', DenseMatrix'] = typed.referToSelf(function (self) {
181
+ return function (x, y) {
182
+ return matAlgo14xDs(y, x, self, true);
183
+ };
184
+ });
185
+ matrixSignatures['Array,' + scalar] = typed.referToSelf(function (self) {
186
+ return function (x, y) {
187
+ return matAlgo14xDs(matrix(x), y, self, false).valueOf();
188
+ };
189
+ });
190
+ matrixSignatures[scalar + ', Array'] = typed.referToSelf(function (self) {
191
+ return function (x, y) {
192
+ return matAlgo14xDs(matrix(y), x, self, true).valueOf();
193
+ };
194
+ });
195
+ }
196
+ }
197
+
198
+ var sS = options.sS !== undefined ? options.sS : options.Ss;
199
+
200
+ if (elop) {
201
+ if (options.Ss) {
202
+ matrixSignatures['SparseMatrix,' + scalar] = function (x, y) {
203
+ return options.Ss(x, y, elop, false);
204
+ };
205
+ }
206
+
207
+ if (sS) {
208
+ matrixSignatures[scalar + ', SparseMatrix'] = function (x, y) {
209
+ return sS(y, x, elop, true);
210
+ };
211
+ }
212
+ } else {
213
+ if (options.Ss) {
214
+ matrixSignatures['SparseMatrix,' + scalar] = typed.referToSelf(function (self) {
215
+ return function (x, y) {
216
+ return options.Ss(x, y, self, false);
217
+ };
218
+ });
219
+ }
220
+
221
+ if (sS) {
222
+ matrixSignatures[scalar + ', SparseMatrix'] = typed.referToSelf(function (self) {
223
+ return function (x, y) {
224
+ return sS(y, x, self, true);
225
+ };
226
+ });
227
+ }
228
+ } // Also pull in the scalar signatures if the operator is a typed function
229
+
230
+
231
+ if (elop && elop.signatures) {
232
+ (0, _object.extend)(matrixSignatures, elop.signatures);
233
+ }
234
+
235
+ return matrixSignatures;
236
+ };
237
+ });
238
+ exports.createMatrixAlgorithmSuite = createMatrixAlgorithmSuite;
@@ -147,15 +147,17 @@ var createNumber = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
147
147
  Unit: function Unit(x) {
148
148
  throw new Error('Second argument with valueless unit expected');
149
149
  },
150
- null: function _null(x) {
150
+ "null": function _null(x) {
151
151
  return 0;
152
152
  },
153
153
  'Unit, string | Unit': function UnitStringUnit(unit, valuelessUnit) {
154
154
  return unit.toNumber(valuelessUnit);
155
155
  },
156
- 'Array | Matrix': function ArrayMatrix(x) {
157
- return (0, _collection.deepMap)(x, this);
158
- }
156
+ 'Array | Matrix': typed.referToSelf(function (self) {
157
+ return function (x) {
158
+ return (0, _collection.deepMap)(x, self);
159
+ };
160
+ })
159
161
  }); // reviver function to parse a JSON object like:
160
162
  //
161
163
  // {"mathjs":"number","value":"2.3"}
@@ -46,18 +46,20 @@ var createString = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
46
46
  return '';
47
47
  },
48
48
  number: _number.format,
49
- null: function _null(x) {
49
+ "null": function _null(x) {
50
50
  return 'null';
51
51
  },
52
- boolean: function boolean(x) {
52
+ "boolean": function boolean(x) {
53
53
  return x + '';
54
54
  },
55
55
  string: function string(x) {
56
56
  return x;
57
57
  },
58
- 'Array | Matrix': function ArrayMatrix(x) {
59
- return (0, _collection.deepMap)(x, this);
60
- },
58
+ 'Array | Matrix': typed.referToSelf(function (self) {
59
+ return function (x) {
60
+ return (0, _collection.deepMap)(x, self);
61
+ };
62
+ }),
61
63
  any: function any(x) {
62
64
  return String(x);
63
65
  }
@@ -27,7 +27,7 @@ var _constants = require("../../utils/bignumber/constants.js");
27
27
 
28
28
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
29
 
30
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
30
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
31
31
 
32
32
  var name = 'Unit';
33
33
  var dependencies = ['?on', 'config', 'addScalar', 'subtract', 'multiplyScalar', 'divideScalar', 'pow', 'abs', 'fix', 'round', 'equal', 'isNumeric', 'format', 'number', 'Complex', 'BigNumber', 'Fraction'];
@@ -88,12 +88,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
88
88
  this.units = u.units;
89
89
  this.dimensions = u.dimensions;
90
90
  } else {
91
- this.units = [{
92
- unit: UNIT_NONE,
93
- prefix: PREFIXES.NONE,
94
- // link to a list with supported prefixes
95
- power: 0
96
- }];
91
+ this.units = [];
97
92
  this.dimensions = [];
98
93
 
99
94
  for (var i = 0; i < BASE_DIMENSIONS.length; i++) {
@@ -115,6 +110,10 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
115
110
  */
116
111
 
117
112
 
113
+ Object.defineProperty(Unit, 'name', {
114
+ value: 'Unit'
115
+ });
116
+ Unit.prototype.constructor = Unit;
118
117
  Unit.prototype.type = 'Unit';
119
118
  Unit.prototype.isUnit = true; // private variables and functions for the Unit parser
120
119
 
@@ -477,6 +476,17 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
477
476
 
478
477
  return unit;
479
478
  };
479
+ /**
480
+ * Return the type of the value of this unit
481
+ *
482
+ * @memberof Unit
483
+ * @ return {string} type of the value of the unit
484
+ */
485
+
486
+
487
+ Unit.prototype.valueType = function () {
488
+ return (0, _is.typeOf)(this.value);
489
+ };
480
490
  /**
481
491
  * Return whether the unit is derived (such as m/s, or cm^2, but not N)
482
492
  * @memberof Unit
@@ -666,15 +676,16 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
666
676
  return this.equalBase(other) && equal(this.value, other.value);
667
677
  };
668
678
  /**
669
- * Multiply this unit with another one
679
+ * Multiply this unit with another one or with a scalar
670
680
  * @memberof Unit
671
681
  * @param {Unit} other
672
682
  * @return {Unit} product of this unit and the other unit
673
683
  */
674
684
 
675
685
 
676
- Unit.prototype.multiply = function (other) {
686
+ Unit.prototype.multiply = function (_other) {
677
687
  var res = this.clone();
688
+ var other = (0, _is.isUnit)(_other) ? _other : new Unit(_other);
678
689
 
679
690
  for (var i = 0; i < BASE_DIMENSIONS.length; i++) {
680
691
  // Dimensions arrays may be of different lengths. Default to 0.
@@ -698,19 +709,35 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
698
709
  res.value = null;
699
710
  }
700
711
 
701
- res.skipAutomaticSimplification = false;
712
+ if ((0, _is.isUnit)(_other)) {
713
+ res.skipAutomaticSimplification = false;
714
+ }
715
+
702
716
  return getNumericIfUnitless(res);
703
717
  };
718
+ /**
719
+ * Divide a number by this unit
720
+ *
721
+ * @memberof Unit
722
+ * @param {numeric} numerator
723
+ * @param {unit} result of dividing numerator by this unit
724
+ */
725
+
726
+
727
+ Unit.prototype.divideInto = function (numerator) {
728
+ return new Unit(numerator).divide(this);
729
+ };
704
730
  /**
705
731
  * Divide this unit by another one
706
732
  * @memberof Unit
707
- * @param {Unit} other
733
+ * @param {Unit | numeric} other
708
734
  * @return {Unit} result of dividing this unit by the other unit
709
735
  */
710
736
 
711
737
 
712
- Unit.prototype.divide = function (other) {
738
+ Unit.prototype.divide = function (_other) {
713
739
  var res = this.clone();
740
+ var other = (0, _is.isUnit)(_other) ? _other : new Unit(_other);
714
741
 
715
742
  for (var i = 0; i < BASE_DIMENSIONS.length; i++) {
716
743
  // Dimensions arrays may be of different lengths. Default to 0.
@@ -736,7 +763,10 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
736
763
  res.value = null;
737
764
  }
738
765
 
739
- res.skipAutomaticSimplification = false;
766
+ if ((0, _is.isUnit)(_other)) {
767
+ res.skipAutomaticSimplification = false;
768
+ }
769
+
740
770
  return getNumericIfUnitless(res);
741
771
  };
742
772
  /**
@@ -805,7 +835,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
805
835
  // To give the correct, but unexpected, results for units with an offset.
806
836
  // For example, abs(-283.15 degC) = -263.15 degC !!!
807
837
  // We must take the offset into consideration here
808
- var convert = Unit._getNumberConverter((0, _is.typeOf)(ret.value)); // convert to Fraction or BigNumber if needed
838
+ var convert = ret._numberConverter(); // convert to Fraction or BigNumber if needed
809
839
 
810
840
 
811
841
  var unitValue = convert(ret.units[0].unit.value);
@@ -1939,9 +1969,9 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
1939
1969
  }
1940
1970
  }
1941
1971
  };
1942
- PREFIXES.SHORTLONG = (0, _extends2.default)({}, PREFIXES.SHORT, PREFIXES.LONG);
1943
- PREFIXES.BINARY_SHORT = (0, _extends2.default)({}, PREFIXES.BINARY_SHORT_SI, PREFIXES.BINARY_SHORT_IEC);
1944
- PREFIXES.BINARY_LONG = (0, _extends2.default)({}, PREFIXES.BINARY_LONG_SI, PREFIXES.BINARY_LONG_IEC);
1972
+ PREFIXES.SHORTLONG = (0, _extends2["default"])({}, PREFIXES.SHORT, PREFIXES.LONG);
1973
+ PREFIXES.BINARY_SHORT = (0, _extends2["default"])({}, PREFIXES.BINARY_SHORT_SI, PREFIXES.BINARY_SHORT_IEC);
1974
+ PREFIXES.BINARY_LONG = (0, _extends2["default"])({}, PREFIXES.BINARY_LONG_SI, PREFIXES.BINARY_LONG_IEC);
1945
1975
  /* Internally, each unit is represented by a value and a dimension array. The elements of the dimensions array have the following meaning:
1946
1976
  * Index Dimension
1947
1977
  * ----- ---------
@@ -2125,7 +2155,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
2125
2155
  value: 1,
2126
2156
  offset: 0
2127
2157
  },
2128
- in: {
2158
+ "in": {
2129
2159
  name: 'in',
2130
2160
  base: BASE_UNITS.LENGTH,
2131
2161
  prefixes: PREFIXES.NONE,
@@ -3389,7 +3419,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3389
3419
  electronvolts: 'electronvolt',
3390
3420
  moles: 'mole',
3391
3421
  bit: 'bits',
3392
- byte: 'bytes'
3422
+ "byte": 'bytes'
3393
3423
  };
3394
3424
  /**
3395
3425
  * Calculate the values for the angle units.
@@ -3647,6 +3677,23 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3647
3677
  return x;
3648
3678
  }
3649
3679
  };
3680
+ /**
3681
+ * Retrieve the right converter function corresponding with this unit's
3682
+ * value
3683
+ *
3684
+ * @memberof Unit
3685
+ * @return {Function}
3686
+ */
3687
+
3688
+ Unit.prototype._numberConverter = function () {
3689
+ var convert = Unit.typeConverters[this.valueType()];
3690
+
3691
+ if (convert) {
3692
+ return convert;
3693
+ }
3694
+
3695
+ throw new TypeError('Unsupported Unit value type "' + this.valueType() + '"');
3696
+ };
3650
3697
  /**
3651
3698
  * Retrieve the right convertor function corresponding with the type
3652
3699
  * of provided exampleValue.
@@ -3656,6 +3703,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3656
3703
  * @return {Function}
3657
3704
  */
3658
3705
 
3706
+
3659
3707
  Unit._getNumberConverter = function (type) {
3660
3708
  if (!Unit.typeConverters[type]) {
3661
3709
  throw new TypeError('Unsupported type "' + type + '"');
@@ -3733,7 +3781,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3733
3781
 
3734
3782
 
3735
3783
  Unit.createUnit = function (obj, options) {
3736
- if ((0, _typeof2.default)(obj) !== 'object') {
3784
+ if ((0, _typeof2["default"])(obj) !== 'object') {
3737
3785
  throw new TypeError("createUnit expects first parameter to be of type 'Object'");
3738
3786
  } // Remove all units and aliases we are overriding
3739
3787
 
@@ -3823,7 +3871,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3823
3871
  if (obj !== '') {
3824
3872
  definition = obj;
3825
3873
  }
3826
- } else if ((0, _typeof2.default)(obj) === 'object') {
3874
+ } else if ((0, _typeof2["default"])(obj) === 'object') {
3827
3875
  definition = obj.definition;
3828
3876
  prefixes = obj.prefixes;
3829
3877
  offset = obj.offset;
@@ -40,9 +40,10 @@ var createCreateUnit = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
40
40
  * math.createUnit('foo')
41
41
  * math.createUnit('knot', {definition: '0.514444444 m/s', aliases: ['knots', 'kt', 'kts']})
42
42
  * math.createUnit('mph', '1 mile/hour')
43
+ * math.createUnit('km', math.unit(1000, 'm'))
43
44
  *
44
45
  * @param {string} name The name of the new unit. Must be unique. Example: 'knot'
45
- * @param {string, Unit} definition Definition of the unit in terms of existing units. For example, '0.514444444 m / s'.
46
+ * @param {string, UnitDefinition, Unit} definition Definition of the unit in terms of existing units. For example, '0.514444444 m / s'.
46
47
  * @param {Object} options (optional) An object containing any of the following properties:
47
48
  * - `prefixes {string}` "none", "short", "long", "binary_short", or "binary_long". The default is "none".
48
49
  * - `aliases {Array}` Array of strings. Example: ['knots', 'kt', 'kts']
@@ -55,9 +55,15 @@ var createUnitFunction = /* #__PURE__ */(0, _factory.factory)(name, dependencies
55
55
  'number | BigNumber | Fraction | Complex, string': function numberBigNumberFractionComplexString(value, unit) {
56
56
  return new Unit(value, unit);
57
57
  },
58
- 'Array | Matrix': function ArrayMatrix(x) {
59
- return (0, _collection.deepMap)(x, this);
60
- }
58
+ 'number | BigNumber | Fraction': function numberBigNumberFraction(value) {
59
+ // dimensionless
60
+ return new Unit(value);
61
+ },
62
+ 'Array | Matrix': typed.referToSelf(function (self) {
63
+ return function (x) {
64
+ return (0, _collection.deepMap)(x, self);
65
+ };
66
+ })
61
67
  });
62
68
  });
63
69
  exports.createUnitFunction = createUnitFunction;
@@ -78,7 +78,7 @@ function hasSafeProperty(object, prop) {
78
78
 
79
79
 
80
80
  function isSafeProperty(object, prop) {
81
- if (!object || (0, _typeof2.default)(object) !== 'object') {
81
+ if (!object || (0, _typeof2["default"])(object) !== 'object') {
82
82
  return false;
83
83
  } // SAFE: whitelisted
84
84
  // e.g length
@@ -171,7 +171,7 @@ function isSafeMethod(object, method) {
171
171
  }
172
172
 
173
173
  function isPlainObject(object) {
174
- return (0, _typeof2.default)(object) === 'object' && object && object.constructor === Object;
174
+ return (0, _typeof2["default"])(object) === 'object' && object && object.constructor === Object;
175
175
  }
176
176
 
177
177
  var safeNativeProperties = {
@@ -16,7 +16,7 @@ var _tinyEmitter = _interopRequireDefault(require("tiny-emitter"));
16
16
  */
17
17
  function mixin(obj) {
18
18
  // create event emitter
19
- var emitter = new _tinyEmitter.default(); // bind methods to obj (we don't want to expose the emitter.e Array...)
19
+ var emitter = new _tinyEmitter["default"](); // bind methods to obj (we don't want to expose the emitter.e Array...)
20
20
 
21
21
  obj.on = emitter.on.bind(emitter);
22
22
  obj.off = emitter.off.bind(emitter);
@@ -38,7 +38,7 @@ function memoize(fn) {
38
38
  limit = limit == null ? Number.POSITIVE_INFINITY : limit;
39
39
  hasher = hasher == null ? JSON.stringify : hasher;
40
40
  return function memoize() {
41
- if ((0, _typeof2.default)(memoize.cache) !== 'object') {
41
+ if ((0, _typeof2["default"])(memoize.cache) !== 'object') {
42
42
  memoize.cache = {
43
43
  values: new Map(),
44
44
  lru: (0, _lruQueue.lruQueue)(limit || Number.POSITIVE_INFINITY)
@@ -60,7 +60,7 @@ function memoize(fn) {
60
60
 
61
61
  var newVal = fn.apply(fn, args);
62
62
  memoize.cache.values.set(hash, newVal);
63
- memoize.cache.values.delete(memoize.cache.lru.hit(hash));
63
+ memoize.cache.values["delete"](memoize.cache.lru.hit(hash));
64
64
  return newVal;
65
65
  };
66
66
  }
@@ -43,6 +43,7 @@ exports.isString = isString;
43
43
  exports.isSymbolNode = isSymbolNode;
44
44
  exports.isUndefined = isUndefined;
45
45
  exports.isUnit = isUnit;
46
+ exports.rule2Node = rule2Node;
46
47
  exports.typeOf = typeOf;
47
48
 
48
49
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
@@ -65,11 +66,11 @@ function isNumber(x) {
65
66
  }
66
67
 
67
68
  function isBigNumber(x) {
68
- if (!x || (0, _typeof2.default)(x) !== 'object' || typeof x.constructor !== 'function') {
69
+ if (!x || (0, _typeof2["default"])(x) !== 'object' || typeof x.constructor !== 'function') {
69
70
  return false;
70
71
  }
71
72
 
72
- if (x.isBigNumber === true && (0, _typeof2.default)(x.constructor.prototype) === 'object' && x.constructor.prototype.isBigNumber === true) {
73
+ if (x.isBigNumber === true && (0, _typeof2["default"])(x.constructor.prototype) === 'object' && x.constructor.prototype.isBigNumber === true) {
73
74
  return true;
74
75
  }
75
76
 
@@ -81,11 +82,11 @@ function isBigNumber(x) {
81
82
  }
82
83
 
83
84
  function isComplex(x) {
84
- return x && (0, _typeof2.default)(x) === 'object' && Object.getPrototypeOf(x).isComplex === true || false;
85
+ return x && (0, _typeof2["default"])(x) === 'object' && Object.getPrototypeOf(x).isComplex === true || false;
85
86
  }
86
87
 
87
88
  function isFraction(x) {
88
- return x && (0, _typeof2.default)(x) === 'object' && Object.getPrototypeOf(x).isFraction === true || false;
89
+ return x && (0, _typeof2["default"])(x) === 'object' && Object.getPrototypeOf(x).isFraction === true || false;
89
90
  }
90
91
 
91
92
  function isUnit(x) {
@@ -154,7 +155,7 @@ function isRegExp(x) {
154
155
  }
155
156
 
156
157
  function isObject(x) {
157
- return !!(x && (0, _typeof2.default)(x) === 'object' && x.constructor === Object && !isComplex(x) && !isFraction(x));
158
+ return !!(x && (0, _typeof2["default"])(x) === 'object' && x.constructor === Object && !isComplex(x) && !isFraction(x));
158
159
  }
159
160
 
160
161
  function isNull(x) {
@@ -188,6 +189,21 @@ function isConditionalNode(x) {
188
189
  function isConstantNode(x) {
189
190
  return x && x.isConstantNode === true && x.constructor.prototype.isNode === true || false;
190
191
  }
192
+ /* Very specialized: returns true for those nodes which in the numerator of
193
+ a fraction means that the division in that fraction has precedence over implicit
194
+ multiplication, e.g. -2/3 x parses as (-2/3) x and 3/4 x parses as (3/4) x but
195
+ 6!/8 x parses as 6! / (8x). It is located here because it is shared between
196
+ parse.js and OperatorNode.js (for parsing and printing, respectively).
197
+
198
+ This should *not* be exported from mathjs, unlike most of the tests here.
199
+ Its name does not start with 'is' to prevent utils/snapshot.js from thinking
200
+ it should be exported.
201
+ */
202
+
203
+
204
+ function rule2Node(node) {
205
+ return isConstantNode(node) || isOperatorNode(node) && node.args.length === 1 && isConstantNode(node.args[0]) && '-+~'.includes(node.op);
206
+ }
191
207
 
192
208
  function isFunctionAssignmentNode(x) {
193
209
  return x && x.isFunctionAssignmentNode === true && x.constructor.prototype.isNode === true || false;
@@ -230,29 +246,15 @@ function isChain(x) {
230
246
  }
231
247
 
232
248
  function typeOf(x) {
233
- var t = (0, _typeof2.default)(x);
249
+ var t = (0, _typeof2["default"])(x);
234
250
 
235
251
  if (t === 'object') {
236
- // JavaScript types
237
252
  if (x === null) return 'null';
238
- if (Array.isArray(x)) return 'Array';
239
- if (x instanceof Date) return 'Date';
240
- if (x instanceof RegExp) return 'RegExp'; // math.js types
241
-
242
- if (isBigNumber(x)) return 'BigNumber';
243
- if (isComplex(x)) return 'Complex';
244
- if (isFraction(x)) return 'Fraction';
245
- if (isMatrix(x)) return 'Matrix';
246
- if (isUnit(x)) return 'Unit';
247
- if (isIndex(x)) return 'Index';
248
- if (isRange(x)) return 'Range';
249
- if (isResultSet(x)) return 'ResultSet';
250
- if (isNode(x)) return x.type;
251
- if (isChain(x)) return 'Chain';
252
- if (isHelp(x)) return 'Help';
253
- return 'Object';
253
+ if (isBigNumber(x)) return 'BigNumber'; // Special: weird mashup with Decimal
254
+
255
+ if (x.constructor && x.constructor.name) return x.constructor.name;
256
+ return 'Object'; // just in case
254
257
  }
255
258
 
256
- if (t === 'function') return 'Function';
257
- return t; // can be 'string', 'number', 'boolean', ...
259
+ return t; // can be 'string', 'number', 'boolean', 'function', 'bigint', ...
258
260
  }