mathjs 10.6.4 → 11.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (454) hide show
  1. package/HISTORY.md +79 -1
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +2 -41
  4. package/lib/browser/math.js.LICENSE.txt +43 -0
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +6 -5
  7. package/lib/cjs/core/function/import.js +4 -14
  8. package/lib/cjs/core/function/typed.js +54 -12
  9. package/lib/cjs/defaultInstance.js +3 -3
  10. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  11. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  12. package/lib/cjs/entry/configReadonly.js +1 -1
  13. package/lib/cjs/entry/dependenciesAny/dependenciesChainClass.generated.js +3 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesKldivergence.generated.js +3 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +3 -0
  17. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +3 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +56 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +6 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesSqrtm.generated.js +3 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesStd.generated.js +3 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesStdTransform.generated.js +3 -0
  23. package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesChainClass.generated.js +3 -0
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  26. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +3 -0
  27. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +3 -0
  28. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +50 -0
  29. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +6 -0
  30. package/lib/cjs/entry/dependenciesNumber/dependenciesStd.generated.js +3 -0
  31. package/lib/cjs/entry/dependenciesNumber/dependenciesStdTransform.generated.js +3 -0
  32. package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
  33. package/lib/cjs/entry/impureFunctionsAny.generated.js +87 -61
  34. package/lib/cjs/entry/impureFunctionsNumber.generated.js +93 -69
  35. package/lib/cjs/entry/pureFunctionsAny.generated.js +50 -45
  36. package/lib/cjs/entry/pureFunctionsNumber.generated.js +22 -19
  37. package/lib/cjs/expression/Parser.js +1 -1
  38. package/lib/cjs/expression/embeddedDocs/construction/index.js +1 -1
  39. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
  40. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
  41. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  42. package/lib/cjs/expression/node/AccessorNode.js +216 -173
  43. package/lib/cjs/expression/node/ArrayNode.js +206 -160
  44. package/lib/cjs/expression/node/AssignmentNode.js +321 -270
  45. package/lib/cjs/expression/node/BlockNode.js +223 -172
  46. package/lib/cjs/expression/node/ConditionalNode.js +253 -193
  47. package/lib/cjs/expression/node/ConstantNode.js +216 -171
  48. package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
  49. package/lib/cjs/expression/node/FunctionNode.js +456 -416
  50. package/lib/cjs/expression/node/IndexNode.js +256 -210
  51. package/lib/cjs/expression/node/Node.js +411 -378
  52. package/lib/cjs/expression/node/ObjectNode.js +223 -178
  53. package/lib/cjs/expression/node/OperatorNode.js +474 -397
  54. package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
  55. package/lib/cjs/expression/node/RangeNode.js +272 -224
  56. package/lib/cjs/expression/node/RelationalNode.js +246 -195
  57. package/lib/cjs/expression/node/SymbolNode.js +219 -172
  58. package/lib/cjs/expression/node/utils/access.js +1 -1
  59. package/lib/cjs/expression/node/utils/assign.js +1 -1
  60. package/lib/cjs/expression/operators.js +117 -23
  61. package/lib/cjs/expression/parse.js +37 -19
  62. package/lib/cjs/expression/transform/std.transform.js +3 -1
  63. package/lib/cjs/factoriesAny.js +8 -0
  64. package/lib/cjs/factoriesNumber.js +10 -1
  65. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  66. package/lib/cjs/function/algebra/derivative.js +25 -33
  67. package/lib/cjs/function/algebra/leafCount.js +0 -3
  68. package/lib/cjs/function/algebra/rationalize.js +78 -108
  69. package/lib/cjs/function/algebra/resolve.js +53 -16
  70. package/lib/cjs/function/algebra/simplify/util.js +1 -1
  71. package/lib/cjs/function/algebra/simplify.js +90 -115
  72. package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
  73. package/lib/cjs/function/algebra/simplifyCore.js +196 -93
  74. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  75. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  76. package/lib/cjs/function/algebra/symbolicEqual.js +14 -32
  77. package/lib/cjs/function/arithmetic/abs.js +7 -14
  78. package/lib/cjs/function/arithmetic/add.js +26 -70
  79. package/lib/cjs/function/arithmetic/addScalar.js +17 -9
  80. package/lib/cjs/function/arithmetic/cbrt.js +7 -11
  81. package/lib/cjs/function/arithmetic/ceil.js +50 -40
  82. package/lib/cjs/function/arithmetic/cube.js +5 -10
  83. package/lib/cjs/function/arithmetic/divide.js +7 -7
  84. package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
  85. package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
  86. package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
  87. package/lib/cjs/function/arithmetic/dotPow.js +30 -63
  88. package/lib/cjs/function/arithmetic/exp.js +8 -12
  89. package/lib/cjs/function/arithmetic/expm1.js +10 -10
  90. package/lib/cjs/function/arithmetic/fix.js +34 -28
  91. package/lib/cjs/function/arithmetic/floor.js +51 -41
  92. package/lib/cjs/function/arithmetic/gcd.js +27 -68
  93. package/lib/cjs/function/arithmetic/hypot.js +9 -5
  94. package/lib/cjs/function/arithmetic/invmod.js +2 -2
  95. package/lib/cjs/function/arithmetic/lcm.js +27 -68
  96. package/lib/cjs/function/arithmetic/log.js +10 -12
  97. package/lib/cjs/function/arithmetic/log10.js +5 -3
  98. package/lib/cjs/function/arithmetic/log1p.js +11 -7
  99. package/lib/cjs/function/arithmetic/log2.js +5 -3
  100. package/lib/cjs/function/arithmetic/mod.js +22 -64
  101. package/lib/cjs/function/arithmetic/multiply.js +40 -35
  102. package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
  103. package/lib/cjs/function/arithmetic/norm.js +1 -5
  104. package/lib/cjs/function/arithmetic/nthRoot.js +83 -95
  105. package/lib/cjs/function/arithmetic/nthRoots.js +2 -2
  106. package/lib/cjs/function/arithmetic/round.js +56 -42
  107. package/lib/cjs/function/arithmetic/sign.js +14 -10
  108. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  109. package/lib/cjs/function/arithmetic/square.js +6 -10
  110. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  111. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  112. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  113. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  114. package/lib/cjs/function/bitwise/bitNot.js +6 -4
  115. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  116. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  117. package/lib/cjs/function/bitwise/leftShift.js +69 -82
  118. package/lib/cjs/function/bitwise/rightArithShift.js +69 -82
  119. package/lib/cjs/function/bitwise/rightLogShift.js +69 -82
  120. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  121. package/lib/cjs/function/complex/arg.js +5 -3
  122. package/lib/cjs/function/complex/conj.js +6 -7
  123. package/lib/cjs/function/complex/im.js +7 -8
  124. package/lib/cjs/function/complex/re.js +6 -10
  125. package/lib/cjs/function/geometry/distance.js +2 -2
  126. package/lib/cjs/function/logical/and.js +74 -80
  127. package/lib/cjs/function/logical/not.js +13 -6
  128. package/lib/cjs/function/logical/or.js +21 -63
  129. package/lib/cjs/function/logical/xor.js +21 -63
  130. package/lib/cjs/function/matrix/diff.js +11 -8
  131. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  132. package/lib/cjs/function/matrix/fft.js +2 -2
  133. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  134. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  135. package/lib/cjs/function/matrix/ones.js +2 -1
  136. package/lib/cjs/function/matrix/rotate.js +5 -5
  137. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  138. package/lib/cjs/function/matrix/transpose.js +47 -48
  139. package/lib/cjs/function/matrix/zeros.js +2 -1
  140. package/lib/cjs/function/probability/factorial.js +5 -3
  141. package/lib/cjs/function/probability/gamma.js +38 -40
  142. package/lib/cjs/function/probability/kldivergence.js +5 -2
  143. package/lib/cjs/function/probability/lgamma.js +30 -30
  144. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  145. package/lib/cjs/function/relational/compare.js +21 -67
  146. package/lib/cjs/function/relational/compareNatural.js +59 -54
  147. package/lib/cjs/function/relational/compareText.js +10 -43
  148. package/lib/cjs/function/relational/compareUnits.js +24 -0
  149. package/lib/cjs/function/relational/equal.js +19 -80
  150. package/lib/cjs/function/relational/equalScalar.js +7 -9
  151. package/lib/cjs/function/relational/larger.js +21 -67
  152. package/lib/cjs/function/relational/largerEq.js +21 -67
  153. package/lib/cjs/function/relational/smaller.js +21 -67
  154. package/lib/cjs/function/relational/smallerEq.js +21 -67
  155. package/lib/cjs/function/relational/unequal.js +19 -80
  156. package/lib/cjs/function/special/erf.js +5 -3
  157. package/lib/cjs/function/statistics/std.js +11 -2
  158. package/lib/cjs/function/string/format.js +2 -2
  159. package/lib/cjs/function/string/hex.js +1 -2
  160. package/lib/cjs/function/trigonometry/acos.js +4 -8
  161. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  162. package/lib/cjs/function/trigonometry/acot.js +6 -11
  163. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  164. package/lib/cjs/function/trigonometry/acsc.js +6 -11
  165. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  166. package/lib/cjs/function/trigonometry/asec.js +6 -10
  167. package/lib/cjs/function/trigonometry/asech.js +4 -8
  168. package/lib/cjs/function/trigonometry/asin.js +5 -10
  169. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  170. package/lib/cjs/function/trigonometry/atan.js +5 -11
  171. package/lib/cjs/function/trigonometry/atan2.js +25 -63
  172. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  173. package/lib/cjs/function/trigonometry/cos.js +11 -20
  174. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  175. package/lib/cjs/function/trigonometry/cot.js +9 -15
  176. package/lib/cjs/function/trigonometry/coth.js +4 -15
  177. package/lib/cjs/function/trigonometry/csc.js +11 -17
  178. package/lib/cjs/function/trigonometry/csch.js +4 -15
  179. package/lib/cjs/function/trigonometry/sec.js +11 -17
  180. package/lib/cjs/function/trigonometry/sech.js +4 -15
  181. package/lib/cjs/function/trigonometry/sin.js +11 -21
  182. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  183. package/lib/cjs/function/trigonometry/tan.js +11 -21
  184. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  185. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  186. package/lib/cjs/function/unit/to.js +7 -41
  187. package/lib/cjs/function/utils/clone.js +1 -1
  188. package/lib/cjs/function/utils/hasNumericValue.js +5 -1
  189. package/lib/cjs/function/utils/isInteger.js +6 -4
  190. package/lib/cjs/function/utils/isNaN.js +1 -1
  191. package/lib/cjs/function/utils/isNegative.js +11 -7
  192. package/lib/cjs/function/utils/isNumeric.js +6 -4
  193. package/lib/cjs/function/utils/isPositive.js +11 -7
  194. package/lib/cjs/function/utils/isPrime.js +5 -3
  195. package/lib/cjs/function/utils/isZero.js +21 -17
  196. package/lib/cjs/function/utils/numeric.js +11 -4
  197. package/lib/cjs/function/utils/typeOf.js +38 -44
  198. package/lib/cjs/header.js +2 -2
  199. package/lib/cjs/plain/bignumber/index.js +1 -1
  200. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  201. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  202. package/lib/cjs/type/boolean.js +7 -5
  203. package/lib/cjs/type/chain/Chain.js +23 -3
  204. package/lib/cjs/type/complex/Complex.js +18 -14
  205. package/lib/cjs/type/complex/function/complex.js +6 -4
  206. package/lib/cjs/type/fraction/Fraction.js +10 -6
  207. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  208. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  209. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  210. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  211. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  213. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  214. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  217. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  218. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  219. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  220. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  221. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  222. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  223. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  224. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  225. package/lib/cjs/type/number.js +6 -4
  226. package/lib/cjs/type/string.js +7 -5
  227. package/lib/cjs/type/unit/Unit.js +98 -45
  228. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  229. package/lib/cjs/type/unit/function/unit.js +14 -5
  230. package/lib/cjs/utils/customs.js +2 -2
  231. package/lib/cjs/utils/emitter.js +1 -1
  232. package/lib/cjs/utils/function.js +2 -2
  233. package/lib/cjs/utils/is.js +27 -25
  234. package/lib/cjs/utils/latex.js +3 -3
  235. package/lib/cjs/utils/lruQueue.js +1 -1
  236. package/lib/cjs/utils/map.js +3 -3
  237. package/lib/cjs/utils/object.js +2 -2
  238. package/lib/cjs/utils/snapshot.js +30 -57
  239. package/lib/cjs/utils/string.js +3 -3
  240. package/lib/cjs/version.js +1 -1
  241. package/lib/esm/core/create.js +2 -1
  242. package/lib/esm/core/function/import.js +2 -12
  243. package/lib/esm/core/function/typed.js +47 -11
  244. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  247. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  249. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  250. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  251. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  252. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  253. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  254. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  255. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  256. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  257. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  258. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  259. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  260. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  261. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  262. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  263. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  264. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  265. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  266. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  267. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  268. package/lib/esm/expression/embeddedDocs/construction/index.js +1 -1
  269. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  270. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  271. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  272. package/lib/esm/expression/node/AccessorNode.js +158 -153
  273. package/lib/esm/expression/node/ArrayNode.js +162 -154
  274. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  275. package/lib/esm/expression/node/BlockNode.js +177 -163
  276. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  277. package/lib/esm/expression/node/ConstantNode.js +171 -163
  278. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  279. package/lib/esm/expression/node/FunctionNode.js +407 -407
  280. package/lib/esm/expression/node/IndexNode.js +206 -198
  281. package/lib/esm/expression/node/Node.js +325 -325
  282. package/lib/esm/expression/node/ObjectNode.js +166 -157
  283. package/lib/esm/expression/node/OperatorNode.js +414 -377
  284. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  285. package/lib/esm/expression/node/RangeNode.js +221 -212
  286. package/lib/esm/expression/node/RelationalNode.js +190 -176
  287. package/lib/esm/expression/node/SymbolNode.js +161 -152
  288. package/lib/esm/expression/operators.js +96 -4
  289. package/lib/esm/expression/parse.js +25 -7
  290. package/lib/esm/expression/transform/std.transform.js +3 -1
  291. package/lib/esm/factoriesAny.js +1 -0
  292. package/lib/esm/factoriesNumber.js +1 -0
  293. package/lib/esm/function/algebra/derivative.js +25 -33
  294. package/lib/esm/function/algebra/leafCount.js +0 -3
  295. package/lib/esm/function/algebra/rationalize.js +83 -114
  296. package/lib/esm/function/algebra/resolve.js +25 -16
  297. package/lib/esm/function/algebra/simplify.js +85 -113
  298. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  299. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  300. package/lib/esm/function/algebra/symbolicEqual.js +14 -32
  301. package/lib/esm/function/arithmetic/abs.js +3 -16
  302. package/lib/esm/function/arithmetic/add.js +21 -65
  303. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  304. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  305. package/lib/esm/function/arithmetic/ceil.js +25 -25
  306. package/lib/esm/function/arithmetic/cube.js +5 -9
  307. package/lib/esm/function/arithmetic/divide.js +7 -7
  308. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  309. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  310. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  311. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  312. package/lib/esm/function/arithmetic/exp.js +8 -11
  313. package/lib/esm/function/arithmetic/expm1.js +10 -9
  314. package/lib/esm/function/arithmetic/fix.js +18 -18
  315. package/lib/esm/function/arithmetic/floor.js +26 -26
  316. package/lib/esm/function/arithmetic/gcd.js +26 -70
  317. package/lib/esm/function/arithmetic/hypot.js +7 -6
  318. package/lib/esm/function/arithmetic/invmod.js +1 -1
  319. package/lib/esm/function/arithmetic/lcm.js +26 -70
  320. package/lib/esm/function/arithmetic/log.js +7 -10
  321. package/lib/esm/function/arithmetic/log10.js +1 -3
  322. package/lib/esm/function/arithmetic/log1p.js +4 -6
  323. package/lib/esm/function/arithmetic/log2.js +1 -3
  324. package/lib/esm/function/arithmetic/mod.js +21 -62
  325. package/lib/esm/function/arithmetic/multiply.js +23 -27
  326. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  327. package/lib/esm/function/arithmetic/norm.js +0 -4
  328. package/lib/esm/function/arithmetic/nthRoot.js +41 -76
  329. package/lib/esm/function/arithmetic/nthRoots.js +2 -2
  330. package/lib/esm/function/arithmetic/round.js +26 -28
  331. package/lib/esm/function/arithmetic/sign.js +5 -7
  332. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  333. package/lib/esm/function/arithmetic/square.js +6 -9
  334. package/lib/esm/function/arithmetic/subtract.js +31 -95
  335. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  336. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  337. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  338. package/lib/esm/function/bitwise/bitNot.js +2 -4
  339. package/lib/esm/function/bitwise/bitOr.js +16 -59
  340. package/lib/esm/function/bitwise/bitXor.js +16 -59
  341. package/lib/esm/function/bitwise/leftShift.js +39 -61
  342. package/lib/esm/function/bitwise/rightArithShift.js +39 -61
  343. package/lib/esm/function/bitwise/rightLogShift.js +39 -61
  344. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  345. package/lib/esm/function/complex/arg.js +1 -3
  346. package/lib/esm/function/complex/conj.js +3 -12
  347. package/lib/esm/function/complex/im.js +4 -15
  348. package/lib/esm/function/complex/re.js +3 -15
  349. package/lib/esm/function/geometry/distance.js +2 -2
  350. package/lib/esm/function/logical/and.js +35 -57
  351. package/lib/esm/function/logical/not.js +3 -6
  352. package/lib/esm/function/logical/or.js +16 -61
  353. package/lib/esm/function/logical/xor.js +16 -61
  354. package/lib/esm/function/matrix/diff.js +3 -8
  355. package/lib/esm/function/matrix/ones.js +2 -1
  356. package/lib/esm/function/matrix/rotate.js +5 -5
  357. package/lib/esm/function/matrix/sqrtm.js +3 -2
  358. package/lib/esm/function/matrix/transpose.js +47 -50
  359. package/lib/esm/function/matrix/zeros.js +2 -1
  360. package/lib/esm/function/probability/factorial.js +1 -3
  361. package/lib/esm/function/probability/gamma.js +38 -39
  362. package/lib/esm/function/probability/kldivergence.js +3 -2
  363. package/lib/esm/function/probability/lgamma.js +29 -29
  364. package/lib/esm/function/relational/compare.js +21 -67
  365. package/lib/esm/function/relational/compareNatural.js +54 -49
  366. package/lib/esm/function/relational/compareText.js +10 -42
  367. package/lib/esm/function/relational/compareUnits.js +15 -0
  368. package/lib/esm/function/relational/equal.js +19 -79
  369. package/lib/esm/function/relational/equalScalar.js +6 -9
  370. package/lib/esm/function/relational/larger.js +23 -73
  371. package/lib/esm/function/relational/largerEq.js +23 -73
  372. package/lib/esm/function/relational/smaller.js +23 -73
  373. package/lib/esm/function/relational/smallerEq.js +23 -73
  374. package/lib/esm/function/relational/unequal.js +19 -79
  375. package/lib/esm/function/special/erf.js +1 -3
  376. package/lib/esm/function/statistics/std.js +10 -2
  377. package/lib/esm/function/string/format.js +2 -2
  378. package/lib/esm/function/string/hex.js +1 -2
  379. package/lib/esm/function/trigonometry/acos.js +4 -7
  380. package/lib/esm/function/trigonometry/acosh.js +2 -6
  381. package/lib/esm/function/trigonometry/acot.js +6 -10
  382. package/lib/esm/function/trigonometry/acoth.js +4 -7
  383. package/lib/esm/function/trigonometry/acsc.js +6 -10
  384. package/lib/esm/function/trigonometry/acsch.js +4 -7
  385. package/lib/esm/function/trigonometry/asec.js +6 -9
  386. package/lib/esm/function/trigonometry/asech.js +4 -7
  387. package/lib/esm/function/trigonometry/asin.js +5 -9
  388. package/lib/esm/function/trigonometry/asinh.js +4 -8
  389. package/lib/esm/function/trigonometry/atan.js +5 -10
  390. package/lib/esm/function/trigonometry/atan2.js +26 -65
  391. package/lib/esm/function/trigonometry/atanh.js +4 -8
  392. package/lib/esm/function/trigonometry/cos.js +11 -22
  393. package/lib/esm/function/trigonometry/cosh.js +5 -20
  394. package/lib/esm/function/trigonometry/cot.js +10 -20
  395. package/lib/esm/function/trigonometry/coth.js +6 -20
  396. package/lib/esm/function/trigonometry/csc.js +12 -22
  397. package/lib/esm/function/trigonometry/csch.js +6 -20
  398. package/lib/esm/function/trigonometry/sec.js +12 -22
  399. package/lib/esm/function/trigonometry/sech.js +6 -20
  400. package/lib/esm/function/trigonometry/sin.js +11 -23
  401. package/lib/esm/function/trigonometry/sinh.js +5 -21
  402. package/lib/esm/function/trigonometry/tan.js +11 -23
  403. package/lib/esm/function/trigonometry/tanh.js +5 -21
  404. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  405. package/lib/esm/function/unit/to.js +8 -43
  406. package/lib/esm/function/utils/clone.js +1 -1
  407. package/lib/esm/function/utils/hasNumericValue.js +3 -1
  408. package/lib/esm/function/utils/isInteger.js +2 -4
  409. package/lib/esm/function/utils/isNaN.js +1 -1
  410. package/lib/esm/function/utils/isNegative.js +3 -7
  411. package/lib/esm/function/utils/isNumeric.js +4 -10
  412. package/lib/esm/function/utils/isPositive.js +3 -7
  413. package/lib/esm/function/utils/isPrime.js +1 -3
  414. package/lib/esm/function/utils/isZero.js +13 -17
  415. package/lib/esm/function/utils/numeric.js +11 -4
  416. package/lib/esm/function/utils/typeOf.js +38 -44
  417. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  418. package/lib/esm/type/boolean.js +1 -3
  419. package/lib/esm/type/chain/Chain.js +23 -3
  420. package/lib/esm/type/complex/Complex.js +4 -0
  421. package/lib/esm/type/complex/function/complex.js +1 -3
  422. package/lib/esm/type/fraction/Fraction.js +4 -0
  423. package/lib/esm/type/fraction/function/fraction.js +1 -3
  424. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  425. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  426. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  427. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  428. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  429. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  430. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  431. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  432. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  433. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  434. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  435. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  436. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  437. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  438. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  439. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  440. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  441. package/lib/esm/type/number.js +1 -3
  442. package/lib/esm/type/string.js +1 -3
  443. package/lib/esm/type/unit/Unit.js +85 -36
  444. package/lib/esm/type/unit/function/createUnit.js +2 -1
  445. package/lib/esm/type/unit/function/unit.js +10 -5
  446. package/lib/esm/utils/is.js +18 -18
  447. package/lib/esm/utils/snapshot.js +22 -48
  448. package/lib/esm/version.js +1 -1
  449. package/package.json +22 -25
  450. package/types/index.d.ts +211 -180
  451. package/types/index.ts +358 -144
  452. package/types/tsconfig.json +4 -1
  453. package/lib/cjs/utils/polyfills.js +0 -14
  454. package/lib/esm/utils/polyfills.js +0 -12
@@ -9,10 +9,10 @@ exports.createUnitClass = void 0;
9
9
 
10
10
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
11
 
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
13
 
14
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
+
16
16
  var _is = require("../../utils/is.js");
17
17
 
18
18
  var _factory = require("../../utils/factory.js");
@@ -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'];
@@ -53,8 +53,8 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
53
53
  /**
54
54
  * A unit can be constructed in the following ways:
55
55
  *
56
- * const a = new Unit(value, name)
57
- * const b = new Unit(null, name)
56
+ * const a = new Unit(value, valuelessUnit)
57
+ * const b = new Unit(null, valuelessUnit)
58
58
  * const c = Unit.parse(str)
59
59
  *
60
60
  * Example usage:
@@ -67,10 +67,10 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
67
67
  * @class Unit
68
68
  * @constructor Unit
69
69
  * @param {number | BigNumber | Fraction | Complex | boolean} [value] A value like 5.2
70
- * @param {string} [name] A unit name like "cm" or "inch", or a derived unit of the form: "u1[^ex1] [u2[^ex2] ...] [/ u3[^ex3] [u4[^ex4]]]", such as "kg m^2/s^2", where each unit appearing after the forward slash is taken to be in the denominator. "kg m^2 s^-2" is a synonym and is also acceptable. Any of the units can include a prefix.
70
+ * @param {string | Unit} valuelessUnit A unit without value. Can have prefix, like "cm"
71
71
  */
72
72
 
73
- function Unit(value, name) {
73
+ function Unit(value, valuelessUnit) {
74
74
  if (!(this instanceof Unit)) {
75
75
  throw new Error('Constructor must be called with the new operator');
76
76
  }
@@ -79,42 +79,46 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
79
79
  throw new TypeError('First parameter in Unit constructor must be number, BigNumber, Fraction, Complex, or undefined');
80
80
  }
81
81
 
82
- if (name !== undefined && (typeof name !== 'string' || name === '')) {
83
- throw new TypeError('Second parameter in Unit constructor must be a string');
84
- }
85
-
86
- if (name !== undefined) {
87
- var u = Unit.parse(name);
88
- this.units = u.units;
89
- this.dimensions = u.dimensions;
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
- }];
97
- this.dimensions = [];
98
-
99
- for (var i = 0; i < BASE_DIMENSIONS.length; i++) {
100
- this.dimensions[i] = 0;
101
- }
102
- }
103
-
104
- this.value = value !== undefined && value !== null ? this._normalize(value) : null;
105
82
  this.fixPrefix = false; // if true, function format will not search for the
106
83
  // best prefix but leave it as initially provided.
107
84
  // fixPrefix is set true by the method Unit.to
108
85
  // The justification behind this is that if the constructor is explicitly called,
109
- // the caller wishes the units to be returned exactly as he supplied.
86
+ // the caller wishes the units to be returned exactly as supplied.
110
87
 
111
88
  this.skipAutomaticSimplification = true;
89
+
90
+ if (valuelessUnit === undefined) {
91
+ this.units = [];
92
+ this.dimensions = BASE_DIMENSIONS.map(function (x) {
93
+ return 0;
94
+ });
95
+ } else if (typeof valuelessUnit === 'string') {
96
+ var u = Unit.parse(valuelessUnit);
97
+ this.units = u.units;
98
+ this.dimensions = u.dimensions;
99
+ } else if ((0, _is.isUnit)(valuelessUnit) && valuelessUnit.value === null) {
100
+ // clone from valuelessUnit
101
+ this.fixPrefix = valuelessUnit.fixPrefix;
102
+ this.skipAutomaticSimplification = valuelessUnit.skipAutomaticSimplification;
103
+ this.dimensions = valuelessUnit.dimensions.slice(0);
104
+ this.units = valuelessUnit.units.map(function (u) {
105
+ return (0, _extends2["default"])({}, u);
106
+ });
107
+ } else {
108
+ throw new TypeError('Second parameter in Unit constructor must be a string or valueless Unit');
109
+ }
110
+
111
+ this.value = this._normalize(value);
112
112
  }
113
113
  /**
114
114
  * Attach type information
115
115
  */
116
116
 
117
117
 
118
+ Object.defineProperty(Unit, 'name', {
119
+ value: 'Unit'
120
+ });
121
+ Unit.prototype.constructor = Unit;
118
122
  Unit.prototype.type = 'Unit';
119
123
  Unit.prototype.isUnit = true; // private variables and functions for the Unit parser
120
124
 
@@ -477,6 +481,17 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
477
481
 
478
482
  return unit;
479
483
  };
484
+ /**
485
+ * Return the type of the value of this unit
486
+ *
487
+ * @memberof Unit
488
+ * @ return {string} type of the value of the unit
489
+ */
490
+
491
+
492
+ Unit.prototype.valueType = function () {
493
+ return (0, _is.typeOf)(this.value);
494
+ };
480
495
  /**
481
496
  * Return whether the unit is derived (such as m/s, or cm^2, but not N)
482
497
  * @memberof Unit
@@ -666,15 +681,16 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
666
681
  return this.equalBase(other) && equal(this.value, other.value);
667
682
  };
668
683
  /**
669
- * Multiply this unit with another one
684
+ * Multiply this unit with another one or with a scalar
670
685
  * @memberof Unit
671
686
  * @param {Unit} other
672
687
  * @return {Unit} product of this unit and the other unit
673
688
  */
674
689
 
675
690
 
676
- Unit.prototype.multiply = function (other) {
691
+ Unit.prototype.multiply = function (_other) {
677
692
  var res = this.clone();
693
+ var other = (0, _is.isUnit)(_other) ? _other : new Unit(_other);
678
694
 
679
695
  for (var i = 0; i < BASE_DIMENSIONS.length; i++) {
680
696
  // Dimensions arrays may be of different lengths. Default to 0.
@@ -698,19 +714,35 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
698
714
  res.value = null;
699
715
  }
700
716
 
701
- res.skipAutomaticSimplification = false;
717
+ if ((0, _is.isUnit)(_other)) {
718
+ res.skipAutomaticSimplification = false;
719
+ }
720
+
702
721
  return getNumericIfUnitless(res);
703
722
  };
723
+ /**
724
+ * Divide a number by this unit
725
+ *
726
+ * @memberof Unit
727
+ * @param {numeric} numerator
728
+ * @param {unit} result of dividing numerator by this unit
729
+ */
730
+
731
+
732
+ Unit.prototype.divideInto = function (numerator) {
733
+ return new Unit(numerator).divide(this);
734
+ };
704
735
  /**
705
736
  * Divide this unit by another one
706
737
  * @memberof Unit
707
- * @param {Unit} other
738
+ * @param {Unit | numeric} other
708
739
  * @return {Unit} result of dividing this unit by the other unit
709
740
  */
710
741
 
711
742
 
712
- Unit.prototype.divide = function (other) {
743
+ Unit.prototype.divide = function (_other) {
713
744
  var res = this.clone();
745
+ var other = (0, _is.isUnit)(_other) ? _other : new Unit(_other);
714
746
 
715
747
  for (var i = 0; i < BASE_DIMENSIONS.length; i++) {
716
748
  // Dimensions arrays may be of different lengths. Default to 0.
@@ -736,7 +768,10 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
736
768
  res.value = null;
737
769
  }
738
770
 
739
- res.skipAutomaticSimplification = false;
771
+ if ((0, _is.isUnit)(_other)) {
772
+ res.skipAutomaticSimplification = false;
773
+ }
774
+
740
775
  return getNumericIfUnitless(res);
741
776
  };
742
777
  /**
@@ -805,7 +840,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
805
840
  // To give the correct, but unexpected, results for units with an offset.
806
841
  // For example, abs(-283.15 degC) = -263.15 degC !!!
807
842
  // 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
843
+ var convert = ret._numberConverter(); // convert to Fraction or BigNumber if needed
809
844
 
810
845
 
811
846
  var unitValue = convert(ret.units[0].unit.value);
@@ -1939,9 +1974,9 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
1939
1974
  }
1940
1975
  }
1941
1976
  };
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);
1977
+ PREFIXES.SHORTLONG = (0, _extends2["default"])({}, PREFIXES.SHORT, PREFIXES.LONG);
1978
+ PREFIXES.BINARY_SHORT = (0, _extends2["default"])({}, PREFIXES.BINARY_SHORT_SI, PREFIXES.BINARY_SHORT_IEC);
1979
+ PREFIXES.BINARY_LONG = (0, _extends2["default"])({}, PREFIXES.BINARY_LONG_SI, PREFIXES.BINARY_LONG_IEC);
1945
1980
  /* Internally, each unit is represented by a value and a dimension array. The elements of the dimensions array have the following meaning:
1946
1981
  * Index Dimension
1947
1982
  * ----- ---------
@@ -2125,7 +2160,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
2125
2160
  value: 1,
2126
2161
  offset: 0
2127
2162
  },
2128
- in: {
2163
+ "in": {
2129
2164
  name: 'in',
2130
2165
  base: BASE_UNITS.LENGTH,
2131
2166
  prefixes: PREFIXES.NONE,
@@ -3389,7 +3424,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3389
3424
  electronvolts: 'electronvolt',
3390
3425
  moles: 'mole',
3391
3426
  bit: 'bits',
3392
- byte: 'bytes'
3427
+ "byte": 'bytes'
3393
3428
  };
3394
3429
  /**
3395
3430
  * Calculate the values for the angle units.
@@ -3647,6 +3682,23 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3647
3682
  return x;
3648
3683
  }
3649
3684
  };
3685
+ /**
3686
+ * Retrieve the right converter function corresponding with this unit's
3687
+ * value
3688
+ *
3689
+ * @memberof Unit
3690
+ * @return {Function}
3691
+ */
3692
+
3693
+ Unit.prototype._numberConverter = function () {
3694
+ var convert = Unit.typeConverters[this.valueType()];
3695
+
3696
+ if (convert) {
3697
+ return convert;
3698
+ }
3699
+
3700
+ throw new TypeError('Unsupported Unit value type "' + this.valueType() + '"');
3701
+ };
3650
3702
  /**
3651
3703
  * Retrieve the right convertor function corresponding with the type
3652
3704
  * of provided exampleValue.
@@ -3656,6 +3708,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3656
3708
  * @return {Function}
3657
3709
  */
3658
3710
 
3711
+
3659
3712
  Unit._getNumberConverter = function (type) {
3660
3713
  if (!Unit.typeConverters[type]) {
3661
3714
  throw new TypeError('Unsupported type "' + type + '"');
@@ -3733,7 +3786,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3733
3786
 
3734
3787
 
3735
3788
  Unit.createUnit = function (obj, options) {
3736
- if ((0, _typeof2.default)(obj) !== 'object') {
3789
+ if ((0, _typeof2["default"])(obj) !== 'object') {
3737
3790
  throw new TypeError("createUnit expects first parameter to be of type 'Object'");
3738
3791
  } // Remove all units and aliases we are overriding
3739
3792
 
@@ -3823,7 +3876,7 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3823
3876
  if (obj !== '') {
3824
3877
  definition = obj;
3825
3878
  }
3826
- } else if ((0, _typeof2.default)(obj) === 'object') {
3879
+ } else if ((0, _typeof2["default"])(obj) === 'object') {
3827
3880
  definition = obj.definition;
3828
3881
  prefixes = obj.prefixes;
3829
3882
  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']
@@ -24,10 +24,13 @@ var createUnitFunction = /* #__PURE__ */(0, _factory.factory)(name, dependencies
24
24
  * Syntax:
25
25
  *
26
26
  * math.unit(unit : string)
27
- * math.unit(value : number, unit : string)
27
+ * math.unit(value : number, valuelessUnit : Unit)
28
+ * math.unit(value : number, valuelessUnit : string)
28
29
  *
29
30
  * Examples:
30
31
  *
32
+ * const kph = math.unit('km/h') // returns Unit km/h (valueless)
33
+ * const v = math.unit(25, kph) // returns Unit 25 km/h
31
34
  * const a = math.unit(5, 'cm') // returns Unit 50 mm
32
35
  * const b = math.unit('23 kg') // returns Unit 23 kg
33
36
  * a.to('m') // returns Unit 0.05 m
@@ -52,12 +55,18 @@ var createUnitFunction = /* #__PURE__ */(0, _factory.factory)(name, dependencies
52
55
  allowNoUnits: true
53
56
  }); // a unit with value, like '5cm'
54
57
  },
55
- 'number | BigNumber | Fraction | Complex, string': function numberBigNumberFractionComplexString(value, unit) {
58
+ 'number | BigNumber | Fraction | Complex, string | Unit': function numberBigNumberFractionComplexStringUnit(value, unit) {
56
59
  return new Unit(value, unit);
57
60
  },
58
- 'Array | Matrix': function ArrayMatrix(x) {
59
- return (0, _collection.deepMap)(x, this);
60
- }
61
+ 'number | BigNumber | Fraction': function numberBigNumberFraction(value) {
62
+ // dimensionless
63
+ return new Unit(value);
64
+ },
65
+ 'Array | Matrix': typed.referToSelf(function (self) {
66
+ return function (x) {
67
+ return (0, _collection.deepMap)(x, self);
68
+ };
69
+ })
61
70
  });
62
71
  });
63
72
  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
  }
@@ -73,8 +73,8 @@ var latexSymbols = {
73
73
  Omega: '\\Omega',
74
74
  omega: '\\omega',
75
75
  // logic
76
- true: '\\mathrm{True}',
77
- false: '\\mathrm{False}',
76
+ "true": '\\mathrm{True}',
77
+ "false": '\\mathrm{False}',
78
78
  // other
79
79
  i: 'i',
80
80
  // TODO use \i ??
@@ -481,7 +481,7 @@ var latexUnits = {
481
481
  };
482
482
 
483
483
  function escapeLatex(string) {
484
- return (0, _escapeLatex.default)(string, {
484
+ return (0, _escapeLatex["default"])(string, {
485
485
  preserveFormatting: true
486
486
  });
487
487
  } // @param {string} name
@@ -59,7 +59,7 @@ function lruQueue(limit) {
59
59
 
60
60
  return undefined;
61
61
  },
62
- delete: del,
62
+ "delete": del,
63
63
  clear: function clear() {
64
64
  size = index = 0;
65
65
  base = 1;
@@ -20,7 +20,7 @@ var _customs = require("./customs.js");
20
20
 
21
21
  var _is = require("./is.js");
22
22
 
23
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
23
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
24
24
 
25
25
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
26
26
 
@@ -36,11 +36,11 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
36
36
  */
37
37
  var ObjectWrappingMap = /*#__PURE__*/function () {
38
38
  function ObjectWrappingMap(object) {
39
- (0, _classCallCheck2.default)(this, ObjectWrappingMap);
39
+ (0, _classCallCheck2["default"])(this, ObjectWrappingMap);
40
40
  this.wrappedObject = object;
41
41
  }
42
42
 
43
- (0, _createClass2.default)(ObjectWrappingMap, [{
43
+ (0, _createClass2["default"])(ObjectWrappingMap, [{
44
44
  key: "keys",
45
45
  value: function keys() {
46
46
  return Object.keys(this.wrappedObject);
@@ -38,7 +38,7 @@ var _is = require("./is.js");
38
38
  * @return {*} clone
39
39
  */
40
40
  function clone(x) {
41
- var type = (0, _typeof2.default)(x); // immutable primitive types
41
+ var type = (0, _typeof2["default"])(x); // immutable primitive types
42
42
 
43
43
  if (type === 'number' || type === 'string' || type === 'boolean' || x === null || x === undefined) {
44
44
  return x;
@@ -213,7 +213,7 @@ function _deepFlatten(nestedObject, flattenedObject) {
213
213
  if (hasOwnProperty(nestedObject, prop)) {
214
214
  var value = nestedObject[prop];
215
215
 
216
- if ((0, _typeof2.default)(value) === 'object' && value !== null) {
216
+ if ((0, _typeof2["default"])(value) === 'object' && value !== null) {
217
217
  _deepFlatten(value, flattenedObject);
218
218
  } else {
219
219
  flattenedObject[prop] = value;