
    Ng                     j   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dS )zD Padding Helpers

Hacked together by / Copyright 2020 Ross Wightman
    N)ListTupleUnion   )	to_2tuplekernel_sizestridedilationreturnc                     t          d | ||fD                       rHt          |           t          |          t          |          }}} d t          | ||          D             S |dz
  || dz
  z  z   dz  }|S )Nc                 F    g | ]}t          |t          t          f          S  
isinstancetuplelist.0vs     O/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/layers/padding.py
<listcomp>zget_padding.<locals>.<listcomp>   &    RRRQJq5$-((RRR    c                      g | ]}t          | S r   )get_paddingr   as     r   r   zget_padding.<locals>.<listcomp>   s    LLLAQLLLr   r      )anyr   zip)r   r	   r
   _paddings        r   r   r      s    
RR;2QRRRSS M(1+(>(>	&@Q@QS\]eSfSfXVLL[&()K)KLLLL
h+/::q@GNr   xc                 *   t          | t          j                  r@t          j        | |z                                  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\"" c{QZ--//!3v=qT\@\\_``cddjkllllDIa&j))A-7;?h:VVYZZ]^^`abbbr   c                    t          d | ||fD                       rUt          |           t          |          t          |          }}} t          d t          | ||          D                       S |dk    o|| dz
  z  dz  dk    S )Nc                 F    g | ]}t          |t          t          f          S r   r   r   s     r   r   z!is_static_pad.<locals>.<listcomp>!   r   r   c                      g | ]}t          | S r   )is_static_padr   s     r   r   z!is_static_pad.<locals>.<listcomp>#   s    RRR!M1%RRRr   r   r   r   )r   r   allr    )r   r	   r
   r!   s       r   r0   r0       s    
RR;2QRRRSS T(1+(>(>	&@Q@QS\]eSfSfXVRRs;/Q/QRRRSSSQ;BHa8A=BBr   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,   )
r3   r   r	   r
   ihiwkhkwpad_hpad_ws
             r   pad_same_argr;   '   su     FBFBRVAY<<ERVAY<<EQJ
*EQJ
8JKKr   valuec           	      .   |                                  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   )r<   )sizer,   Fpad)	r#   r   r	   r
   r<   r5   r6   r9   r:   s	            r   pad_samerB   5   s     VVXXbcc]FBRQHQKHHERQHQKHHE	a%1*eeqj0%1*eeqj>PQY^___AHr   c                     d}t          | t                    rP|                                 } | dk    r t          |fi |rt	          |fi |} nd} d}n| dk    rd} nt	          |fi |} | |fS )NFsamer   Tvalid)r   strlowerr0   r   )r"   r   kwargsdynamics       r   get_padding_valuerJ   C   s    G'3 9--//f[33F33 %k<<V<< GG "+8888GGr   )r2   )r2   r   )__doc__r+   typingr   r   r   r&   torch.nn.functionalnn
functionalr@   helpersr   intr   r,   r0   r;   floatrB   boolrJ   r   r   r   <module>rT      s     % % % % % % % % % %                 S # S eTWY]^aYbTbNc    c c# cs cc c c c cC Cs CC Cs C C C C %	
L 
LI
L#Y
L S	
L s)	
L
 
#Y
L 
L 
L 
L$ % #Y S	 s)	
    ud{9K      r   