import { AniraWasmInstance } from '../factory';
import { BaseWrapper, PossiblePointer } from './BaseWrapper';
import { VectorModelData, VectorTensorShape, TensorShapeList } from './Vectors';
import { ProcessingSpec } from './ProcessingSpec';
import { TensorShape } from './TensorShape';
/**
 * Mirrors `anira::InferenceConfig::Defaults` from the C++ header — *with one
 * deliberate deviation*: `numParallelProcessors` defaults to
 * `navigator.hardwareConcurrency` (full count), not `hardware_concurrency / 2`.
 *
 * On the web, parallel inference is driven by JS workers the user spins up
 * via `AniraWeb.spinUpInferenceWorker`; the library does not own a
 * native thread pool. `num_parallel_processors` decides how many backend
 * processor instances the session pre-allocates — i.e. the upper bound on
 * concurrent inferences. Setting it lower than the worker count causes the
 * extra workers to serialise on processor locks; setting it higher just
 * costs a bit of memory. Defaulting to the full hardware-concurrency value
 * keeps users out of the "silently serialised" trap; pass an explicit value
 * if you know your worker count.
 */
export declare const InferenceConfigDefaults: {
    readonly warmUp: 0;
    readonly sessionExclusiveProcessor: false;
    readonly blockingRatio: 0;
    readonly numParallelProcessors: number;
};
/**
 * TypeScript wrapper for anira::InferenceConfig
 * Thread-safe C API wrapper
 */
export declare class InferenceConfig extends BaseWrapper {
    constructor(wasmInstance: AniraWasmInstance, modelDataVector: PossiblePointer<VectorModelData>, tensorShapeVector: PossiblePointer<VectorTensorShape>, processingSpec: PossiblePointer<ProcessingSpec>, maxInferenceTime: number, warmUp?: number, sessionExclusiveProcessor?: boolean, blockingRatio?: number, numParallelProcessors?: number);
    constructor(wasmInstance: AniraWasmInstance, modelDataVector: PossiblePointer<VectorModelData>, tensorShapeVector: PossiblePointer<VectorTensorShape>, maxInferenceTime: number, warmUp?: number, sessionExclusiveProcessor?: boolean, blockingRatio?: number, numParallelProcessors?: number);
    /** Free the underlying C++ object. See :ref:`lifecycle-and-cleanup` for when to call this. */
    destroy(): void;
    /** Mirrors :cpp:func:`anira::InferenceConfig::get_model_path`. */
    getModelPath(backend: number): string;
    /** Mirrors :cpp:func:`anira::InferenceConfig::get_model_data`. */
    getModelData(backend: number): number;
    /** Mirrors :cpp:func:`anira::InferenceConfig::is_model_binary`. */
    isModelBinary(backend: number): boolean;
    /**
     * Mirrors :cpp:func:`anira::InferenceConfig::get_tensor_input_shape`.
     *
     * Returns a non-owning `TensorShapeList` view into the config's
     * universal (or per-backend) input shape. Do **not** call `.destroy()` on it
     * — the underlying storage belongs to the `InferenceConfig`.
     */
    getTensorInputShape(backend?: number): TensorShapeList;
    /**
     * Mirrors :cpp:func:`anira::InferenceConfig::get_tensor_output_shape`.
     *
     * Returns a non-owning `TensorShapeList` view. See
     * `getTensorInputShape` for ownership notes.
     */
    getTensorOutputShape(backend?: number): TensorShapeList;
    /**
     * Mirrors :cpp:func:`anira::InferenceConfig::get_tensor_shape`.
     *
     * Returns a non-owning `TensorShape` view selected for `backend`
     * (falling back to the universal shape if no backend-specific shape is
     * registered). Do **not** call `.destroy()` on it.
     */
    getTensorShape(backend: number): TensorShape;
    /** Mirrors :cpp:func:`anira::InferenceConfig::get_tensor_input_size`. */
    getTensorInputSize(tensorIndex?: number): number;
    /** Mirrors :cpp:func:`anira::InferenceConfig::get_tensor_output_size`. */
    getTensorOutputSize(tensorIndex?: number): number;
    /** Mirrors :cpp:func:`anira::InferenceConfig::get_preprocess_input_channels`. */
    getPreprocessInputChannels(tensorIndex?: number): number;
    /** Mirrors :cpp:func:`anira::InferenceConfig::get_postprocess_output_channels`. */
    getPostprocessOutputChannels(tensorIndex?: number): number;
    /** Mirrors :cpp:func:`anira::InferenceConfig::get_preprocess_input_size`. */
    getPreprocessInputSize(tensorIndex?: number): number;
    /** Mirrors :cpp:func:`anira::InferenceConfig::get_postprocess_output_size`. */
    getPostprocessOutputSize(tensorIndex?: number): number;
    /** Mirrors :cpp:func:`anira::InferenceConfig::get_internal_model_latency`. */
    getInternalModelLatency(tensorIndex?: number): number;
    /** Mirrors the :cpp:member:`anira::InferenceConfig::m_max_inference_time` field. */
    getMaxInferenceTime(): number;
    /** Mirrors the :cpp:member:`anira::InferenceConfig::m_max_inference_time` field. */
    setMaxInferenceTime(value: number): void;
    /** Mirrors the :cpp:member:`anira::InferenceConfig::m_warm_up` field. */
    getWarmUp(): number;
    /** Mirrors the :cpp:member:`anira::InferenceConfig::m_warm_up` field. */
    setWarmUp(value: number): void;
    /** Mirrors the :cpp:member:`anira::InferenceConfig::m_blocking_ratio` field. */
    getBlockingRatio(): number;
    /** Mirrors the :cpp:member:`anira::InferenceConfig::m_blocking_ratio` field. */
    setBlockingRatio(value: number): void;
    equals(other: PossiblePointer<InferenceConfig>): boolean;
    notEquals(other: PossiblePointer<InferenceConfig>): boolean;
}
//# sourceMappingURL=InferenceConfig.d.ts.map