o
    
j                     @   s:   d dl mZ d dlmZ d dlmZ G dd dejZdS )    )nn)weight_norm)remove_parametrizationsc                       s,   e Zd Z fddZdd Zdd Z  ZS )ResidualStackc           	         s   t    |d d dksJ d|d d }t | _t|D ]7}|}|| }|| }|  jttdt|t	tj
  ||ddtdt	tj
  dddg7  _q t fd	d
t|D | _d S )N      r   z [!] kernel_size has to be odd.g?T)kernel_sizedilationbiasr   r
   c              	      s"   g | ]}t tj  d ddqS )r   Tr   )r   r   Conv1d).0_channels L/home/kuhnn/.local/lib/python3.10/site-packages/TTS/vocoder/layers/melgan.py
<listcomp>   s   " z*ResidualStack.__init__.<locals>.<listcomp>)super__init__r   
ModuleListblocksrange
Sequential	LeakyReLUReflectionPad1dr   r   	shortcuts)	selfr   num_res_blocksr   base_paddingidxlayer_kernel_sizelayer_dilationlayer_padding	__class__r   r   r      s,   



zResidualStack.__init__c                 C   s,   t | j| jD ]\}}|||| }q|S )N)zipr   r   )r   xblockshortcutr   r   r   forward"   s   zResidualStack.forwardc                 C   sB   t | j| jD ]\}}t|d d t|d d t|d qd S )Nr   weight   )r&   r   r   r   )r   r(   r)   r   r   r   remove_weight_norm'   s
   z ResidualStack.remove_weight_norm)__name__
__module____qualname__r   r*   r-   __classcell__r   r   r$   r   r      s    r   N)torchr   torch.nn.utils.parametrizationsr   torch.nn.utils.parametrizer   Moduler   r   r   r   r   <module>   s    