mathjs 10.0.2 → 10.2.0
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +37 -0
- package/NOTICE +1 -1
- package/README.md +10 -2
- package/bin/cli.js +1 -1
- package/docs/expressions/algebra.md +27 -0
- package/docs/expressions/syntax.md +1 -1
- package/docs/reference/functions/abs.md +6 -0
- package/docs/reference/functions/acos.md +6 -0
- package/docs/reference/functions/acosh.md +6 -0
- package/docs/reference/functions/acot.md +6 -0
- package/docs/reference/functions/acoth.md +6 -0
- package/docs/reference/functions/acsc.md +6 -0
- package/docs/reference/functions/acsch.md +6 -0
- package/docs/reference/functions/add.md +6 -0
- package/docs/reference/functions/and.md +6 -0
- package/docs/reference/functions/apply.md +6 -0
- package/docs/reference/functions/arg.md +6 -0
- package/docs/reference/functions/asec.md +6 -0
- package/docs/reference/functions/asech.md +6 -0
- package/docs/reference/functions/asin.md +6 -0
- package/docs/reference/functions/asinh.md +6 -0
- package/docs/reference/functions/atan.md +6 -0
- package/docs/reference/functions/atan2.md +6 -0
- package/docs/reference/functions/atanh.md +6 -0
- package/docs/reference/functions/bellNumbers.md +6 -0
- package/docs/reference/functions/bin.md +6 -0
- package/docs/reference/functions/bitAnd.md +6 -0
- package/docs/reference/functions/bitNot.md +6 -0
- package/docs/reference/functions/bitOr.md +6 -0
- package/docs/reference/functions/bitXor.md +6 -0
- package/docs/reference/functions/catalan.md +6 -0
- package/docs/reference/functions/cbrt.md +6 -0
- package/docs/reference/functions/ceil.md +6 -0
- package/docs/reference/functions/clone.md +6 -0
- package/docs/reference/functions/column.md +6 -0
- package/docs/reference/functions/combinations.md +6 -0
- package/docs/reference/functions/combinationsWithRep.md +6 -0
- package/docs/reference/functions/compare.md +6 -0
- package/docs/reference/functions/compareNatural.md +6 -0
- package/docs/reference/functions/compareText.md +6 -0
- package/docs/reference/functions/compile.md +6 -0
- package/docs/reference/functions/composition.md +6 -0
- package/docs/reference/functions/concat.md +6 -0
- package/docs/reference/functions/conj.md +6 -0
- package/docs/reference/functions/cos.md +6 -0
- package/docs/reference/functions/cosh.md +6 -0
- package/docs/reference/functions/cot.md +6 -0
- package/docs/reference/functions/coth.md +6 -0
- package/docs/reference/functions/count.md +6 -0
- package/docs/reference/functions/cross.md +6 -0
- package/docs/reference/functions/csc.md +6 -0
- package/docs/reference/functions/csch.md +6 -0
- package/docs/reference/functions/ctranspose.md +6 -0
- package/docs/reference/functions/cube.md +6 -0
- package/docs/reference/functions/deepEqual.md +6 -0
- package/docs/reference/functions/derivative.md +6 -0
- package/docs/reference/functions/det.md +6 -0
- package/docs/reference/functions/diag.md +6 -0
- package/docs/reference/functions/diff.md +6 -0
- package/docs/reference/functions/distance.md +6 -0
- package/docs/reference/functions/divide.md +6 -0
- package/docs/reference/functions/dot.md +6 -0
- package/docs/reference/functions/dotDivide.md +6 -0
- package/docs/reference/functions/dotMultiply.md +6 -0
- package/docs/reference/functions/dotPow.md +6 -0
- package/docs/reference/functions/eigs.md +6 -0
- package/docs/reference/functions/equal.md +6 -0
- package/docs/reference/functions/equalText.md +6 -0
- package/docs/reference/functions/erf.md +6 -0
- package/docs/reference/functions/evaluate.md +6 -0
- package/docs/reference/functions/exp.md +6 -0
- package/docs/reference/functions/expm.md +6 -0
- package/docs/reference/functions/expm1.md +6 -0
- package/docs/reference/functions/factorial.md +6 -0
- package/docs/reference/functions/filter.md +6 -0
- package/docs/reference/functions/fix.md +6 -0
- package/docs/reference/functions/flatten.md +6 -0
- package/docs/reference/functions/floor.md +6 -0
- package/docs/reference/functions/forEach.md +6 -0
- package/docs/reference/functions/format.md +6 -0
- package/docs/reference/functions/gamma.md +6 -0
- package/docs/reference/functions/gcd.md +6 -0
- package/docs/reference/functions/getMatrixDataType.md +6 -0
- package/docs/reference/functions/hasNumericValue.md +6 -0
- package/docs/reference/functions/help.md +6 -0
- package/docs/reference/functions/hex.md +6 -0
- package/docs/reference/functions/hypot.md +6 -0
- package/docs/reference/functions/identity.md +6 -0
- package/docs/reference/functions/im.md +6 -0
- package/docs/reference/functions/intersect.md +6 -0
- package/docs/reference/functions/inv.md +6 -0
- package/docs/reference/functions/invmod.md +47 -0
- package/docs/reference/functions/isInteger.md +6 -0
- package/docs/reference/functions/isNaN.md +6 -0
- package/docs/reference/functions/isNegative.md +6 -0
- package/docs/reference/functions/isNumeric.md +6 -0
- package/docs/reference/functions/isPositive.md +6 -0
- package/docs/reference/functions/isPrime.md +6 -0
- package/docs/reference/functions/isZero.md +6 -0
- package/docs/reference/functions/kldivergence.md +6 -0
- package/docs/reference/functions/kron.md +6 -0
- package/docs/reference/functions/larger.md +6 -0
- package/docs/reference/functions/largerEq.md +6 -0
- package/docs/reference/functions/lcm.md +6 -0
- package/docs/reference/functions/leafCount.md +52 -0
- package/docs/reference/functions/leftShift.md +6 -0
- package/docs/reference/functions/log.md +6 -0
- package/docs/reference/functions/log10.md +6 -0
- package/docs/reference/functions/log1p.md +6 -0
- package/docs/reference/functions/log2.md +6 -0
- package/docs/reference/functions/lsolve.md +6 -0
- package/docs/reference/functions/lsolveAll.md +6 -0
- package/docs/reference/functions/lup.md +6 -0
- package/docs/reference/functions/lusolve.md +6 -0
- package/docs/reference/functions/mad.md +6 -0
- package/docs/reference/functions/map.md +6 -0
- package/docs/reference/functions/matrixFromColumns.md +6 -0
- package/docs/reference/functions/matrixFromFunction.md +6 -0
- package/docs/reference/functions/matrixFromRows.md +6 -0
- package/docs/reference/functions/max.md +6 -0
- package/docs/reference/functions/mean.md +6 -0
- package/docs/reference/functions/median.md +6 -0
- package/docs/reference/functions/min.md +6 -0
- package/docs/reference/functions/mod.md +6 -0
- package/docs/reference/functions/mode.md +6 -0
- package/docs/reference/functions/multinomial.md +6 -0
- package/docs/reference/functions/multiply.md +6 -0
- package/docs/reference/functions/norm.md +6 -0
- package/docs/reference/functions/not.md +6 -0
- package/docs/reference/functions/nthRoot.md +6 -0
- package/docs/reference/functions/nthRoots.md +6 -0
- package/docs/reference/functions/numeric.md +6 -0
- package/docs/reference/functions/oct.md +6 -0
- package/docs/reference/functions/ones.md +6 -0
- package/docs/reference/functions/or.md +6 -0
- package/docs/reference/functions/parser.md +6 -0
- package/docs/reference/functions/partitionSelect.md +6 -0
- package/docs/reference/functions/permutations.md +6 -0
- package/docs/reference/functions/pickRandom.md +6 -0
- package/docs/reference/functions/pow.md +6 -0
- package/docs/reference/functions/print.md +6 -0
- package/docs/reference/functions/prod.md +6 -0
- package/docs/reference/functions/qr.md +6 -0
- package/docs/reference/functions/quantileSeq.md +6 -0
- package/docs/reference/functions/random.md +6 -0
- package/docs/reference/functions/randomInt.md +6 -0
- package/docs/reference/functions/range.md +6 -0
- package/docs/reference/functions/rationalize.md +7 -1
- package/docs/reference/functions/re.md +6 -0
- package/docs/reference/functions/reshape.md +7 -0
- package/docs/reference/functions/resize.md +6 -0
- package/docs/reference/functions/resolve.md +46 -0
- package/docs/reference/functions/rightArithShift.md +6 -0
- package/docs/reference/functions/rightLogShift.md +6 -0
- package/docs/reference/functions/rotate.md +6 -0
- package/docs/reference/functions/rotationMatrix.md +6 -0
- package/docs/reference/functions/round.md +6 -0
- package/docs/reference/functions/row.md +6 -0
- package/docs/reference/functions/sec.md +6 -0
- package/docs/reference/functions/sech.md +6 -0
- package/docs/reference/functions/setCartesian.md +6 -0
- package/docs/reference/functions/setDifference.md +6 -0
- package/docs/reference/functions/setDistinct.md +6 -0
- package/docs/reference/functions/setIntersect.md +6 -0
- package/docs/reference/functions/setIsSubset.md +6 -0
- package/docs/reference/functions/setMultiplicity.md +6 -0
- package/docs/reference/functions/setPowerset.md +6 -0
- package/docs/reference/functions/setSize.md +6 -0
- package/docs/reference/functions/setSymDifference.md +6 -0
- package/docs/reference/functions/setUnion.md +6 -0
- package/docs/reference/functions/sign.md +6 -0
- package/docs/reference/functions/simplify.md +47 -7
- package/docs/reference/functions/simplifyCore.md +50 -0
- package/docs/reference/functions/sin.md +6 -0
- package/docs/reference/functions/sinh.md +6 -0
- package/docs/reference/functions/size.md +6 -0
- package/docs/reference/functions/slu.md +6 -0
- package/docs/reference/functions/smaller.md +6 -0
- package/docs/reference/functions/smallerEq.md +6 -0
- package/docs/reference/functions/sort.md +6 -0
- package/docs/reference/functions/sqrt.md +6 -0
- package/docs/reference/functions/sqrtm.md +6 -0
- package/docs/reference/functions/square.md +6 -0
- package/docs/reference/functions/squeeze.md +6 -0
- package/docs/reference/functions/std.md +6 -0
- package/docs/reference/functions/stirlingS2.md +6 -0
- package/docs/reference/functions/subset.md +6 -0
- package/docs/reference/functions/subtract.md +6 -0
- package/docs/reference/functions/sum.md +6 -0
- package/docs/reference/functions/tan.md +6 -0
- package/docs/reference/functions/tanh.md +6 -0
- package/docs/reference/functions/to.md +6 -0
- package/docs/reference/functions/trace.md +6 -0
- package/docs/reference/functions/transpose.md +6 -0
- package/docs/reference/functions/typeOf.md +6 -0
- package/docs/reference/functions/unaryMinus.md +6 -0
- package/docs/reference/functions/unaryPlus.md +6 -0
- package/docs/reference/functions/unequal.md +6 -0
- package/docs/reference/functions/usolve.md +6 -0
- package/docs/reference/functions/usolveAll.md +6 -0
- package/docs/reference/functions/variance.md +6 -0
- package/docs/reference/functions/xgcd.md +6 -0
- package/docs/reference/functions/xor.md +6 -0
- package/docs/reference/functions/zeros.md +6 -0
- package/docs/reference/functions.md +4 -0
- package/lib/browser/math.js +7 -7
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/create.js +4 -4
- package/lib/cjs/core/function/import.js +3 -3
- package/lib/cjs/core/function/typed.js +2 -2
- package/lib/cjs/defaultInstance.js +3 -3
- package/lib/cjs/entry/allFactoriesAny.js +1 -1
- package/lib/cjs/entry/allFactoriesNumber.js +1 -1
- package/lib/cjs/entry/configReadonly.js +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesInvmod.generated.js +41 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesLeafCount.generated.js +23 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +18 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +32 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +21 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +65 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +32 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +18 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +32 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +21 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +65 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +16 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +78 -29
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +102 -60
- package/lib/cjs/entry/pureFunctionsAny.generated.js +65 -55
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -48
- package/lib/cjs/expression/Help.js +4 -0
- package/lib/cjs/expression/Parser.js +1 -1
- package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +20 -6
- package/lib/cjs/expression/embeddedDocs/function/algebra/leafCount.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/algebra/resolve.js +16 -0
- package/lib/cjs/expression/embeddedDocs/function/algebra/simplify.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/invmod.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/matrix/forEach.js +1 -1
- package/lib/cjs/expression/node/FunctionNode.js +7 -7
- package/lib/cjs/expression/node/IndexNode.js +1 -1
- package/lib/cjs/expression/node/Node.js +3 -3
- package/lib/cjs/expression/node/ObjectNode.js +1 -1
- package/lib/cjs/expression/node/utils/access.js +1 -1
- package/lib/cjs/expression/node/utils/assign.js +1 -1
- package/lib/cjs/expression/parse.js +13 -13
- package/lib/cjs/factoriesAny.js +32 -0
- package/lib/cjs/factoriesNumber.js +16 -0
- package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
- package/lib/cjs/function/algebra/leafCount.js +66 -0
- package/lib/cjs/function/algebra/rationalize.js +36 -39
- package/lib/cjs/function/algebra/resolve.js +106 -0
- package/lib/cjs/function/algebra/simplify/simplifyConstant.js +226 -32
- package/lib/cjs/function/algebra/simplify/util.js +171 -33
- package/lib/cjs/function/algebra/simplify.js +608 -191
- package/lib/cjs/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +83 -31
- package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
- package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
- package/lib/cjs/function/arithmetic/ceil.js +3 -3
- package/lib/cjs/function/arithmetic/floor.js +3 -3
- package/lib/cjs/function/arithmetic/invmod.js +73 -0
- package/lib/cjs/function/arithmetic/norm.js +1 -1
- package/lib/cjs/function/arithmetic/round.js +1 -1
- package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
- package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
- package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
- package/lib/cjs/function/probability/util/seededRNG.js +2 -2
- package/lib/cjs/function/relational/compareNatural.js +6 -6
- package/lib/cjs/header.js +3 -3
- package/lib/cjs/plain/bignumber/index.js +1 -1
- package/lib/cjs/plain/number/combinations.js +18 -6
- package/lib/cjs/type/bignumber/BigNumber.js +2 -2
- package/lib/cjs/type/bignumber/function/bignumber.js +1 -1
- package/lib/cjs/type/boolean.js +2 -2
- package/lib/cjs/type/complex/Complex.js +14 -14
- package/lib/cjs/type/complex/function/complex.js +1 -1
- package/lib/cjs/type/fraction/Fraction.js +6 -6
- package/lib/cjs/type/fraction/function/fraction.js +1 -1
- package/lib/cjs/type/matrix/DenseMatrix.js +5 -5
- package/lib/cjs/type/matrix/SparseMatrix.js +2 -2
- package/lib/cjs/type/number.js +1 -1
- package/lib/cjs/type/string.js +2 -2
- package/lib/cjs/type/unit/Unit.js +8 -8
- package/lib/cjs/utils/customs.js +2 -2
- package/lib/cjs/utils/emitter.js +1 -1
- package/lib/cjs/utils/function.js +2 -2
- package/lib/cjs/utils/is.js +6 -6
- package/lib/cjs/utils/latex.js +3 -3
- package/lib/cjs/utils/lruQueue.js +1 -1
- package/lib/cjs/utils/map.js +3 -3
- package/lib/cjs/utils/object.js +2 -2
- package/lib/cjs/utils/snapshot.js +7 -7
- package/lib/cjs/utils/string.js +2 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesInvmod.generated.js +24 -0
- package/lib/esm/entry/dependenciesAny/dependenciesLeafCount.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +18 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +14 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +40 -0
- package/lib/esm/entry/dependenciesAny.generated.js +4 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +12 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +18 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +14 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +40 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +2 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +68 -22
- package/lib/esm/entry/impureFunctionsNumber.generated.js +92 -52
- package/lib/esm/entry/pureFunctionsAny.generated.js +53 -42
- package/lib/esm/entry/pureFunctionsNumber.generated.js +32 -32
- package/lib/esm/expression/Help.js +4 -0
- package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +10 -1
- package/lib/esm/expression/embeddedDocs/function/algebra/leafCount.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/algebra/resolve.js +9 -0
- package/lib/esm/expression/embeddedDocs/function/algebra/simplify.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/arithmetic/invmod.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/matrix/forEach.js +1 -1
- package/lib/esm/factoriesAny.js +4 -0
- package/lib/esm/factoriesNumber.js +2 -0
- package/lib/esm/function/algebra/leafCount.js +59 -0
- package/lib/esm/function/algebra/rationalize.js +36 -38
- package/lib/esm/function/algebra/resolve.js +95 -0
- package/lib/esm/function/algebra/simplify/simplifyConstant.js +200 -32
- package/lib/esm/function/algebra/simplify/util.js +170 -34
- package/lib/esm/function/algebra/simplify.js +603 -186
- package/lib/esm/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +75 -31
- package/lib/esm/function/arithmetic/invmod.js +57 -0
- package/lib/esm/header.js +1 -1
- package/lib/esm/plain/number/combinations.js +18 -6
- package/lib/esm/version.js +1 -1
- package/package.json +21 -15
- package/types/index.d.ts +48 -6
- package/lib/cjs/function/algebra/simplify/resolve.js +0 -76
- package/lib/esm/function/algebra/simplify/resolve.js +0 -67
@@ -1,4 +1,5 @@
|
|
1
1
|
import { bignumberDocs } from './construction/bignumber.js';
|
2
|
+
import { printDocs } from './function/utils/print.js';
|
2
3
|
import { typeOfDocs } from './function/utils/typeOf.js';
|
3
4
|
import { isZeroDocs } from './function/utils/isZero.js';
|
4
5
|
import { isPrimeDocs } from './function/utils/isPrime.js';
|
@@ -135,6 +136,7 @@ import { bitOrDocs } from './function/bitwise/bitOr.js';
|
|
135
136
|
import { bitNotDocs } from './function/bitwise/bitNot.js';
|
136
137
|
import { bitAndDocs } from './function/bitwise/bitAnd.js';
|
137
138
|
import { xgcdDocs } from './function/arithmetic/xgcd.js';
|
139
|
+
import { invmodDocs } from './function/arithmetic/invmod.js';
|
138
140
|
import { unaryPlusDocs } from './function/arithmetic/unaryPlus.js';
|
139
141
|
import { unaryMinusDocs } from './function/arithmetic/unaryMinus.js';
|
140
142
|
import { squareDocs } from './function/arithmetic/square.js';
|
@@ -173,8 +175,11 @@ import { qrDocs } from './function/algebra/qr.js';
|
|
173
175
|
import { usolveDocs } from './function/algebra/usolve.js';
|
174
176
|
import { usolveAllDocs } from './function/algebra/usolveAll.js';
|
175
177
|
import { sluDocs } from './function/algebra/slu.js';
|
178
|
+
import { leafCountDocs } from './function/algebra/leafCount.js';
|
176
179
|
import { rationalizeDocs } from './function/algebra/rationalize.js';
|
177
180
|
import { simplifyDocs } from './function/algebra/simplify.js';
|
181
|
+
import { simplifyCoreDocs } from './function/algebra/simplifyCore.js';
|
182
|
+
import { resolveDocs } from './function/algebra/resolve.js';
|
178
183
|
import { lupDocs } from './function/algebra/lup.js';
|
179
184
|
import { lsolveDocs } from './function/algebra/lsolve.js';
|
180
185
|
import { lsolveAllDocs } from './function/algebra/lsolveAll.js';
|
@@ -464,7 +469,10 @@ export var embeddedDocs = {
|
|
464
469
|
lsolveAll: lsolveAllDocs,
|
465
470
|
lup: lupDocs,
|
466
471
|
lusolve: lusolveDocs,
|
472
|
+
leafCount: leafCountDocs,
|
467
473
|
simplify: simplifyDocs,
|
474
|
+
resolve: resolveDocs,
|
475
|
+
simplifyCore: simplifyCoreDocs,
|
468
476
|
rationalize: rationalizeDocs,
|
469
477
|
slu: sluDocs,
|
470
478
|
usolve: usolveDocs,
|
@@ -507,6 +515,7 @@ export var embeddedDocs = {
|
|
507
515
|
unaryMinus: unaryMinusDocs,
|
508
516
|
unaryPlus: unaryPlusDocs,
|
509
517
|
xgcd: xgcdDocs,
|
518
|
+
invmod: invmodDocs,
|
510
519
|
// functions - bitwise
|
511
520
|
bitAnd: bitAndDocs,
|
512
521
|
bitNot: bitNotDocs,
|
@@ -668,7 +677,7 @@ export var embeddedDocs = {
|
|
668
677
|
isPositive: isPositiveDocs,
|
669
678
|
isPrime: isPrimeDocs,
|
670
679
|
isZero: isZeroDocs,
|
671
|
-
|
680
|
+
print: printDocs,
|
672
681
|
typeOf: typeOfDocs,
|
673
682
|
numeric: numericDocs
|
674
683
|
};
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export var leafCountDocs = {
|
2
|
+
name: 'leafCount',
|
3
|
+
category: 'Algebra',
|
4
|
+
syntax: ['leafCount(expr)'],
|
5
|
+
description: 'Computes the number of leaves in the parse tree of the given expression',
|
6
|
+
examples: ['leafCount("e^(i*pi)-1")', 'leafCount(parse("{a: 22/7, b: 10^(1/2)}"))'],
|
7
|
+
seealso: ['simplify']
|
8
|
+
};
|
@@ -0,0 +1,9 @@
|
|
1
|
+
export var resolveDocs = {
|
2
|
+
name: 'resolve',
|
3
|
+
category: 'Algebra',
|
4
|
+
syntax: ['resolve(node, scope)'],
|
5
|
+
description: 'Recursively substitute variables in an expression tree.',
|
6
|
+
examples: ['resolve(parse("1 + x"), { x: 7 })', 'resolve(parse("size(text)"), { text: "Hello World" })', 'resolve(parse("x + y"), { x: parse("3z") })', 'resolve(parse("3x"), { x: parse("y+z"), z: parse("w^y") })'],
|
7
|
+
seealso: ['simplify', 'evaluate'],
|
8
|
+
mayThrow: ['ReferenceError']
|
9
|
+
};
|
@@ -4,5 +4,5 @@ export var simplifyDocs = {
|
|
4
4
|
syntax: ['simplify(expr)', 'simplify(expr, rules)'],
|
5
5
|
description: 'Simplify an expression tree.',
|
6
6
|
examples: ['simplify("3 + 2 / 4")', 'simplify("2x + x")', 'f = parse("x * (x + 2 + x)")', 'simplified = simplify(f)', 'simplified.evaluate({x: 2})'],
|
7
|
-
seealso: ['derivative', 'parse', '
|
7
|
+
seealso: ['simplifyCore', 'derivative', 'evaluate', 'parse', 'rationalize', 'resolve']
|
8
8
|
};
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export var simplifyCoreDocs = {
|
2
|
+
name: 'simplifyCore',
|
3
|
+
category: 'Algebra',
|
4
|
+
syntax: ['simplifyCore(node)'],
|
5
|
+
description: 'Perform simple one-pass simplifications on an expression tree.',
|
6
|
+
examples: ['simplifyCore(parse("0*x"))', 'simplifyCore(parse("(x+0)*2"))'],
|
7
|
+
seealso: ['simplify', 'evaluate']
|
8
|
+
};
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export var invmodDocs = {
|
2
|
+
name: 'invmod',
|
3
|
+
category: 'Arithmetic',
|
4
|
+
syntax: ['invmod(a, b)'],
|
5
|
+
description: 'Calculate the (modular) multiplicative inverse of a modulo b. Solution to the equation ax ≣ 1 (mod b)',
|
6
|
+
examples: ['invmod(8, 12)=NaN', 'invmod(7, 13)=2', 'math.invmod(15151, 15122)=10429'],
|
7
|
+
seealso: ['gcd', 'xgcd']
|
8
|
+
};
|
@@ -3,6 +3,6 @@ export var forEachDocs = {
|
|
3
3
|
category: 'Matrix',
|
4
4
|
syntax: ['forEach(x, callback)'],
|
5
5
|
description: 'Iterates over all elements of a matrix/array, and executes the given callback function.',
|
6
|
-
examples: [
|
6
|
+
examples: [],
|
7
7
|
seealso: ['map', 'sort', 'filter']
|
8
8
|
};
|
package/lib/esm/factoriesAny.js
CHANGED
@@ -53,6 +53,7 @@ export { createSqrt } from './function/arithmetic/sqrt.js';
|
|
53
53
|
export { createSquare } from './function/arithmetic/square.js';
|
54
54
|
export { createSubtract } from './function/arithmetic/subtract.js';
|
55
55
|
export { createXgcd } from './function/arithmetic/xgcd.js';
|
56
|
+
export { createInvmod } from './function/arithmetic/invmod.js';
|
56
57
|
export { createDotMultiply } from './function/arithmetic/dotMultiply.js';
|
57
58
|
export { createBitAnd } from './function/bitwise/bitAnd.js';
|
58
59
|
export { createBitNot } from './function/bitwise/bitNot.js';
|
@@ -240,7 +241,10 @@ export { createStirlingS2 } from './function/combinatorics/stirlingS2.js';
|
|
240
241
|
export { createBellNumbers } from './function/combinatorics/bellNumbers.js';
|
241
242
|
export { createCatalan } from './function/combinatorics/catalan.js';
|
242
243
|
export { createComposition } from './function/combinatorics/composition.js';
|
244
|
+
export { createLeafCount } from './function/algebra/leafCount.js';
|
243
245
|
export { createSimplify } from './function/algebra/simplify.js';
|
246
|
+
export { createSimplifyCore } from './function/algebra/simplifyCore.js';
|
247
|
+
export { createResolve } from './function/algebra/resolve.js';
|
244
248
|
export { createDerivative } from './function/algebra/derivative.js';
|
245
249
|
export { createRationalize } from './function/algebra/rationalize.js';
|
246
250
|
export { createReviver } from './json/reviver.js';
|
@@ -13,7 +13,9 @@ export { createChainClass } from './type/chain/Chain.js';
|
|
13
13
|
export { createHelp } from './expression/function/help.js';
|
14
14
|
export { createChain } from './type/chain/function/chain.js'; // algebra
|
15
15
|
|
16
|
+
export { createResolve } from './function/algebra/resolve.js';
|
16
17
|
export { createSimplify } from './function/algebra/simplify.js';
|
18
|
+
export { createSimplifyCore } from './function/algebra/simplifyCore.js';
|
17
19
|
export { createDerivative } from './function/algebra/derivative.js';
|
18
20
|
export { createRationalize } from './function/algebra/rationalize.js'; // arithmetic
|
19
21
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import { factory } from '../../utils/factory.js';
|
2
|
+
var name = 'leafCount';
|
3
|
+
var dependencies = ['parse', 'typed'];
|
4
|
+
export var createLeafCount = /* #__PURE__ */factory(name, dependencies, _ref => {
|
5
|
+
var {
|
6
|
+
parse,
|
7
|
+
typed
|
8
|
+
} = _ref;
|
9
|
+
|
10
|
+
// This does the real work, but we don't have to recurse through
|
11
|
+
// a typed call if we separate it out
|
12
|
+
function countLeaves(node) {
|
13
|
+
var count = 0;
|
14
|
+
node.forEach(n => {
|
15
|
+
count += countLeaves(n);
|
16
|
+
});
|
17
|
+
return count || 1;
|
18
|
+
}
|
19
|
+
/**
|
20
|
+
* Gives the number of "leaf nodes" in the parse tree of the given expression
|
21
|
+
* A leaf node is one that has no subexpressions, essentially either a
|
22
|
+
* symbol or a constant. Note that `5!` has just one leaf, the '5'; the
|
23
|
+
* unary factorial operator does not add a leaf. On the other hand,
|
24
|
+
* function symbols do add leaves, so `sin(x)/cos(x)` has four leaves.
|
25
|
+
*
|
26
|
+
* The `simplify()` function should generally not increase the `leafCount()`
|
27
|
+
* of an expression, although currently there is no guarantee that it never
|
28
|
+
* does so. In many cases, `simplify()` reduces the leaf count.
|
29
|
+
*
|
30
|
+
* Syntax:
|
31
|
+
*
|
32
|
+
* leafCount(expr)
|
33
|
+
*
|
34
|
+
* Examples:
|
35
|
+
*
|
36
|
+
* math.leafCount('x') // 1
|
37
|
+
* math.leafCount(math.parse('a*d-b*c')) // 4
|
38
|
+
* math.leafCount('[a,b;c,d][0,1]') // 6
|
39
|
+
*
|
40
|
+
* See also:
|
41
|
+
*
|
42
|
+
* simplify
|
43
|
+
*
|
44
|
+
* @param {Node|string} expr The expression to count the leaves of
|
45
|
+
*
|
46
|
+
* @return {number} The number of leaves of `expr`
|
47
|
+
*
|
48
|
+
*/
|
49
|
+
|
50
|
+
|
51
|
+
return typed(name, {
|
52
|
+
string: function string(expr) {
|
53
|
+
return this(parse(expr));
|
54
|
+
},
|
55
|
+
Node: function Node(expr) {
|
56
|
+
return countLeaves(expr);
|
57
|
+
}
|
58
|
+
});
|
59
|
+
});
|
@@ -1,9 +1,8 @@
|
|
1
1
|
import { isInteger } from '../../utils/number.js';
|
2
2
|
import { factory } from '../../utils/factory.js';
|
3
3
|
import { createSimplifyConstant } from './simplify/simplifyConstant.js';
|
4
|
-
import { createSimplifyCore } from './simplify/simplifyCore.js';
|
5
4
|
var name = 'rationalize';
|
6
|
-
var dependencies = ['config', 'typed', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'parse', 'simplify', '?bignumber', '?fraction', 'mathWithTransform', '
|
5
|
+
var dependencies = ['config', 'typed', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'parse', 'simplifyCore', 'simplify', '?bignumber', '?fraction', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode', 'ParenthesisNode'];
|
7
6
|
export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
7
|
var {
|
9
8
|
config,
|
@@ -16,13 +15,19 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
16
15
|
divide,
|
17
16
|
pow,
|
18
17
|
parse,
|
18
|
+
simplifyCore,
|
19
19
|
simplify,
|
20
20
|
fraction,
|
21
21
|
bignumber,
|
22
22
|
mathWithTransform,
|
23
|
+
matrix,
|
24
|
+
AccessorNode,
|
25
|
+
ArrayNode,
|
23
26
|
ConstantNode,
|
24
|
-
OperatorNode,
|
25
27
|
FunctionNode,
|
28
|
+
IndexNode,
|
29
|
+
ObjectNode,
|
30
|
+
OperatorNode,
|
26
31
|
SymbolNode,
|
27
32
|
ParenthesisNode
|
28
33
|
} = _ref;
|
@@ -30,25 +35,17 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
30
35
|
typed,
|
31
36
|
config,
|
32
37
|
mathWithTransform,
|
38
|
+
matrix,
|
33
39
|
fraction,
|
34
40
|
bignumber,
|
41
|
+
AccessorNode,
|
42
|
+
ArrayNode,
|
35
43
|
ConstantNode,
|
36
|
-
OperatorNode,
|
37
44
|
FunctionNode,
|
38
|
-
|
39
|
-
|
40
|
-
var simplifyCore = createSimplifyCore({
|
41
|
-
equal,
|
42
|
-
isZero,
|
43
|
-
add,
|
44
|
-
subtract,
|
45
|
-
multiply,
|
46
|
-
divide,
|
47
|
-
pow,
|
48
|
-
ConstantNode,
|
45
|
+
IndexNode,
|
46
|
+
ObjectNode,
|
49
47
|
OperatorNode,
|
50
|
-
|
51
|
-
ParenthesisNode
|
48
|
+
SymbolNode
|
52
49
|
});
|
53
50
|
/**
|
54
51
|
* Transform a rationalizable expression in a rational fraction.
|
@@ -93,13 +90,13 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
93
90
|
* @param {Object|boolean} optional scope of expression or true for already evaluated rational expression at input
|
94
91
|
* @param {Boolean} detailed optional True if return an object, false if return expression node (default)
|
95
92
|
*
|
96
|
-
* @return {Object | Node} The rational polynomial of `expr` or
|
97
|
-
* {
|
98
|
-
*
|
99
|
-
*
|
100
|
-
*
|
101
|
-
*
|
102
|
-
*
|
93
|
+
* @return {Object | Node} The rational polynomial of `expr` or an object
|
94
|
+
* `{expression, numerator, denominator, variables, coefficients}`, where
|
95
|
+
* `expression` is a `Node` with the node simplified expression,
|
96
|
+
* `numerator` is a `Node` with the simplified numerator of expression,
|
97
|
+
* `denominator` is a `Node` or `boolean` with the simplified denominator or `false` (if there is no denominator),
|
98
|
+
* `variables` is an array with variable names,
|
99
|
+
* and `coefficients` is an array with coefficients of numerator sorted by increased exponent
|
103
100
|
* {Expression Node} node simplified expression
|
104
101
|
*
|
105
102
|
*/
|
@@ -132,6 +129,12 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
132
129
|
var polyRet = polynomial(expr, scope, true, setRules.firstRules); // Check if expression is a rationalizable polynomial
|
133
130
|
|
134
131
|
var nVars = polyRet.variables.length;
|
132
|
+
var noExactFractions = {
|
133
|
+
exactFractions: false
|
134
|
+
};
|
135
|
+
var withExactFractions = {
|
136
|
+
exactFractions: true
|
137
|
+
};
|
135
138
|
expr = polyRet.expression;
|
136
139
|
|
137
140
|
if (nVars >= 1) {
|
@@ -142,18 +145,16 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
142
145
|
|
143
146
|
var rules;
|
144
147
|
var eDistrDiv = true;
|
145
|
-
var redoInic = false;
|
146
|
-
expr = simplify(expr, setRules.firstRules, {}, {
|
147
|
-
exactFractions: false
|
148
|
-
}); // Apply the initial rules, including succ div rules
|
148
|
+
var redoInic = false; // Apply the initial rules, including succ div rules:
|
149
149
|
|
150
|
+
expr = simplify(expr, setRules.firstRules, {}, noExactFractions);
|
150
151
|
var s;
|
151
152
|
|
152
153
|
while (true) {
|
153
|
-
//
|
154
|
+
// Alternate applying successive division rules and distr.div.rules
|
155
|
+
// until there are no more changes:
|
154
156
|
rules = eDistrDiv ? setRules.distrDivRules : setRules.sucDivRules;
|
155
|
-
expr = simplify(expr, rules);
|
156
|
-
|
157
|
+
expr = simplify(expr, rules, {}, withExactFractions);
|
157
158
|
eDistrDiv = !eDistrDiv; // Swap between Distr.Div and Succ. Div. Rules
|
158
159
|
|
159
160
|
s = expr.toString();
|
@@ -168,14 +169,11 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
168
169
|
|
169
170
|
if (redoInic) {
|
170
171
|
// Apply first rules again without succ div rules (if there are changes)
|
171
|
-
expr = simplify(expr, setRules.firstRulesAgain, {},
|
172
|
-
|
173
|
-
|
174
|
-
}
|
172
|
+
expr = simplify(expr, setRules.firstRulesAgain, {}, noExactFractions);
|
173
|
+
} // Apply final rules:
|
174
|
+
|
175
175
|
|
176
|
-
expr = simplify(expr, setRules.finalRules, {},
|
177
|
-
exactFractions: false
|
178
|
-
}); // Apply final rules
|
176
|
+
expr = simplify(expr, setRules.finalRules, {}, noExactFractions);
|
179
177
|
} // NVars >= 1
|
180
178
|
|
181
179
|
|
@@ -0,0 +1,95 @@
|
|
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', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
|
6
|
+
export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
7
|
+
var {
|
8
|
+
parse,
|
9
|
+
ConstantNode,
|
10
|
+
FunctionNode,
|
11
|
+
OperatorNode,
|
12
|
+
ParenthesisNode
|
13
|
+
} = _ref;
|
14
|
+
|
15
|
+
/**
|
16
|
+
* resolve(expr, scope) replaces variable nodes with their scoped values
|
17
|
+
*
|
18
|
+
* Syntax:
|
19
|
+
*
|
20
|
+
* resolve(expr, scope)
|
21
|
+
*
|
22
|
+
* Examples:
|
23
|
+
*
|
24
|
+
* math.resolve('x + y', {x:1, y:2}) // Node {1 + 2}
|
25
|
+
* math.resolve(math.parse('x+y'), {x:1, y:2}) // Node {1 + 2}
|
26
|
+
* math.simplify('x+y', {x:2, y:'x+x'}).toString() // "6"
|
27
|
+
*
|
28
|
+
* See also:
|
29
|
+
*
|
30
|
+
* simplify, evaluate
|
31
|
+
*
|
32
|
+
* @param {Node} node
|
33
|
+
* The expression tree to be simplified
|
34
|
+
* @param {Object} scope
|
35
|
+
* Scope specifying variables to be resolved
|
36
|
+
* @return {Node} Returns `node` with variables recursively substituted.
|
37
|
+
* @throws {ReferenceError}
|
38
|
+
* If there is a cyclic dependency among the variables in `scope`,
|
39
|
+
* resolution is impossible and a ReferenceError is thrown.
|
40
|
+
*/
|
41
|
+
function resolve(node, scope) {
|
42
|
+
var within = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Set();
|
43
|
+
|
44
|
+
// note `within`:
|
45
|
+
// `within` is not documented, since it is for internal cycle
|
46
|
+
// detection only
|
47
|
+
if (!scope) {
|
48
|
+
return node;
|
49
|
+
}
|
50
|
+
|
51
|
+
if (!isMap(scope)) {
|
52
|
+
scope = createMap(scope);
|
53
|
+
}
|
54
|
+
|
55
|
+
if (isSymbolNode(node)) {
|
56
|
+
if (within.has(node.name)) {
|
57
|
+
var variables = Array.from(within).join(', ');
|
58
|
+
throw new ReferenceError("recursive loop of variable definitions among {".concat(variables, "}"));
|
59
|
+
}
|
60
|
+
|
61
|
+
var value = scope.get(node.name);
|
62
|
+
|
63
|
+
if (isNode(value)) {
|
64
|
+
var nextWithin = new Set(within);
|
65
|
+
nextWithin.add(node.name);
|
66
|
+
return resolve(value, scope, nextWithin);
|
67
|
+
} else if (typeof value === 'number') {
|
68
|
+
return parse(String(value));
|
69
|
+
} else if (value !== undefined) {
|
70
|
+
return new ConstantNode(value);
|
71
|
+
} else {
|
72
|
+
return node;
|
73
|
+
}
|
74
|
+
} else if (isOperatorNode(node)) {
|
75
|
+
var args = node.args.map(function (arg) {
|
76
|
+
return resolve(arg, scope, within);
|
77
|
+
});
|
78
|
+
return new OperatorNode(node.op, node.fn, args, node.implicit);
|
79
|
+
} else if (isParenthesisNode(node)) {
|
80
|
+
return new ParenthesisNode(resolve(node.content, scope, within));
|
81
|
+
} else if (isFunctionNode(node)) {
|
82
|
+
var _args = node.args.map(function (arg) {
|
83
|
+
return resolve(arg, scope, within);
|
84
|
+
});
|
85
|
+
|
86
|
+
return new FunctionNode(node.name, _args);
|
87
|
+
} // Otherwise just recursively resolve any children (might also work
|
88
|
+
// for some of the above special cases)
|
89
|
+
|
90
|
+
|
91
|
+
return node.map(child => resolve(child, scope, within));
|
92
|
+
}
|
93
|
+
|
94
|
+
return resolve;
|
95
|
+
});
|