mathjs 10.1.1 → 10.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (369) hide show
  1. package/HISTORY.md +43 -0
  2. package/docs/expressions/algebra.md +27 -0
  3. package/docs/expressions/syntax.md +31 -2
  4. package/docs/reference/functions/abs.md +6 -0
  5. package/docs/reference/functions/acos.md +6 -0
  6. package/docs/reference/functions/acosh.md +6 -0
  7. package/docs/reference/functions/acot.md +6 -0
  8. package/docs/reference/functions/acoth.md +6 -0
  9. package/docs/reference/functions/acsc.md +6 -0
  10. package/docs/reference/functions/acsch.md +6 -0
  11. package/docs/reference/functions/add.md +6 -0
  12. package/docs/reference/functions/and.md +6 -0
  13. package/docs/reference/functions/apply.md +6 -0
  14. package/docs/reference/functions/arg.md +6 -0
  15. package/docs/reference/functions/asec.md +6 -0
  16. package/docs/reference/functions/asech.md +6 -0
  17. package/docs/reference/functions/asin.md +6 -0
  18. package/docs/reference/functions/asinh.md +6 -0
  19. package/docs/reference/functions/atan.md +6 -0
  20. package/docs/reference/functions/atan2.md +6 -0
  21. package/docs/reference/functions/atanh.md +6 -0
  22. package/docs/reference/functions/bellNumbers.md +6 -0
  23. package/docs/reference/functions/bin.md +6 -0
  24. package/docs/reference/functions/bitAnd.md +6 -0
  25. package/docs/reference/functions/bitNot.md +6 -0
  26. package/docs/reference/functions/bitOr.md +6 -0
  27. package/docs/reference/functions/bitXor.md +6 -0
  28. package/docs/reference/functions/catalan.md +6 -0
  29. package/docs/reference/functions/cbrt.md +6 -0
  30. package/docs/reference/functions/ceil.md +6 -0
  31. package/docs/reference/functions/clone.md +6 -0
  32. package/docs/reference/functions/column.md +6 -0
  33. package/docs/reference/functions/combinations.md +6 -0
  34. package/docs/reference/functions/combinationsWithRep.md +6 -0
  35. package/docs/reference/functions/compare.md +6 -0
  36. package/docs/reference/functions/compareNatural.md +6 -0
  37. package/docs/reference/functions/compareText.md +6 -0
  38. package/docs/reference/functions/compile.md +6 -0
  39. package/docs/reference/functions/composition.md +6 -0
  40. package/docs/reference/functions/concat.md +6 -0
  41. package/docs/reference/functions/conj.md +6 -0
  42. package/docs/reference/functions/cos.md +6 -0
  43. package/docs/reference/functions/cosh.md +6 -0
  44. package/docs/reference/functions/cot.md +6 -0
  45. package/docs/reference/functions/coth.md +6 -0
  46. package/docs/reference/functions/count.md +6 -0
  47. package/docs/reference/functions/cross.md +6 -0
  48. package/docs/reference/functions/csc.md +6 -0
  49. package/docs/reference/functions/csch.md +6 -0
  50. package/docs/reference/functions/ctranspose.md +6 -0
  51. package/docs/reference/functions/cube.md +6 -0
  52. package/docs/reference/functions/cumsum.md +57 -0
  53. package/docs/reference/functions/deepEqual.md +6 -0
  54. package/docs/reference/functions/derivative.md +6 -0
  55. package/docs/reference/functions/det.md +6 -0
  56. package/docs/reference/functions/diag.md +6 -0
  57. package/docs/reference/functions/diff.md +6 -0
  58. package/docs/reference/functions/distance.md +6 -0
  59. package/docs/reference/functions/divide.md +6 -0
  60. package/docs/reference/functions/dot.md +6 -0
  61. package/docs/reference/functions/dotDivide.md +6 -0
  62. package/docs/reference/functions/dotMultiply.md +6 -0
  63. package/docs/reference/functions/dotPow.md +6 -0
  64. package/docs/reference/functions/eigs.md +6 -0
  65. package/docs/reference/functions/equal.md +6 -0
  66. package/docs/reference/functions/equalText.md +6 -0
  67. package/docs/reference/functions/erf.md +6 -0
  68. package/docs/reference/functions/evaluate.md +6 -0
  69. package/docs/reference/functions/exp.md +6 -0
  70. package/docs/reference/functions/expm.md +6 -0
  71. package/docs/reference/functions/expm1.md +6 -0
  72. package/docs/reference/functions/factorial.md +6 -0
  73. package/docs/reference/functions/filter.md +6 -0
  74. package/docs/reference/functions/fix.md +6 -0
  75. package/docs/reference/functions/flatten.md +6 -0
  76. package/docs/reference/functions/floor.md +6 -0
  77. package/docs/reference/functions/forEach.md +6 -0
  78. package/docs/reference/functions/format.md +7 -1
  79. package/docs/reference/functions/gamma.md +6 -0
  80. package/docs/reference/functions/gcd.md +6 -0
  81. package/docs/reference/functions/getMatrixDataType.md +6 -0
  82. package/docs/reference/functions/hasNumericValue.md +6 -0
  83. package/docs/reference/functions/help.md +6 -0
  84. package/docs/reference/functions/hex.md +6 -0
  85. package/docs/reference/functions/hypot.md +6 -0
  86. package/docs/reference/functions/identity.md +6 -0
  87. package/docs/reference/functions/im.md +6 -0
  88. package/docs/reference/functions/intersect.md +6 -0
  89. package/docs/reference/functions/inv.md +6 -0
  90. package/docs/reference/functions/invmod.md +6 -0
  91. package/docs/reference/functions/isInteger.md +6 -0
  92. package/docs/reference/functions/isNaN.md +6 -0
  93. package/docs/reference/functions/isNegative.md +6 -0
  94. package/docs/reference/functions/isNumeric.md +6 -0
  95. package/docs/reference/functions/isPositive.md +6 -0
  96. package/docs/reference/functions/isPrime.md +6 -0
  97. package/docs/reference/functions/isZero.md +6 -0
  98. package/docs/reference/functions/kldivergence.md +6 -0
  99. package/docs/reference/functions/kron.md +6 -0
  100. package/docs/reference/functions/larger.md +6 -0
  101. package/docs/reference/functions/largerEq.md +6 -0
  102. package/docs/reference/functions/lcm.md +6 -0
  103. package/docs/reference/functions/leafCount.md +52 -0
  104. package/docs/reference/functions/leftShift.md +6 -0
  105. package/docs/reference/functions/log.md +6 -0
  106. package/docs/reference/functions/log10.md +6 -0
  107. package/docs/reference/functions/log1p.md +6 -0
  108. package/docs/reference/functions/log2.md +6 -0
  109. package/docs/reference/functions/lsolve.md +6 -0
  110. package/docs/reference/functions/lsolveAll.md +6 -0
  111. package/docs/reference/functions/lup.md +6 -0
  112. package/docs/reference/functions/lusolve.md +6 -0
  113. package/docs/reference/functions/mad.md +6 -0
  114. package/docs/reference/functions/map.md +28 -5
  115. package/docs/reference/functions/matrixFromColumns.md +6 -0
  116. package/docs/reference/functions/matrixFromFunction.md +6 -0
  117. package/docs/reference/functions/matrixFromRows.md +6 -0
  118. package/docs/reference/functions/max.md +6 -0
  119. package/docs/reference/functions/mean.md +6 -0
  120. package/docs/reference/functions/median.md +6 -0
  121. package/docs/reference/functions/min.md +6 -0
  122. package/docs/reference/functions/mod.md +6 -0
  123. package/docs/reference/functions/mode.md +6 -0
  124. package/docs/reference/functions/multinomial.md +6 -0
  125. package/docs/reference/functions/multiply.md +6 -0
  126. package/docs/reference/functions/norm.md +6 -0
  127. package/docs/reference/functions/not.md +6 -0
  128. package/docs/reference/functions/nthRoot.md +6 -0
  129. package/docs/reference/functions/nthRoots.md +6 -0
  130. package/docs/reference/functions/numeric.md +6 -0
  131. package/docs/reference/functions/oct.md +6 -0
  132. package/docs/reference/functions/ones.md +6 -0
  133. package/docs/reference/functions/or.md +6 -0
  134. package/docs/reference/functions/parser.md +6 -0
  135. package/docs/reference/functions/partitionSelect.md +6 -0
  136. package/docs/reference/functions/permutations.md +6 -0
  137. package/docs/reference/functions/pickRandom.md +6 -0
  138. package/docs/reference/functions/pow.md +6 -0
  139. package/docs/reference/functions/print.md +6 -0
  140. package/docs/reference/functions/prod.md +6 -0
  141. package/docs/reference/functions/qr.md +6 -0
  142. package/docs/reference/functions/quantileSeq.md +6 -0
  143. package/docs/reference/functions/random.md +6 -0
  144. package/docs/reference/functions/randomInt.md +6 -0
  145. package/docs/reference/functions/range.md +6 -0
  146. package/docs/reference/functions/rationalize.md +7 -1
  147. package/docs/reference/functions/re.md +6 -0
  148. package/docs/reference/functions/reshape.md +7 -0
  149. package/docs/reference/functions/resize.md +6 -0
  150. package/docs/reference/functions/resolve.md +46 -0
  151. package/docs/reference/functions/rightArithShift.md +6 -0
  152. package/docs/reference/functions/rightLogShift.md +6 -0
  153. package/docs/reference/functions/rotate.md +6 -0
  154. package/docs/reference/functions/rotationMatrix.md +6 -0
  155. package/docs/reference/functions/round.md +6 -0
  156. package/docs/reference/functions/row.md +6 -0
  157. package/docs/reference/functions/sec.md +6 -0
  158. package/docs/reference/functions/sech.md +6 -0
  159. package/docs/reference/functions/setCartesian.md +6 -0
  160. package/docs/reference/functions/setDifference.md +6 -0
  161. package/docs/reference/functions/setDistinct.md +6 -0
  162. package/docs/reference/functions/setIntersect.md +6 -0
  163. package/docs/reference/functions/setIsSubset.md +6 -0
  164. package/docs/reference/functions/setMultiplicity.md +6 -0
  165. package/docs/reference/functions/setPowerset.md +6 -0
  166. package/docs/reference/functions/setSize.md +6 -0
  167. package/docs/reference/functions/setSymDifference.md +6 -0
  168. package/docs/reference/functions/setUnion.md +6 -0
  169. package/docs/reference/functions/sign.md +6 -0
  170. package/docs/reference/functions/simplify.md +43 -6
  171. package/docs/reference/functions/simplifyCore.md +50 -0
  172. package/docs/reference/functions/sin.md +6 -0
  173. package/docs/reference/functions/sinh.md +6 -0
  174. package/docs/reference/functions/size.md +6 -0
  175. package/docs/reference/functions/slu.md +6 -0
  176. package/docs/reference/functions/smaller.md +6 -0
  177. package/docs/reference/functions/smallerEq.md +6 -0
  178. package/docs/reference/functions/sort.md +6 -0
  179. package/docs/reference/functions/sqrt.md +6 -0
  180. package/docs/reference/functions/sqrtm.md +6 -0
  181. package/docs/reference/functions/square.md +6 -0
  182. package/docs/reference/functions/squeeze.md +6 -0
  183. package/docs/reference/functions/std.md +6 -0
  184. package/docs/reference/functions/stirlingS2.md +6 -0
  185. package/docs/reference/functions/subset.md +16 -2
  186. package/docs/reference/functions/subtract.md +6 -0
  187. package/docs/reference/functions/sum.md +8 -1
  188. package/docs/reference/functions/symbolicEqual.md +62 -0
  189. package/docs/reference/functions/tan.md +6 -0
  190. package/docs/reference/functions/tanh.md +6 -0
  191. package/docs/reference/functions/to.md +6 -0
  192. package/docs/reference/functions/trace.md +6 -0
  193. package/docs/reference/functions/transpose.md +6 -0
  194. package/docs/reference/functions/typeOf.md +6 -0
  195. package/docs/reference/functions/unaryMinus.md +6 -0
  196. package/docs/reference/functions/unaryPlus.md +6 -0
  197. package/docs/reference/functions/unequal.md +6 -0
  198. package/docs/reference/functions/usolve.md +6 -0
  199. package/docs/reference/functions/usolveAll.md +6 -0
  200. package/docs/reference/functions/variance.md +6 -0
  201. package/docs/reference/functions/xgcd.md +6 -0
  202. package/docs/reference/functions/xor.md +6 -0
  203. package/docs/reference/functions/zeros.md +6 -0
  204. package/docs/reference/functions.md +6 -1
  205. package/lib/browser/math.js +6 -6
  206. package/lib/browser/math.js.map +1 -1
  207. package/lib/cjs/core/create.js +4 -4
  208. package/lib/cjs/core/function/import.js +3 -3
  209. package/lib/cjs/core/function/typed.js +2 -2
  210. package/lib/cjs/defaultInstance.js +3 -3
  211. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  212. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  213. package/lib/cjs/entry/configReadonly.js +1 -1
  214. package/lib/cjs/entry/dependenciesAny/dependenciesCumSum.generated.js +26 -0
  215. package/lib/cjs/entry/dependenciesAny/dependenciesCumSumTransform.generated.js +26 -0
  216. package/lib/cjs/entry/dependenciesAny/dependenciesLeafCount.generated.js +23 -0
  217. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  218. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +32 -0
  219. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +6 -0
  220. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +65 -0
  221. package/lib/cjs/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +29 -0
  222. package/lib/cjs/entry/dependenciesAny.generated.js +48 -0
  223. package/lib/cjs/entry/dependenciesNumber/dependenciesCumSum.generated.js +26 -0
  224. package/lib/cjs/entry/dependenciesNumber/dependenciesCumSumTransform.generated.js +26 -0
  225. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  226. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +32 -0
  227. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +6 -0
  228. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +65 -0
  229. package/lib/cjs/entry/dependenciesNumber.generated.js +32 -0
  230. package/lib/cjs/entry/impureFunctionsAny.generated.js +85 -33
  231. package/lib/cjs/entry/impureFunctionsNumber.generated.js +102 -64
  232. package/lib/cjs/entry/pureFunctionsAny.generated.js +68 -64
  233. package/lib/cjs/entry/pureFunctionsNumber.generated.js +51 -47
  234. package/lib/cjs/expression/Help.js +4 -0
  235. package/lib/cjs/expression/Parser.js +1 -1
  236. package/lib/cjs/expression/embeddedDocs/construction/fraction.js +3 -3
  237. package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
  238. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +250 -235
  239. package/lib/cjs/expression/embeddedDocs/function/algebra/leafCount.js +15 -0
  240. package/lib/cjs/expression/embeddedDocs/function/algebra/resolve.js +16 -0
  241. package/lib/cjs/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  242. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +15 -0
  243. package/lib/cjs/expression/embeddedDocs/function/algebra/symbolicEqual.js +15 -0
  244. package/lib/cjs/expression/embeddedDocs/function/matrix/subset.js +2 -2
  245. package/lib/cjs/expression/embeddedDocs/function/statistics/cumsum.js +15 -0
  246. package/lib/cjs/expression/node/FunctionNode.js +80 -61
  247. package/lib/cjs/expression/node/IndexNode.js +1 -1
  248. package/lib/cjs/expression/node/Node.js +3 -3
  249. package/lib/cjs/expression/node/ObjectNode.js +1 -1
  250. package/lib/cjs/expression/node/utils/access.js +1 -1
  251. package/lib/cjs/expression/node/utils/assign.js +1 -1
  252. package/lib/cjs/expression/parse.js +13 -13
  253. package/lib/cjs/expression/transform/cumsum.transform.js +57 -0
  254. package/lib/cjs/expression/transform/sum.transform.js +1 -1
  255. package/lib/cjs/factoriesAny.js +48 -0
  256. package/lib/cjs/factoriesNumber.js +33 -1
  257. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  258. package/lib/cjs/function/algebra/leafCount.js +66 -0
  259. package/lib/cjs/function/algebra/rationalize.js +24 -41
  260. package/lib/cjs/function/algebra/resolve.js +106 -0
  261. package/lib/cjs/function/algebra/simplify/simplifyConstant.js +5 -5
  262. package/lib/cjs/function/algebra/simplify/util.js +171 -33
  263. package/lib/cjs/function/algebra/simplify.js +562 -207
  264. package/lib/cjs/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +68 -44
  265. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  266. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  267. package/lib/cjs/function/algebra/symbolicEqual.js +88 -0
  268. package/lib/cjs/function/arithmetic/ceil.js +3 -3
  269. package/lib/cjs/function/arithmetic/floor.js +3 -3
  270. package/lib/cjs/function/arithmetic/invmod.js +1 -1
  271. package/lib/cjs/function/arithmetic/norm.js +1 -1
  272. package/lib/cjs/function/arithmetic/round.js +1 -1
  273. package/lib/cjs/function/matrix/eigs/complexEigs.js +13 -11
  274. package/lib/cjs/function/matrix/map.js +53 -15
  275. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  276. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  277. package/lib/cjs/function/matrix/subset.js +15 -5
  278. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  279. package/lib/cjs/function/relational/compareNatural.js +6 -6
  280. package/lib/cjs/function/statistics/cumsum.js +151 -0
  281. package/lib/cjs/function/statistics/sum.js +1 -1
  282. package/lib/cjs/function/string/format.js +1 -1
  283. package/lib/cjs/header.js +2 -2
  284. package/lib/cjs/plain/bignumber/index.js +1 -1
  285. package/lib/cjs/plain/number/combinations.js +18 -6
  286. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  287. package/lib/cjs/type/bignumber/function/bignumber.js +1 -1
  288. package/lib/cjs/type/boolean.js +2 -2
  289. package/lib/cjs/type/complex/Complex.js +14 -14
  290. package/lib/cjs/type/complex/function/complex.js +1 -1
  291. package/lib/cjs/type/fraction/Fraction.js +6 -6
  292. package/lib/cjs/type/fraction/function/fraction.js +21 -9
  293. package/lib/cjs/type/matrix/DenseMatrix.js +5 -5
  294. package/lib/cjs/type/matrix/SparseMatrix.js +2 -2
  295. package/lib/cjs/type/number.js +1 -1
  296. package/lib/cjs/type/string.js +2 -2
  297. package/lib/cjs/type/unit/Unit.js +8 -8
  298. package/lib/cjs/utils/collection.js +3 -27
  299. package/lib/cjs/utils/customs.js +2 -2
  300. package/lib/cjs/utils/emitter.js +1 -1
  301. package/lib/cjs/utils/function.js +2 -2
  302. package/lib/cjs/utils/is.js +6 -6
  303. package/lib/cjs/utils/latex.js +3 -3
  304. package/lib/cjs/utils/lruQueue.js +1 -1
  305. package/lib/cjs/utils/map.js +3 -3
  306. package/lib/cjs/utils/object.js +2 -2
  307. package/lib/cjs/utils/snapshot.js +7 -7
  308. package/lib/cjs/utils/string.js +2 -2
  309. package/lib/cjs/utils/switch.js +31 -0
  310. package/lib/cjs/version.js +1 -1
  311. package/lib/esm/entry/dependenciesAny/dependenciesCumSum.generated.js +14 -0
  312. package/lib/esm/entry/dependenciesAny/dependenciesCumSumTransform.generated.js +14 -0
  313. package/lib/esm/entry/dependenciesAny/dependenciesLeafCount.generated.js +12 -0
  314. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  315. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +18 -0
  316. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +4 -0
  317. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +40 -0
  318. package/lib/esm/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +16 -0
  319. package/lib/esm/entry/dependenciesAny.generated.js +6 -0
  320. package/lib/esm/entry/dependenciesNumber/dependenciesCumSum.generated.js +14 -0
  321. package/lib/esm/entry/dependenciesNumber/dependenciesCumSumTransform.generated.js +14 -0
  322. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  323. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +18 -0
  324. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +4 -0
  325. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +40 -0
  326. package/lib/esm/entry/dependenciesNumber.generated.js +4 -0
  327. package/lib/esm/entry/impureFunctionsAny.generated.js +74 -26
  328. package/lib/esm/entry/impureFunctionsNumber.generated.js +89 -53
  329. package/lib/esm/entry/pureFunctionsAny.generated.js +54 -49
  330. package/lib/esm/entry/pureFunctionsNumber.generated.js +36 -31
  331. package/lib/esm/expression/Help.js +4 -0
  332. package/lib/esm/expression/embeddedDocs/construction/fraction.js +3 -3
  333. package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
  334. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +222 -212
  335. package/lib/esm/expression/embeddedDocs/function/algebra/leafCount.js +8 -0
  336. package/lib/esm/expression/embeddedDocs/function/algebra/resolve.js +9 -0
  337. package/lib/esm/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  338. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +8 -0
  339. package/lib/esm/expression/embeddedDocs/function/algebra/symbolicEqual.js +8 -0
  340. package/lib/esm/expression/embeddedDocs/function/matrix/subset.js +2 -2
  341. package/lib/esm/expression/embeddedDocs/function/statistics/cumsum.js +8 -0
  342. package/lib/esm/expression/node/FunctionNode.js +70 -53
  343. package/lib/esm/expression/transform/cumsum.transform.js +48 -0
  344. package/lib/esm/expression/transform/sum.transform.js +1 -1
  345. package/lib/esm/factoriesAny.js +6 -0
  346. package/lib/esm/factoriesNumber.js +4 -0
  347. package/lib/esm/function/algebra/leafCount.js +59 -0
  348. package/lib/esm/function/algebra/rationalize.js +24 -40
  349. package/lib/esm/function/algebra/resolve.js +95 -0
  350. package/lib/esm/function/algebra/simplify/simplifyConstant.js +3 -3
  351. package/lib/esm/function/algebra/simplify/util.js +170 -34
  352. package/lib/esm/function/algebra/simplify.js +557 -202
  353. package/lib/esm/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +61 -45
  354. package/lib/esm/function/algebra/symbolicEqual.js +80 -0
  355. package/lib/esm/function/matrix/eigs/complexEigs.js +8 -6
  356. package/lib/esm/function/matrix/map.js +53 -15
  357. package/lib/esm/function/matrix/subset.js +15 -5
  358. package/lib/esm/function/statistics/cumsum.js +139 -0
  359. package/lib/esm/function/statistics/sum.js +1 -1
  360. package/lib/esm/function/string/format.js +1 -1
  361. package/lib/esm/plain/number/combinations.js +18 -6
  362. package/lib/esm/type/fraction/function/fraction.js +20 -8
  363. package/lib/esm/utils/collection.js +1 -26
  364. package/lib/esm/utils/switch.js +24 -0
  365. package/lib/esm/version.js +1 -1
  366. package/package.json +15 -10
  367. package/types/index.d.ts +155 -13
  368. package/lib/cjs/function/algebra/simplify/resolve.js +0 -76
  369. package/lib/esm/function/algebra/simplify/resolve.js +0 -67
@@ -5,12 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createSimplifyCore = void 0;
7
7
 
8
- var _is = require("../../../utils/is.js");
8
+ var _is = require("../../utils/is.js");
9
9
 
10
- var _factory = require("../../../utils/factory.js");
10
+ var _util = require("./simplify/util.js");
11
+
12
+ var _factory = require("../../utils/factory.js");
11
13
 
12
14
  var name = 'simplifyCore';
13
- var dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode'];
15
+ var dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
14
16
  var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
15
17
  var equal = _ref.equal,
16
18
  isZero = _ref.isZero,
@@ -26,15 +28,18 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
26
28
  IndexNode = _ref.IndexNode,
27
29
  ObjectNode = _ref.ObjectNode,
28
30
  OperatorNode = _ref.OperatorNode,
29
- ParenthesisNode = _ref.ParenthesisNode;
31
+ ParenthesisNode = _ref.ParenthesisNode,
32
+ SymbolNode = _ref.SymbolNode;
30
33
  var node0 = new ConstantNode(0);
31
34
  var node1 = new ConstantNode(1);
32
35
 
33
- function mapSimplifyCore(nodeArray) {
34
- return nodeArray.map(simplifyCore).map(function (arg) {
35
- return (0, _is.isParenthesisNode)(arg) ? arg.content : arg;
36
- });
37
- }
36
+ var _createUtil = (0, _util.createUtil)({
37
+ FunctionNode: FunctionNode,
38
+ OperatorNode: OperatorNode,
39
+ SymbolNode: SymbolNode
40
+ }),
41
+ hasProperty = _createUtil.hasProperty,
42
+ isCommutative = _createUtil.isCommutative;
38
43
  /**
39
44
  * simplifyCore() performs single pass simplification suitable for
40
45
  * applications requiring ultimate performance. In contrast, simplify()
@@ -43,31 +48,54 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
43
48
  *
44
49
  * Syntax:
45
50
  *
46
- * simplify.simplifyCore(expr)
51
+ * simplifyCore(expr)
47
52
  *
48
53
  * Examples:
49
54
  *
50
55
  * const f = math.parse('2 * 1 * x ^ (2 - 1)')
51
- * math.simplify.simpifyCore(f) // Node {2 * x}
52
- * math.simplify('2 * 1 * x ^ (2 - 1)', [math.simplify.simpifyCore]) // Node {2 * x}
56
+ * math.simpifyCore(f) // Node {2 * x}
57
+ * math.simplify('2 * 1 * x ^ (2 - 1)', [math.simplifyCore]) // Node {2 * x}
53
58
  *
54
59
  * See also:
55
60
  *
56
- * derivative
61
+ * simplify, resolve, derivative
57
62
  *
58
63
  * @param {Node} node
59
64
  * The expression to be simplified
65
+ * @param {Object} options
66
+ * Simplification options, as per simplify()
67
+ * @return {Node} Returns expression with basic simplifications applied
60
68
  */
61
69
 
62
70
 
63
- function simplifyCore(node) {
64
- if ((0, _is.isOperatorNode)(node) && node.isUnary()) {
65
- var a0 = simplifyCore(node.args[0]);
71
+ function simplifyCore(node, options) {
72
+ var context = options ? options.context : undefined;
66
73
 
67
- if (node.op === '+') {
68
- // unary plus
69
- return a0;
74
+ if (hasProperty(node, 'trivial', context)) {
75
+ // This node does nothing if it has only one argument, so if so,
76
+ // return that argument simplified
77
+ if ((0, _is.isFunctionNode)(node) && node.args.length === 1) {
78
+ return simplifyCore(node.args[0], options);
79
+ } // For other node types, we try the generic methods
80
+
81
+
82
+ var simpChild = false;
83
+ var childCount = 0;
84
+ node.forEach(function (c) {
85
+ ++childCount;
86
+
87
+ if (childCount === 1) {
88
+ simpChild = simplifyCore(c, options);
89
+ }
90
+ });
91
+
92
+ if (childCount === 1) {
93
+ return simpChild;
70
94
  }
95
+ }
96
+
97
+ if ((0, _is.isOperatorNode)(node) && node.isUnary()) {
98
+ var a0 = simplifyCore(node.args[0], options);
71
99
 
72
100
  if (node.op === '-') {
73
101
  // unary minus
@@ -82,9 +110,9 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
82
110
  return new OperatorNode(node.op, node.fn, [a0]);
83
111
  }
84
112
  } else if ((0, _is.isOperatorNode)(node) && node.isBinary()) {
85
- var _a = simplifyCore(node.args[0]);
113
+ var _a = simplifyCore(node.args[0], options);
86
114
 
87
- var a1 = simplifyCore(node.args[1]);
115
+ var a1 = simplifyCore(node.args[1], options);
88
116
 
89
117
  if (node.op === '+') {
90
118
  if ((0, _is.isConstantNode)(_a)) {
@@ -120,7 +148,7 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
120
148
  }
121
149
 
122
150
  if ((0, _is.isOperatorNode)(a1) && a1.isUnary() && a1.op === '-') {
123
- return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]));
151
+ return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);
124
152
  }
125
153
 
126
154
  return new OperatorNode(node.op, node.fn, [_a, a1]);
@@ -141,7 +169,7 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
141
169
  return node0;
142
170
  } else if (equal(a1.value, 1)) {
143
171
  return _a;
144
- } else if ((0, _is.isOperatorNode)(_a) && _a.isBinary() && _a.op === node.op) {
172
+ } else if ((0, _is.isOperatorNode)(_a) && _a.isBinary() && _a.op === node.op && isCommutative(node, context)) {
145
173
  var a00 = _a.args[0];
146
174
 
147
175
  if ((0, _is.isConstantNode)(a00)) {
@@ -150,7 +178,11 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
150
178
  }
151
179
  }
152
180
 
153
- return new OperatorNode(node.op, node.fn, [a1, _a], node.implicit); // constants on left
181
+ if (isCommutative(node, context)) {
182
+ return new OperatorNode(node.op, node.fn, [a1, _a], node.implicit); // constants on left
183
+ } else {
184
+ return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
185
+ }
154
186
  }
155
187
 
156
188
  return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
@@ -183,36 +215,28 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
183
215
  }
184
216
  }
185
217
  }
186
-
187
- return new OperatorNode(node.op, node.fn, [_a, a1]);
188
218
  }
189
- } else if ((0, _is.isParenthesisNode)(node)) {
190
- var c = simplifyCore(node.content);
191
219
 
192
- if ((0, _is.isParenthesisNode)(c) || (0, _is.isSymbolNode)(c) || (0, _is.isConstantNode)(c)) {
193
- return c;
194
- }
195
-
196
- return new ParenthesisNode(c);
220
+ return new OperatorNode(node.op, node.fn, [_a, a1]);
197
221
  } else if ((0, _is.isFunctionNode)(node)) {
198
- return new FunctionNode(simplifyCore(node.fn), mapSimplifyCore(node.args));
222
+ return new FunctionNode(simplifyCore(node.fn), node.args.map(function (n) {
223
+ return simplifyCore(n, options);
224
+ }));
199
225
  } else if ((0, _is.isArrayNode)(node)) {
200
- return new ArrayNode(mapSimplifyCore(node.items));
226
+ return new ArrayNode(node.items.map(function (n) {
227
+ return simplifyCore(n, options);
228
+ }));
201
229
  } else if ((0, _is.isAccessorNode)(node)) {
202
- var obj = mapSimplifyCore(node.object);
203
-
204
- if ((0, _is.isParenthesisNode)(obj)) {
205
- obj = obj.content;
206
- }
207
-
208
- return new AccessorNode(obj, simplifyCore(node.index));
230
+ return new AccessorNode(simplifyCore(node.object, options), simplifyCore(node.index, options));
209
231
  } else if ((0, _is.isIndexNode)(node)) {
210
- return new IndexNode(mapSimplifyCore(node.dimensions));
232
+ return new IndexNode(node.dimensions.map(function (n) {
233
+ return simplifyCore(n, options);
234
+ }));
211
235
  } else if ((0, _is.isObjectNode)(node)) {
212
236
  var newProps = {};
213
237
 
214
238
  for (var prop in node.properties) {
215
- newProps[prop] = simplifyCore(node.properties[prop]);
239
+ newProps[prop] = simplifyCore(node.properties[prop], options);
216
240
  }
217
241
 
218
242
  return new ObjectNode(newProps);
@@ -107,7 +107,7 @@ var createLsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
107
107
  }
108
108
  } else if (k === 0) {
109
109
  // singular row, RHS is zero
110
- var bNew = (0, _toConsumableArray2["default"])(b);
110
+ var bNew = (0, _toConsumableArray2.default)(b);
111
111
  bNew[i] = 1;
112
112
 
113
113
  for (var _j = i + 1; _j < columns; _j++) {
@@ -187,7 +187,7 @@ var createLsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
187
187
  }
188
188
  } else if (k === 0) {
189
189
  // singular row, RHS is zero
190
- var bNew = (0, _toConsumableArray2["default"])(b);
190
+ var bNew = (0, _toConsumableArray2.default)(b);
191
191
  bNew[i] = 1;
192
192
 
193
193
  for (var _j3 = 0, _lastIndex2 = iIndices.length; _j3 < _lastIndex2; _j3++) {
@@ -107,7 +107,7 @@ var createUsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
107
107
  }
108
108
  } else if (k === 0) {
109
109
  // singular row, RHS is zero
110
- var bNew = (0, _toConsumableArray2["default"])(b);
110
+ var bNew = (0, _toConsumableArray2.default)(b);
111
111
  bNew[i] = 1;
112
112
 
113
113
  for (var _j = i - 1; _j >= 0; _j--) {
@@ -187,7 +187,7 @@ var createUsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
187
187
  }
188
188
  } else if (k === 0) {
189
189
  // singular row, RHS is zero
190
- var bNew = (0, _toConsumableArray2["default"])(b);
190
+ var bNew = (0, _toConsumableArray2.default)(b);
191
191
  bNew[i] = 1; // loop upper triangular
192
192
 
193
193
  for (var _j3 = 0, _lastIndex2 = iIndices.length; _j3 < _lastIndex2; _j3++) {
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSymbolicEqual = void 0;
7
+
8
+ var _is = require("../../utils/is.js");
9
+
10
+ var _factory = require("../../utils/factory.js");
11
+
12
+ var name = 'symbolicEqual';
13
+ var dependencies = ['parse', 'simplify', 'typed', 'OperatorNode'];
14
+ var createSymbolicEqual = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
15
+ var parse = _ref.parse,
16
+ simplify = _ref.simplify,
17
+ typed = _ref.typed,
18
+ OperatorNode = _ref.OperatorNode;
19
+
20
+ /**
21
+ * Attempts to determine if two expressions are symbolically equal, i.e.
22
+ * one is the result of valid algebraic manipulations on the other.
23
+ * Currently, this simply checks if the difference of the two expressions
24
+ * simplifies down to 0. So there are two important caveats:
25
+ * 1. whether two expressions are symbolically equal depends on the
26
+ * manipulations allowed. Therefore, this function takes an optional
27
+ * third argument, which are the options that control the behavior
28
+ * as documented for the `simplify()` function.
29
+ * 2. it is in general intractable to find the minimal simplification of
30
+ * an arbitrarily complicated expression. So while a `true` value
31
+ * of `symbolicEqual` ensures that the two expressions can be manipulated
32
+ * to match each other, a `false` value does not absolutely rule this out.
33
+ *
34
+ * Syntax:
35
+ *
36
+ * symbolicEqual(expr1, expr2)
37
+ * symbolicEqual(expr1, expr2, options)
38
+ *
39
+ * Examples:
40
+ *
41
+ * symbolicEqual('x*y', 'y*x') // true
42
+ * symbolicEqual('x*y', 'y*x', {context: {multiply: {commutative: false}}})
43
+ * //false
44
+ * symbolicEqual('x/y', '(y*x^(-1))^(-1)') // true
45
+ * symbolicEqual('abs(x)','x') // false
46
+ * symbolicEqual('abs(x)','x', simplify.positiveContext) // true
47
+ *
48
+ * See also:
49
+ *
50
+ * simplify, evaluate
51
+ *
52
+ * @param {Node|string} expr1 The first expression to compare
53
+ * @param {Node|string} expr2 The second expression to compare
54
+ * @param {Object} [options] Optional option object, passed to simplify
55
+ * @returns {boolean}
56
+ * Returns true if a valid manipulation making the expressions equal
57
+ * is found.
58
+ */
59
+ return typed(name, {
60
+ 'string, string': function stringString(s1, s2) {
61
+ return this(parse(s1), parse(s2), {});
62
+ },
63
+ 'string, string, Object': function stringStringObject(s1, s2, options) {
64
+ return this(parse(s1), parse(s2), options);
65
+ },
66
+ 'Node, string': function NodeString(e1, s2) {
67
+ return this(e1, parse(s2), {});
68
+ },
69
+ 'Node, string, Object': function NodeStringObject(e1, s2, options) {
70
+ return this(e1, parse(s2), options);
71
+ },
72
+ 'string, Node': function stringNode(s1, e2) {
73
+ return this(parse(s1), e2, {});
74
+ },
75
+ 'string, Node, Object': function stringNodeObject(s1, e2, options) {
76
+ return this(parse(s1), e2, options);
77
+ },
78
+ 'Node, Node': function NodeNode(e1, e2) {
79
+ return this(e1, e2, {});
80
+ },
81
+ 'Node, Node, Object': function NodeNodeObject(e1, e2, options) {
82
+ var diff = new OperatorNode('-', 'subtract', [e1, e2]);
83
+ var simplified = simplify(diff, {}, options);
84
+ return (0, _is.isConstantNode)(simplified) && !simplified.value;
85
+ }
86
+ });
87
+ });
88
+ exports.createSymbolicEqual = createSymbolicEqual;
@@ -91,7 +91,7 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
91
91
  return round(x, n);
92
92
  } else {
93
93
  var _$split = "".concat(x, "e").split('e'),
94
- _$split2 = (0, _slicedToArray2["default"])(_$split, 2),
94
+ _$split2 = (0, _slicedToArray2.default)(_$split, 2),
95
95
  number = _$split2[0],
96
96
  exponent = _$split2[1];
97
97
 
@@ -99,7 +99,7 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
99
99
 
100
100
  var _$split3 = "".concat(result, "e").split('e');
101
101
 
102
- var _$split4 = (0, _slicedToArray2["default"])(_$split3, 2);
102
+ var _$split4 = (0, _slicedToArray2.default)(_$split3, 2);
103
103
 
104
104
  number = _$split4[0];
105
105
  exponent = _$split4[1];
@@ -123,7 +123,7 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
123
123
  if ((0, _nearlyEqual.nearlyEqual)(x, round(x, n), config.epsilon)) {
124
124
  return round(x, n);
125
125
  } else {
126
- return x.toDecimalPlaces(n.toNumber(), _decimal["default"].ROUND_CEIL);
126
+ return x.toDecimalPlaces(n.toNumber(), _decimal.default.ROUND_CEIL);
127
127
  }
128
128
  },
129
129
  Fraction: function Fraction(x) {
@@ -88,7 +88,7 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
88
88
  return round(x, n);
89
89
  } else {
90
90
  var _$split = "".concat(x, "e").split('e'),
91
- _$split2 = (0, _slicedToArray2["default"])(_$split, 2),
91
+ _$split2 = (0, _slicedToArray2.default)(_$split, 2),
92
92
  number = _$split2[0],
93
93
  exponent = _$split2[1];
94
94
 
@@ -96,7 +96,7 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
96
96
 
97
97
  var _$split3 = "".concat(result, "e").split('e');
98
98
 
99
- var _$split4 = (0, _slicedToArray2["default"])(_$split3, 2);
99
+ var _$split4 = (0, _slicedToArray2.default)(_$split3, 2);
100
100
 
101
101
  number = _$split4[0];
102
102
  exponent = _$split4[1];
@@ -120,7 +120,7 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
120
120
  if ((0, _nearlyEqual.nearlyEqual)(x, round(x, n), config.epsilon)) {
121
121
  return round(x, n);
122
122
  } else {
123
- return x.toDecimalPlaces(n.toNumber(), _decimal["default"].ROUND_FLOOR);
123
+ return x.toDecimalPlaces(n.toNumber(), _decimal.default.ROUND_FLOOR);
124
124
  }
125
125
  },
126
126
  Fraction: function Fraction(x) {
@@ -60,7 +60,7 @@ var createInvmod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
60
60
  res = res.valueOf();
61
61
 
62
62
  var _res = res,
63
- _res2 = (0, _slicedToArray2["default"])(_res, 2),
63
+ _res2 = (0, _slicedToArray2.default)(_res, 2),
64
64
  gcd = _res2[0],
65
65
  inv = _res2[1];
66
66
 
@@ -71,7 +71,7 @@ var createNorm = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
71
71
  // norm(x) = abs(x)
72
72
  return x.abs();
73
73
  },
74
- "boolean": function boolean(x) {
74
+ boolean: function boolean(x) {
75
75
  // norm(x) = abs(x)
76
76
  return Math.abs(x);
77
77
  },
@@ -25,7 +25,7 @@ var _index = require("../../plain/number/index.js");
25
25
 
26
26
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
27
 
28
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
28
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29
29
 
30
30
  var NO_INT = 'Number of decimals in function round must be an integer';
31
31
  var name = 'round';
@@ -11,7 +11,7 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
11
11
 
12
12
  var _object = require("../../../utils/object.js");
13
13
 
14
- 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; } } }; }
14
+ 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; } } }; }
15
15
 
16
16
  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); }
17
17
 
@@ -80,7 +80,7 @@ function createComplexEigs(_ref) {
80
80
 
81
81
  if (findVectors) {
82
82
  vectors = findEigenvectors(arr, N, C, values, prec, type);
83
- vectors = matrixFromColumns.apply(void 0, (0, _toConsumableArray2["default"])(vectors));
83
+ vectors = matrixFromColumns.apply(void 0, (0, _toConsumableArray2.default)(vectors));
84
84
  }
85
85
 
86
86
  return {
@@ -100,8 +100,9 @@ function createComplexEigs(_ref) {
100
100
  function balance(arr, N, prec, type, findVectors) {
101
101
  var big = type === 'BigNumber';
102
102
  var cplx = type === 'Complex';
103
- var zero = big ? bignumber(0) : cplx ? complex(0) : 0;
104
- var one = big ? bignumber(1) : cplx ? complex(1) : 1; // base of the floating-point arithmetic
103
+ var realzero = big ? bignumber(0) : 0;
104
+ var one = big ? bignumber(1) : cplx ? complex(1) : 1;
105
+ var realone = big ? bignumber(1) : 1; // base of the floating-point arithmetic
105
106
 
106
107
  var radix = big ? bignumber(10) : 2;
107
108
  var radixSq = multiplyScalar(radix, radix); // the diagonal transformation matrix R
@@ -122,12 +123,13 @@ function createComplexEigs(_ref) {
122
123
  for (var i = 0; i < N; i++) {
123
124
  // compute the taxicab norm of i-th column and row
124
125
  // TODO optimize for complex numbers
125
- var colNorm = zero;
126
- var rowNorm = zero;
126
+ var colNorm = realzero;
127
+ var rowNorm = realzero;
127
128
 
128
129
  for (var j = 0; j < N; j++) {
129
130
  if (i === j) continue;
130
- var c = abs(arr[i][j]);
131
+ var c = abs(arr[i][j]); // should be real
132
+
131
133
  colNorm = addScalar(colNorm, c);
132
134
  rowNorm = addScalar(rowNorm, c);
133
135
  }
@@ -136,7 +138,7 @@ function createComplexEigs(_ref) {
136
138
  // find integer power closest to balancing the matrix
137
139
  // (we want to scale only by integer powers of radix,
138
140
  // so that we don't lose any precision due to round-off)
139
- var f = one;
141
+ var f = realone;
140
142
  var _c = colNorm;
141
143
  var rowDivRadix = divideScalar(rowNorm, radix);
142
144
  var rowMulRadix = multiplyScalar(rowNorm, radix);
@@ -360,7 +362,7 @@ function createComplexEigs(_ref) {
360
362
  } else if (n === 2 || smaller(abs(arr[n - 2][n - 3]), prec)) {
361
363
  lastConvergenceBefore = 0;
362
364
  var ll = eigenvalues2x2(arr[n - 2][n - 2], arr[n - 2][n - 1], arr[n - 1][n - 2], arr[n - 1][n - 1]);
363
- lambdas.push.apply(lambdas, (0, _toConsumableArray2["default"])(ll)); // keep track of transformations
365
+ lambdas.push.apply(lambdas, (0, _toConsumableArray2.default)(ll)); // keep track of transformations
364
366
 
365
367
  if (findVectors) {
366
368
  Sdiag.unshift(jordanBase2x2(arr[n - 2][n - 2], arr[n - 2][n - 1], arr[n - 1][n - 2], arr[n - 1][n - 1], ll[0], ll[1], prec, type));
@@ -488,7 +490,7 @@ function createComplexEigs(_ref) {
488
490
  solutions.push(approxVec);
489
491
  }
490
492
 
491
- vectors.push.apply(vectors, (0, _toConsumableArray2["default"])(solutions.map(function (v) {
493
+ vectors.push.apply(vectors, (0, _toConsumableArray2.default)(solutions.map(function (v) {
492
494
  return flatten(v);
493
495
  })));
494
496
  }
@@ -568,7 +570,7 @@ function createComplexEigs(_ref) {
568
570
  for (var i = 0; i < arr.length; i++) {
569
571
  var _arr$i;
570
572
 
571
- (_arr$i = arr[i]).push.apply(_arr$i, (0, _toConsumableArray2["default"])(Array(N - arr[i].length).fill(0)));
573
+ (_arr$i = arr[i]).push.apply(_arr$i, (0, _toConsumableArray2.default)(Array(N - arr[i].length).fill(0)));
572
574
  } // add rows
573
575
 
574
576
 
@@ -15,8 +15,15 @@ var createMap = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
15
15
  var typed = _ref.typed;
16
16
 
17
17
  /**
18
- * Create a new matrix or array with the results of the callback function executed on
19
- * each entry of the matrix/array.
18
+ * Create a new matrix or array with the results of a callback function executed on
19
+ * each entry of a given matrix/array.
20
+ *
21
+ * For each entry of the input, the callback is invoked with three arguments:
22
+ * the value of the entry, the index at which that entry occurs, and the full
23
+ * matrix/array being traversed. Note that because the matrix/array might be
24
+ * multidimensional, the "index" argument is always an array of numbers giving
25
+ * the index in each dimension. This is true even for vectors: the "index"
26
+ * argument is an array of length 1, rather than simply a number.
20
27
  *
21
28
  * Syntax:
22
29
  *
@@ -28,15 +35,25 @@ var createMap = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
28
35
  * return value * value
29
36
  * }) // returns [1, 4, 9]
30
37
  *
38
+ * // The calling convention for the callback can cause subtleties:
39
+ * math.map([1, 2, 3], math.format)
40
+ * // throws TypeError: map attempted to call 'format(1,[0])' but argument 2 of type Array does not match expected type number or function or Object or string or boolean
41
+ * // [This happens because `format` _can_ take a second argument,
42
+ * // but its semantics don't match that of the 2nd argument `map` provides]
43
+ *
44
+ * // To avoid this error, use a function that takes exactly the
45
+ * // desired arguments:
46
+ * math.map([1, 2, 3], x => math.format(x)) // returns ['1', '2', '3']
47
+ *
31
48
  * See also:
32
49
  *
33
50
  * filter, forEach, sort
34
51
  *
35
- * @param {Matrix | Array} x The matrix to iterate on.
36
- * @param {Function} callback The callback method is invoked with three
37
- * parameters: the value of the element, the index
38
- * of the element, and the matrix being traversed.
39
- * @return {Matrix | array} Transformed map of x
52
+ * @param {Matrix | Array} x The input to iterate on.
53
+ * @param {Function} callback
54
+ * The function to call (as described above) on each entry of the input
55
+ * @return {Matrix | array}
56
+ * Transformed map of x; always has the same type and shape as x
40
57
  */
41
58
  return typed(name, {
42
59
  'Array, function': _map,
@@ -66,14 +83,35 @@ function _map(array, callback) {
66
83
  return recurse(child, index.concat(i));
67
84
  });
68
85
  } else {
69
- // invoke the callback function with the right number of arguments
70
- if (args === 1) {
71
- return callback(value);
72
- } else if (args === 2) {
73
- return callback(value, index);
74
- } else {
75
- // 3 or -1
76
- return callback(value, index, array);
86
+ try {
87
+ // invoke the callback function with the right number of arguments
88
+ if (args === 1) {
89
+ return callback(value);
90
+ } else if (args === 2) {
91
+ return callback(value, index);
92
+ } else {
93
+ // 3 or -1
94
+ return callback(value, index, array);
95
+ }
96
+ } catch (err) {
97
+ // But maybe the arguments still weren't right
98
+ if (err instanceof TypeError && 'data' in err && err.data.category === 'wrongType') {
99
+ var newmsg = "map attempted to call '".concat(err.data.fn, "(").concat(value);
100
+ var indexString = JSON.stringify(index);
101
+
102
+ if (args === 2) {
103
+ newmsg += ',' + indexString;
104
+ } else if (args !== 1) {
105
+ newmsg += ",".concat(indexString, ",").concat(array);
106
+ }
107
+
108
+ newmsg += ")' but argument ".concat(err.data.index + 1, " of type ");
109
+ newmsg += "".concat(err.data.actual, " does not match expected type ");
110
+ newmsg += err.data.expected.join(' or ');
111
+ throw new TypeError(newmsg);
112
+ }
113
+
114
+ throw err;
77
115
  }
78
116
  }
79
117
  };
@@ -7,7 +7,7 @@ exports.createMatrixFromColumns = void 0;
7
7
 
8
8
  var _factory = require("../../utils/factory.js");
9
9
 
10
- 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; } } }; }
10
+ 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; } } }; }
11
11
 
12
12
  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); }
13
13
 
@@ -7,7 +7,7 @@ exports.createMatrixFromRows = void 0;
7
7
 
8
8
  var _factory = require("../../utils/factory.js");
9
9
 
10
- 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; } } }; }
10
+ 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; } } }; }
11
11
 
12
12
  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); }
13
13