/**
 * @hidden
 * @packageDocumentation
 */
import { SympyToken } from "./sympy-parser";
import { SemanticErrorDescription, MathNode, MathNodeVisitor, MathVariable } from "semantic-math-editor";
import { PreparedSympyCall, EquivResponse, PlotInterval, Plot2dParams, SympyError, Plot3dParams, HttpClient } from "./model";
/**
 * A client for [MathProcessor](https://github.com/softaria/math-processor) - simple REST service around [sympy](https://sympy.org)
 * @category API
 */
export declare class SympyClient {
    /**
     * @hidden
     */
    private readonly client;
    /**
     *
     * @param serverAddress - http(s) address of the [MathProcessor](https://github.com/softaria/math-processor) to call
     * @param http -  No need to pass it when use from browser.
     * if use not from broswer you need to implement HttpClient interface
     * For example, consider using AxiousBasedHttpClient from /test/sympy-rest-client.ts
     */
    constructor(serverAddress: string, http?: HttpClient);
    /**
     * Converts MathTree from the [SemanticMatEditor](https://github.com/softaria/semantic-math-editor) to {@link PreparedSympyCall}
     * Alternatively returns SemanticMathEditor's {SemanticErrorDescription} (if converting is not possible)
     * The SemanticErrorDescription object can be used to decorate problematic node in the SemanticMathEditor
     * @param node
     */
    prepareCompute(node: MathNode): PreparedSympyCall | SemanticErrorDescription;
    /**
     * The returned expression is equivavlent to entered one (but not equal in genearl case)
     * The goal of this method is to ensure sympy understands the expression
     * It is designed for use with tests. Note: **MathNode** class belongs to the [SemanticMatEditor](https://github.com/softaria/semantic-math-editor)
     * @returns the expression passed as an argument as sympy has understood it
     * @param sympyExpression - the result of one of {@link prepareCompute} methods
     * @param log - if true, writes debug info to the console
     * @throws {@link SympyError}
     * @throws {@link UnsupportedSympyConstruction}
     */
    mirror(sympyExpression: PreparedSympyCall, log?: boolean): Promise<MathNode>;
    /**
     * Checks if two passed expressions are equivalent
     * Look at {@link Equiv} and {@link Simpler} for details.
     * @param exp1  - the result of {@link prepareCompute}
     * @param exp2  - the result of {@link prepareCompute}
     * @returns an information if the expressions are eqivalent and which one is simpler
     * @throws {@link SympyError}
     * @throws {@link UnsupportedSympyConstruction}
     */
    checkEquivalence(exp1: PreparedSympyCall, exp2: PreparedSympyCall): Promise<EquivResponse>;
    /**
     * @returns the result of sympy [.doit()](https://docs.sympy.org/latest/modules/core.html#sympy.core.basic.Basic.doit) method on the provided expression.
     * @param sympyExpression - the result of one of {@link prepareCompute}
     * @throws {@link SympyError}
     * @throws {@link UnsupportedSympyConstruction}
     */
    compute(sympyExpression: PreparedSympyCall): Promise<MathNode>;
    /**
    * @returns the result of sympy [simplify](https://docs.sympy.org/latest/modules/core.html#module-sympy.core.sympify) function on the provided expression.
    * @param sympyExpression - the result of one of {@link prepareCompute}
    * @param log - if true, writes debug info to the console
    * @throws {@link SympyError}
    * @throws {@link UnsupportedSympyConstruction}
    */
    simplify(sympyExpression: PreparedSympyCall, log?: boolean): Promise<MathNode>;
    /**
     * Get the LaTex representation of Sympy expression.
     * Note: The latex is generated by Sympy and in most cases this latex can't be pasted to the SemanticMathEditor.
     * It only can be shown using KaTex or some other Latex renderer.
     * @returns the LaTex representation of the given parameter.
     * @param sympyExpression - the result of one of {@link prepareCompute}
     * @throws {@link SympyError}
     * @throws {@link UnsupportedSympyConstruction}
     */
    latex(sympyExpression: PreparedSympyCall): Promise<string>;
    /**
     * Generates source for image with 2d plot.
     * @param sympyExpressions - One or more expressions to plot. Each is the result of one of {@link prepareCompute}
     * @param svg - if the result must be in SVG (if not, PNG is used)
     * @param interval - optional interval where we need the plot
     * @param params - additional plot parameters
     * @returns URL to be added to image tag.
     */
    plot2dSrc(sympyExpressions: PreparedSympyCall[], svg: boolean, interval?: PlotInterval, params?: Plot2dParams): string;
    /**
     * Generates source for image with 2d parametric plot.
     * @param expressionPairs - one or more pair of expressions to generate the parametric plot.
     * @param svg - if the result must be in SVG (if not, PNG is used)
     * @param interval - optional interval where we need the plot
     * @param params - additional plot parameters
     * @returns URL to be added to image tag.
     */
    plot2dParametricSrc(expressionPairs: {
        x: PreparedSympyCall;
        y: PreparedSympyCall;
    }[], svg: boolean, interval?: PlotInterval, params?: Plot2dParams): string;
    /**
     * Generates source for image with 3d plot.
     * @param sympyExpressions - one or more expressions to plot
     * @param svg - if the result must be in SVG (if not, PNG is used)
     * @param intervals - optional intervals for both dimensions of the 3d plot
     * @param params - additional plot parameters
     * @returns URL to be added to image tag.
     */
    plot3dSrc(sympyExpressions: PreparedSympyCall[], svg: boolean, intervals?: {
        i1: PlotInterval;
        i2: PlotInterval;
    }, params?: Plot3dParams): string;
    /**
     * Creates interval objects for plot generation methods
     * @param v - a variable. Please look at [SemanticMathEditor](https://github.com/softaria/semantic-math-editor) for MathVariable meaning.
     * @param start - a min value
     * @param end  - a max value
     * @returns {@link PlotInterval} object, suitable for passing to plotting methods.
     */
    preparePlotInterval(v: MathVariable, start?: number, end?: number): PlotInterval;
    /**
     * Generates source for image with 3d parametric plot.
     * @param expressions - one or more triplet of the expressions. Each with its own iterval.
     * @param svg - if the result must be in SVG (if not, PNG is used)
     * @param params - additional plot parameters
     * @returns URL to be added to image tag.
     */
    plot3dParametricLineSrc(expressions: {
        x: PreparedSympyCall;
        y: PreparedSympyCall;
        z: PreparedSympyCall;
        interval: PlotInterval;
    }[], svg: boolean, params?: Plot3dParams): string;
    /**
     * Generates source for image with 3d parametric plot.
     * @param expressions - one or more triplet of the expressions. Each with its own pair of the itervals.
     * @param svg - if the result must be in SVG (if not, PNG is used)
     * @param params - additional plot parameters
     * @returns URL to be added to image tag.
     */
    plot3dParametricSurfaceSrc(expressions: {
        x: PreparedSympyCall;
        y: PreparedSympyCall;
        z: PreparedSympyCall;
        r_u: PlotInterval;
        r_v: PlotInterval;
    }[], svg: boolean, params?: Plot3dParams): string;
    /**
     * Generates an image with 2d plot.
     * @param sympyExpressions - One or more expressions to plot. Each is the result of one of {@link prepareCompute}
     * @param svg - if the result must be in SVG (if not, PNG is used)
     * @param onError - callback to call in case of error
     * @param interval - optional interval where we need the plot
     * @param params - additional plot parameters
     * @returns image element.
     */
    plot2d(sympyExpressions: PreparedSympyCall[], svg: boolean, onError?: (err: SympyError) => void, interval?: PlotInterval, params?: Plot2dParams): HTMLImageElement;
    /**
    * Generates source for image with 3d plot.
    * @param sympyExpressions - one or more expressions to plot
    * @param svg - if the result must be in SVG (if not, PNG is used)
    * @param onError - callback to call in case of error
    * @param intervals - optional intervals for both dimensions of the 3d plot
    * @param params - additional plot parameters
    * @returns image element.
    */
    plot3d(sympyExpressions: PreparedSympyCall[], svg: boolean, onError?: (err: SympyError) => void, intervals?: {
        i1: PlotInterval;
        i2: PlotInterval;
    }, params?: Plot3dParams): HTMLImageElement;
    /**
    * Generates image with 2d parametric plot.
    * @param expressionPairs - one or more pair of expressions to generate the parametric plot.
    * @param svg - if the result must be in SVG (if not, PNG is used)
    * @param onError - callback to call in case of error
    * @param interval - optional interval where we need the plot
    * @param params - additional plot parameters
    * @returns image element
    */
    plot2d_parametric(expressionPairs: {
        x: PreparedSympyCall;
        y: PreparedSympyCall;
    }[], svg: boolean, onError?: (err: SympyError) => void, interval?: PlotInterval, params?: Plot2dParams): HTMLImageElement;
    /**
    * Generates image with 3d parametric plot.
    * @param expressions - one or more triplet of the expressions. Each with its own iterval.
    * @param svg - if the result must be in SVG (if not, PNG is used)
    * @param params - additional plot parameters
    * @param onError - callback to call in case of error
    * @returns image element.
    */
    plot3d_parametric_line(expressions: {
        x: PreparedSympyCall;
        y: PreparedSympyCall;
        z: PreparedSympyCall;
        interval: PlotInterval;
    }[], svg: boolean, onError?: (err: SympyError) => void, params?: Plot3dParams): HTMLImageElement;
    /**
     * Generates image with 3d parametric plot.
     * @param expressions - one or more triplet of the expressions. Each with its own pair of the itervals.
     * @param svg - if the result must be in SVG (if not, PNG is used)
     * @param params - additional plot parameters
     * @param onError - callback to call in case of error
     * @returns image lement.
     */
    plot3d_parametric_surface(expressions: {
        x: PreparedSympyCall;
        y: PreparedSympyCall;
        z: PreparedSympyCall;
        r_u: PlotInterval;
        r_v: PlotInterval;
    }[], svg: boolean, onError?: (err: SympyError) => void, params?: Plot3dParams): HTMLImageElement;
    private replaceAll;
    protected prepare(node: MathNode, operation: MathNodeVisitor<SympyToken>): PreparedSympyCall | SemanticErrorDescription;
}
