U
    Mh=                     @   s:   d dl mZ d dlZd dlmZ deeeedddZdS )	    )AnyN)_get_device_indexF)deviceoptional	allow_cpureturnc                 C   s   t | tr| S t | tr"t| } t | tjrd|rL| jdkrdtd|  n| jdkrdtd|  tj st | tj	jr| j
S t| ||S )a  Get the device index from :attr:`device`, which can be a torch.device object, a Python integer, or ``None``.

    If :attr:`device` is a torch.device object, returns the device index if it
    is a MTIA device. Note that for a MTIA device without a specified index,
    i.e., ``torch.device('mtia')``, this will return the current default MTIA
    device if :attr:`optional` is ``True``. If :attr:`allow_cpu` is ``True``,
    CPU devices will be accepted and ``-1`` will be returned in this case.

    If :attr:`device` is a Python integer, it is returned as is.

    If :attr:`device` is ``None``, this will return the current default MTIA
    device if :attr:`optional` is ``True``.
    )mtiacpuz(Expected a mtia or cpu device, but got: r   z!Expected a mtia device, but got: )
isinstanceintstrtorchr   type
ValueErrorZjitZis_scriptingr   idx_torch_get_device_index)r   r   r    r   C/var/www/html/venv/lib/python3.8/site-packages/torch/mtia/_utils.pyr   	   s    





r   )FF)typingr   r   Ztorch._utilsr   r   boolr   r   r   r   r   <module>   s        