mathjs 9.3.2 → 9.4.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 (410) hide show
  1. package/HISTORY.md +22 -0
  2. package/README.md +1 -0
  3. package/bin/cli.js +11 -11
  4. package/docs/expressions/parsing.md +21 -4
  5. package/docs/reference/functions/complex.md +5 -49
  6. package/docs/reference/functions/eigs.md +12 -12
  7. package/docs/reference/functions/flatten.md +1 -0
  8. package/docs/reference/functions/matrixFromColumns.md +1 -1
  9. package/docs/reference/functions/matrixFromFunction.md +12 -0
  10. package/docs/reference/functions/matrixFromRows.md +1 -1
  11. package/docs/reference/functions.md +4 -1
  12. package/examples/advanced/custom_scope_objects.js +115 -0
  13. package/lib/browser/math.js +10 -10
  14. package/lib/browser/math.js.map +1 -1
  15. package/lib/cjs/core/create.js +8 -7
  16. package/lib/cjs/core/function/import.js +9 -7
  17. package/lib/cjs/core/function/typed.js +6 -1
  18. package/lib/cjs/defaultInstance.js +3 -3
  19. package/lib/cjs/entry/allFactoriesAny.js +3 -3
  20. package/lib/cjs/entry/allFactoriesNumber.js +3 -3
  21. package/lib/cjs/entry/configReadonly.js +5 -4
  22. package/lib/cjs/entry/dependenciesAny/dependenciesEigs.generated.js +51 -0
  23. package/lib/cjs/entry/dependenciesAny/dependenciesMatrixFromColumns.generated.js +29 -0
  24. package/lib/cjs/entry/dependenciesAny/dependenciesMatrixFromFunction.generated.js +26 -0
  25. package/lib/cjs/entry/dependenciesAny/dependenciesMatrixFromRows.generated.js +29 -0
  26. package/lib/cjs/entry/dependenciesAny.generated.js +24 -0
  27. package/lib/cjs/entry/impureFunctionsAny.generated.js +22 -17
  28. package/lib/cjs/entry/impureFunctionsNumber.generated.js +11 -9
  29. package/lib/cjs/entry/pureFunctionsAny.generated.js +78 -41
  30. package/lib/cjs/expression/Parser.js +22 -15
  31. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +9 -0
  32. package/lib/cjs/expression/embeddedDocs/function/matrix/column.js +1 -1
  33. package/lib/cjs/expression/embeddedDocs/function/matrix/matrixFromColumns.js +15 -0
  34. package/lib/cjs/expression/embeddedDocs/function/matrix/matrixFromFunction.js +15 -0
  35. package/lib/cjs/expression/embeddedDocs/function/matrix/matrixFromRows.js +15 -0
  36. package/lib/cjs/expression/embeddedDocs/function/matrix/row.js +1 -1
  37. package/lib/cjs/expression/function/evaluate.js +6 -4
  38. package/lib/cjs/expression/keywords.js +1 -3
  39. package/lib/cjs/expression/node/AccessorNode.js +1 -0
  40. package/lib/cjs/expression/node/AssignmentNode.js +6 -3
  41. package/lib/cjs/expression/node/FunctionAssignmentNode.js +2 -4
  42. package/lib/cjs/expression/node/FunctionNode.js +76 -46
  43. package/lib/cjs/expression/node/IndexNode.js +5 -13
  44. package/lib/cjs/expression/node/Node.js +15 -9
  45. package/lib/cjs/expression/node/ObjectNode.js +5 -3
  46. package/lib/cjs/expression/node/SymbolNode.js +2 -2
  47. package/lib/cjs/expression/node/utils/access.js +5 -3
  48. package/lib/cjs/expression/node/utils/assign.js +5 -3
  49. package/lib/cjs/expression/parse.js +10 -14
  50. package/lib/cjs/expression/transform/utils/compileInlineExpression.js +5 -3
  51. package/lib/cjs/factoriesAny.js +24 -0
  52. package/lib/cjs/function/algebra/decomposition/qr.js +5 -3
  53. package/lib/cjs/function/algebra/simplify/resolve.js +7 -1
  54. package/lib/cjs/function/algebra/simplify.js +20 -14
  55. package/lib/cjs/function/algebra/solver/lsolveAll.js +6 -16
  56. package/lib/cjs/function/algebra/solver/usolveAll.js +6 -16
  57. package/lib/cjs/function/arithmetic/ceil.js +6 -16
  58. package/lib/cjs/function/arithmetic/floor.js +6 -16
  59. package/lib/cjs/function/arithmetic/norm.js +2 -2
  60. package/lib/cjs/function/arithmetic/pow.js +9 -7
  61. package/lib/cjs/function/arithmetic/round.js +7 -5
  62. package/lib/cjs/function/complex/im.js +3 -0
  63. package/lib/cjs/function/complex/re.js +3 -0
  64. package/lib/cjs/function/matrix/eigs/complexEigs.js +631 -0
  65. package/lib/cjs/function/matrix/eigs/realSymetric.js +341 -0
  66. package/lib/cjs/function/matrix/eigs.js +188 -334
  67. package/lib/cjs/function/matrix/flatten.js +1 -0
  68. package/lib/cjs/function/matrix/matrixFromColumns.js +118 -0
  69. package/lib/cjs/function/matrix/matrixFromFunction.js +85 -0
  70. package/lib/cjs/function/matrix/matrixFromRows.js +108 -0
  71. package/lib/cjs/function/probability/pickRandom.js +1 -1
  72. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  73. package/lib/cjs/function/relational/compareNatural.js +2 -2
  74. package/lib/cjs/header.js +2 -2
  75. package/lib/cjs/plain/bignumber/index.js +2 -2
  76. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  77. package/lib/cjs/type/complex/Complex.js +5 -5
  78. package/lib/cjs/type/fraction/Fraction.js +2 -2
  79. package/lib/cjs/type/matrix/DenseMatrix.js +138 -0
  80. package/lib/cjs/type/matrix/Matrix.js +10 -0
  81. package/lib/cjs/type/matrix/SparseMatrix.js +77 -3
  82. package/lib/cjs/type/matrix/function/matrix.js +2 -1
  83. package/lib/cjs/type/unit/Unit.js +15 -13
  84. package/lib/cjs/utils/array.js +1 -1
  85. package/lib/cjs/utils/customs.js +18 -4
  86. package/lib/cjs/utils/emitter.js +2 -2
  87. package/lib/cjs/utils/function.js +6 -2
  88. package/lib/cjs/utils/is.js +7 -5
  89. package/lib/cjs/utils/latex.js +2 -2
  90. package/lib/cjs/utils/map.js +197 -0
  91. package/lib/cjs/utils/object.js +6 -5
  92. package/lib/cjs/utils/scope.js +33 -0
  93. package/lib/cjs/utils/snapshot.js +17 -16
  94. package/lib/cjs/utils/string.js +6 -4
  95. package/lib/cjs/version.js +1 -1
  96. package/lib/esm/constants.js +15 -15
  97. package/lib/esm/core/create.js +1 -2
  98. package/lib/esm/core/function/typed.js +5 -1
  99. package/lib/esm/entry/configReadonly.js +1 -2
  100. package/lib/esm/entry/dependenciesAny/dependenciesEigs.generated.js +34 -0
  101. package/lib/esm/entry/dependenciesAny/dependenciesMatrixFromColumns.generated.js +16 -0
  102. package/lib/esm/entry/dependenciesAny/dependenciesMatrixFromFunction.generated.js +14 -0
  103. package/lib/esm/entry/dependenciesAny/dependenciesMatrixFromRows.generated.js +16 -0
  104. package/lib/esm/entry/dependenciesAny.generated.js +3 -0
  105. package/lib/esm/entry/impureFunctionsAny.generated.js +13 -10
  106. package/lib/esm/entry/impureFunctionsNumber.generated.js +1 -1
  107. package/lib/esm/entry/pureFunctionsAny.generated.js +66 -32
  108. package/lib/esm/expression/Help.js +1 -1
  109. package/lib/esm/expression/Parser.js +23 -15
  110. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +6 -0
  111. package/lib/esm/expression/embeddedDocs/function/matrix/column.js +1 -1
  112. package/lib/esm/expression/embeddedDocs/function/matrix/matrixFromColumns.js +8 -0
  113. package/lib/esm/expression/embeddedDocs/function/matrix/matrixFromFunction.js +8 -0
  114. package/lib/esm/expression/embeddedDocs/function/matrix/matrixFromRows.js +8 -0
  115. package/lib/esm/expression/embeddedDocs/function/matrix/row.js +1 -1
  116. package/lib/esm/expression/function/compile.js +1 -1
  117. package/lib/esm/expression/function/evaluate.js +6 -5
  118. package/lib/esm/expression/function/help.js +1 -1
  119. package/lib/esm/expression/function/parser.js +1 -1
  120. package/lib/esm/expression/keywords.js +1 -3
  121. package/lib/esm/expression/node/AccessorNode.js +2 -1
  122. package/lib/esm/expression/node/ArrayNode.js +1 -1
  123. package/lib/esm/expression/node/AssignmentNode.js +7 -4
  124. package/lib/esm/expression/node/BlockNode.js +1 -1
  125. package/lib/esm/expression/node/ConditionalNode.js +1 -1
  126. package/lib/esm/expression/node/ConstantNode.js +1 -1
  127. package/lib/esm/expression/node/FunctionAssignmentNode.js +3 -4
  128. package/lib/esm/expression/node/FunctionNode.js +57 -39
  129. package/lib/esm/expression/node/IndexNode.js +1 -1
  130. package/lib/esm/expression/node/Node.js +7 -8
  131. package/lib/esm/expression/node/ObjectNode.js +1 -1
  132. package/lib/esm/expression/node/OperatorNode.js +1 -1
  133. package/lib/esm/expression/node/ParenthesisNode.js +1 -1
  134. package/lib/esm/expression/node/RangeNode.js +1 -1
  135. package/lib/esm/expression/node/RelationalNode.js +1 -1
  136. package/lib/esm/expression/node/SymbolNode.js +3 -3
  137. package/lib/esm/expression/parse.js +2 -3
  138. package/lib/esm/expression/transform/apply.transform.js +1 -1
  139. package/lib/esm/expression/transform/column.transform.js +1 -1
  140. package/lib/esm/expression/transform/concat.transform.js +1 -1
  141. package/lib/esm/expression/transform/diff.transform.js +1 -1
  142. package/lib/esm/expression/transform/filter.transform.js +1 -1
  143. package/lib/esm/expression/transform/forEach.transform.js +1 -1
  144. package/lib/esm/expression/transform/index.transform.js +1 -1
  145. package/lib/esm/expression/transform/map.transform.js +1 -1
  146. package/lib/esm/expression/transform/max.transform.js +1 -1
  147. package/lib/esm/expression/transform/mean.transform.js +1 -1
  148. package/lib/esm/expression/transform/min.transform.js +1 -1
  149. package/lib/esm/expression/transform/range.transform.js +1 -1
  150. package/lib/esm/expression/transform/row.transform.js +1 -1
  151. package/lib/esm/expression/transform/std.transform.js +1 -1
  152. package/lib/esm/expression/transform/subset.transform.js +1 -1
  153. package/lib/esm/expression/transform/sum.transform.js +1 -1
  154. package/lib/esm/expression/transform/utils/compileInlineExpression.js +4 -3
  155. package/lib/esm/expression/transform/variance.transform.js +1 -1
  156. package/lib/esm/factoriesAny.js +3 -0
  157. package/lib/esm/factoriesNumber.js +1 -1
  158. package/lib/esm/function/algebra/decomposition/lup.js +1 -1
  159. package/lib/esm/function/algebra/decomposition/qr.js +2 -3
  160. package/lib/esm/function/algebra/decomposition/slu.js +1 -1
  161. package/lib/esm/function/algebra/derivative.js +1 -1
  162. package/lib/esm/function/algebra/rationalize.js +1 -1
  163. package/lib/esm/function/algebra/simplify/resolve.js +7 -2
  164. package/lib/esm/function/algebra/simplify/simplifyConstant.js +1 -1
  165. package/lib/esm/function/algebra/simplify/simplifyCore.js +1 -1
  166. package/lib/esm/function/algebra/simplify/util.js +1 -1
  167. package/lib/esm/function/algebra/simplify.js +16 -12
  168. package/lib/esm/function/algebra/solver/lsolve.js +1 -1
  169. package/lib/esm/function/algebra/solver/lsolveAll.js +1 -1
  170. package/lib/esm/function/algebra/solver/lusolve.js +1 -1
  171. package/lib/esm/function/algebra/solver/usolve.js +1 -1
  172. package/lib/esm/function/algebra/solver/usolveAll.js +1 -1
  173. package/lib/esm/function/algebra/sparse/csAmd.js +1 -1
  174. package/lib/esm/function/algebra/sparse/csChol.js +1 -1
  175. package/lib/esm/function/algebra/sparse/csCounts.js +1 -1
  176. package/lib/esm/function/algebra/sparse/csLu.js +1 -1
  177. package/lib/esm/function/algebra/sparse/csSpsolve.js +1 -1
  178. package/lib/esm/function/algebra/sparse/csSqr.js +1 -1
  179. package/lib/esm/function/algebra/sparse/csSymperm.js +1 -1
  180. package/lib/esm/function/arithmetic/abs.js +1 -1
  181. package/lib/esm/function/arithmetic/add.js +1 -1
  182. package/lib/esm/function/arithmetic/addScalar.js +1 -1
  183. package/lib/esm/function/arithmetic/cbrt.js +1 -1
  184. package/lib/esm/function/arithmetic/ceil.js +1 -1
  185. package/lib/esm/function/arithmetic/cube.js +1 -1
  186. package/lib/esm/function/arithmetic/divide.js +1 -1
  187. package/lib/esm/function/arithmetic/divideScalar.js +1 -1
  188. package/lib/esm/function/arithmetic/dotDivide.js +1 -1
  189. package/lib/esm/function/arithmetic/dotMultiply.js +1 -1
  190. package/lib/esm/function/arithmetic/dotPow.js +1 -1
  191. package/lib/esm/function/arithmetic/exp.js +1 -1
  192. package/lib/esm/function/arithmetic/expm1.js +1 -1
  193. package/lib/esm/function/arithmetic/fix.js +1 -1
  194. package/lib/esm/function/arithmetic/floor.js +1 -1
  195. package/lib/esm/function/arithmetic/gcd.js +1 -1
  196. package/lib/esm/function/arithmetic/hypot.js +1 -1
  197. package/lib/esm/function/arithmetic/lcm.js +1 -1
  198. package/lib/esm/function/arithmetic/log.js +1 -1
  199. package/lib/esm/function/arithmetic/log10.js +1 -1
  200. package/lib/esm/function/arithmetic/log1p.js +1 -1
  201. package/lib/esm/function/arithmetic/log2.js +1 -1
  202. package/lib/esm/function/arithmetic/mod.js +1 -1
  203. package/lib/esm/function/arithmetic/multiply.js +1 -1
  204. package/lib/esm/function/arithmetic/multiplyScalar.js +1 -1
  205. package/lib/esm/function/arithmetic/norm.js +3 -3
  206. package/lib/esm/function/arithmetic/nthRoot.js +2 -2
  207. package/lib/esm/function/arithmetic/nthRoots.js +1 -1
  208. package/lib/esm/function/arithmetic/pow.js +10 -8
  209. package/lib/esm/function/arithmetic/round.js +6 -6
  210. package/lib/esm/function/arithmetic/sign.js +1 -1
  211. package/lib/esm/function/arithmetic/sqrt.js +1 -1
  212. package/lib/esm/function/arithmetic/square.js +1 -1
  213. package/lib/esm/function/arithmetic/subtract.js +1 -1
  214. package/lib/esm/function/arithmetic/unaryMinus.js +1 -1
  215. package/lib/esm/function/arithmetic/unaryPlus.js +1 -1
  216. package/lib/esm/function/arithmetic/xgcd.js +1 -1
  217. package/lib/esm/function/bitwise/bitAnd.js +1 -1
  218. package/lib/esm/function/bitwise/bitNot.js +1 -1
  219. package/lib/esm/function/bitwise/bitOr.js +1 -1
  220. package/lib/esm/function/bitwise/bitXor.js +1 -1
  221. package/lib/esm/function/bitwise/leftShift.js +1 -1
  222. package/lib/esm/function/bitwise/rightArithShift.js +1 -1
  223. package/lib/esm/function/bitwise/rightLogShift.js +1 -1
  224. package/lib/esm/function/combinatorics/bellNumbers.js +1 -1
  225. package/lib/esm/function/combinatorics/catalan.js +1 -1
  226. package/lib/esm/function/combinatorics/composition.js +1 -1
  227. package/lib/esm/function/combinatorics/stirlingS2.js +1 -1
  228. package/lib/esm/function/complex/arg.js +1 -1
  229. package/lib/esm/function/complex/conj.js +1 -1
  230. package/lib/esm/function/complex/im.js +4 -1
  231. package/lib/esm/function/complex/re.js +4 -1
  232. package/lib/esm/function/geometry/distance.js +1 -1
  233. package/lib/esm/function/geometry/intersect.js +1 -1
  234. package/lib/esm/function/logical/and.js +1 -1
  235. package/lib/esm/function/logical/not.js +1 -1
  236. package/lib/esm/function/logical/or.js +1 -1
  237. package/lib/esm/function/logical/xor.js +1 -1
  238. package/lib/esm/function/matrix/apply.js +1 -1
  239. package/lib/esm/function/matrix/column.js +1 -1
  240. package/lib/esm/function/matrix/concat.js +1 -1
  241. package/lib/esm/function/matrix/count.js +1 -1
  242. package/lib/esm/function/matrix/cross.js +1 -1
  243. package/lib/esm/function/matrix/ctranspose.js +1 -1
  244. package/lib/esm/function/matrix/det.js +1 -1
  245. package/lib/esm/function/matrix/diag.js +1 -1
  246. package/lib/esm/function/matrix/diff.js +1 -1
  247. package/lib/esm/function/matrix/dot.js +1 -1
  248. package/lib/esm/function/matrix/eigs/complexEigs.js +586 -0
  249. package/lib/esm/function/matrix/eigs/realSymetric.js +335 -0
  250. package/lib/esm/function/matrix/eigs.js +187 -335
  251. package/lib/esm/function/matrix/expm.js +1 -1
  252. package/lib/esm/function/matrix/filter.js +1 -1
  253. package/lib/esm/function/matrix/flatten.js +2 -1
  254. package/lib/esm/function/matrix/forEach.js +1 -1
  255. package/lib/esm/function/matrix/getMatrixDataType.js +1 -1
  256. package/lib/esm/function/matrix/identity.js +1 -1
  257. package/lib/esm/function/matrix/inv.js +1 -1
  258. package/lib/esm/function/matrix/kron.js +1 -1
  259. package/lib/esm/function/matrix/map.js +1 -1
  260. package/lib/esm/function/matrix/matrixFromColumns.js +93 -0
  261. package/lib/esm/function/matrix/matrixFromFunction.js +78 -0
  262. package/lib/esm/function/matrix/matrixFromRows.js +83 -0
  263. package/lib/esm/function/matrix/ones.js +1 -1
  264. package/lib/esm/function/matrix/partitionSelect.js +1 -1
  265. package/lib/esm/function/matrix/range.js +1 -1
  266. package/lib/esm/function/matrix/reshape.js +1 -1
  267. package/lib/esm/function/matrix/resize.js +1 -1
  268. package/lib/esm/function/matrix/rotate.js +1 -1
  269. package/lib/esm/function/matrix/rotationMatrix.js +1 -1
  270. package/lib/esm/function/matrix/row.js +1 -1
  271. package/lib/esm/function/matrix/size.js +1 -1
  272. package/lib/esm/function/matrix/sort.js +1 -1
  273. package/lib/esm/function/matrix/sqrtm.js +1 -1
  274. package/lib/esm/function/matrix/squeeze.js +1 -1
  275. package/lib/esm/function/matrix/subset.js +1 -1
  276. package/lib/esm/function/matrix/trace.js +1 -1
  277. package/lib/esm/function/matrix/transpose.js +1 -1
  278. package/lib/esm/function/matrix/zeros.js +1 -1
  279. package/lib/esm/function/probability/combinations.js +1 -1
  280. package/lib/esm/function/probability/combinationsWithRep.js +1 -1
  281. package/lib/esm/function/probability/factorial.js +1 -1
  282. package/lib/esm/function/probability/gamma.js +1 -1
  283. package/lib/esm/function/probability/kldivergence.js +1 -1
  284. package/lib/esm/function/probability/multinomial.js +1 -1
  285. package/lib/esm/function/probability/permutations.js +1 -1
  286. package/lib/esm/function/probability/pickRandom.js +2 -2
  287. package/lib/esm/function/probability/random.js +2 -2
  288. package/lib/esm/function/probability/randomInt.js +1 -1
  289. package/lib/esm/function/relational/compare.js +2 -2
  290. package/lib/esm/function/relational/compareNatural.js +1 -1
  291. package/lib/esm/function/relational/compareText.js +2 -2
  292. package/lib/esm/function/relational/deepEqual.js +1 -1
  293. package/lib/esm/function/relational/equal.js +2 -2
  294. package/lib/esm/function/relational/equalScalar.js +2 -2
  295. package/lib/esm/function/relational/equalText.js +1 -1
  296. package/lib/esm/function/relational/larger.js +2 -2
  297. package/lib/esm/function/relational/largerEq.js +2 -2
  298. package/lib/esm/function/relational/smaller.js +2 -2
  299. package/lib/esm/function/relational/smallerEq.js +2 -2
  300. package/lib/esm/function/relational/unequal.js +2 -2
  301. package/lib/esm/function/set/setCartesian.js +1 -1
  302. package/lib/esm/function/set/setDifference.js +1 -1
  303. package/lib/esm/function/set/setDistinct.js +1 -1
  304. package/lib/esm/function/set/setIntersect.js +1 -1
  305. package/lib/esm/function/set/setIsSubset.js +1 -1
  306. package/lib/esm/function/set/setMultiplicity.js +1 -1
  307. package/lib/esm/function/set/setPowerset.js +1 -1
  308. package/lib/esm/function/set/setSize.js +1 -1
  309. package/lib/esm/function/set/setSymDifference.js +1 -1
  310. package/lib/esm/function/set/setUnion.js +1 -1
  311. package/lib/esm/function/special/erf.js +1 -1
  312. package/lib/esm/function/statistics/mad.js +1 -1
  313. package/lib/esm/function/statistics/max.js +1 -1
  314. package/lib/esm/function/statistics/mean.js +1 -1
  315. package/lib/esm/function/statistics/median.js +1 -1
  316. package/lib/esm/function/statistics/min.js +1 -1
  317. package/lib/esm/function/statistics/mode.js +1 -1
  318. package/lib/esm/function/statistics/prod.js +1 -1
  319. package/lib/esm/function/statistics/quantileSeq.js +1 -1
  320. package/lib/esm/function/statistics/std.js +1 -1
  321. package/lib/esm/function/statistics/sum.js +1 -1
  322. package/lib/esm/function/statistics/variance.js +1 -1
  323. package/lib/esm/function/string/bin.js +1 -1
  324. package/lib/esm/function/string/format.js +1 -1
  325. package/lib/esm/function/string/hex.js +1 -1
  326. package/lib/esm/function/string/oct.js +1 -1
  327. package/lib/esm/function/string/print.js +1 -1
  328. package/lib/esm/function/trigonometry/acos.js +1 -1
  329. package/lib/esm/function/trigonometry/acosh.js +1 -1
  330. package/lib/esm/function/trigonometry/acot.js +1 -1
  331. package/lib/esm/function/trigonometry/acoth.js +1 -1
  332. package/lib/esm/function/trigonometry/acsc.js +1 -1
  333. package/lib/esm/function/trigonometry/acsch.js +1 -1
  334. package/lib/esm/function/trigonometry/asec.js +1 -1
  335. package/lib/esm/function/trigonometry/asech.js +1 -1
  336. package/lib/esm/function/trigonometry/asin.js +1 -1
  337. package/lib/esm/function/trigonometry/asinh.js +1 -1
  338. package/lib/esm/function/trigonometry/atan.js +1 -1
  339. package/lib/esm/function/trigonometry/atan2.js +1 -1
  340. package/lib/esm/function/trigonometry/atanh.js +1 -1
  341. package/lib/esm/function/trigonometry/cos.js +1 -1
  342. package/lib/esm/function/trigonometry/cosh.js +1 -1
  343. package/lib/esm/function/trigonometry/cot.js +1 -1
  344. package/lib/esm/function/trigonometry/coth.js +1 -1
  345. package/lib/esm/function/trigonometry/csc.js +1 -1
  346. package/lib/esm/function/trigonometry/csch.js +1 -1
  347. package/lib/esm/function/trigonometry/sec.js +1 -1
  348. package/lib/esm/function/trigonometry/sech.js +1 -1
  349. package/lib/esm/function/trigonometry/sin.js +1 -1
  350. package/lib/esm/function/trigonometry/sinh.js +1 -1
  351. package/lib/esm/function/trigonometry/tan.js +1 -1
  352. package/lib/esm/function/trigonometry/tanh.js +1 -1
  353. package/lib/esm/function/unit/to.js +1 -1
  354. package/lib/esm/function/utils/clone.js +1 -1
  355. package/lib/esm/function/utils/hasNumericValue.js +1 -1
  356. package/lib/esm/function/utils/isInteger.js +1 -1
  357. package/lib/esm/function/utils/isNaN.js +1 -1
  358. package/lib/esm/function/utils/isNegative.js +1 -1
  359. package/lib/esm/function/utils/isNumeric.js +1 -1
  360. package/lib/esm/function/utils/isPositive.js +1 -1
  361. package/lib/esm/function/utils/isPrime.js +1 -1
  362. package/lib/esm/function/utils/isZero.js +1 -1
  363. package/lib/esm/function/utils/numeric.js +1 -1
  364. package/lib/esm/function/utils/typeOf.js +1 -1
  365. package/lib/esm/json/reviver.js +1 -1
  366. package/lib/esm/type/bignumber/BigNumber.js +1 -1
  367. package/lib/esm/type/bignumber/function/bignumber.js +1 -1
  368. package/lib/esm/type/boolean.js +1 -1
  369. package/lib/esm/type/chain/Chain.js +1 -1
  370. package/lib/esm/type/chain/function/chain.js +1 -1
  371. package/lib/esm/type/complex/function/complex.js +1 -1
  372. package/lib/esm/type/fraction/function/fraction.js +1 -1
  373. package/lib/esm/type/matrix/DenseMatrix.js +75 -1
  374. package/lib/esm/type/matrix/FibonacciHeap.js +1 -1
  375. package/lib/esm/type/matrix/ImmutableDenseMatrix.js +1 -1
  376. package/lib/esm/type/matrix/Matrix.js +10 -0
  377. package/lib/esm/type/matrix/MatrixIndex.js +1 -1
  378. package/lib/esm/type/matrix/Spa.js +1 -1
  379. package/lib/esm/type/matrix/SparseMatrix.js +37 -3
  380. package/lib/esm/type/matrix/function/index.js +1 -1
  381. package/lib/esm/type/matrix/function/matrix.js +3 -2
  382. package/lib/esm/type/matrix/function/sparse.js +1 -1
  383. package/lib/esm/type/matrix/utils/algorithm01.js +1 -1
  384. package/lib/esm/type/matrix/utils/algorithm02.js +1 -1
  385. package/lib/esm/type/matrix/utils/algorithm03.js +1 -1
  386. package/lib/esm/type/matrix/utils/algorithm04.js +1 -1
  387. package/lib/esm/type/matrix/utils/algorithm05.js +1 -1
  388. package/lib/esm/type/matrix/utils/algorithm06.js +1 -1
  389. package/lib/esm/type/matrix/utils/algorithm07.js +1 -1
  390. package/lib/esm/type/matrix/utils/algorithm08.js +1 -1
  391. package/lib/esm/type/matrix/utils/algorithm09.js +1 -1
  392. package/lib/esm/type/matrix/utils/algorithm10.js +1 -1
  393. package/lib/esm/type/matrix/utils/algorithm11.js +1 -1
  394. package/lib/esm/type/matrix/utils/algorithm12.js +1 -1
  395. package/lib/esm/type/matrix/utils/algorithm13.js +1 -1
  396. package/lib/esm/type/matrix/utils/algorithm14.js +1 -1
  397. package/lib/esm/type/number.js +1 -1
  398. package/lib/esm/type/string.js +1 -1
  399. package/lib/esm/type/unit/Unit.js +4 -5
  400. package/lib/esm/type/unit/function/createUnit.js +1 -1
  401. package/lib/esm/type/unit/function/splitUnit.js +1 -1
  402. package/lib/esm/type/unit/function/unit.js +1 -1
  403. package/lib/esm/type/unit/physicalConstants.js +2 -2
  404. package/lib/esm/utils/array.js +1 -1
  405. package/lib/esm/utils/customs.js +10 -0
  406. package/lib/esm/utils/map.js +135 -0
  407. package/lib/esm/utils/scope.js +26 -0
  408. package/lib/esm/utils/snapshot.js +3 -4
  409. package/lib/esm/version.js +1 -1
  410. package/package.json +18 -9
@@ -1,9 +1,12 @@
1
- import { clone } from '../../utils/object.js';
2
1
  import { factory } from '../../utils/factory.js';
3
2
  import { format } from '../../utils/string.js';
4
- var name = 'eigs';
5
- var dependencies = ['config', 'typed', 'matrix', 'addScalar', 'equal', 'subtract', 'abs', 'atan', 'cos', 'sin', 'multiplyScalar', 'inv', 'bignumber', 'multiply', 'add'];
6
- export var createEigs = /* #__PURE__ */factory(name, dependencies, (_ref) => {
3
+ import { createComplexEigs } from './eigs/complexEigs.js';
4
+ import { createRealSymmetric } from './eigs/realSymetric.js';
5
+ import { typeOf, isNumber, isBigNumber, isComplex, isFraction } from '../../utils/is.js';
6
+ var name = 'eigs'; // The absolute state of math.js's dependency system:
7
+
8
+ var dependencies = ['config', 'typed', 'matrix', 'addScalar', 'equal', 'subtract', 'abs', 'atan', 'cos', 'sin', 'multiplyScalar', 'divideScalar', 'inv', 'bignumber', 'multiply', 'add', 'larger', 'column', 'flatten', 'number', 'complex', 'sqrt', 'diag', 'qr', 'usolveAll', 'im', 're', 'smaller', 'round', 'log10', 'transpose', 'matrixFromColumns'];
9
+ export var createEigs = /* #__PURE__ */factory(name, dependencies, _ref => {
7
10
  var {
8
11
  config,
9
12
  typed,
@@ -16,415 +19,264 @@ export var createEigs = /* #__PURE__ */factory(name, dependencies, (_ref) => {
16
19
  cos,
17
20
  sin,
18
21
  multiplyScalar,
22
+ divideScalar,
19
23
  inv,
20
24
  bignumber,
21
25
  multiply,
22
- add
26
+ add,
27
+ larger,
28
+ column,
29
+ flatten,
30
+ number,
31
+ complex,
32
+ sqrt,
33
+ diag,
34
+ qr,
35
+ usolveAll,
36
+ im,
37
+ re,
38
+ smaller,
39
+ round,
40
+ log10,
41
+ transpose,
42
+ matrixFromColumns
23
43
  } = _ref;
24
-
44
+ var doRealSymetric = createRealSymmetric({
45
+ config,
46
+ addScalar,
47
+ subtract,
48
+ column,
49
+ flatten,
50
+ equal,
51
+ abs,
52
+ atan,
53
+ cos,
54
+ sin,
55
+ multiplyScalar,
56
+ inv,
57
+ bignumber,
58
+ complex,
59
+ multiply,
60
+ add
61
+ });
62
+ var doComplexEigs = createComplexEigs({
63
+ config,
64
+ addScalar,
65
+ subtract,
66
+ multiply,
67
+ multiplyScalar,
68
+ flatten,
69
+ divideScalar,
70
+ sqrt,
71
+ abs,
72
+ bignumber,
73
+ diag,
74
+ qr,
75
+ inv,
76
+ usolveAll,
77
+ equal,
78
+ complex,
79
+ larger,
80
+ smaller,
81
+ round,
82
+ log10,
83
+ transpose,
84
+ matrixFromColumns
85
+ });
25
86
  /**
26
- * Compute eigenvalue and eigenvector of a real symmetric matrix.
27
- * Only applicable to two dimensional symmetric matrices. Uses Jacobi
28
- * Algorithm. Matrix containing mixed type ('number', 'bignumber', 'fraction')
29
- * of elements are not supported. Input matrix or 2D array should contain all elements
30
- * of either 'number', 'bignumber' or 'fraction' type. For 'number' and 'fraction', the
31
- * eigenvalues are of 'number' type. For 'bignumber' the eigenvalues are of ''bignumber' type.
32
- * Eigenvectors are always of 'number' type.
87
+ * Compute eigenvalues and eigenvectors of a matrix. The eigenvalues are sorted by their absolute value, ascending.
88
+ * An eigenvalue with multiplicity k will be listed k times. The eigenvectors are returned as columns of a matrix –
89
+ * the eigenvector that belongs to the j-th eigenvalue in the list (eg. `values[j]`) is the j-th column (eg. `column(vectors, j)`).
90
+ * If the algorithm fails to converge, it will throw an error in that case, however, you may still find useful information
91
+ * in `err.values` and `err.vectors`.
33
92
  *
34
93
  * Syntax:
35
94
  *
36
- * math.eigs(x)
95
+ * math.eigs(x, [prec])
37
96
  *
38
97
  * Examples:
39
98
  *
99
+ * const { eigs, multiply, column, transpose } = math
40
100
  * const H = [[5, 2.3], [2.3, 1]]
41
- * const ans = math.eigs(H) // returns {values: [E1,E2...sorted], vectors: [v1,v2.... corresponding vectors as columns]}
101
+ * const ans = eigs(H) // returns {values: [E1,E2...sorted], vectors: [v1,v2.... corresponding vectors as columns]}
42
102
  * const E = ans.values
43
103
  * const U = ans.vectors
44
- * math.multiply(H, math.column(U, 0)) // returns math.multiply(E[0], math.column(U, 0))
45
- * const UTxHxU = math.multiply(math.transpose(U), H, U) // rotates H to the eigen-representation
104
+ * multiply(H, column(U, 0)) // returns multiply(E[0], column(U, 0))
105
+ * const UTxHxU = multiply(transpose(U), H, U) // diagonalizes H
46
106
  * E[0] == UTxHxU[0][0] // returns true
107
+ *
47
108
  * See also:
48
109
  *
49
110
  * inv
50
111
  *
51
112
  * @param {Array | Matrix} x Matrix to be diagonalized
52
- * @return {{values: Array, vectors: Array} | {values: Matrix, vectors: Matrix}} Object containing eigenvalues (Array or Matrix) and eigenvectors (2D Array/Matrix with eigenvectors as columns).
113
+ *
114
+ * @param {number | BigNumber} [prec] Precision, default value: 1e-15
115
+ * @return {{values: Array|Matrix, vectors: Array|Matrix}} Object containing an array of eigenvalues and a matrix with eigenvectors as columns.
116
+ *
53
117
  */
118
+
54
119
  return typed('eigs', {
55
120
  Array: function Array(x) {
56
- // check array size
57
121
  var mat = matrix(x);
58
- var size = mat.size();
59
-
60
- if (size.length !== 2 || size[0] !== size[1]) {
61
- throw new RangeError('Matrix must be square ' + '(size: ' + format(size) + ')');
62
- } // use dense 2D matrix implementation
63
-
64
-
65
- var ans = checkAndSubmit(mat, size[0]);
122
+ return computeValuesAndVectors(mat);
123
+ },
124
+ 'Array, number|BigNumber': function ArrayNumberBigNumber(x, prec) {
125
+ var mat = matrix(x);
126
+ return computeValuesAndVectors(mat, prec);
127
+ },
128
+ Matrix: function Matrix(mat) {
129
+ var {
130
+ values,
131
+ vectors
132
+ } = computeValuesAndVectors(mat);
66
133
  return {
67
- values: ans[0],
68
- vectors: ans[1]
134
+ values: matrix(values),
135
+ vectors: matrix(vectors)
69
136
  };
70
137
  },
71
- Matrix: function Matrix(x) {
72
- // use dense 2D array implementation
73
- // dense matrix
74
- var size = x.size();
75
-
76
- if (size.length !== 2 || size[0] !== size[1]) {
77
- throw new RangeError('Matrix must be square ' + '(size: ' + format(size) + ')');
78
- }
79
-
80
- var ans = checkAndSubmit(x, size[0]);
138
+ 'Matrix, number|BigNumber': function MatrixNumberBigNumber(mat, prec) {
139
+ var {
140
+ values,
141
+ vectors
142
+ } = computeValuesAndVectors(mat, prec);
81
143
  return {
82
- values: matrix(ans[0]),
83
- vectors: matrix(ans[1])
144
+ values: matrix(values),
145
+ vectors: matrix(vectors)
84
146
  };
85
147
  }
86
- }); // Is the matrix
87
- // symmetric ?
148
+ });
88
149
 
89
- function isSymmetric(x, n) {
90
- for (var i = 0; i < n; i++) {
91
- for (var j = i; j < n; j++) {
92
- // not symmtric
93
- if (!equal(x[i][j], x[j][i])) {
94
- throw new TypeError('Input matrix is not symmetric');
95
- }
96
- }
150
+ function computeValuesAndVectors(mat, prec) {
151
+ if (prec === undefined) {
152
+ prec = config.epsilon;
97
153
  }
98
- } // check input for possible problems
99
- // and perform diagonalization efficiently for
100
- // specific type of number
101
154
 
155
+ var size = mat.size();
102
156
 
103
- function checkAndSubmit(x, n) {
104
- var type = x.datatype(); // type check
105
-
106
- if (type === undefined) {
107
- type = x.getDataType();
157
+ if (size.length !== 2 || size[0] !== size[1]) {
158
+ throw new RangeError('Matrix must be square (size: ' + format(size) + ')');
108
159
  }
109
160
 
110
- if (type !== 'number' && type !== 'BigNumber' && type !== 'Fraction') {
111
- if (type === 'mixed') {
112
- throw new TypeError('Mixed matrix element type is not supported');
113
- } else {
114
- throw new TypeError('Matrix element type not supported (' + type + ')');
115
- }
116
- } else {
117
- isSymmetric(x.toArray(), n);
118
- } // perform efficient calculation for 'numbers'
161
+ var arr = mat.toArray();
162
+ var N = size[0];
119
163
 
164
+ if (isReal(arr, N, prec)) {
165
+ coerceReal(arr, N);
120
166
 
121
- if (type === 'number') {
122
- return diag(x.toArray());
123
- } else if (type === 'Fraction') {
124
- var xArr = x.toArray(); // convert fraction to numbers
167
+ if (isSymmetric(arr, N, prec)) {
168
+ var _type = coerceTypes(mat, arr, N);
125
169
 
126
- for (var i = 0; i < n; i++) {
127
- for (var j = i; j < n; j++) {
128
- xArr[i][j] = xArr[i][j].valueOf();
129
- xArr[j][i] = xArr[i][j];
130
- }
170
+ return doRealSymetric(arr, N, prec, _type);
131
171
  }
132
-
133
- return diag(x.toArray());
134
- } else if (type === 'BigNumber') {
135
- return diagBig(x.toArray());
136
172
  }
137
- } // diagonalization implementation for number (efficient)
138
173
 
174
+ var type = coerceTypes(mat, arr, N);
175
+ return doComplexEigs(arr, N, prec, type);
176
+ }
177
+ /** @return {boolean} */
139
178
 
140
- function diag(x) {
141
- var N = x.length;
142
- var e0 = Math.abs(config.epsilon / N);
143
- var psi;
144
- var Sij = new Array(N); // Sij is Identity Matrix
145
179
 
180
+ function isSymmetric(arr, N, prec) {
146
181
  for (var i = 0; i < N; i++) {
147
- Sij[i] = createArray(N, 0);
148
- Sij[i][i] = 1.0;
149
- } // initial error
150
-
151
-
152
- var Vab = getAij(x);
153
-
154
- while (Math.abs(Vab[1]) >= Math.abs(e0)) {
155
- var _i = Vab[0][0];
156
- var j = Vab[0][1];
157
- psi = getTheta(x[_i][_i], x[j][j], x[_i][j]);
158
- x = x1(x, psi, _i, j);
159
- Sij = Sij1(Sij, psi, _i, j);
160
- Vab = getAij(x);
161
- }
162
-
163
- var Ei = createArray(N, 0); // eigenvalues
164
-
165
- for (var _i2 = 0; _i2 < N; _i2++) {
166
- Ei[_i2] = x[_i2][_i2];
182
+ for (var j = i; j < N; j++) {
183
+ // TODO proper comparison of bignum and frac
184
+ if (larger(bignumber(abs(subtract(arr[i][j], arr[j][i]))), prec)) {
185
+ return false;
186
+ }
187
+ }
167
188
  }
168
189
 
169
- return sorting(clone(Ei), clone(Sij));
170
- } // diagonalization implementation for bigNumber
171
-
190
+ return true;
191
+ }
192
+ /** @return {boolean} */
172
193
 
173
- function diagBig(x) {
174
- var N = x.length;
175
- var e0 = abs(config.epsilon / N);
176
- var psi;
177
- var Sij = new Array(N); // Sij is Identity Matrix
178
194
 
195
+ function isReal(arr, N, prec) {
179
196
  for (var i = 0; i < N; i++) {
180
- Sij[i] = createArray(N, 0);
181
- Sij[i][i] = 1.0;
182
- } // initial error
183
-
184
-
185
- var Vab = getAijBig(x);
186
-
187
- while (abs(Vab[1]) >= abs(e0)) {
188
- var _i3 = Vab[0][0];
189
- var j = Vab[0][1];
190
- psi = getThetaBig(x[_i3][_i3], x[j][j], x[_i3][j]);
191
- x = x1Big(x, psi, _i3, j);
192
- Sij = Sij1Big(Sij, psi, _i3, j);
193
- Vab = getAijBig(x);
194
- }
195
-
196
- var Ei = createArray(N, 0); // eigenvalues
197
-
198
- for (var _i4 = 0; _i4 < N; _i4++) {
199
- Ei[_i4] = x[_i4][_i4];
200
- } // return [clone(Ei), clone(Sij)]
201
-
202
-
203
- return sorting(clone(Ei), clone(Sij));
204
- } // get angle
205
-
206
-
207
- function getTheta(aii, ajj, aij) {
208
- var denom = ajj - aii;
209
-
210
- if (Math.abs(denom) <= config.epsilon) {
211
- return Math.PI / 4;
212
- } else {
213
- return 0.5 * Math.atan(2 * aij / (ajj - aii));
214
- }
215
- } // get angle
216
-
217
-
218
- function getThetaBig(aii, ajj, aij) {
219
- var denom = subtract(ajj, aii);
220
-
221
- if (abs(denom) <= config.epsilon) {
222
- return bignumber(-1).acos().div(4);
223
- } else {
224
- return multiplyScalar(0.5, atan(multiply(2, aij, inv(denom))));
225
- }
226
- } // update eigvec
227
-
228
-
229
- function Sij1(Sij, theta, i, j) {
230
- var N = Sij.length;
231
- var c = Math.cos(theta);
232
- var s = Math.sin(theta);
233
- var Ski = createArray(N, 0);
234
- var Skj = createArray(N, 0);
235
-
236
- for (var k = 0; k < N; k++) {
237
- Ski[k] = c * Sij[k][i] - s * Sij[k][j];
238
- Skj[k] = s * Sij[k][i] + c * Sij[k][j];
239
- }
240
-
241
- for (var _k = 0; _k < N; _k++) {
242
- Sij[_k][i] = Ski[_k];
243
- Sij[_k][j] = Skj[_k];
244
- }
245
-
246
- return Sij;
247
- } // update eigvec for overlap
248
-
249
-
250
- function Sij1Big(Sij, theta, i, j) {
251
- var N = Sij.length;
252
- var c = cos(theta);
253
- var s = sin(theta);
254
- var Ski = createArray(N, bignumber(0));
255
- var Skj = createArray(N, bignumber(0));
256
-
257
- for (var k = 0; k < N; k++) {
258
- Ski[k] = subtract(multiplyScalar(c, Sij[k][i]), multiplyScalar(s, Sij[k][j]));
259
- Skj[k] = addScalar(multiplyScalar(s, Sij[k][i]), multiplyScalar(c, Sij[k][j]));
260
- }
261
-
262
- for (var _k2 = 0; _k2 < N; _k2++) {
263
- Sij[_k2][i] = Ski[_k2];
264
- Sij[_k2][j] = Skj[_k2];
197
+ for (var j = 0; j < N; j++) {
198
+ // TODO proper comparison of bignum and frac
199
+ if (larger(bignumber(abs(im(arr[i][j]))), prec)) {
200
+ return false;
201
+ }
202
+ }
265
203
  }
266
204
 
267
- return Sij;
268
- } // update matrix
269
-
270
-
271
- function x1Big(Hij, theta, i, j) {
272
- var N = Hij.length;
273
- var c = bignumber(cos(theta));
274
- var s = bignumber(sin(theta));
275
- var c2 = multiplyScalar(c, c);
276
- var s2 = multiplyScalar(s, s);
277
- var Aki = createArray(N, bignumber(0));
278
- var Akj = createArray(N, bignumber(0)); // 2cs Hij
279
-
280
- var csHij = multiply(bignumber(2), c, s, Hij[i][j]); // Aii
281
-
282
- var Aii = addScalar(subtract(multiplyScalar(c2, Hij[i][i]), csHij), multiplyScalar(s2, Hij[j][j]));
283
- var Ajj = add(multiplyScalar(s2, Hij[i][i]), csHij, multiplyScalar(c2, Hij[j][j])); // 0 to i
284
-
285
- for (var k = 0; k < N; k++) {
286
- Aki[k] = subtract(multiplyScalar(c, Hij[i][k]), multiplyScalar(s, Hij[j][k]));
287
- Akj[k] = addScalar(multiplyScalar(s, Hij[i][k]), multiplyScalar(c, Hij[j][k]));
288
- } // Modify Hij
289
-
290
-
291
- Hij[i][i] = Aii;
292
- Hij[j][j] = Ajj;
293
- Hij[i][j] = bignumber(0);
294
- Hij[j][i] = bignumber(0); // 0 to i
205
+ return true;
206
+ }
295
207
 
296
- for (var _k3 = 0; _k3 < N; _k3++) {
297
- if (_k3 !== i && _k3 !== j) {
298
- Hij[i][_k3] = Aki[_k3];
299
- Hij[_k3][i] = Aki[_k3];
300
- Hij[j][_k3] = Akj[_k3];
301
- Hij[_k3][j] = Akj[_k3];
208
+ function coerceReal(arr, N) {
209
+ for (var i = 0; i < N; i++) {
210
+ for (var j = 0; j < N; j++) {
211
+ arr[i][j] = re(arr[i][j]);
302
212
  }
303
213
  }
304
-
305
- return Hij;
306
- } // update matrix
307
-
308
-
309
- function x1(Hij, theta, i, j) {
310
- var N = Hij.length;
311
- var c = Math.cos(theta);
312
- var s = Math.sin(theta);
313
- var c2 = c * c;
314
- var s2 = s * s;
315
- var Aki = createArray(N, 0);
316
- var Akj = createArray(N, 0); // Aii
317
-
318
- var Aii = c2 * Hij[i][i] - 2 * c * s * Hij[i][j] + s2 * Hij[j][j];
319
- var Ajj = s2 * Hij[i][i] + 2 * c * s * Hij[i][j] + c2 * Hij[j][j]; // 0 to i
320
-
321
- for (var k = 0; k < N; k++) {
322
- Aki[k] = c * Hij[i][k] - s * Hij[j][k];
323
- Akj[k] = s * Hij[i][k] + c * Hij[j][k];
324
- } // Modify Hij
214
+ }
215
+ /** @return {'number' | 'BigNumber' | 'Complex'} */
325
216
 
326
217
 
327
- Hij[i][i] = Aii;
328
- Hij[j][j] = Ajj;
329
- Hij[i][j] = 0;
330
- Hij[j][i] = 0; // 0 to i
218
+ function coerceTypes(mat, arr, N) {
219
+ /** @type {string} */
220
+ var type = mat.datatype();
331
221
 
332
- for (var _k4 = 0; _k4 < N; _k4++) {
333
- if (_k4 !== i && _k4 !== j) {
334
- Hij[i][_k4] = Aki[_k4];
335
- Hij[_k4][i] = Aki[_k4];
336
- Hij[j][_k4] = Akj[_k4];
337
- Hij[_k4][j] = Akj[_k4];
338
- }
222
+ if (type === 'number' || type === 'BigNumber' || type === 'Complex') {
223
+ return type;
339
224
  }
340
225
 
341
- return Hij;
342
- } // get max off-diagonal value from Upper Diagonal
343
-
344
-
345
- function getAij(Mij) {
346
- var N = Mij.length;
347
- var maxMij = 0;
348
- var maxIJ = [0, 1];
226
+ var hasNumber = false;
227
+ var hasBig = false;
228
+ var hasComplex = false;
349
229
 
350
230
  for (var i = 0; i < N; i++) {
351
- for (var j = i + 1; j < N; j++) {
352
- if (Math.abs(maxMij) < Math.abs(Mij[i][j])) {
353
- maxMij = Math.abs(Mij[i][j]);
354
- maxIJ = [i, j];
231
+ for (var j = 0; j < N; j++) {
232
+ var el = arr[i][j];
233
+
234
+ if (isNumber(el) || isFraction(el)) {
235
+ hasNumber = true;
236
+ } else if (isBigNumber(el)) {
237
+ hasBig = true;
238
+ } else if (isComplex(el)) {
239
+ hasComplex = true;
240
+ } else {
241
+ throw TypeError('Unsupported type in Matrix: ' + typeOf(el));
355
242
  }
356
243
  }
357
244
  }
358
245
 
359
- return [maxIJ, maxMij];
360
- } // get max off-diagonal value from Upper Diagonal
361
-
362
-
363
- function getAijBig(Mij) {
364
- var N = Mij.length;
365
- var maxMij = 0;
366
- var maxIJ = [0, 1];
246
+ if (hasBig && hasComplex) {
247
+ console.warn('Complex BigNumbers not supported, this operation will lose precission.');
248
+ }
367
249
 
368
- for (var i = 0; i < N; i++) {
369
- for (var j = i + 1; j < N; j++) {
370
- if (abs(maxMij) < abs(Mij[i][j])) {
371
- maxMij = abs(Mij[i][j]);
372
- maxIJ = [i, j];
250
+ if (hasComplex) {
251
+ for (var _i = 0; _i < N; _i++) {
252
+ for (var _j = 0; _j < N; _j++) {
253
+ arr[_i][_j] = complex(arr[_i][_j]);
373
254
  }
374
255
  }
375
- }
376
-
377
- return [maxIJ, maxMij];
378
- } // sort results
379
256
 
380
-
381
- function sorting(E, S) {
382
- var N = E.length;
383
- var Ef = Array(N);
384
- var Sf = Array(N);
385
-
386
- for (var k = 0; k < N; k++) {
387
- Sf[k] = Array(N);
257
+ return 'Complex';
388
258
  }
389
259
 
390
- for (var i = 0; i < N; i++) {
391
- var minID = 0;
392
- var minE = E[0];
393
-
394
- for (var j = 0; j < E.length; j++) {
395
- if (E[j] < minE) {
396
- minID = j;
397
- minE = E[minID];
260
+ if (hasBig) {
261
+ for (var _i2 = 0; _i2 < N; _i2++) {
262
+ for (var _j2 = 0; _j2 < N; _j2++) {
263
+ arr[_i2][_j2] = bignumber(arr[_i2][_j2]);
398
264
  }
399
265
  }
400
266
 
401
- Ef[i] = E.splice(minID, 1)[0];
402
-
403
- for (var _k5 = 0; _k5 < N; _k5++) {
404
- Sf[_k5][i] = S[_k5][minID];
405
-
406
- S[_k5].splice(minID, 1);
407
- }
267
+ return 'BigNumber';
408
268
  }
409
269
 
410
- return [clone(Ef), clone(Sf)];
411
- }
412
- /**
413
- * Create an array of a certain size and fill all items with an initial value
414
- * @param {number} size
415
- * @param {number} value
416
- * @return {number[]}
417
- */
418
-
419
-
420
- function createArray(size, value) {
421
- // TODO: as soon as all browsers support Array.fill, use that instead (IE doesn't support it)
422
- var array = new Array(size);
270
+ if (hasNumber) {
271
+ for (var _i3 = 0; _i3 < N; _i3++) {
272
+ for (var _j3 = 0; _j3 < N; _j3++) {
273
+ arr[_i3][_j3] = number(arr[_i3][_j3]);
274
+ }
275
+ }
423
276
 
424
- for (var i = 0; i < size; i++) {
425
- array[i] = value;
277
+ return 'number';
278
+ } else {
279
+ throw TypeError('Matrix contains unsupported types only.');
426
280
  }
427
-
428
- return array;
429
281
  }
430
282
  });
@@ -3,7 +3,7 @@ import { format } from '../../utils/string.js';
3
3
  import { factory } from '../../utils/factory.js';
4
4
  var name = 'expm';
5
5
  var dependencies = ['typed', 'abs', 'add', 'identity', 'inv', 'multiply'];
6
- export var createExpm = /* #__PURE__ */factory(name, dependencies, (_ref) => {
6
+ export var createExpm = /* #__PURE__ */factory(name, dependencies, _ref => {
7
7
  var {
8
8
  typed,
9
9
  abs,
@@ -3,7 +3,7 @@ import { maxArgumentCount } from '../../utils/function.js';
3
3
  import { factory } from '../../utils/factory.js';
4
4
  var name = 'filter';
5
5
  var dependencies = ['typed'];
6
- export var createFilter = /* #__PURE__ */factory(name, dependencies, (_ref) => {
6
+ export var createFilter = /* #__PURE__ */factory(name, dependencies, _ref => {
7
7
  var {
8
8
  typed
9
9
  } = _ref;
@@ -3,7 +3,7 @@ import { flatten as flattenArray } from '../../utils/array.js';
3
3
  import { factory } from '../../utils/factory.js';
4
4
  var name = 'flatten';
5
5
  var dependencies = ['typed', 'matrix'];
6
- export var createFlatten = /* #__PURE__ */factory(name, dependencies, (_ref) => {
6
+ export var createFlatten = /* #__PURE__ */factory(name, dependencies, _ref => {
7
7
  var {
8
8
  typed,
9
9
  matrix
@@ -11,6 +11,7 @@ export var createFlatten = /* #__PURE__ */factory(name, dependencies, (_ref) =>
11
11
 
12
12
  /**
13
13
  * Flatten a multi dimensional matrix into a single dimensional matrix.
14
+ * It is guaranteed to always return a clone of the argument.
14
15
  *
15
16
  * Syntax:
16
17
  *
@@ -3,7 +3,7 @@ import { forEach as forEachArray } from '../../utils/array.js';
3
3
  import { factory } from '../../utils/factory.js';
4
4
  var name = 'forEach';
5
5
  var dependencies = ['typed'];
6
- export var createForEach = /* #__PURE__ */factory(name, dependencies, (_ref) => {
6
+ export var createForEach = /* #__PURE__ */factory(name, dependencies, _ref => {
7
7
  var {
8
8
  typed
9
9
  } = _ref;
@@ -3,7 +3,7 @@ import { getArrayDataType } from '../../utils/array.js';
3
3
  import { typeOf } from '../../utils/is.js';
4
4
  var name = 'getMatrixDataType';
5
5
  var dependencies = ['typed'];
6
- export var createGetMatrixDataType = /* #__PURE__ */factory(name, dependencies, (_ref) => {
6
+ export var createGetMatrixDataType = /* #__PURE__ */factory(name, dependencies, _ref => {
7
7
  var {
8
8
  typed
9
9
  } = _ref;
@@ -4,7 +4,7 @@ import { isInteger } from '../../utils/number.js';
4
4
  import { factory } from '../../utils/factory.js';
5
5
  var name = 'identity';
6
6
  var dependencies = ['typed', 'config', 'matrix', 'BigNumber', 'DenseMatrix', 'SparseMatrix'];
7
- export var createIdentity = /* #__PURE__ */factory(name, dependencies, (_ref) => {
7
+ export var createIdentity = /* #__PURE__ */factory(name, dependencies, _ref => {
8
8
  var {
9
9
  typed,
10
10
  config,