mathjs 10.0.2 → 10.2.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 (337) hide show
  1. package/HISTORY.md +37 -0
  2. package/NOTICE +1 -1
  3. package/README.md +10 -2
  4. package/bin/cli.js +1 -1
  5. package/docs/expressions/algebra.md +27 -0
  6. package/docs/expressions/syntax.md +1 -1
  7. package/docs/reference/functions/abs.md +6 -0
  8. package/docs/reference/functions/acos.md +6 -0
  9. package/docs/reference/functions/acosh.md +6 -0
  10. package/docs/reference/functions/acot.md +6 -0
  11. package/docs/reference/functions/acoth.md +6 -0
  12. package/docs/reference/functions/acsc.md +6 -0
  13. package/docs/reference/functions/acsch.md +6 -0
  14. package/docs/reference/functions/add.md +6 -0
  15. package/docs/reference/functions/and.md +6 -0
  16. package/docs/reference/functions/apply.md +6 -0
  17. package/docs/reference/functions/arg.md +6 -0
  18. package/docs/reference/functions/asec.md +6 -0
  19. package/docs/reference/functions/asech.md +6 -0
  20. package/docs/reference/functions/asin.md +6 -0
  21. package/docs/reference/functions/asinh.md +6 -0
  22. package/docs/reference/functions/atan.md +6 -0
  23. package/docs/reference/functions/atan2.md +6 -0
  24. package/docs/reference/functions/atanh.md +6 -0
  25. package/docs/reference/functions/bellNumbers.md +6 -0
  26. package/docs/reference/functions/bin.md +6 -0
  27. package/docs/reference/functions/bitAnd.md +6 -0
  28. package/docs/reference/functions/bitNot.md +6 -0
  29. package/docs/reference/functions/bitOr.md +6 -0
  30. package/docs/reference/functions/bitXor.md +6 -0
  31. package/docs/reference/functions/catalan.md +6 -0
  32. package/docs/reference/functions/cbrt.md +6 -0
  33. package/docs/reference/functions/ceil.md +6 -0
  34. package/docs/reference/functions/clone.md +6 -0
  35. package/docs/reference/functions/column.md +6 -0
  36. package/docs/reference/functions/combinations.md +6 -0
  37. package/docs/reference/functions/combinationsWithRep.md +6 -0
  38. package/docs/reference/functions/compare.md +6 -0
  39. package/docs/reference/functions/compareNatural.md +6 -0
  40. package/docs/reference/functions/compareText.md +6 -0
  41. package/docs/reference/functions/compile.md +6 -0
  42. package/docs/reference/functions/composition.md +6 -0
  43. package/docs/reference/functions/concat.md +6 -0
  44. package/docs/reference/functions/conj.md +6 -0
  45. package/docs/reference/functions/cos.md +6 -0
  46. package/docs/reference/functions/cosh.md +6 -0
  47. package/docs/reference/functions/cot.md +6 -0
  48. package/docs/reference/functions/coth.md +6 -0
  49. package/docs/reference/functions/count.md +6 -0
  50. package/docs/reference/functions/cross.md +6 -0
  51. package/docs/reference/functions/csc.md +6 -0
  52. package/docs/reference/functions/csch.md +6 -0
  53. package/docs/reference/functions/ctranspose.md +6 -0
  54. package/docs/reference/functions/cube.md +6 -0
  55. package/docs/reference/functions/deepEqual.md +6 -0
  56. package/docs/reference/functions/derivative.md +6 -0
  57. package/docs/reference/functions/det.md +6 -0
  58. package/docs/reference/functions/diag.md +6 -0
  59. package/docs/reference/functions/diff.md +6 -0
  60. package/docs/reference/functions/distance.md +6 -0
  61. package/docs/reference/functions/divide.md +6 -0
  62. package/docs/reference/functions/dot.md +6 -0
  63. package/docs/reference/functions/dotDivide.md +6 -0
  64. package/docs/reference/functions/dotMultiply.md +6 -0
  65. package/docs/reference/functions/dotPow.md +6 -0
  66. package/docs/reference/functions/eigs.md +6 -0
  67. package/docs/reference/functions/equal.md +6 -0
  68. package/docs/reference/functions/equalText.md +6 -0
  69. package/docs/reference/functions/erf.md +6 -0
  70. package/docs/reference/functions/evaluate.md +6 -0
  71. package/docs/reference/functions/exp.md +6 -0
  72. package/docs/reference/functions/expm.md +6 -0
  73. package/docs/reference/functions/expm1.md +6 -0
  74. package/docs/reference/functions/factorial.md +6 -0
  75. package/docs/reference/functions/filter.md +6 -0
  76. package/docs/reference/functions/fix.md +6 -0
  77. package/docs/reference/functions/flatten.md +6 -0
  78. package/docs/reference/functions/floor.md +6 -0
  79. package/docs/reference/functions/forEach.md +6 -0
  80. package/docs/reference/functions/format.md +6 -0
  81. package/docs/reference/functions/gamma.md +6 -0
  82. package/docs/reference/functions/gcd.md +6 -0
  83. package/docs/reference/functions/getMatrixDataType.md +6 -0
  84. package/docs/reference/functions/hasNumericValue.md +6 -0
  85. package/docs/reference/functions/help.md +6 -0
  86. package/docs/reference/functions/hex.md +6 -0
  87. package/docs/reference/functions/hypot.md +6 -0
  88. package/docs/reference/functions/identity.md +6 -0
  89. package/docs/reference/functions/im.md +6 -0
  90. package/docs/reference/functions/intersect.md +6 -0
  91. package/docs/reference/functions/inv.md +6 -0
  92. package/docs/reference/functions/invmod.md +47 -0
  93. package/docs/reference/functions/isInteger.md +6 -0
  94. package/docs/reference/functions/isNaN.md +6 -0
  95. package/docs/reference/functions/isNegative.md +6 -0
  96. package/docs/reference/functions/isNumeric.md +6 -0
  97. package/docs/reference/functions/isPositive.md +6 -0
  98. package/docs/reference/functions/isPrime.md +6 -0
  99. package/docs/reference/functions/isZero.md +6 -0
  100. package/docs/reference/functions/kldivergence.md +6 -0
  101. package/docs/reference/functions/kron.md +6 -0
  102. package/docs/reference/functions/larger.md +6 -0
  103. package/docs/reference/functions/largerEq.md +6 -0
  104. package/docs/reference/functions/lcm.md +6 -0
  105. package/docs/reference/functions/leafCount.md +52 -0
  106. package/docs/reference/functions/leftShift.md +6 -0
  107. package/docs/reference/functions/log.md +6 -0
  108. package/docs/reference/functions/log10.md +6 -0
  109. package/docs/reference/functions/log1p.md +6 -0
  110. package/docs/reference/functions/log2.md +6 -0
  111. package/docs/reference/functions/lsolve.md +6 -0
  112. package/docs/reference/functions/lsolveAll.md +6 -0
  113. package/docs/reference/functions/lup.md +6 -0
  114. package/docs/reference/functions/lusolve.md +6 -0
  115. package/docs/reference/functions/mad.md +6 -0
  116. package/docs/reference/functions/map.md +6 -0
  117. package/docs/reference/functions/matrixFromColumns.md +6 -0
  118. package/docs/reference/functions/matrixFromFunction.md +6 -0
  119. package/docs/reference/functions/matrixFromRows.md +6 -0
  120. package/docs/reference/functions/max.md +6 -0
  121. package/docs/reference/functions/mean.md +6 -0
  122. package/docs/reference/functions/median.md +6 -0
  123. package/docs/reference/functions/min.md +6 -0
  124. package/docs/reference/functions/mod.md +6 -0
  125. package/docs/reference/functions/mode.md +6 -0
  126. package/docs/reference/functions/multinomial.md +6 -0
  127. package/docs/reference/functions/multiply.md +6 -0
  128. package/docs/reference/functions/norm.md +6 -0
  129. package/docs/reference/functions/not.md +6 -0
  130. package/docs/reference/functions/nthRoot.md +6 -0
  131. package/docs/reference/functions/nthRoots.md +6 -0
  132. package/docs/reference/functions/numeric.md +6 -0
  133. package/docs/reference/functions/oct.md +6 -0
  134. package/docs/reference/functions/ones.md +6 -0
  135. package/docs/reference/functions/or.md +6 -0
  136. package/docs/reference/functions/parser.md +6 -0
  137. package/docs/reference/functions/partitionSelect.md +6 -0
  138. package/docs/reference/functions/permutations.md +6 -0
  139. package/docs/reference/functions/pickRandom.md +6 -0
  140. package/docs/reference/functions/pow.md +6 -0
  141. package/docs/reference/functions/print.md +6 -0
  142. package/docs/reference/functions/prod.md +6 -0
  143. package/docs/reference/functions/qr.md +6 -0
  144. package/docs/reference/functions/quantileSeq.md +6 -0
  145. package/docs/reference/functions/random.md +6 -0
  146. package/docs/reference/functions/randomInt.md +6 -0
  147. package/docs/reference/functions/range.md +6 -0
  148. package/docs/reference/functions/rationalize.md +7 -1
  149. package/docs/reference/functions/re.md +6 -0
  150. package/docs/reference/functions/reshape.md +7 -0
  151. package/docs/reference/functions/resize.md +6 -0
  152. package/docs/reference/functions/resolve.md +46 -0
  153. package/docs/reference/functions/rightArithShift.md +6 -0
  154. package/docs/reference/functions/rightLogShift.md +6 -0
  155. package/docs/reference/functions/rotate.md +6 -0
  156. package/docs/reference/functions/rotationMatrix.md +6 -0
  157. package/docs/reference/functions/round.md +6 -0
  158. package/docs/reference/functions/row.md +6 -0
  159. package/docs/reference/functions/sec.md +6 -0
  160. package/docs/reference/functions/sech.md +6 -0
  161. package/docs/reference/functions/setCartesian.md +6 -0
  162. package/docs/reference/functions/setDifference.md +6 -0
  163. package/docs/reference/functions/setDistinct.md +6 -0
  164. package/docs/reference/functions/setIntersect.md +6 -0
  165. package/docs/reference/functions/setIsSubset.md +6 -0
  166. package/docs/reference/functions/setMultiplicity.md +6 -0
  167. package/docs/reference/functions/setPowerset.md +6 -0
  168. package/docs/reference/functions/setSize.md +6 -0
  169. package/docs/reference/functions/setSymDifference.md +6 -0
  170. package/docs/reference/functions/setUnion.md +6 -0
  171. package/docs/reference/functions/sign.md +6 -0
  172. package/docs/reference/functions/simplify.md +47 -7
  173. package/docs/reference/functions/simplifyCore.md +50 -0
  174. package/docs/reference/functions/sin.md +6 -0
  175. package/docs/reference/functions/sinh.md +6 -0
  176. package/docs/reference/functions/size.md +6 -0
  177. package/docs/reference/functions/slu.md +6 -0
  178. package/docs/reference/functions/smaller.md +6 -0
  179. package/docs/reference/functions/smallerEq.md +6 -0
  180. package/docs/reference/functions/sort.md +6 -0
  181. package/docs/reference/functions/sqrt.md +6 -0
  182. package/docs/reference/functions/sqrtm.md +6 -0
  183. package/docs/reference/functions/square.md +6 -0
  184. package/docs/reference/functions/squeeze.md +6 -0
  185. package/docs/reference/functions/std.md +6 -0
  186. package/docs/reference/functions/stirlingS2.md +6 -0
  187. package/docs/reference/functions/subset.md +6 -0
  188. package/docs/reference/functions/subtract.md +6 -0
  189. package/docs/reference/functions/sum.md +6 -0
  190. package/docs/reference/functions/tan.md +6 -0
  191. package/docs/reference/functions/tanh.md +6 -0
  192. package/docs/reference/functions/to.md +6 -0
  193. package/docs/reference/functions/trace.md +6 -0
  194. package/docs/reference/functions/transpose.md +6 -0
  195. package/docs/reference/functions/typeOf.md +6 -0
  196. package/docs/reference/functions/unaryMinus.md +6 -0
  197. package/docs/reference/functions/unaryPlus.md +6 -0
  198. package/docs/reference/functions/unequal.md +6 -0
  199. package/docs/reference/functions/usolve.md +6 -0
  200. package/docs/reference/functions/usolveAll.md +6 -0
  201. package/docs/reference/functions/variance.md +6 -0
  202. package/docs/reference/functions/xgcd.md +6 -0
  203. package/docs/reference/functions/xor.md +6 -0
  204. package/docs/reference/functions/zeros.md +6 -0
  205. package/docs/reference/functions.md +4 -0
  206. package/lib/browser/math.js +7 -7
  207. package/lib/browser/math.js.map +1 -1
  208. package/lib/cjs/core/create.js +4 -4
  209. package/lib/cjs/core/function/import.js +3 -3
  210. package/lib/cjs/core/function/typed.js +2 -2
  211. package/lib/cjs/defaultInstance.js +3 -3
  212. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  213. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  214. package/lib/cjs/entry/configReadonly.js +1 -1
  215. package/lib/cjs/entry/dependenciesAny/dependenciesInvmod.generated.js +41 -0
  216. package/lib/cjs/entry/dependenciesAny/dependenciesLeafCount.generated.js +23 -0
  217. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +18 -0
  218. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +32 -0
  219. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +21 -0
  220. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +65 -0
  221. package/lib/cjs/entry/dependenciesAny.generated.js +32 -0
  222. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +18 -0
  223. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +32 -0
  224. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +21 -0
  225. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +65 -0
  226. package/lib/cjs/entry/dependenciesNumber.generated.js +16 -0
  227. package/lib/cjs/entry/impureFunctionsAny.generated.js +78 -29
  228. package/lib/cjs/entry/impureFunctionsNumber.generated.js +102 -60
  229. package/lib/cjs/entry/pureFunctionsAny.generated.js +65 -55
  230. package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -48
  231. package/lib/cjs/expression/Help.js +4 -0
  232. package/lib/cjs/expression/Parser.js +1 -1
  233. package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
  234. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +20 -6
  235. package/lib/cjs/expression/embeddedDocs/function/algebra/leafCount.js +15 -0
  236. package/lib/cjs/expression/embeddedDocs/function/algebra/resolve.js +16 -0
  237. package/lib/cjs/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  238. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +15 -0
  239. package/lib/cjs/expression/embeddedDocs/function/arithmetic/invmod.js +15 -0
  240. package/lib/cjs/expression/embeddedDocs/function/matrix/forEach.js +1 -1
  241. package/lib/cjs/expression/node/FunctionNode.js +7 -7
  242. package/lib/cjs/expression/node/IndexNode.js +1 -1
  243. package/lib/cjs/expression/node/Node.js +3 -3
  244. package/lib/cjs/expression/node/ObjectNode.js +1 -1
  245. package/lib/cjs/expression/node/utils/access.js +1 -1
  246. package/lib/cjs/expression/node/utils/assign.js +1 -1
  247. package/lib/cjs/expression/parse.js +13 -13
  248. package/lib/cjs/factoriesAny.js +32 -0
  249. package/lib/cjs/factoriesNumber.js +16 -0
  250. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  251. package/lib/cjs/function/algebra/leafCount.js +66 -0
  252. package/lib/cjs/function/algebra/rationalize.js +36 -39
  253. package/lib/cjs/function/algebra/resolve.js +106 -0
  254. package/lib/cjs/function/algebra/simplify/simplifyConstant.js +226 -32
  255. package/lib/cjs/function/algebra/simplify/util.js +171 -33
  256. package/lib/cjs/function/algebra/simplify.js +608 -191
  257. package/lib/cjs/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +83 -31
  258. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  259. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  260. package/lib/cjs/function/arithmetic/ceil.js +3 -3
  261. package/lib/cjs/function/arithmetic/floor.js +3 -3
  262. package/lib/cjs/function/arithmetic/invmod.js +73 -0
  263. package/lib/cjs/function/arithmetic/norm.js +1 -1
  264. package/lib/cjs/function/arithmetic/round.js +1 -1
  265. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  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/probability/util/seededRNG.js +2 -2
  269. package/lib/cjs/function/relational/compareNatural.js +6 -6
  270. package/lib/cjs/header.js +3 -3
  271. package/lib/cjs/plain/bignumber/index.js +1 -1
  272. package/lib/cjs/plain/number/combinations.js +18 -6
  273. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  274. package/lib/cjs/type/bignumber/function/bignumber.js +1 -1
  275. package/lib/cjs/type/boolean.js +2 -2
  276. package/lib/cjs/type/complex/Complex.js +14 -14
  277. package/lib/cjs/type/complex/function/complex.js +1 -1
  278. package/lib/cjs/type/fraction/Fraction.js +6 -6
  279. package/lib/cjs/type/fraction/function/fraction.js +1 -1
  280. package/lib/cjs/type/matrix/DenseMatrix.js +5 -5
  281. package/lib/cjs/type/matrix/SparseMatrix.js +2 -2
  282. package/lib/cjs/type/number.js +1 -1
  283. package/lib/cjs/type/string.js +2 -2
  284. package/lib/cjs/type/unit/Unit.js +8 -8
  285. package/lib/cjs/utils/customs.js +2 -2
  286. package/lib/cjs/utils/emitter.js +1 -1
  287. package/lib/cjs/utils/function.js +2 -2
  288. package/lib/cjs/utils/is.js +6 -6
  289. package/lib/cjs/utils/latex.js +3 -3
  290. package/lib/cjs/utils/lruQueue.js +1 -1
  291. package/lib/cjs/utils/map.js +3 -3
  292. package/lib/cjs/utils/object.js +2 -2
  293. package/lib/cjs/utils/snapshot.js +7 -7
  294. package/lib/cjs/utils/string.js +2 -2
  295. package/lib/cjs/version.js +1 -1
  296. package/lib/esm/entry/dependenciesAny/dependenciesInvmod.generated.js +24 -0
  297. package/lib/esm/entry/dependenciesAny/dependenciesLeafCount.generated.js +12 -0
  298. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +12 -0
  299. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +18 -0
  300. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +14 -0
  301. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +40 -0
  302. package/lib/esm/entry/dependenciesAny.generated.js +4 -0
  303. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +12 -0
  304. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +18 -0
  305. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +14 -0
  306. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +40 -0
  307. package/lib/esm/entry/dependenciesNumber.generated.js +2 -0
  308. package/lib/esm/entry/impureFunctionsAny.generated.js +68 -22
  309. package/lib/esm/entry/impureFunctionsNumber.generated.js +92 -52
  310. package/lib/esm/entry/pureFunctionsAny.generated.js +53 -42
  311. package/lib/esm/entry/pureFunctionsNumber.generated.js +32 -32
  312. package/lib/esm/expression/Help.js +4 -0
  313. package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
  314. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +10 -1
  315. package/lib/esm/expression/embeddedDocs/function/algebra/leafCount.js +8 -0
  316. package/lib/esm/expression/embeddedDocs/function/algebra/resolve.js +9 -0
  317. package/lib/esm/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  318. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +8 -0
  319. package/lib/esm/expression/embeddedDocs/function/arithmetic/invmod.js +8 -0
  320. package/lib/esm/expression/embeddedDocs/function/matrix/forEach.js +1 -1
  321. package/lib/esm/factoriesAny.js +4 -0
  322. package/lib/esm/factoriesNumber.js +2 -0
  323. package/lib/esm/function/algebra/leafCount.js +59 -0
  324. package/lib/esm/function/algebra/rationalize.js +36 -38
  325. package/lib/esm/function/algebra/resolve.js +95 -0
  326. package/lib/esm/function/algebra/simplify/simplifyConstant.js +200 -32
  327. package/lib/esm/function/algebra/simplify/util.js +170 -34
  328. package/lib/esm/function/algebra/simplify.js +603 -186
  329. package/lib/esm/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +75 -31
  330. package/lib/esm/function/arithmetic/invmod.js +57 -0
  331. package/lib/esm/header.js +1 -1
  332. package/lib/esm/plain/number/combinations.js +18 -6
  333. package/lib/esm/version.js +1 -1
  334. package/package.json +21 -15
  335. package/types/index.d.ts +48 -6
  336. package/lib/cjs/function/algebra/simplify/resolve.js +0 -76
  337. 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', 'ConstantNode', 'OperatorNode', 'FunctionNode', '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,
@@ -19,12 +21,25 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
19
21
  multiply = _ref.multiply,
20
22
  divide = _ref.divide,
21
23
  pow = _ref.pow,
24
+ AccessorNode = _ref.AccessorNode,
25
+ ArrayNode = _ref.ArrayNode,
22
26
  ConstantNode = _ref.ConstantNode,
23
- OperatorNode = _ref.OperatorNode,
24
27
  FunctionNode = _ref.FunctionNode,
25
- ParenthesisNode = _ref.ParenthesisNode;
28
+ IndexNode = _ref.IndexNode,
29
+ ObjectNode = _ref.ObjectNode,
30
+ OperatorNode = _ref.OperatorNode,
31
+ ParenthesisNode = _ref.ParenthesisNode,
32
+ SymbolNode = _ref.SymbolNode;
26
33
  var node0 = new ConstantNode(0);
27
34
  var node1 = new ConstantNode(1);
35
+
36
+ var _createUtil = (0, _util.createUtil)({
37
+ FunctionNode: FunctionNode,
38
+ OperatorNode: OperatorNode,
39
+ SymbolNode: SymbolNode
40
+ }),
41
+ hasProperty = _createUtil.hasProperty,
42
+ isCommutative = _createUtil.isCommutative;
28
43
  /**
29
44
  * simplifyCore() performs single pass simplification suitable for
30
45
  * applications requiring ultimate performance. In contrast, simplify()
@@ -33,30 +48,54 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
33
48
  *
34
49
  * Syntax:
35
50
  *
36
- * simplify.simplifyCore(expr)
51
+ * simplifyCore(expr)
37
52
  *
38
53
  * Examples:
39
54
  *
40
55
  * const f = math.parse('2 * 1 * x ^ (2 - 1)')
41
- * math.simplify.simpifyCore(f) // Node {2 * x}
42
- * 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}
43
58
  *
44
59
  * See also:
45
60
  *
46
- * derivative
61
+ * simplify, resolve, derivative
47
62
  *
48
63
  * @param {Node} node
49
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
50
68
  */
51
69
 
52
- function simplifyCore(node) {
53
- if ((0, _is.isOperatorNode)(node) && node.isUnary()) {
54
- var a0 = simplifyCore(node.args[0]);
55
70
 
56
- if (node.op === '+') {
57
- // unary plus
58
- return a0;
71
+ function simplifyCore(node, options) {
72
+ var context = options ? options.context : undefined;
73
+
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;
59
94
  }
95
+ }
96
+
97
+ if ((0, _is.isOperatorNode)(node) && node.isUnary()) {
98
+ var a0 = simplifyCore(node.args[0], options);
60
99
 
61
100
  if (node.op === '-') {
62
101
  // unary minus
@@ -71,9 +110,9 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
71
110
  return new OperatorNode(node.op, node.fn, [a0]);
72
111
  }
73
112
  } else if ((0, _is.isOperatorNode)(node) && node.isBinary()) {
74
- var _a = simplifyCore(node.args[0]);
113
+ var _a = simplifyCore(node.args[0], options);
75
114
 
76
- var a1 = simplifyCore(node.args[1]);
115
+ var a1 = simplifyCore(node.args[1], options);
77
116
 
78
117
  if (node.op === '+') {
79
118
  if ((0, _is.isConstantNode)(_a)) {
@@ -109,7 +148,7 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
109
148
  }
110
149
 
111
150
  if ((0, _is.isOperatorNode)(a1) && a1.isUnary() && a1.op === '-') {
112
- return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]));
151
+ return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);
113
152
  }
114
153
 
115
154
  return new OperatorNode(node.op, node.fn, [_a, a1]);
@@ -130,7 +169,7 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
130
169
  return node0;
131
170
  } else if (equal(a1.value, 1)) {
132
171
  return _a;
133
- } 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)) {
134
173
  var a00 = _a.args[0];
135
174
 
136
175
  if ((0, _is.isConstantNode)(a00)) {
@@ -139,7 +178,11 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
139
178
  }
140
179
  }
141
180
 
142
- 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
+ }
143
186
  }
144
187
 
145
188
  return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
@@ -175,19 +218,28 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
175
218
 
176
219
  return new OperatorNode(node.op, node.fn, [_a, a1]);
177
220
  }
178
- } else if ((0, _is.isParenthesisNode)(node)) {
179
- var c = simplifyCore(node.content);
180
-
181
- if ((0, _is.isParenthesisNode)(c) || (0, _is.isSymbolNode)(c) || (0, _is.isConstantNode)(c)) {
182
- return c;
221
+ } else if ((0, _is.isFunctionNode)(node)) {
222
+ return new FunctionNode(simplifyCore(node.fn), node.args.map(function (n) {
223
+ return simplifyCore(n, options);
224
+ }));
225
+ } else if ((0, _is.isArrayNode)(node)) {
226
+ return new ArrayNode(node.items.map(function (n) {
227
+ return simplifyCore(n, options);
228
+ }));
229
+ } else if ((0, _is.isAccessorNode)(node)) {
230
+ return new AccessorNode(simplifyCore(node.object, options), simplifyCore(node.index, options));
231
+ } else if ((0, _is.isIndexNode)(node)) {
232
+ return new IndexNode(node.dimensions.map(function (n) {
233
+ return simplifyCore(n, options);
234
+ }));
235
+ } else if ((0, _is.isObjectNode)(node)) {
236
+ var newProps = {};
237
+
238
+ for (var prop in node.properties) {
239
+ newProps[prop] = simplifyCore(node.properties[prop], options);
183
240
  }
184
241
 
185
- return new ParenthesisNode(c);
186
- } else if ((0, _is.isFunctionNode)(node)) {
187
- var args = node.args.map(simplifyCore).map(function (arg) {
188
- return (0, _is.isParenthesisNode)(arg) ? arg.content : arg;
189
- });
190
- return new FunctionNode(simplifyCore(node.fn), args);
242
+ return new ObjectNode(newProps);
191
243
  } else {// cannot simplify
192
244
  }
193
245
 
@@ -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++) {
@@ -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) {
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createInvmod = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _factory = require("../../utils/factory.js");
13
+
14
+ var name = 'invmod';
15
+ var dependencies = ['typed', 'config', 'BigNumber', 'xgcd', 'equal', 'smaller', 'mod', 'add', 'isInteger'];
16
+ var createInvmod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
+ var typed = _ref.typed,
18
+ config = _ref.config,
19
+ BigNumber = _ref.BigNumber,
20
+ xgcd = _ref.xgcd,
21
+ equal = _ref.equal,
22
+ smaller = _ref.smaller,
23
+ mod = _ref.mod,
24
+ add = _ref.add,
25
+ isInteger = _ref.isInteger;
26
+
27
+ /**
28
+ * Calculate the (modular) multiplicative inverse of a modulo b. Solution to the equation `ax ≣ 1 (mod b)`
29
+ * See https://en.wikipedia.org/wiki/Modular_multiplicative_inverse.
30
+ *
31
+ * Syntax:
32
+ *
33
+ * math.invmod(a, b)
34
+ *
35
+ * Examples:
36
+ *
37
+ * math.invmod(8, 12) // returns NaN
38
+ * math.invmod(7, 13) // return 2
39
+ * math.invmod(15151, 15122) // returns 10429
40
+ *
41
+ * See also:
42
+ *
43
+ * gcd, xgcd
44
+ *
45
+ * @param {number | BigNumber} a An integer number
46
+ * @param {number | BigNumber} b An integer number
47
+ * @return {number | BigNumber } Returns an integer number
48
+ * where `invmod(a,b)*a ≣ 1 (mod b)`
49
+ */
50
+ return typed(name, {
51
+ 'number, number': invmod,
52
+ 'BigNumber, BigNumber': invmod
53
+ });
54
+
55
+ function invmod(a, b) {
56
+ if (!isInteger(a) || !isInteger(b)) throw new Error('Parameters in function invmod must be integer numbers');
57
+ a = mod(a, b);
58
+ if (equal(b, 0)) throw new Error('Divisor must be non zero');
59
+ var res = xgcd(a, b);
60
+ res = res.valueOf();
61
+
62
+ var _res = res,
63
+ _res2 = (0, _slicedToArray2.default)(_res, 2),
64
+ gcd = _res2[0],
65
+ inv = _res2[1];
66
+
67
+ if (!equal(gcd, BigNumber(1))) return NaN;
68
+ inv = mod(inv, b);
69
+ if (smaller(inv, BigNumber(0))) inv = add(inv, b);
70
+ return inv;
71
+ }
72
+ });
73
+ exports.createInvmod = createInvmod;
@@ -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 {
@@ -360,7 +360,7 @@ function createComplexEigs(_ref) {
360
360
  } else if (n === 2 || smaller(abs(arr[n - 2][n - 3]), prec)) {
361
361
  lastConvergenceBefore = 0;
362
362
  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
363
+ lambdas.push.apply(lambdas, (0, _toConsumableArray2.default)(ll)); // keep track of transformations
364
364
 
365
365
  if (findVectors) {
366
366
  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 +488,7 @@ function createComplexEigs(_ref) {
488
488
  solutions.push(approxVec);
489
489
  }
490
490
 
491
- vectors.push.apply(vectors, (0, _toConsumableArray2["default"])(solutions.map(function (v) {
491
+ vectors.push.apply(vectors, (0, _toConsumableArray2.default)(solutions.map(function (v) {
492
492
  return flatten(v);
493
493
  })));
494
494
  }
@@ -568,7 +568,7 @@ function createComplexEigs(_ref) {
568
568
  for (var i = 0; i < arr.length; i++) {
569
569
  var _arr$i;
570
570
 
571
- (_arr$i = arr[i]).push.apply(_arr$i, (0, _toConsumableArray2["default"])(Array(N - arr[i].length).fill(0)));
571
+ (_arr$i = arr[i]).push.apply(_arr$i, (0, _toConsumableArray2.default)(Array(N - arr[i].length).fill(0)));
572
572
  } // add rows
573
573
 
574
574
 
@@ -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
 
@@ -9,13 +9,13 @@ exports.createRng = createRng;
9
9
 
10
10
  var _seedrandom = _interopRequireDefault(require("seedrandom"));
11
11
 
12
- var singletonRandom = /* #__PURE__ */(0, _seedrandom["default"])(Date.now());
12
+ var singletonRandom = /* #__PURE__ */(0, _seedrandom.default)(Date.now());
13
13
 
14
14
  function createRng(randomSeed) {
15
15
  var random; // create a new random generator with given seed
16
16
 
17
17
  function setSeed(seed) {
18
- random = seed === null ? singletonRandom : (0, _seedrandom["default"])(String(seed));
18
+ random = seed === null ? singletonRandom : (0, _seedrandom.default)(String(seed));
19
19
  } // initialize a seeded pseudo random number generator with config's random seed
20
20
 
21
21
 
@@ -101,7 +101,7 @@ var createCompareNatural = /* #__PURE__ */(0, _factory.factory)(name, dependenci
101
101
  // c can be number, BigNumber, or Fraction
102
102
  return c > 0 ? 1 : -1; // return a number
103
103
  } else {
104
- return (0, _javascriptNaturalSort["default"])(typeX, typeY);
104
+ return (0, _javascriptNaturalSort.default)(typeX, typeY);
105
105
  }
106
106
  } // matrix types
107
107
 
@@ -112,13 +112,13 @@ var createCompareNatural = /* #__PURE__ */(0, _factory.factory)(name, dependenci
112
112
  if (c !== 0) {
113
113
  return c;
114
114
  } else {
115
- return (0, _javascriptNaturalSort["default"])(typeX, typeY);
115
+ return (0, _javascriptNaturalSort.default)(typeX, typeY);
116
116
  }
117
117
  } // in case of different types, order by name of type, i.e. 'BigNumber' < 'Complex'
118
118
 
119
119
 
120
120
  if (typeX !== typeY) {
121
- return (0, _javascriptNaturalSort["default"])(typeX, typeY);
121
+ return (0, _javascriptNaturalSort.default)(typeX, typeY);
122
122
  }
123
123
 
124
124
  if (typeX === 'Complex') {
@@ -139,7 +139,7 @@ var createCompareNatural = /* #__PURE__ */(0, _factory.factory)(name, dependenci
139
139
  }
140
140
 
141
141
  if (typeX === 'string') {
142
- return (0, _javascriptNaturalSort["default"])(x, y);
142
+ return (0, _javascriptNaturalSort.default)(x, y);
143
143
  }
144
144
 
145
145
  if (typeX === 'Object') {
@@ -252,8 +252,8 @@ var createCompareNatural = /* #__PURE__ */(0, _factory.factory)(name, dependenci
252
252
  var keysX = Object.keys(x);
253
253
  var keysY = Object.keys(y); // compare keys
254
254
 
255
- keysX.sort(_javascriptNaturalSort["default"]);
256
- keysY.sort(_javascriptNaturalSort["default"]);
255
+ keysX.sort(_javascriptNaturalSort.default);
256
+ keysY.sort(_javascriptNaturalSort.default);
257
257
  var c = compareArrays(compareNatural, keysX, keysY);
258
258
 
259
259
  if (c !== 0) {
package/lib/cjs/header.js CHANGED
@@ -6,11 +6,11 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 10.0.2
10
- * @date 2021-12-29
9
+ * @version 10.2.0
10
+ * @date 2022-03-01
11
11
  *
12
12
  * @license
13
- * Copyright (C) 2013-2021 Jos de Jong <wjosdejong@gmail.com>
13
+ * Copyright (C) 2013-2022 Jos de Jong <wjosdejong@gmail.com>
14
14
  *
15
15
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
16
16
  * use this file except in compliance with the License. You may obtain a copy
@@ -27,7 +27,7 @@ Object.keys(_arithmetic).forEach(function (key) {
27
27
  });
28
28
 
29
29
  // TODO: this is ugly. Instead, be able to pass your own isBigNumber function to typed?
30
- var BigNumber = _decimal["default"].clone();
30
+ var BigNumber = _decimal.default.clone();
31
31
 
32
32
  BigNumber.prototype.isBigNumber = true;
33
33
 
@@ -23,15 +23,27 @@ function combinationsNumber(n, k) {
23
23
  }
24
24
 
25
25
  var nMinusk = n - k;
26
- var prodrange;
26
+ var answer = 1;
27
+ var firstnumerator = k < nMinusk ? nMinusk + 1 : k + 1;
28
+ var nextdivisor = 2;
29
+ var lastdivisor = k < nMinusk ? k : nMinusk; // balance multiplications and divisions to try to keep intermediate values
30
+ // in exact-integer range as long as possible
27
31
 
28
- if (k < nMinusk) {
29
- prodrange = (0, _product.product)(nMinusk + 1, n);
30
- return prodrange / (0, _product.product)(1, k);
32
+ for (var nextnumerator = firstnumerator; nextnumerator <= n; ++nextnumerator) {
33
+ answer *= nextnumerator;
34
+
35
+ while (nextdivisor <= lastdivisor && answer % nextdivisor === 0) {
36
+ answer /= nextdivisor;
37
+ ++nextdivisor;
38
+ }
39
+ } // for big n, k, floating point may have caused weirdness in remainder
40
+
41
+
42
+ if (nextdivisor <= lastdivisor) {
43
+ answer /= (0, _product.product)(nextdivisor, lastdivisor);
31
44
  }
32
45
 
33
- prodrange = (0, _product.product)(k + 1, n);
34
- return prodrange / (0, _product.product)(1, nMinusk);
46
+ return answer;
35
47
  }
36
48
 
37
49
  combinationsNumber.signature = 'number, number';
@@ -17,9 +17,9 @@ var createBigNumberClass = /* #__PURE__ */(0, _factory.factory)(name, dependenci
17
17
  var on = _ref.on,
18
18
  config = _ref.config;
19
19
 
20
- var BigNumber = _decimal["default"].clone({
20
+ var BigNumber = _decimal.default.clone({
21
21
  precision: config.precision,
22
- modulo: _decimal["default"].EUCLID
22
+ modulo: _decimal.default.EUCLID
23
23
  });
24
24
 
25
25
  BigNumber.prototype = Object.create(BigNumber.prototype);
@@ -79,7 +79,7 @@ var createBignumber = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
79
79
  Fraction: function Fraction(x) {
80
80
  return new BigNumber(x.n).div(x.d).times(x.s);
81
81
  },
82
- "null": function _null(x) {
82
+ null: function _null(x) {
83
83
  return new BigNumber(0);
84
84
  },
85
85
  'Array | Matrix': function ArrayMatrix(x) {
@@ -45,13 +45,13 @@ var createBoolean = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
45
45
  '': function _() {
46
46
  return false;
47
47
  },
48
- "boolean": function boolean(x) {
48
+ boolean: function boolean(x) {
49
49
  return x;
50
50
  },
51
51
  number: function number(x) {
52
52
  return !!x;
53
53
  },
54
- "null": function _null(x) {
54
+ null: function _null(x) {
55
55
  return false;
56
56
  },
57
57
  BigNumber: function BigNumber(x) {