o
    *j                     @   s   d dl Z d dlZd dlZejdkrd dlmZ defddZdd Zd	d
 Z	dd Z
dd Zdd Zdd Ze  edZed Z Z Z ZZejZejZejZdZdd Zdd Zdd Zdd Zd&ddZd&d d!ZG d"d# d#eZ d$d% Z!dS )'    Ndarwin)mac_specificreturnc                   C   s   t jdkrdS tjS )Nr   F)sysplatformr   has_mps r   r   {/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/multi_modal/diffusers_wrapped/devices.pyr      s   
r   c                   C   s   dS Ncudar   r   r   r   r	   get_cuda_device_string   s   r   c                   C   s   t j rt S t rdS dS )NZmpscpu)torchr   is_availabler   r   r   r   r   r	   get_optimal_device_name   s
   
r   c                   C   s   t t S N)r   devicer   r   r   r   r	   get_optimal_device"   s   r   c                 C   s   t  S r   )r   )taskr   r   r	   get_device_for&   s   r   c                   C   sb   t j r&t jt  t j  t j  W d    n1 s!w   Y  t r/t	  d S d S r   )
r   r   r   r   r   Zempty_cacheZipc_collectr   r   Ztorch_mps_gcr   r   r   r	   torch_gc*   s   

r   c                   C   sP   t j r&tdd tdt j D rdt jj_dt jjj	_
dt jj_
d S d S )Nc                 s   s     | ]}t j|d kV  qdS ))      N)r   r   Zget_device_capability).0Zdevidr   r   r	   	<genexpr>:   s
    
zenable_tf32.<locals>.<genexpr>r   T)r   r   r   anyrangeZdevice_countbackendsZcudnnZ	benchmarkmatmulZ
allow_tf32r   r   r   r	   enable_tf325   s   

r   r   r   Fc                 C   s   t r| tS | S r   )unet_needs_upcastto
dtype_unetinputr   r   r	   cond_cast_unetN   s   r%   c                 C   s   t r|  S | S r   )r    floatr#   r   r   r	   cond_cast_floatR   s   r'   c                 C   s   t |  t j|tdS N)r   )r   Zmanual_seedrandnr   )seedshaper   r   r	   r)   V   s   
r)   c                 C   s   t j| tdS r(   )r   r)   r   )r+   r   r   r	   randn_without_seed[   s   r,   c                 C   s   | rt  S tdS r
   )
contextlibnullcontextr   autocastdisabler   r   r	   r/   _   s   
r/   c                 C   s"   t  r| st jdddS t S )Nr   F)enabled)r   Zis_autocast_enabledr/   r-   r.   r0   r   r   r	   without_autocastf   s
   r3   c                   @   s   e Zd ZdS )NansExceptionN)__name__
__module____qualname__r   r   r   r	   r4   k   s    r4   c                 C   sH   t t |  sd S |dkrd}n	|dkrd}nd}|d7 }t|)NZunetz,A tensor with all NaNs was produced in Unet.Zvaez+A tensor with all NaNs was produced in VAE.z$A tensor with all NaNs was produced.zD Use --disable-nan-check commandline argument to disable this check.)r   allisnanitemr4   )xwheremessager   r   r	   test_for_nanso   s   r>   )F)"r-   r   r   r   modulesr   boolr   r   r   r   r   r   r   r   r   Zdevice_interrogateZdevice_gfpganZdevice_esrganZdevice_codeformerZfloat16ZdtypeZ	dtype_vaer"   r    r%   r'   r)   r,   r/   r3   	Exceptionr4   r>   r   r   r   r	   <module>   s:   




