o
    ?߱iZ                     @   s.   d dl mZ d dlZd dlZG dd dZdS )    )
NormalDistNc                	   @   sj   e Zd Z				ddedededefd	d
ZdedejfddZdejdejde	ejejf fddZ
dS )EDMSDE333333333333?      T@Mb`?p_meanp_std	sigma_max	sigma_minc                 C   s   t ||d| _|| _|| _d S )N)musigma)r   gaussian_distr
   r   )selfr   r	   r
   r    r   Y/data/cameron/vidgen/cosmos-predict2.5/cosmos_predict2/_src/imaginaire/modules/edm_sde.py__init__   s   
zEDMSDE.__init__
batch_sizereturnc                    s8   t jj|d} fdd|D }tj|dd}t|S )N)sizec                    s   g | ]} j |qS r   )r   inv_cdf).0Zcdf_valr   r   r   
<listcomp>$   s    z#EDMSDE.sample_t.<locals>.<listcomp>cuda)device)nprandomuniformtorchtensorexp)r   r   Zcdf_valsZsamples_interval_gaussianZ	log_sigmar   r   r   sample_t"   s   
zEDMSDE.sample_tx0r   c                 C   s   ||fS )z_This is trivial in the base class, but may be used by derived classes in a more interesting wayr   )r   r#   r   r   r   r   marginal_prob)   s   zEDMSDE.marginal_probN)r   r   r   r   )__name__
__module____qualname__floatr   intr   Tensorr"   tupler$   r   r   r   r   r      s     
*r   )
statisticsr   numpyr   r   r   r   r   r   r   <module>   s   