
    .`i                     $   d Z ddlZddlmZ ddlZddlmZ ddlmc mZ	 ddl
mZ ddlmZ  G d de          Z ej        d           G d	 d
e                      Z G d de          Z ej        d           G d de                      ZdS )zConv Layer Class.    N)Literal)CustomOp)is_torch_equalc                       e Zd ZU dZeed<   	 	 	 	 	 	 dddd	ed
edeeedf         z  deeedf         z  deeedf         z  ed         z  deeedf         z  dededed         de	j
        dz  ddf fdZdefdZ xZS )ConvLayerBasezConv layer base class.num_dim   r   TzerosNparams_dtypein_channelsout_channelskernel_size.stridepadding)samevaliddilationgroupsbiaspadding_mode)r
   reflect	replicatecircularr   returnc
                   t                                                       |
t          j                    }
ddh}t	          |t
                    r||vrt          d| d| d          |dk    r4t	          |t                    r|dz  nt          d |D                       }n|dk    rd}t	          |t                    r|f| j	        z  n|}t	          |t                    r|f| j	        z  n|}t	          |t                    r|f| j	        z  n|}t	          |t                    r|f| j	        z  n|}|dk    r(t          d	 |D                       rt          d
          || _        || _        || _        || _        || _        || _        || _        |	| _        | j        | j        k    ot          | j                   o
| j        dk    | _        |t)          j        | j                  z  | _        t/          j        t          j        |||z  g|R d|
i          | _        |r4t/          j        t          j        | j        |
                    | _        d S |                     dd            d S )Nr   r   zInvalid padding string 'z'. Expected one of .   c              3       K   | ]	}|d z  V  
dS )r   N ).0ks     s/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/model_executor/layers/conv.py	<genexpr>z)ConvLayerBase.__init__.<locals>.<genexpr>3   s&      77a16777777    r   c              3   "   K   | ]
}|d k    V  dS )r	   Nr    )r!   ss     r#   r$   z)ConvLayerBase.__init__.<locals>.<genexpr>A   s&      $<$<Q!V$<$<$<$<$<$<r%   z8padding='same' is not supported for strided convolutionsr	   dtype)r(   r   )super__init__torchget_default_dtype
isinstancestr
ValueErrorinttupler   anyr   r   r   r   r   r   r   r   enable_linearmathprod
input_sizenn	Parameteremptyweightr   register_parameter)selfr   r   r   r   r   r   r   r   r   r   valid_padding_strings	__class__s               r#   r*   zConvLayerBase.__init__   s    	 244L!' 1gs## 	7L(L(L<7 < <#8< < <  
 f k3//8q  77;77777 G
 G +s++[NT\)) 	
 .8-D-DP&T\))&/9'3/G/GT7*t|++W1;Hc1J1JXH;--PXf$<$<V$<$<$<!<!<WXXX&(& ( , !%%%!q  	
 &	$2B(C(CClKv%    #	 
 
  	2U[1B,%W%W%WXXDIII##FD11111r%   c                     d| j          d}|d| j         dz  }|d| j         dz  }|d| j         dz  }|d| j         dz  }|d| j        d u z  }|S )Nzin_channels=z, zout_channels=zkernel_size=zstride=zpadding=zbias=)r   r   r   r   r   r   )r<   r'   s     r#   
extra_reprzConvLayerBase.extra_reprb   s    /4+///	2T.2222	0D,0000	&t{&&&&	(((((	,TYd*,,,r%   )r	   r   r	   r	   Tr
   )__name__
__module____qualname____doc__r0   __annotations__r1   r   boolr+   r(   r*   r.   r@   __classcell__r>   s   @r#   r   r      s]          LLL )*DE*+MTK2 ,0K2 K2 K2K2 K2 5c?*	K2
 eCHo%K2 uS#X&)AAK2 c3h'K2 K2 K2 IJK2 kD(K2 
K2 K2 K2 K2 K2 K2ZC        r%   r   conv2dc                       e Zd ZdZdZdej        dej        fdZdej        dej        fdZdej        dej        fdZ	dej        dej        fdZ
d	S )
Conv2dLayerzConv layer with Conv2d.r   xr   c                    |                                 dk    sJ |j        \  }}}}| j        \  }}||z  ||z  }}|                    d||                              d||          }|                    dddddd                              d| j                  }t          j        || j	        
                    | j        | j                  | j                  }|
                    |||| j                                      dddd          }|S )N   r      r   r	      dimshaper   unfoldpermutereshaper6   Flinearr:   viewr   r   )r<   rL   BCHWK1K2s           r#   _forward_mulmatzConv2dLayer._forward_mulmatu   s    uuww!||||W
1a!BBwR1HHQB&&q"b11IIaAq!Q''//DODDHKT.@@I
 

 FF1aD-..66q!QBBr%   c           	          |                                 dk    sJ t          j        || j        | j        | j        | j        | j        | j                  }|S )NrN   r   r   r   r   )	rS   rX   rI   r:   r   r   r   r   r   r<   rL   s     r#   _forward_convzConv2dLayer._forward_conv   U    uuww!||||HKI;L];
 
 
 r%   c                     |                                 dk    sJ | j        r|                     |          S |                     |          S )z>Expected input shape: (batch_size, in_channels, height, width)rN   )rS   r3   ra   re   rd   s     r#   forward_nativezConv2dLayer.forward_native   sJ    uuww!|||| 	)''***%%a(((r%   c                 ,    |                      |          S )N)re   rd   s     r#   forward_cudazConv2dLayer.forward_cuda   s    !!!$$$r%   NrA   rB   rC   rD   r   r+   Tensorra   re   rh   rj   r    r%   r#   rK   rK   m   s        !! G %,    u|     ) ) ) ) ) )%el %u| % % % % % %r%   rK   c                        e Zd ZdZ	 	 	 	 	 dddded	ed
edededededededej        dz  ddf fdZ	dej
        dej
        f fdZ xZS )CausalConv2dLayerz
    A causal version of nn.Conv2d where each location in the 2D matrix would
    have no access to locations on its right or down
    All arguments are the same as nn.Conv2d except padding which should be
    set as None
    r   r	   Tr
   Nr   r   r   r   r   r   r   r   r   r   r   r   c
                    |t          d          |dz
  | _        |dz
  | _        d}t                                          |||||||||	|

  
         d S )Nz=Argument padding should be set to None for CausalConv2dLayer.r	   r   r   )r/   _left_padding_right_paddingr)   r*   )r<   r   r   r   r   r   r   r   r   r   r   r>   s              r#   r*   zCausalConv2dLayer.__init__   s     O   #./#)A:% 	 	
 	
 	
 	
 	
r%   rL   c                     t          j        || j        | j        ddf          }t	                                          |          }|S )Nr   )pad)rX   rs   rp   rq   r)   forward)r<   rL   r>   s     r#   rt   zCausalConv2dLayer.forward   sB     E!$,d.A1aHIIIGGOOAr%   )r   r	   r	   Tr
   )rA   rB   rC   rD   r0   rF   r.   r+   r(   r*   rl   rt   rG   rH   s   @r#   rn   rn      s         #!
 ,0!
 !
 !
!
 !
 	!

 !
 !
 !
 !
 !
 !
 kD(!
 
!
 !
 !
 !
 !
 !
F< 
         r%   rn   conv3dc                       e Zd ZdZdZdej        dej        fdZdej        dej        fdZdej        dej        fdZ	dej        dej        fdZ
d	S )
Conv3dLayerzConv layer with Conv3d.rO   rL   r   c           
      Z   |                                 dk    sJ |j        \  }}}}}| j        \  }}}	||z  ||z  ||	z  }}}|                    d||                              d||                              d|	|	          }|                    dddddddd                              d	| j                  }t          j        || j	        
                    | j        | j                  | j                  }|
                    ||||| j                                      ddddd          }|S )
NrP   r   rO   rN   r   r	         rQ   rR   )
r<   rL   r[   r\   Tr]   r^   r_   r`   K3s
             r#   ra   zConv3dLayer._forward_mulmat   s%   uuww!||||1aA%
Br'17AGa1HHQB&&q"b1188BCCIIaAq!Q1--55b$/JJHKT.@@I
 

 FF1aAt01199!Q1aHHr%   c           	          |                                 dk    sJ t          j        || j        | j        | j        | j        | j        | j                  }|S )NrP   rc   )	rS   rX   ru   r:   r   r   r   r   r   rd   s     r#   re   zConv3dLayer._forward_conv   rf   r%   c                 d    | j         r|                     |          S |                     |          S )zDExpected input shape: (batch_size, in_channels, time, height, width))r3   ra   re   rd   s     r#   rh   zConv3dLayer.forward_native   s5     	)''***%%a(((r%   c                     | j         r3t          d          st          d          r|                     |          S |                     |          S )Nz2.9.0z2.9.1)r3   r   ra   re   rd   s     r#   rj   zConv3dLayer.forward_cuda   sU      	+>'#:#: 	+nW>U>U 	+''***!!!$$$r%   Nrk   r    r%   r#   rw   rw      s        !! G %,    u|     ) ) ) ) ) )%el %u| % % % % % %r%   rw   )rD   r4   typingr   r+   torch.nnr7   torch.nn.functional
functionalrX   vllm.model_executor.custom_opr   vllm.utils.torch_utilsr   r   registerrK   rn   rw   r    r%   r#   <module>r      ss                            2 2 2 2 2 2 1 1 1 1 1 1Y Y Y Y YH Y Y Yz 8-% -% -% -% -%- -% -% -%`1 1 1 1 1 1 1 1j 82% 2% 2% 2% 2%- 2% 2% 2% 2% 2%r%   