import type { TransformValue } from './transform.js';
export type TransformNumericReducer = 'count' | 'sum' | 'mean' | 'min' | 'max';
export interface TransformReduceContext<TDatum> {
    values: readonly number[];
    data: readonly TDatum[];
    indexes: readonly number[];
    group: Readonly<Record<string, unknown>>;
}
export type TransformReducer<TDatum, TResult = unknown> = TransformNumericReducer | ((context: TransformReduceContext<TDatum>) => TResult);
export type TransformOutputSpec<TDatum, TResult = unknown> = {
    reduce: 'count';
    value?: never;
} | {
    value: TransformValue<TDatum, number | null | undefined>;
    reduce: TransformNumericReducer;
} | {
    value?: TransformValue<TDatum, number | null | undefined>;
    reduce: (context: TransformReduceContext<TDatum>) => TResult;
};
export type TransformOutputs<TDatum> = Record<string, TransformOutputSpec<TDatum, any>>;
export type TransformOutputValue<TSpec> = TSpec extends {
    reduce: (context: any) => infer TResult;
} ? TResult : number;
export type TransformOutputRow<TOutputs> = {
    readonly [TKey in keyof TOutputs]: TransformOutputValue<TOutputs[TKey]>;
};
export declare function quantile<TDatum>(probability: number): (context: TransformReduceContext<TDatum>) => number;
export declare function median(context: TransformReduceContext<unknown>): number;
export declare function variance({ values }: TransformReduceContext<unknown>): number;
export declare function deviation(context: TransformReduceContext<unknown>): number;
export declare function first({ values }: TransformReduceContext<unknown>): number;
export declare function last({ values }: TransformReduceContext<unknown>): number;
export declare function delta({ values }: TransformReduceContext<unknown>): number;
export declare function ratio({ values }: TransformReduceContext<unknown>): number;
