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,5 +1,4 @@
1
1
  import { factory } from '../../utils/factory.js';
2
- import { deepMap } from '../../utils/collection.js';
3
2
  import { sinhNumber } from '../../plain/number/index.js';
4
3
  var name = 'sinh';
5
4
  var dependencies = ['typed'];
@@ -12,7 +11,8 @@ export var createSinh = /* #__PURE__ */factory(name, dependencies, _ref => {
12
11
  * Calculate the hyperbolic sine of a value,
13
12
  * defined as `sinh(x) = 1/2 * (exp(x) - exp(-x))`.
14
13
  *
15
- * For matrices, the function is evaluated element wise.
14
+ * To avoid confusion with the matrix hyperbolic sine, this function does
15
+ * not apply to matrices.
16
16
  *
17
17
  * Syntax:
18
18
  *
@@ -26,27 +26,11 @@ export var createSinh = /* #__PURE__ */factory(name, dependencies, _ref => {
26
26
  *
27
27
  * cosh, tanh
28
28
  *
29
- * @param {number | BigNumber | Complex | Unit | Array | Matrix} x Function input
30
- * @return {number | BigNumber | Complex | Array | Matrix} Hyperbolic sine of x
29
+ * @param {number | BigNumber | Complex} x Function input
30
+ * @return {number | BigNumber | Complex} Hyperbolic sine of x
31
31
  */
32
32
  return typed(name, {
33
33
  number: sinhNumber,
34
- Complex: function Complex(x) {
35
- return x.sinh();
36
- },
37
- BigNumber: function BigNumber(x) {
38
- return x.sinh();
39
- },
40
- Unit: function Unit(x) {
41
- if (!x.hasBase(x.constructor.BASE_UNITS.ANGLE)) {
42
- throw new TypeError('Unit in function sinh is no angle');
43
- }
44
-
45
- return this(x.value);
46
- },
47
- 'Array | Matrix': function ArrayMatrix(x) {
48
- // deep map collection, skip zeros since sinh(0) = 0
49
- return deepMap(x, this, true);
50
- }
34
+ 'Complex | BigNumber': x => x.sinh()
51
35
  });
52
36
  });
@@ -1,16 +1,19 @@
1
1
  import { factory } from '../../utils/factory.js';
2
- import { deepMap } from '../../utils/collection.js';
2
+ import { createTrigUnit } from './trigUnit.js';
3
3
  var name = 'tan';
4
4
  var dependencies = ['typed'];
5
5
  export var createTan = /* #__PURE__ */factory(name, dependencies, _ref => {
6
6
  var {
7
7
  typed
8
8
  } = _ref;
9
-
9
+ var trigUnit = createTrigUnit({
10
+ typed
11
+ });
10
12
  /**
11
13
  * Calculate the tangent of a value. `tan(x)` is equal to `sin(x) / cos(x)`.
12
14
  *
13
- * For matrices, the function is evaluated element wise.
15
+ * To avoid confusion with the matrix tangent, this function does not apply
16
+ * to matrices.
14
17
  *
15
18
  * Syntax:
16
19
  *
@@ -27,27 +30,12 @@ export var createTan = /* #__PURE__ */factory(name, dependencies, _ref => {
27
30
  *
28
31
  * atan, sin, cos
29
32
  *
30
- * @param {number | BigNumber | Complex | Unit | Array | Matrix} x Function input
31
- * @return {number | BigNumber | Complex | Array | Matrix} Tangent of x
33
+ * @param {number | BigNumber | Complex | Unit} x Function input
34
+ * @return {number | BigNumber | Complex} Tangent of x
32
35
  */
36
+
33
37
  return typed(name, {
34
38
  number: Math.tan,
35
- Complex: function Complex(x) {
36
- return x.tan();
37
- },
38
- BigNumber: function BigNumber(x) {
39
- return x.tan();
40
- },
41
- Unit: function Unit(x) {
42
- if (!x.hasBase(x.constructor.BASE_UNITS.ANGLE)) {
43
- throw new TypeError('Unit in function tan is no angle');
44
- }
45
-
46
- return this(x.value);
47
- },
48
- 'Array | Matrix': function ArrayMatrix(x) {
49
- // deep map collection, skip zeros since tan(0) = 0
50
- return deepMap(x, this, true);
51
- }
52
- });
39
+ 'Complex | BigNumber': x => x.tan()
40
+ }, trigUnit);
53
41
  });
@@ -1,5 +1,4 @@
1
1
  import { factory } from '../../utils/factory.js';
2
- import { deepMap } from '../../utils/collection.js';
3
2
  import { tanh as _tanh } from '../../utils/number.js';
4
3
  var name = 'tanh';
5
4
  var dependencies = ['typed'];
@@ -12,7 +11,8 @@ export var createTanh = /* #__PURE__ */factory(name, dependencies, _ref => {
12
11
  * Calculate the hyperbolic tangent of a value,
13
12
  * defined as `tanh(x) = (exp(2 * x) - 1) / (exp(2 * x) + 1)`.
14
13
  *
15
- * For matrices, the function is evaluated element wise.
14
+ * To avoid confusion with matrix hyperbolic tangent, this function does
15
+ * not apply to matrices.
16
16
  *
17
17
  * Syntax:
18
18
  *
@@ -29,27 +29,11 @@ export var createTanh = /* #__PURE__ */factory(name, dependencies, _ref => {
29
29
  *
30
30
  * sinh, cosh, coth
31
31
  *
32
- * @param {number | BigNumber | Complex | Unit | Array | Matrix} x Function input
33
- * @return {number | BigNumber | Complex | Array | Matrix} Hyperbolic tangent of x
32
+ * @param {number | BigNumber | Complex} x Function input
33
+ * @return {number | BigNumber | Complex} Hyperbolic tangent of x
34
34
  */
35
35
  return typed('tanh', {
36
36
  number: _tanh,
37
- Complex: function Complex(x) {
38
- return x.tanh();
39
- },
40
- BigNumber: function BigNumber(x) {
41
- return x.tanh();
42
- },
43
- Unit: function Unit(x) {
44
- if (!x.hasBase(x.constructor.BASE_UNITS.ANGLE)) {
45
- throw new TypeError('Unit in function tanh is no angle');
46
- }
47
-
48
- return this(x.value);
49
- },
50
- 'Array | Matrix': function ArrayMatrix(x) {
51
- // deep map collection, skip zeros since tanh(0) = 0
52
- return deepMap(x, this, true);
53
- }
37
+ 'Complex | BigNumber': x => x.tanh()
54
38
  });
55
39
  });
@@ -0,0 +1,15 @@
1
+ import { factory } from '../../utils/factory.js';
2
+ export var createTrigUnit = /* #__PURE__ */factory('trigUnit', ['typed'], _ref => {
3
+ var {
4
+ typed
5
+ } = _ref;
6
+ return {
7
+ Unit: typed.referToSelf(self => x => {
8
+ if (!x.hasBase(x.constructor.BASE_UNITS.ANGLE)) {
9
+ throw new TypeError('Unit in function cot is no angle');
10
+ }
11
+
12
+ return typed.find(self, x.valueType())(x.value);
13
+ })
14
+ };
15
+ });
@@ -1,6 +1,5 @@
1
1
  import { factory } from '../../utils/factory.js';
2
- import { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';
3
- import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
2
+ import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
4
3
  var name = 'to';
5
4
  var dependencies = ['typed', 'matrix'];
6
5
  export var createTo = /* #__PURE__ */factory(name, dependencies, _ref => {
@@ -8,11 +7,9 @@ export var createTo = /* #__PURE__ */factory(name, dependencies, _ref => {
8
7
  typed,
9
8
  matrix
10
9
  } = _ref;
11
- var algorithm13 = createAlgorithm13({
12
- typed
13
- });
14
- var algorithm14 = createAlgorithm14({
15
- typed
10
+ var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
11
+ typed,
12
+ matrix
16
13
  });
17
14
  /**
18
15
  * Change the unit of a value.
@@ -40,40 +37,8 @@ export var createTo = /* #__PURE__ */factory(name, dependencies, _ref => {
40
37
  */
41
38
 
42
39
  return typed(name, {
43
- 'Unit, Unit | string': function UnitUnitString(x, unit) {
44
- return x.to(unit);
45
- },
46
- 'Matrix, Matrix': function MatrixMatrix(x, y) {
47
- // SparseMatrix does not support Units
48
- return algorithm13(x, y, this);
49
- },
50
- 'Array, Array': function ArrayArray(x, y) {
51
- // use matrix implementation
52
- return this(matrix(x), matrix(y)).valueOf();
53
- },
54
- 'Array, Matrix': function ArrayMatrix(x, y) {
55
- // use matrix implementation
56
- return this(matrix(x), y);
57
- },
58
- 'Matrix, Array': function MatrixArray(x, y) {
59
- // use matrix implementation
60
- return this(x, matrix(y));
61
- },
62
- 'Matrix, any': function MatrixAny(x, y) {
63
- // SparseMatrix does not support Units
64
- return algorithm14(x, y, this, false);
65
- },
66
- 'any, Matrix': function anyMatrix(x, y) {
67
- // SparseMatrix does not support Units
68
- return algorithm14(y, x, this, true);
69
- },
70
- 'Array, any': function ArrayAny(x, y) {
71
- // use matrix implementation
72
- return algorithm14(matrix(x), y, this, false).valueOf();
73
- },
74
- 'any, Array': function anyArray(x, y) {
75
- // use matrix implementation
76
- return algorithm14(matrix(y), x, this, true).valueOf();
77
- }
78
- });
40
+ 'Unit, Unit | string': (x, unit) => x.to(unit)
41
+ }, matrixAlgorithmSuite({
42
+ Ds: true
43
+ }));
79
44
  });
@@ -25,6 +25,7 @@ export var createHasNumericValue = /* #__PURE__ */factory(name, dependencies, _r
25
25
  * math.hasNumericValue(math.bignumber(500)) // returns true
26
26
  * math.hasNumericValue(math.fraction(4)) // returns true
27
27
  * math.hasNumericValue(math.complex('2-4i') // returns false
28
+ * math.hasNumericValue(false) // returns true
28
29
  * math.hasNumericValue([2.3, 'foo', false]) // returns [true, false, true]
29
30
  *
30
31
  * See also:
@@ -37,6 +38,7 @@ export var createHasNumericValue = /* #__PURE__ */factory(name, dependencies, _r
37
38
  * Throws an error in case of unknown types.
38
39
  */
39
40
  return typed(name, {
41
+ boolean: () => true,
40
42
  string: function string(x) {
41
43
  return x.trim().length > 0 && !isNaN(Number(x));
42
44
  },
@@ -46,8 +46,6 @@ export var createIsInteger = /* #__PURE__ */factory(name, dependencies, _ref =>
46
46
  Fraction: function Fraction(x) {
47
47
  return x.d === 1 && isFinite(x.n);
48
48
  },
49
- 'Array | Matrix': function ArrayMatrix(x) {
50
- return deepMap(x, this);
51
- }
49
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
52
50
  });
53
51
  });
@@ -45,11 +45,7 @@ export var createIsNegative = /* #__PURE__ */factory(name, dependencies, _ref =>
45
45
  Fraction: function Fraction(x) {
46
46
  return x.s < 0; // It's enough to decide on the sign
47
47
  },
48
- Unit: function Unit(x) {
49
- return this(x.value);
50
- },
51
- 'Array | Matrix': function ArrayMatrix(x) {
52
- return deepMap(x, this);
53
- }
48
+ Unit: typed.referToSelf(self => x => typed.find(self, x.valueType())(x.value)),
49
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
54
50
  });
55
51
  });
@@ -37,14 +37,8 @@ export var createIsNumeric = /* #__PURE__ */factory(name, dependencies, _ref =>
37
37
  * Throws an error in case of unknown types.
38
38
  */
39
39
  return typed(name, {
40
- 'number | BigNumber | Fraction | boolean': function numberBigNumberFractionBoolean() {
41
- return true;
42
- },
43
- 'Complex | Unit | string | null | undefined | Node': function ComplexUnitStringNullUndefinedNode() {
44
- return false;
45
- },
46
- 'Array | Matrix': function ArrayMatrix(x) {
47
- return deepMap(x, this);
48
- }
40
+ 'number | BigNumber | Fraction | boolean': () => true,
41
+ 'Complex | Unit | string | null | undefined | Node': () => false,
42
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
49
43
  });
50
44
  });
@@ -47,11 +47,7 @@ export var createIsPositive = /* #__PURE__ */factory(name, dependencies, _ref =>
47
47
  Fraction: function Fraction(x) {
48
48
  return x.s > 0 && x.n > 0;
49
49
  },
50
- Unit: function Unit(x) {
51
- return this(x.value);
52
- },
53
- 'Array | Matrix': function ArrayMatrix(x) {
54
- return deepMap(x, this);
55
- }
50
+ Unit: typed.referToSelf(self => x => typed.find(self, x.valueType())(x.value)),
51
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
56
52
  });
57
53
  });
@@ -135,8 +135,6 @@ export var createIsPrime = /* #__PURE__ */factory(name, dependencies, _ref => {
135
135
 
136
136
  return true;
137
137
  },
138
- 'Array | Matrix': function ArrayMatrix(x) {
139
- return deepMap(x, this);
140
- }
138
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
141
139
  });
142
140
  });
@@ -52,11 +52,7 @@ export var createIsZero = /* #__PURE__ */factory(name, dependencies, _ref => {
52
52
  Fraction: function Fraction(x) {
53
53
  return x.d === 1 && x.n === 0;
54
54
  },
55
- Unit: function Unit(x) {
56
- return this(x.value);
57
- },
58
- 'Array | Matrix': function ArrayMatrix(x) {
59
- return deepMap(x, this);
60
- }
55
+ Unit: typed.referToSelf(self => x => typed.find(self, x.valueType())(x.value)),
56
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
61
57
  });
62
58
  });
@@ -30,12 +30,12 @@ export var createNumeric = /* #__PURE__ */factory(name, dependencies, _ref => {
30
30
  *
31
31
  * Examples:
32
32
  *
33
- * math.numeric('4') // returns number 4
34
- * math.numeric('4', 'number') // returns number 4
33
+ * math.numeric('4') // returns 4
34
+ * math.numeric('4', 'number') // returns 4
35
35
  * math.numeric('4', 'BigNumber') // returns BigNumber 4
36
36
  * math.numeric('4', 'Fraction') // returns Fraction 4
37
37
  * math.numeric(4, 'Fraction') // returns Fraction 4
38
- * math.numeric(math.fraction(2, 5), 'number') // returns number 0.4
38
+ * math.numeric(math.fraction(2, 5), 'number') // returns 0.4
39
39
  *
40
40
  * See also:
41
41
  *
@@ -50,7 +50,14 @@ export var createNumeric = /* #__PURE__ */factory(name, dependencies, _ref => {
50
50
  * Returns an instance of the numeric in the requested type
51
51
  */
52
52
 
53
- return function numeric(value, outputType) {
53
+ return function numeric(value) {
54
+ var outputType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'number';
55
+ var check = arguments.length > 2 ? arguments[2] : undefined;
56
+
57
+ if (check !== undefined) {
58
+ throw new SyntaxError('numeric() takes one or two arguments');
59
+ }
60
+
54
61
  var inputType = typeOf(value);
55
62
 
56
63
  if (!(inputType in validInputTypes)) {
@@ -8,46 +8,7 @@ export var createTypeOf = /* #__PURE__ */factory(name, dependencies, _ref => {
8
8
  } = _ref;
9
9
 
10
10
  /**
11
- * Determine the type of a variable.
12
- *
13
- * Function `typeOf` recognizes the following types of objects:
14
- *
15
- * Object | Returns | Example
16
- * ---------------------- | ------------- | ------------------------------------------
17
- * null | `'null'` | `math.typeOf(null)`
18
- * number | `'number'` | `math.typeOf(3.5)`
19
- * boolean | `'boolean'` | `math.typeOf(true)`
20
- * string | `'string'` | `math.typeOf('hello world')`
21
- * Array | `'Array'` | `math.typeOf([1, 2, 3])`
22
- * Date | `'Date'` | `math.typeOf(new Date())`
23
- * Function | `'Function'` | `math.typeOf(function () {})`
24
- * Object | `'Object'` | `math.typeOf({a: 2, b: 3})`
25
- * RegExp | `'RegExp'` | `math.typeOf(/a regexp/)`
26
- * undefined | `'undefined'` | `math.typeOf(undefined)`
27
- * math.BigNumber | `'BigNumber'` | `math.typeOf(math.bignumber('2.3e500'))`
28
- * math.Chain | `'Chain'` | `math.typeOf(math.chain(2))`
29
- * math.Complex | `'Complex'` | `math.typeOf(math.complex(2, 3))`
30
- * math.Fraction | `'Fraction'` | `math.typeOf(math.fraction(1, 3))`
31
- * math.Help | `'Help'` | `math.typeOf(math.help('sqrt'))`
32
- * math.Help | `'Help'` | `math.typeOf(math.help('sqrt'))`
33
- * math.Index | `'Index'` | `math.typeOf(math.index(1, 3))`
34
- * math.Matrix | `'Matrix'` | `math.typeOf(math.matrix([[1,2], [3, 4]]))`
35
- * math.Range | `'Range'` | `math.typeOf(math.range(0, 10))`
36
- * math.ResultSet | `'ResultSet'` | `math.typeOf(math.evaluate('a=2\nb=3'))`
37
- * math.Unit | `'Unit'` | `math.typeOf(math.unit('45 deg'))`
38
- * math.AccessorNode | `'AccessorNode'` | `math.typeOf(math.parse('A[2]'))`
39
- * math.ArrayNode | `'ArrayNode'` | `math.typeOf(math.parse('[1,2,3]'))`
40
- * math.AssignmentNode | `'AssignmentNode'` | `math.typeOf(math.parse('x=2'))`
41
- * math.BlockNode | `'BlockNode'` | `math.typeOf(math.parse('a=2; b=3'))`
42
- * math.ConditionalNode | `'ConditionalNode'` | `math.typeOf(math.parse('x<0 ? -x : x'))`
43
- * math.ConstantNode | `'ConstantNode'` | `math.typeOf(math.parse('2.3'))`
44
- * math.FunctionAssignmentNode | `'FunctionAssignmentNode'` | `math.typeOf(math.parse('f(x)=x^2'))`
45
- * math.FunctionNode | `'FunctionNode'` | `math.typeOf(math.parse('sqrt(4)'))`
46
- * math.IndexNode | `'IndexNode'` | `math.typeOf(math.parse('A[2]').index)`
47
- * math.ObjectNode | `'ObjectNode'` | `math.typeOf(math.parse('{a:2}'))`
48
- * math.ParenthesisNode | `'ParenthesisNode'` | `math.typeOf(math.parse('(2+3)'))`
49
- * math.RangeNode | `'RangeNode'` | `math.typeOf(math.parse('1:10'))`
50
- * math.SymbolNode | `'SymbolNode'` | `math.typeOf(math.parse('x'))`
11
+ * Determine the type of an entity.
51
12
  *
52
13
  * Syntax:
53
14
  *
@@ -55,10 +16,43 @@ export var createTypeOf = /* #__PURE__ */factory(name, dependencies, _ref => {
55
16
  *
56
17
  * Examples:
57
18
  *
58
- * math.typeOf(3.5) // returns 'number'
59
- * math.typeOf(math.complex('2-4i')) // returns 'Complex'
60
- * math.typeOf(math.unit('45 deg')) // returns 'Unit'
61
- * math.typeOf('hello world') // returns 'string'
19
+ * // This list is intended to include all relevant types, for testing
20
+ * // purposes:
21
+ * math.typeOf(3.5) // returns 'number'
22
+ * math.typeOf(math.complex('2-4i')) // returns 'Complex'
23
+ * math.typeOf(math.unit('45 deg')) // returns 'Unit'
24
+ * math.typeOf('hello world') // returns 'string'
25
+ * math.typeOf(null) // returns 'null'
26
+ * math.typeOf(true) // returns 'boolean'
27
+ * math.typeOf([1, 2, 3]) // returns 'Array'
28
+ * math.typeOf(new Date()) // returns 'Date'
29
+ * math.typeOf(function () {}) // returns 'function'
30
+ * math.typeOf({a: 2, b: 3}) // returns 'Object'
31
+ * math.typeOf(/a regexp/) // returns 'RegExp'
32
+ * math.typeOf(undefined) // returns 'undefined'
33
+ * math.typeOf(math.bignumber('23e99')) // returns 'BigNumber'
34
+ * math.typeOf(math.chain(2)) // returns 'Chain'
35
+ * math.typeOf(math.fraction(1, 3)) // returns 'Fraction'
36
+ * math.typeOf(math.help('sqrt')) // returns 'Help'
37
+ * math.typeOf(math.index(1, 3)) // returns 'Index'
38
+ * math.typeOf(math.matrix([[1],[3]])) // returns 'DenseMatrix'
39
+ * math.typeOf(math.matrix([],'sparse')) // returns 'SparseMatrix'
40
+ * math.typeOf(new math.Range(0, 10)) // returns 'Range'
41
+ * math.typeOf(math.evaluate('a=2\na')) // returns 'ResultSet'
42
+ * math.typeOf(math.parse('A[2]')) // returns 'AccessorNode'
43
+ * math.typeOf(math.parse('[1,2,3]')) // returns 'ArrayNode'
44
+ * math.typeOf(math.parse('x=2')) // returns 'AssignmentNode'
45
+ * math.typeOf(math.parse('a=2; b=3')) // returns 'BlockNode'
46
+ * math.typeOf(math.parse('x<0?-1:1')) // returns 'ConditionalNode'
47
+ * math.typeOf(math.parse('2.3')) // returns 'ConstantNode'
48
+ * math.typeOf(math.parse('f(x)=x^2')) // returns 'FunctionAssignmentNode'
49
+ * math.typeOf(math.parse('sqrt(4)')) // returns 'FunctionNode'
50
+ * math.typeOf(math.parse('A[2]').index) // returns 'IndexNode'
51
+ * math.typeOf(math.parse('{a:2}')) // returns 'ObjectNode'
52
+ * math.typeOf(math.parse('(2+3)')) // returns 'ParenthesisNode'
53
+ * math.typeOf(math.parse('1:10')) // returns 'RangeNode'
54
+ * math.typeOf(math.parse('a<b<c')) // returns 'RelationalNode'
55
+ * math.typeOf(math.parse('x')) // returns 'SymbolNode'
62
56
  *
63
57
  * @param {*} x The variable for which to test the type.
64
58
  * @return {string} Returns the name of the type. Primitive types are lower case,
@@ -75,8 +75,6 @@ export var createBignumber = /* #__PURE__ */factory(name, dependencies, _ref =>
75
75
  null: function _null(x) {
76
76
  return new BigNumber(0);
77
77
  },
78
- 'Array | Matrix': function ArrayMatrix(x) {
79
- return deepMap(x, this);
80
- }
78
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
81
79
  });
82
80
  });
@@ -69,8 +69,6 @@ export var createBoolean = /* #__PURE__ */factory(name, dependencies, _ref => {
69
69
 
70
70
  throw new Error('Cannot convert "' + x + '" to a boolean');
71
71
  },
72
- 'Array | Matrix': function ArrayMatrix(x) {
73
- return deepMap(x, this);
74
- }
72
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
75
73
  });
76
74
  });
@@ -3,11 +3,12 @@ import { format } from '../../utils/string.js';
3
3
  import { hasOwnProperty, lazy } from '../../utils/object.js';
4
4
  import { factory } from '../../utils/factory.js';
5
5
  var name = 'Chain';
6
- var dependencies = ['?on', 'math'];
6
+ var dependencies = ['?on', 'math', 'typed'];
7
7
  export var createChainClass = /* #__PURE__ */factory(name, dependencies, _ref => {
8
8
  var {
9
9
  on,
10
- math
10
+ math,
11
+ typed
11
12
  } = _ref;
12
13
 
13
14
  /**
@@ -142,12 +143,31 @@ export var createChainClass = /* #__PURE__ */factory(name, dependencies, _ref =>
142
143
 
143
144
  function chainify(fn) {
144
145
  return function () {
145
- var args = [this.value]; // `this` will be the context of a Chain instance
146
+ // Here, `this` will be the context of a Chain instance
147
+ if (arguments.length === 0) {
148
+ return new Chain(fn(this.value));
149
+ }
150
+
151
+ var args = [this.value];
146
152
 
147
153
  for (var i = 0; i < arguments.length; i++) {
148
154
  args[i + 1] = arguments[i];
149
155
  }
150
156
 
157
+ if (typed.isTypedFunction(fn)) {
158
+ var sigObject = typed.resolve(fn, args); // We want to detect if a rest parameter has matched across the
159
+ // value in the chain and the current arguments of this call.
160
+ // That is the case if and only if the matching signature has
161
+ // exactly one parameter (which then must be a rest parameter
162
+ // as it is matching at least two actual arguments).
163
+
164
+ if (sigObject.params.length === 1) {
165
+ throw new Error('chain function ' + fn.name + ' cannot match rest parameter between chain value and additional arguments.');
166
+ }
167
+
168
+ return new Chain(sigObject.implementation.apply(fn, args));
169
+ }
170
+
151
171
  return new Chain(fn.apply(fn, args));
152
172
  };
153
173
  }
@@ -8,6 +8,10 @@ export var createComplexClass = /* #__PURE__ */factory(name, dependencies, () =>
8
8
  /**
9
9
  * Attach type information
10
10
  */
11
+ Object.defineProperty(Complex, 'name', {
12
+ value: 'Complex'
13
+ });
14
+ Complex.prototype.constructor = Complex;
11
15
  Complex.prototype.type = 'Complex';
12
16
  Complex.prototype.isComplex = true;
13
17
  /**
@@ -83,8 +83,6 @@ export var createComplex = /* #__PURE__ */factory(name, dependencies, _ref => {
83
83
 
84
84
  throw new Error('Expected object with properties (re and im) or (r and phi) or (abs and arg)');
85
85
  },
86
- 'Array | Matrix': function ArrayMatrix(x) {
87
- return deepMap(x, this);
88
- }
86
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
89
87
  });
90
88
  });
@@ -6,6 +6,10 @@ export var createFractionClass = /* #__PURE__ */factory(name, dependencies, () =
6
6
  /**
7
7
  * Attach type information
8
8
  */
9
+ Object.defineProperty(Fraction, 'name', {
10
+ value: 'Fraction'
11
+ });
12
+ Fraction.prototype.constructor = Fraction;
9
13
  Fraction.prototype.type = 'Fraction';
10
14
  Fraction.prototype.isFraction = true;
11
15
  /**
@@ -71,8 +71,6 @@ export var createFraction = /* #__PURE__ */factory(name, dependencies, _ref => {
71
71
  Object: function Object(x) {
72
72
  return new Fraction(x);
73
73
  },
74
- 'Array | Matrix': function ArrayMatrix(x) {
75
- return deepMap(x, this);
76
- }
74
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
77
75
  });
78
76
  });
@@ -5,6 +5,7 @@ import { isInteger } from '../../utils/number.js';
5
5
  import { clone, deepStrictEqual } from '../../utils/object.js';
6
6
  import { DimensionError } from '../../error/DimensionError.js';
7
7
  import { factory } from '../../utils/factory.js';
8
+ import { maxArgumentCount } from '../../utils/function.js';
8
9
  var name = 'DenseMatrix';
9
10
  var dependencies = ['Matrix'];
10
11
  export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _ref => {
@@ -79,6 +80,10 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
79
80
  */
80
81
 
81
82
 
83
+ Object.defineProperty(DenseMatrix, 'name', {
84
+ value: 'DenseMatrix'
85
+ });
86
+ DenseMatrix.prototype.constructor = DenseMatrix;
82
87
  DenseMatrix.prototype.type = 'DenseMatrix';
83
88
  DenseMatrix.prototype.isDenseMatrix = true;
84
89
  /**
@@ -576,6 +581,7 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
576
581
  DenseMatrix.prototype.map = function (callback) {
577
582
  // matrix instance
578
583
  var me = this;
584
+ var args = maxArgumentCount(callback);
579
585
 
580
586
  var recurse = function recurse(value, index) {
581
587
  if (isArray(value)) {
@@ -583,7 +589,15 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
583
589
  return recurse(child, index.concat(i));
584
590
  });
585
591
  } else {
586
- return callback(value, index, me);
592
+ // invoke the callback function with the right number of arguments
593
+ if (args === 1) {
594
+ return callback(value);
595
+ } else if (args === 2) {
596
+ return callback(value, index);
597
+ } else {
598
+ // 3 or -1
599
+ return callback(value, index, me);
600
+ }
587
601
  }
588
602
  }; // determine the new datatype when the original matrix has datatype defined
589
603
  // TODO: should be done in matrix constructor instead