o
    #i                     @   s$   d dl Zd dlZG dd deZdS )    Nc                   @   s@   e Zd ZdddZdd ZdddZg d	fd
dZdd ZdS )DiagonalGaussianDistributionFc                 C   s   || _ tj|ddd\| _| _t| jdd| _|| _td| j | _t| j| _	| jr@t
| jj| j jd | _	| _d S d S )N      dimg      >g      4@      ?device)
parameterstorchchunkmeanlogvarclampdeterministicexpstdvar
zeros_liketor	   )selfr
   r    r   ;/data/cameron/vidgen/VidTok/vidtok/modules/distributions.py__init__   s   $z%DiagonalGaussianDistribution.__init__c                 C   s*   | j | jt| j jj| jjd  }|S )Nr   )r   r   r   randnshaper   r
   r	   )r   xr   r   r   sample   s   &z#DiagonalGaussianDistribution.sampleNc                 C   s   | j r	tdgS |d u r%dtjt| jd| j d | j g dd S dtjt| j|j d|j | j|j  d | j |j g dd S )N        r   r   g      ?r   r      r   )r   r   Tensorsumpowr   r   r   )r   otherr   r   r   kl   s&   
zDiagonalGaussianDistribution.klr   c                 C   sR   | j r	tdgS tdtj }dtj|| j t|| j	 d| j
  |d S )Nr   g       @r   r   r   )r   r   r!   nplogpir"   r   r#   r   r   )r   r   dimsZlogtwopir   r   r   nll'   s    z DiagonalGaussianDistribution.nllc                 C   s   | j S N)r   )r   r   r   r   mode0   s   z!DiagonalGaussianDistribution.mode)Fr+   )__name__
__module____qualname__r   r   r%   r*   r,   r   r   r   r   r      s    


	r   )numpyr&   r   objectr   r   r   r   r   <module>   s    