a
    d=                     @   s   d Z ddlZddlmZmZ ddlZddlm  mZ	 de
e
e
e
dddZe
e
e
e
dd	d
Zde
e
e
dddZdee
 ee
 ee
 ee
 ee
 dddZdee
 ee
 ee
 edddZeeef dddZdS )zD Padding Helpers

Hacked together by / Copyright 2020 Ross Wightman
    N)ListTuple   )kernel_sizestridedilationreturnc                 K   s   |d || d   d }|S )Nr       )r   r   r   _paddingr
   r
   \/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/layers/padding.pyget_padding   s    r   xr   r   r   c                 C   sr   t | tjr>tj| |  d | |d |  d |  ddS tt| | d | |d |  d |  dS d S )Nr   r   )min)
isinstancetorchZTensorclampceilmaxmathr   r
   r
   r   get_same_padding   s    2r   )r   r   r   c                 K   s   |dko|| d  d dkS )Nr   r	   r   r
   )r   r   r   r   r
   r
   r   is_static_pad   s    r   r   r   )
input_sizer   r   r   r   c           
      C   s`   | \}}|\}}t |||d |d }t |||d |d }	|	d |	|	d  |d ||d  gS )Nr   r   r	   )r   )
r   r   r   r   ihiwZkhkwpad_hpad_wr
   r
   r   pad_same_arg   s
    r!   )r   r   r   valuec           	      C   s|   |   dd  \}}t||d |d |d }t||d |d |d }tj| |d ||d  |d ||d  f|d} | S )Nr   r   r	   )r"   )sizer   Fpad)	r   r   r   r   r"   r   r   r   r    r
   r
   r   pad_same-   s
    0r'   )r   c                 K   sp   d}t | trh|  } | dkrJt|fi |r@t|fi |} qhd} d}n| dkrXd} nt|fi |} | |fS )NFZsamer   TZvalid)r   strlowerr   r   )r   r   kwargsZdynamicr
   r
   r   get_padding_value;   s    
r+   )r   r   )r   r   )r   )r   r   )__doc__r   typingr   r   r   Ztorch.nn.functionalnnZ
functionalr%   intr   r   r   r!   floatr'   boolr+   r
   r
   r
   r   <module>   s0      