o
    پi                     @   s  d Z ddlZddlmZmZmZ ddlZddlm  m	Z
 ddlmZ ddededed	eeee f fd
dZdedededefddZddededefddZ	ddee dee dee dee d	ee f
ddZ		ddee dee dee defddZd	eeef fd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                 K   sf   t dd | ||fD r%t| t|t|} }}dd t| ||D S |d || d   d }|S )Nc                 S      g | ]	}t |ttfqS  
isinstancetuplelist.0vr   r   G/home/ubuntu/.local/lib/python3.10/site-packages/timm/layers/padding.py
<listcomp>       zget_padding.<locals>.<listcomp>c                 S      g | ]}t | qS r   )get_paddingr   ar   r   r   r          r      )anyr   zip)r   r   r	   _paddingr   r   r   r      s
   r   xc                 C   sn   t | tjrtj| |  d | |d |  d |  ddS tt| | d | |d |  d |  dS )Nr   r   )min)r   torchTensorclampceilmaxmath)r!   r   r   r	   r   r   r   get_same_padding   s   20r)   c                 K   sj   t dd | ||fD r't| t|t|} }}tdd t| ||D S |dko4|| d  d dkS )Nc                 S   r   r   r   r   r   r   r   r   !   r   z!is_static_pad.<locals>.<listcomp>c                 S   r   r   )is_static_padr   r   r   r   r   #   r   r   r   r   )r   r   allr   )r   r   r	   r   r   r   r   r*       s   r*   r   r   
input_sizec           
      C   s`   | \}}|\}}t |||d |d }t |||d |d }	|	d |	|	d  |d ||d  gS )Nr   r   r   )r)   )
r-   r   r   r	   ihiwkhkwpad_hpad_wr   r   r   pad_same_arg'   s
   $r4   valuec           	      C   s|   |   dd  \}}t||d |d |d }t||d |d |d }tj| |d ||d  |d ||d  f|d} | S )Nr   r   r   )r5   )sizer)   Fpad)	r!   r   r   r	   r5   r.   r/   r2   r3   r   r   r   pad_same5   s
   0r:   c                 K   s   d}t | tr=|  } | dkr+t|fi |r#t|fi |} | |fS d} d}| |fS | dkr5d} | |fS t|fi |} | |fS )NFsamer   Tvalid)r   strlowerr*   r   )r    r   kwargsdynamicr   r   r   get_padding_valueC   s   
rA   )r,   )r,   r   )__doc__r(   typingr   r   r   r#   torch.nn.functionalnn
functionalr8   helpersr   intr   r)   r*   r4   floatr:   boolrA   r   r   r   r   <module>   sB    (	

