U
    ¯Ê¹j
  ã                   @   s    d Z ddlZddlZddlmZmZmZmZ ddlZddl	m
  mZ ddlmZ e e¡Zdee eee  eeeed	œd
d„Zdee eeedœdd„ZdS )zQ Position Embedding Utilities

Hacked together by / Copyright 2022 Ross Wightman
é    N)ÚListÚTupleÚOptionalÚUnioné   )Ú	to_2tupleÚbicubicTF)Únew_sizeÚold_sizeÚnum_prefix_tokensÚinterpolationÚ	antialiasÚverbosec                 C   sR  | j d }|d |d  | }||kr:|d |d kr:| S |d kr\tt || ¡ƒ}	|	|	f}|rŒ| d d …d |…f | d d …|d …f  }
} n
d |  }
} | j d }| j}|  ¡ } |  d|d |d d¡ dddd¡} tj	| |||d�} |  dddd¡ dd|¡} |  
|¡} |
d k	�r$tj|
| gdd�} tj ¡ �sN|�rNt d|› d	|› d
�¡ | S )Nr   r   éÿÿÿÿé   é   ©ÚsizeÚmoder   )ÚdimúResized position embedding: ú to Ú.)ÚshapeÚintÚmathÚsqrtÚdtypeÚfloatÚreshapeÚpermuteÚFÚinterpolateÚtoÚtorchÚcatÚjitÚis_scriptingÚ_loggerÚinfo)Úposembr	   r
   r   r   r   r   Znum_pos_tokensZnum_new_tokensZhwZposemb_prefixZ	embed_dimÚ
orig_dtype© r,   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/layers/pos_embed.pyÚresample_abs_pos_embed   s,    

,

$

r.   )r	   r   r   r   c                 C   sÀ   |d | j d kr(|d | j d kr(| S | j}|  ¡ } |  d| j d | j d | j d ¡ dddd¡} tj| |||d�} |  dddd¡ |¡} tj	 
¡ s¼|r¼t d	| j dd… › d
|› d�¡ | S )Nr   éýÿÿÿr   éþÿÿÿr   r   r   r   r   r   r   )r   r   r   r   r    r!   r"   r#   r$   r&   r'   r(   r)   )r*   r	   r   r   r   r+   r,   r,   r-   Úresample_abs_pos_embed_nhwc<   s    $."r1   )Nr   r   TF)r   TF)Ú__doc__Úloggingr   Útypingr   r   r   r   r$   Ztorch.nn.functionalÚnnZ
functionalr!   Zhelpersr   Ú	getLoggerÚ__name__r(   r   ÚstrÚboolr.   r1   r,   r,   r,   r-   Ú<module>   s:   
     ù
ù.   ûû