import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSCopying } from "../Foundation/NSCopying.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { MLCDeviceType } from "./MLCDeviceType.js";
export declare class _MLCDevice extends _NSObject {
    static alloc(): _MLCDevice;
    static new(): _MLCDevice;
    init(): _MLCDevice;
    /** @abstract Creates a device which uses the CPU. @return A new device. */
    static cpuDevice(): _MLCDevice;
    /**
     * @abstract Creates a device which uses a GPU, if any. @return A new device, or `nil` if no GPU exists.
     */
    static gpuDevice(): _MLCDevice | null;
    /**
     * @abstract Creates a device which uses the Apple Neural Engine, if any. @return A new device, or `nil` if no ANE exists.
     */
    static aneDevice(): _MLCDevice | null;
    /**
     * @abstract Create a MLCDevice object @param type A device type @return A new device object
     */
    static deviceWithType$(type: MLCDeviceType): _MLCDevice | null;
    /**
     * @abstract Create a MLCDevice object that uses multiple devices if available @param type A device type @param selectsMultipleComputeDevices A boolean to indicate whether to select multiple compute devices @return A new device object
     */
    static deviceWithType$selectsMultipleComputeDevices$(type: MLCDeviceType, selectsMultipleComputeDevices: boolean): _MLCDevice | null;
    /**
     * @abstract Create a MLCDevice object @discussion This method can be used by developers to select specific GPUs @param gpus List of Metal devices @return A new device object
     */
    static deviceWithGPUDevices$(gpus: _NSArray): _MLCDevice | null;
    /**
     * @property type @abstract The type specified when the device is created @discussion Recommend that developers use MLCDeviceTypeAny as the device type. This will ensure that MLCompute will select the best device to execute the neural network. If developers want to be able to control device selection, they can select CPU or GPU and for the GPU, they can also select a specific Metal device.
     */
    type(): MLCDeviceType;
    /**
     * @property actualDeviceType @abstract The specific device selected. @discussion This can be CPU, GPU or ANE. If type is MLCDeviceTypeAny, this property can be used to find out the specific device type that is selected.
     */
    actualDeviceType(): MLCDeviceType;
    gpuDevices(): _NSArray;
}
export interface _MLCDevice extends _NSCopying {
}
