
    0;jin                     P    d Z ddlmZ ddlZddlmZ  G d dej                  ZdS )zConvolutionModule definition.    )TupleN)nnc                       e Zd ZdZd ej                    dddfdededej        d	ed
e	de	f fdZ
 ej        dej	                   ej        d          fdej        dej        dej        deej        ej        f         fdZ xZS )ConvolutionModulez%ConvolutionModule in Conformer model.   
batch_normFTchannelskernel_size
activationnormcausalbiasc           	      
   t                                                       t          j        |d|z  ddd|          | _        |rd}|dz
  | _        n|dz
  dz  dk    sJ |dz
  dz  }d| _        t          j        |||d|||          | _        |dv sJ |dk    r!d| _        t          j        |          | _	        n d	| _        t          j
        |          | _	        t          j        ||ddd|          | _        || _        d
S )zConstruct an ConvolutionModule object.
        Args:
            channels (int): The number of channels of conv layers.
            kernel_size (int): Kernel size of conv layers.
            causal (int): Whether use causal convolution or not
              r   )r
   stridepaddingr   )r   r   groupsr   )r   
layer_normr   FTN)super__init__r   Conv1dpointwise_conv1lorderdepthwise_convuse_layer_normBatchNorm1dr   	LayerNormpointwise_conv2r   )	selfr	   r
   r   r   r   r   r   	__class__s	           i/root/voice-cloning/.venv/lib/python3.11/site-packages/chatterbox/models/s3gen/transformer/convolution.pyr   zConvolutionModule.__init__   sP    	!yL 
  
  
  	G%/DKK  !Oq(A----"Q1,GDK i
 
 
 33333<"'Dx00DII"&DX..DI!y 
  
  
 %    r   r   r   )dtypexmask_padcachereturnc                    |                     dd          }|                    d          dk    r|                    | d           | j        dk    r|                    d          dk    r*t          j                            || j        dfdd          }nt|                    d          |                    d          k    sJ |                    d          |                    d          k    sJ t          j        ||fd          }|                    d          | j        k    sJ |dddd| j         df         }n!t          j	        d|j
        |j        	          }|                     |          }t          j                            |d          }|                     |          }| j        r|                     dd          }|                     |                     |                    }| j        r|                     dd          }|                     |          }|                    d          dk    r|                    | d           |                     dd          |fS )
a  Compute convolution module.
        Args:
            x (torch.Tensor): Input tensor (#batch, time, channels).
            mask_pad (torch.Tensor): used for batch padding (#batch, 1, time),
                (0, 0, 0) means fake mask.
            cache (torch.Tensor): left context cache, it is only
                used in causal convolution (#batch, channels, cache_t),
                (0, 0, 0) meas fake cache.
        Returns:
            torch.Tensor: Output tensor (#batch, time, channels).
        r   r   r   g        constant)dimNr$   )r%   device)	transposesizemasked_fill_r   r   
functionalpadtorchcatzerosr%   r-   r   glur   r   r   r   r   )r    r&   r'   r(   	new_caches        r"   forwardzConvolutionModule.forwardZ   s<   $ KK1 ==aNNH9c***;??zz!}}!!M%%a$+q)9:sKKzz!}}q		1111zz!}}q		1111Iuaja000FF1II++++!!!QQQ-.II
 IQWQXNNNI   ##MaQ'' "" 	"Aq!!AOODIIaLL)) 	"Aq!!A  ##==aNNH9c***{{1a  )++r#   )__name__
__module____qualname____doc__r   ReLUintModulestrboolr   r3   onesr5   Tensorr   r8   __classcell__)r!   s   @r"   r   r      s       // %')0) %"=% =%=%!=%  Y=% 	=%
 =% =% =% =% =% =% =%D ",IUZ!H!H!H)ek)44	7, 7,<7, ,7, |	7,
 
u|U\)	*7, 7, 7, 7, 7, 7, 7, 7,r#   r   )r<   typingr   r3   r   r?   r    r#   r"   <module>rG      sz     $ #             y, y, y, y, y,	 y, y, y, y, y,r#   