import '../../../../../assert/js/assert.js';
import '../../../../../globals.js';
/**
 * A full reduction, with the method of reduction chosen based on the type and configuration.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import { BinaryOp, BufferArraySlot, CompositeModule, MainReduceAtomicModuleOptions, MainReduceModuleOptions, MainReduceNonCommutativeModuleOptions, PipelineBlueprintOptions, WGSLExpressionU32 } from '../../../imports.js';
type SelfOptions<T> = {
    input: BufferArraySlot<T>;
    output: BufferArraySlot<T>;
    binaryOp: BinaryOp<T>;
    workgroupSize: number;
    grainSize: number;
    lengthExpression: WGSLExpressionU32;
    inputOrder?: 'blocked' | 'striped';
    inputAccessOrder?: 'blocked' | 'striped';
    allowAtomicShader?: boolean;
    allowNonCommutativeShader?: boolean;
};
type ParentOptions<T> = {
    mainReduceModuleOptions?: Partial<MainReduceModuleOptions<T>>;
    mainReduceNonCommutativeModuleOptions?: Partial<MainReduceNonCommutativeModuleOptions<T>>;
    mainReduceAtomicModuleOptions?: Partial<MainReduceAtomicModuleOptions<T>>;
} & PipelineBlueprintOptions;
export type ReduceModuleOptions<T> = SelfOptions<T> & ParentOptions<T>;
export declare const REDUCE_MODULE_DEFAULTS: {
    readonly inputOrder: "blocked";
    readonly inputAccessOrder: "striped";
    readonly allowAtomicShader: true;
    readonly allowNonCommutativeShader: true;
    readonly mainReduceModuleOptions: {};
    readonly mainReduceNonCommutativeModuleOptions: {};
    readonly mainReduceAtomicModuleOptions: {};
};
export default class ReduceModule<T> extends CompositeModule<number> {
    readonly input: BufferArraySlot<T>;
    readonly output: BufferArraySlot<T>;
    readonly slots: BufferArraySlot<T>[];
    readonly internalSlots: BufferArraySlot<T>[];
    constructor(providedOptions: ReduceModuleOptions<T>);
}
export {};
//# sourceMappingURL=ReduceModule.d.ts.map