a
    d                     @   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   `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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sJ d|  nR| dkrtj|f||d|S | dkrtj|f||d|S dsJ d|  d S )	Nr    r   avgmaxFzUnsupported pool type )r   r   )popr   r   r.   nn	AvgPool2d	MaxPool2d)Z	pool_typer
   r   kwargsr   Z
is_dynamicr   r   r   create_pool2d8   s    r7   )r	   FT)r	   r&   F)N)r#   ZtorchZtorch.nnr3   Ztorch.nn.functionalZ
functionalr   typingr   r   r   Zhelpersr   r   r   r   r$   boolr   r4   r   r-   r5   r.   r7   r   r   r   r   <module>   s(       