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
@@ -53,12 +53,16 @@ var createIsNegative = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
53
53
  Fraction: function Fraction(x) {
54
54
  return x.s < 0; // It's enough to decide on the sign
55
55
  },
56
- Unit: function Unit(x) {
57
- return this(x.value);
58
- },
59
- 'Array | Matrix': function ArrayMatrix(x) {
60
- return (0, _collection.deepMap)(x, this);
61
- }
56
+ Unit: typed.referToSelf(function (self) {
57
+ return function (x) {
58
+ return typed.find(self, x.valueType())(x.value);
59
+ };
60
+ }),
61
+ 'Array | Matrix': typed.referToSelf(function (self) {
62
+ return function (x) {
63
+ return (0, _collection.deepMap)(x, self);
64
+ };
65
+ })
62
66
  });
63
67
  });
64
68
  exports.createIsNegative = createIsNegative;
@@ -50,9 +50,11 @@ var createIsNumeric = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
50
50
  'Complex | Unit | string | null | undefined | Node': function ComplexUnitStringNullUndefinedNode() {
51
51
  return false;
52
52
  },
53
- 'Array | Matrix': function ArrayMatrix(x) {
54
- return (0, _collection.deepMap)(x, this);
55
- }
53
+ 'Array | Matrix': typed.referToSelf(function (self) {
54
+ return function (x) {
55
+ return (0, _collection.deepMap)(x, self);
56
+ };
57
+ })
56
58
  });
57
59
  });
58
60
  exports.createIsNumeric = createIsNumeric;
@@ -55,12 +55,16 @@ var createIsPositive = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
55
55
  Fraction: function Fraction(x) {
56
56
  return x.s > 0 && x.n > 0;
57
57
  },
58
- Unit: function Unit(x) {
59
- return this(x.value);
60
- },
61
- 'Array | Matrix': function ArrayMatrix(x) {
62
- return (0, _collection.deepMap)(x, this);
63
- }
58
+ Unit: typed.referToSelf(function (self) {
59
+ return function (x) {
60
+ return typed.find(self, x.valueType())(x.value);
61
+ };
62
+ }),
63
+ 'Array | Matrix': typed.referToSelf(function (self) {
64
+ return function (x) {
65
+ return (0, _collection.deepMap)(x, self);
66
+ };
67
+ })
64
68
  });
65
69
  });
66
70
  exports.createIsPositive = createIsPositive;
@@ -144,9 +144,11 @@ var createIsPrime = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
144
144
 
145
145
  return true;
146
146
  },
147
- 'Array | Matrix': function ArrayMatrix(x) {
148
- return (0, _collection.deepMap)(x, this);
149
- }
147
+ 'Array | Matrix': typed.referToSelf(function (self) {
148
+ return function (x) {
149
+ return (0, _collection.deepMap)(x, self);
150
+ };
151
+ })
150
152
  });
151
153
  });
152
154
  exports.createIsPrime = createIsPrime;
@@ -60,12 +60,16 @@ var createIsZero = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
60
60
  Fraction: function Fraction(x) {
61
61
  return x.d === 1 && x.n === 0;
62
62
  },
63
- Unit: function Unit(x) {
64
- return this(x.value);
65
- },
66
- 'Array | Matrix': function ArrayMatrix(x) {
67
- return (0, _collection.deepMap)(x, this);
68
- }
63
+ Unit: typed.referToSelf(function (self) {
64
+ return function (x) {
65
+ return typed.find(self, x.valueType())(x.value);
66
+ };
67
+ }),
68
+ 'Array | Matrix': typed.referToSelf(function (self) {
69
+ return function (x) {
70
+ return (0, _collection.deepMap)(x, self);
71
+ };
72
+ })
69
73
  });
70
74
  });
71
75
  exports.createIsZero = createIsZero;
@@ -44,12 +44,12 @@ var createNumeric = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
44
44
  *
45
45
  * Examples:
46
46
  *
47
- * math.numeric('4') // returns number 4
48
- * math.numeric('4', 'number') // returns number 4
47
+ * math.numeric('4') // returns 4
48
+ * math.numeric('4', 'number') // returns 4
49
49
  * math.numeric('4', 'BigNumber') // returns BigNumber 4
50
50
  * math.numeric('4', 'Fraction') // returns Fraction 4
51
51
  * math.numeric(4, 'Fraction') // returns Fraction 4
52
- * math.numeric(math.fraction(2, 5), 'number') // returns number 0.4
52
+ * math.numeric(math.fraction(2, 5), 'number') // returns 0.4
53
53
  *
54
54
  * See also:
55
55
  *
@@ -64,7 +64,14 @@ var createNumeric = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
64
64
  * Returns an instance of the numeric in the requested type
65
65
  */
66
66
 
67
- return function numeric(value, outputType) {
67
+ return function numeric(value) {
68
+ var outputType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'number';
69
+ var check = arguments.length > 2 ? arguments[2] : undefined;
70
+
71
+ if (check !== undefined) {
72
+ throw new SyntaxError('numeric() takes one or two arguments');
73
+ }
74
+
68
75
  var inputType = (0, _is.typeOf)(value);
69
76
 
70
77
  if (!(inputType in validInputTypes)) {
@@ -15,46 +15,7 @@ var createTypeOf = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
15
15
  var typed = _ref.typed;
16
16
 
17
17
  /**
18
- * Determine the type of a variable.
19
- *
20
- * Function `typeOf` recognizes the following types of objects:
21
- *
22
- * Object | Returns | Example
23
- * ---------------------- | ------------- | ------------------------------------------
24
- * null | `'null'` | `math.typeOf(null)`
25
- * number | `'number'` | `math.typeOf(3.5)`
26
- * boolean | `'boolean'` | `math.typeOf(true)`
27
- * string | `'string'` | `math.typeOf('hello world')`
28
- * Array | `'Array'` | `math.typeOf([1, 2, 3])`
29
- * Date | `'Date'` | `math.typeOf(new Date())`
30
- * Function | `'Function'` | `math.typeOf(function () {})`
31
- * Object | `'Object'` | `math.typeOf({a: 2, b: 3})`
32
- * RegExp | `'RegExp'` | `math.typeOf(/a regexp/)`
33
- * undefined | `'undefined'` | `math.typeOf(undefined)`
34
- * math.BigNumber | `'BigNumber'` | `math.typeOf(math.bignumber('2.3e500'))`
35
- * math.Chain | `'Chain'` | `math.typeOf(math.chain(2))`
36
- * math.Complex | `'Complex'` | `math.typeOf(math.complex(2, 3))`
37
- * math.Fraction | `'Fraction'` | `math.typeOf(math.fraction(1, 3))`
38
- * math.Help | `'Help'` | `math.typeOf(math.help('sqrt'))`
39
- * math.Help | `'Help'` | `math.typeOf(math.help('sqrt'))`
40
- * math.Index | `'Index'` | `math.typeOf(math.index(1, 3))`
41
- * math.Matrix | `'Matrix'` | `math.typeOf(math.matrix([[1,2], [3, 4]]))`
42
- * math.Range | `'Range'` | `math.typeOf(math.range(0, 10))`
43
- * math.ResultSet | `'ResultSet'` | `math.typeOf(math.evaluate('a=2\nb=3'))`
44
- * math.Unit | `'Unit'` | `math.typeOf(math.unit('45 deg'))`
45
- * math.AccessorNode | `'AccessorNode'` | `math.typeOf(math.parse('A[2]'))`
46
- * math.ArrayNode | `'ArrayNode'` | `math.typeOf(math.parse('[1,2,3]'))`
47
- * math.AssignmentNode | `'AssignmentNode'` | `math.typeOf(math.parse('x=2'))`
48
- * math.BlockNode | `'BlockNode'` | `math.typeOf(math.parse('a=2; b=3'))`
49
- * math.ConditionalNode | `'ConditionalNode'` | `math.typeOf(math.parse('x<0 ? -x : x'))`
50
- * math.ConstantNode | `'ConstantNode'` | `math.typeOf(math.parse('2.3'))`
51
- * math.FunctionAssignmentNode | `'FunctionAssignmentNode'` | `math.typeOf(math.parse('f(x)=x^2'))`
52
- * math.FunctionNode | `'FunctionNode'` | `math.typeOf(math.parse('sqrt(4)'))`
53
- * math.IndexNode | `'IndexNode'` | `math.typeOf(math.parse('A[2]').index)`
54
- * math.ObjectNode | `'ObjectNode'` | `math.typeOf(math.parse('{a:2}'))`
55
- * math.ParenthesisNode | `'ParenthesisNode'` | `math.typeOf(math.parse('(2+3)'))`
56
- * math.RangeNode | `'RangeNode'` | `math.typeOf(math.parse('1:10'))`
57
- * math.SymbolNode | `'SymbolNode'` | `math.typeOf(math.parse('x'))`
18
+ * Determine the type of an entity.
58
19
  *
59
20
  * Syntax:
60
21
  *
@@ -62,10 +23,43 @@ var createTypeOf = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
62
23
  *
63
24
  * Examples:
64
25
  *
65
- * math.typeOf(3.5) // returns 'number'
66
- * math.typeOf(math.complex('2-4i')) // returns 'Complex'
67
- * math.typeOf(math.unit('45 deg')) // returns 'Unit'
68
- * math.typeOf('hello world') // returns 'string'
26
+ * // This list is intended to include all relevant types, for testing
27
+ * // purposes:
28
+ * math.typeOf(3.5) // returns 'number'
29
+ * math.typeOf(math.complex('2-4i')) // returns 'Complex'
30
+ * math.typeOf(math.unit('45 deg')) // returns 'Unit'
31
+ * math.typeOf('hello world') // returns 'string'
32
+ * math.typeOf(null) // returns 'null'
33
+ * math.typeOf(true) // returns 'boolean'
34
+ * math.typeOf([1, 2, 3]) // returns 'Array'
35
+ * math.typeOf(new Date()) // returns 'Date'
36
+ * math.typeOf(function () {}) // returns 'function'
37
+ * math.typeOf({a: 2, b: 3}) // returns 'Object'
38
+ * math.typeOf(/a regexp/) // returns 'RegExp'
39
+ * math.typeOf(undefined) // returns 'undefined'
40
+ * math.typeOf(math.bignumber('23e99')) // returns 'BigNumber'
41
+ * math.typeOf(math.chain(2)) // returns 'Chain'
42
+ * math.typeOf(math.fraction(1, 3)) // returns 'Fraction'
43
+ * math.typeOf(math.help('sqrt')) // returns 'Help'
44
+ * math.typeOf(math.index(1, 3)) // returns 'Index'
45
+ * math.typeOf(math.matrix([[1],[3]])) // returns 'DenseMatrix'
46
+ * math.typeOf(math.matrix([],'sparse')) // returns 'SparseMatrix'
47
+ * math.typeOf(new math.Range(0, 10)) // returns 'Range'
48
+ * math.typeOf(math.evaluate('a=2\na')) // returns 'ResultSet'
49
+ * math.typeOf(math.parse('A[2]')) // returns 'AccessorNode'
50
+ * math.typeOf(math.parse('[1,2,3]')) // returns 'ArrayNode'
51
+ * math.typeOf(math.parse('x=2')) // returns 'AssignmentNode'
52
+ * math.typeOf(math.parse('a=2; b=3')) // returns 'BlockNode'
53
+ * math.typeOf(math.parse('x<0?-1:1')) // returns 'ConditionalNode'
54
+ * math.typeOf(math.parse('2.3')) // returns 'ConstantNode'
55
+ * math.typeOf(math.parse('f(x)=x^2')) // returns 'FunctionAssignmentNode'
56
+ * math.typeOf(math.parse('sqrt(4)')) // returns 'FunctionNode'
57
+ * math.typeOf(math.parse('A[2]').index) // returns 'IndexNode'
58
+ * math.typeOf(math.parse('{a:2}')) // returns 'ObjectNode'
59
+ * math.typeOf(math.parse('(2+3)')) // returns 'ParenthesisNode'
60
+ * math.typeOf(math.parse('1:10')) // returns 'RangeNode'
61
+ * math.typeOf(math.parse('a<b<c')) // returns 'RelationalNode'
62
+ * math.typeOf(math.parse('x')) // returns 'SymbolNode'
69
63
  *
70
64
  * @param {*} x The variable for which to test the type.
71
65
  * @return {string} Returns the name of the type. Primitive types are lower case,
package/lib/cjs/header.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 10.6.2
10
- * @date 2022-06-24
9
+ * @version 11.0.0
10
+ * @date 2022-07-23
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2022 Jos de Jong <wjosdejong@gmail.com>
@@ -27,7 +27,7 @@ Object.keys(_arithmetic).forEach(function (key) {
27
27
  });
28
28
 
29
29
  // TODO: this is ugly. Instead, be able to pass your own isBigNumber function to typed?
30
- var BigNumber = _decimal.default.clone();
30
+ var BigNumber = _decimal["default"].clone();
31
31
 
32
32
  BigNumber.prototype.isBigNumber = true;
33
33
 
@@ -17,9 +17,9 @@ var createBigNumberClass = /* #__PURE__ */(0, _factory.factory)(name, dependenci
17
17
  var on = _ref.on,
18
18
  config = _ref.config;
19
19
 
20
- var BigNumber = _decimal.default.clone({
20
+ var BigNumber = _decimal["default"].clone({
21
21
  precision: config.precision,
22
- modulo: _decimal.default.EUCLID
22
+ modulo: _decimal["default"].EUCLID
23
23
  });
24
24
 
25
25
  BigNumber.prototype = Object.create(BigNumber.prototype);
@@ -79,12 +79,14 @@ var createBignumber = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
79
79
  Fraction: function Fraction(x) {
80
80
  return new BigNumber(x.n).div(x.d).times(x.s);
81
81
  },
82
- null: function _null(x) {
82
+ "null": function _null(x) {
83
83
  return new BigNumber(0);
84
84
  },
85
- 'Array | Matrix': function ArrayMatrix(x) {
86
- return (0, _collection.deepMap)(x, this);
87
- }
85
+ 'Array | Matrix': typed.referToSelf(function (self) {
86
+ return function (x) {
87
+ return (0, _collection.deepMap)(x, self);
88
+ };
89
+ })
88
90
  });
89
91
  });
90
92
  exports.createBignumber = createBignumber;
@@ -45,13 +45,13 @@ var createBoolean = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
45
45
  '': function _() {
46
46
  return false;
47
47
  },
48
- boolean: function boolean(x) {
48
+ "boolean": function boolean(x) {
49
49
  return x;
50
50
  },
51
51
  number: function number(x) {
52
52
  return !!x;
53
53
  },
54
- null: function _null(x) {
54
+ "null": function _null(x) {
55
55
  return false;
56
56
  },
57
57
  BigNumber: function BigNumber(x) {
@@ -76,9 +76,11 @@ var createBoolean = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
76
76
 
77
77
  throw new Error('Cannot convert "' + x + '" to a boolean');
78
78
  },
79
- 'Array | Matrix': function ArrayMatrix(x) {
80
- return (0, _collection.deepMap)(x, this);
81
- }
79
+ 'Array | Matrix': typed.referToSelf(function (self) {
80
+ return function (x) {
81
+ return (0, _collection.deepMap)(x, self);
82
+ };
83
+ })
82
84
  });
83
85
  });
84
86
  exports.createBoolean = createBoolean;
@@ -14,10 +14,11 @@ var _object = require("../../utils/object.js");
14
14
  var _factory = require("../../utils/factory.js");
15
15
 
16
16
  var name = 'Chain';
17
- var dependencies = ['?on', 'math'];
17
+ var dependencies = ['?on', 'math', 'typed'];
18
18
  var createChainClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
19
19
  var on = _ref.on,
20
- math = _ref.math;
20
+ math = _ref.math,
21
+ typed = _ref.typed;
21
22
 
22
23
  /**
23
24
  * @constructor Chain
@@ -151,12 +152,31 @@ var createChainClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
151
152
 
152
153
  function chainify(fn) {
153
154
  return function () {
154
- var args = [this.value]; // `this` will be the context of a Chain instance
155
+ // Here, `this` will be the context of a Chain instance
156
+ if (arguments.length === 0) {
157
+ return new Chain(fn(this.value));
158
+ }
159
+
160
+ var args = [this.value];
155
161
 
156
162
  for (var i = 0; i < arguments.length; i++) {
157
163
  args[i + 1] = arguments[i];
158
164
  }
159
165
 
166
+ if (typed.isTypedFunction(fn)) {
167
+ var sigObject = typed.resolve(fn, args); // We want to detect if a rest parameter has matched across the
168
+ // value in the chain and the current arguments of this call.
169
+ // That is the case if and only if the matching signature has
170
+ // exactly one parameter (which then must be a rest parameter
171
+ // as it is matching at least two actual arguments).
172
+
173
+ if (sigObject.params.length === 1) {
174
+ throw new Error('chain function ' + fn.name + ' cannot match rest parameter between chain value and additional arguments.');
175
+ }
176
+
177
+ return new Chain(sigObject.implementation.apply(fn, args));
178
+ }
179
+
160
180
  return new Chain(fn.apply(fn, args));
161
181
  };
162
182
  }
@@ -23,15 +23,19 @@ var createComplexClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies
23
23
  /**
24
24
  * Attach type information
25
25
  */
26
- _complex.default.prototype.type = 'Complex';
27
- _complex.default.prototype.isComplex = true;
26
+ Object.defineProperty(_complex["default"], 'name', {
27
+ value: 'Complex'
28
+ });
29
+ _complex["default"].prototype.constructor = _complex["default"];
30
+ _complex["default"].prototype.type = 'Complex';
31
+ _complex["default"].prototype.isComplex = true;
28
32
  /**
29
33
  * Get a JSON representation of the complex number
30
34
  * @returns {Object} Returns a JSON object structured as:
31
35
  * `{"mathjs": "Complex", "re": 2, "im": 3}`
32
36
  */
33
37
 
34
- _complex.default.prototype.toJSON = function () {
38
+ _complex["default"].prototype.toJSON = function () {
35
39
  return {
36
40
  mathjs: 'Complex',
37
41
  re: this.re,
@@ -45,7 +49,7 @@ var createComplexClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies
45
49
  */
46
50
 
47
51
 
48
- _complex.default.prototype.toPolar = function () {
52
+ _complex["default"].prototype.toPolar = function () {
49
53
  return {
50
54
  r: this.abs(),
51
55
  phi: this.arg()
@@ -62,7 +66,7 @@ var createComplexClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies
62
66
  */
63
67
 
64
68
 
65
- _complex.default.prototype.format = function (options) {
69
+ _complex["default"].prototype.format = function (options) {
66
70
  var str = '';
67
71
  var im = this.im;
68
72
  var re = this.re;
@@ -127,14 +131,14 @@ var createComplexClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies
127
131
  */
128
132
 
129
133
 
130
- _complex.default.fromPolar = function (args) {
134
+ _complex["default"].fromPolar = function (args) {
131
135
  switch (arguments.length) {
132
136
  case 1:
133
137
  {
134
138
  var arg = arguments[0];
135
139
 
136
- if ((0, _typeof2.default)(arg) === 'object') {
137
- return (0, _complex.default)(arg);
140
+ if ((0, _typeof2["default"])(arg) === 'object') {
141
+ return (0, _complex["default"])(arg);
138
142
  } else {
139
143
  throw new TypeError('Input has to be an object with r and phi keys.');
140
144
  }
@@ -152,7 +156,7 @@ var createComplexClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies
152
156
  }
153
157
 
154
158
  if ((0, _is.isNumber)(phi)) {
155
- return new _complex.default({
159
+ return new _complex["default"]({
156
160
  r: r,
157
161
  phi: phi
158
162
  });
@@ -169,7 +173,7 @@ var createComplexClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies
169
173
  }
170
174
  };
171
175
 
172
- _complex.default.prototype.valueOf = _complex.default.prototype.toString;
176
+ _complex["default"].prototype.valueOf = _complex["default"].prototype.toString;
173
177
  /**
174
178
  * Create a Complex number from a JSON object
175
179
  * @param {Object} json A JSON Object structured as
@@ -179,8 +183,8 @@ var createComplexClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies
179
183
  * @return {Complex} Returns a new Complex number
180
184
  */
181
185
 
182
- _complex.default.fromJSON = function (json) {
183
- return new _complex.default(json);
186
+ _complex["default"].fromJSON = function (json) {
187
+ return new _complex["default"](json);
184
188
  };
185
189
  /**
186
190
  * Compare two complex numbers, `a` and `b`:
@@ -199,7 +203,7 @@ var createComplexClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies
199
203
  */
200
204
 
201
205
 
202
- _complex.default.compare = function (a, b) {
206
+ _complex["default"].compare = function (a, b) {
203
207
  if (a.re > b.re) {
204
208
  return 1;
205
209
  }
@@ -219,7 +223,7 @@ var createComplexClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies
219
223
  return 0;
220
224
  };
221
225
 
222
- return _complex.default;
226
+ return _complex["default"];
223
227
  }, {
224
228
  isClass: true
225
229
  });
@@ -76,7 +76,7 @@ var createComplex = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
76
76
  string: function string(x) {
77
77
  return Complex(x); // for example '2 + 3i'
78
78
  },
79
- null: function _null(x) {
79
+ "null": function _null(x) {
80
80
  return Complex(0);
81
81
  },
82
82
  Object: function Object(x) {
@@ -90,9 +90,11 @@ var createComplex = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
90
90
 
91
91
  throw new Error('Expected object with properties (re and im) or (r and phi) or (abs and arg)');
92
92
  },
93
- 'Array | Matrix': function ArrayMatrix(x) {
94
- return (0, _collection.deepMap)(x, this);
95
- }
93
+ 'Array | Matrix': typed.referToSelf(function (self) {
94
+ return function (x) {
95
+ return (0, _collection.deepMap)(x, self);
96
+ };
97
+ })
96
98
  });
97
99
  });
98
100
  exports.createComplex = createComplex;
@@ -17,15 +17,19 @@ var createFractionClass = /* #__PURE__ */(0, _factory.factory)(name, dependencie
17
17
  /**
18
18
  * Attach type information
19
19
  */
20
- _fraction.default.prototype.type = 'Fraction';
21
- _fraction.default.prototype.isFraction = true;
20
+ Object.defineProperty(_fraction["default"], 'name', {
21
+ value: 'Fraction'
22
+ });
23
+ _fraction["default"].prototype.constructor = _fraction["default"];
24
+ _fraction["default"].prototype.type = 'Fraction';
25
+ _fraction["default"].prototype.isFraction = true;
22
26
  /**
23
27
  * Get a JSON representation of a Fraction containing type information
24
28
  * @returns {Object} Returns a JSON object structured as:
25
29
  * `{"mathjs": "Fraction", "n": 3, "d": 8}`
26
30
  */
27
31
 
28
- _fraction.default.prototype.toJSON = function () {
32
+ _fraction["default"].prototype.toJSON = function () {
29
33
  return {
30
34
  mathjs: 'Fraction',
31
35
  n: this.s * this.n,
@@ -40,11 +44,11 @@ var createFractionClass = /* #__PURE__ */(0, _factory.factory)(name, dependencie
40
44
  */
41
45
 
42
46
 
43
- _fraction.default.fromJSON = function (json) {
44
- return new _fraction.default(json);
47
+ _fraction["default"].fromJSON = function (json) {
48
+ return new _fraction["default"](json);
45
49
  };
46
50
 
47
- return _fraction.default;
51
+ return _fraction["default"];
48
52
  }, {
49
53
  isClass: true
50
54
  });
@@ -66,7 +66,7 @@ var createFraction = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
66
66
  'number, number': function numberNumber(numerator, denominator) {
67
67
  return new Fraction(numerator, denominator);
68
68
  },
69
- null: function _null(x) {
69
+ "null": function _null(x) {
70
70
  return new Fraction(0);
71
71
  },
72
72
  BigNumber: function BigNumber(x) {
@@ -78,9 +78,11 @@ var createFraction = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
78
78
  Object: function Object(x) {
79
79
  return new Fraction(x);
80
80
  },
81
- 'Array | Matrix': function ArrayMatrix(x) {
82
- return (0, _collection.deepMap)(x, this);
83
- }
81
+ 'Array | Matrix': typed.referToSelf(function (self) {
82
+ return function (x) {
83
+ return (0, _collection.deepMap)(x, self);
84
+ };
85
+ })
84
86
  });
85
87
  });
86
88
  exports.createFraction = createFraction;
@@ -23,7 +23,9 @@ var _DimensionError = require("../../error/DimensionError.js");
23
23
 
24
24
  var _factory = require("../../utils/factory.js");
25
25
 
26
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
26
+ var _function = require("../../utils/function.js");
27
+
28
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
27
29
 
28
30
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
29
31
 
@@ -101,6 +103,10 @@ var createDenseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependen
101
103
  */
102
104
 
103
105
 
106
+ Object.defineProperty(DenseMatrix, 'name', {
107
+ value: 'DenseMatrix'
108
+ });
109
+ DenseMatrix.prototype.constructor = DenseMatrix;
104
110
  DenseMatrix.prototype.type = 'DenseMatrix';
105
111
  DenseMatrix.prototype.isDenseMatrix = true;
106
112
  /**
@@ -600,6 +606,7 @@ var createDenseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependen
600
606
  DenseMatrix.prototype.map = function (callback) {
601
607
  // matrix instance
602
608
  var me = this;
609
+ var args = (0, _function.maxArgumentCount)(callback);
603
610
 
604
611
  var recurse = function recurse(value, index) {
605
612
  if ((0, _is.isArray)(value)) {
@@ -607,7 +614,15 @@ var createDenseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependen
607
614
  return recurse(child, index.concat(i));
608
615
  });
609
616
  } else {
610
- return callback(value, index, me);
617
+ // invoke the callback function with the right number of arguments
618
+ if (args === 1) {
619
+ return callback(value);
620
+ } else if (args === 2) {
621
+ return callback(value, index);
622
+ } else {
623
+ // 3 or -1
624
+ return callback(value, index, me);
625
+ }
611
626
  }
612
627
  }; // determine the new datatype when the original matrix has datatype defined
613
628
  // TODO: should be done in matrix constructor instead
@@ -648,15 +663,15 @@ var createDenseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependen
648
663
  */
649
664
 
650
665
 
651
- DenseMatrix.prototype[Symbol.iterator] = /*#__PURE__*/_regenerator.default.mark(function _callee() {
666
+ DenseMatrix.prototype[Symbol.iterator] = /*#__PURE__*/_regenerator["default"].mark(function _callee() {
652
667
  var recurse;
653
- return _regenerator.default.wrap(function _callee$(_context2) {
668
+ return _regenerator["default"].wrap(function _callee$(_context2) {
654
669
  while (1) {
655
670
  switch (_context2.prev = _context2.next) {
656
671
  case 0:
657
- recurse = /*#__PURE__*/_regenerator.default.mark(function recurse(value, index) {
672
+ recurse = /*#__PURE__*/_regenerator["default"].mark(function recurse(value, index) {
658
673
  var i;
659
- return _regenerator.default.wrap(function recurse$(_context) {
674
+ return _regenerator["default"].wrap(function recurse$(_context) {
660
675
  while (1) {
661
676
  switch (_context.prev = _context.next) {
662
677
  case 0: