o
    i                  	   @   sl   d dl Z d dlZd dlZd dlmZ d dlm  mZ dZdde	de
de
de	fddZG d	d
 d
ejZdS )    Nz%https://dl.fbaipublicfiles.com/dinov2	arch_name
patch_sizenum_register_tokensreturnc                 C   s8   |  ddd d }|rd| nd}d| | | S )N_    Z_regZdinov2_)replace)r   r   r   Zcompact_arch_nameZregisters_suffix r
   6/data/cameron/moge_repo/moge/model/dinov2/hub/utils.py_make_dinov2_model_name   s   r   c                       s4   e Zd Z fddZdd Ze dd Z  ZS )CenterPaddingc                    s   t    || _d S N)super__init__multiple)selfr   	__class__r
   r   r      s   

zCenterPadding.__init__c                 C   s6   t || j | j }|| }|d }|| }||fS )N   )mathceilr   )r   sizenew_sizeZpad_sizeZpad_size_leftZpad_size_rightr
   r
   r   _get_pad   s
   zCenterPadding._get_padc                    s:   t tj fdd|jd dd D }t||}|S )Nc                 3   s    | ]}  |V  qd S r   )r   ).0mr   r
   r   	<genexpr>%   s    z(CenterPadding.forward.<locals>.<genexpr>   )list	itertoolschainfrom_iterableshapeFpad)r   xZpadsoutputr
   r   r   forward#   s   *zCenterPadding.forward)	__name__
__module____qualname__r   r   torchinference_moder*   __classcell__r
   r
   r   r   r      s
    r   )r   )r"   r   r.   torch.nnnnZtorch.nn.functional
functionalr&   _DINOV2_BASE_URLstrintr   Moduler   r
   r
   r
   r   <module>   s   