
    kh                     `    d Z ddlmZ ddlmc mZ ddlmZmZ  G d dej                        Z
y)z? Median Pool
Hacked together by / Copyright 2020 Ross Wightman
    N   )	to_2tuple	to_4tuplec                   0     e Zd ZdZd fd	Zd Zd Z x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
    c                     t         t        |           t        |      | _        t        |      | _        t        |      | _        || _        y )N)	superr   __init__r   kstrider   paddingsame)selfkernel_sizer   r   r   	__class__s        S/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/layers/median_pool.pyr
   zMedianPool2d.__init__   s;    lD*,;'' )	    c                 H   | j                   r|j                         dd  \  }}|| j                  d   z  dk(  r*t        | j                  d   | j                  d   z
  d      }n,t        | j                  d   || j                  d   z  z
  d      }|| j                  d   z  dk(  r*t        | j                  d   | j                  d   z
  d      }n,t        | j                  d   || j                  d   z  z
  d      }|dz  }||z
  }|dz  }||z
  }	||||	f}
|
S | j
                  }
|
S )N   r   r   )r   sizer   maxr   r   )r   xihiwphpwplprptpbr   s              r   _paddingzMedianPool2d._padding   s   99VVXab\FBDKKN"a'T[[^3Q7b4;;q>&9:A>DKKN"a'T[[^3Q7b4;;q>&9:A>qBbBqBbB2r2&G  llGr   c                    t        j                  || j                  |      d      }|j                  d| j                  d   | j
                  d         j                  d| j                  d   | j
                  d         }|j                         j                  |j                         d d dz         j                  d	
      d   }|S )Nreflect)moder   r      r      )r'   )dim)
Fpadr!   unfoldr   r   
contiguousviewr   median)r   r   s     r   forwardzMedianPool2d.forward-   s    EE!T]]1%I6HHQq	4;;q>299!TVVAYTUWLLN!u 45<<<DQGr   )r%   r   r   F)__name__
__module____qualname____doc__r
   r!   r/   __classcell__)r   s   @r   r   r   	   s    (r   r   )r3   torch.nnnntorch.nn.functional
functionalr)   helpersr   r   Moduler    r   r   <module>r<      s(       )(299 (r   