
    kh                     (   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	m
Z
 ddlmZ ddlmZmZ 	 	 ddee   dee   d	ee   d
edef
dZ G d dej&                        Z	 	 ddee   dee   d	ee   dee   d
ef
dZ G d dej,                        ZddZy)zN AvgPool2d w/ Same Padding

Hacked together by / Copyright 2020 Ross Wightman
    N)ListTupleOptional   )	to_2tuple)pad_sameget_padding_valuekernel_sizestridepadding	ceil_modecount_include_padc                 P    t        | ||      } t        j                  | ||d||      S Nr   r   )r   F
avg_pool2d)xr
   r   r   r   r   s         S/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/layers/pool2d_same.pyavg_pool2d_samer      s,     	K(A<<;	CTUU    c                   0     e Zd ZdZddef fdZd Z xZS )AvgPool2dSamez; Tensorflow like 'SAME' wrapper for 2D average pooling
    r
   c                 `    t        |      }t        |      }t        t        |   ||d||       y r   )r   superr   __init__)selfr
   r   r   r   r   	__class__s         r   r   zAvgPool2dSame.__init__   s/    ,6"mT+KTefr   c                     t        || j                  | j                        }t        j                  || j                  | j                  | j
                  | j                  | j                        S N)r   r
   r   r   r   r   r   r   r   r   s     r   forwardzAvgPool2dSame.forward   sR    Q(($++6||tdllDNNDLbLbd 	dr   )Nr   FT__name__
__module____qualname____doc__intr   r"   __classcell__r   s   @r   r   r      s    gC g
dr   r   dilationc                 h    t        | ||t        d             } t        j                  | ||d||      S Ninf)valuer   )r   floatr   
max_pool2d)r   r
   r   r   r+   r   s         r   max_pool2d_samer2   #   s3     	Ke}=A<<;)LLr   c                   0     e Zd ZdZddef fdZd Z xZS )MaxPool2dSamez7 Tensorflow like 'SAME' wrapper for 2D max pooling
    r
   c                 v    t        |      }t        |      }t        |      }t        t        |   ||d||       y r   )r   r   r4   r   )r   r
   r   r   r+   r   r   s         r   r   zMaxPool2dSame.__init__-   s9    ,6"X&mT+KS\]r   c                     t        || j                  | j                  t        d             }t	        j
                  || j                  | j                  d| j                  | j                        S r-   )r   r
   r   r0   r   r1   r+   r   r!   s     r   r"   zMaxPool2dSame.forward3   sP    Q(($++eEl]K||At//fdmmUYUcUcddr   )Nr   r   Fr#   r*   s   @r   r4   r4   *   s    ^C ^er   r4   c                 F   |xs |}|j                  dd      }t        ||fd|i|\  }}|r0| dk(  rt        |fd|i|S | dk(  rt        |fd|i|S J d|         | dk(  rt	        j
                  |f||d|S | dk(  rt	        j                  |f||d|S J d|         )Nr    r   avgmaxzUnsupported pool type )r   r   )popr	   r   r4   nn	AvgPool2d	MaxPool2d)	pool_typer
   r   kwargsr   
is_dynamics         r   create_pool2drB   8   s    "{FjjB'G+G[ZZSYZGZ FVFvFF% FVFvFF>29+>>5<<VFGVvVV%<<VFGVvVV>29+>>5r   )r   FT)r   )r   r   Fr    )r'   torchtorch.nnr<   torch.nn.functional
functionalr   typingr   r   r   helpersr   r   r   r	   r(   boolr   r=   r   r2   r>   r4   rB    r   r   <module>rK      s        ( (  0 X^GKVDI VtCy V4PS9 V#V@DVdBLL d LR8=MS	M+/9M?CCyMs)M15MeBLL e?r   