U
    ¯Ê¹jå  ã                   @   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ee ee ee eed
œdd„ZG dd„ dejƒZdee ee ee ee edœ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   úV/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/layers/pool2d_same.pyÚavg_pool2d_same   s    r   c                       s0   e Zd ZdZdedœ‡ fdd„Zd	d
„ Z‡  ZS )ÚAvgPool2dSamez; Tensorflow like 'SAME' wrapper for 2D average pooling
    Nr   FT©r
   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   )r
   r   r   Údilationr   c                 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                       s0   e Zd ZdZdedœ‡ fdd„Zd	d
„ Z‡  ZS )Ú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rNt|fd|i|—ŽS | dkrjt|fd|i|—ŽS dsÐtd| › �ƒ‚nR| dkržtj|f||dœ|—ŽS | dkr¾tj|f||dœ|—ŽS dsÐtd| › �ƒ‚d S )	Nr   Ú r   ÚavgÚmaxFzUnsupported pool type )r   r   )Úpopr   r   r.   ÚAssertionErrorÚnnÚ	AvgPool2dÚ	MaxPool2d)Z	pool_typer
   r   Úkwargsr   Z
is_dynamicr   r   r   Úcreate_pool2d8   s    r8   )r	   FT)r	   r&   F)N)r#   ZtorchZtorch.nnr4   Ztorch.nn.functionalZ
functionalr   Útypingr   r   r   Zhelpersr   r   r   r   r$   Úboolr   r5   r   r-   r6   r.   r8   r   r   r   r   Ú<module>   s4       ÿ ÿ    þ   þ