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
@@ -5,14 +5,19 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createEigs = void 0;
7
7
 
8
- var _object = require("../../utils/object.js");
9
-
10
8
  var _factory = require("../../utils/factory.js");
11
9
 
12
10
  var _string = require("../../utils/string.js");
13
11
 
14
- var name = 'eigs';
15
- var dependencies = ['config', 'typed', 'matrix', 'addScalar', 'equal', 'subtract', 'abs', 'atan', 'cos', 'sin', 'multiplyScalar', 'inv', 'bignumber', 'multiply', 'add'];
12
+ var _complexEigs = require("./eigs/complexEigs.js");
13
+
14
+ var _realSymetric = require("./eigs/realSymetric.js");
15
+
16
+ var _is = require("../../utils/is.js");
17
+
18
+ var name = 'eigs'; // The absolute state of math.js's dependency system:
19
+
20
+ 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'];
16
21
  var createEigs = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
22
  var config = _ref.config,
18
23
  typed = _ref.typed,
@@ -25,415 +30,264 @@ var createEigs = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
25
30
  cos = _ref.cos,
26
31
  sin = _ref.sin,
27
32
  multiplyScalar = _ref.multiplyScalar,
33
+ divideScalar = _ref.divideScalar,
28
34
  inv = _ref.inv,
29
35
  bignumber = _ref.bignumber,
30
36
  multiply = _ref.multiply,
31
- add = _ref.add;
32
-
37
+ add = _ref.add,
38
+ larger = _ref.larger,
39
+ column = _ref.column,
40
+ flatten = _ref.flatten,
41
+ number = _ref.number,
42
+ complex = _ref.complex,
43
+ sqrt = _ref.sqrt,
44
+ diag = _ref.diag,
45
+ qr = _ref.qr,
46
+ usolveAll = _ref.usolveAll,
47
+ im = _ref.im,
48
+ re = _ref.re,
49
+ smaller = _ref.smaller,
50
+ round = _ref.round,
51
+ log10 = _ref.log10,
52
+ transpose = _ref.transpose,
53
+ matrixFromColumns = _ref.matrixFromColumns;
54
+ var doRealSymetric = (0, _realSymetric.createRealSymmetric)({
55
+ config: config,
56
+ addScalar: addScalar,
57
+ subtract: subtract,
58
+ column: column,
59
+ flatten: flatten,
60
+ equal: equal,
61
+ abs: abs,
62
+ atan: atan,
63
+ cos: cos,
64
+ sin: sin,
65
+ multiplyScalar: multiplyScalar,
66
+ inv: inv,
67
+ bignumber: bignumber,
68
+ complex: complex,
69
+ multiply: multiply,
70
+ add: add
71
+ });
72
+ var doComplexEigs = (0, _complexEigs.createComplexEigs)({
73
+ config: config,
74
+ addScalar: addScalar,
75
+ subtract: subtract,
76
+ multiply: multiply,
77
+ multiplyScalar: multiplyScalar,
78
+ flatten: flatten,
79
+ divideScalar: divideScalar,
80
+ sqrt: sqrt,
81
+ abs: abs,
82
+ bignumber: bignumber,
83
+ diag: diag,
84
+ qr: qr,
85
+ inv: inv,
86
+ usolveAll: usolveAll,
87
+ equal: equal,
88
+ complex: complex,
89
+ larger: larger,
90
+ smaller: smaller,
91
+ round: round,
92
+ log10: log10,
93
+ transpose: transpose,
94
+ matrixFromColumns: matrixFromColumns
95
+ });
33
96
  /**
34
- * Compute eigenvalue and eigenvector of a real symmetric matrix.
35
- * Only applicable to two dimensional symmetric matrices. Uses Jacobi
36
- * Algorithm. Matrix containing mixed type ('number', 'bignumber', 'fraction')
37
- * of elements are not supported. Input matrix or 2D array should contain all elements
38
- * of either 'number', 'bignumber' or 'fraction' type. For 'number' and 'fraction', the
39
- * eigenvalues are of 'number' type. For 'bignumber' the eigenvalues are of ''bignumber' type.
40
- * Eigenvectors are always of 'number' type.
97
+ * Compute eigenvalues and eigenvectors of a matrix. The eigenvalues are sorted by their absolute value, ascending.
98
+ * An eigenvalue with multiplicity k will be listed k times. The eigenvectors are returned as columns of a matrix –
99
+ * the eigenvector that belongs to the j-th eigenvalue in the list (eg. `values[j]`) is the j-th column (eg. `column(vectors, j)`).
100
+ * If the algorithm fails to converge, it will throw an error in that case, however, you may still find useful information
101
+ * in `err.values` and `err.vectors`.
41
102
  *
42
103
  * Syntax:
43
104
  *
44
- * math.eigs(x)
105
+ * math.eigs(x, [prec])
45
106
  *
46
107
  * Examples:
47
108
  *
109
+ * const { eigs, multiply, column, transpose } = math
48
110
  * const H = [[5, 2.3], [2.3, 1]]
49
- * const ans = math.eigs(H) // returns {values: [E1,E2...sorted], vectors: [v1,v2.... corresponding vectors as columns]}
111
+ * const ans = eigs(H) // returns {values: [E1,E2...sorted], vectors: [v1,v2.... corresponding vectors as columns]}
50
112
  * const E = ans.values
51
113
  * const U = ans.vectors
52
- * math.multiply(H, math.column(U, 0)) // returns math.multiply(E[0], math.column(U, 0))
53
- * const UTxHxU = math.multiply(math.transpose(U), H, U) // rotates H to the eigen-representation
114
+ * multiply(H, column(U, 0)) // returns multiply(E[0], column(U, 0))
115
+ * const UTxHxU = multiply(transpose(U), H, U) // diagonalizes H
54
116
  * E[0] == UTxHxU[0][0] // returns true
117
+ *
55
118
  * See also:
56
119
  *
57
120
  * inv
58
121
  *
59
122
  * @param {Array | Matrix} x Matrix to be diagonalized
60
- * @return {{values: Array, vectors: Array} | {values: Matrix, vectors: Matrix}} Object containing eigenvalues (Array or Matrix) and eigenvectors (2D Array/Matrix with eigenvectors as columns).
123
+ *
124
+ * @param {number | BigNumber} [prec] Precision, default value: 1e-15
125
+ * @return {{values: Array|Matrix, vectors: Array|Matrix}} Object containing an array of eigenvalues and a matrix with eigenvectors as columns.
126
+ *
61
127
  */
128
+
62
129
  return typed('eigs', {
63
130
  Array: function Array(x) {
64
- // check array size
65
131
  var mat = matrix(x);
66
- var size = mat.size();
67
-
68
- if (size.length !== 2 || size[0] !== size[1]) {
69
- throw new RangeError('Matrix must be square ' + '(size: ' + (0, _string.format)(size) + ')');
70
- } // use dense 2D matrix implementation
71
-
132
+ return computeValuesAndVectors(mat);
133
+ },
134
+ 'Array, number|BigNumber': function ArrayNumberBigNumber(x, prec) {
135
+ var mat = matrix(x);
136
+ return computeValuesAndVectors(mat, prec);
137
+ },
138
+ Matrix: function Matrix(mat) {
139
+ var _computeValuesAndVect = computeValuesAndVectors(mat),
140
+ values = _computeValuesAndVect.values,
141
+ vectors = _computeValuesAndVect.vectors;
72
142
 
73
- var ans = checkAndSubmit(mat, size[0]);
74
143
  return {
75
- values: ans[0],
76
- vectors: ans[1]
144
+ values: matrix(values),
145
+ vectors: matrix(vectors)
77
146
  };
78
147
  },
79
- Matrix: function Matrix(x) {
80
- // use dense 2D array implementation
81
- // dense matrix
82
- var size = x.size();
83
-
84
- if (size.length !== 2 || size[0] !== size[1]) {
85
- throw new RangeError('Matrix must be square ' + '(size: ' + (0, _string.format)(size) + ')');
86
- }
148
+ 'Matrix, number|BigNumber': function MatrixNumberBigNumber(mat, prec) {
149
+ var _computeValuesAndVect2 = computeValuesAndVectors(mat, prec),
150
+ values = _computeValuesAndVect2.values,
151
+ vectors = _computeValuesAndVect2.vectors;
87
152
 
88
- var ans = checkAndSubmit(x, size[0]);
89
153
  return {
90
- values: matrix(ans[0]),
91
- vectors: matrix(ans[1])
154
+ values: matrix(values),
155
+ vectors: matrix(vectors)
92
156
  };
93
157
  }
94
- }); // Is the matrix
95
- // symmetric ?
96
-
97
- function isSymmetric(x, n) {
98
- for (var i = 0; i < n; i++) {
99
- for (var j = i; j < n; j++) {
100
- // not symmtric
101
- if (!equal(x[i][j], x[j][i])) {
102
- throw new TypeError('Input matrix is not symmetric');
103
- }
104
- }
105
- }
106
- } // check input for possible problems
107
- // and perform diagonalization efficiently for
108
- // specific type of number
158
+ });
109
159
 
160
+ function computeValuesAndVectors(mat, prec) {
161
+ if (prec === undefined) {
162
+ prec = config.epsilon;
163
+ }
110
164
 
111
- function checkAndSubmit(x, n) {
112
- var type = x.datatype(); // type check
165
+ var size = mat.size();
113
166
 
114
- if (type === undefined) {
115
- type = x.getDataType();
167
+ if (size.length !== 2 || size[0] !== size[1]) {
168
+ throw new RangeError('Matrix must be square (size: ' + (0, _string.format)(size) + ')');
116
169
  }
117
170
 
118
- if (type !== 'number' && type !== 'BigNumber' && type !== 'Fraction') {
119
- if (type === 'mixed') {
120
- throw new TypeError('Mixed matrix element type is not supported');
121
- } else {
122
- throw new TypeError('Matrix element type not supported (' + type + ')');
123
- }
124
- } else {
125
- isSymmetric(x.toArray(), n);
126
- } // perform efficient calculation for 'numbers'
171
+ var arr = mat.toArray();
172
+ var N = size[0];
127
173
 
174
+ if (isReal(arr, N, prec)) {
175
+ coerceReal(arr, N);
128
176
 
129
- if (type === 'number') {
130
- return diag(x.toArray());
131
- } else if (type === 'Fraction') {
132
- var xArr = x.toArray(); // convert fraction to numbers
177
+ if (isSymmetric(arr, N, prec)) {
178
+ var _type = coerceTypes(mat, arr, N);
133
179
 
134
- for (var i = 0; i < n; i++) {
135
- for (var j = i; j < n; j++) {
136
- xArr[i][j] = xArr[i][j].valueOf();
137
- xArr[j][i] = xArr[i][j];
138
- }
180
+ return doRealSymetric(arr, N, prec, _type);
139
181
  }
140
-
141
- return diag(x.toArray());
142
- } else if (type === 'BigNumber') {
143
- return diagBig(x.toArray());
144
182
  }
145
- } // diagonalization implementation for number (efficient)
146
183
 
184
+ var type = coerceTypes(mat, arr, N);
185
+ return doComplexEigs(arr, N, prec, type);
186
+ }
187
+ /** @return {boolean} */
147
188
 
148
- function diag(x) {
149
- var N = x.length;
150
- var e0 = Math.abs(config.epsilon / N);
151
- var psi;
152
- var Sij = new Array(N); // Sij is Identity Matrix
153
189
 
190
+ function isSymmetric(arr, N, prec) {
154
191
  for (var i = 0; i < N; i++) {
155
- Sij[i] = createArray(N, 0);
156
- Sij[i][i] = 1.0;
157
- } // initial error
158
-
159
-
160
- var Vab = getAij(x);
161
-
162
- while (Math.abs(Vab[1]) >= Math.abs(e0)) {
163
- var _i = Vab[0][0];
164
- var j = Vab[0][1];
165
- psi = getTheta(x[_i][_i], x[j][j], x[_i][j]);
166
- x = x1(x, psi, _i, j);
167
- Sij = Sij1(Sij, psi, _i, j);
168
- Vab = getAij(x);
169
- }
170
-
171
- var Ei = createArray(N, 0); // eigenvalues
172
-
173
- for (var _i2 = 0; _i2 < N; _i2++) {
174
- Ei[_i2] = x[_i2][_i2];
192
+ for (var j = i; j < N; j++) {
193
+ // TODO proper comparison of bignum and frac
194
+ if (larger(bignumber(abs(subtract(arr[i][j], arr[j][i]))), prec)) {
195
+ return false;
196
+ }
197
+ }
175
198
  }
176
199
 
177
- return sorting((0, _object.clone)(Ei), (0, _object.clone)(Sij));
178
- } // diagonalization implementation for bigNumber
179
-
200
+ return true;
201
+ }
202
+ /** @return {boolean} */
180
203
 
181
- function diagBig(x) {
182
- var N = x.length;
183
- var e0 = abs(config.epsilon / N);
184
- var psi;
185
- var Sij = new Array(N); // Sij is Identity Matrix
186
204
 
205
+ function isReal(arr, N, prec) {
187
206
  for (var i = 0; i < N; i++) {
188
- Sij[i] = createArray(N, 0);
189
- Sij[i][i] = 1.0;
190
- } // initial error
191
-
192
-
193
- var Vab = getAijBig(x);
194
-
195
- while (abs(Vab[1]) >= abs(e0)) {
196
- var _i3 = Vab[0][0];
197
- var j = Vab[0][1];
198
- psi = getThetaBig(x[_i3][_i3], x[j][j], x[_i3][j]);
199
- x = x1Big(x, psi, _i3, j);
200
- Sij = Sij1Big(Sij, psi, _i3, j);
201
- Vab = getAijBig(x);
202
- }
203
-
204
- var Ei = createArray(N, 0); // eigenvalues
205
-
206
- for (var _i4 = 0; _i4 < N; _i4++) {
207
- Ei[_i4] = x[_i4][_i4];
208
- } // return [clone(Ei), clone(Sij)]
209
-
210
-
211
- return sorting((0, _object.clone)(Ei), (0, _object.clone)(Sij));
212
- } // get angle
213
-
214
-
215
- function getTheta(aii, ajj, aij) {
216
- var denom = ajj - aii;
217
-
218
- if (Math.abs(denom) <= config.epsilon) {
219
- return Math.PI / 4;
220
- } else {
221
- return 0.5 * Math.atan(2 * aij / (ajj - aii));
222
- }
223
- } // get angle
224
-
225
-
226
- function getThetaBig(aii, ajj, aij) {
227
- var denom = subtract(ajj, aii);
228
-
229
- if (abs(denom) <= config.epsilon) {
230
- return bignumber(-1).acos().div(4);
231
- } else {
232
- return multiplyScalar(0.5, atan(multiply(2, aij, inv(denom))));
233
- }
234
- } // update eigvec
235
-
236
-
237
- function Sij1(Sij, theta, i, j) {
238
- var N = Sij.length;
239
- var c = Math.cos(theta);
240
- var s = Math.sin(theta);
241
- var Ski = createArray(N, 0);
242
- var Skj = createArray(N, 0);
243
-
244
- for (var k = 0; k < N; k++) {
245
- Ski[k] = c * Sij[k][i] - s * Sij[k][j];
246
- Skj[k] = s * Sij[k][i] + c * Sij[k][j];
247
- }
248
-
249
- for (var _k = 0; _k < N; _k++) {
250
- Sij[_k][i] = Ski[_k];
251
- Sij[_k][j] = Skj[_k];
252
- }
253
-
254
- return Sij;
255
- } // update eigvec for overlap
256
-
257
-
258
- function Sij1Big(Sij, theta, i, j) {
259
- var N = Sij.length;
260
- var c = cos(theta);
261
- var s = sin(theta);
262
- var Ski = createArray(N, bignumber(0));
263
- var Skj = createArray(N, bignumber(0));
264
-
265
- for (var k = 0; k < N; k++) {
266
- Ski[k] = subtract(multiplyScalar(c, Sij[k][i]), multiplyScalar(s, Sij[k][j]));
267
- Skj[k] = addScalar(multiplyScalar(s, Sij[k][i]), multiplyScalar(c, Sij[k][j]));
268
- }
269
-
270
- for (var _k2 = 0; _k2 < N; _k2++) {
271
- Sij[_k2][i] = Ski[_k2];
272
- Sij[_k2][j] = Skj[_k2];
207
+ for (var j = 0; j < N; j++) {
208
+ // TODO proper comparison of bignum and frac
209
+ if (larger(bignumber(abs(im(arr[i][j]))), prec)) {
210
+ return false;
211
+ }
212
+ }
273
213
  }
274
214
 
275
- return Sij;
276
- } // update matrix
277
-
278
-
279
- function x1Big(Hij, theta, i, j) {
280
- var N = Hij.length;
281
- var c = bignumber(cos(theta));
282
- var s = bignumber(sin(theta));
283
- var c2 = multiplyScalar(c, c);
284
- var s2 = multiplyScalar(s, s);
285
- var Aki = createArray(N, bignumber(0));
286
- var Akj = createArray(N, bignumber(0)); // 2cs Hij
287
-
288
- var csHij = multiply(bignumber(2), c, s, Hij[i][j]); // Aii
289
-
290
- var Aii = addScalar(subtract(multiplyScalar(c2, Hij[i][i]), csHij), multiplyScalar(s2, Hij[j][j]));
291
- var Ajj = add(multiplyScalar(s2, Hij[i][i]), csHij, multiplyScalar(c2, Hij[j][j])); // 0 to i
292
-
293
- for (var k = 0; k < N; k++) {
294
- Aki[k] = subtract(multiplyScalar(c, Hij[i][k]), multiplyScalar(s, Hij[j][k]));
295
- Akj[k] = addScalar(multiplyScalar(s, Hij[i][k]), multiplyScalar(c, Hij[j][k]));
296
- } // Modify Hij
297
-
298
-
299
- Hij[i][i] = Aii;
300
- Hij[j][j] = Ajj;
301
- Hij[i][j] = bignumber(0);
302
- Hij[j][i] = bignumber(0); // 0 to i
215
+ return true;
216
+ }
303
217
 
304
- for (var _k3 = 0; _k3 < N; _k3++) {
305
- if (_k3 !== i && _k3 !== j) {
306
- Hij[i][_k3] = Aki[_k3];
307
- Hij[_k3][i] = Aki[_k3];
308
- Hij[j][_k3] = Akj[_k3];
309
- Hij[_k3][j] = Akj[_k3];
218
+ function coerceReal(arr, N) {
219
+ for (var i = 0; i < N; i++) {
220
+ for (var j = 0; j < N; j++) {
221
+ arr[i][j] = re(arr[i][j]);
310
222
  }
311
223
  }
312
-
313
- return Hij;
314
- } // update matrix
315
-
316
-
317
- function x1(Hij, theta, i, j) {
318
- var N = Hij.length;
319
- var c = Math.cos(theta);
320
- var s = Math.sin(theta);
321
- var c2 = c * c;
322
- var s2 = s * s;
323
- var Aki = createArray(N, 0);
324
- var Akj = createArray(N, 0); // Aii
325
-
326
- var Aii = c2 * Hij[i][i] - 2 * c * s * Hij[i][j] + s2 * Hij[j][j];
327
- var Ajj = s2 * Hij[i][i] + 2 * c * s * Hij[i][j] + c2 * Hij[j][j]; // 0 to i
328
-
329
- for (var k = 0; k < N; k++) {
330
- Aki[k] = c * Hij[i][k] - s * Hij[j][k];
331
- Akj[k] = s * Hij[i][k] + c * Hij[j][k];
332
- } // Modify Hij
224
+ }
225
+ /** @return {'number' | 'BigNumber' | 'Complex'} */
333
226
 
334
227
 
335
- Hij[i][i] = Aii;
336
- Hij[j][j] = Ajj;
337
- Hij[i][j] = 0;
338
- Hij[j][i] = 0; // 0 to i
228
+ function coerceTypes(mat, arr, N) {
229
+ /** @type {string} */
230
+ var type = mat.datatype();
339
231
 
340
- for (var _k4 = 0; _k4 < N; _k4++) {
341
- if (_k4 !== i && _k4 !== j) {
342
- Hij[i][_k4] = Aki[_k4];
343
- Hij[_k4][i] = Aki[_k4];
344
- Hij[j][_k4] = Akj[_k4];
345
- Hij[_k4][j] = Akj[_k4];
346
- }
232
+ if (type === 'number' || type === 'BigNumber' || type === 'Complex') {
233
+ return type;
347
234
  }
348
235
 
349
- return Hij;
350
- } // get max off-diagonal value from Upper Diagonal
351
-
352
-
353
- function getAij(Mij) {
354
- var N = Mij.length;
355
- var maxMij = 0;
356
- var maxIJ = [0, 1];
236
+ var hasNumber = false;
237
+ var hasBig = false;
238
+ var hasComplex = false;
357
239
 
358
240
  for (var i = 0; i < N; i++) {
359
- for (var j = i + 1; j < N; j++) {
360
- if (Math.abs(maxMij) < Math.abs(Mij[i][j])) {
361
- maxMij = Math.abs(Mij[i][j]);
362
- maxIJ = [i, j];
241
+ for (var j = 0; j < N; j++) {
242
+ var el = arr[i][j];
243
+
244
+ if ((0, _is.isNumber)(el) || (0, _is.isFraction)(el)) {
245
+ hasNumber = true;
246
+ } else if ((0, _is.isBigNumber)(el)) {
247
+ hasBig = true;
248
+ } else if ((0, _is.isComplex)(el)) {
249
+ hasComplex = true;
250
+ } else {
251
+ throw TypeError('Unsupported type in Matrix: ' + (0, _is.typeOf)(el));
363
252
  }
364
253
  }
365
254
  }
366
255
 
367
- return [maxIJ, maxMij];
368
- } // get max off-diagonal value from Upper Diagonal
369
-
370
-
371
- function getAijBig(Mij) {
372
- var N = Mij.length;
373
- var maxMij = 0;
374
- var maxIJ = [0, 1];
256
+ if (hasBig && hasComplex) {
257
+ console.warn('Complex BigNumbers not supported, this operation will lose precission.');
258
+ }
375
259
 
376
- for (var i = 0; i < N; i++) {
377
- for (var j = i + 1; j < N; j++) {
378
- if (abs(maxMij) < abs(Mij[i][j])) {
379
- maxMij = abs(Mij[i][j]);
380
- maxIJ = [i, j];
260
+ if (hasComplex) {
261
+ for (var _i = 0; _i < N; _i++) {
262
+ for (var _j = 0; _j < N; _j++) {
263
+ arr[_i][_j] = complex(arr[_i][_j]);
381
264
  }
382
265
  }
383
- }
384
-
385
- return [maxIJ, maxMij];
386
- } // sort results
387
266
 
388
-
389
- function sorting(E, S) {
390
- var N = E.length;
391
- var Ef = Array(N);
392
- var Sf = Array(N);
393
-
394
- for (var k = 0; k < N; k++) {
395
- Sf[k] = Array(N);
267
+ return 'Complex';
396
268
  }
397
269
 
398
- for (var i = 0; i < N; i++) {
399
- var minID = 0;
400
- var minE = E[0];
401
-
402
- for (var j = 0; j < E.length; j++) {
403
- if (E[j] < minE) {
404
- minID = j;
405
- minE = E[minID];
270
+ if (hasBig) {
271
+ for (var _i2 = 0; _i2 < N; _i2++) {
272
+ for (var _j2 = 0; _j2 < N; _j2++) {
273
+ arr[_i2][_j2] = bignumber(arr[_i2][_j2]);
406
274
  }
407
275
  }
408
276
 
409
- Ef[i] = E.splice(minID, 1)[0];
410
-
411
- for (var _k5 = 0; _k5 < N; _k5++) {
412
- Sf[_k5][i] = S[_k5][minID];
413
-
414
- S[_k5].splice(minID, 1);
415
- }
277
+ return 'BigNumber';
416
278
  }
417
279
 
418
- return [(0, _object.clone)(Ef), (0, _object.clone)(Sf)];
419
- }
420
- /**
421
- * Create an array of a certain size and fill all items with an initial value
422
- * @param {number} size
423
- * @param {number} value
424
- * @return {number[]}
425
- */
426
-
427
-
428
- function createArray(size, value) {
429
- // TODO: as soon as all browsers support Array.fill, use that instead (IE doesn't support it)
430
- var array = new Array(size);
280
+ if (hasNumber) {
281
+ for (var _i3 = 0; _i3 < N; _i3++) {
282
+ for (var _j3 = 0; _j3 < N; _j3++) {
283
+ arr[_i3][_j3] = number(arr[_i3][_j3]);
284
+ }
285
+ }
431
286
 
432
- for (var i = 0; i < size; i++) {
433
- array[i] = value;
287
+ return 'number';
288
+ } else {
289
+ throw TypeError('Matrix contains unsupported types only.');
434
290
  }
435
-
436
- return array;
437
291
  }
438
292
  });
439
293
  exports.createEigs = createEigs;
@@ -19,6 +19,7 @@ var createFlatten = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
19
19
 
20
20
  /**
21
21
  * Flatten a multi dimensional matrix into a single dimensional matrix.
22
+ * It is guaranteed to always return a clone of the argument.
22
23
  *
23
24
  * Syntax:
24
25
  *