
    kh                     8   d Z ddlZddlmZ ddlmc mZ ddlmZm	Z	 ddl
mZmZ ddlmZmZmZ dZ	 	 	 	 	 ddej$                  d	e	ej$                     d
eeef   deeef   deeef   defdZ G d dej*                        Z G d dej*                        Zd Zy)zK Conv2d w/ Same Padding

Hacked together by / Copyright 2020 Ross Wightman
    N)TupleOptional   )is_exportableis_scriptable)pad_samepad_same_argget_padding_valueFweightbiasstridepaddingdilationgroupsc           	      n    t        | |j                  dd  ||      } t        j                  | |||d||      S )Nr   r   )r   shapeFconv2d)xr   r   r   r   r   r   s          S/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/layers/conv2d_same.pyconv2d_samer      s:     	FLL%vx8A88AvtVVXvFF    c                   4     e Zd ZdZ	 	 	 	 	 d fd	Zd Z xZS )
Conv2dSamezD Tensorflow like 'SAME' convolution wrapper for 2D convolutions
    c	           
      :    t         t        |   ||||d|||       y )Nr   )superr   __init__
selfin_channelsout_channelskernel_sizer   r   r   r   r   	__class__s
            r   r   zConv2dSame.__init__"   s&     	j$({Ax	
r   c           	          t        || j                  | j                  | j                  | j                  | j
                  | j                        S )N)r   r   r   r   r   r   r   )r!   r   s     r   forwardzConv2dSame.forward2   s7    t{{DIIKKt}}dkk
 	
r   r   r   r   r   T__name__
__module____qualname____doc__r   r'   __classcell__r%   s   @r   r   r      s#     
 
r   r   c                   4     e Zd ZdZ	 	 	 	 	 d fd	Zd Z xZS )Conv2dSameExportz ONNX export friendly Tensorflow like 'SAME' convolution wrapper for 2D convolutions

    NOTE: This does not currently work with torch.jit.script
    c	           
      V    t         t        |   ||||d|||       d | _        d| _        y )Nr   r   )r   r1   r   padpad_input_sizer    s
            r   r   zConv2dSameExport.__init__@   s8     	.{Ax	
 $r   c           	         |j                         dd  }| j                  ^t        || j                  j                         dd  | j                  | j
                        }t        j                  |      | _        || _        | j                  |      }t        j                  || j                  | j                  | j                  | j                  | j
                  | j                        S )Nr   )sizer3   r	   r   r   r   nn	ZeroPad2dr4   r   r   r   r   r   )r!   r   
input_sizepad_args       r   r'   zConv2dSameExport.forwardR   s    VVXbc]
88":t{{/?/?/A"#/FUYUbUbcG||G,DH",DHHQKxxt{{DIIKKt}}dkk
 	
r   r(   r)   r/   s   @r   r1   r1   9   s#     %$
r   r1   c                    |j                  dd      }|j                  dd       t        ||fi |\  }}|r8t        r$t	               rt               rJ t        | ||fi |S t        | ||fi |S t        j                  | ||fd|i|S )Nr    r   F)
pop
setdefaultr
   _USE_EXPORT_CONVr   r   r1   r   r7   Conv2d)in_chsout_chsr$   kwargsr   
is_dynamics         r   create_conv2d_padrE   `   s    jjB'G
fe$+G[KFKGZ$&&#FG[KFKKfg{EfEEyy+QwQ&QQr   )Nr   r   r   rF   r   )r-   torchtorch.nnr7   torch.nn.functional
functionalr   typingr   r   configr   r   r   r   r	   r
   r?   Tensorintr   r@   r   r1   rE    r   r   <module>rP      s        " 0 > >   (,"(#)$*
G
G u||$
G c3h	
G
 sCx
G S/
G 
G
 
6$
ryy $
NRr   