o
    پi                     @   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)selfkernel_sizer
   r   r   	__class__ K/home/ubuntu/.local/lib/python3.10/site-packages/timm/layers/median_pool.pyr      s
   



zMedianPool2d.__init__c                 C   s   | j rq| dd  \}}|| jd  dkr$t| jd | jd  d}nt| jd || jd   d}|| jd  dkrJt| jd | jd  d}nt| jd || jd   d}|d }|| }|d }|| }	||||	f}
|
S | j}
|
S )N   r   r   )r   sizer
   maxr	   r   )r   xihiwphpwplprpt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 )Nreflect)moder   r   r   r      )r#   )dim)
Fpadr   unfoldr	   r
   
contiguousviewr   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/   torch.nnnntorch.nn.functional
functionalr%   helpersr   r   Moduler   r   r   r   r   <module>   s
    