Ë
    éÓ^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Ó"ˆÜ‰Ñ˜ f¨f°iÐARÕ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×Ñ §¡¨d¯l©l¸D¿N¹NÈD×LbÑLbó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à˜s E¨#¨s¨(¡OÐ3Ñ4ð
Tð ˜U 3¨¨c°3¨h©Ð#7Ñ8Ñ9ð
Tð ˜3  c¨3 h¡°Ð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Ó&ˆÜ‰Ñ˜ f¨f°hÀ	Õ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˜×(Ñ(¨$¯+©+¼eÀE»l¸]ÔKˆÜ�|‰|˜A˜t×/Ñ/°·±¸fÀdÇmÁmÐUY×UcÑUcÓdÐdr   )Nr   r   Fr&   r/   s   @r   r9   r9   >   s§   ø„ ñð
 =AØ89Ø45Ø#ñKà˜s E¨#¨s¨(¡OÐ3Ñ4ðKð ˜U 3¨¨c°3¨h©Ð#7Ñ8Ñ9ðKð ˜3  c¨3 h¡°Ð4Ñ5ð	Kð
 ˜C  s¨C x¡Ð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Ø�j‰j˜ BÓ'€GÜ+¨G°[ÑZÈÐZÐSYÑZÑ€GˆZÙØ˜ÒÜ  ÑF°VÐF¸vÑFÐFØ˜%ÒÜ  ÑF°VÐF¸vÑFÐFà>Ð2°9°+Ð>Ó>�5à˜ÒÜ—<‘< ÐV°FÀGÑVÈvÑVÐVØ˜%ÒÜ—<‘< ÐV°FÀGÑVÈvÑVÐVà>Ð2°9°+Ð>Ó>�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�B—L‘Ló dó ðdð2 $Ø$Øñ	MØ�<‰<ð	Mà˜#‘Yð	Mð �S‘	ð	Mð �c‘ð		Mð
 �s‘)ð	Mð ó	Mð ôe�B—L‘Ló eó ðeô*?r   