export interface PrivatizeOptions<DATASET> {
    maxEpsilon: number;
    newShadowIterator: NewShadowDatasetIterator<DATASET>;
    maxCallCount?: number;
    maxConcurrentCalls?: number;
    debugDangerously?: boolean;
}
export declare type IteratorValue<DATASET> = DATASET | undefined;
export declare type SubsetIterator<DATASET> = Iterator<DATASET | undefined> | Iterator<Promise<DATASET | undefined>> | Promise<Iterator<DATASET | undefined>> | Promise<Iterator<Promise<DATASET | undefined>>>;
export declare type NewShadowDatasetIterator<DATASET> = (originalDataset: DATASET) => SubsetIterator<DATASET>;
export interface PrivatizedResult {
    result: number;
    epsilonBudgetUsed: number;
    percentBudgetUsed: number;
}
export interface DangerousResult extends PrivatizedResult {
    privateResult: number;
    noiseAdded: number;
}
export interface DangerousOptions {
    debugDangerously: true;
}
export declare type PrivatizedFunctionResult<OPTIONS extends PrivatizeOptions<any>> = OPTIONS extends DangerousOptions ? DangerousResult : PrivatizedResult;
export declare type PrivatizedFunction<DATASET, PFR extends PrivatizedResult> = (datastore: DATASET) => Promise<PFR>;
export declare type Privatizer<DATASET, OPTIONS extends PrivatizeOptions<DATASET>> = (sensitiveFunction: SensitiveFunction<DATASET>, options: OPTIONS) => PrivatizedFunction<DATASET, PrivatizedFunctionResult<OPTIONS>>;
export declare type SensitiveSyncFunction<D> = (dataset: D) => number;
export declare type SensitiveAsyncFunction<D> = (dataset: D) => Promise<number>;
export declare type SensitiveFunction<D> = SensitiveSyncFunction<D> | SensitiveAsyncFunction<D>;
export declare type SensitiveOutput = number | Promise<number>;
export declare class PrivacyBudgetExceededError extends Error {
}
