
    kh                     &   d Z ddlZddlmZmZmZ ddlZddlmc m	Z
 ddlmZ ddededed	eeee   f   fd
ZdedededefdZddededefdZ	 ddee   dee   dee   dee   d	ee   f
dZ	 	 ddee   dee   dee   defdZd	eeef   fdZy)zD Padding Helpers

Hacked together by / Copyright 2020 Ross Wightman
    N)ListTupleUnion   )	to_2tuplekernel_sizestridedilationreturnc           
          t        | ||fD cg c]  }t        |t        t        f       c}      rBt	        |       t	        |      t	        |      }}} t        | ||      D cg c]
  }t        |  c}S |dz
  || dz
  z  z   dz  }|S c c}w c c}w )Nr      )any
isinstancetuplelistr   zipget_padding)r   r	   r
   _vapaddings          O/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/layers/padding.pyr   r      s    
;2QRQJq5$-(RS(1+(>	&@QS\]eSfXV),[&()KLAQLL
h+/::q@GN	 SLs   B!Bxc                    t        | t        j                        r=t        j                  | |z  j	                         dz
  |z  |dz
  |z  z   dz   | z
  d      S t        t        j                  | |z        dz
  |z  |dz
  |z  z   dz   | z
  d      S )Nr   r   )min)r   torchTensorclampceilmaxmath)r   r   r	   r
   s       r   get_same_paddingr"      s    !U\\"{{QZ--/!3v=qT\@\\_``cddjkllDIIa&j)A-7;?h:VVYZZ]^^`abb    c           
      6   t        | ||fD cg c]  }t        |t        t        f       c}      rKt	        |       t	        |      t	        |      }}} t        t        | ||      D cg c]
  }t        |  c}      S |dk(  xr || dz
  z  dz  dk(  S c c}w c c}w )Nr   r   r   )r   r   r   r   r   allr   is_static_pad)r   r	   r
   r   r   r   s         r   r&   r&       s    
;2QRQJq5$-(RS(1+(>	&@QS\]eSfXVs;/QR!M1%RSSQ;BHa8A=BB SRs   B&Br   r   
input_sizec                     | \  }}|\  }}t        |||d   |d         }t        |||d   |d         }	|	dz  |	|	dz  z
  |dz  ||dz  z
  gS )Nr   r   r   )r"   )
r(   r   r	   r
   ihiwkhkwpad_hpad_ws
             r   pad_same_argr0   '   so     FBFBRVAY<ERVAY<EQJ
*EQJ
8JKKr#   valuec           	          | j                         dd  \  }}t        ||d   |d   |d         }t        ||d   |d   |d         }t        j                  | |dz  ||dz  z
  |dz  ||dz  z
  f|      } | S )Nr   r   r   )r1   )sizer"   Fpad)	r   r   r	   r
   r1   r*   r+   r.   r/   s	            r   pad_samer7   5   s     VVXbc]FBRQHQKHERQHQKHE	a%1*eeqj0%1*eeqj>PQY^_AHr#   c                     d}t        | t              rP| j                         } | dk(  r$t        |fi |rt	        |fi |} | |fS d} d}| |fS | dk(  rd} | |fS t	        |fi |} | |fS )NFsamer   Tvalid)r   strlowerr&   r   )r   r   kwargsdynamics       r   get_padding_valuer?   C   s    G'3--/f[3F3%k<V< G  G G G "+88GGr#   )r'   )r'   r   )__doc__r!   typingr   r   r   r   torch.nn.functionalnn
functionalr5   helpersr   intr   r"   r&   r0   floatr7   boolr?    r#   r   <module>rJ      s>    % %    S # S eTWY]^aYbTbNc c c# cs cc cCs CC Cs C %	
LI
L#Y
L S	
L s)	
L
 
#Y
L$ %#Y S	 s)	
 ud{9K r#   