/**
 * Complete linkage agglomerative clustering
 */
export class CompleteLinkageAgglomerativeClustering extends AgglomerativeClustering {
}
/**
 * Single linkage agglomerative clustering
 */
export class SingleLinkageAgglomerativeClustering extends AgglomerativeClustering {
}
/**
 * Group average agglomerative clustering
 */
export class GroupAverageAgglomerativeClustering extends AgglomerativeClustering {
}
/**
 * Ward's agglomerative clustering
 */
export class WardsAgglomerativeClustering extends AgglomerativeClustering {
}
/**
 * Centroid agglomerative clustering
 */
export class CentroidAgglomerativeClustering extends AgglomerativeClustering {
}
/**
 * Weighted average agglomerative clustering
 */
export class WeightedAverageAgglomerativeClustering extends AgglomerativeClustering {
}
/**
 * Median agglomerative clustering
 */
export class MedianAgglomerativeClustering extends AgglomerativeClustering {
}
export type AgglomerativeClusterNode = {
    /**
     * Data point of leaf node
     */
    point?: number[];
    /**
     * Data index of leaf node
     */
    index?: number;
    /**
     * Distance between children nodes
     */
    distance?: number;
    /**
     * Distances of leaf data and others
     */
    distances?: number[];
    /**
     * Number of leaf nodes
     */
    size: number;
    /**
     * Children nodes
     */
    children?: AgglomerativeClusterNode[];
    /**
     * Leaf nodes
     */
    leafs: AgglomerativeClusterNode[];
};
/**
 * @typedef {object} AgglomerativeClusterNode
 * @property {number[]} [point] Data point of leaf node
 * @property {number} [index] Data index of leaf node
 * @property {number} [distance] Distance between children nodes
 * @property {number[]} [distances] Distances of leaf data and others
 * @property {number} size Number of leaf nodes
 * @property {AgglomerativeClusterNode[]} [children] Children nodes
 * @property {AgglomerativeClusterNode[]} leafs Leaf nodes
 */
/**
 * Agglomerative clustering
 */
declare class AgglomerativeClustering {
    /**
     * @param {'euclid' | 'manhattan' | 'chebyshev' | function (number[], number[]): number} metric Metric name
     */
    constructor(metric?: 'euclid' | 'manhattan' | 'chebyshev' | ((arg0: number[], arg1: number[]) => number));
    _root: {
        distance: any;
        size: any;
        children: any[];
        readonly leafs: any;
    };
    _metric: "euclid" | "manhattan" | "chebyshev" | ((arg0: number[], arg1: number[]) => number);
    _d: (a: any, b: any) => any;
    /**
     * Fit model parameters.
     * @param {Array<Array<number>>} points Training data
     */
    fit(points: Array<Array<number>>): void;
    /**
     * Returns the specified number of clusters.
     * @param {number} number Number of clusters
     * @returns {AgglomerativeClusterNode[]} Cluster nodes
     */
    getClusters(number: number): AgglomerativeClusterNode[];
    /**
     * Returns predicted categories.
     * @param {number} k Number of clusters
     * @returns {number[]} Predicted values
     */
    predict(k: number): number[];
    /**
     * Returns a distance between two nodes.
     * @abstract
     * @param {AgglomerativeClusterNode} c1 Node
     * @param {AgglomerativeClusterNode} c2 Node
     * @returns {number} Distance
     */
    distance(c1: AgglomerativeClusterNode, c2: AgglomerativeClusterNode): number;
    _mean(d: any): number[];
    _lanceWilliamsUpdater(ala: any, alb: any, bt: any, gm: any): (ka: any, kb: any, ab: any) => number;
    /**
     * Returns new distance.
     * @abstract
     * @param {number} ca Number of datas in a merging node A
     * @param {number} cb Number of datas in a merging node B
     * @param {number} ck Number of datas in a current node
     * @param {number} ka Distance between node A and current node
     * @param {number} kb Distance between node B and current node
     * @param {number} ab Distance between node A and node B
     * @returns {number} New distance between current node and merged node
     */
    update(ca: number, cb: number, ck: number, ka: number, kb: number, ab: number): number;
}
export {};
