import type { ComputeAxisItem, DataAxisItem, ProtocolAxisItem, ResidualBucket } from './types.js';
export declare const DEFAULT_MIN_WEIGHT = 0.001;
export interface AggregateOptions {
    /** Threshold below which contributions pool into the residual bucket.
     *  Default 0.001 per spec §4.1. */
    minWeight?: number;
}
export interface AggregationResult<T> {
    /** Entries retained (weight >= minWeight), with canonical weight strings. */
    retained: T[];
    /** Residual bucket summarizing the pooled contributors, or null if none
     *  were pooled. */
    residual: ResidualBucket | null;
    /** Number of contributors that were pooled into the residual. */
    pooledCount: number;
}
/** Apply the §4.1 threshold to a list of data-axis contributors. Returns
 *  the retained entries plus a residual bucket (or null). Input entries
 *  that are already ResidualBucket objects are preserved in `retained`
 *  untouched. */
export declare function aggregateDataAxis(entries: DataAxisItem[], opts?: AggregateOptions): AggregationResult<DataAxisItem>;
/** Aggregate axis P entries by their optional `weight` field. Entries
 *  without a weight are retained unconditionally (the §4.1 threshold only
 *  applies when the issuer has chosen to emit per-module weights). */
export declare function aggregateProtocolAxis(entries: ProtocolAxisItem[], opts?: AggregateOptions): AggregationResult<ProtocolAxisItem>;
/** Aggregate axis C entries by compute_share. Mirrors axis D. */
export declare function aggregateComputeAxis(entries: ComputeAxisItem[], opts?: AggregateOptions): AggregationResult<ComputeAxisItem>;
//# sourceMappingURL=residual.d.ts.map