import { ActivationTypes } from "./ast/activations";
import { Heap } from "./Heap";
export interface Connection {
    to: number;
    from: number;
}
export interface Gate {
    to: number;
    from: number;
    gater: number;
}
export interface ITopologyOptions {
    heap: Heap;
    bias?: boolean;
}
export interface ITopologyUnitOptions {
    activationFunction?: ActivationTypes;
    bias?: boolean;
    l1?: number;
    l2?: number;
    parameters?: number[];
}
export declare class Topology {
    heap: Heap;
    biasUnit: number;
    inputsOf: number[][];
    unitParameters: {
        l2: number;
        l1: number;
        parameters: number[];
    }[];
    projectedBy: number[][];
    gatersOf: number[][];
    gatedBy: number[][];
    inputsOfGatedBy: number[][][];
    projectionSet: number[][];
    gateSet: number[][];
    inputSet: number[][];
    connections: Connection[];
    gates: Gate[];
    layers: number[][];
    activationFunction: ActivationTypes[];
    units: number;
    constructor(options: ITopologyOptions);
    private normalize2D(key);
    private normalize3D(key);
    normalize(): void;
    addUnit(options?: ITopologyUnitOptions): number;
    addConnection(from: number, to: number, weight: number): void;
    addGate(from: number, to: number, gater: number): void;
    addLayer(size: number, options: ITopologyUnitOptions): number[];
    private track(unit);
    toJSON(): {
        biasUnit: number;
        inputsOf: number[][];
        projectedBy: number[][];
        gatersOf: number[][];
        gatedBy: number[][];
        inputsOfGatedBy: number[][][];
        projectionSet: number[][];
        gateSet: number[][];
        inputSet: number[][];
        connections: Connection[];
        gates: Gate[];
        layers: number[][];
    };
}
