o
    1j                     @   s   d dl Z d dlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZ ddlmZmZmZ ddlmZ ddlmZ g d	Zd
d Zdd Zdd Zdd Zdd Zeddd Zdd Zdd ZedG dd deZdS )    N)ContextDecorator   )logging)DCU_WHITELISTGCU_WHITELISTMETAX_GPU_WHITELISTMLU_WHITELISTNPU_BLACKLISTXPU_WHITELIST)class_requires_depsfunction_requires_depsis_dep_available)DISABLE_DEV_MODEL_WL)import_paddle)	cpugpuxpunpumlugcudcuZiluvatar_gpu	metax_gpuc                 C   s@   | dkr|d urt d|rdtt|}|  d| S |  S )Nr   z"`device_ids` must be None for CPUs,:)
ValueErrorjoinmapstr)device_type
device_ids r    U/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/utils/device.pyconstr_device,   s   r"   c                  C   s   t drt } | j r| jj dkrtddgS dS t dr3dd l}|j r3|j	jr3tddgS t drLdd l
}t| }|dh@ rLtddgS dS )Npaddlepaddler   r   r   torchonnxruntimeZCUDAExecutionProvider)r   r   deviceZis_compiled_with_cudacudaZdevice_countr"   r$   Zis_availableversionr%   setZget_available_providers)paddler$   Zort	providersr    r    r!   get_default_device7   s"   
r,   c                 C   s   |  d}t|dkrtd|  t|dkr |d d}}n |\}}| d}|D ]}| s8td| q+ttt|}| }| tv sLJ |d	krX|durXtd
||fS )parse_devicer      zInvalid device: r   r   Nr   z1Device ID must be an integer. Invalid device ID: r   z)No Device ID should be specified for CPUs)	splitlenr   isdigitlistr   intlowerSUPPORTED_DEVICE_TYPE)r&   partsr   r   Z	device_idr    r    r!   r-   N   s&   

r-   c                 C   s<   t | \}}|rt||ksJ t||d | S t||S N)r-   r0   r"   )r&   numr   r   r    r    r!   update_device_numg   s
   
r9   c                 C   s   t | \}}t|S r7   )r-   set_env_for_device_type)r&   r   _r    r    r!   set_env_for_devicep   s   r<   r#   c                 C   s   t  }dd }|  dkr| rddi}|| |  dkr,dddd	d
d
d}|| |  dkr>dddddd}|| |  dkrLddi}|| |  dkr[ddd}|| |  dkrkddi}|| d S d S )Nc                 S   s6   |   D ]\}}|tj|< t| d| d qd S )Nz has been set to .)itemsosenvironr   debug)envskeyvalr    r    r!   _sety   s   
z%set_env_for_device_type.<locals>._setr   ZFLAGS_conv_workspace_size_limit2000r   0Zauto_growthz0pad3d,pad3d_grad,set_value,set_value_with_tensorTrue)ZFLAGS_npu_jit_compileFLAGS_use_stride_kernelZFLAGS_allocator_strategyZCUSTOM_DEVICE_BLACK_LISTZFLAGS_npu_scale_aclnnZFLAGS_npu_split_aclnnr   1Z1800Zpad3d)ZBKCL_FORCE_SYNCZBKCL_TIMEOUTrI   ZXPU_BLACK_LISTZXPU_PADDLE_CONV_FLOATr   rI   r   )rI   Z$FLAGS_use_stream_safe_cuda_allocatorr   )r   r4   Zis_compiled_with_rocm)r   r*   rE   rB   r    r    r!   r:   u   sD   r:   c                 C   s
  t r	td d S d}| dkr|tv sJ d| d| d S | dkr3|tv s1J d| d| d S | dkrG|tv sEJ d	| d| d S | d
kr[|tvsYJ d| d| d S | dkro|tv smJ d| d| d S | dkr|tv sJ d| d| d S d S )NznSkip checking if model is supported on device because the flag `PADDLE_PDX_DISABLE_DEV_MODEL_WL` has been set.zWYou could set env `PADDLE_PDX_DISABLE_DEV_MODEL_WL` to `true` to disable this checking.r   z%The DCU device does not yet support `z` model!r   z%The MLU device does not yet support `r   z+The METAX_GPU device does not yet support `r   z%The NPU device does not yet support `r   z%The XPU device does not yet support `r   z%The GCU device does not yet support `)	r   r   warningr   r   r   r	   r
   r   )r   
model_nameZtipsr    r    r!   check_supported_device_type   s@   





rM   c                 C   s   t | \}}t||S r7   )r-   rM   )r&   rL   r   r;   r    r    r!   check_supported_device   s   
rN   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TemporaryDeviceChangerz?
    A context manager to temporarily change global device
    c                 C   s   t  }|| _|j | _d S r7   )r   
new_devicer&   Z
get_deviceoriginal_device)selfrP   r*   r    r    r!   __init__   s   zTemporaryDeviceChanger.__init__c                 C   s&   t  }| jd u r
| S |j| j | S r7   )r   rP   r&   
set_device)rR   r*   r    r    r!   	__enter__   
   
z TemporaryDeviceChanger.__enter__c                 C   s&   t  }| jd u r
dS |j| j dS )NF)r   rP   r&   rT   rQ   )rR   exc_typeexc_valexc_tbr*   r    r    r!   __exit__   rV   zTemporaryDeviceChanger.__exit__N)__name__
__module____qualname____doc__rS   rU   rZ   r    r    r    r!   rO      s
    rO   )r?   
contextlibr    r   Zcustom_device_listr   r   r   r   r	   r
   depsr   r   r   flagsr   Zimport_guardr   r5   r"   r,   r-   r9   r<   r:   rM   rN   rO   r    r    r    r!   <module>   s&    	
-"