a
    Ad
                     @   s|   d dl Zd dlZd dlmZmZmZ g Zda	da
dd ZdddZdddZG d	d
 d
ZG dd dejjZdddZdS )    N)script_callbacksshareddevicesc                  C   s   t  } t  t|  d S N)r   list_unets_callbackunet_optionsclearextend)Z	new_unets r
   7/var/www/html/stable-diffusion-webui/modules/sd_unet.py
list_unets   s    r   c                    sj   p
t jjdkrd S dkrNt jjj  fddtD }|rJ|d jndtt	fddtD d S )NNone	Automaticc                    s   g | ]}|j  kr|qS r
   )
model_name.0x)namer
   r   
<listcomp>       z#get_unet_option.<locals>.<listcomp>r   c                    s   g | ]}|j  kr|qS r
   )labelr   )optionr
   r   r      r   )
r   optssd_unetsd_modelsd_checkpoint_infor   r   r   nextiter)r   optionsr
   )r   r   r   get_unet_option   s    
r   c                 C   s   t | }|tkrd S td ur6tdtjj  t  |atd u rdd atjj	s`tjj
jtj d S tjj
jtj t  t att_tdtjj  t  d S )NzDectivating unet: zActivating unet: )r   current_unet_optioncurrent_unetprintr   r   
deactivater   r   lowvrammodeldiffusion_modeltor   devicecputorch_gccreate_unetactivate)r   Z
new_optionr
   r
   r   
apply_unet"   s$    r-   c                   @   s   e Zd ZdZdZdd ZdS )SdUnetOptionNc                 C   s
   t  dS )zXreturns SdUnet object to be used as a Unet instead of built-in unet when making picturesNNotImplementedErrorselfr
   r
   r   r+   G   s    zSdUnetOption.create_unet)__name__
__module____qualname__r   r   r+   r
   r
   r
   r   r.   @   s   r.   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )SdUnetc                 O   s
   t  d S r   r/   r2   r   	timestepscontextargskwargsr
   r
   r   forwardM   s    zSdUnet.forwardc                 C   s   d S r   r
   r1   r
   r
   r   r,   P   s    zSdUnet.activatec                 C   s   d S r   r
   r1   r
   r
   r   r#   S   s    zSdUnet.deactivateN)r3   r4   r5   r<   r,   r#   r
   r
   r
   r   r6   L   s   r6   c                 O   sH   t d ur$t j|||g|R i |S tjjjj| |||g|R i |S r   )r!   r<   ldmmodulesdiffusionmodulesopenaimodel#copy_of_UNetModel_forward_for_webuir7   r
   r
   r   UNetModel_forwardW   s    rB   )N)N)NN)torch.nntorch(ldm.modules.diffusionmodules.openaimodelr=   r>   r   r   r   r   r    r!   r   r   r-   r.   nnModuler6   rB   r
   r
   r
   r   <module>   s   

