import '../../globals.js';
export default class Complex {
    real: number;
    imaginary: number;
    /**
     * Creates a complex number, that has both a real and imaginary part.
     *
     * @param real - The real part. For a complex number $a+bi$, this should be $a$.
     * @param imaginary - The imaginary part. For a complex number $a+bi$, this should be $b$.
     */
    constructor(real: number, imaginary: number);
    /**
     * Creates a copy of this complex, or if a complex is passed in, set that complex's values to ours.
     *
     * This is the immutable form of the function set(), if a complex is provided. This will return a new complex, and
     * will not modify this complex.
     *
     * @param [complex] - If not provided, creates a new Complex with filled in values. Otherwise, fills
     *                              in the values of the provided complex so that it equals this complex.
     */
    copy(complex?: Complex): Complex;
    /**
     * The phase / argument of the complex number.
     */
    phase(): number;
    /**
     * The magnitude (Euclidean/L2 Norm) of this complex number, i.e. $\sqrt{a^2+b^2}$.
     */
    getMagnitude(): number;
    get magnitude(): number;
    /**
     * The squared magnitude (square of the Euclidean/L2 Norm) of this complex, i.e. $a^2+b^2$.
     */
    getMagnitudeSquared(): number;
    get magnitudeSquared(): number;
    /**
     * Returns the argument of this complex number (immutable)
     */
    getArgument(): number;
    get argument(): number;
    /**
     * Exact equality comparison between this Complex and another Complex.
     *
     * @returns Whether the two complex numbers have equal components
     */
    equals(other: Complex): boolean;
    /**
     * Approximate equality comparison between this Complex and another Complex.
     *
     * @returns - Whether difference between the two complex numbers has no component with an absolute value
     *            greater than epsilon.
     */
    equalsEpsilon(other: Complex, epsilon?: number): boolean;
    /**
     * Addition of this Complex and another Complex, returning a copy.
     *
     * This is the immutable form of the function add(). This will return a new Complex, and will not modify
     * this Complex.
     */
    plus(c: Complex): Complex;
    /**
     * Subtraction of this Complex by another Complex c, returning a copy.
     *
     * This is the immutable form of the function subtract(). This will return a new Complex, and will not modify
     * this Complex.
     */
    minus(c: Complex): Complex;
    /**
     * Complex multiplication.
     * Immutable version of multiply
     */
    times(c: Complex): Complex;
    /**
     * Complex division.
     * Immutable version of divide
     */
    dividedBy(c: Complex): Complex;
    /**
     * Complex negation
     * Immutable version of negate
     */
    negated(): Complex;
    /**
     * Square root.
     * Immutable form of sqrt.
     *
     */
    sqrtOf(): Complex;
    /**
     * Returns the power of this complex number by a real number.
     */
    powerByReal(realPower: number): Complex;
    /**
     * Sine.
     * Immutable form of sin.
     *
     */
    sinOf(): Complex;
    /**
     * Cosine.
     * Immutable form of cos.
     *
     */
    cosOf(): Complex;
    /**
     * Returns the square of this complex number and does not modify it.
     * This is the immutable version of square.
     *
     */
    squared(): Complex;
    /**
     * Complex conjugate.
     * Immutable form of conjugate
     *
     */
    conjugated(): Complex;
    /**
     * Takes e to the power of this complex number. $e^{a+bi}=e^a\cos b + i\sin b$.
     * This is the immutable form of exponentiate.
     *
     */
    exponentiated(): Complex;
    /*** Mutable functions ***/
    /**
     * Sets all components of this complex, returning this
     *
     */
    setRealImaginary(real: number, imaginary: number): Complex;
    /**
     * Sets the real component of this complex, returning this
     */
    setReal(real: number): Complex;
    /**
     * Sets the imaginary component of this complex, returning this
     */
    setImaginary(imaginary: number): Complex;
    /**
     * Sets the components of this complex to be a copy of the parameter
     *
     * This is the mutable form of the function copy(). This will mutate (change) this complex, in addition to returning
     * this complex itself.
     */
    set(c: Complex): Complex;
    /**
     * Sets this Complex's value to be the a,b values matching the given magnitude and phase (in radians), changing
     * this Complex, and returning itself.
     *
     * @param magnitude
     * @param phase - In radians
     */
    setPolar(magnitude: number, phase: number): Complex;
    /**
     * Addition of this Complex and another Complex, returning a copy.
     *
     * This is the mutable form of the function plus(). This will modify and return this.
     */
    add(c: Complex): Complex;
    /**
     * Subtraction of another Complex from this Complex, returning a copy.
     *
     * This is the mutable form of the function minus(). This will modify and return this.
     */
    subtract(c: Complex): Complex;
    /**
     * Mutable Complex multiplication.
     */
    multiply(c: Complex): Complex;
    /**
     * Mutable Complex division. The immutable form is dividedBy.
     */
    divide(c: Complex): Complex;
    /**
     * Mutable Complex negation
     *
     */
    negate(): Complex;
    /**
     * Sets this Complex to e to the power of this complex number. $e^{a+bi}=e^a\cos b + i\sin b$.
     * This is the mutable version of exponentiated
     *
     */
    exponentiate(): Complex;
    /**
     * Squares this complex number.
     * This is the mutable version of squared.
     *
     */
    square(): Complex;
    /**
     * Square root.
     * Mutable form of sqrtOf.
     *
     */
    sqrt(): Complex;
    /**
     * Sine.
     * Mutable form of sinOf.
     *
     */
    sin(): Complex;
    /**
     * Cosine.
     * Mutable form of cosOf.
     *
     */
    cos(): Complex;
    /**
     * Complex conjugate.
     * Mutable form of conjugated
     *
     */
    conjugate(): Complex;
    /**
     * Returns the cube roots of this complex number.
     */
    getCubeRoots(): Complex[];
    /**
     * Debugging string for the complex number (provides real and imaginary parts).
     */
    toString(): string;
    /**
     * Constructs a complex number from just the real part (assuming the imaginary part is 0).
     */
    static real(real: number): Complex;
    /**
     * Constructs a complex number from just the imaginary part (assuming the real part is 0).
     */
    static imaginary(imaginary: number): Complex;
    /**
     * Constructs a complex number from the polar form. For a magnitude $r$ and phase $\varphi$, this will be
     * $\cos\varphi+i r\sin\varphi$.
     */
    static createPolar(magnitude: number, phase: number): Complex;
    /**
     * Returns an array of the roots of the quadratic equation $ax + b=0$, or null if every value is a solution.
     *
     * @returns The roots of the equation, or null if all values are roots.
     */
    static solveLinearRoots(a: Complex, b: Complex): Complex[] | null;
    /**
     * Returns an array of the roots of the quadratic equation $ax^2 + bx + c=0$, or null if every value is a
     * solution.
     *
     * @returns The roots of the equation, or null if all values are roots (if multiplicity>1, returns multiple copies)
     */
    static solveQuadraticRoots(a: Complex, b: Complex, c: Complex): Complex[] | null;
    /**
     * Returns an array of the roots of the cubic equation $ax^3 + bx^2 + cx + d=0$, or null if every value is a
     * solution.
     *
     * @returns The roots of the equation, or null if all values are roots (if multiplicity>1, returns multiple copies)
     */
    static solveCubicRoots(a: Complex, b: Complex, c: Complex, d: Complex): Complex[] | null;
    /**
     * Immutable constant $0$.
     * @constant
     */
    static readonly ZERO: Complex;
    /**
     * Immutable constant $1$.
     * @constant
     */
    static readonly ONE: Complex;
    /**
     * Immutable constant $i$, the imaginary unit.
     * @constant
     */
    static readonly I: Complex;
}
//# sourceMappingURL=Complex.d.ts.map