o
    {i                     @   sP  d dl mZ d dlmZmZ d dlZd dlmZ d dlm	Z	 d dl
mZ ddlmZ dd	lmZmZmZmZ G d
d deZdefddZeddddejejdZdd Zdd ZeedZddejejddejddededeeB deeB deee e f  ded ej!fd!d"Z"dejejdejd#ded$eeB deeB ded ej!f
d%d&Z#dS )'    )Enum)OptionalTupleN)build_depther)urlparse)Path   )DINOV3_BASE_URL)Weightsdinov3_vitl16dinov3_vit7b16convert_path_or_url_to_urlc                   @   s   e Zd ZdZdS )DepthWeightsSYNTHMIXN)__name__
__module____qualname__r    r   r   ?/data/cameron/keygrip/volume_dino_tracks/dinov3/hub/depthers.pyr      s    r   datasetc                 C   s   t jdi}||  S )N)gMbP?g      Y@)r   r   )r   Zdepth_rangesr   r   r   _get_depth_range   s   r   TF   )use_backbone_normuse_batchnormuse_cls_tokenn_output_channelsdepth_weightsbackbone_weightsc                 C   s.   d| v rg dS d| v rg dS t d|  )Nvitl)            vit7b)	         '   zUnrecognized backbone name )
ValueErrorbackbone_namer   r   r   _get_out_layers,   s
   r+   c                 C   s$   d| v rg dS d| v rg dS d S )Nr   )   r,   r,   r,   r#   )   r-   r-   r-   r   r)   r   r   r   _get_post_process_channels5   s
   r.   )r   r   r   )r*   
pretraineddepther_weightsr   depth_range
check_hashbackbone_dtyper*   r/   r0   r   r1   r2   r3   c                 K   s
  t |  ||d}t| }	t| }
|pttd }|\}}t|f|	td td td td d|||d|
d	|}|rt|trl|tjksKJ d
| |j	
 }d|v rX|d nd}td|  d|  d| d| d	 }nt|}tjj|d|d}|d jj|dd |S )N)r/   weightsr   r   r   r   r   Zdpti   )Zbackbone_out_layersr   r   r   r   Z	head_typeZencoder_dtype	min_depth	max_depthchannelspost_process_channelszUnsupported depther weights hashZ02040be1/_z
_dpt_head-z.pthcpu)map_locationr2   r   T)strict)_BACKBONE_DICTr+   r.   r   _DPT_HEAD_CONFIG_DICTr   
isinstancer   r   valuelowerr	   r   torchhubload_state_dict_from_urldecoderload_state_dict)r*   r/   r0   r   r1   r2   r3   kwargsbackboneZ	out_indexr8   r5   r6   Zdeptherweights_namer9   url
checkpointr   r   r   _make_dinov3_dpt_deptherB   sF   

$rN   )r/   r4   r   r2   r3   r4   c              	   K   s   t dd| ||||d|S )Nr   )r*   r/   r0   r   r2   r3   r   )rN   )r/   r4   r   r2   r3   rI   r   r   r   dinov3_vit7b16_ddu   s   	rO   )$enumr   typingr   r   rD   Zdinov3.eval.dense.depth.modelsr   urllib.parser   pathlibr   utilsr	   	backbonesr
   BackboneWeightsr   r   r   r   r   dictr   LVD1689Mr@   r+   r.   r?   float32strboolfloatdtyperN   rO   r   r   r   r   <module>   sz   
	
5