o
    ̳i                     @   s   d dl mZmZmZmZ d dlZd dlZd dlm	Z	 eee	j
 eg e	j
f f ZG dd de	j
ZG dd de	j
ZG dd deZG d	d
 d
eZG dd deZG dd deZG dd deZdS )    )CallableSequenceTypeUnionNc                       s4   e Zd Zd fddZdejdejfddZ  ZS )	FeedForwardModulereturnNc                    s   t    d | _d S N)super__init__net)self	__class__ E/home/ubuntu/.local/lib/python3.10/site-packages/xcodec2/vq/blocks.pyr
         

zFeedForwardModule.__init__xc                 C   s
   |  |S r   )r   r   r   r   r   r   forward   s   
zFeedForwardModule.forward)r   N)__name__
__module____qualname__r
   torchTensorr   __classcell__r   r   r   r   r   
   s    r   c                       s>   e Zd Zdejddf fddZdejdejfddZ  Z	S )	Residualmoduler   Nc                    s   t    || _d S r   )r	   r
   r   )r   r   r   r   r   r
      r   zResidual.__init__r   c                 C   s   |  || S r   )r   r   r   r   r   r      s   zResidual.forward)
r   r   r   nnModuler
   r   r   r   r   r   r   r   r   r      s    r   c                       L   e Zd Zdd fdededededeejgejf dd	f fd
dZ  Z	S )DilatedConvolutionalUnitc                 C      | S r   r   r   r   r   r   <lambda>'       z!DilatedConvolutionalUnit.<lambda>
hidden_dimdilationkernel_size
activationnormalizationr   Nc                    sP   t    t| |tj|||||d | d d| tj||dd| _d S )N      )in_channelsout_channelsr'   r&   padding)r,   r-   r'   r	   r
   r   
SequentialConv1dr   )r   r%   r&   r'   r(   r)   r   r   r   r
       s$   

z!DilatedConvolutionalUnit.__init__
r   r   r   intModuleFactoryr   r   r   r
   r   r   r   r   r   r       "    	r    c                       r   )UpsamplingUnitc                 C   r!   r   r   r"   r   r   r   r#   C   r$   zUpsamplingUnit.<lambda>	input_dim
output_dimstrider(   r)   r   Nc                    sT   t    t| |tj||d| ||d |d  |d dkr!dndd| _d S )Nr+   r   r*   )r,   r-   r'   r9   r.   output_padding)r	   r
   r   r0   ConvTranspose1dr   r   r7   r8   r9   r(   r)   r   r   r   r
   <   s   

zUpsamplingUnit.__init__r2   r   r   r   r   r6   :   r5   r6   c                       r   )DownsamplingUnitc                 C   r!   r   r   r"   r   r   r   r#   [   r$   zDownsamplingUnit.<lambda>r7   r8   r9   r(   r)   r   Nc                    sB   t    t| |tj||d| ||d |d  d| _d S )Nr+   )r,   r-   r'   r9   r.   r/   r<   r   r   r   r
   T   s   

zDownsamplingUnit.__init__r2   r   r   r   r   r=   R   r5   r=   c                          e Zd Zdd fdedee dee dee deee eee  f dee	j
 d	ee	j
 d
ee	jge	jf ddf fddZedeee eee  f dee fddZ  ZS )DilatedResidualEncoderc                 C   r!   r   r   r"   r   r   r   r#   v   r$   zDilatedResidualEncoder.<lambda>capacitydilated_unitdownsampling_unitratios	dilationspre_network_convpost_network_convr)   r   Nc	                    s   t    |dtt|d   }	| ||}
|||	d dg}t||
|	d d |	dd  D ]\}}}}|D ]}|t||| q9||||| q1|||d t	j
| | _d S )Nr+   r*   r   r-   r,   r	   r
   nparangelennormalize_dilationszipappendr   r   r0   r   )r   r@   rA   rB   rC   rD   rE   rF   r)   channelsdilations_listr   ratior7   r8   r&   r   r   r   r
   l   s   
zDilatedResidualEncoder.__init__c                    $   t  d tr fdd|D   S )Nr   c                       g | ]} qS r   r   .0_rD   r   r   
<listcomp>       z>DilatedResidualEncoder.normalize_dilations.<locals>.<listcomp>
isinstancer3   rD   rC   r   rY   r   rN         z*DilatedResidualEncoder.normalize_dilations)r   r   r   r3   r   r    r=   r   r   r   r1   r   r   r
   staticmethodrN   r   r   r   r   r   r?   j   s:    	


r?   c                       r>   )DilatedResidualDecoderc                 C   r!   r   r   r"   r   r   r   r#      r$   zDilatedResidualDecoder.<lambda>r@   rA   upsampling_unitrC   rD   rE   rF   r)   r   Nc	                    s   t    |dtt|d   }	|	d d d }	| ||}
|
d d d }
||	d dg}t||
|	d d |	dd  D ]\}}}}||||| |D ]}|t||| qNq=||||d t	j
| | _d S )Nr+   r*   rH   r   rG   rI   rJ   )r   r@   rA   rb   rC   rD   rE   rF   r)   rQ   rR   r   rS   r7   r8   r&   r   r   r   r
      s   
zDilatedResidualDecoder.__init__c                    rT   )Nr   c                    rU   r   r   rV   rY   r   r   rZ      r[   z>DilatedResidualDecoder.normalize_dilations.<locals>.<listcomp>r\   r^   r   rY   r   rN      r_   z*DilatedResidualDecoder.normalize_dilations)r   r   r   r3   r   r    r6   r   r   r   r1   r   r   r
   r`   rN   r   r   r   r   r   ra      s:    	


ra   )typingr   r   r   r   numpyrK   r   torch.nnr   r   r4   r   r   r    r6   r=   r?   ra   r   r   r   r   <module>   s    

'