a
    
d                     @   sB   d dl mZ ddlmZmZ G dd dejZG dd deZdS )    N   )append_dimsinstantiate_from_configc                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )Denoiserc                    s"   t    t|| _t|| _d S N)super__init__r   	weightingscaling)selfweighting_configscaling_config	__class__ l/var/www/html/stable-diffusion-webui/repositories/generative-models/sgm/modules/diffusionmodules/denoiser.pyr      s    

zDenoiser.__init__c                 C   s   |S r   r   r   sigmar   r   r   possibly_quantize_sigma   s    z Denoiser.possibly_quantize_sigmac                 C   s   |S r   r   r   c_noiser   r   r   possibly_quantize_c_noise   s    z"Denoiser.possibly_quantize_c_noisec                 C   s
   |  |S r   )r	   r   r   r   r   w   s    z
Denoiser.wc           
      C   sZ   |  |}|j}t||j}| |\}}}}	| |	|}	||| |	|| ||  S r   )r   shaper   ndimr
   r   reshape)
r   networkinputr   condZsigma_shapeZc_skipc_outc_inr   r   r   r   __call__   s    
zDenoiser.__call__)	__name__
__module____qualname__r   r   r   r   r!   __classcell__r   r   r   r   r      s
   r   c                       s>   e Zd Zd fdd	Zdd Zdd Zd	d
 Zdd Z  ZS )DiscreteDenoiserFTc           	         s6   t  || t||||d}| d| || _d S )N)do_append_zeroflipsigmas)r   r   r   register_bufferquantize_c_noise)	r   r   r   Znum_idxZdiscretization_configr'   r+   r(   r)   r   r   r   r       s    
zDiscreteDenoiser.__init__c                 C   s.   || j d d d f  }| jdd|jS )Nr   )dim)r)   absargminviewr   )r   r   distsr   r   r   sigma_to_idx1   s    zDiscreteDenoiser.sigma_to_idxc                 C   s
   | j | S r   )r)   )r   idxr   r   r   idx_to_sigma5   s    zDiscreteDenoiser.idx_to_sigmac                 C   s   |  | |S r   )r3   r1   r   r   r   r   r   8   s    z(DiscreteDenoiser.possibly_quantize_sigmac                 C   s   | j r| |S |S d S r   )r+   r1   r   r   r   r   r   ;   s    
z*DiscreteDenoiser.possibly_quantize_c_noise)FTT)	r"   r#   r$   r   r1   r3   r   r   r%   r   r   r   r   r&      s      r&   )torch.nnnnutilr   r   Moduler   r&   r   r   r   r   <module>   s   