o
    {i                     @   sD   d dl Z d dlZd dlZG dd dejjZG dd dejjZdS )    Nc                       s@   e Zd Zdef fddZdd Zdd Zdefd	d
Z  Z	S )CenterPaddingmultiplec                       t    || _d S Nsuper__init__r   selfr   	__class__ P/data/cameron/keygrip/volume_dino_tracks/dinov3/eval/dense/depth/models/embed.pyr         

zCenterPadding.__init__c                 C   s6   t || j | j }|| }|d }|| }||fS )N   )mathceilr   )r
   sizenew_size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jj||}|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torchnn
functionalpad)r
   xpadsoutputr   r   r   forward   s   *zCenterPadding.forwardreturnc                 C      d| j  S Nz	multiple=r   r   r   r   r   __extra_repr__      zCenterPadding.__extra_repr__)
__name__
__module____qualname__intr   r   r)   strr.   __classcell__r   r   r   r   r      s
    r   c                       s8   e Zd Zdef fddZdd ZdefddZ  ZS )	StretchToMultipler   c                    r   r   r   r	   r   r   r   r   $   r   zStretchToMultiple.__init__c                 C   s   |j ^ }}}}t|| j | j }t|| j | j }||ks&||krH|d|||}tjjj|||fdd}|jg ||||R  }|S )Nr   bilinear)r   mode)	r!   r   r   r   reshaper"   r#   r$   interpolate)r
   r&   r!   CHWZnew_HZnew_Wr   r   r   r)   (   s   zStretchToMultiple.forwardr*   c                 C   r+   r,   r-   r   r   r   r   r.   3   r/   z StretchToMultiple.__extra_repr__)	r0   r1   r2   r3   r   r)   r4   r.   r5   r   r   r   r   r6   #   s    r6   )r   r   r"   r#   Moduler   r6   r   r   r   r   <module>   s
   