o
    }oi                     @   sZ  d Z ddlmZ ddlZddlmZmZmZ dejde	eje
f fddZdejd	e
dejfd
dZdejde	eje
f fddZdejd	e
de
dejfddZd6dede
defddZdd Zde
de
defddZde
defddZdd  Zd7d"d#ZG d$d% d%ejjZd&d' Zd(d) Zd*d+ Zd,d- Zd.ejdejfd/d0Zd8d2d3Zd4d5 ZdS )9z)Shared utilities for the networks module.    )AnyN)pack	rearrangeunpackxreturnc                 C   s   | j d }t| d|fS )Nr   zb c t h w -> (b t) c h wshaper   r   
batch_size r   j/home/ubuntu/.local/lib/python3.10/site-packages/nemo/collections/common/video_tokenizers/modules/utils.py
time2batch   s   
r   r   c                 C   s   t | d|dS )Nz(b t) c h w -> b c t h w)br   r
   r   r   r   
batch2time      r   c                 C   s&   | j d | j d }}t| d||fS )Nr   zb c t h w -> (b h w) c tr   r   r   heightr   r   r   space2batch"   s   r   r   c                 C   s   t | d||dS )Nz(b h w) c t -> b c t h w)r   hr   r   r   r   r   batch2space'      r      tlengthc                 C   s   t | tr| S | f| S N)
isinstancetuple)r   r   r   r   r   
cast_tuple+   s   r    c                 C   s*   t j| d d d d d ddf | gddS )Nr   .   dim)torchcatr   r   r   r   replication_pad/   s   *r'   numdenc                 C   s   | | dkS Nr   r   )r(   r)   r   r   r   divisible_by3      r+   nc                 C   s   t | d S )Nr!   )r+   )r-   r   r   r   is_odd7   r,   r.   c                 C   s   | t |  S r   )r$   sigmoidr&   r   r   r   nonlinearity;   r   r0       c                 C   s   t jj|| dddS Ngư>T)
num_groupsnum_channelsepsaffine)r$   nn	GroupNorm)in_channelsr3   r   r   r   	Normalize?   s   r:   c                       s&   e Zd Zd fdd	Zdd Z  ZS )CausalNormalizer   c                    s*   t    tjj||ddd| _|| _d S r2   )super__init__r$   r7   r8   normr3   )selfr9   r3   	__class__r   r   r=   D   s   

zCausalNormalize.__init__c                 C   s0   | j dkrt|\}}t| ||S | |S )Nr   )r3   r   r   r>   )r?   r   r   r   r   r   forwardN   s   

zCausalNormalize.forwardr   )__name__
__module____qualname__r=   rB   __classcell__r   r   r@   r   r;   C   s    
r;   c                 C   s   | d uS r   r   )vr   r   r   existsW   s   rI   c                  G   s   | D ]
}t |r|  S qd S r   )rI   )argsargr   r   r   default[   s
   rL   c                 C   s   t | g|S r   )r   )r   patternr   r   r   pack_oneb   r,   rN   c                 C   s   t | ||d S r*   )r   )r   psrM   r   r   r   
unpack_onef   r   rP   zc                 C   s   |   }| ||    S )z&Round with straight through gradients.)rounddetach)rQ   zhatr   r   r   	round_stej   s   rU   h㈵>c                 C   s   | j |d S )N)min)clamplog)r   r5   r   r   r   rY   p   r   rY   c                 C   s   |  t |  jddS )Nr"   )rY   sum)probr   r   r   entropyt   s   r]   rC   )r1   )rV   ) __doc__typingr   r$   einopsr   r   r   Tensorr   intr   r   r   r   r    r'   boolr+   r.   r0   r:   r7   Moduler;   rI   rL   rN   rP   rU   rY   r]   r   r   r   r   <module>   s,   

