Ë
    éÓ^jË  ã                   óR  — 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
 ddlmZ ddlmZmZ ddlmZmZmZ dZ	 	 	 	 	 dd	ej*                  d
e	ej*                     deeef   deeef   deeef   defd„Ze G d„ dej0                  «      «       Z G d„ dej0                  «      Zd„ Zy)zK Conv2d w/ Same Padding

Hacked together by / Copyright 2020 Ross Wightman
é    N)ÚTupleÚOptionalÚUnioné   )Úregister_notrace_module)Úis_exportableÚis_scriptable)Úpad_sameÚpad_same_argÚget_padding_valueFÚweightÚbiasÚstrideÚpaddingÚdilationÚgroupsc           	      ón   — t        | |j                  dd  ||«      } t        j                  | |||d||«      S )Néþÿÿÿ©r   r   )r
   ÚshapeÚFÚconv2d)Úxr   r   r   r   r   r   s          úb/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/layers/conv2d_same.pyÚconv2d_samer      s:   € ô 	��F—L‘L  Ð% v¨xÓ8€AÜ�8‰8�A�v˜t V¨V°X¸vÓFÐFó    c                   ó¬   ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddededeeeeef   f   d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d	efˆ fd
„Z	d„ Z
ˆ xZS )Ú
Conv2dSamezD Tensorflow like 'SAME' convolution wrapper for 2D convolutions
    Úin_channelsÚout_channelsÚkernel_sizer   r   r   r   r   c                 ó8   •— t         ‰| �  ||||d||||	|
¬«
       y )Nr   ©ÚdeviceÚdtype)ÚsuperÚ__init__©Úselfr   r    r!   r   r   r   r   r   r$   r%   Ú	__class__s              €r   r'   zConv2dSame.__init__$   s5   ø€ ô 	‰ÑØØØØØØØØØØð 	õ 	
r   c           	      óœ   — t        || j                  | j                  | j                  | j                  | j
                  | j                  «      S )N)r   r   r   r   r   r   r   )r)   r   s     r   ÚforwardzConv2dSame.forward>   s<   € ÜØØ�K‰KØ�I‰IØ�K‰KØ�L‰LØ�M‰MØ�K‰Kó
ð 	
r   ©r   r   r   r   TNN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr   r   ÚstrÚboolr'   r,   Ú__classcell__©r*   s   @r   r   r      sÁ   ø„ ñð 34Ø89Ø45ØØØØñ
àð
ð ð
ð ˜s E¨#¨s¨(¡OÐ3Ñ4ð	
ð
 ˜#˜u S¨# X™Ð.Ñ/ð
ð ˜3  c¨3 h¡°Ð4Ñ5ð
ð ˜C  s¨C x¡Ð0Ñ1ð
ð ð
ð õ
ö4	
r   r   c                   ó¬   ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddededeeeeef   f   d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d	efˆ fd
„Z	d„ Z
ˆ xZS )ÚConv2dSameExportz— ONNX export friendly Tensorflow like 'SAME' convolution wrapper for 2D convolutions

    NOTE: This does not currently work with torch.jit.script
    r   r    r!   r   r   r   r   r   c                 óT   •— t         ‰| �  ||||d||||	|
¬«
       d | _        d| _        y )Nr   r#   r   )r&   r'   ÚpadÚpad_input_sizer(   s              €r   r'   zConv2dSameExport.__init__Q   sF   ø€ ô 	‰ÑØØØØØØØØØØð 	ô 	
ð ˆŒØ$ˆÕr   c           	      óÌ  — |j                  «       dd  }| j                  €^t        || j                  j                  «       dd  | j                  | j
                  «      }t        j                  |«      | _        || _        | j                  |«      }t        j                  || j                  | j                  | j                  | j                  | j
                  | j                  «      S )Nr   )Úsizer;   r   r   r   r   ÚnnÚ	ZeroPad2dr<   r   r   r   r   r   )r)   r   Ú
input_sizeÚpad_args       r   r,   zConv2dSameExport.forwardm   s¯   € Ø—V‘V“X˜b˜c�]ˆ
Ø�8‰8ÐÜ" :¨t¯{©{×/?Ñ/?Ó/AÀ"À#Ð/FÈÏÉÐUY×UbÑUbÓcˆGÜ—|‘| GÓ,ˆDŒHØ",ˆDÔà�H‰H�Q‹KˆÜ�x‰xØØ�K‰KØ�I‰IØ�K‰KØ�L‰LØ�M‰MØ�K‰Kó
ð 	
r   r-   r.   r7   s   @r   r9   r9   J   sÁ   ø„ ñð 34Ø89Ø45ØØØØñ%àð%ð ð%ð ˜s E¨#¨s¨(¡OÐ3Ñ4ð	%ð
 ˜#˜u S¨# X™Ð.Ñ/ð%ð ˜3  c¨3 h¡°Ð4Ñ5ð%ð ˜C  s¨C x¡Ð0Ñ1ð%ð ð%ð õ%ö8
r   r9   c                 ó  — |j                  dd«      }|j                  dd«       t        ||fi |¤Ž\  }}|r8t        r$t	        «       rt        «       rJ ‚t        | ||fi |¤ŽS t        | ||fi |¤ŽS t        j                  | ||fd|i|¤ŽS )Nr   Ú r   F)
ÚpopÚ
setdefaultr   Ú_USE_EXPORT_CONVr   r	   r9   r   r?   ÚConv2d)Úin_chsÚout_chsr!   Úkwargsr   Ú
is_dynamics         r   Úcreate_conv2d_padrM   €   s’   € Ø�j‰j˜ BÓ'€GØ
×Ñ�f˜eÔ$Ü+¨G°[ÑKÀFÑKÑ€GˆZÙÝ¤¤ä$”Ð&Ð&Ü# F¨G°[ÑKÀFÑKÐKä˜f g¨{ÑE¸fÑEÐEä�y‰y˜ ¨+ÑQ¸wÐQÈ&ÑQÐQr   )N©r   r   r   rN   r   )r2   ÚtorchÚtorch.nnr?   Útorch.nn.functionalÚ
functionalr   Útypingr   r   r   Ú_fxr   Úconfigr   r	   r   r
   r   r   rG   ÚTensorr3   r   rH   r   r9   rM   © r   r   ú<module>rX      så   ðñó Ý ß Ð ß )Ñ )å (ß 0ß >Ñ >ð Ð ð (,Ø"(Ø#)Ø$*Øñ
Gà—‘ð
Gð �u—|‘|Ñ$ð
Gð �c˜3�h‘ð	
Gð
 �s˜C�x‘ð
Gð ˜˜S˜‘/ð
Gð ó
Gð ô'
�—‘ó '
ó ð'
ôT3
�r—y‘yô 3
ólRr   