mathjs 10.1.0 → 10.3.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 (341) hide show
  1. package/HISTORY.md +38 -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/deepEqual.md +6 -0
  53. package/docs/reference/functions/derivative.md +6 -0
  54. package/docs/reference/functions/det.md +6 -0
  55. package/docs/reference/functions/diag.md +6 -0
  56. package/docs/reference/functions/diff.md +6 -0
  57. package/docs/reference/functions/distance.md +6 -0
  58. package/docs/reference/functions/divide.md +6 -0
  59. package/docs/reference/functions/dot.md +6 -0
  60. package/docs/reference/functions/dotDivide.md +6 -0
  61. package/docs/reference/functions/dotMultiply.md +6 -0
  62. package/docs/reference/functions/dotPow.md +6 -0
  63. package/docs/reference/functions/eigs.md +6 -0
  64. package/docs/reference/functions/equal.md +6 -0
  65. package/docs/reference/functions/equalText.md +6 -0
  66. package/docs/reference/functions/erf.md +6 -0
  67. package/docs/reference/functions/evaluate.md +6 -0
  68. package/docs/reference/functions/exp.md +6 -0
  69. package/docs/reference/functions/expm.md +6 -0
  70. package/docs/reference/functions/expm1.md +6 -0
  71. package/docs/reference/functions/factorial.md +6 -0
  72. package/docs/reference/functions/filter.md +6 -0
  73. package/docs/reference/functions/fix.md +6 -0
  74. package/docs/reference/functions/flatten.md +6 -0
  75. package/docs/reference/functions/floor.md +6 -0
  76. package/docs/reference/functions/forEach.md +6 -0
  77. package/docs/reference/functions/format.md +6 -0
  78. package/docs/reference/functions/gamma.md +6 -0
  79. package/docs/reference/functions/gcd.md +6 -0
  80. package/docs/reference/functions/getMatrixDataType.md +6 -0
  81. package/docs/reference/functions/hasNumericValue.md +6 -0
  82. package/docs/reference/functions/help.md +6 -0
  83. package/docs/reference/functions/hex.md +6 -0
  84. package/docs/reference/functions/hypot.md +6 -0
  85. package/docs/reference/functions/identity.md +6 -0
  86. package/docs/reference/functions/im.md +6 -0
  87. package/docs/reference/functions/intersect.md +6 -0
  88. package/docs/reference/functions/inv.md +6 -0
  89. package/docs/reference/functions/invmod.md +6 -0
  90. package/docs/reference/functions/isInteger.md +6 -0
  91. package/docs/reference/functions/isNaN.md +6 -0
  92. package/docs/reference/functions/isNegative.md +6 -0
  93. package/docs/reference/functions/isNumeric.md +6 -0
  94. package/docs/reference/functions/isPositive.md +6 -0
  95. package/docs/reference/functions/isPrime.md +6 -0
  96. package/docs/reference/functions/isZero.md +6 -0
  97. package/docs/reference/functions/kldivergence.md +6 -0
  98. package/docs/reference/functions/kron.md +6 -0
  99. package/docs/reference/functions/larger.md +6 -0
  100. package/docs/reference/functions/largerEq.md +6 -0
  101. package/docs/reference/functions/lcm.md +6 -0
  102. package/docs/reference/functions/leafCount.md +52 -0
  103. package/docs/reference/functions/leftShift.md +6 -0
  104. package/docs/reference/functions/log.md +6 -0
  105. package/docs/reference/functions/log10.md +6 -0
  106. package/docs/reference/functions/log1p.md +6 -0
  107. package/docs/reference/functions/log2.md +6 -0
  108. package/docs/reference/functions/lsolve.md +6 -0
  109. package/docs/reference/functions/lsolveAll.md +6 -0
  110. package/docs/reference/functions/lup.md +6 -0
  111. package/docs/reference/functions/lusolve.md +6 -0
  112. package/docs/reference/functions/mad.md +6 -0
  113. package/docs/reference/functions/map.md +28 -5
  114. package/docs/reference/functions/matrixFromColumns.md +6 -0
  115. package/docs/reference/functions/matrixFromFunction.md +6 -0
  116. package/docs/reference/functions/matrixFromRows.md +6 -0
  117. package/docs/reference/functions/max.md +6 -0
  118. package/docs/reference/functions/mean.md +6 -0
  119. package/docs/reference/functions/median.md +6 -0
  120. package/docs/reference/functions/min.md +6 -0
  121. package/docs/reference/functions/mod.md +6 -0
  122. package/docs/reference/functions/mode.md +6 -0
  123. package/docs/reference/functions/multinomial.md +6 -0
  124. package/docs/reference/functions/multiply.md +6 -0
  125. package/docs/reference/functions/norm.md +6 -0
  126. package/docs/reference/functions/not.md +6 -0
  127. package/docs/reference/functions/nthRoot.md +6 -0
  128. package/docs/reference/functions/nthRoots.md +6 -0
  129. package/docs/reference/functions/numeric.md +6 -0
  130. package/docs/reference/functions/oct.md +6 -0
  131. package/docs/reference/functions/ones.md +6 -0
  132. package/docs/reference/functions/or.md +6 -0
  133. package/docs/reference/functions/parser.md +6 -0
  134. package/docs/reference/functions/partitionSelect.md +6 -0
  135. package/docs/reference/functions/permutations.md +6 -0
  136. package/docs/reference/functions/pickRandom.md +6 -0
  137. package/docs/reference/functions/pow.md +6 -0
  138. package/docs/reference/functions/print.md +6 -0
  139. package/docs/reference/functions/prod.md +6 -0
  140. package/docs/reference/functions/qr.md +6 -0
  141. package/docs/reference/functions/quantileSeq.md +6 -0
  142. package/docs/reference/functions/random.md +6 -0
  143. package/docs/reference/functions/randomInt.md +6 -0
  144. package/docs/reference/functions/range.md +6 -0
  145. package/docs/reference/functions/rationalize.md +7 -1
  146. package/docs/reference/functions/re.md +6 -0
  147. package/docs/reference/functions/reshape.md +7 -0
  148. package/docs/reference/functions/resize.md +6 -0
  149. package/docs/reference/functions/resolve.md +46 -0
  150. package/docs/reference/functions/rightArithShift.md +6 -0
  151. package/docs/reference/functions/rightLogShift.md +6 -0
  152. package/docs/reference/functions/rotate.md +6 -0
  153. package/docs/reference/functions/rotationMatrix.md +6 -0
  154. package/docs/reference/functions/round.md +6 -0
  155. package/docs/reference/functions/row.md +6 -0
  156. package/docs/reference/functions/sec.md +6 -0
  157. package/docs/reference/functions/sech.md +6 -0
  158. package/docs/reference/functions/setCartesian.md +6 -0
  159. package/docs/reference/functions/setDifference.md +6 -0
  160. package/docs/reference/functions/setDistinct.md +6 -0
  161. package/docs/reference/functions/setIntersect.md +6 -0
  162. package/docs/reference/functions/setIsSubset.md +6 -0
  163. package/docs/reference/functions/setMultiplicity.md +6 -0
  164. package/docs/reference/functions/setPowerset.md +6 -0
  165. package/docs/reference/functions/setSize.md +6 -0
  166. package/docs/reference/functions/setSymDifference.md +6 -0
  167. package/docs/reference/functions/setUnion.md +6 -0
  168. package/docs/reference/functions/sign.md +6 -0
  169. package/docs/reference/functions/simplify.md +47 -7
  170. package/docs/reference/functions/simplifyCore.md +50 -0
  171. package/docs/reference/functions/sin.md +6 -0
  172. package/docs/reference/functions/sinh.md +6 -0
  173. package/docs/reference/functions/size.md +6 -0
  174. package/docs/reference/functions/slu.md +6 -0
  175. package/docs/reference/functions/smaller.md +6 -0
  176. package/docs/reference/functions/smallerEq.md +6 -0
  177. package/docs/reference/functions/sort.md +6 -0
  178. package/docs/reference/functions/sqrt.md +6 -0
  179. package/docs/reference/functions/sqrtm.md +6 -0
  180. package/docs/reference/functions/square.md +6 -0
  181. package/docs/reference/functions/squeeze.md +6 -0
  182. package/docs/reference/functions/std.md +6 -0
  183. package/docs/reference/functions/stirlingS2.md +6 -0
  184. package/docs/reference/functions/subset.md +16 -2
  185. package/docs/reference/functions/subtract.md +6 -0
  186. package/docs/reference/functions/sum.md +6 -0
  187. package/docs/reference/functions/symbolicEqual.md +62 -0
  188. package/docs/reference/functions/tan.md +6 -0
  189. package/docs/reference/functions/tanh.md +6 -0
  190. package/docs/reference/functions/to.md +6 -0
  191. package/docs/reference/functions/trace.md +6 -0
  192. package/docs/reference/functions/transpose.md +6 -0
  193. package/docs/reference/functions/typeOf.md +6 -0
  194. package/docs/reference/functions/unaryMinus.md +6 -0
  195. package/docs/reference/functions/unaryPlus.md +6 -0
  196. package/docs/reference/functions/unequal.md +6 -0
  197. package/docs/reference/functions/usolve.md +6 -0
  198. package/docs/reference/functions/usolveAll.md +6 -0
  199. package/docs/reference/functions/variance.md +6 -0
  200. package/docs/reference/functions/xgcd.md +6 -0
  201. package/docs/reference/functions/xor.md +6 -0
  202. package/docs/reference/functions/zeros.md +6 -0
  203. package/docs/reference/functions.md +5 -1
  204. package/lib/browser/math.js +6 -6
  205. package/lib/browser/math.js.map +1 -1
  206. package/lib/cjs/core/create.js +4 -4
  207. package/lib/cjs/core/function/import.js +3 -3
  208. package/lib/cjs/core/function/typed.js +2 -2
  209. package/lib/cjs/defaultInstance.js +3 -3
  210. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  211. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  212. package/lib/cjs/entry/configReadonly.js +1 -1
  213. package/lib/cjs/entry/dependenciesAny/dependenciesLeafCount.generated.js +23 -0
  214. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  215. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +32 -0
  216. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +6 -0
  217. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +65 -0
  218. package/lib/cjs/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +29 -0
  219. package/lib/cjs/entry/dependenciesAny.generated.js +32 -0
  220. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  221. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +32 -0
  222. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +6 -0
  223. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +65 -0
  224. package/lib/cjs/entry/dependenciesNumber.generated.js +16 -0
  225. package/lib/cjs/entry/impureFunctionsAny.generated.js +80 -34
  226. package/lib/cjs/entry/impureFunctionsNumber.generated.js +96 -64
  227. package/lib/cjs/entry/pureFunctionsAny.generated.js +62 -64
  228. package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -48
  229. package/lib/cjs/expression/Help.js +4 -0
  230. package/lib/cjs/expression/Parser.js +1 -1
  231. package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
  232. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +247 -235
  233. package/lib/cjs/expression/embeddedDocs/function/algebra/leafCount.js +15 -0
  234. package/lib/cjs/expression/embeddedDocs/function/algebra/resolve.js +16 -0
  235. package/lib/cjs/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  236. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +15 -0
  237. package/lib/cjs/expression/embeddedDocs/function/algebra/symbolicEqual.js +15 -0
  238. package/lib/cjs/expression/embeddedDocs/function/matrix/subset.js +2 -2
  239. package/lib/cjs/expression/node/FunctionNode.js +80 -61
  240. package/lib/cjs/expression/node/IndexNode.js +1 -1
  241. package/lib/cjs/expression/node/Node.js +3 -3
  242. package/lib/cjs/expression/node/ObjectNode.js +1 -1
  243. package/lib/cjs/expression/node/utils/access.js +1 -1
  244. package/lib/cjs/expression/node/utils/assign.js +1 -1
  245. package/lib/cjs/expression/parse.js +13 -13
  246. package/lib/cjs/factoriesAny.js +32 -0
  247. package/lib/cjs/factoriesNumber.js +16 -0
  248. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  249. package/lib/cjs/function/algebra/leafCount.js +66 -0
  250. package/lib/cjs/function/algebra/rationalize.js +24 -41
  251. package/lib/cjs/function/algebra/resolve.js +106 -0
  252. package/lib/cjs/function/algebra/simplify/simplifyConstant.js +5 -5
  253. package/lib/cjs/function/algebra/simplify/util.js +171 -33
  254. package/lib/cjs/function/algebra/simplify.js +588 -211
  255. package/lib/cjs/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +67 -43
  256. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  257. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  258. package/lib/cjs/function/algebra/symbolicEqual.js +88 -0
  259. package/lib/cjs/function/arithmetic/ceil.js +3 -3
  260. package/lib/cjs/function/arithmetic/floor.js +3 -3
  261. package/lib/cjs/function/arithmetic/invmod.js +1 -1
  262. package/lib/cjs/function/arithmetic/norm.js +1 -1
  263. package/lib/cjs/function/arithmetic/round.js +1 -1
  264. package/lib/cjs/function/matrix/eigs/complexEigs.js +13 -11
  265. package/lib/cjs/function/matrix/map.js +53 -15
  266. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  267. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  268. package/lib/cjs/function/matrix/subset.js +15 -5
  269. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  270. package/lib/cjs/function/relational/compareNatural.js +6 -6
  271. package/lib/cjs/header.js +2 -2
  272. package/lib/cjs/plain/bignumber/index.js +1 -1
  273. package/lib/cjs/plain/number/combinations.js +18 -6
  274. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  275. package/lib/cjs/type/bignumber/function/bignumber.js +1 -1
  276. package/lib/cjs/type/boolean.js +2 -2
  277. package/lib/cjs/type/complex/Complex.js +14 -14
  278. package/lib/cjs/type/complex/function/complex.js +1 -1
  279. package/lib/cjs/type/fraction/Fraction.js +6 -6
  280. package/lib/cjs/type/fraction/function/fraction.js +1 -1
  281. package/lib/cjs/type/matrix/DenseMatrix.js +5 -5
  282. package/lib/cjs/type/matrix/SparseMatrix.js +2 -2
  283. package/lib/cjs/type/number.js +1 -1
  284. package/lib/cjs/type/string.js +2 -2
  285. package/lib/cjs/type/unit/Unit.js +8 -8
  286. package/lib/cjs/utils/customs.js +2 -2
  287. package/lib/cjs/utils/emitter.js +1 -1
  288. package/lib/cjs/utils/function.js +2 -2
  289. package/lib/cjs/utils/is.js +6 -6
  290. package/lib/cjs/utils/latex.js +3 -3
  291. package/lib/cjs/utils/lruQueue.js +1 -1
  292. package/lib/cjs/utils/map.js +3 -3
  293. package/lib/cjs/utils/object.js +2 -2
  294. package/lib/cjs/utils/snapshot.js +7 -7
  295. package/lib/cjs/utils/string.js +2 -2
  296. package/lib/cjs/version.js +1 -1
  297. package/lib/esm/entry/dependenciesAny/dependenciesLeafCount.generated.js +12 -0
  298. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  299. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +18 -0
  300. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +4 -0
  301. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +40 -0
  302. package/lib/esm/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +16 -0
  303. package/lib/esm/entry/dependenciesAny.generated.js +4 -0
  304. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  305. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +18 -0
  306. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +4 -0
  307. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +40 -0
  308. package/lib/esm/entry/dependenciesNumber.generated.js +2 -0
  309. package/lib/esm/entry/impureFunctionsAny.generated.js +69 -27
  310. package/lib/esm/entry/impureFunctionsNumber.generated.js +83 -53
  311. package/lib/esm/entry/pureFunctionsAny.generated.js +49 -49
  312. package/lib/esm/entry/pureFunctionsNumber.generated.js +32 -32
  313. package/lib/esm/expression/Help.js +4 -0
  314. package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
  315. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +220 -212
  316. package/lib/esm/expression/embeddedDocs/function/algebra/leafCount.js +8 -0
  317. package/lib/esm/expression/embeddedDocs/function/algebra/resolve.js +9 -0
  318. package/lib/esm/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  319. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +8 -0
  320. package/lib/esm/expression/embeddedDocs/function/algebra/symbolicEqual.js +8 -0
  321. package/lib/esm/expression/embeddedDocs/function/matrix/subset.js +2 -2
  322. package/lib/esm/expression/node/FunctionNode.js +70 -53
  323. package/lib/esm/factoriesAny.js +4 -0
  324. package/lib/esm/factoriesNumber.js +2 -0
  325. package/lib/esm/function/algebra/leafCount.js +59 -0
  326. package/lib/esm/function/algebra/rationalize.js +24 -40
  327. package/lib/esm/function/algebra/resolve.js +95 -0
  328. package/lib/esm/function/algebra/simplify/simplifyConstant.js +3 -3
  329. package/lib/esm/function/algebra/simplify/util.js +170 -34
  330. package/lib/esm/function/algebra/simplify.js +583 -206
  331. package/lib/esm/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +60 -44
  332. package/lib/esm/function/algebra/symbolicEqual.js +80 -0
  333. package/lib/esm/function/matrix/eigs/complexEigs.js +8 -6
  334. package/lib/esm/function/matrix/map.js +53 -15
  335. package/lib/esm/function/matrix/subset.js +15 -5
  336. package/lib/esm/plain/number/combinations.js +18 -6
  337. package/lib/esm/version.js +1 -1
  338. package/package.json +20 -15
  339. package/types/index.d.ts +52 -10
  340. package/lib/cjs/function/algebra/simplify/resolve.js +0 -76
  341. 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);
@@ -186,33 +218,25 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
186
218
 
187
219
  return new OperatorNode(node.op, node.fn, [_a, a1]);
188
220
  }
189
- } else if ((0, _is.isParenthesisNode)(node)) {
190
- var c = simplifyCore(node.content);
191
-
192
- if ((0, _is.isParenthesisNode)(c) || (0, _is.isSymbolNode)(c) || (0, _is.isConstantNode)(c)) {
193
- return c;
194
- }
195
-
196
- return new ParenthesisNode(c);
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