o
    ॵi                     @   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   n/home/ubuntu/.local/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 )N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   empty_cacheipc_collectr   r   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   get_device_capability).0devidr   r   r	   	<genexpr>:   s
    
zenable_tf32.<locals>.<genexpr>r   T)r   r   r   anyrangedevice_countbackendscudnn	benchmarkmatmul
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   r1   c                 C   s   t |  t j|tdS N)r   )r   manual_seedrandnr   )seedshaper   r   r	   r4   V   s   
r4   c                 C   s   t j| tdS r2   )r   r4   r   )r6   r   r   r	   randn_without_seed[   s   r7   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   is_autocast_enabledr:   r8   r9   r;   r   r   r	   without_autocastf   s
   r?   c                   @   s   e Zd ZdS )NansExceptionN)__name__
__module____qualname__r   r   r   r	   r@   k   s    r@   c                 C   sH   t t |  sd S |dkrd}n	|dkrd}nd}|d7 }t|)Nunetz,A tensor with all NaNs was produced in Unet.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itemr@   )xwheremessager   r   r	   test_for_nanso   s   rL   )F)"r8   r   r   r   modulesr   boolr   r   r   r   r   r   r)   r   r   device_interrogatedevice_gfpgandevice_esrgandevice_codeformerfloat16dtype	dtype_vaer,   r*   r/   r1   r4   r7   r:   r?   	Exceptionr@   rL   r   r   r   r	   <module>   s:   




