mathjs 10.6.2 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/HISTORY.md +74 -1
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +2 -41
  4. package/lib/browser/math.js.LICENSE.txt +43 -0
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +6 -5
  7. package/lib/cjs/core/function/import.js +4 -14
  8. package/lib/cjs/core/function/typed.js +54 -12
  9. package/lib/cjs/defaultInstance.js +3 -3
  10. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  11. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  12. package/lib/cjs/entry/configReadonly.js +1 -1
  13. package/lib/cjs/entry/dependenciesAny/dependenciesChainClass.generated.js +3 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesKldivergence.generated.js +3 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +3 -0
  17. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +3 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +56 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +6 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesSqrtm.generated.js +3 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesStd.generated.js +3 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesStdTransform.generated.js +3 -0
  23. package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesChainClass.generated.js +3 -0
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  26. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +3 -0
  27. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +3 -0
  28. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +50 -0
  29. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +6 -0
  30. package/lib/cjs/entry/dependenciesNumber/dependenciesStd.generated.js +3 -0
  31. package/lib/cjs/entry/dependenciesNumber/dependenciesStdTransform.generated.js +3 -0
  32. package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
  33. package/lib/cjs/entry/impureFunctionsAny.generated.js +87 -61
  34. package/lib/cjs/entry/impureFunctionsNumber.generated.js +93 -69
  35. package/lib/cjs/entry/pureFunctionsAny.generated.js +50 -45
  36. package/lib/cjs/entry/pureFunctionsNumber.generated.js +22 -19
  37. package/lib/cjs/expression/Parser.js +1 -1
  38. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
  39. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
  40. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  41. package/lib/cjs/expression/node/AccessorNode.js +216 -173
  42. package/lib/cjs/expression/node/ArrayNode.js +206 -160
  43. package/lib/cjs/expression/node/AssignmentNode.js +321 -270
  44. package/lib/cjs/expression/node/BlockNode.js +223 -172
  45. package/lib/cjs/expression/node/ConditionalNode.js +253 -193
  46. package/lib/cjs/expression/node/ConstantNode.js +216 -171
  47. package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
  48. package/lib/cjs/expression/node/FunctionNode.js +456 -416
  49. package/lib/cjs/expression/node/IndexNode.js +256 -210
  50. package/lib/cjs/expression/node/Node.js +411 -378
  51. package/lib/cjs/expression/node/ObjectNode.js +223 -178
  52. package/lib/cjs/expression/node/OperatorNode.js +474 -397
  53. package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
  54. package/lib/cjs/expression/node/RangeNode.js +272 -224
  55. package/lib/cjs/expression/node/RelationalNode.js +246 -195
  56. package/lib/cjs/expression/node/SymbolNode.js +219 -172
  57. package/lib/cjs/expression/node/utils/access.js +1 -1
  58. package/lib/cjs/expression/node/utils/assign.js +1 -1
  59. package/lib/cjs/expression/operators.js +117 -23
  60. package/lib/cjs/expression/parse.js +37 -19
  61. package/lib/cjs/expression/transform/std.transform.js +3 -1
  62. package/lib/cjs/factoriesAny.js +8 -0
  63. package/lib/cjs/factoriesNumber.js +10 -1
  64. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  65. package/lib/cjs/function/algebra/derivative.js +22 -30
  66. package/lib/cjs/function/algebra/leafCount.js +0 -3
  67. package/lib/cjs/function/algebra/rationalize.js +78 -108
  68. package/lib/cjs/function/algebra/resolve.js +53 -16
  69. package/lib/cjs/function/algebra/simplify/util.js +1 -1
  70. package/lib/cjs/function/algebra/simplify.js +87 -114
  71. package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
  72. package/lib/cjs/function/algebra/simplifyCore.js +196 -93
  73. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  74. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  75. package/lib/cjs/function/algebra/symbolicEqual.js +9 -26
  76. package/lib/cjs/function/arithmetic/abs.js +7 -14
  77. package/lib/cjs/function/arithmetic/add.js +26 -70
  78. package/lib/cjs/function/arithmetic/addScalar.js +17 -9
  79. package/lib/cjs/function/arithmetic/cbrt.js +7 -11
  80. package/lib/cjs/function/arithmetic/ceil.js +56 -46
  81. package/lib/cjs/function/arithmetic/cube.js +5 -10
  82. package/lib/cjs/function/arithmetic/divide.js +7 -7
  83. package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
  84. package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
  85. package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
  86. package/lib/cjs/function/arithmetic/dotPow.js +30 -63
  87. package/lib/cjs/function/arithmetic/exp.js +8 -12
  88. package/lib/cjs/function/arithmetic/expm1.js +10 -10
  89. package/lib/cjs/function/arithmetic/fix.js +33 -27
  90. package/lib/cjs/function/arithmetic/floor.js +56 -46
  91. package/lib/cjs/function/arithmetic/gcd.js +27 -68
  92. package/lib/cjs/function/arithmetic/hypot.js +9 -5
  93. package/lib/cjs/function/arithmetic/invmod.js +1 -1
  94. package/lib/cjs/function/arithmetic/lcm.js +27 -68
  95. package/lib/cjs/function/arithmetic/log.js +10 -12
  96. package/lib/cjs/function/arithmetic/log10.js +5 -3
  97. package/lib/cjs/function/arithmetic/log1p.js +11 -7
  98. package/lib/cjs/function/arithmetic/log2.js +5 -3
  99. package/lib/cjs/function/arithmetic/mod.js +22 -64
  100. package/lib/cjs/function/arithmetic/multiply.js +40 -35
  101. package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
  102. package/lib/cjs/function/arithmetic/norm.js +1 -5
  103. package/lib/cjs/function/arithmetic/nthRoot.js +80 -92
  104. package/lib/cjs/function/arithmetic/round.js +56 -42
  105. package/lib/cjs/function/arithmetic/sign.js +14 -10
  106. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  107. package/lib/cjs/function/arithmetic/square.js +6 -10
  108. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  109. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  110. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  111. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  112. package/lib/cjs/function/bitwise/bitNot.js +5 -3
  113. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  114. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  115. package/lib/cjs/function/bitwise/leftShift.js +68 -81
  116. package/lib/cjs/function/bitwise/rightArithShift.js +68 -81
  117. package/lib/cjs/function/bitwise/rightLogShift.js +68 -81
  118. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  119. package/lib/cjs/function/complex/arg.js +5 -3
  120. package/lib/cjs/function/complex/conj.js +6 -7
  121. package/lib/cjs/function/complex/im.js +7 -8
  122. package/lib/cjs/function/complex/re.js +6 -10
  123. package/lib/cjs/function/logical/and.js +74 -80
  124. package/lib/cjs/function/logical/not.js +13 -6
  125. package/lib/cjs/function/logical/or.js +21 -63
  126. package/lib/cjs/function/logical/xor.js +21 -63
  127. package/lib/cjs/function/matrix/diff.js +10 -7
  128. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  129. package/lib/cjs/function/matrix/fft.js +2 -2
  130. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  131. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  132. package/lib/cjs/function/matrix/ones.js +2 -1
  133. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  134. package/lib/cjs/function/matrix/transpose.js +47 -48
  135. package/lib/cjs/function/matrix/zeros.js +2 -1
  136. package/lib/cjs/function/probability/factorial.js +5 -3
  137. package/lib/cjs/function/probability/gamma.js +38 -40
  138. package/lib/cjs/function/probability/kldivergence.js +5 -2
  139. package/lib/cjs/function/probability/lgamma.js +30 -30
  140. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  141. package/lib/cjs/function/relational/compare.js +21 -67
  142. package/lib/cjs/function/relational/compareNatural.js +59 -54
  143. package/lib/cjs/function/relational/compareText.js +10 -43
  144. package/lib/cjs/function/relational/compareUnits.js +24 -0
  145. package/lib/cjs/function/relational/equal.js +19 -80
  146. package/lib/cjs/function/relational/equalScalar.js +7 -9
  147. package/lib/cjs/function/relational/larger.js +21 -67
  148. package/lib/cjs/function/relational/largerEq.js +21 -67
  149. package/lib/cjs/function/relational/smaller.js +21 -67
  150. package/lib/cjs/function/relational/smallerEq.js +21 -67
  151. package/lib/cjs/function/relational/unequal.js +19 -80
  152. package/lib/cjs/function/special/erf.js +5 -3
  153. package/lib/cjs/function/statistics/std.js +11 -2
  154. package/lib/cjs/function/trigonometry/acos.js +4 -8
  155. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  156. package/lib/cjs/function/trigonometry/acot.js +4 -8
  157. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  158. package/lib/cjs/function/trigonometry/acsc.js +4 -8
  159. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  160. package/lib/cjs/function/trigonometry/asec.js +4 -8
  161. package/lib/cjs/function/trigonometry/asech.js +4 -8
  162. package/lib/cjs/function/trigonometry/asin.js +4 -9
  163. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  164. package/lib/cjs/function/trigonometry/atan.js +4 -9
  165. package/lib/cjs/function/trigonometry/atan2.js +24 -62
  166. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  167. package/lib/cjs/function/trigonometry/cos.js +11 -20
  168. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  169. package/lib/cjs/function/trigonometry/cot.js +9 -15
  170. package/lib/cjs/function/trigonometry/coth.js +4 -15
  171. package/lib/cjs/function/trigonometry/csc.js +11 -17
  172. package/lib/cjs/function/trigonometry/csch.js +4 -15
  173. package/lib/cjs/function/trigonometry/sec.js +11 -17
  174. package/lib/cjs/function/trigonometry/sech.js +4 -15
  175. package/lib/cjs/function/trigonometry/sin.js +11 -21
  176. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  177. package/lib/cjs/function/trigonometry/tan.js +11 -21
  178. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  179. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  180. package/lib/cjs/function/unit/to.js +7 -41
  181. package/lib/cjs/function/utils/hasNumericValue.js +4 -0
  182. package/lib/cjs/function/utils/isInteger.js +5 -3
  183. package/lib/cjs/function/utils/isNegative.js +10 -6
  184. package/lib/cjs/function/utils/isNumeric.js +5 -3
  185. package/lib/cjs/function/utils/isPositive.js +10 -6
  186. package/lib/cjs/function/utils/isPrime.js +5 -3
  187. package/lib/cjs/function/utils/isZero.js +10 -6
  188. package/lib/cjs/function/utils/numeric.js +11 -4
  189. package/lib/cjs/function/utils/typeOf.js +38 -44
  190. package/lib/cjs/header.js +2 -2
  191. package/lib/cjs/plain/bignumber/index.js +1 -1
  192. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  193. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  194. package/lib/cjs/type/boolean.js +7 -5
  195. package/lib/cjs/type/chain/Chain.js +23 -3
  196. package/lib/cjs/type/complex/Complex.js +18 -14
  197. package/lib/cjs/type/complex/function/complex.js +6 -4
  198. package/lib/cjs/type/fraction/Fraction.js +10 -6
  199. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  200. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  201. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  202. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  203. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  204. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  205. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  206. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  207. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  208. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  209. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  210. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  211. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  213. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  214. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  217. package/lib/cjs/type/number.js +6 -4
  218. package/lib/cjs/type/string.js +7 -5
  219. package/lib/cjs/type/unit/Unit.js +69 -21
  220. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  221. package/lib/cjs/type/unit/function/unit.js +9 -3
  222. package/lib/cjs/utils/customs.js +2 -2
  223. package/lib/cjs/utils/emitter.js +1 -1
  224. package/lib/cjs/utils/function.js +2 -2
  225. package/lib/cjs/utils/is.js +27 -25
  226. package/lib/cjs/utils/latex.js +3 -3
  227. package/lib/cjs/utils/lruQueue.js +1 -1
  228. package/lib/cjs/utils/map.js +3 -3
  229. package/lib/cjs/utils/object.js +2 -2
  230. package/lib/cjs/utils/snapshot.js +30 -57
  231. package/lib/cjs/utils/string.js +3 -3
  232. package/lib/cjs/version.js +1 -1
  233. package/lib/esm/core/create.js +2 -1
  234. package/lib/esm/core/function/import.js +2 -12
  235. package/lib/esm/core/function/typed.js +47 -11
  236. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  237. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  238. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  239. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  240. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  241. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  242. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  243. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  244. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  247. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  249. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  250. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  251. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  252. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  253. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  254. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  255. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  256. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  257. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  258. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  259. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  260. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  261. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  262. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  263. package/lib/esm/expression/node/AccessorNode.js +158 -153
  264. package/lib/esm/expression/node/ArrayNode.js +162 -154
  265. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  266. package/lib/esm/expression/node/BlockNode.js +177 -163
  267. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  268. package/lib/esm/expression/node/ConstantNode.js +171 -163
  269. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  270. package/lib/esm/expression/node/FunctionNode.js +407 -407
  271. package/lib/esm/expression/node/IndexNode.js +206 -198
  272. package/lib/esm/expression/node/Node.js +325 -325
  273. package/lib/esm/expression/node/ObjectNode.js +166 -157
  274. package/lib/esm/expression/node/OperatorNode.js +414 -377
  275. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  276. package/lib/esm/expression/node/RangeNode.js +221 -212
  277. package/lib/esm/expression/node/RelationalNode.js +190 -176
  278. package/lib/esm/expression/node/SymbolNode.js +161 -152
  279. package/lib/esm/expression/operators.js +96 -4
  280. package/lib/esm/expression/parse.js +25 -7
  281. package/lib/esm/expression/transform/std.transform.js +3 -1
  282. package/lib/esm/factoriesAny.js +1 -0
  283. package/lib/esm/factoriesNumber.js +1 -0
  284. package/lib/esm/function/algebra/derivative.js +22 -30
  285. package/lib/esm/function/algebra/leafCount.js +0 -3
  286. package/lib/esm/function/algebra/rationalize.js +83 -114
  287. package/lib/esm/function/algebra/resolve.js +25 -16
  288. package/lib/esm/function/algebra/simplify.js +82 -112
  289. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  290. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  291. package/lib/esm/function/algebra/symbolicEqual.js +9 -26
  292. package/lib/esm/function/arithmetic/abs.js +3 -16
  293. package/lib/esm/function/arithmetic/add.js +21 -65
  294. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  295. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  296. package/lib/esm/function/arithmetic/ceil.js +25 -25
  297. package/lib/esm/function/arithmetic/cube.js +5 -9
  298. package/lib/esm/function/arithmetic/divide.js +7 -7
  299. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  300. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  301. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  302. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  303. package/lib/esm/function/arithmetic/exp.js +8 -11
  304. package/lib/esm/function/arithmetic/expm1.js +10 -9
  305. package/lib/esm/function/arithmetic/fix.js +17 -17
  306. package/lib/esm/function/arithmetic/floor.js +25 -25
  307. package/lib/esm/function/arithmetic/gcd.js +26 -70
  308. package/lib/esm/function/arithmetic/hypot.js +7 -6
  309. package/lib/esm/function/arithmetic/lcm.js +26 -70
  310. package/lib/esm/function/arithmetic/log.js +7 -10
  311. package/lib/esm/function/arithmetic/log10.js +1 -3
  312. package/lib/esm/function/arithmetic/log1p.js +4 -6
  313. package/lib/esm/function/arithmetic/log2.js +1 -3
  314. package/lib/esm/function/arithmetic/mod.js +21 -62
  315. package/lib/esm/function/arithmetic/multiply.js +23 -27
  316. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  317. package/lib/esm/function/arithmetic/norm.js +0 -4
  318. package/lib/esm/function/arithmetic/nthRoot.js +38 -73
  319. package/lib/esm/function/arithmetic/round.js +26 -28
  320. package/lib/esm/function/arithmetic/sign.js +5 -7
  321. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  322. package/lib/esm/function/arithmetic/square.js +6 -9
  323. package/lib/esm/function/arithmetic/subtract.js +31 -95
  324. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  325. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  326. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  327. package/lib/esm/function/bitwise/bitNot.js +1 -3
  328. package/lib/esm/function/bitwise/bitOr.js +16 -59
  329. package/lib/esm/function/bitwise/bitXor.js +16 -59
  330. package/lib/esm/function/bitwise/leftShift.js +38 -60
  331. package/lib/esm/function/bitwise/rightArithShift.js +38 -60
  332. package/lib/esm/function/bitwise/rightLogShift.js +38 -60
  333. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  334. package/lib/esm/function/complex/arg.js +1 -3
  335. package/lib/esm/function/complex/conj.js +3 -12
  336. package/lib/esm/function/complex/im.js +4 -15
  337. package/lib/esm/function/complex/re.js +3 -15
  338. package/lib/esm/function/logical/and.js +35 -57
  339. package/lib/esm/function/logical/not.js +3 -6
  340. package/lib/esm/function/logical/or.js +16 -61
  341. package/lib/esm/function/logical/xor.js +16 -61
  342. package/lib/esm/function/matrix/diff.js +2 -7
  343. package/lib/esm/function/matrix/ones.js +2 -1
  344. package/lib/esm/function/matrix/sqrtm.js +3 -2
  345. package/lib/esm/function/matrix/transpose.js +47 -50
  346. package/lib/esm/function/matrix/zeros.js +2 -1
  347. package/lib/esm/function/probability/factorial.js +1 -3
  348. package/lib/esm/function/probability/gamma.js +38 -39
  349. package/lib/esm/function/probability/kldivergence.js +3 -2
  350. package/lib/esm/function/probability/lgamma.js +29 -29
  351. package/lib/esm/function/relational/compare.js +21 -67
  352. package/lib/esm/function/relational/compareNatural.js +54 -49
  353. package/lib/esm/function/relational/compareText.js +10 -42
  354. package/lib/esm/function/relational/compareUnits.js +15 -0
  355. package/lib/esm/function/relational/equal.js +19 -79
  356. package/lib/esm/function/relational/equalScalar.js +6 -9
  357. package/lib/esm/function/relational/larger.js +23 -73
  358. package/lib/esm/function/relational/largerEq.js +23 -73
  359. package/lib/esm/function/relational/smaller.js +23 -73
  360. package/lib/esm/function/relational/smallerEq.js +23 -73
  361. package/lib/esm/function/relational/unequal.js +19 -79
  362. package/lib/esm/function/special/erf.js +1 -3
  363. package/lib/esm/function/statistics/std.js +10 -2
  364. package/lib/esm/function/trigonometry/acos.js +4 -7
  365. package/lib/esm/function/trigonometry/acosh.js +2 -6
  366. package/lib/esm/function/trigonometry/acot.js +4 -7
  367. package/lib/esm/function/trigonometry/acoth.js +4 -7
  368. package/lib/esm/function/trigonometry/acsc.js +4 -7
  369. package/lib/esm/function/trigonometry/acsch.js +4 -7
  370. package/lib/esm/function/trigonometry/asec.js +4 -7
  371. package/lib/esm/function/trigonometry/asech.js +4 -7
  372. package/lib/esm/function/trigonometry/asin.js +4 -8
  373. package/lib/esm/function/trigonometry/asinh.js +4 -8
  374. package/lib/esm/function/trigonometry/atan.js +4 -8
  375. package/lib/esm/function/trigonometry/atan2.js +25 -64
  376. package/lib/esm/function/trigonometry/atanh.js +4 -8
  377. package/lib/esm/function/trigonometry/cos.js +11 -22
  378. package/lib/esm/function/trigonometry/cosh.js +5 -20
  379. package/lib/esm/function/trigonometry/cot.js +10 -20
  380. package/lib/esm/function/trigonometry/coth.js +6 -20
  381. package/lib/esm/function/trigonometry/csc.js +12 -22
  382. package/lib/esm/function/trigonometry/csch.js +6 -20
  383. package/lib/esm/function/trigonometry/sec.js +12 -22
  384. package/lib/esm/function/trigonometry/sech.js +6 -20
  385. package/lib/esm/function/trigonometry/sin.js +11 -23
  386. package/lib/esm/function/trigonometry/sinh.js +5 -21
  387. package/lib/esm/function/trigonometry/tan.js +11 -23
  388. package/lib/esm/function/trigonometry/tanh.js +5 -21
  389. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  390. package/lib/esm/function/unit/to.js +8 -43
  391. package/lib/esm/function/utils/hasNumericValue.js +2 -0
  392. package/lib/esm/function/utils/isInteger.js +1 -3
  393. package/lib/esm/function/utils/isNegative.js +2 -6
  394. package/lib/esm/function/utils/isNumeric.js +3 -9
  395. package/lib/esm/function/utils/isPositive.js +2 -6
  396. package/lib/esm/function/utils/isPrime.js +1 -3
  397. package/lib/esm/function/utils/isZero.js +2 -6
  398. package/lib/esm/function/utils/numeric.js +11 -4
  399. package/lib/esm/function/utils/typeOf.js +38 -44
  400. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  401. package/lib/esm/type/boolean.js +1 -3
  402. package/lib/esm/type/chain/Chain.js +23 -3
  403. package/lib/esm/type/complex/Complex.js +4 -0
  404. package/lib/esm/type/complex/function/complex.js +1 -3
  405. package/lib/esm/type/fraction/Fraction.js +4 -0
  406. package/lib/esm/type/fraction/function/fraction.js +1 -3
  407. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  408. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  409. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  410. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  411. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  412. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  413. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  414. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  415. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  416. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  417. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  418. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  419. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  420. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  421. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  422. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  423. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  424. package/lib/esm/type/number.js +1 -3
  425. package/lib/esm/type/string.js +1 -3
  426. package/lib/esm/type/unit/Unit.js +61 -13
  427. package/lib/esm/type/unit/function/createUnit.js +2 -1
  428. package/lib/esm/type/unit/function/unit.js +5 -3
  429. package/lib/esm/utils/is.js +18 -18
  430. package/lib/esm/utils/snapshot.js +22 -48
  431. package/lib/esm/version.js +1 -1
  432. package/package.json +21 -24
  433. package/types/index.d.ts +202 -181
  434. package/types/index.ts +264 -57
  435. package/lib/cjs/utils/polyfills.js +0 -14
  436. package/lib/esm/utils/polyfills.js +0 -12
@@ -1,4 +1,3 @@
1
- import { deepMap } from '../../utils/collection.js';
2
1
  import { factory } from '../../utils/factory.js';
3
2
  import { gammaG, gammaNumber, gammaP } from '../../plain/number/index.js';
4
3
  var name = 'gamma';
@@ -10,14 +9,15 @@ export var createGamma = /* #__PURE__ */factory(name, dependencies, _ref => {
10
9
  multiplyScalar,
11
10
  pow,
12
11
  BigNumber: _BigNumber,
13
- Complex: _Complex
12
+ Complex
14
13
  } = _ref;
15
14
 
16
15
  /**
17
16
  * Compute the gamma function of a value using Lanczos approximation for
18
17
  * small values, and an extended Stirling approximation for large values.
19
18
  *
20
- * For matrices, the function is evaluated element wise.
19
+ * To avoid confusion with the matrix Gamma function, this function does
20
+ * not apply to matrices.
21
21
  *
22
22
  * Syntax:
23
23
  *
@@ -33,51 +33,53 @@ export var createGamma = /* #__PURE__ */factory(name, dependencies, _ref => {
33
33
  *
34
34
  * combinations, factorial, permutations
35
35
  *
36
- * @param {number | Array | Matrix} n A real or complex number
37
- * @return {number | Array | Matrix} The gamma of `n`
36
+ * @param {number | BigNumber | Complex} n A real or complex number
37
+ * @return {number | BigNumber | Complex} The gamma of `n`
38
38
  */
39
- return typed(name, {
40
- number: gammaNumber,
41
- Complex: function Complex(n) {
42
- if (n.im === 0) {
43
- return this(n.re);
44
- } // Lanczos approximation doesn't work well with real part lower than 0.5
45
- // So reflection formula is required
39
+ function gammaComplex(n) {
40
+ if (n.im === 0) {
41
+ return gammaNumber(n.re);
42
+ } // Lanczos approximation doesn't work well with real part lower than 0.5
43
+ // So reflection formula is required
44
+
46
45
 
46
+ if (n.re < 0.5) {
47
+ // Euler's reflection formula
48
+ // gamma(1-z) * gamma(z) = PI / sin(PI * z)
49
+ // real part of Z should not be integer [sin(PI) == 0 -> 1/0 - undefined]
50
+ // thanks to imperfect sin implementation sin(PI * n) != 0
51
+ // we can safely use it anyway
52
+ var _t = new Complex(1 - n.re, -n.im);
47
53
 
48
- if (n.re < 0.5) {
49
- // Euler's reflection formula
50
- // gamma(1-z) * gamma(z) = PI / sin(PI * z)
51
- // real part of Z should not be integer [sin(PI) == 0 -> 1/0 - undefined]
52
- // thanks to imperfect sin implementation sin(PI * n) != 0
53
- // we can safely use it anyway
54
- var _t = new _Complex(1 - n.re, -n.im);
54
+ var r = new Complex(Math.PI * n.re, Math.PI * n.im);
55
+ return new Complex(Math.PI).div(r.sin()).div(gammaComplex(_t));
56
+ } // Lanczos approximation
57
+ // z -= 1
55
58
 
56
- var r = new _Complex(Math.PI * n.re, Math.PI * n.im);
57
- return new _Complex(Math.PI).div(r.sin()).div(this(_t));
58
- } // Lanczos approximation
59
- // z -= 1
60
59
 
60
+ n = new Complex(n.re - 1, n.im); // x = gammaPval[0]
61
61
 
62
- n = new _Complex(n.re - 1, n.im); // x = gammaPval[0]
62
+ var x = new Complex(gammaP[0], 0); // for (i, gammaPval) in enumerate(gammaP):
63
63
 
64
- var x = new _Complex(gammaP[0], 0); // for (i, gammaPval) in enumerate(gammaP):
64
+ for (var i = 1; i < gammaP.length; ++i) {
65
+ // x += gammaPval / (z + i)
66
+ var gammaPval = new Complex(gammaP[i], 0);
67
+ x = x.add(gammaPval.div(n.add(i)));
68
+ } // t = z + gammaG + 0.5
65
69
 
66
- for (var i = 1; i < gammaP.length; ++i) {
67
- // x += gammaPval / (z + i)
68
- var gammaPval = new _Complex(gammaP[i], 0);
69
- x = x.add(gammaPval.div(n.add(i)));
70
- } // t = z + gammaG + 0.5
71
70
 
71
+ var t = new Complex(n.re + gammaG + 0.5, n.im); // y = sqrt(2 * pi) * t ** (z + 0.5) * exp(-t) * x
72
72
 
73
- var t = new _Complex(n.re + gammaG + 0.5, n.im); // y = sqrt(2 * pi) * t ** (z + 0.5) * exp(-t) * x
73
+ var twoPiSqrt = Math.sqrt(2 * Math.PI);
74
+ var tpow = t.pow(n.add(0.5));
75
+ var expt = t.neg().exp(); // y = [x] * [sqrt(2 * pi)] * [t ** (z + 0.5)] * [exp(-t)]
74
76
 
75
- var twoPiSqrt = Math.sqrt(2 * Math.PI);
76
- var tpow = t.pow(n.add(0.5));
77
- var expt = t.neg().exp(); // y = [x] * [sqrt(2 * pi)] * [t ** (z + 0.5)] * [exp(-t)]
77
+ return x.mul(twoPiSqrt).mul(tpow).mul(expt);
78
+ }
78
79
 
79
- return x.mul(twoPiSqrt).mul(tpow).mul(expt);
80
- },
80
+ return typed(name, {
81
+ number: gammaNumber,
82
+ Complex: gammaComplex,
81
83
  BigNumber: function BigNumber(n) {
82
84
  if (n.isInteger()) {
83
85
  return n.isNegative() || n.isZero() ? new _BigNumber(Infinity) : bigFactorial(n.minus(1));
@@ -88,9 +90,6 @@ export var createGamma = /* #__PURE__ */factory(name, dependencies, _ref => {
88
90
  }
89
91
 
90
92
  throw new Error('Integer BigNumber expected');
91
- },
92
- 'Array | Matrix': function ArrayMatrix(n) {
93
- return deepMap(n, this);
94
93
  }
95
94
  });
96
95
  /**
@@ -1,6 +1,6 @@
1
1
  import { factory } from '../../utils/factory.js';
2
2
  var name = 'kldivergence';
3
- var dependencies = ['typed', 'matrix', 'divide', 'sum', 'multiply', 'dotDivide', 'log', 'isNumeric'];
3
+ var dependencies = ['typed', 'matrix', 'divide', 'sum', 'multiply', 'map', 'dotDivide', 'log', 'isNumeric'];
4
4
  export var createKldivergence = /* #__PURE__ */factory(name, dependencies, _ref => {
5
5
  var {
6
6
  typed,
@@ -8,6 +8,7 @@ export var createKldivergence = /* #__PURE__ */factory(name, dependencies, _ref
8
8
  divide,
9
9
  sum,
10
10
  multiply,
11
+ map,
11
12
  dotDivide,
12
13
  log,
13
14
  isNumeric
@@ -75,7 +76,7 @@ export var createKldivergence = /* #__PURE__ */factory(name, dependencies, _ref
75
76
 
76
77
  var qnorm = divide(q, sum(q));
77
78
  var pnorm = divide(p, sum(p));
78
- var result = sum(multiply(qnorm, log(dotDivide(qnorm, pnorm))));
79
+ var result = sum(multiply(qnorm, map(dotDivide(qnorm, pnorm), x => log(x))));
79
80
 
80
81
  if (isNumeric(result)) {
81
82
  return result;
@@ -10,7 +10,7 @@ var name = 'lgamma';
10
10
  var dependencies = ['Complex', 'typed'];
11
11
  export var createLgamma = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
- Complex: _Complex,
13
+ Complex,
14
14
  typed
15
15
  } = _ref;
16
16
  // Stirling series is non-convergent, we need to use the recurrence `lgamma(z) = lgamma(z+1) - log z` to get
@@ -57,37 +57,37 @@ export var createLgamma = /* #__PURE__ */factory(name, dependencies, _ref => {
57
57
 
58
58
  return typed(name, {
59
59
  number: lgammaNumber,
60
- Complex: function Complex(n) {
61
- var TWOPI = 6.2831853071795864769252842; // 2*pi
60
+ Complex: lgammaComplex,
61
+ BigNumber: function BigNumber() {
62
+ throw new Error("mathjs doesn't yet provide an implementation of the algorithm lgamma for BigNumber");
63
+ }
64
+ });
62
65
 
63
- var LOGPI = 1.1447298858494001741434262; // log(pi)
66
+ function lgammaComplex(n) {
67
+ var TWOPI = 6.2831853071795864769252842; // 2*pi
64
68
 
65
- var REFLECTION = 0.1;
69
+ var LOGPI = 1.1447298858494001741434262; // log(pi)
66
70
 
67
- if (n.isNaN()) {
68
- return new _Complex(NaN, NaN);
69
- } else if (n.im === 0) {
70
- return new _Complex(lgammaNumber(n.re), 0);
71
- } else if (n.re >= SMALL_RE || Math.abs(n.im) >= SMALL_IM) {
72
- return lgammaStirling(n);
73
- } else if (n.re <= REFLECTION) {
74
- // Reflection formula. see Proposition 3.1 in [1]
75
- var tmp = copysign(TWOPI, n.im) * Math.floor(0.5 * n.re + 0.25); // TODO: `complex.js sin` doesn't have extremely high precision, so this value `a` may lose a little precision,
76
- // causing the computation results to be less accurate than the lgamma of real numbers
71
+ var REFLECTION = 0.1;
77
72
 
78
- var a = n.mul(Math.PI).sin().log();
79
- var b = this(new _Complex(1 - n.re, -n.im));
80
- return new _Complex(LOGPI, tmp).sub(a).sub(b);
81
- } else if (n.im >= 0) {
82
- return lgammaRecurrence(n);
83
- } else {
84
- return lgammaRecurrence(n.conjugate()).conjugate();
85
- }
86
- },
87
- BigNumber: function BigNumber() {
88
- throw new Error("mathjs doesn't yet provide an implementation of the algorithm lgamma for BigNumber");
73
+ if (n.isNaN()) {
74
+ return new Complex(NaN, NaN);
75
+ } else if (n.im === 0) {
76
+ return new Complex(lgammaNumber(n.re), 0);
77
+ } else if (n.re >= SMALL_RE || Math.abs(n.im) >= SMALL_IM) {
78
+ return lgammaStirling(n);
79
+ } else if (n.re <= REFLECTION) {
80
+ // Reflection formula. see Proposition 3.1 in [1]
81
+ var tmp = copysign(TWOPI, n.im) * Math.floor(0.5 * n.re + 0.25);
82
+ var a = n.mul(Math.PI).sin().log();
83
+ var b = lgammaComplex(new Complex(1 - n.re, -n.im));
84
+ return new Complex(LOGPI, tmp).sub(a).sub(b);
85
+ } else if (n.im >= 0) {
86
+ return lgammaRecurrence(n);
87
+ } else {
88
+ return lgammaRecurrence(n.conjugate()).conjugate();
89
89
  }
90
- });
90
+ }
91
91
 
92
92
  function lgammaStirling(z) {
93
93
  // formula ref in [2]
@@ -98,7 +98,7 @@ export var createLgamma = /* #__PURE__ */factory(name, dependencies, _ref => {
98
98
  // => (x - 0.5) * log(x) - x + log(2PI) / 2
99
99
  var leftPart = z.sub(0.5).mul(z.log()).sub(z).add(lnSqrt2PI); // right part
100
100
 
101
- var rz = new _Complex(1, 0).div(z);
101
+ var rz = new Complex(1, 0).div(z);
102
102
  var rzz = rz.div(z);
103
103
  var a = coeffs[0];
104
104
  var b = coeffs[1];
@@ -132,6 +132,6 @@ export var createLgamma = /* #__PURE__ */factory(name, dependencies, _ref => {
132
132
  z = z.add(1);
133
133
  }
134
134
 
135
- return lgammaStirling(z).sub(shiftprod.log()).sub(new _Complex(0, signflips * 2 * Math.PI * 1));
135
+ return lgammaStirling(z).sub(shiftprod.log()).sub(new Complex(0, signflips * 2 * Math.PI * 1));
136
136
  }
137
137
  });
@@ -1,11 +1,11 @@
1
1
  import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';
2
2
  import { nearlyEqual } from '../../utils/number.js';
3
3
  import { factory } from '../../utils/factory.js';
4
- import { createAlgorithm03 } from '../../type/matrix/utils/algorithm03.js';
5
- import { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';
6
- import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
7
- import { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';
8
- import { createAlgorithm05 } from '../../type/matrix/utils/algorithm05.js';
4
+ import { createMatAlgo03xDSf } from '../../type/matrix/utils/matAlgo03xDSf.js';
5
+ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
6
+ import { createMatAlgo05xSfSf } from '../../type/matrix/utils/matAlgo05xSfSf.js';
7
+ import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
8
+ import { createCompareUnits } from './compareUnits.js';
9
9
  var name = 'compare';
10
10
  var dependencies = ['typed', 'config', 'matrix', 'equalScalar', 'BigNumber', 'Fraction', 'DenseMatrix'];
11
11
  export var createCompare = /* #__PURE__ */factory(name, dependencies, _ref => {
@@ -18,21 +18,22 @@ export var createCompare = /* #__PURE__ */factory(name, dependencies, _ref => {
18
18
  Fraction,
19
19
  DenseMatrix
20
20
  } = _ref;
21
- var algorithm03 = createAlgorithm03({
21
+ var matAlgo03xDSf = createMatAlgo03xDSf({
22
22
  typed
23
23
  });
24
- var algorithm05 = createAlgorithm05({
24
+ var matAlgo05xSfSf = createMatAlgo05xSfSf({
25
25
  typed,
26
26
  equalScalar
27
27
  });
28
- var algorithm12 = createAlgorithm12({
28
+ var matAlgo12xSfs = createMatAlgo12xSfs({
29
29
  typed,
30
30
  DenseMatrix
31
31
  });
32
- var algorithm13 = createAlgorithm13({
33
- typed
32
+ var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
33
+ typed,
34
+ matrix
34
35
  });
35
- var algorithm14 = createAlgorithm14({
36
+ var compareUnits = createCompareUnits({
36
37
  typed
37
38
  });
38
39
  /**
@@ -73,13 +74,13 @@ export var createCompare = /* #__PURE__ */factory(name, dependencies, _ref => {
73
74
  * 1 when x > y, -1 when x < y, and 0 when x == y.
74
75
  */
75
76
 
76
- return typed(name, {
77
+ return typed(name, createCompareNumber({
78
+ typed,
79
+ config
80
+ }), {
77
81
  'boolean, boolean': function booleanBoolean(x, y) {
78
82
  return x === y ? 0 : x > y ? 1 : -1;
79
83
  },
80
- 'number, number': function numberNumber(x, y) {
81
- return nearlyEqual(x, y, config.epsilon) ? 0 : x > y ? 1 : -1;
82
- },
83
84
  'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
84
85
  return bigNearlyEqual(x, y, config.epsilon) ? new BigNumber(0) : new BigNumber(x.cmp(y));
85
86
  },
@@ -88,59 +89,12 @@ export var createCompare = /* #__PURE__ */factory(name, dependencies, _ref => {
88
89
  },
89
90
  'Complex, Complex': function ComplexComplex() {
90
91
  throw new TypeError('No ordering relation is defined for complex numbers');
91
- },
92
- 'Unit, Unit': function UnitUnit(x, y) {
93
- if (!x.equalBase(y)) {
94
- throw new Error('Cannot compare units with different base');
95
- }
96
-
97
- return this(x.value, y.value);
98
- },
99
- 'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {
100
- return algorithm05(x, y, this);
101
- },
102
- 'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {
103
- return algorithm03(y, x, this, true);
104
- },
105
- 'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {
106
- return algorithm03(x, y, this, false);
107
- },
108
- 'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {
109
- return algorithm13(x, y, this);
110
- },
111
- 'Array, Array': function ArrayArray(x, y) {
112
- // use matrix implementation
113
- return this(matrix(x), matrix(y)).valueOf();
114
- },
115
- 'Array, Matrix': function ArrayMatrix(x, y) {
116
- // use matrix implementation
117
- return this(matrix(x), y);
118
- },
119
- 'Matrix, Array': function MatrixArray(x, y) {
120
- // use matrix implementation
121
- return this(x, matrix(y));
122
- },
123
- 'SparseMatrix, any': function SparseMatrixAny(x, y) {
124
- return algorithm12(x, y, this, false);
125
- },
126
- 'DenseMatrix, any': function DenseMatrixAny(x, y) {
127
- return algorithm14(x, y, this, false);
128
- },
129
- 'any, SparseMatrix': function anySparseMatrix(x, y) {
130
- return algorithm12(y, x, this, true);
131
- },
132
- 'any, DenseMatrix': function anyDenseMatrix(x, y) {
133
- return algorithm14(y, x, this, true);
134
- },
135
- 'Array, any': function ArrayAny(x, y) {
136
- // use matrix implementation
137
- return algorithm14(matrix(x), y, this, false).valueOf();
138
- },
139
- 'any, Array': function anyArray(x, y) {
140
- // use matrix implementation
141
- return algorithm14(matrix(y), x, this, true).valueOf();
142
92
  }
143
- });
93
+ }, compareUnits, matrixAlgorithmSuite({
94
+ SS: matAlgo05xSfSf,
95
+ DS: matAlgo03xDSf,
96
+ Ss: matAlgo12xSfs
97
+ }));
144
98
  });
145
99
  export var createCompareNumber = /* #__PURE__ */factory(name, ['typed', 'config'], _ref2 => {
146
100
  var {
@@ -79,75 +79,79 @@ export var createCompareNatural = /* #__PURE__ */factory(name, dependencies, _re
79
79
  */
80
80
 
81
81
  return typed(name, {
82
- 'any, any': function anyAny(x, y) {
83
- var typeX = typeOf(x);
84
- var typeY = typeOf(y);
85
- var c; // numeric types
82
+ 'any, any': _compareNatural
83
+ }); // just to check # args
86
84
 
87
- if ((typeX === 'number' || typeX === 'BigNumber' || typeX === 'Fraction') && (typeY === 'number' || typeY === 'BigNumber' || typeY === 'Fraction')) {
88
- c = compare(x, y);
85
+ function _compareNatural(x, y) {
86
+ var typeX = typeOf(x);
87
+ var typeY = typeOf(y);
88
+ var c; // numeric types
89
89
 
90
- if (c.toString() !== '0') {
91
- // c can be number, BigNumber, or Fraction
92
- return c > 0 ? 1 : -1; // return a number
93
- } else {
94
- return naturalSort(typeX, typeY);
95
- }
96
- } // matrix types
90
+ if ((typeX === 'number' || typeX === 'BigNumber' || typeX === 'Fraction') && (typeY === 'number' || typeY === 'BigNumber' || typeY === 'Fraction')) {
91
+ c = compare(x, y);
97
92
 
93
+ if (c.toString() !== '0') {
94
+ // c can be number, BigNumber, or Fraction
95
+ return c > 0 ? 1 : -1; // return a number
96
+ } else {
97
+ return naturalSort(typeX, typeY);
98
+ }
99
+ } // matrix types
98
100
 
99
- if (typeX === 'Array' || typeX === 'Matrix' || typeY === 'Array' || typeY === 'Matrix') {
100
- c = compareMatricesAndArrays(this, x, y);
101
101
 
102
- if (c !== 0) {
103
- return c;
104
- } else {
105
- return naturalSort(typeX, typeY);
106
- }
107
- } // in case of different types, order by name of type, i.e. 'BigNumber' < 'Complex'
102
+ var matTypes = ['Array', 'DenseMatrix', 'SparseMatrix'];
108
103
 
104
+ if (matTypes.includes(typeX) || matTypes.includes(typeY)) {
105
+ c = compareMatricesAndArrays(_compareNatural, x, y);
109
106
 
110
- if (typeX !== typeY) {
107
+ if (c !== 0) {
108
+ return c;
109
+ } else {
111
110
  return naturalSort(typeX, typeY);
112
111
  }
112
+ } // in case of different types, order by name of type, i.e. 'BigNumber' < 'Complex'
113
113
 
114
- if (typeX === 'Complex') {
115
- return compareComplexNumbers(x, y);
116
- }
117
-
118
- if (typeX === 'Unit') {
119
- if (x.equalBase(y)) {
120
- return this(x.value, y.value);
121
- } // compare by units
122
114
 
115
+ if (typeX !== typeY) {
116
+ return naturalSort(typeX, typeY);
117
+ }
123
118
 
124
- return compareArrays(this, x.formatUnits(), y.formatUnits());
125
- }
119
+ if (typeX === 'Complex') {
120
+ return compareComplexNumbers(x, y);
121
+ }
126
122
 
127
- if (typeX === 'boolean') {
128
- return compareBooleans(x, y);
129
- }
123
+ if (typeX === 'Unit') {
124
+ if (x.equalBase(y)) {
125
+ return _compareNatural(x.value, y.value);
126
+ } // compare by units
130
127
 
131
- if (typeX === 'string') {
132
- return naturalSort(x, y);
133
- }
134
128
 
135
- if (typeX === 'Object') {
136
- return compareObjects(this, x, y);
137
- }
129
+ return compareArrays(_compareNatural, x.formatUnits(), y.formatUnits());
130
+ }
138
131
 
139
- if (typeX === 'null') {
140
- return 0;
141
- }
132
+ if (typeX === 'boolean') {
133
+ return compareBooleans(x, y);
134
+ }
142
135
 
143
- if (typeX === 'undefined') {
144
- return 0;
145
- } // this should not occur...
136
+ if (typeX === 'string') {
137
+ return naturalSort(x, y);
138
+ }
146
139
 
140
+ if (typeX === 'Object') {
141
+ return compareObjects(_compareNatural, x, y);
142
+ }
147
143
 
148
- throw new TypeError('Unsupported type of value "' + typeX + '"');
144
+ if (typeX === 'null') {
145
+ return 0;
149
146
  }
150
- });
147
+
148
+ if (typeX === 'undefined') {
149
+ return 0;
150
+ } // this should not occur...
151
+
152
+
153
+ throw new TypeError('Unsupported type of value "' + typeX + '"');
154
+ }
151
155
  /**
152
156
  * Compare mixed matrix/array types, by converting to same-shaped array.
153
157
  * This comparator is non-deterministic regarding input types.
@@ -156,6 +160,7 @@ export var createCompareNatural = /* #__PURE__ */factory(name, dependencies, _re
156
160
  * @returns {number} Returns the comparison result: -1, 0, or 1
157
161
  */
158
162
 
163
+
159
164
  function compareMatricesAndArrays(compareNatural, x, y) {
160
165
  if (isSparseMatrix(x) && isSparseMatrix(y)) {
161
166
  return compareArrays(compareNatural, x.toJSON().values, y.toJSON().values);
@@ -1,19 +1,17 @@
1
1
  import { compareText as _compareText } from '../../utils/string.js';
2
2
  import { factory } from '../../utils/factory.js';
3
- import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
4
- import { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';
3
+ import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
5
4
  var name = 'compareText';
6
5
  var dependencies = ['typed', 'matrix'];
6
+ _compareText.signature = 'any, any';
7
7
  export var createCompareText = /* #__PURE__ */factory(name, dependencies, _ref => {
8
8
  var {
9
9
  typed,
10
10
  matrix
11
11
  } = _ref;
12
- var algorithm13 = createAlgorithm13({
13
- typed
14
- });
15
- var algorithm14 = createAlgorithm14({
16
- typed
12
+ var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
13
+ typed,
14
+ matrix
17
15
  });
18
16
  /**
19
17
  * Compare two strings lexically. Comparison is case sensitive.
@@ -44,44 +42,14 @@ export var createCompareText = /* #__PURE__ */factory(name, dependencies, _ref =
44
42
  * 1 when x > y, -1 when x < y, and 0 when x == y.
45
43
  */
46
44
 
47
- return typed(name, {
48
- 'any, any': _compareText,
49
- 'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {
50
- return algorithm13(x, y, _compareText);
51
- },
52
- 'Array, Array': function ArrayArray(x, y) {
53
- // use matrix implementation
54
- return this(matrix(x), matrix(y)).valueOf();
55
- },
56
- 'Array, Matrix': function ArrayMatrix(x, y) {
57
- // use matrix implementation
58
- return this(matrix(x), y);
59
- },
60
- 'Matrix, Array': function MatrixArray(x, y) {
61
- // use matrix implementation
62
- return this(x, matrix(y));
63
- },
64
- 'DenseMatrix, any': function DenseMatrixAny(x, y) {
65
- return algorithm14(x, y, _compareText, false);
66
- },
67
- 'any, DenseMatrix': function anyDenseMatrix(x, y) {
68
- return algorithm14(y, x, _compareText, true);
69
- },
70
- 'Array, any': function ArrayAny(x, y) {
71
- // use matrix implementation
72
- return algorithm14(matrix(x), y, _compareText, false).valueOf();
73
- },
74
- 'any, Array': function anyArray(x, y) {
75
- // use matrix implementation
76
- return algorithm14(matrix(y), x, _compareText, true).valueOf();
77
- }
78
- });
45
+ return typed(name, _compareText, matrixAlgorithmSuite({
46
+ elop: _compareText,
47
+ Ds: true
48
+ }));
79
49
  });
80
50
  export var createCompareTextNumber = /* #__PURE__ */factory(name, ['typed'], _ref2 => {
81
51
  var {
82
52
  typed
83
53
  } = _ref2;
84
- return typed(name, {
85
- 'any, any': _compareText
86
- });
54
+ return typed(name, _compareText);
87
55
  });
@@ -0,0 +1,15 @@
1
+ import { factory } from '../../utils/factory.js';
2
+ export var createCompareUnits = /* #__PURE__ */factory('compareUnits', ['typed'], _ref => {
3
+ var {
4
+ typed
5
+ } = _ref;
6
+ return {
7
+ 'Unit, Unit': typed.referToSelf(self => (x, y) => {
8
+ if (!x.equalBase(y)) {
9
+ throw new Error('Cannot compare units with different base');
10
+ }
11
+
12
+ return typed.find(self, [x.valueType(), y.valueType()])(x.value, y.value);
13
+ })
14
+ };
15
+ });