# Function reference #

## Core functions #

Function Description
math.config(config: Object): Object Set configuration options for math.
math.import(object, override) Import functions from an object or a module.
math.typed(name, signatures) : function Create a typed-function which checks the types of the arguments and can match them against multiple provided signatures.

## Construction functions #

Function Description
math.bignumber(x) Create a BigNumber, which can store numbers with arbitrary precision.
math.boolean(x) Create a boolean or convert a string or number to a boolean.
math.chain(value) Wrap any value in a chain, allowing to perform chained operations on the value.
math.complex(re, im) Create a complex value or convert a value to a complex value.
math.createUnit(units) Create a user-defined unit and register it with the Unit type.
math.fraction(numerator, denominator) Create a fraction convert a value to a fraction.
math.index(range1, range2, …) Create an index.
math.matrix(x) Create a Matrix.
math.number(value) Create a number or convert a string, boolean, or unit to a number.
math.sparse(x) Create a Sparse Matrix.
math.splitUnit(unit, parts) Split a unit in an array of units whose sum is equal to the original unit.
math.string(value) Create a string or convert any object into a string.
math.unit(x) Create a unit.

## Expression functions #

Function Description
math.compile(expr) Parse and compile an expression.
math.evaluate(expr [, scope]) Evaluate an expression.
math.help(search) Retrieve help on a function or data type.
math.parse(expr [, scope]) Parse an expression.
math.parser() Create a parser.

## Algebra functions #

Function Description
derivative(expr, variable) Takes the derivative of an expression expressed in parser Nodes.
math.lsolve(L, b) Solves the linear equation system by forwards substitution.
math.lup(A) Calculate the Matrix LU decomposition with partial pivoting.
math.lusolve(A, b) Solves the linear system `A * x = b` where `A` is an [n x n] matrix and `b` is a [n] column vector.
math.qr(A) Calculate the Matrix QR decomposition.
rationalize(expr) Transform a rationalizable expression in a rational fraction.
simplify(expr) Simplify an expression tree.
math.slu(A, order, threshold) Calculate the Sparse Matrix LU decomposition with full pivoting.
math.usolve(U, b) Solves the linear equation system by backward substitution.

## Arithmetic functions #

Function Description
math.abs(x) Calculate the absolute value of a number.
math.add(x, y) Add two or more values, `x + y`.
math.cbrt(x [, allRoots]) Calculate the cubic root of a value.
math.ceil(x) Round a value towards plus infinity If `x` is complex, both real and imaginary part are rounded towards plus infinity.
math.cube(x) Compute the cube of a value, `x * x * x`.
math.divide(x, y) Divide two values, `x / y`.
math.dotDivide(x, y) Divide two matrices element wise.
math.dotMultiply(x, y) Multiply two matrices element wise.
math.dotPow(x, y) Calculates the power of x to y element wise.
math.exp(x) Calculate the exponent of a value.
math.expm1(x) Calculate the value of subtracting 1 from the exponential value.
math.fix(x) Round a value towards zero.
math.floor(x) Round a value towards minus infinity.
math.gcd(a, b) Calculate the greatest common divisor for two or more values or arrays.
math.hypot(a, b, …) Calculate the hypotenusa of a list with values.
math.lcm(a, b) Calculate the least common multiple for two or more values or arrays.
math.log(x [, base]) Calculate the logarithm of a value.
math.log10(x) Calculate the 10-base logarithm of a value.
math.log1p(x) Calculate the logarithm of a `value+1`.
math.log2(x) Calculate the 2-base of a value.
math.mod(x, y) Calculates the modulus, the remainder of an integer division.
math.multiply(x, y) Multiply two or more values, `x * y`.
math.norm(x [, p]) Calculate the norm of a number, vector or matrix.
math.nthRoot(a) Calculate the nth root of a value.
math.nthRoots(x) Calculate the nth roots of a value.
math.pow(x, y) Calculates the power of x to y, `x ^ y`.
math.round(x [, n]) Round a value towards the nearest integer.
math.sign(x) Compute the sign of a value.
math.sqrt(x) Calculate the square root of a value.
math.square(x) Compute the square of a value, `x * x`.
math.subtract(x, y) Subtract two values, `x - y`.
math.unaryMinus(x) Inverse the sign of a value, apply a unary minus operation.
math.unaryPlus(x) Unary plus operation.
math.xgcd(a, b) Calculate the extended greatest common divisor for two values.

## Bitwise functions #

Function Description
math.bitAnd(x, y) Bitwise AND two values, `x & y`.
math.bitNot(x) Bitwise NOT value, `~x`.
math.bitOr(x, y) Bitwise OR two values, `x | y`.
math.bitXor(x, y) Bitwise XOR two values, `x ^ y`.
math.leftShift(x, y) Bitwise left logical shift of a value x by y number of bits, `x << y`.
math.rightArithShift(x, y) Bitwise right arithmetic shift of a value x by y number of bits, `x >> y`.
math.rightLogShift(x, y) Bitwise right logical shift of value x by y number of bits, `x >>> y`.

## Combinatorics functions #

Function Description
math.bellNumbers(n) The Bell Numbers count the number of partitions of a set.
math.catalan(n) The Catalan Numbers enumerate combinatorial structures of many different types.
math.composition(n, k) The composition counts of n into k parts.
math.stirlingS2(n, k) The Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets.

## Complex functions #

Function Description
math.arg(x) Compute the argument of a complex value.
math.conj(x) Compute the complex conjugate of a complex value.
math.im(x) Get the imaginary part of a complex number.
math.re(x) Get the real part of a complex number.

## Geometry functions #

Function Description
math.distance([x1, y1], [x2, y2]) Calculates: The eucledian distance between two points in 2 and 3 dimensional spaces.
math.intersect(endPoint1Line1, endPoint2Line1, endPoint1Line2, endPoint2Line2) Calculates the point of intersection of two lines in two or three dimensions and of a line and a plane in three dimensions.

## Logical functions #

Function Description
math.and(x, y) Logical `and`.
math.not(x) Logical `not`.
math.or(x, y) Logical `or`.
math.xor(x, y) Logical `xor`.

## Matrix functions #

Function Description
math.apply(A, dim, callback) Apply a function that maps an array to a scalar along a given axis of a matrix or array.
math.column(value, index) Return a column from a Matrix.
math.concat(a, b, c, … [, dim]) Concatenate two or more matrices.
math.cross(x, y) Calculate the cross product for two vectors in three dimensional space.
math.ctranspose(x) Transpose and complex conjugate a matrix.
math.det(x) Calculate the determinant of a matrix.
math.diag(X) Create a diagonal matrix or retrieve the diagonal of a matrix When `x` is a vector, a matrix with vector `x` on the diagonal will be returned.
math.dot(x, y) Calculate the dot product of two vectors.
math.expm(x) Compute the matrix exponential, expm(A) = e^A.
math.filter(x, test) Filter the items in an array or one dimensional matrix.
math.flatten(x) Flatten a multi dimensional matrix into a single dimensional matrix.
math.forEach(x, callback) Iterate over all elements of a matrix/array, and executes the given callback function.
math.getMatrixDataType(x) Find the data type of all elements in a matrix or array, for example ‘number’ if all items are a number and ‘Complex’ if all values are complex numbers.
math.identity(n) Create a 2-dimensional identity matrix with size m x n or n x n.
math.inv(x) Calculate the inverse of a square matrix.
math.kron(x, y) Calculates the kronecker product of 2 matrices or vectors.
math.map(x, callback) Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.
math.ones(m, n, p, …) Create a matrix filled with ones.
math.partitionSelect(x, k) Partition-based selection of an array or 1D matrix.
math.range(start, end [, step]) Create an array from a range.
math.reshape(x, sizes) Reshape a multi dimensional array to fit the specified dimensions.
math.resize(x, size [, defaultValue]) Resize a matrix.
math.row(value, index) Return a row from a Matrix.
math.size(x) Calculate the size of a matrix or scalar.
math.sort(x) Sort the items in a matrix.
X = math.sqrtm(A) Calculate the principal square root of a square matrix.
math.squeeze(x) Squeeze a matrix, remove inner and outer singleton dimensions from a matrix.
math.subset(x, index [, replacement]) Get or set a subset of a matrix or string.
math.trace(x) Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.
math.transpose(x) Transpose a matrix.
math.zeros(m, n, p, …) Create a matrix filled with zeros.

## Probability functions #

Function Description
math.combinations(n, k) Compute the number of ways of picking `k` unordered outcomes from `n` possibilities.
math.combinationsWithRep(n, k) Compute the number of ways of picking `k` unordered outcomes from `n` possibilities, allowing individual outcomes to be repeated more than once.
math.factorial(n) Compute the factorial of a value Factorial only supports an integer value as argument.
math.gamma(n) Compute the gamma function of a value using Lanczos approximation for small values, and an extended Stirling approximation for large values.
math.kldivergence(x, y) Calculate the Kullback-Leibler (KL) divergence between two distributions.
math.multinomial(a) Multinomial Coefficients compute the number of ways of picking a1, a2, .
math.permutations(n [, k]) Compute the number of ways of obtaining an ordered subset of `k` elements from a set of `n` elements.
math.pickRandom(array) Random pick one or more values from a one dimensional array.
math.random([min, max]) Return a random number larger or equal to `min` and smaller than `max` using a uniform distribution.
math.randomInt([min, max]) Return a random integer number larger or equal to `min` and smaller than `max` using a uniform distribution.

## Relational functions #

Function Description
math.compare(x, y) Compare two values.
math.compareNatural(x, y) Compare two values of any type in a deterministic, natural way.
math.compareText(x, y) Compare two strings lexically.
math.deepEqual(x, y) Test element wise whether two matrices are equal.
math.equal(x, y) Test whether two values are equal.
math.equalText(x, y) Check equality of two strings.
math.larger(x, y) Test whether value x is larger than y.
math.largerEq(x, y) Test whether value x is larger or equal to y.
math.smaller(x, y) Test whether value x is smaller than y.
math.smallerEq(x, y) Test whether value x is smaller or equal to y.
math.unequal(x, y) Test whether two values are unequal.

## Set functions #

Function Description
math.setCartesian(set1, set2) Create the cartesian product of two (multi)sets.
math.setDifference(set1, set2) Create the difference of two (multi)sets: every element of set1, that is not the element of set2.
math.setDistinct(set) Collect the distinct elements of a multiset.
math.setIntersect(set1, set2) Create the intersection of two (multi)sets.
math.setIsSubset(set1, set2) Check whether a (multi)set is a subset of another (multi)set.
math.setMultiplicity(element, set) Count the multiplicity of an element in a multiset.
math.setPowerset(set) Create the powerset of a (multi)set.
math.setSize(set) Count the number of elements of a (multi)set.
math.setSymDifference(set1, set2) Create the symmetric difference of two (multi)sets.
math.setUnion(set1, set2) Create the union of two (multi)sets.

## Special functions #

Function Description
math.erf(x) Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x.

## Statistics functions #

Function Description
math.mad(a, b, c, …) Compute the median absolute deviation of a matrix or a list with values.
math.max(a, b, c, …) Compute the maximum value of a matrix or a list with values.
math.mean(a, b, c, …) Compute the mean value of matrix or a list with values.
math.median(a, b, c, …) Compute the median of a matrix or a list with values.
math.min(a, b, c, …) Compute the minimum value of a matrix or a list of values.
math.mode(a, b, c, …) Computes the mode of a set of numbers or a list with values(numbers or characters).
math.prod(a, b, c, …) Compute the product of a matrix or a list with values.
math.quantileSeq(A, prob[, sorted]) Compute the prob order quantile of a matrix or a list with values.
math.std(a, b, c, …) Compute the standard deviation of a matrix or a list with values.
math.sum(a, b, c, …) Compute the sum of a matrix or a list with values.
math.variance(a, b, c, …) Compute the variance of a matrix or a list with values.

## String functions #

Function Description
math.format(value [, precision]) Format a value of any type into a string.
math.print(template, values [, precision]) Interpolate values into a string template.

## Trigonometry functions #

Function Description
math.acos(x) Calculate the inverse cosine of a value.
math.acosh(x) Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.
math.acot(x) Calculate the inverse cotangent of a value, defined as `acot(x) = atan(1/x)`.
math.acoth(x) Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = atanh(1/x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.
math.acsc(x) Calculate the inverse cosecant of a value, defined as `acsc(x) = asin(1/x)`.
math.acsch(x) Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = asinh(1/x) = ln(1/x + sqrt(1/x^2 + 1))`.
math.asec(x) Calculate the inverse secant of a value.
math.asech(x) Calculate the hyperbolic arcsecant of a value, defined as `asech(x) = acosh(1/x) = ln(sqrt(1/x^2 - 1) + 1/x)`.
math.asin(x) Calculate the inverse sine of a value.
math.asinh(x) Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.
math.atan(x) Calculate the inverse tangent of a value.
math.atan2(y, x) Calculate the inverse tangent function with two arguments, y/x.
math.atanh(x) Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.
math.cos(x) Calculate the cosine of a value.
math.cosh(x) Calculate the hyperbolic cosine of a value, defined as `cosh(x) = 1/2 * (exp(x) + exp(-x))`.
math.cot(x) Calculate the cotangent of a value.
math.coth(x) Calculate the hyperbolic cotangent of a value, defined as `coth(x) = 1 / tanh(x)`.
math.csc(x) Calculate the cosecant of a value, defined as `csc(x) = 1/sin(x)`.
math.csch(x) Calculate the hyperbolic cosecant of a value, defined as `csch(x) = 1 / sinh(x)`.
math.sec(x) Calculate the secant of a value, defined as `sec(x) = 1/cos(x)`.
math.sech(x) Calculate the hyperbolic secant of a value, defined as `sech(x) = 1 / cosh(x)`.
math.sin(x) Calculate the sine of a value.
math.sinh(x) Calculate the hyperbolic sine of a value, defined as `sinh(x) = 1/2 * (exp(x) - exp(-x))`.
math.tan(x) Calculate the tangent of a value.
math.tanh(x) Calculate the hyperbolic tangent of a value, defined as `tanh(x) = (exp(2 * x) - 1) / (exp(2 * x) + 1)`.

## Unit functions #

Function Description
math.to(x, unit) Change the unit of a value.

## Utils functions #

Function Description
math.clone(x) Clone an object.
math.hasNumericValue(x) Test whether a value is an numeric value.
math.isInteger(x) Test whether a value is an integer number.
math.isNaN(x) Test whether a value is NaN (not a number).
math.isNegative(x) Test whether a value is negative: smaller than zero.
math.isNumeric(x) Test whether a value is an numeric value.
math.isPositive(x) Test whether a value is positive: larger than zero.
math.isPrime(x) Test whether a value is prime: has no divisors other than itself and one.
math.isZero(x) Test whether a value is zero.
math.numeric(x) Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.
math.typeOf(x) Determine the type of a variable.