
    RЦi                        S r SSKrSSKJr  SSKJs  Jr  SSKJrJ	r	J
r
Jr  SSKJr  SSKJr  SSKJrJr     SS\R&                  S	\\   S
\\   S\\   S\S\4S jjr\ " S S\R.                  5      5       r   SS\R&                  S	\\   S
\\   S\\   S\\   S\4S jjr\ " S S\R4                  5      5       rSS jrg)zMAvgPool2d w/ Same Padding

Hacked together by / Copyright 2020 Ross Wightman
    N)ListTupleOptionalUnion   )register_notrace_module)	to_2tuple)pad_sameget_padding_valuexkernel_sizestridepadding	ceil_modecount_include_padc                 L    [        XU5      n [        R                  " XUSXE5      $ Nr   r   )r
   F
avg_pool2d)r   r   r   r   r   r   s         V/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/layers/pool2d_same.pyavg_pool2d_samer      s%     	(A<<	UU    c                      ^  \ rS rSrSr    SS\\\\\4   4   S\\\\\\4   4      S\\\\\4   \	4   S\
S\
4
U 4S jjjrS	 rS
rU =r$ )AvgPool2dSame   z:Tensorflow like 'SAME' wrapper for 2D average pooling
    r   r   r   r   r   c                 T   > [        U5      n[        U5      n[        TU ]	  XSXE5        g r   r	   super__init__)selfr   r   r   r   r   	__class__s         r   r    AvgPool2dSame.__init__    s*      ,6"fiSr   c                     [        XR                  U R                  5      n[        R                  " XR                  U R                  U R
                  U R                  U R                  5      $ N)r
   r   r   r   r   r   r   r   r!   r   s     r   forwardAvgPool2dSame.forward,   sN    Q(($++6||dllDNNDLbLbd 	dr    )Nr   FT__name__
__module____qualname____firstlineno____doc__r   intr   r   strboolr    r'   __static_attributes____classcell__r"   s   @r   r   r      s    
 =A89#&*
TsE#s(O34
T U3c3h#789
T 3c3h45	
T
 
T  $
T 
Td dr   r   dilationc                 ^    [        XU[        S5      * S9n [        R                  " XUSXE5      $ Ninf)valuer   )r
   floatr   
max_pool2d)r   r   r   r   r6   r   s         r   max_pool2d_samer=   2   s-     	e}=A<<LLr   c                      ^  \ rS rSrSr    SS\\\\\4   4   S\\\\\\4   4      S\\\\\4   \	4   S\\\\\4   4   S\
4
U 4S jjjrS	 rS
rU =r$ )MaxPool2dSame>   z6Tensorflow like 'SAME' wrapper for 2D max pooling
    r   r   r   r6   r   c                 j   > [        U5      n[        U5      n[        U5      n[        TU ]	  XSXE5        g r   r   )r!   r   r   r   r6   r   r"   s         r   r    MaxPool2dSame.__init__B   s4      ,6"X&fhJr   c                     [        XR                  U R                  [        S5      * S9n[        R
                  " XR                  U R                  SU R                  U R                  5      $ r8   )r
   r   r   r;   r   r<   r6   r   r&   s     r   r'   MaxPool2dSame.forwardO   sL    Q(($++eEl]K||A//fdmmUYUcUcddr   r)   )Nr   r   Fr*   r5   s   @r   r?   r?   >   s    
 =A8945#KsE#s(O34K U3c3h#789K 3c3h45	K
 CsCx01K K Ke er   r?   c                 ^   U=(       d    UnUR                  SS5      n[        XA4SU0UD6u  pEU(       a2  U S:X  a  [        U4SU0UD6$ U S:X  a  [        U4SU0UD6$  SU  35       eU S:X  a  [        R
                  " U4X$S.UD6$ U S:X  a  [        R                  " U4X$S.UD6$  SU  35       e)Nr    r   avgmaxzUnsupported pool type )r   r   )popr   r   r?   nn	AvgPool2d	MaxPool2d)	pool_typer   r   kwargsr   
is_dynamics         r   create_pool2drP   T   s    "{FjjB'G+GZZSYZG FVFvFF% FVFvFF>29+>>5<<VFVvVV%<<VFVvVV>29+>>5r   )r   FT)r   )r   r   Fr%   )r/   torchtorch.nnrJ   torch.nn.functional
functionalr   typingr   r   r   r   _fxr   helpersr	   r   r
   r   Tensorr0   r2   r   rK   r   r=   rL   r?   rP   r)   r   r   <module>rY      s2       / / (  0 $"&
V<<
V#Y
V S	
V c	
V
 
V  
V dBLL d d2 $$	M<<	M#Y	M S		M c		M
 s)	M 	M eBLL e e*?r   