import type { CompiledFormula } from '@bilig/formula';
import type { RuntimeDirectAggregateDescriptor, RuntimeDirectCriteriaDescriptor, RuntimeDirectLookupDescriptor, RuntimeDirectScalarDescriptor, RuntimeFormula } from '../runtime-state.js';
export interface PreparedFormulaBindingShape {
    readonly dependencies: {
        readonly rangeDependencies: Uint32Array;
    };
    readonly compiled: CompiledFormula;
    readonly directLookup: RuntimeDirectLookupDescriptor | undefined;
    readonly directAggregate: RuntimeDirectAggregateDescriptor | undefined;
    readonly directScalar: RuntimeDirectScalarDescriptor | undefined;
    readonly directCriteria: RuntimeDirectCriteriaDescriptor | undefined;
}
export declare function directLookupStructureEqual(left: RuntimeDirectLookupDescriptor | undefined, right: RuntimeDirectLookupDescriptor | undefined): boolean;
export declare function directCriteriaOperandEqual(left: RuntimeDirectCriteriaDescriptor['criteriaPairs'][number]['criterion'] | undefined, right: RuntimeDirectCriteriaDescriptor['criteriaPairs'][number]['criterion'] | undefined): boolean;
export declare function directScalarDependencyCellsEqual(left: RuntimeDirectScalarDescriptor | undefined, right: RuntimeDirectScalarDescriptor | undefined): boolean;
export declare function directCriteriaStructureEqual(left: RuntimeDirectCriteriaDescriptor | undefined, right: RuntimeDirectCriteriaDescriptor | undefined): boolean;
export declare function directAggregateStructureEqual(left: RuntimeDirectAggregateDescriptor | undefined, right: RuntimeDirectAggregateDescriptor | undefined): boolean;
export declare function floatArrayEqual(left: ArrayLike<number>, right: ArrayLike<number>): boolean;
export declare function uint32ArrayEqual(left: Uint32Array | readonly number[], right: Uint32Array | readonly number[]): boolean;
export declare function stringArrayEqual(left: readonly string[], right: readonly string[]): boolean;
export declare function hasStableSymbolicRangeLayout(current: Pick<CompiledFormula, 'symbolicRanges' | 'parsedSymbolicRanges'>, next: Pick<CompiledFormula, 'symbolicRanges' | 'parsedSymbolicRanges'>, rangeDependencyCount: number): boolean;
export declare function hasInPlaceDependencyRebindShape(existing: RuntimeFormula, prepared: PreparedFormulaBindingShape): boolean;
export declare function canRewriteCompiledPreservingBindings(existing: RuntimeFormula, compiled: CompiledFormula): boolean;
export declare function canRewriteCompiledPreservingDirectAggregate(existing: RuntimeFormula, compiled: CompiledFormula): boolean;
export declare function canRewriteCompiledPreservingDirectScalar(existing: RuntimeFormula, compiled: CompiledFormula): boolean;
