a
    d                     @   sH   d Z ddlmZ ddlm  mZ ddlmZmZ G dd dej	Z
dS )z? Median Pool
Hacked together by / Copyright 2020 Ross Wightman
    N   )	to_2tuple	to_4tuplec                       s2   e Zd ZdZd fdd	Zdd	 Zd
d Z  ZS )MedianPool2daH   Median pool (usable as median filter when stride=1) module.

    Args:
         kernel_size: size of pooling kernel, int or 2-tuple
         stride: pool stride, int or 2-tuple
         padding: pool padding, int or 4-tuple (l, r, t, b) as in pytorch F.pad
         same: override padding and enforce same padding, boolean
       r   r   Fc                    s6   t t|   t|| _t|| _t|| _|| _d S )N)	superr   __init__r   kstrider   paddingsame)selfZkernel_sizer
   r   r   	__class__ `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/layers/median_pool.pyr      s
    


zMedianPool2d.__init__c                 C   s   | j r| dd  \}}|| jd  dkrHt| jd | jd  d}nt| jd || jd   d}|| jd  dkrt| jd | jd  d}nt| jd || jd   d}|d }|| }|d }|| }	||||	f}
n| j}
|
S )N   r   r   )r   sizer
   maxr	   r   )r   xZihiwphpwplprptZpbr   r   r   r   _padding   s    zMedianPool2d._paddingc                 C   st   t j|| |dd}|d| jd | jd d| jd | jd }| | d d d j	d	d
d }|S )NZreflect)moder   r   r   r      )r   )Zdim)
Fpadr   Zunfoldr	   r
   
contiguousviewr   Zmedian)r   r   r   r   r   forward-   s    0*zMedianPool2d.forward)r   r   r   F)__name__
__module____qualname____doc__r   r   r$   __classcell__r   r   r   r   r   	   s   r   )r(   Ztorch.nnnnZtorch.nn.functionalZ
functionalr    Zhelpersr   r   Moduler   r   r   r   r   <module>   s   