a
    
d		                     @   s   d dl mZ d dlmZ d dlZd dlZddlmZ ddl	m
Z
 eeejddd	ZG d
d dZG dd deZG dd deZdS )    )abstractmethod)partialN   )make_beta_schedule)append_zero)num_substepsmax_stepreturnc                 C   s&   t j|d d| ddtd d d S )N   r   F)endpoint)nplinspaceastypeint)r   r    r   o/var/www/html/stable-diffusion-webui/repositories/generative-models/sgm/modules/diffusionmodules/discretizer.py%generate_roughly_equally_spaced_steps   s    r   c                   @   s"   e Zd Zd	ddZedd ZdS )
DiscretizationTcpuFc                 C   s2   | j ||d}|rt|n|}|s&|S t|dS )Ndevicer   )
get_sigmasr   torchflip)selfndo_append_zeror   r   sigmasr   r   r   __call__   s    zDiscretization.__call__c                 C   s   d S Nr   )r   r   r   r   r   r   r      s    zDiscretization.get_sigmasN)Tr   F)__name__
__module____qualname__r    r   r   r   r   r   r   r      s   
r   c                   @   s    e Zd Zd
ddZdddZd	S )EDMDiscretization{Gz?      T@      @c                 C   s   || _ || _|| _d S r!   )	sigma_min	sigma_maxrho)r   r)   r*   r+   r   r   r   __init__   s    zEDMDiscretization.__init__r   c                 C   sL   t jdd||d}| jd| j  }| jd| j  }||||   | j }|S )Nr   r
   r   )r   r   r)   r+   r*   )r   r   r   rampZmin_inv_rhoZmax_inv_rhor   r   r   r   r   "   s
    zEDMDiscretization.get_sigmasN)r&   r'   r(   )r   )r"   r#   r$   r,   r   r   r   r   r   r%      s   
r%   c                       s(   e Zd Zd	 fdd	Zd
ddZ  ZS )LegacyDDPMDiscretization_QK?~jt?  c                    sN   t    || _td|||d}d| }tj|dd| _ttj	tj
d| _d S )Nlinear)linear_start
linear_endg      ?r   )axis)dtype)superr,   num_timestepsr   r   cumprodalphas_cumprodr   r   tensorfloat32to_torch)r   r3   r4   r8   betasalphas	__class__r   r   r,   +   s    
z!LegacyDDPMDiscretization.__init__r   c                 C   sj   || j k r"t|| j }| j| }n|| j kr4| j}ntttjtj|d}|d| | d }t|dS )N)r6   r   r
   g      ?r   )	r8   r   r:   
ValueErrorr   r   r;   r<   r   )r   r   r   	timestepsr:   r=   r   r   r   r   r   :   s    

z#LegacyDDPMDiscretization.get_sigmas)r/   r0   r1   )r   )r"   r#   r$   r,   r   __classcell__r   r   r@   r   r.   *   s
      r.   )abcr   	functoolsr   numpyr   r   modules.diffusionmodules.utilr   utilr   r   ndarrayr   r   r%   r.   r   r   r   r   <module>   s   