import { DataInterface } from '../data/data.interface';
import { DataJSONInterface } from '../data/data.json.interface';
import { StatsClassInterface } from './stats.class.interface';
type StatsSource = Pick<StatsClassInterface, 'getStat'>;
type NumericRecordReducer = 'sum' | 'min' | 'max' | 'average' | 'weightedAverage';
export interface NumericRecordAggregation {
    readonly outputKey: string;
    readonly keys: readonly string[];
    readonly reducer: NumericRecordReducer;
    readonly weightKeys?: readonly string[];
    readonly requireCompleteCoverage?: boolean;
}
export declare class StatsUtilities {
    static serializeStats(stats: Map<string, DataInterface>): DataJSONInterface;
    static getFiniteStatValue(source: StatsSource, statType: string): number | null;
    static getFiniteNumericValue(value: unknown): number | null;
    static getFiniteNumericRecordValue(source: unknown, keys: readonly string[]): number | null;
    static aggregateNumericRecords(records: readonly unknown[], aggregations: readonly NumericRecordAggregation[]): Record<string, number>;
    static sum(sources: StatsSource[], statType: string): number | null;
    static min(sources: StatsSource[], statType: string): number | null;
    static max(sources: StatsSource[], statType: string): number | null;
    static average(sources: StatsSource[], statType: string): number | null;
    static weightedAverage(sources: StatsSource[], valueStatType: string, weightStatType: string): number | null;
    private static getFiniteStatValues;
    private static aggregateValues;
}
export {};
