o
    -i                     @   s   d Z ddlZddlmZ ddlZddlmZ ddlm  mZ	 ddl
mZ ddlmZ G dd deZedG d	d
 d
eZG dd deZedG dd deZdS )zConv Layer Class.    N)Literal)CustomOp)is_torch_equalc                       s   e Zd ZU dZeed< 						dddd	ed
edeeedf B deeedf B deeedf B ed B deeedf B dededed de	j
dB ddf fddZdefddZ  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
                   s  t    |
d u rt }
ddh}t|tr%||vr%td| d| d|dkr<t|tr2|d ntdd |D }n|dkrBd	}t|trM|f| j	 n|}t|trZ|f| j	 n|}t|trg|f| j	 n|}t|trt|f| j	 n|}|dkrt
d
d |D rtd|| _|| _|| _|| _|| _|| _|| _|	| _| j| jkot
| j o| jdk| _|t| j | _ttj||| g|R d|
i| _|rttj| j|
d| _d S | dd  d S )Nr   r   zInvalid padding string 'z'. Expected one of .   c                 s   s    | ]}|d  V  qdS )r   N ).0kr   r   \/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/model_executor/layers/conv.py	<genexpr>3       z)ConvLayerBase.__init__.<locals>.<genexpr>r   c                 s   s    | ]}|d kV  qdS )r   Nr   )r   sr   r   r   r    A   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__r   r   r%      sj   


	zConvLayerBase.__init__c                 C   sn   d| j  d}|d| j d7 }|d| j d7 }|d| j d7 }|d| j d7 }|d| jd u 7 }|S )Nzin_channels=z, zout_channels=zkernel_size=zstride=zpadding=zbias=)r   r   r   r   r   r   )r7   r"   r   r   r   
extra_reprb   s   zConvLayerBase.extra_repr)r   r   r   r   Tr   )__name__
__module____qualname____doc__r+   __annotations__r,   r   boolr&   r#   r%   r)   r;   __classcell__r   r   r9   r   r      sF   
 	
Mr   conv2dc                   @   l   e Zd ZdZdZdejdejfddZdejdejfddZdejdejfd	d
Z	dejdejfddZ
dS )Conv2dLayerzConv layer with Conv2d.r   xr   c                 C   s   |  dksJ |j\}}}}| j\}}|| || }}|d||d||}|ddddddd| j}t|| j	
| j| j| j}|
|||| jdddd}|S )N   r      r   r      dimshaper   unfoldpermutereshaper1   Flinearr5   viewr   r   )r7   rF   BCHWK1K2r   r   r   _forward_mulmatu   s   
zConv2dLayer._forward_mulmatc              	   C   8   |  dksJ tj|| j| j| j| j| j| jd}|S )NrG   r   r   r   r   )	rL   rQ   rC   r5   r   r   r   r   r   r7   rF   r   r   r   _forward_conv      	zConv2dLayer._forward_convc                 C   s*   |  dksJ | jr| |S | |S )z>Expected input shape: (batch_size, in_channels, height, width)rG   )rL   r.   rZ   r^   r]   r   r   r   forward_native   s   

zConv2dLayer.forward_nativec                 C   s
   |  |S )N)r^   r]   r   r   r   forward_cuda   s   
zConv2dLayer.forward_cudaNr<   r=   r>   r?   r   r&   TensorrZ   r^   r`   ra   r   r   r   r   rE   m   s    rE   c                       s   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B ddf fddZ	dej
dej
f fddZ  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
                   sL   |d urt d|d | _|d | _d}t j|||||||||	|
d
 d S )Nz=Argument padding should be set to None for CausalConv2dLayer.r   r   r	   )r*   _left_padding_right_paddingr$   r%   )r7   r   r   r   r   r   r   r   r   r   r
   r9   r   r   r%      s&   


zCausalConv2dLayer.__init__rF   c                    s*   t j|| j| jddfd}t |}|S )Nr   )pad)rQ   rg   re   rf   r$   forwardr]   r9   r   r   rh      s   zCausalConv2dLayer.forward)r   r   r   Tr   )r<   r=   r>   r?   r+   rA   r)   r&   r#   r%   rc   rh   rB   r   r   r9   r   rd      sJ    	
#rd   conv3dc                   @   rD   )Conv3dLayerzConv layer with Conv3d.rH   rF   r   c           
   
   C   s   |  dksJ |j\}}}}}| j\}}}	|| || ||	 }}}|d||d||d|	|	}|ddddddddd	| j}t|| j	
| j| j| j}|
||||| jddddd}|S )
NrI   r   rH   rG   r   r         rJ   rK   )
r7   rF   rT   rU   TrV   rW   rX   rY   K3r   r   r   rZ      s   """zConv3dLayer._forward_mulmatc              	   C   r[   )NrI   r\   )	rL   rQ   ri   r5   r   r   r   r   r   r]   r   r   r   r^      r_   zConv3dLayer._forward_convc                 C   s   | j r| |S | |S )zDExpected input shape: (batch_size, in_channels, time, height, width))r.   rZ   r^   r]   r   r   r   r`      s   

zConv3dLayer.forward_nativec                 C   s*   | j rtdstdr| |S | |S )Nz2.9.0z2.9.1)r.   r   rZ   r^   r]   r   r   r   ra      s   

zConv3dLayer.forward_cudaNrb   r   r   r   r   rj      s    rj   )r?   r/   typingr   r&   torch.nnr2   torch.nn.functional
functionalrQ   vllm.model_executor.custom_opr   vllm.utils.torch_utilsr   r   registerrE   rd   rj   r   r   r   r   <module>   s   ]05