o
    9i                     @   sV   d dl Z d dlmZmZ ddlmZmZ G dd dZG dd dZG d	d
 d
Z	dS )    N)OptionalUnion   )defaultinstantiate_from_configc                   @   s    e Zd ZdddZd	ddZdS )
EDMSampling333333333333?c                 C   s   || _ || _d S N)p_meanp_std)selfr   r    r   U/data/cameron/vidgen/generative-models/sgm/modules/diffusionmodules/sigma_sampling.py__init__   s   
zEDMSampling.__init__Nc                 C   s&   | j | jt|t|f  }| S r
   )r   r   r   torchrandnexp)r   	n_samplesrand	log_sigmar   r   r   __call__   s   zEDMSampling.__call__)r   r	   r
   )__name__
__module____qualname__r   r   r   r   r   r   r      s    
r   c                   @   s(   e Zd Zd
ddZdd Zddd	ZdS )DiscreteSamplingFTc                 C   s   || _ t||||d| _d S )N)do_append_zeroflip)num_idxr   sigmas)r   discretization_configr   r   r   r   r   r   r      s   zDiscreteSampling.__init__c                 C   s
   | j | S r
   )r   )r   idxr   r   r   idx_to_sigma   s   
zDiscreteSampling.idx_to_sigmaNc                 C   s"   t |td| j|f}| |S )Nr   )r   r   randintr   r"   )r   r   r   r!   r   r   r   r      s
   
zDiscreteSampling.__call__)FTr
   )r   r   r   r   r"   r   r   r   r   r   r      s    
r   c                   @   s.   e Zd Z	ddedeej dejfddZdS )ZeroSamplerNr   r   returnc                 C   s   t t|t |fd S )Ngh㈵>)r   
zeros_liker   r   )r   r   r   r   r   r   r   #   s   zZeroSampler.__call__r
   )r   r   r   intr   r   Tensorr   r   r   r   r   r$   "   s    r$   )
r   typingr   r   utilr   r   r   r   r$   r   r   r   r   <module>   s    
