
    ^j                        d Z ddlZddlmZ ddlmc mZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZmZ 	 	 	 ddej&                  d	ee   d
ee   dee   dedefdZe G d dej.                               Z	 	 	 ddej&                  d	ee   d
ee   dee   dee   defdZe G d dej4                               ZddZy)zN AvgPool2d 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                 P    t        | ||      } t        j                  | ||d||      S Nr   r   )r
   F
avg_pool2d)r   r   r   r   r   r   s         b/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/layers/pool2d_same.pyavg_pool2d_samer      s,     	K(A<<;	CTUU    c                        e Zd ZdZ	 	 	 	 d	deeeeef   f   deeeeeef   f      deeeeef   ef   de	de	f
 fdZ
d Z xZS )
AvgPool2dSamez; Tensorflow like 'SAME' wrapper for 2D average pooling
    r   r   r   r   r   c                 X    t        |      }t        |      }t        | 	  ||d||       y r   r	   super__init__)selfr   r   r   r   r   	__class__s         r   r   zAvgPool2dSame.__init__    s/      ,6"ffiARSr   c                     t        || j                  | j                        }t        j                  || j                  | j                  | j
                  | j                  | j                        S N)r
   r   r   r   r   r   r   r   r    r   s     r   forwardzAvgPool2dSame.forward,   sR    Q(($++6||tdllDNNDLbLbd 	dr   )Nr   FT__name__
__module____qualname____doc__r   intr   r   strboolr   r%   __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dr   r   dilationc                 h    t        | ||t        d             } t        j                  | ||d||      S Ninf)valuer   )r
   floatr   
max_pool2d)r   r   r   r   r0   r   s         r   max_pool2d_samer7   2   s3     	Ke}=A<<;)LLr   c                        e Zd ZdZ	 	 	 	 d	deeeeef   f   deeeeeef   f      deeeeef   ef   deeeeef   f   de	f
 fdZ
d Z xZS )
MaxPool2dSamez7 Tensorflow like 'SAME' wrapper for 2D max pooling
    r   r   r   r0   r   c                 n    t        |      }t        |      }t        |      }t        | 	  ||d||       y r   r   )r    r   r   r   r0   r   r!   s         r   r   zMaxPool2dSame.__init__B   s8      ,6"X&ffh	Jr   c                     t        || j                  | j                  t        d             }t	        j
                  || j                  | j                  d| j                  | j                        S r2   )r
   r   r   r5   r   r6   r0   r   r$   s     r   r%   zMaxPool2dSame.forwardO   sP    Q(($++eEl]K||At//fdmmUYUcUcddr   )Nr   r   Fr&   r/   s   @r   r9   r9   >   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er   r9   c                 F   |xs |}|j                  dd      }t        ||fd|i|\  }}|r0| dk(  rt        |fd|i|S | dk(  rt        |fd|i|S J d|         | dk(  rt	        j
                  |f||d|S | dk(  rt	        j                  |f||d|S J d|         )Nr    r   avgmaxzUnsupported pool type )r   r   )popr   r   r9   nn	AvgPool2d	MaxPool2d)	pool_typer   r   kwargsr   
is_dynamics         r   create_pool2drG   T   s    "{FjjB'G+G[ZZSYZGZ FVFvFF% FVFvFF>29+>>5<<VFGVvVV%<<VFGVvVV>29+>>5r   )r   FT)r   )r   r   Fr#   )r*   torchtorch.nnrA   torch.nn.functional
functionalr   typingr   r   r   r   _fxr   helpersr	   r   r
   r   Tensorr+   r-   r   rB   r   r7   rC   r9   rG    r   r   <module>rQ      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   