o
    پi                     @   s   d Z ddlZddlmZ ddlm  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dZG dd dejZ		dd
ee dee dee dee def
ddZG dd dejZdddZdS )zN AvgPool2d w/ Same Padding

Hacked together by / Copyright 2020 Ross Wightman
    N)ListTupleOptional   )	to_2tuple)pad_sameget_padding_valuer   r   FTkernel_sizestridepadding	ceil_modecount_include_padc                 C   s    t | ||} t| ||d||S Nr	   )r   F
avg_pool2d)xr
   r   r   r   r    r   K/home/ubuntu/.local/lib/python3.10/site-packages/timm/layers/pool2d_same.pyavg_pool2d_same   s   r   c                       0   e Zd ZdZddef fddZd	d
 Z  ZS )AvgPool2dSamez; Tensorflow like 'SAME' wrapper for 2D average pooling
    Nr   FTr
   c                    s,   t |}t |}tt| ||d|| d S r   )r   superr   __init__)selfr
   r   r   r   r   	__class__r   r   r      s   zAvgPool2dSame.__init__c                 C   s.   t || j| j}t|| j| j| j| j| jS N)r   r
   r   r   r   r   r   r   r   r   r   r   r   forward   s   zAvgPool2dSame.forward)Nr   FT__name__
__module____qualname____doc__intr   r   __classcell__r   r   r   r   r      s    r   r   r   dilationc                 C   s*   t | ||td d} t| ||d||S Ninf)valuer	   )r   floatr   
max_pool2d)r   r
   r   r   r(   r   r   r   r   max_pool2d_same#   s   r.   c                       r   )MaxPool2dSamez7 Tensorflow like 'SAME' wrapper for 2D max pooling
    Nr   r   Fr
   c                    s4   t |}t |}t |}tt| ||d|| d S r   )r   r   r/   r   )r   r
   r   r   r(   r   r   r   r   r   -   s   zMaxPool2dSame.__init__c                 C   s6   t || j| jtd d}t|| j| jd| j| jS r)   )r   r
   r   r,   r   r-   r(   r   r   r   r   r   r   3   s   zMaxPool2dSame.forward)Nr   r   Fr    r   r   r   r   r/   *   s    r/   c                 K   s   |p|}| dd}t||fd|i|\}}|r<| dkr't|fd|i|S | dkr5t|fd|i|S J d|  | dkrLtj|f||d|S | dkr\tj|f||d|S J d|  )	Nr    r   avgmaxFzUnsupported pool type )r   r   )popr   r   r/   nn	AvgPool2d	MaxPool2d)	pool_typer
   r   kwargsr   
is_dynamicr   r   r   create_pool2d8   s   r:   )r	   FT)r	   r'   Fr   )r$   torchtorch.nnr4   torch.nn.functional
functionalr   typingr   r   r   helpersr   r   r   r   r%   boolr   r5   r   r.   r6   r/   r:   r   r   r   r   <module>   s<    

