mathjs 10.1.1 → 10.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (325) hide show
  1. package/HISTORY.md +17 -0
  2. package/docs/expressions/algebra.md +27 -0
  3. package/docs/reference/functions/abs.md +6 -0
  4. package/docs/reference/functions/acos.md +6 -0
  5. package/docs/reference/functions/acosh.md +6 -0
  6. package/docs/reference/functions/acot.md +6 -0
  7. package/docs/reference/functions/acoth.md +6 -0
  8. package/docs/reference/functions/acsc.md +6 -0
  9. package/docs/reference/functions/acsch.md +6 -0
  10. package/docs/reference/functions/add.md +6 -0
  11. package/docs/reference/functions/and.md +6 -0
  12. package/docs/reference/functions/apply.md +6 -0
  13. package/docs/reference/functions/arg.md +6 -0
  14. package/docs/reference/functions/asec.md +6 -0
  15. package/docs/reference/functions/asech.md +6 -0
  16. package/docs/reference/functions/asin.md +6 -0
  17. package/docs/reference/functions/asinh.md +6 -0
  18. package/docs/reference/functions/atan.md +6 -0
  19. package/docs/reference/functions/atan2.md +6 -0
  20. package/docs/reference/functions/atanh.md +6 -0
  21. package/docs/reference/functions/bellNumbers.md +6 -0
  22. package/docs/reference/functions/bin.md +6 -0
  23. package/docs/reference/functions/bitAnd.md +6 -0
  24. package/docs/reference/functions/bitNot.md +6 -0
  25. package/docs/reference/functions/bitOr.md +6 -0
  26. package/docs/reference/functions/bitXor.md +6 -0
  27. package/docs/reference/functions/catalan.md +6 -0
  28. package/docs/reference/functions/cbrt.md +6 -0
  29. package/docs/reference/functions/ceil.md +6 -0
  30. package/docs/reference/functions/clone.md +6 -0
  31. package/docs/reference/functions/column.md +6 -0
  32. package/docs/reference/functions/combinations.md +6 -0
  33. package/docs/reference/functions/combinationsWithRep.md +6 -0
  34. package/docs/reference/functions/compare.md +6 -0
  35. package/docs/reference/functions/compareNatural.md +6 -0
  36. package/docs/reference/functions/compareText.md +6 -0
  37. package/docs/reference/functions/compile.md +6 -0
  38. package/docs/reference/functions/composition.md +6 -0
  39. package/docs/reference/functions/concat.md +6 -0
  40. package/docs/reference/functions/conj.md +6 -0
  41. package/docs/reference/functions/cos.md +6 -0
  42. package/docs/reference/functions/cosh.md +6 -0
  43. package/docs/reference/functions/cot.md +6 -0
  44. package/docs/reference/functions/coth.md +6 -0
  45. package/docs/reference/functions/count.md +6 -0
  46. package/docs/reference/functions/cross.md +6 -0
  47. package/docs/reference/functions/csc.md +6 -0
  48. package/docs/reference/functions/csch.md +6 -0
  49. package/docs/reference/functions/ctranspose.md +6 -0
  50. package/docs/reference/functions/cube.md +6 -0
  51. package/docs/reference/functions/deepEqual.md +6 -0
  52. package/docs/reference/functions/derivative.md +6 -0
  53. package/docs/reference/functions/det.md +6 -0
  54. package/docs/reference/functions/diag.md +6 -0
  55. package/docs/reference/functions/diff.md +6 -0
  56. package/docs/reference/functions/distance.md +6 -0
  57. package/docs/reference/functions/divide.md +6 -0
  58. package/docs/reference/functions/dot.md +6 -0
  59. package/docs/reference/functions/dotDivide.md +6 -0
  60. package/docs/reference/functions/dotMultiply.md +6 -0
  61. package/docs/reference/functions/dotPow.md +6 -0
  62. package/docs/reference/functions/eigs.md +6 -0
  63. package/docs/reference/functions/equal.md +6 -0
  64. package/docs/reference/functions/equalText.md +6 -0
  65. package/docs/reference/functions/erf.md +6 -0
  66. package/docs/reference/functions/evaluate.md +6 -0
  67. package/docs/reference/functions/exp.md +6 -0
  68. package/docs/reference/functions/expm.md +6 -0
  69. package/docs/reference/functions/expm1.md +6 -0
  70. package/docs/reference/functions/factorial.md +6 -0
  71. package/docs/reference/functions/filter.md +6 -0
  72. package/docs/reference/functions/fix.md +6 -0
  73. package/docs/reference/functions/flatten.md +6 -0
  74. package/docs/reference/functions/floor.md +6 -0
  75. package/docs/reference/functions/forEach.md +6 -0
  76. package/docs/reference/functions/format.md +6 -0
  77. package/docs/reference/functions/gamma.md +6 -0
  78. package/docs/reference/functions/gcd.md +6 -0
  79. package/docs/reference/functions/getMatrixDataType.md +6 -0
  80. package/docs/reference/functions/hasNumericValue.md +6 -0
  81. package/docs/reference/functions/help.md +6 -0
  82. package/docs/reference/functions/hex.md +6 -0
  83. package/docs/reference/functions/hypot.md +6 -0
  84. package/docs/reference/functions/identity.md +6 -0
  85. package/docs/reference/functions/im.md +6 -0
  86. package/docs/reference/functions/intersect.md +6 -0
  87. package/docs/reference/functions/inv.md +6 -0
  88. package/docs/reference/functions/invmod.md +6 -0
  89. package/docs/reference/functions/isInteger.md +6 -0
  90. package/docs/reference/functions/isNaN.md +6 -0
  91. package/docs/reference/functions/isNegative.md +6 -0
  92. package/docs/reference/functions/isNumeric.md +6 -0
  93. package/docs/reference/functions/isPositive.md +6 -0
  94. package/docs/reference/functions/isPrime.md +6 -0
  95. package/docs/reference/functions/isZero.md +6 -0
  96. package/docs/reference/functions/kldivergence.md +6 -0
  97. package/docs/reference/functions/kron.md +6 -0
  98. package/docs/reference/functions/larger.md +6 -0
  99. package/docs/reference/functions/largerEq.md +6 -0
  100. package/docs/reference/functions/lcm.md +6 -0
  101. package/docs/reference/functions/leafCount.md +52 -0
  102. package/docs/reference/functions/leftShift.md +6 -0
  103. package/docs/reference/functions/log.md +6 -0
  104. package/docs/reference/functions/log10.md +6 -0
  105. package/docs/reference/functions/log1p.md +6 -0
  106. package/docs/reference/functions/log2.md +6 -0
  107. package/docs/reference/functions/lsolve.md +6 -0
  108. package/docs/reference/functions/lsolveAll.md +6 -0
  109. package/docs/reference/functions/lup.md +6 -0
  110. package/docs/reference/functions/lusolve.md +6 -0
  111. package/docs/reference/functions/mad.md +6 -0
  112. package/docs/reference/functions/map.md +6 -0
  113. package/docs/reference/functions/matrixFromColumns.md +6 -0
  114. package/docs/reference/functions/matrixFromFunction.md +6 -0
  115. package/docs/reference/functions/matrixFromRows.md +6 -0
  116. package/docs/reference/functions/max.md +6 -0
  117. package/docs/reference/functions/mean.md +6 -0
  118. package/docs/reference/functions/median.md +6 -0
  119. package/docs/reference/functions/min.md +6 -0
  120. package/docs/reference/functions/mod.md +6 -0
  121. package/docs/reference/functions/mode.md +6 -0
  122. package/docs/reference/functions/multinomial.md +6 -0
  123. package/docs/reference/functions/multiply.md +6 -0
  124. package/docs/reference/functions/norm.md +6 -0
  125. package/docs/reference/functions/not.md +6 -0
  126. package/docs/reference/functions/nthRoot.md +6 -0
  127. package/docs/reference/functions/nthRoots.md +6 -0
  128. package/docs/reference/functions/numeric.md +6 -0
  129. package/docs/reference/functions/oct.md +6 -0
  130. package/docs/reference/functions/ones.md +6 -0
  131. package/docs/reference/functions/or.md +6 -0
  132. package/docs/reference/functions/parser.md +6 -0
  133. package/docs/reference/functions/partitionSelect.md +6 -0
  134. package/docs/reference/functions/permutations.md +6 -0
  135. package/docs/reference/functions/pickRandom.md +6 -0
  136. package/docs/reference/functions/pow.md +6 -0
  137. package/docs/reference/functions/print.md +6 -0
  138. package/docs/reference/functions/prod.md +6 -0
  139. package/docs/reference/functions/qr.md +6 -0
  140. package/docs/reference/functions/quantileSeq.md +6 -0
  141. package/docs/reference/functions/random.md +6 -0
  142. package/docs/reference/functions/randomInt.md +6 -0
  143. package/docs/reference/functions/range.md +6 -0
  144. package/docs/reference/functions/rationalize.md +7 -1
  145. package/docs/reference/functions/re.md +6 -0
  146. package/docs/reference/functions/reshape.md +7 -0
  147. package/docs/reference/functions/resize.md +6 -0
  148. package/docs/reference/functions/resolve.md +46 -0
  149. package/docs/reference/functions/rightArithShift.md +6 -0
  150. package/docs/reference/functions/rightLogShift.md +6 -0
  151. package/docs/reference/functions/rotate.md +6 -0
  152. package/docs/reference/functions/rotationMatrix.md +6 -0
  153. package/docs/reference/functions/round.md +6 -0
  154. package/docs/reference/functions/row.md +6 -0
  155. package/docs/reference/functions/sec.md +6 -0
  156. package/docs/reference/functions/sech.md +6 -0
  157. package/docs/reference/functions/setCartesian.md +6 -0
  158. package/docs/reference/functions/setDifference.md +6 -0
  159. package/docs/reference/functions/setDistinct.md +6 -0
  160. package/docs/reference/functions/setIntersect.md +6 -0
  161. package/docs/reference/functions/setIsSubset.md +6 -0
  162. package/docs/reference/functions/setMultiplicity.md +6 -0
  163. package/docs/reference/functions/setPowerset.md +6 -0
  164. package/docs/reference/functions/setSize.md +6 -0
  165. package/docs/reference/functions/setSymDifference.md +6 -0
  166. package/docs/reference/functions/setUnion.md +6 -0
  167. package/docs/reference/functions/sign.md +6 -0
  168. package/docs/reference/functions/simplify.md +43 -6
  169. package/docs/reference/functions/simplifyCore.md +50 -0
  170. package/docs/reference/functions/sin.md +6 -0
  171. package/docs/reference/functions/sinh.md +6 -0
  172. package/docs/reference/functions/size.md +6 -0
  173. package/docs/reference/functions/slu.md +6 -0
  174. package/docs/reference/functions/smaller.md +6 -0
  175. package/docs/reference/functions/smallerEq.md +6 -0
  176. package/docs/reference/functions/sort.md +6 -0
  177. package/docs/reference/functions/sqrt.md +6 -0
  178. package/docs/reference/functions/sqrtm.md +6 -0
  179. package/docs/reference/functions/square.md +6 -0
  180. package/docs/reference/functions/squeeze.md +6 -0
  181. package/docs/reference/functions/std.md +6 -0
  182. package/docs/reference/functions/stirlingS2.md +6 -0
  183. package/docs/reference/functions/subset.md +6 -0
  184. package/docs/reference/functions/subtract.md +6 -0
  185. package/docs/reference/functions/sum.md +6 -0
  186. package/docs/reference/functions/tan.md +6 -0
  187. package/docs/reference/functions/tanh.md +6 -0
  188. package/docs/reference/functions/to.md +6 -0
  189. package/docs/reference/functions/trace.md +6 -0
  190. package/docs/reference/functions/transpose.md +6 -0
  191. package/docs/reference/functions/typeOf.md +6 -0
  192. package/docs/reference/functions/unaryMinus.md +6 -0
  193. package/docs/reference/functions/unaryPlus.md +6 -0
  194. package/docs/reference/functions/unequal.md +6 -0
  195. package/docs/reference/functions/usolve.md +6 -0
  196. package/docs/reference/functions/usolveAll.md +6 -0
  197. package/docs/reference/functions/variance.md +6 -0
  198. package/docs/reference/functions/xgcd.md +6 -0
  199. package/docs/reference/functions/xor.md +6 -0
  200. package/docs/reference/functions/zeros.md +6 -0
  201. package/docs/reference/functions.md +3 -0
  202. package/lib/browser/math.js +6 -6
  203. package/lib/browser/math.js.map +1 -1
  204. package/lib/cjs/core/create.js +4 -4
  205. package/lib/cjs/core/function/import.js +3 -3
  206. package/lib/cjs/core/function/typed.js +2 -2
  207. package/lib/cjs/defaultInstance.js +3 -3
  208. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  209. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  210. package/lib/cjs/entry/configReadonly.js +1 -1
  211. package/lib/cjs/entry/dependenciesAny/dependenciesLeafCount.generated.js +23 -0
  212. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  213. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +32 -0
  214. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +6 -0
  215. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +65 -0
  216. package/lib/cjs/entry/dependenciesAny.generated.js +24 -0
  217. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  218. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +32 -0
  219. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +6 -0
  220. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +65 -0
  221. package/lib/cjs/entry/dependenciesNumber.generated.js +16 -0
  222. package/lib/cjs/entry/impureFunctionsAny.generated.js +67 -29
  223. package/lib/cjs/entry/impureFunctionsNumber.generated.js +96 -64
  224. package/lib/cjs/entry/pureFunctionsAny.generated.js +53 -55
  225. package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -48
  226. package/lib/cjs/expression/Help.js +4 -0
  227. package/lib/cjs/expression/Parser.js +1 -1
  228. package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
  229. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +14 -5
  230. package/lib/cjs/expression/embeddedDocs/function/algebra/leafCount.js +15 -0
  231. package/lib/cjs/expression/embeddedDocs/function/algebra/resolve.js +16 -0
  232. package/lib/cjs/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  233. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +15 -0
  234. package/lib/cjs/expression/node/FunctionNode.js +7 -7
  235. package/lib/cjs/expression/node/IndexNode.js +1 -1
  236. package/lib/cjs/expression/node/Node.js +3 -3
  237. package/lib/cjs/expression/node/ObjectNode.js +1 -1
  238. package/lib/cjs/expression/node/utils/access.js +1 -1
  239. package/lib/cjs/expression/node/utils/assign.js +1 -1
  240. package/lib/cjs/expression/parse.js +13 -13
  241. package/lib/cjs/factoriesAny.js +24 -0
  242. package/lib/cjs/factoriesNumber.js +16 -0
  243. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  244. package/lib/cjs/function/algebra/leafCount.js +66 -0
  245. package/lib/cjs/function/algebra/rationalize.js +24 -41
  246. package/lib/cjs/function/algebra/resolve.js +106 -0
  247. package/lib/cjs/function/algebra/simplify/simplifyConstant.js +5 -5
  248. package/lib/cjs/function/algebra/simplify/util.js +171 -33
  249. package/lib/cjs/function/algebra/simplify.js +554 -207
  250. package/lib/cjs/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +67 -43
  251. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  252. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  253. package/lib/cjs/function/arithmetic/ceil.js +3 -3
  254. package/lib/cjs/function/arithmetic/floor.js +3 -3
  255. package/lib/cjs/function/arithmetic/invmod.js +1 -1
  256. package/lib/cjs/function/arithmetic/norm.js +1 -1
  257. package/lib/cjs/function/arithmetic/round.js +1 -1
  258. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  259. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  260. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  261. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  262. package/lib/cjs/function/relational/compareNatural.js +6 -6
  263. package/lib/cjs/header.js +2 -2
  264. package/lib/cjs/plain/bignumber/index.js +1 -1
  265. package/lib/cjs/plain/number/combinations.js +18 -6
  266. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  267. package/lib/cjs/type/bignumber/function/bignumber.js +1 -1
  268. package/lib/cjs/type/boolean.js +2 -2
  269. package/lib/cjs/type/complex/Complex.js +14 -14
  270. package/lib/cjs/type/complex/function/complex.js +1 -1
  271. package/lib/cjs/type/fraction/Fraction.js +6 -6
  272. package/lib/cjs/type/fraction/function/fraction.js +1 -1
  273. package/lib/cjs/type/matrix/DenseMatrix.js +5 -5
  274. package/lib/cjs/type/matrix/SparseMatrix.js +2 -2
  275. package/lib/cjs/type/number.js +1 -1
  276. package/lib/cjs/type/string.js +2 -2
  277. package/lib/cjs/type/unit/Unit.js +8 -8
  278. package/lib/cjs/utils/customs.js +2 -2
  279. package/lib/cjs/utils/emitter.js +1 -1
  280. package/lib/cjs/utils/function.js +2 -2
  281. package/lib/cjs/utils/is.js +6 -6
  282. package/lib/cjs/utils/latex.js +3 -3
  283. package/lib/cjs/utils/lruQueue.js +1 -1
  284. package/lib/cjs/utils/map.js +3 -3
  285. package/lib/cjs/utils/object.js +2 -2
  286. package/lib/cjs/utils/snapshot.js +7 -7
  287. package/lib/cjs/utils/string.js +2 -2
  288. package/lib/cjs/version.js +1 -1
  289. package/lib/esm/entry/dependenciesAny/dependenciesLeafCount.generated.js +12 -0
  290. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  291. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +18 -0
  292. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +4 -0
  293. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +40 -0
  294. package/lib/esm/entry/dependenciesAny.generated.js +3 -0
  295. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  296. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +18 -0
  297. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +4 -0
  298. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +40 -0
  299. package/lib/esm/entry/dependenciesNumber.generated.js +2 -0
  300. package/lib/esm/entry/impureFunctionsAny.generated.js +57 -22
  301. package/lib/esm/entry/impureFunctionsNumber.generated.js +83 -53
  302. package/lib/esm/entry/pureFunctionsAny.generated.js +42 -42
  303. package/lib/esm/entry/pureFunctionsNumber.generated.js +32 -32
  304. package/lib/esm/expression/Help.js +4 -0
  305. package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
  306. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +6 -0
  307. package/lib/esm/expression/embeddedDocs/function/algebra/leafCount.js +8 -0
  308. package/lib/esm/expression/embeddedDocs/function/algebra/resolve.js +9 -0
  309. package/lib/esm/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  310. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +8 -0
  311. package/lib/esm/factoriesAny.js +3 -0
  312. package/lib/esm/factoriesNumber.js +2 -0
  313. package/lib/esm/function/algebra/leafCount.js +59 -0
  314. package/lib/esm/function/algebra/rationalize.js +24 -40
  315. package/lib/esm/function/algebra/resolve.js +95 -0
  316. package/lib/esm/function/algebra/simplify/simplifyConstant.js +3 -3
  317. package/lib/esm/function/algebra/simplify/util.js +170 -34
  318. package/lib/esm/function/algebra/simplify.js +549 -202
  319. package/lib/esm/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +60 -44
  320. package/lib/esm/plain/number/combinations.js +18 -6
  321. package/lib/esm/version.js +1 -1
  322. package/package.json +15 -10
  323. package/types/index.d.ts +44 -2
  324. package/lib/cjs/function/algebra/simplify/resolve.js +0 -76
  325. package/lib/esm/function/algebra/simplify/resolve.js +0 -67
@@ -1,7 +1,8 @@
1
- import { isAccessorNode, isArrayNode, isConstantNode, isFunctionNode, isIndexNode, isObjectNode, isOperatorNode, isParenthesisNode, isSymbolNode } from '../../../utils/is.js';
2
- import { factory } from '../../../utils/factory.js';
1
+ import { isAccessorNode, isArrayNode, isConstantNode, isFunctionNode, isIndexNode, isObjectNode, isOperatorNode } from '../../utils/is.js';
2
+ import { createUtil } from './simplify/util.js';
3
+ import { factory } from '../../utils/factory.js';
3
4
  var name = 'simplifyCore';
4
- var dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode'];
5
+ var dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
5
6
  export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref => {
6
7
  var {
7
8
  equal,
@@ -18,16 +19,19 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
18
19
  IndexNode,
19
20
  ObjectNode,
20
21
  OperatorNode,
21
- ParenthesisNode
22
+ ParenthesisNode,
23
+ SymbolNode
22
24
  } = _ref;
23
25
  var node0 = new ConstantNode(0);
24
26
  var node1 = new ConstantNode(1);
25
-
26
- function mapSimplifyCore(nodeArray) {
27
- return nodeArray.map(simplifyCore).map(function (arg) {
28
- return isParenthesisNode(arg) ? arg.content : arg;
29
- });
30
- }
27
+ var {
28
+ hasProperty,
29
+ isCommutative
30
+ } = createUtil({
31
+ FunctionNode,
32
+ OperatorNode,
33
+ SymbolNode
34
+ });
31
35
  /**
32
36
  * simplifyCore() performs single pass simplification suitable for
33
37
  * applications requiring ultimate performance. In contrast, simplify()
@@ -36,31 +40,53 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
36
40
  *
37
41
  * Syntax:
38
42
  *
39
- * simplify.simplifyCore(expr)
43
+ * simplifyCore(expr)
40
44
  *
41
45
  * Examples:
42
46
  *
43
47
  * const f = math.parse('2 * 1 * x ^ (2 - 1)')
44
- * math.simplify.simpifyCore(f) // Node {2 * x}
45
- * math.simplify('2 * 1 * x ^ (2 - 1)', [math.simplify.simpifyCore]) // Node {2 * x}
48
+ * math.simpifyCore(f) // Node {2 * x}
49
+ * math.simplify('2 * 1 * x ^ (2 - 1)', [math.simplifyCore]) // Node {2 * x}
46
50
  *
47
51
  * See also:
48
52
  *
49
- * derivative
53
+ * simplify, resolve, derivative
50
54
  *
51
55
  * @param {Node} node
52
56
  * The expression to be simplified
57
+ * @param {Object} options
58
+ * Simplification options, as per simplify()
59
+ * @return {Node} Returns expression with basic simplifications applied
53
60
  */
54
61
 
62
+ function simplifyCore(node, options) {
63
+ var context = options ? options.context : undefined;
55
64
 
56
- function simplifyCore(node) {
57
- if (isOperatorNode(node) && node.isUnary()) {
58
- var a0 = simplifyCore(node.args[0]);
65
+ if (hasProperty(node, 'trivial', context)) {
66
+ // This node does nothing if it has only one argument, so if so,
67
+ // return that argument simplified
68
+ if (isFunctionNode(node) && node.args.length === 1) {
69
+ return simplifyCore(node.args[0], options);
70
+ } // For other node types, we try the generic methods
59
71
 
60
- if (node.op === '+') {
61
- // unary plus
62
- return a0;
72
+
73
+ var simpChild = false;
74
+ var childCount = 0;
75
+ node.forEach(c => {
76
+ ++childCount;
77
+
78
+ if (childCount === 1) {
79
+ simpChild = simplifyCore(c, options);
80
+ }
81
+ });
82
+
83
+ if (childCount === 1) {
84
+ return simpChild;
63
85
  }
86
+ }
87
+
88
+ if (isOperatorNode(node) && node.isUnary()) {
89
+ var a0 = simplifyCore(node.args[0], options);
64
90
 
65
91
  if (node.op === '-') {
66
92
  // unary minus
@@ -75,9 +101,9 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
75
101
  return new OperatorNode(node.op, node.fn, [a0]);
76
102
  }
77
103
  } else if (isOperatorNode(node) && node.isBinary()) {
78
- var _a = simplifyCore(node.args[0]);
104
+ var _a = simplifyCore(node.args[0], options);
79
105
 
80
- var a1 = simplifyCore(node.args[1]);
106
+ var a1 = simplifyCore(node.args[1], options);
81
107
 
82
108
  if (node.op === '+') {
83
109
  if (isConstantNode(_a)) {
@@ -113,7 +139,7 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
113
139
  }
114
140
 
115
141
  if (isOperatorNode(a1) && a1.isUnary() && a1.op === '-') {
116
- return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]));
142
+ return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);
117
143
  }
118
144
 
119
145
  return new OperatorNode(node.op, node.fn, [_a, a1]);
@@ -134,7 +160,7 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
134
160
  return node0;
135
161
  } else if (equal(a1.value, 1)) {
136
162
  return _a;
137
- } else if (isOperatorNode(_a) && _a.isBinary() && _a.op === node.op) {
163
+ } else if (isOperatorNode(_a) && _a.isBinary() && _a.op === node.op && isCommutative(node, context)) {
138
164
  var a00 = _a.args[0];
139
165
 
140
166
  if (isConstantNode(a00)) {
@@ -143,7 +169,11 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
143
169
  }
144
170
  }
145
171
 
146
- return new OperatorNode(node.op, node.fn, [a1, _a], node.implicit); // constants on left
172
+ if (isCommutative(node, context)) {
173
+ return new OperatorNode(node.op, node.fn, [a1, _a], node.implicit); // constants on left
174
+ } else {
175
+ return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
176
+ }
147
177
  }
148
178
 
149
179
  return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
@@ -179,33 +209,19 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
179
209
 
180
210
  return new OperatorNode(node.op, node.fn, [_a, a1]);
181
211
  }
182
- } else if (isParenthesisNode(node)) {
183
- var c = simplifyCore(node.content);
184
-
185
- if (isParenthesisNode(c) || isSymbolNode(c) || isConstantNode(c)) {
186
- return c;
187
- }
188
-
189
- return new ParenthesisNode(c);
190
212
  } else if (isFunctionNode(node)) {
191
- return new FunctionNode(simplifyCore(node.fn), mapSimplifyCore(node.args));
213
+ return new FunctionNode(simplifyCore(node.fn), node.args.map(n => simplifyCore(n, options)));
192
214
  } else if (isArrayNode(node)) {
193
- return new ArrayNode(mapSimplifyCore(node.items));
215
+ return new ArrayNode(node.items.map(n => simplifyCore(n, options)));
194
216
  } else if (isAccessorNode(node)) {
195
- var obj = mapSimplifyCore(node.object);
196
-
197
- if (isParenthesisNode(obj)) {
198
- obj = obj.content;
199
- }
200
-
201
- return new AccessorNode(obj, simplifyCore(node.index));
217
+ return new AccessorNode(simplifyCore(node.object, options), simplifyCore(node.index, options));
202
218
  } else if (isIndexNode(node)) {
203
- return new IndexNode(mapSimplifyCore(node.dimensions));
219
+ return new IndexNode(node.dimensions.map(n => simplifyCore(n, options)));
204
220
  } else if (isObjectNode(node)) {
205
221
  var newProps = {};
206
222
 
207
223
  for (var prop in node.properties) {
208
- newProps[prop] = simplifyCore(node.properties[prop]);
224
+ newProps[prop] = simplifyCore(node.properties[prop], options);
209
225
  }
210
226
 
211
227
  return new ObjectNode(newProps);
@@ -14,14 +14,26 @@ export function combinationsNumber(n, k) {
14
14
  }
15
15
 
16
16
  var nMinusk = n - k;
17
- var prodrange;
17
+ var answer = 1;
18
+ var firstnumerator = k < nMinusk ? nMinusk + 1 : k + 1;
19
+ var nextdivisor = 2;
20
+ var lastdivisor = k < nMinusk ? k : nMinusk; // balance multiplications and divisions to try to keep intermediate values
21
+ // in exact-integer range as long as possible
18
22
 
19
- if (k < nMinusk) {
20
- prodrange = product(nMinusk + 1, n);
21
- return prodrange / product(1, k);
23
+ for (var nextnumerator = firstnumerator; nextnumerator <= n; ++nextnumerator) {
24
+ answer *= nextnumerator;
25
+
26
+ while (nextdivisor <= lastdivisor && answer % nextdivisor === 0) {
27
+ answer /= nextdivisor;
28
+ ++nextdivisor;
29
+ }
30
+ } // for big n, k, floating point may have caused weirdness in remainder
31
+
32
+
33
+ if (nextdivisor <= lastdivisor) {
34
+ answer /= product(nextdivisor, lastdivisor);
22
35
  }
23
36
 
24
- prodrange = product(k + 1, n);
25
- return prodrange / product(1, nMinusk);
37
+ return answer;
26
38
  }
27
39
  combinationsNumber.signature = 'number, number';
@@ -1,2 +1,2 @@
1
- export var version = '10.1.1'; // Note: This file is automatically generated when building math.js.
1
+ export var version = '10.2.0'; // Note: This file is automatically generated when building math.js.
2
2
  // Changes made in this file will be overwritten.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mathjs",
3
- "version": "10.1.1",
3
+ "version": "10.2.0",
4
4
  "description": "Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types like numbers, big numbers, complex numbers, fractions, units, and matrices.",
5
5
  "author": "Jos de Jong <wjosdejong@gmail.com> (https://github.com/josdejong)",
6
6
  "homepage": "https://mathjs.org",
@@ -25,26 +25,27 @@
25
25
  "unit"
26
26
  ],
27
27
  "dependencies": {
28
- "@babel/runtime": "^7.16.7",
28
+ "@babel/runtime": "^7.17.2",
29
29
  "complex.js": "^2.0.15",
30
30
  "decimal.js": "^10.3.1",
31
31
  "escape-latex": "^1.2.0",
32
- "fraction.js": "^4.1.2",
32
+ "fraction.js": "^4.1.3",
33
33
  "javascript-natural-sort": "^0.7.1",
34
34
  "seedrandom": "^3.0.5",
35
35
  "tiny-emitter": "^2.1.0",
36
36
  "typed-function": "^2.0.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@babel/core": "7.16.12",
39
+ "@babel/core": "7.17.5",
40
40
  "@babel/plugin-transform-object-assign": "7.16.7",
41
- "@babel/plugin-transform-runtime": "7.16.10",
41
+ "@babel/plugin-transform-runtime": "7.17.0",
42
42
  "@babel/preset-env": "7.16.11",
43
- "@babel/register": "7.16.9",
43
+ "@babel/register": "7.17.0",
44
+ "assert": "2.0.0",
44
45
  "babel-loader": "8.2.3",
45
46
  "benchmark": "2.1.4",
46
47
  "codecov": "3.8.3",
47
- "core-js": "3.21.0",
48
+ "core-js": "3.21.1",
48
49
  "del": "6.0.0",
49
50
  "dtslint": "4.2.1",
50
51
  "expr-eval": "2.0.2",
@@ -54,8 +55,8 @@
54
55
  "gulp-babel": "8.0.0",
55
56
  "handlebars": "4.7.7",
56
57
  "istanbul": "0.4.5",
57
- "jsep": "1.2.0",
58
- "karma": "6.3.13",
58
+ "jsep": "1.3.0",
59
+ "karma": "6.3.16",
59
60
  "karma-browserstack-launcher": "1.6.0",
60
61
  "karma-firefox-launcher": "2.1.2",
61
62
  "karma-mocha": "2.0.1",
@@ -72,6 +73,7 @@
72
73
  "numericjs": "1.2.6",
73
74
  "nyc": "15.1.0",
74
75
  "pad-right": "0.2.2",
76
+ "process": "0.11.10",
75
77
  "standard": "16.0.4",
76
78
  "sylvester": "0.0.21",
77
79
  "typescript": "4.5.5",
@@ -124,7 +126,7 @@
124
126
  "CONTRIBUTING.md"
125
127
  ],
126
128
  "scripts": {
127
- "build": "gulp --gulpfile gulpfile.cjs",
129
+ "build": "gulp --gulpfile gulpfile.cjs && npm run update-authors",
128
130
  "build-and-test": "npm run build && npm run test:all && npm run lint",
129
131
  "build:clean": "gulp --gulpfile gulpfile.cjs clean",
130
132
  "build:docs": "gulp --gulpfile gulpfile.cjs docs",
@@ -161,5 +163,8 @@
161
163
  "src": "./src",
162
164
  "test": "./test"
163
165
  },
166
+ "browserslist": [
167
+ "IE 11"
168
+ ],
164
169
  "sideEffects": false
165
170
  }
package/types/index.d.ts CHANGED
@@ -575,7 +575,7 @@ declare namespace math {
575
575
  * @param unit The unit to be created
576
576
  * @returns The created unit
577
577
  */
578
- unit(value: number | MathArray | Matrix, unit: string): Unit;
578
+ unit(value: number | MathArray | Matrix | BigNumber, unit: string): Unit;
579
579
 
580
580
  /*************************************************************************
581
581
  * Expression functions
@@ -1674,6 +1674,19 @@ declare namespace math {
1674
1674
  column: number
1675
1675
  ): T;
1676
1676
 
1677
+ /**
1678
+ * Return a rotated matrix.
1679
+ * @param {Array | Matrix} w Vector to rotate
1680
+ * @param {number | BigNumber | Complex | Unit} theta Rotation angle
1681
+ * @param {Array | Matrix} [v] Rotation axis
1682
+ * @return {Array | Matrix} Multiplication of the rotation matrix and w
1683
+ */
1684
+ rotate<T extends MathArray | Matrix>(
1685
+ w: T,
1686
+ theta: number | BigNumber | Complex | Unit,
1687
+ v?: T
1688
+ ): T;
1689
+
1677
1690
  /**
1678
1691
  * Calculate the size of a matrix or scalar.
1679
1692
  * @param A matrix
@@ -1783,7 +1796,7 @@ declare namespace math {
1783
1796
  * @param n A real or complex number
1784
1797
  * @returns The gamma of n
1785
1798
  */
1786
- gamma(n: number | MathArray | Matrix): number | MathArray | Matrix;
1799
+ gamma<T extends number | BigNumber | Complex | MathArray | Matrix>(n: T): NoLiteralType<T>;
1787
1800
 
1788
1801
  /**
1789
1802
  * Calculate the Kullback-Leibler (KL) divergence between two
@@ -3121,6 +3134,28 @@ declare namespace math {
3121
3134
  fixPrefix?: boolean;
3122
3135
  }
3123
3136
 
3137
+ interface UnitComponent {
3138
+ power: number;
3139
+ prefix: string;
3140
+ unit: {
3141
+ name: string;
3142
+ base: {
3143
+ dimensions: number[];
3144
+ key: string;
3145
+ };
3146
+ prefixes: Record<string, UnitPrefix>;
3147
+ value: number;
3148
+ offset: number;
3149
+ dimensions: number[];
3150
+ };
3151
+ }
3152
+
3153
+ interface UnitPrefix {
3154
+ name: string;
3155
+ value: number;
3156
+ scientific: boolean;
3157
+ }
3158
+
3124
3159
  interface Unit {
3125
3160
  valueOf(): string;
3126
3161
  clone(): Unit;
@@ -3139,7 +3174,14 @@ declare namespace math {
3139
3174
  toJSON(): MathJSON;
3140
3175
  formatUnits(): string;
3141
3176
  format(options: FormatOptions): string;
3177
+ simplify(): Unit;
3142
3178
  splitUnit(parts: ReadonlyArray<string | Unit>): Unit[];
3179
+
3180
+ units: UnitComponent[];
3181
+ dimensions: number[];
3182
+ value: number;
3183
+ fixPrefix: boolean;
3184
+ skipAutomaticSimplification: true;
3143
3185
  }
3144
3186
 
3145
3187
  interface CreateUnitOptions {
@@ -1,76 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createResolve = void 0;
7
-
8
- var _map = require("../../../utils/map.js");
9
-
10
- var _is = require("../../../utils/is.js");
11
-
12
- var _factory = require("../../../utils/factory.js");
13
-
14
- var name = 'resolve';
15
- var dependencies = ['parse', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
16
- var createResolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
- var parse = _ref.parse,
18
- FunctionNode = _ref.FunctionNode,
19
- OperatorNode = _ref.OperatorNode,
20
- ParenthesisNode = _ref.ParenthesisNode;
21
-
22
- /**
23
- * resolve(expr, scope) replaces variable nodes with their scoped values
24
- *
25
- * Syntax:
26
- *
27
- * simplify.resolve(expr, scope)
28
- *
29
- * Examples:
30
- *
31
- * math.simplify.resolve('x + y', {x:1, y:2}) // Node {1 + 2}
32
- * math.simplify.resolve(math.parse('x+y'), {x:1, y:2}) // Node {1 + 2}
33
- * math.simplify('x+y', {x:2, y:'x+x'}).toString() // "6"
34
- *
35
- * @param {Node} node
36
- * The expression tree to be simplified
37
- * @param {Object} scope with variables to be resolved
38
- */
39
- function resolve(node, scope) {
40
- if (!scope) {
41
- return node;
42
- }
43
-
44
- if (!(0, _map.isMap)(scope)) {
45
- scope = (0, _map.createMap)(scope);
46
- }
47
-
48
- if ((0, _is.isSymbolNode)(node)) {
49
- var value = scope.get(node.name);
50
-
51
- if ((0, _is.isNode)(value)) {
52
- return resolve(value, scope);
53
- } else if (typeof value === 'number') {
54
- return parse(String(value));
55
- }
56
- } else if ((0, _is.isOperatorNode)(node)) {
57
- var args = node.args.map(function (arg) {
58
- return resolve(arg, scope);
59
- });
60
- return new OperatorNode(node.op, node.fn, args, node.implicit);
61
- } else if ((0, _is.isParenthesisNode)(node)) {
62
- return new ParenthesisNode(resolve(node.content, scope));
63
- } else if ((0, _is.isFunctionNode)(node)) {
64
- var _args = node.args.map(function (arg) {
65
- return resolve(arg, scope);
66
- });
67
-
68
- return new FunctionNode(node.name, _args);
69
- }
70
-
71
- return node;
72
- }
73
-
74
- return resolve;
75
- });
76
- exports.createResolve = createResolve;
@@ -1,67 +0,0 @@
1
- import { createMap, isMap } from '../../../utils/map.js';
2
- import { isFunctionNode, isNode, isOperatorNode, isParenthesisNode, isSymbolNode } from '../../../utils/is.js';
3
- import { factory } from '../../../utils/factory.js';
4
- var name = 'resolve';
5
- var dependencies = ['parse', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
6
- export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
7
- var {
8
- parse,
9
- FunctionNode,
10
- OperatorNode,
11
- ParenthesisNode
12
- } = _ref;
13
-
14
- /**
15
- * resolve(expr, scope) replaces variable nodes with their scoped values
16
- *
17
- * Syntax:
18
- *
19
- * simplify.resolve(expr, scope)
20
- *
21
- * Examples:
22
- *
23
- * math.simplify.resolve('x + y', {x:1, y:2}) // Node {1 + 2}
24
- * math.simplify.resolve(math.parse('x+y'), {x:1, y:2}) // Node {1 + 2}
25
- * math.simplify('x+y', {x:2, y:'x+x'}).toString() // "6"
26
- *
27
- * @param {Node} node
28
- * The expression tree to be simplified
29
- * @param {Object} scope with variables to be resolved
30
- */
31
- function resolve(node, scope) {
32
- if (!scope) {
33
- return node;
34
- }
35
-
36
- if (!isMap(scope)) {
37
- scope = createMap(scope);
38
- }
39
-
40
- if (isSymbolNode(node)) {
41
- var value = scope.get(node.name);
42
-
43
- if (isNode(value)) {
44
- return resolve(value, scope);
45
- } else if (typeof value === 'number') {
46
- return parse(String(value));
47
- }
48
- } else if (isOperatorNode(node)) {
49
- var args = node.args.map(function (arg) {
50
- return resolve(arg, scope);
51
- });
52
- return new OperatorNode(node.op, node.fn, args, node.implicit);
53
- } else if (isParenthesisNode(node)) {
54
- return new ParenthesisNode(resolve(node.content, scope));
55
- } else if (isFunctionNode(node)) {
56
- var _args = node.args.map(function (arg) {
57
- return resolve(arg, scope);
58
- });
59
-
60
- return new FunctionNode(node.name, _args);
61
- }
62
-
63
- return node;
64
- }
65
-
66
- return resolve;
67
- });