
    g+                        U d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlZd dlZd dlmZ ddlmZmZmZmZ  ej(                  e      Ze	d   Ze G d d	             Zd
 eddg dg dddddd	      iZded<   	 	 	 d	 	 	 	 	 	 	 	 	 ddZy)    )annotationsN)	dataclass)DictListLiteralOptional   )forward_features_eva_fixedmake_vit_b16_backboneresize_patch_embed
resize_vit)dinov2l16_384c                      e Zd ZU dZded<   ded<   dZded<   dZded<   d	Zd
ed<   dZded<   dZ	ded<   d	Z
ded<   	 d	Zded<   y	)	ViTConfigzConfiguration for ViT.intin_chans	embed_dim  img_size   
patch_sizeNzOptional[str]timm_presettimm_img_sizetimm_patch_sizez	List[int]encoder_feature_layer_idsencoder_feature_dims)__name__
__module____qualname____doc____annotations__r   r   r   r   r   r   r        J/home/cameronsmith/repos/ml-depth-pro/src/depth_pro/network/vit_factory.pyr   r      sa     MNHcJ "&K%M3OS ,0y/Q&*)*Ur#   r   r         )            )   i   r&   r&   r   r   vit_large_patch14_dinov2i     )	r   r   r   r   r   r   r   r   r   zDict[ViTPreset, ViTConfig]VIT_CONFIG_DICTc                   t         |    }|j                  |j                  f}|j                  |j                  f}d| v rAt        j                  |j
                  |      }t        j                  t        |      |_	        n"t        j                  |j
                  |d      }t        ||j                  |j                  |j                  |      }|j                  |j                  k7  rt        |j                   |      |_        |j                  |j"                  k7  rt%        |j                   |      |_        |et'        j(                  |d	      }|j+                  |d
      \  }	}
t-        |
      dk7  rt/        d|
       t-        |	      dk7  rt/        d|	       t0        j3                  |       |j                   S )a  Create and load a VIT backbone module.

    Args:
    ----
        preset: The VIT preset to load the pre-defined config.
        use_pretrained: Load pretrained weights if True, default is False.
        checkpoint_uri: Checkpoint to load the wights from.
        use_grad_checkpointing: Use grandient checkpointing.

    Returns:
    -------
        A Torch ViT backbone module.

    eva02)
pretrainedT)r1   dynamic_img_size)r   r   vit_featuresuse_grad_checkpointing)new_patch_size)r   cpu)map_locationF)
state_dictstrictr   z(Found unexpected keys when loading vit: z#Keys are missing when loading vit: )r.   r   r   timmcreate_modelr   types
MethodTyper
   forward_featuresr   r   r   r   r   r   modelr   r   torchloadload_state_dictlenKeyErrorLOGGERinfo)presetuse_pretrainedcheckpoint_urir4   configr   r   r?   r8   missing_keysunexpected_keyss              r$   
create_vitrM   D   s   ( V$F1H##V%6%67J&!!&"4"4P!&!1!12Le!T!!>D
 "#88"("B"B%%5E F222(ZP&... x@!ZZUC
(-(=(=!% )> )
%o 1$EoEVWXX|!@OPP
KK;;r#   )FNF)
rG   	ViTPresetrH   boolrI   z
str | Noner4   rO   returnz	nn.Module)
__future__r   loggingr<   dataclassesr   typingr   r   r   r   r:   r@   torch.nnnnvitr
   r   r   r   	getLoggerr   rE   rN   r   r.   r!   rM   r"   r#   r$   <module>rY      s   
 #   ! 0 0     
		8	$ 	
 V V V, Y"13.
/+ " !!%#(	888 8 !	8
 8r#   