Ë
    éÓ^j°Ç ã                   óJ  — d 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	m
Z
mZmZmZ ddlZddlmZ ddlmc mZ ddlmZmZmZmZ ddlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0 dd	l1m2Z2 dd
l3m4Z4 ddl5m6Z6m7Z7 dgZ8 G d„ dejr                  «      Z: G d„ dejr                  «      Z; G d„ dejr                  «      Z< G d„ dejr                  «      Z=	 dÁdee>ej~                  f   dejr                  de>dee>ej~                  f   fd„Z@	 	 dÂdee>ej~                  f   dejr                  de>deAdee>ej~                  f   f
d„ZBdÃde>deAde=fd„ZCdÄde>dee>ef   fd „ZDdÄde>dee>ef   fd!„ZEdÄde>dee>ef   fd"„ZFdÄde>dee>ef   fd#„ZG e6i d$ eDd%¬&«      “d' eDd%d(d)d*¬+«      “d, eDd%eed(d)d*¬-«      “d. eDd%eed/d)d*¬-«      “d0 eDd%d1d)d*¬+«      “d2 eDd%d1d)d*¬+«      “d3 eDd%d1d)d*¬+«      “d4 eDd%d(d)¬5«      “d6 eDd%d(d)¬5«      “d7 eDd%d1d)¬5«      “d8 eDd%d1d)¬5«      “d9 eDd%d1d)¬5«      “d: eDd%d1d)d*d;¬<«      “d= eDd%d1d)d*d;¬<«      “d> eDd%d1d)d*d;¬<«      “d? eDd%d¬@«      “dA eDd%d¬@«      “i dB eDd%d¬@«      “dC eDd%d¬@«      “dD eDd%d¬@«      “dE eDd%dF¬@«      “dG eDd%dF¬@«      “dH eDd%dI¬@«      “dJ eDd%dK¬@«      “dL eDd%d(d)dK¬M«      “dN eDd%dF¬@«      “dO eDd%dF¬@«      “dP eDd¬Q«      “dR eDd%dSdTdUdU¬V«      “dW eDd%dSdTdUdU¬V«      “dX eDd%dSdT¬5«      “dY eDd%dSdTdUdU¬V«      “dZ eEd%d[dI¬\«      “d] eEd%d[dI¬\«      “¥i d^ eEd%d_dF¬\«      “d` eEd%d(dF¬\«      “da eEd%d1db¬\«      “dc eEd%d1d¬\«      “dd eEd%d1d¬\«      “de eEd%d1d¬\«      “df eEd%d1d¬\«      “dg eEd%dhd¬\«      “di eEd%dhd¬\«      “dj eEd%dhd¬\«      “dk eEd%d1d¬\«      “dl eEd%d1d¬\«      “dm eDd%eedn¬o«      “dp eDd%eedn¬o«      “dq eDd%eedn¬o«      “dr eDd%eedn¬o«      “ds eDd%eedn¬o«      “¥i dt eDd%eedn¬o«      “du eDd%eedn¬o«      “dv eDd%eedn¬o«      “dw eDd%eedn¬o«      “dx eDd%eedn¬o«      “dy eDd%eedn¬o«      “dz eDd%eedn¬o«      “d{ eFd%¬&«      “d| eFd%¬&«      “d} eFd%¬&«      “d~ eFd%¬&«      “d eFd%¬&«      “d€ eFd%¬&«      “d� eGd%¬&«      “d‚ eGd%¬&«      “dƒ eGd%¬&«      “d„ eFd%¬&«      “¥ eFd%¬&«       eFd%d…d†¬‡«       eFd%d…d†¬‡«       eFd%¬&«       eFd%¬&«       eFd%¬&«       eFd%d…d†¬‡«      dˆœ¥«      ZHe7dÃdeAde=fd‰„«       ZIe7dÃdeAde=fdŠ„«       ZJe7dÃdeAde=fd‹„«       ZKe7dÃdeAde=fdŒ„«       ZLe7dÃdeAde=fd�„«       ZMe7dÃdeAde=fdŽ„«       ZNe7dÃdeAde=fd�„«       ZOe7dÃdeAde=fd�„«       ZPe7dÃdeAde=fd‘„«       ZQe7dÃdeAde=fd’„«       ZRe7dÃdeAde=fd“„«       ZSe7dÃdeAde=fd”„«       ZTe7dÃdeAde=fd•„«       ZUe7dÃdeAde=fd–„«       ZVe7dÃdeAde=fd—„«       ZWe7dÃdeAde=fd˜„«       ZXe7dÃdeAde=fd™„«       ZYe7dÃdeAde=fdš„«       ZZe7dÃdeAde=fd›„«       Z[e7dÃdeAde=fdœ„«       Z\e7dÃdeAde=fd�„«       Z]e7dÃdeAde=fdž„«       Z^e7dÃdeAde=fdŸ„«       Z_e7dÃdeAde=fd „«       Z`e7dÃdeAde=fd¡„«       Zae7dÃdeAde=fd¢„«       Zbe7dÃdeAde=fd£„«       Zce7dÃdeAde=fd¤„«       Zde7dÃdeAde=fd¥„«       Zee7dÃdeAde=fd¦„«       Zfe7dÃdeAde=fd§„«       Zge7dÃdeAde=fd¨„«       Zhe7dÃdeAde=fd©„«       Zie7dÃdeAde=fdª„«       Zje7dÃdeAde=fd«„«       Zke7dÃdeAde=fd¬„«       Zle7dÃdeAde=fd­„«       Zme7dÃdeAde=fd®„«       Zne7dÃdeAde=fd¯„«       Zoe7dÃdeAde=fd°„«       Zpe7dÃdeAde=fd±„«       Zqe7dÃdeAde=fd²„«       Zre7dÃdeAde=fd³„«       Zse7dÃdeAde=fd´„«       Zte7dÃdeAde=fdµ„«       Zue7dÃdeAde=fd¶„«       Zve7dÃdeAde=fd·„«       Zwe7dÃdeAde=fd¸„«       Zxe7dÃdeAde=fd¹„«       Zye7dÃdeAde=fdº„«       Zze7dÃdeAde=fd»„«       Z{e7dÃdeAde=fd¼„«       Z|e7dÃdeAde=fd½„«       Z}e7dÃdeAde=fd¾„«       Z~e7dÃdeAde=fd¿„«       Ze7dÃdeAde=fdÀ„«       Z€y)ÅaK   EVA

EVA ViT from https://github.com/baaivision/EVA , paper: https://arxiv.org/abs/2211.07636

This file contains a number of ViT variants the utilise ROPE position embeddings, SwiGLU and other additions:
 * EVA & EVA02 model implementations that evolved from BEiT, additional models in vision_transformer.py.
 * `timm` original SBB ViT w/ ROPE position embeddings
 * Perception Encoder (PE) ViT from Meta (https://arxiv.org/abs/2504.13181)
 * ROPE-ViT from Naver AI (https://arxiv.org/abs/2403.13298)
 * DINOv3 from META AI Research (https://arxiv.org/abs/2508.10104)

@article{EVA,
  title={EVA: Exploring the Limits of Masked Visual Representation Learning at Scale},
  author={Fang, Yuxin and Wang, Wen and Xie, Binhui and Sun, Quan and Wu, Ledell and Wang, Xinggang and Huang,
  Tiejun and Wang, Xinlong and Cao, Yue},
  journal={arXiv preprint arXiv:2211.07636},
  year={2022}
}

EVA-02: A Visual Representation for Neon Genesis - https://arxiv.org/abs/2303.11331
@article{EVA02,
  title={EVA-02: A Visual Representation for Neon Genesis},
  author={Fang, Yuxin and Sun, Quan and Wang, Xinggang and Huang, Tiejun and Wang, Xinlong and Cao, Yue},
  journal={arXiv preprint arXiv:2303.11331},
  year={2023}
}

@article{bolya2025perception,
  title={Perception encoder: The best visual embeddings are not at the output of the network},
  author={Bolya, Daniel and Huang, Po-Yao and Sun, Peize and Cho, Jang Hyun and Madotto, Andrea and Wei, Chen and Ma,
    Tengyu and Zhi, Jiale and Rajasegaran, Jathushan and Rasheed, Hanoona and others},
  journal={arXiv preprint arXiv:2504.13181},
  year={2025}
}

@inproceedings{heo2024rotary,
  title={Rotary position embedding for vision transformer},
  author={Heo, Byeongho and Park, Song and Han, Dongyoon and Yun, Sangdoo},
  booktitle={European Conference on Computer Vision},
  pages={289--305},
  year={2024},
  organization={Springer}
}

@article{simeoni2025dinov3,
  title={{DINOv3}},
  author={Sim{'e}oni, Oriane and Vo, Huy V. and Seitzer, Maximilian and Baldassarre, Federico and Oquab, Maxime
    and Jose, Cijo and Khalidov, Vasil and Szafraniec, Marc and Yi, Seungeun and Ramamonjisoa, Micha{"e}l
    and Massa, Francisco and Haziza, Daniel and Wehrstedt, Luca and Wang, Jianyuan and Darcet, Timoth{'e}e
    and Moutakanni, Th{'e}o and Sentana, Leonel and Roberts, Claire and Vedaldi, Andrea and Tolan, Jamie
    and Brandt, John and Couprie, Camille and Mairal, Julien and J{'e}gou, Herv{'e} and Labatut, Patrick
    and Bojanowski, Piotr},
  year={2025},
  eprint={2508.10104},
  url={https://arxiv.org/abs/2508.10104},
}

DINOv3 code was a modification of existing EVA model and support modules, so licensed under Apache-2.0 like timm.
Weights from META remain under DINOv3 License (https://ai.meta.com/resources/models-and-libraries/dinov3-license/).

Modifications by / Copyright 2023 Ross Wightman, original copyrights below
é    N)Úpartial)ÚAnyÚCallableÚDictÚListÚOptionalÚSetÚTupleÚUnion)ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STDÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STD)Ú
PatchEmbedÚMlpÚGluMlpÚSwiGLUÚ	LayerNormÚDropPathÚcalculate_drop_path_ratesÚPatchDropoutWithIndicesÚcreate_rope_embedÚapply_rot_embed_catÚapply_keep_indices_nlcÚtrunc_normal_Úresample_patch_embedÚresample_abs_pos_embedÚglobal_pool_nlcÚ	to_2tupleÚuse_fused_attnÚmaybe_add_maskÚresolve_self_attn_maskÚAttentionRopeÚAttentionPoolLatenté   )Úbuild_model_with_cfg)Úfeature_take_indices)Ú
checkpoint)Úgenerate_default_cfgsÚregister_modelÚEvac                   ó*  ‡ — e Zd ZU dZej
                  j                  e   ed<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dde	de	dededede	d	e
d
e
dee	   dee   dedededefˆ fd„Zdd„Zdd„Z	 	 	 ddeej                      deej                      defd„Zdd„Zˆ xZS )ÚEvaAttentionzG EVA Attention with ROPE, no k-bias, and fused/unfused qkv options
    Ú
fused_attnÚdimÚ	num_headsÚqkv_biasÚ	qkv_fusedÚqkv_bias_separateÚnum_prefix_tokensÚ	attn_dropÚ	proj_dropÚattn_head_dimÚ
norm_layerÚqk_normÚ
scale_normÚrotate_halfÚgatedc                 ó¶  •— ||dœ}t         ‰| �  «        |s|r	|
€J d«       ‚|| _        ||z  | _        |	�|	| _        | j                  | j                  z  }| j                  dz  | _        || _        t        «       | _        || _        || _	        |rÓt        j                  ||dz  fddi|¤Ž| _        dx| _        x| _        | _        |r…t        j                   t#        j$                  |fi |¤Ž«      | _        | j)                  dt#        j$                  |fi |¤Žd¬	«       t        j                   t#        j$                  |fi |¤Ž«      | _        nŒdx| _        x| _        | _        nvt        j                  ||fd|i|¤Ž| _        t        j                  ||fddi|¤Ž| _        t        j                  ||fd|i|¤Ž| _        d| _        dx| _        x| _        | _        |r |
| j                  fi |¤Žnt        j.                  «       | _        |r |
| j                  fi |¤Žnt        j.                  «       | _        t        j4                  |«      | _        |r	 |
|fi |¤Žnt        j.                  «       | _        |rt        j                  ||fd|i|¤Žnd| _        t        j                  ||fi |¤Ž| _        t        j4                  |«      | _        | jA                  «        y)
au  
        Args:
            dim: Input dimension of the token embeddings
            num_heads: Number of attention heads
            qkv_bias: Whether to add a bias term to the query, key, and value projections
            qkv_fused: Whether qkv projections are fused into one projection or separate
            qkv_bias_separate: Whether to apply bias to qkv as a separate addition or part of F.linear() call
            num_prefix_tokens: Number of reg/cls tokens at the beginning of the sequence that
                should not have position embeddings applied
            attn_drop: Dropout rate for attention weights
            proj_drop: Dropout rate for the output projection
            attn_head_dim: Dimension of each attention head (if None, computed as dim // num_heads)
            norm_layer: Normalization layer constructor to use for QK and scale normalization
            qk_norm: Enable normalization of query (Q) and key (K) vectors with norm_layer
            scale_norm: Enable normalization (scaling) of attention output with norm_layer
            rotate_half: Use half rotation layout instead of interleaved
        ©ÚdeviceÚdtypeNz<norm_layer must be provided if qk_norm or scale_norm is Trueg      à¿é   ÚbiasFÚk_bias)Ú
persistent)!ÚsuperÚ__init__r0   Úhead_dimÚscaler4   r    r.   r3   r;   ÚnnÚLinearÚqkvÚq_projÚk_projÚv_projÚ	ParameterÚtorchÚemptyÚq_biasÚregister_bufferÚv_biasrC   ÚIdentityÚq_normÚk_normÚDropoutr5   ÚnormÚgateÚprojr6   Úreset_parameters)Úselfr/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r?   r@   ÚddÚattn_dimÚ	__class__s                      €úZ/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/eva.pyrF   zEvaAttention.__init__n   su  ø€ ðH ¨Ñ/ˆÜ‰ÑÔÙ™ØÐ)ÐiÐ+iÓiÐ)Ø"ˆŒØ˜yÑ(ˆŒØÐ$Ø)ˆDŒMØ—=‘= 4§>¡>Ñ1ˆØ—]‘] dÑ*ˆŒ
Ø!2ˆÔÜ(Ó*ˆŒØ!2ˆÔØ&ˆÔáÜ—y‘y  h°¡lÑE¸ÐEÀ"ÑEˆDŒHØ6:Ð:ˆDŒKÐ:˜$œ+¨¬ÙÜ Ÿl™l¬5¯;©;°xÑ+FÀ2Ñ+FÓG�”Ø×$Ñ$ X¬u¯{©{¸8Ñ/JÀrÑ/JÐW\Ð$Ô]Ü Ÿl™l¬5¯;©;°xÑ+FÀ2Ñ+FÓG�•à:>Ð>�”Ð>˜dœk¨D­KäŸ)™) C¨ÑG¸ÐGÀBÑGˆDŒKÜŸ)™) C¨ÑD¸ÐDÀÑDˆDŒKÜŸ)™) C¨ÑG¸ÐGÀBÑGˆDŒKØˆDŒHØ6:Ð:ˆDŒKÐ:˜$œ+¨¬Ù9@‘j §¡Ñ5°"Ò5ÄbÇkÁkÃmˆŒÙ9@‘j §¡Ñ5°"Ò5ÄbÇkÁkÃmˆŒÜŸ™ IÓ.ˆŒÙ2<‘J˜xÑ.¨2Ò.Ä"Ç+Á+Ã-ˆŒ	ÙEJ”B—I‘I˜c 8ÑA°(ÐA¸bÒAÐPTˆŒ	Ü—I‘I˜h¨Ñ2¨rÑ2ˆŒ	ÜŸ™ IÓ.ˆŒð 	×ÑÕó    c                 óà   — | j                   �Rt        j                  j                  | j                   «       t        j                  j                  | j                  «       | j                  «        y)z"Initialize parameters and buffers.N)rR   rI   ÚinitÚzeros_rT   Ú_init_buffers©r]   s    ra   r\   zEvaAttention.reset_parameters»   s@   € à�;‰;Ð"Ü�G‰G�N‰N˜4Ÿ;™;Ô'Ü�G‰G�N‰N˜4Ÿ;™;Ô'Ø×ÑÕrb   c                 óR   — | j                   �| j                   j                  «        yy)z.Compute and fill non-persistent buffer values.N)rC   Úzero_rg   s    ra   rf   zEvaAttention._init_buffersÂ   s!   € à�;‰;Ð"Ø�K‰K×ÑÕð #rb   ÚropeÚ	attn_maskÚ	is_causalc                 óº  — |j                   \  }}}| j                  �| j                  |«      j                  «       nd}| j                  �ë| j                  €| j                  |«      }	n…t        j                  | j                  | j                  | j                  f«      }
| j                  r| j                  |«      }	|	|
z  }	n,t        j                  || j                  j                  |
¬«      }	|	j                  ||d| j                  d«      j                  ddddd«      }	|	j!                  d«      \  }}}n·| j#                  |«      j                  ||| j                  d«      j%                  dd«      }| j'                  |«      j                  ||| j                  d«      j%                  dd«      }| j)                  |«      j                  ||| j                  d«      j%                  dd«      }| j+                  |«      | j-                  |«      }}|�½| j.                  }t1        | d	d
«      }t        j                  |dd…dd…d|…dd…f   t3        |dd…dd…|d…dd…f   ||¬«      gd¬«      j5                  |«      }t        j                  |dd…dd…d|…dd…f   t3        |dd…dd…|d…dd…f   ||¬«      gd¬«      j5                  |«      }| j6                  r>t        j8                  ||||| j:                  r| j<                  j>                  nd|¬«      }ng|| j@                  z  }||j%                  dd«      z  }tC        ||||¬«      }tE        ||«      }|jG                  d¬«      }| j=                  |«      }||z  }|j%                  dd«      j                  |||«      }| jI                  |«      }|�||z  }| jK                  |«      }| jM                  |«      }|S )aÕ  Forward pass for the attention module.

        Args:
            x: Input tensor of shape (batch_size, sequence_length, embedding_dim)
            rope: Rotary position embeddings tensor for position-aware attention
            attn_mask: Optional attention mask to apply during attention computation
            is_causal: If True, use causal (autoregressive) masking

        Returns:
            Tensor of shape (batch_size, sequence_length, embedding_dim)
        N)ÚweightrB   rA   éÿÿÿÿé   r   r%   é   r;   F)Úhalf©r/   ç        )rk   Ú	dropout_prl   éþÿÿÿ)rl   )'ÚshaperZ   ÚsigmoidrK   rR   rP   ÚcatrC   rT   r3   ÚFÚlinearrn   Úreshaper0   ÚpermuteÚunbindrL   Ú	transposerM   rN   rV   rW   r4   Úgetattrr   Útype_asr.   Úscaled_dot_product_attentionÚtrainingr5   ÚprH   r"   r!   ÚsoftmaxrY   r[   r6   )r]   Úxrj   rk   rl   ÚBÚNÚCrZ   rK   r1   ÚqÚkÚvÚnptrr   ÚattnÚ	attn_biass                     ra   ÚforwardzEvaAttention.forwardÇ   sK  € ð$ —'‘'‰ˆˆ1ˆaØ)-¯©Ð)>ˆt�y‰y˜‹|×#Ñ#Ô%ÀDˆà�8‰8ÐØ�{‰{Ð"Ø—h‘h˜q“k‘ä Ÿ9™9 d§k¡k°4·;±;ÀÇÁÐ%LÓM�Ø×)Ò)ØŸ(™( 1›+�CØ˜8‘O‘CäŸ(™( 1¨T¯X©X¯_©_À8ÔL�CØ—+‘+˜a  A t§~¡~°rÓ:×BÑBÀ1ÀaÈÈAÈqÓQˆCØ—j‘j “m‰GˆAˆq‘!à—‘˜A“×&Ñ& q¨!¨T¯^©^¸RÓ@×JÑJÈ1ÈaÓPˆAØ—‘˜A“×&Ñ& q¨!¨T¯^©^¸RÓ@×JÑJÈ1ÈaÓPˆAØ—‘˜A“×&Ñ& q¨!¨T¯^©^¸RÓ@×JÑJÈ1ÈaÓPˆAà�{‰{˜1‹~˜tŸ{™{¨1›~ˆ1ˆàÐØ×(Ñ(ˆCÜ˜4 °Ó6ˆDÜ—	‘	˜1šQ¢ 4 C 4ª˜]Ñ+Ô-@ÀÂ1ÂaÈÉÊqÀ=ÑAQÐSWÐ^bÔ-cÐdÐjkÔl×tÑtÐuvÓwˆAÜ—	‘	˜1šQ¢ 4 C 4ª˜]Ñ+Ô-@ÀÂ1ÂaÈÉÊqÀ=ÑAQÐSWÐ^bÔ-cÐdÐjkÔl×tÑtÐuvÓwˆAà�?Š?Ü×.Ñ.Ø�1�aØ#Ø.2¯mªm˜$Ÿ.™.×*Ò*ÀØ#ô	‰Að �D—J‘J‘ˆAØ�q—{‘{ 2 rÓ*Ñ*ˆDÜ.¨q°$¸	ÈYÔWˆIÜ! $¨	Ó2ˆDØ—<‘< B�<Ó'ˆDØ—>‘> $Ó'ˆDØ�q‘ˆAà�K‰K˜˜1Ó×%Ñ% a¨¨AÓ.ˆØ�I‰I�a‹LˆØÐØ�D‘ˆAØ�I‰I�a‹LˆØ�N‰N˜1ÓˆØˆrb   c                 ó$   — | j                  «        y)z"Initialize non-persistent buffers.N)rf   rg   s    ra   Úinit_non_persistent_buffersz(EvaAttention.init_non_persistent_buffers  s   € à×ÑÕrb   )é   TTFr%   rt   rt   NNFTFFNN©ÚreturnN©NNF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rP   ÚjitÚFinalÚboolÚ__annotations__ÚintÚfloatr   r   rF   r\   rf   ÚTensorr�   r’   Ú__classcell__©r`   s   @ra   r-   r-   i   sF  ø… ñà—	‘	—‘ Ñ%Ó%ð
 Ø!Ø"Ø&+Ø%&Ø!Ø!Ø+/Ø-1Ø!Ø#Ø %ØØØñ#K àðK ð ðK ð ð	K ð
 ðK ð  $ðK ð  #ðK ð ðK ð ðK ð $ C™=ðK ð ! Ñ*ðK ð ðK ð ðK ð ðK ð õK óZó ð ,0Ø04Ø#ñDð ˜5Ÿ<™<Ñ(ðDð   §¡Ñ-ð	Dð
 óD÷Lrb   r-   c            *       óB  ‡ — e Zd Zdddddddddddddddej                  edddfd	ed
ededededededededede	dededededede
e   dedede
e   f(ˆ fd„Zd%d„Z	 	 	 d&d ej                  d!e
ej                     d"e
ej                     d#edej                  f
d$„Zˆ xZS )'ÚEvaBlockTç      @Fr   r%   Úevart   Nr/   r0   r1   r2   Ú	mlp_ratioÚ
swiglu_mlpÚswiglu_align_toÚ	scale_mlpÚscale_attn_innerr4   Ú	attn_typer;   Ú
gated_attnr6   r5   Ú	drop_pathÚinit_valuesÚ	act_layerr8   r7   c                 ó@  •— ||dœ}t         ‰| �  «         ||fi |¤Ž| _        |dk(  rt        nt        } ||f||||
|||||	||dœ|¤Ž| _        || _        |�)t        j                  t        j                  |fi |¤Ž«      nd| _        |dkD  rt        |«      nt        j                  «       | _         ||fi |¤Ž| _        t!        ||z  «      }|rL|s|rt#        d|||r|nd||dœ|¤Ž| _        nGt'        d||dz  |r|ndt        j(                  d|d	œ|¤Ž| _        nt+        d||||r|nd|d
œ|¤Ž| _        |�)t        j                  t        j                  |fi |¤Ž«      nd| _        |dkD  rt        |«      nt        j                  «       | _        | j1                  «        y)a×   Initialize the EVA transformer block.

        Args:
          dim: Input dimension of the token embeddings
            num_heads: Number of attention heads
            qkv_bias: Whether to use bias terms in query, key, value projections
            qkv_fused: Whether to use a single projection for query, key, value
            mlp_ratio: Ratio of MLP hidden dimension to input dimension
            swiglu_mlp: Whether to use SwiGLU activation in the MLP
            scale_mlp: Whether to use normalization in the MLP
            scale_attn_inner: Whether to use normalization within the attention mechanism
            num_prefix_tokens: Number of tokens at the beginning of the sequence (class tokens, etc.)
            attn_type: Type of attention module to use ('eva' or 'rope')
            proj_drop: Dropout rate for projection layers
            attn_drop: Dropout rate for attention matrix
            drop_path: Stochastic depth rate
            init_values: Initial value for LayerScale, None = no LayerScale
            act_layer: Activation layer constructor
            norm_layer: Normalization layer constructor
            attn_head_dim: Dimension of each attention head (if None, computed as dim // num_heads)
        r>   rj   ©r0   r1   r2   r4   r5   r6   r7   r8   r:   r;   r<   Nrt   ©Úin_featuresÚhidden_featuresr8   ÚdropÚalign_torp   F©rµ   r¶   r8   r±   Ú	gate_lastr·   ©rµ   r¶   r±   r8   r·   © )rE   rF   Únorm1r#   r-   rŽ   r°   rI   rO   rP   rQ   Úgamma_1r   rU   Ú
drop_path1Únorm2rŸ   r   Úmlpr   ÚSiLUr   Úgamma_2Ú
drop_path2r\   )r]   r/   r0   r1   r2   r¨   r©   rª   r«   r¬   r4   r­   r;   r®   r6   r5   r¯   r°   r±   r8   r7   r?   r@   Úkwargsr^   Úattn_clsr¶   r`   s                              €ra   rF   zEvaBlock.__init__  sÖ  ø€ ð^ ¨Ñ/ˆÜ‰ÑÔá Ñ* rÑ*ˆŒ
Ø$-°Ò$7•=¼\ˆÙØð
àØØØ/ØØØ'Ø!Ø'Ø#Øñ
ð ñ
ˆŒ	ð 'ˆÔØ?JÐ?V”r—|‘|¤E§K¡K°Ñ$:°rÑ$:Ô;Ð\`ˆŒØ1:¸R²œ( 9Ô-ÄRÇ[Á[Ã]ˆŒá Ñ* rÑ*ˆŒ
Ü˜c I™oÓ.ˆÙÙ™Oä!ð Ø #Ø$3Ù-6™z¸DØ"Ø,ñð ñ�•ô "ð Ø #Ø$3°aÑ$7Ù-6™z¸DÜ Ÿg™gØ#Ø"ñð ñ�•ô ð ØØ /Ø#Ù)2™:¸Øñð ñˆDŒHð @KÐ?V”r—|‘|¤E§K¡K°Ñ$:°rÑ$:Ô;Ð\`ˆŒØ1:¸R²œ( 9Ô-ÄRÇ[Á[Ã]ˆŒð 	×ÑÕrb   r•   c                 óî   — | j                   �it        j                  j                  | j                   | j                  «       t        j                  j                  | j
                  | j                  «       yy)zInitialize parameters.N)r¾   rI   rd   Ú	constant_r°   rÃ   rg   s    ra   r\   zEvaBlock.reset_parameters‚  sM   € à�<‰<Ð#Ü�G‰G×Ñ˜dŸl™l¨D×,<Ñ,<Ô=Ü�G‰G×Ñ˜dŸl™l¨D×,<Ñ,<Õ=ð $rb   r†   rj   rk   rl   c           
      óö  — | j                   €j|| j                  | j                  | j                  |«      |||¬«      «      z   }|| j	                  | j                  | j                  |«      «      «      z   }|S || j                  | j                   | j                  | j                  |«      |||¬«      z  «      z   }|| j	                  | j                  | j                  | j                  |«      «      z  «      z   }|S ©N©rj   rk   rl   )r¾   r¿   rŽ   r½   rÄ   rÁ   rÀ   rÃ   ©r]   r†   rj   rk   rl   s        ra   r�   zEvaBlock.forwardˆ  sß   € ð �<‰<ÐØ�D—O‘O D§I¡I¨d¯j©j¸«mÀ$ÐR[Ðgp IÓ$qÓrÑrˆAØ�D—O‘O D§H¡H¨T¯Z©Z¸«]Ó$;Ó<Ñ<ˆAð ˆð �D—O‘O D§L¡L°4·9±9¸T¿Z¹ZÈ»]ÐQUÐajÐv°9ó  4Añ  %Aó  Bñ  BˆAØ�D—O‘O D§L¡L°4·8±8¸D¿J¹JÀq»MÓ3JÑ$JÓKÑKˆAØˆrb   r”   r–   )r—   r˜   r™   rI   ÚGELUr   rŸ   r�   r    Ústrr   r   rF   r\   rP   r¡   r�   r¢   r£   s   @ra   r¥   r¥     s�  ø„ ð "Ø"Ø!Ø$Ø#$Ø#Ø%*Ø%&Ø"Ø %Ø$Ø!Ø!Ø!Ø+/Ø"$§'¡'Ø#,Ø+/ØØñ/l àðl ð ðl ð ð	l ð
 ðl ð ðl ð ðl ð !ðl ð ðl ð #ðl ð  #ðl ð ðl ð ðl ð ðl ð ðl ð  ð!l ð" ð#l ð$ " %™ð%l ð&  ð'l ð( !ð)l ð* $ C™=õ+l ó\>ð ,0Ø04Ø#ñà�|‰|ðð ˜5Ÿ<™<Ñ(ðð   §¡Ñ-ð	ð
 ðð 
�‰÷rb   r¥   c            *       óR  ‡ — e Zd ZdZddddddddddddddd	ej
                  ej                  d	d	d	fd
edededede	de
dededededededede	de	de	dee	   dededee   f(ˆ fd„Z	 	 	 d%dej                  d eej                     d!eej                     d"ed#ej                  f
d$„Zˆ xZS )&ÚEvaBlockPostNormzF EVA block w/ post-norm and support for swiglu, MLP norm scale, ROPE. Tr¦   r§   Fr   r%   rt   Nr/   r0   r1   r2   r¨   r­   r;   r®   r©   rª   r«   r¬   r4   r6   r5   r¯   r°   r±   r8   r7   c                 óR  •— ||dœ}t         ‰| �  «        |dk(  rt        nt        } ||f|||||||||||dœ|¤Ž| _         ||fi |¤Ž| _        |dkD  rt        |«      nt        j                  «       | _	        t        ||z  «      }|	rJ|rt        d|||r|nd||
dœ|¤Ž| _        nGt        d||dz  |r|ndt        j                  d|d	œ|¤Ž| _        nt        d||||r|nd|d
œ|¤Ž| _         ||fi |¤Ž| _        |dkD  rt        |«      | _        yt        j                  «       | _        y)a   Initialize the post-norm EVA transformer block.

        Args:
          dim: Input dimension of the token embeddings
            num_heads: Number of attention heads
            qkv_bias: Whether to use bias terms in query, key, value projections
            qkv_fused: Whether to use a single projection for query, key, value
            mlp_ratio: Ratio of MLP hidden dimension to input dimension
            swiglu_mlp: Whether to use SwiGLU activation in the MLP
            scale_mlp: Whether to use normalization in the MLP
            scale_attn_inner: Whether to use normalization within the attention mechanism
            num_prefix_tokens: Number of tokens at the beginning of the sequence (class tokens, etc.)
            attn_type: Type of attention module to use ('eva' or 'rope')
            proj_drop: Dropout rate for projection layers
            attn_drop: Dropout rate for attention matrix
            drop_path: Stochastic depth rate
            init_values: Initial value for LayerScale, None = no LayerScale (NOTE: ignored for post-norm block)
            act_layer: Activation layer constructor
            norm_layer: Normalization layer constructor
            attn_head_dim: Dimension of each attention head (if None, computed as dim // num_heads)
        r>   rj   r³   rt   Nr´   rp   Fr¹   r»   r¼   )rE   rF   r#   r-   rŽ   r½   r   rI   rU   r¿   rŸ   r   rÁ   r   rÂ   r   rÀ   rÄ   )r]   r/   r0   r1   r2   r¨   r­   r;   r®   r©   rª   r«   r¬   r4   r6   r5   r¯   r°   r±   r8   r7   r?   r@   rÅ   r^   rÆ   r¶   r`   s                              €ra   rF   zEvaBlockPostNorm.__init__š  st  ø€ ð^ ¨Ñ/ˆÜ‰ÑÔà$-°Ò$7•=¼\ˆÙØð
àØØØ/ØØØ'Ø!Ø'Ø#Øñ
ð ñ
ˆŒ	ñ   Ñ* rÑ*ˆŒ
Ø1:¸R²œ( 9Ô-ÄRÇ[Á[Ã]ˆŒä˜c I™oÓ.ˆÙÙä!ð Ø #Ø$3Ù-6™z¸DØ"Ø,ñð ñ�•ô "ð Ø #Ø$3°aÑ$7Ù-6™z¸DÜ Ÿg™gØ#Ø"ñð ñ�•ô ð ØØ /Ø#Ù)2™:¸Øñð ñˆDŒHñ   Ñ* rÑ*ˆŒ
Ø1:¸R²œ( 9Ó-ˆ�ÄRÇ[Á[Ã]ˆ�rb   r†   rj   rk   rl   r•   c                 óÖ   — || j                  | j                  | j                  ||||¬«      «      «      z   }|| j                  | j	                  | j                  |«      «      «      z   }|S rÊ   )r¿   r½   rŽ   rÄ   rÀ   rÁ   rÌ   s        ra   r�   zEvaBlockPostNorm.forward  s[   € ð �—‘ §
¡
¨4¯9©9°Q¸TÈYÐbk¨9Ó+lÓ mÓnÑnˆØ�—‘ §
¡
¨4¯8©8°A«;Ó 7Ó8Ñ8ˆØˆrb   r–   )r—   r˜   r™   rš   rI   rÍ   r   rŸ   r�   r    rÎ   r   r   rF   rP   r¡   r�   r¢   r£   s   @ra   rÐ   rÐ   ˜  s¤  ø„ ÙPð
 "Ø"Ø!Ø"Ø %Ø$Ø$Ø#$Ø#Ø%*Ø%&Ø!Ø!Ø!Ø+/Ø"$§'¡'Ø#%§<¡<Ø+/ØØñ/fSàðfSð ðfSð ð	fSð
 ðfSð ðfSð ðfSð ðfSð ðfSð ðfSð !ðfSð ðfSð #ðfSð  #ðfSð ðfSð  ð!fSð" ð#fSð$ " %™ð%fSð&  ð'fSð( !ð)fSð* $ C™=õ+fSðV ,0Ø04Ø#ñ	à�|‰|ð	ð ˜5Ÿ<™<Ñ(ð	ð   §¡Ñ-ð		ð
 ð	ð 
�‰÷	rb   rÐ   c            [       óê  ‡ — e Zd ZdZddddddddd	d	d
dddddddddddedd	ddd	ddddddddddddddddddf.deeeeef   f   deeeeef   f   dedededededede	de	de
de	d ed!e	d"e	d#ed$e
d%e
d&e
d'e
d(e
d)e
d*ed+ee
   d,e	d-ed.e	d/e	d0e	d1ee   d2e
d3ed4e
d5e	d6e	d7e	d8ee	   d9ee	   d:ee   d;ee
   d<e	d=e	d>eeeeef   ef      d?e
fXˆ fd@„ZdcdAe	fdB„ZdddD„ZdcdEej"                  dAe	dCdfdF„Zej(                  j*                  dCee   fdG„«       Zej(                  j*                  dcdHe	dCdfdI„«       Zej(                  j*                  dedJe	dCeeef   fdK„«       Zej(                  j*                  dCej"                  fdL„«       Zdfdedee   dCdfdM„Z	 	 dgdeeeef      deeeef      dCdfdN„ZdCeej>                  eej>                     f   fdO„Z 	 	 	 	 	 	 	 	 dhdPej>                  dQeeee!e   f      dRe	dSe	dTe	dUedVe	dWeej>                     dXe	dCee!ej>                     eej>                  e!ej>                     f   f   fdY„Z"	 	 	 didQeee!e   f   dZe	d[e	fd\„Z#dfdPej>                  d]ee   dCej>                  fd^„Z$	 	 djdPej>                  dWeej>                     dXe	dCej>                  fd_„Z%dedPej>                  d`e	dCej>                  fda„Z&	 	 djdPej>                  dWeej>                     dXe	dCej>                  fdb„Z'ˆ xZ(S )kr+   a!   Eva Vision Transformer w/ Abs & Rotary Pos Embed

    This class implements the EVA and EVA02 models that were based on the BEiT ViT variant
      * EVA - abs pos embed, global avg pool
      * EVA02 - abs + rope pos embed, global avg pool, SwiGLU, scale Norm in MLP (ala normformer)
    éà   é   rA   éè  Úavgé   é   Tr¦   Fr   r§   rt   Nry   Úijg     ˆÃ@gü©ñÒMbP?Úimg_sizeÚ
patch_sizeÚin_chansÚnum_classesÚglobal_poolÚ	embed_dimÚdepthr0   r1   r2   r¨   r©   rª   r«   r¬   r­   Ú	drop_rateÚpos_drop_rateÚpatch_drop_rateÚproj_drop_rateÚattn_drop_rateÚdrop_path_rater8   r°   Úclass_tokenÚnum_reg_tokensÚno_embed_classÚuse_abs_pos_embÚuse_rot_pos_embÚ	rope_typeÚrope_grid_offsetÚrope_grid_indexingÚrope_temperatureÚrope_rotate_halfÚuse_post_normÚuse_pre_transformer_normÚuse_post_transformer_normÚuse_fc_normÚattn_pool_num_headsÚattn_pool_mlp_ratioÚdynamic_img_sizeÚdynamic_img_padÚref_feat_shapeÚhead_init_scalec/                 ó	  •— t         ‰;| �  «        |-|.dœ}/|dv sJ ‚|| _        || _        || _        |x| _        x| _        | _        |rdnd|z   | _        || _	        |)| _
        d| _        |$}0|&�|&}1n|dk(  }1|%�|%}2n|1 }2i }3|)r|3j                  t        dd¬	«      «       t        d+|||||*|$ d
œ|3¤|/¤Ž| _        | j                  j                   }4t#        | j                  d«      r| j                  j%                  «       n|}5|r+t'        j(                  t+        j,                  dd|fi |/¤Ž«      nd| _        |r+t'        j(                  t+        j,                  d||fi |/¤Ž«      nd| _        |xr | j0                  du | _        |r|4n|4| j                  z   }6|r+t'        j(                  t+        j,                  d|6|fi |/¤Ž«      nd| _        t'        j6                  |¬«      | _        |dkD  rt;        || j                  ¬«      | _        nd| _        d| _        |r•|+�tA        |+«      nd}+t        d+|||)rdn| j                  jB                  |!| dœ|/¤Ž}7|dk(  r#|7j                  t        |¬«      «       d| _        n"|dk(  r|7j                  t        d||+¬«      «       tE        d+d|i|7¤Ž| _#        nd| _#        |0r	 ||fi |/¤Žnt'        jH                  «       | _%        tM        ||«      }8|#rtN        ntP        }9t'        jR                  tU        |«      D �:cg c]J  }: |9d+i d|“d|“d|	“d|
“d|“d|“d|“d|“d|“d|“d|"“d | j                  “d!|“d"|“d#|8|:   “d$|“d%|“|/¤Ž‘ŒL c}:«      | _+        tU        |«      D �:cg c]  }:t        d&|:› �||5¬'«      ‘Œ c}:| _,        |2r	 ||fi |/¤Žnt'        jH                  «       | _-        |d(k(  r7t]        | j                  f|'xs ||(xs ||t&        j^                  d)œ|/¤Ž| _0        nd| _0        |1r	 ||fi |/¤Žnt'        jH                  «       | _1        t'        j6                  |«      | _2        |dkD  rt'        jf                  ||fi |/¤Žnt'        jH                  «       | _4        |,| _5        | jm                  d¬*«       yc c}:w c c}:w ),ay  Initialize the EVA Vision Transformer model.

        Args:
            img_size: Input image size (single int for square, or tuple for rectangular)
            patch_size: Patch size to divide image into tokens (single int for square, or tuple)
            in_chans: Number of input image channels
            num_classes: Number of classes (output dim) for classification head (final projection), 0 for pass-through
            global_pool: Type of global pooling for final sequence ('avg', 'token', 'map', etc.)
            embed_dim: Embedding dimension for tokens
            depth: Number of transformer blocks
            num_heads: Number of attention heads
            qkv_bias: Enable bias for query, key, value projections
            qkv_fused: Use a single projection for query, key, value
            mlp_ratio: Ratio of mlp hidden dim to embedding dim
            swiglu_mlp: Use SwiGLU activation in MLP
            scale_mlp: Apply scaling normalization in MLP (normformer style)
            scale_attn_inner: Apply scaling normalization inside attention
            attn_type: Type of attention module to use
            drop_rate: Dropout rate after final projection and pooling
            pos_drop_rate: Dropout rate for positional embeddings
            patch_drop_rate: Rate of dropping patches during training
            proj_drop_rate: Dropout rate for projections
            attn_drop_rate: Dropout rate for attention
            drop_path_rate: Stochastic depth rate
            norm_layer: Normalization layer constructor
            init_values: Initial layer-scale values
            class_token: Use class token
            num_reg_tokens: Number of additional learnable 'register' tokens to add to the sequence
            no_embed_class: Don't include position embeddings for class (or reg) tokens
            use_abs_pos_emb: Use absolute (learned) positional embeddings
            use_rot_pos_emb: Use rotary position embeddings
            rope_type: Type of RoPE to use ('cat', 'mixed', 'dinov3', etc.).
            rope_grid_offset: Offset for rotary position embedding grid
            rope_grid_indexing: Indexing mode for rotary position embeddings ('ij' or 'xy')
            rope_temperature: Temperature parameter for ROPE frequency computation
            rope_rotate_half: Use half rotation layout (rotate D/2 dims), else use interleaved rotation layout
            use_post_norm: Use post-norm transformer block type
            use_pre_transformer_norm: Use normalization layer before transformer blocks
            use_post_transformer_norm: Use normalization layer after transformer blocks
            use_fc_norm: Use normalization layer after pooling, before final classifier
            attn_pool_num_heads: Number of heads in attention pooling
            attn_pool_mlp_ratio: MLP ratio in attention pooling
            dynamic_img_size: Support dynamic image sizes in forward pass
            dynamic_img_pad: Apply dynamic padding for irregular image sizes
            ref_feat_shape: Reference feature shape for rotary position embedding scale
            head_init_scale: Initialization scale for classification head weights
        r>   )Ú r×   ÚavgmaxÚmaxÚtokenÚmapr%   r   FNr×   ÚNHWC)Ústrict_img_sizeÚ
output_fmt)rÛ   rÜ   rÝ   rà   rù   rB   Ú
feat_ratio)r„   )r4   )r/   r0   Ú
feat_shapeÚtemperatureÚgrid_indexingÚmixed)rá   Try   )Ú	in_pixelsÚgrid_offsetrú   rí   r/   r0   r1   r2   r¨   r©   rª   r«   r¬   r­   r;   r4   r6   r5   r¯   r8   r°   úblocks.)ÚmoduleÚnum_chsÚ	reductionr  )r0   r¨   r8   r±   ©Úneeds_resetr¼   )7rE   rF   rÞ   rÝ   rß   Únum_featuresÚhead_hidden_sizerà   r4   rê   rø   Úgrad_checkpointingÚupdateÚdictr   Úpatch_embedÚnum_patchesÚhasattrr  rI   rO   rP   rQ   Ú	cls_tokenÚ	reg_tokenÚ	cls_embedÚ	pos_embedrX   Úpos_dropr   Ú
patch_dropÚ
rope_mixedr   Ú	grid_sizer   rj   rU   Únorm_prer   rÐ   r¥   Ú
ModuleListÚrangeÚblocksÚfeature_inforY   r$   rÍ   Ú	attn_poolÚfc_normÚ	head_droprJ   Úheadrû   Úinit_weights)<r]   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   r0   r1   r2   r¨   r©   rª   r«   r¬   r­   râ   rã   rä   rå   ræ   rç   r8   r°   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rò   ró   rô   rõ   rö   r÷   rø   rù   rú   rû   r?   r@   r^   Úactivate_pre_normÚactivate_fc_normÚactivate_post_normÚ
embed_argsr  ÚrÚnum_pos_tokensÚrope_kwargsÚdprÚblock_fnÚir`   s<                                                              €ra   rF   zEva.__init__  s  ø€ ô@ 	‰ÑÔØ¨Ñ/ˆØÐJÑJÐJÐJØ&ˆÔØ ˆŒØ&ˆÔØENÐNˆÔÐN˜DÔ1°D´NÙ'2¡!¸¸^Ñ!KˆÔØ,ˆÔØ 0ˆÔØ"'ˆÔð 5ÐØÐ"Ø*Ñà*¨eÑ3ÐØ$Ð0Ø!:Ñà%5Ð!5Ðàˆ
Ùà×Ñœd°5ÀVÔLÔMÜ%ð 	
ØØ!ØØØ+Ø-Ð-ñ	
ð ð	
ð ñ	
ˆÔð ×&Ñ&×2Ñ2ˆÜ-4°T×5EÑ5EÀ|Ô-TˆD×Ñ×'Ñ'Ô)ÐZdˆáMXœŸ™¤e§k¡k°!°Q¸	Ñ&HÀRÑ&HÔIÐ^bˆŒÙZhœŸ™¤e§k¡k°!°^ÀYÑ&UÐRTÑ&UÔVÐnrˆŒØ$Ò?¨¯©¸4Ð)?ˆŒá(6™¸KÈ$×J`ÑJ`Ñ<`ˆÙZiœŸ™¤e§k¡k°!°^ÀYÑ&UÐRTÑ&UÔVÐosˆŒÜŸ
™
 ]Ô3ˆŒØ˜QÒÜ5°oÐY]×YoÑYoÔpˆD�Oà"ˆDŒOàˆŒÙØ:HÐ:TœY ~Ô6ÐZ^ˆNô ð ØØ#Ù#3™4¸×9IÑ9I×9SÑ9SØ,Ø0ñð ñˆKð ˜GÒ#Ø×"Ñ"¤4¨eÔ#4Ô5Ø"&�•Ø˜eÒ#Ø×"Ñ"¤4Ø#Ø 0Ø#1ô$ô ô *ÑM°IÐMÀÑMˆD�IàˆDŒIá7H™
 9Ñ3°Ò3ÌbÏkÉkËmˆŒä'¨¸Ó>ˆÙ'4Õ#¼(ˆÜ—m‘mô* ˜5“\ö+%#ð* ñ) ò Ùðá#ðñ "ðñ $ð	ñ
 $ðñ &ðñ !0ðñ $ðñ "2ðñ $ðñ -ðð #'×"8Ò"8ðñ )ðñ )ðð ˜aš&ðñ  &ð!ñ" (Øó%ò%#ó $ˆŒô. QVÐV[ÓP\ö^ØKLŒD˜' ! ˜¨yÀAÖFò^ˆÔñ 4F‘J˜yÑ/¨BÒ/Ì2Ï;É;Ë=ˆŒ	à˜%ÒÜ0Ø—‘ðà-Ò:°Ø-Ò:°Ø%ÜŸ'™'ñð ñˆD�Nð "ˆDŒNÙ6F‘z )Ñ2¨rÒ2ÌBÏKÉKËMˆŒÜŸ™ IÓ.ˆŒØ?JÈQº”B—I‘I˜i¨Ñ;¸Ò;ÔTV×T_ÑT_ÓTaˆŒ	Ø.ˆÔð 	×Ñ eÐÕ,ùòY%#ùò,^s   ÌARÍ/Rr  c                 óö  — | j                  t        | j                  |¬«      «       | j                  �t	        | j                  d¬«       | j
                  �t	        | j
                  d¬«       | j                  �t	        | j                  d¬«       | j                  «        | j                  rÂt        | j                  t        j                  «      r�t	        | j                  j                  d¬«       t        j                  «       5  | j                  j                  j!                  | j                  «       | j                  j"                  j!                  | j                  «       d d d «       y y y # 1 sw Y   y xY w)Nr  ç{®Gáz”?©Ústd)Úapplyr   Ú_init_weightsr  r   r  r  Úfix_init_weightrû   Ú
isinstancer*  rI   rJ   rn   rP   Úno_gradÚmul_rB   )r]   r  s     ra   r+  zEva.init_weights÷  s  € Ø�
‰
”7˜4×-Ñ-¸;ÔGÔHØ�>‰>Ð%Ü˜$Ÿ.™.¨cÕ2Ø�>‰>Ð%Ü˜$Ÿ.™.¨cÕ2Ø�>‰>Ð%Ü˜$Ÿ.™.¨cÕ2à×ÑÔà×Ò¤J¨t¯y©y¼"¿)¹)Ô$DÜ˜$Ÿ)™)×*Ñ*°Õ4Ü—‘“ñ :Ø—	‘	× Ñ ×%Ñ% d×&:Ñ&:Ô;Ø—	‘	—‘×#Ñ# D×$8Ñ$8Ô9÷:ð :ð %EÐ÷:ð :ús   ÄAE/Å/E8r•   c                 ó„  — t        j                  «       5  t        | j                  «      D ]~  \  }}t	        j
                  d|dz   z  «      }|j                  j                  j                  j                  |«       |j                  j                  j                  j                  |«       Œ€ 	 ddd«       y# 1 sw Y   yxY w)z=Fix initialization weights by rescaling based on layer depth.g       @r%   N)rP   r>  Ú	enumerater%  ÚmathÚsqrtrŽ   r[   rn   Údiv_rÁ   Úfc2)r]   Úlayer_idÚlayerrH   s       ra   r<  zEva.fix_init_weight  s‹   € ä�]‰]‹_ñ 	1Ü#,¨T¯[©[Ó#9ò 1‘�˜%ÜŸ	™	 #¨°A©Ñ"6Ó7�Ø—
‘
—‘×&Ñ&×+Ñ+¨EÔ2Ø—	‘	—‘×$Ñ$×)Ñ)¨%Õ0ñ1÷	1÷ 	1ñ 	1ús   •BB6Â6B?Úmc                 ó  — t        |t        j                  «      rNt        |j                  d¬«       |j
                  �*t        j                  j                  |j
                  «       yy|r#t        |d«      r|| ur|j                  «        yyyy)zÏInitialize weights for Linear layers and call reset_parameters on modules.

        Args:
            m: Module to initialize.
            needs_reset: Whether to call reset_parameters() on modules.
        r7  r8  Nr\   )
r=  rI   rJ   r   rn   rB   rd   re   r  r\   )r]   rH  r  s      ra   r;  zEva._init_weights  sn   € ô �aœŸ™Ô#Ü˜!Ÿ(™(¨Õ,Ø�v‰vÐ!Ü—‘—‘˜qŸv™vÕ&ð "áœW QÐ(:Ô;ÀÈÁØ×ÑÕ ð ANÐ;ˆ[rb   c                 ó–   — h d£}t        | dd«      x}r0t        |d«      r$||j                  «       D �ch c]  }d|› �’Œ	 c}z  S |S c c}w )z(Parameters to exclude from weight decay.>   r  r  r  rj   NÚno_weight_decayzrope.)r€   r  rK  )r]   Únwdrj   r„   s       ra   rK  zEva.no_weight_decay  sW   € ò 6ˆÜ˜D &¨$Ó/Ð/ˆDÐ/´W¸TÐCTÔ5UØ¨t×/CÑ/CÓ/EÖF¨!˜E ! š+ÒFÑFÐFØˆ
ùò Gs   ³AÚenablec                 ó   — || _         y)z)Enable or disable gradient checkpointing.N)r  )r]   rM  s     ra   Úset_grad_checkpointingzEva.set_grad_checkpointing&  s   € ð #)ˆÕrb   Úcoarsec                 ó$   — t        dddg¬«      }|S )z(Create layer groupings for optimization.z*^cls_token|reg_token|pos_embed|patch_embed)z^blocks\.(\d+)N)z^norm)iŸ† )Ústemr%  )r  )r]   rP  Úmatchers      ra   Úgroup_matcherzEva.group_matcher+  s!   € ô Ø>Ø-Ð/CÐDô
ˆð ˆrb   c                 ó   — | j                   S ©N)r*  rg   s    ra   Úget_classifierzEva.get_classifier4  s   € à�y‰yÐrb   c                 ó¬   — || _         |�|| _        |dkD  r&t        j                  | j                  |«      | _        yt        j
                  «       | _        y)z“Reset the classifier head.

        Args:
            num_classes: Number of output classes.
            global_pool: Global pooling type.
        Nr   )rÞ   rß   rI   rJ   rà   rU   r*  )r]   rÞ   rß   s      ra   Úreset_classifierzEva.reset_classifier8  sF   € ð 'ˆÔØÐ"Ø*ˆDÔØ>IÈAºo”B—I‘I˜dŸn™n¨kÓ:ˆ�	ÔSU×S^ÑS^ÓS`ˆ�	rb   c           	      ó$  — | j                   j                  }| j                   j                  ||¬«       | j                  �•| j                  rdn| j
                  }| j                   j                  |z   }|| j                  j                  d   k7  rFt        j                  t        | j                  | j                   j                  ||d¬«      «      | _        | j                  �0| j                  j                  | j                   j                  «       yy)zæUpdate the input image resolution and patch size.

        Args:
            img_size: New input resolution, if None current resolution is used.
            patch_size: New patch size, if None existing patch size is used.
        )rÛ   rÜ   Nr   r%   T)Únew_sizeÚold_sizer4   Úverbose)r  r!  Úset_input_sizer  rê   r4   r  rw   rI   rO   r   rj   Úupdate_feat_shape)r]   rÛ   rÜ   Úprev_grid_sizer4   Únum_new_tokenss         ra   r^  zEva.set_input_sizeD  sâ   € ð ×)Ñ)×3Ñ3ˆØ×Ñ×'Ñ'°ÀjÐ'ÔQà�>‰>Ð%Ø%)×%8Ò%8¡¸d×>TÑ>TÐØ!×-Ñ-×9Ñ9Ð<MÑMˆNØ §¡×!5Ñ!5°aÑ!8Ò8Ü!#§¡Ô.DØ—N‘NØ!×-Ñ-×7Ñ7Ø+Ø&7Ø ô/ó "�”ð �9‰9Ð Ø�I‰I×'Ñ'¨×(8Ñ(8×(BÑ(BÕCð !rb   c                 óŠ  — | j                   r©|j                  \  }}}}| j                  �J| j                  j                  }t        | j                  ||f|| j                  rdn| j                  ¬«      }nd }|j                  |d|«      }| j                  �| j                  j                  ||f¬«      nd }n4| j                  }| j                  �| j                  j                  «       nd }g }	| j                  �9|	j                  | j                  j                  |j                  d   dd«      «       | j                  �9|	j                  | j                  j                  |j                  d   dd«      «       | j                  r%|�||z   }|	r@t        j                   |	|gz   d¬«      }n$|	rt        j                   |	|gz   d¬«      }|�||z   }| j#                  |«      }| j$                  �Y| j%                  |«      \  }}
|�C|
�At'        |||
«      }t)        | dd«      r|j+                  dd«      }||fS |j-                  d«      }||fS )	Nr   )r[  r\  r4   ro   )rw   r%   rs   r   F)rø   rw   r  r  r!  r   rê   r4   Úviewrj   Ú	get_embedr  ÚappendÚexpandr  rP   ry   r  r  r   r€   r   Ú	unsqueeze)r]   r†   r‡   ÚHÚWr‰   r`  r  Úrot_pos_embedÚto_catÚkeep_indicess              ra   Ú
_pos_embedzEva._pos_embeda  s  € Ø× Ò ØŸ™‰JˆAˆq�!�QØ�~‰~Ð)Ø!%×!1Ñ!1×!;Ñ!;�Ü2Ø—N‘NØ ˜VØ+Ø+/×+>Ò+>¡aÀD×DZÑDZô	‘	ð !�	Ø—‘�q˜"˜aÓ ˆAØAEÇÁÐAV˜DŸI™I×/Ñ/°q¸!°fÐ/Ô=Ð\`‰MàŸ™ˆIØ59·Y±YÐ5J˜DŸI™I×/Ñ/Ô1ÐPTˆMàˆØ�>‰>Ð%Ø�M‰M˜$Ÿ.™.×/Ñ/°·±¸±
¸BÀÓCÔDØ�>‰>Ð%Ø�M‰M˜$Ÿ.™.×/Ñ/°·±¸±
¸BÀÓCÔDà×ÒàÐ$Ø˜	‘M�ÙÜ—I‘I˜f¨ s™l°Ô2‘ñ Ü—I‘I˜f¨ s™l°Ô2�ØÐ$Ø˜	‘M�à�M‰M˜!Óˆð �?‰?Ð&Ø"Ÿo™o¨aÓ0‰OˆAˆ|ØÐ(¨\Ð-EÜ 6°q¸-ÈÓ V�ä˜4 ¨uÔ5à$1×$;Ñ$;¸A¸qÓ$A�Mð
 �-ÐÐð %2×$;Ñ$;¸AÓ$>�Mà�-ÐÐrb   r†   ÚindicesÚreturn_prefix_tokensrY   Ú
stop_earlyr  Úintermediates_onlyrk   rl   c
           	      óÎ  — |dv sJ d«       ‚|dk(  }
g }t        t        | j                  «      |«      \  }}|j                  \  }}}}| j	                  |«      }| j                  |«      \  }}| j                  |«      }t        j                  j                  «       s|s| j                  }n| j                  d|dz    }t        | dd«      rŒ|�Št        |«      D ]{  \  }}| j                  r2t        j                  j                  «       st        ||||   ||	¬«      }n ||||   ||	¬«      }||v sŒX|j                  |r| j                  |«      n|«       Œ} nƒt        |«      D ]u  \  }}| j                  r/t        j                  j                  «       st        |||||	¬«      }n |||||	¬«      }||v sŒR|j                  |r| j                  |«      n|«       Œw | j                   rD|D �cg c]  }|dd…d	| j                   …f   ‘Œ }}|D �cg c]  }|dd…| j                   d…f   ‘Œ }}|
ra| j                  j#                  ||f«      \  }}|D �cg c]6  }|j%                  |||d
«      j'                  d	ddd«      j)                  «       ‘Œ8 }}t        j                  j                  «       s|rt+        t-        |«      «      }|r|S | j                  |«      }||fS c c}w c c}w c c}w )a¾   Forward features that returns intermediates.
        Args:
            x: Input image tensor
            indices: Take last n blocks if an int, if is a sequence, select by matching indices
            return_prefix_tokens: Return both prefix and spatial intermediate tokens
            norm: Apply norm layer to all intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
            attn_mask: Optional attention mask for masked attention
            is_causal: If True, use causal (autoregressive) masking in attention
        )ÚNCHWÚNLCz>Output format for EVA-ViT features must be one of NCHW or NLC.rs  Nr%   r   FrË   r   ro   rA   rp   )r'   Úlenr%  rw   r  rm  r"  rP   r›   Úis_scriptingr€   rA  r  r(   re  rY   r4   Údynamic_feat_sizer|   r}   Ú
contiguousÚlistÚzip)r]   r†   rn  ro  rY   rp  r  rq  rk   rl   r|   ÚintermediatesÚtake_indicesÚ	max_indexr‡   Ú_ÚheightÚwidthrj  r%  r5  ÚblkÚyÚprefix_tokensrh  ri  s                             ra   Úforward_intermediateszEva.forward_intermediates˜  sÏ  € ð0 ˜_Ñ,ÐnÐ.nÓnÐ,Ø Ñ&ˆØˆÜ"6´s¸4¿;¹;Ó7GÈÓ"QÑˆ�ið  Ÿg™gÑˆˆ1ˆf�eØ×Ñ˜QÓˆØŸ?™?¨1Ó-Ñˆˆ=Ø�M‰M˜!ÓˆÜ�9‰9×!Ñ!Ô#©:Ø—[‘[‰Fà—[‘[  )¨a¡-Ð0ˆFô �4˜ uÔ-°-Ð2KÜ# FÓ+ò F‘��3Ø×*Ò*´5·9±9×3IÑ3IÔ3KÜ" 3¨°¸aÑ0@ÈIÐajÔk‘Aá˜A M°!Ñ$4À	ÐU^Ô_�AØ˜Ò$Ø!×(Ñ(¹¨¯©°1¬À1ÕEñFô $ FÓ+ò F‘��3Ø×*Ò*´5·9±9×3IÑ3IÔ3KÜ" 3¨°ÈÐ^gÔh‘Aá˜A M¸YÐR[Ô\�AØ˜Ò$Ø!×(Ñ(¹¨¯©°1¬À1ÕEðFð ×!Ò!àERÖSÀ˜Qšq ! D×$:Ñ$:Ð":Ð:Ó;ÐSˆMÐSØDQÖR¸q˜Qšq $×"8Ñ"8Ñ"9Ð9Ó:ÐRˆMÐRÙà×#Ñ#×5Ñ5°v¸u°oÓF‰DˆAˆqØ^kÖlÐYZ˜QŸY™Y q¨!¨Q°Ó3×;Ñ;¸A¸qÀ!ÀQÓG×RÑRÕTÐlˆMÐlÜ�y‰y×%Ñ%Ô'Ñ,@ä ¤ ]°MÓ!BÓCˆMáØ Ð à�I‰I�a‹Lˆà�-ÐÐùò TùÚRùò ms   Ç'KÈ	KÉ;K"Ú
prune_normÚ
prune_headc                 ó  — t        t        | j                  «      |«      \  }}| j                  d|dz    | _        |rt        j                  «       | _        |r2d| _        t        j                  «       | _        | j                  dd«       |S )z@ Prune layers not required for specified intermediates.
        Nr%   r   rý   )	r'   ru  r%  rI   rU   rY   r'  r(  rY  )r]   rn  r…  r†  r|  r}  s         ra   Úprune_intermediate_layerszEva.prune_intermediate_layerså  sq   € ô #7´s¸4¿;¹;Ó7GÈÓ"QÑˆ�iØ—k‘k . 9¨q¡=Ð1ˆŒÙÜŸ™›ˆDŒIÙØ!ˆDŒNÜŸ;™;›=ˆDŒLØ×!Ñ! ! RÔ(ØÐrb   Ú	pool_typec                 ó”   — | j                   �| j                  |«      }|S |€| j                  n|}t        ||| j                  ¬«      }|S )N)r‰  r4   )r'  rß   r   r4   )r]   r†   r‰  s      ra   ÚpoolzEva.pool÷  sJ   € Ø�>‰>Ð%Ø—‘˜qÓ!ˆAØˆHØ(1Ð(9�D×$Ò$¸yˆ	Ü˜A¨Àd×F\ÑF\Ô]ˆØˆrb   c                 ó8  — | j                  |«      }| j                  |«      \  }}| j                  |«      }t        | dd«      rm|�kt	        | j
                  «      D ]R  \  }}| j                  r2t        j                  j                  «       st        ||||   ||¬«      }ŒD ||||   ||¬«      }ŒT nX| j
                  D ]I  }| j                  r/t        j                  j                  «       st        |||||¬«      }Œ> |||||¬«      }ŒK | j                  |«      }|S )a(  Forward pass through feature extraction layers.

        Args:
            x: Input tensor.
            attn_mask: Optional attention mask for masked attention
            is_causal: If True, use causal (autoregressive) masking in attention.

        Returns:
            Feature tensor.
        r   FrË   )r  rm  r"  r€   rA  r%  r  rP   r›   rv  r(   rY   )r]   r†   rk   rl   rj  r5  r�  s          ra   Úforward_featureszEva.forward_featuresÿ  s  € ð  ×Ñ˜QÓˆØŸ?™?¨1Ó-Ñˆˆ=Ø�M‰M˜!Óˆä�4˜ uÔ-°-Ð2Kô $ D§K¡KÓ0ò `‘��3Ø×*Ò*´5·9±9×3IÑ3IÔ3KÜ" 3¨°¸aÑ0@ÈIÐajÔk‘Aá˜A M°!Ñ$4À	ÐU^Ô_‘Añ	`ð —{‘{ò ]�Ø×*Ò*´5·9±9×3IÑ3IÔ3KÜ" 3¨°ÈÐ^gÔh‘Aá˜A M¸YÐR[Ô\‘Að	]ð �I‰I�a‹LˆØˆrb   Ú
pre_logitsc                 ó’   — | j                  |«      }| j                  |«      }| j                  |«      }|r|S | j                  |«      S )z¼Forward pass through classifier head.

        Args:
            x: Feature tensor.
            pre_logits: Return pre-logits if True.

        Returns:
            Output tensor.
        )r‹  r(  r)  r*  )r]   r†   rŽ  s      ra   Úforward_headzEva.forward_head&  sA   € ð �I‰I�a‹LˆØ�L‰L˜‹OˆØ�N‰N˜1ÓˆÙˆqÐ0 D§I¡I¨a£LÐ0rb   c                 óP   — | j                  |||¬«      }| j                  |«      }|S )a  Forward pass.

        Args:
            x: Input tensor.
            attn_mask: Optional attention mask for masked attention
            is_causal: If True, use causal (autoregressive) masking in attention.

        Returns:
            Output tensor.
        )rk   rl   )r�  r�  )r]   r†   rk   rl   s       ra   r�   zEva.forward5  s0   € ð  ×!Ñ! !¨yÀIÐ!ÓNˆØ×Ñ˜aÓ ˆØˆrb   )Tr”   ©FrV  )NN)NFFFrs  FNF)r%   FT)NF))r—   r˜   r™   rš   r   r   rŸ   r
   rÎ   r�   r    r   r   rF   r+  r<  rI   ÚModuler;  rP   r›   Úignorer	   rK  rO  r   r   rT  rW  rY  r^  r¡   rm  r   r„  rˆ  r‹  r�  r�  r�   r¢   r£   s   @ra   r+   r+     s<  ø„ ñð 58Ø68ØØ#Ø$Ø ØØØ!Ø"Ø!Ø$Ø#$Ø#Ø%*Ø"Ø!Ø#%Ø%'Ø$&Ø$&Ø$&Ø#,Ø+/Ø $Ø"#Ø#(Ø$(Ø$)Ø',Ø&(Ø&*Ø&,Ø%*Ø"'Ø-2Ø8<Ø*.Ø15Ø37Ø%*Ø$)ØDHØ%*ØØñ__-à˜C  s¨C x¡Ð0Ñ1ð_-ð ˜c 5¨¨c¨¡?Ð2Ñ3ð_-ð ð	_-ð
 ð_-ð ð_-ð ð_-ð ð_-ð ð_-ð ð_-ð ð_-ð ð_-ð ð_-ð !ð_-ð ð_-ð  #ð!_-ð" ð#_-ð$ ð%_-ð& !ð'_-ð( #ð)_-ð* "ð+_-ð, "ð-_-ð. "ð/_-ð0 !ð1_-ð2 " %™ð3_-ð4 ð5_-ð6  ð7_-ð8 !ð9_-ð: "ð;_-ð< "ð=_-ð>   ‘}ð?_-ð@ $ðA_-ðB !$ðC_-ðD $ðE_-ðF #ðG_-ðH  ðI_-ðJ '+ðK_-ðL (0°¡~ðM_-ðN " $™ðO_-ðP "*¨#¡ðQ_-ðR "*¨%¡ðS_-ðT #ðU_-ðV "ðW_-ðX % U¨5°°c°©?¸CÐ+?Ñ%@ÑAðY_-ðZ #õ[_-ñB:¨ó :ó"1ñ!˜rŸy™yð !°tð !Àtó !ð ‡Y�Y×Ñð  S¡ò ó ðð ‡Y�Y×Ññ)¨Tð )¸Tò )ó ð)ð ‡Y�Y×Ññ Dð °T¸#¸s¸(±^ò ó ðð ‡Y�Y×Ñð §	¡	ò ó ðñ
a¨Cð 
a¸hÀs¹mð 
aÐW[ó 
að 37Ø48ñDà˜u S¨# X™Ñ/ðDð !  s¨C x¡Ñ1ðDð 
ó	Dð:5 ˜u U§\¡\°8¸E¿L¹LÑ3IÐ%IÑJó 5 ðt 8<Ø).ØØ$Ø$Ø',Ø04Ø#ñK à�|‰|ðK ð ˜e C¨¨c© NÑ3Ñ4ðK ð #'ð	K ð
 ðK ð ðK ð ðK ð !%ðK ð   §¡Ñ-ðK ð ðK ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	KóK ð^ ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	ñ$�e—l‘lð ¨x¸©}ð ÈÏÉó ð 15Ø#ñ	%à�|‰|ð%ð   §¡Ñ-ð%ð ð	%ð
 
�‰ó%ñN1˜eŸl™lð 1¸ð 1ÈÏÉó 1ð$ 15Ø#ñ	à�|‰|ðð   §¡Ñ-ðð ð	ð
 
�‰÷rb   Ú
state_dictÚmodelÚprefixr•   c                 óÂ  — | j                  d| «      } | j                  «       D ��ci c]  \  }}|j                  dd«      |“Œ } }}i }g d¢}t        |«      }| j                  «       D �]n  \  }}|r|j	                  |«      sŒ||d }|D ]  }|j                  |d   |d   «      }Œ |j	                  d«      r�|j                  d	d«      }|j                  d
d«      }|j                  dd«      }|j	                  d«      rÓ|j
                  d   dz  }	|j                  d«      r|d|	 |d<   ||	d |d<   n!|j                  d«      r|d|	 |d<   ||	d |d<   Œí|dk(  r:d}|j                  dd«      }t        j                  |j
                  d   «      |d<   n>|dk(  r#d}|j                  d«      j                  d«      }n|dk(  r|j                  d«      }|||<   �Œq |S c c}}w )zçConvert Perception Encoder weights.

    Args:
        state_dict: State dictionary to convert.
        model: Target model instance.
        prefix: Prefix to strip from keys.

    Returns:
        Converted state dictionary.
    r–  zmodule.rý   ))Úconv1úpatch_embed.proj)Úpositional_embeddingr  )ztransformer.resblocks.r  )Úln_prer"  )Úln_postrY   )Úln_rY   )z
ls_1.gammar¾   )z
ls_2.gammarÃ   )Úin_proj_zqkv.)Úout_projr[   )zmlp.c_fcúmlp.fc1)z
mlp.c_projúmlp.fc2Nr   r%   r'  zattn_pool.attnzattn_pool.layernormzattn_pool.normzattn_pool.probezattn_pool.latentzattn_pool.qkvrA   rn   zattn_pool.q.weightzattn_pool.kv.weightrB   zattn_pool.q.biaszattn_pool.kv.biasr[   zhead.weightz	head.biasÚclass_embeddingr  r  )ÚgetÚitemsÚreplaceru  Ú
startswithrw   Úendswithr   rP   Úzerosrg  )
r•  r–  r—  r‹   rŒ   Úout_dictÚswapsÚ
len_prefixÚspr/   s
             ra   Ú_convert_per®  J  s  € ð —‘ ¨Ó4€JØ:D×:JÑ:JÓ:L×M±$°!°Q�!—)‘)˜I rÓ*¨AÑ-ÐM€JÑMà€Hò€Eô �V“€JØ× Ñ Ó"ó ‰ˆˆ1ÙØ—<‘< Ô'ØØ�*�+�ˆAàò 	(ˆBØ—	‘	˜"˜Q™%  A¡Ó'‰Að	(ð �<‰<˜Ô$Ø—	‘	Ð*¨KÓ8ˆAØ—	‘	Ð/Ð1AÓBˆAØ—	‘	Ð+Ð-?Ó@ˆAØ�|‰|˜OÔ,Ø—g‘g˜a‘j A‘o�Ø—:‘:˜hÔ'Ø56°t¸°W�HÐ1Ñ2Ø67¸¸°g�HÐ2Ò3Ø—Z‘Z Ô'Ø34°T°c°7�HÐ/Ñ0Ø45°c°d°G�HÐ0Ñ1ØØ�&Š[ØˆAØ—‘˜A˜qÓ!ˆAÜ$)§K¡K°·±¸±
Ó$;ˆH�[Ò!ØÐ#Ò#ØˆAØ—‘˜A“×(Ñ(¨Ó+‰AØ�+ÒØ—‘˜A“ˆAØˆ�‹ð?ðB €Oùóg Ns   ¦GÚinterpolationÚ	antialiasc           	      ó  — i }| j                  d| «      } | j                  d| «      } | j                  d| «      } | j                  d| «      } d| v rt        | |«      S d| v rt        | |d¬«      S d	| v rd
}n	d| v rd}nd}d| v }| xr |dz   | v }|dz   | v }t        |«      }	| j                  «       D �]«  \  }
}|r|
j	                  |«      sŒ|
|	d }
d|
v r|
dk(  sŒ*|rët        dD �cg c]  }|
j                  |«      ‘Œ c}«      rŒU|
j	                  d«      rŒg|
j	                  d«      rŒy|
j                  d«      rV|
j                  dd«      }	 |j                  |«       |j                  dd¬«      \  }}}|||<   |||
j                  dd«      <   Œà|
j                  dd«      }
|
j                  dd«      }
|
j                  dd «      }
n%|r#|
d!v r|
d"k(  s|
d#k(  r|
j                  d$d%«      }
n�Œ<d&|
v rf|j                  j                  j                  j                  \  }}}}|j                  d   |k7  s|j                  d'   |k7  r‚t!        |||f||d(¬)«      }no|
d*k(  rj|j                  d+   |j"                  j                  d+   k7  rAt%        |d,d-«      rd.nt%        |d/d+«      }t'        ||j                  j(                  |||d(¬0«      }|
j                  d1d2«      }
|
j                  d3d4«      }
|
j                  d5d6«      }
|
j                  d7d8«      }
|
j                  d9d:«      }
|
j                  d;d<«      }
|r$|
j                  dd=«      }
|
j                  dd>«      }
|||
<   �Œ® |S c c}w # t        $ r}t        |«       Y d}~�ŒÐd}~ww xY w)?aZ  Convert patch embedding weight from manual patchify + linear proj to conv.

    Args:
        state_dict: Checkpoint state dictionary.
        model: Target model instance.
        interpolation: Interpolation method for resizing.
        antialias: Whether to use antialiasing when resizing.

    Returns:
        Filtered state dictionary.
    Ú	model_emar–  r  r•  zvisual.conv1.weightzconv1.weightrý   )r—  zvisual.trunk.pos_embedzvisual.trunk.zvisual.pos_embedúvisual.Ústorage_tokensÚ
mask_tokenzblocks.0.attn.q_proj.weightNrj   z
rope.freqs)z.periodsz
.bias_maskrµ  zprojectors.Úlocal_cls_normzqkv.biasrR   rA   ro   rs   rT   z	ls1.gammar¾   z	ls2.gammarÃ   r  )rµ  zlm_head.weightzlm_head.biasúnorm.weightú	norm.biasr·  r¸  rY   r(  zpatch_embed.proj.weightrv   T)r¯  r°  r]  r  r%   rê   Fr   r4   )r[  r4   r¯  r°  r]  z
mlp.ffn_lnzmlp.normzattn.inner_attn_lnz	attn.normzmlp.w12r¡  zmlp.w1z	mlp.fc1_gzmlp.w2z	mlp.fc1_xzmlp.w3r¢  zq_proj.biaszv_proj.bias)r¤  r®  ru  r¥  r§  Úanyr¨  r¦  Úget_parameterÚ	ExceptionÚprintÚchunkr  r[   rn   rw   r   r  r€   r   r!  )r•  r–  r¯  r°  rª  r—  Údinov3_weightsÚmim_weightsÚno_qkvr¬  r‹   rŒ   ÚfÚq_bias_kÚeÚqvÚkvÚvvr~  rh  ri  r4   s                         ra   Úcheckpoint_filter_fnrÇ  �  sÁ  € ð" €Hà—‘ ¨ZÓ8€JØ—‘ ¨Ó4€JØ—‘ ¨*Ó5€JØ—‘ ¨jÓ9€Jð  
Ñ*Ü˜: uÓ-Ð-Ø	˜:Ñ	%Ü˜: u°RÔ8Ð8ð   :Ñ-Ø ‰Ø	˜zÑ	)Ø‰àˆà%¨Ð3€NØ$Ð$ÒL¨°,Ñ)>À*Ð)L€KØÐ3Ñ3°zÐA€Fä�V“€JØ× Ñ Ó"ó O‰ˆˆ1ÙØ—<‘< Ô'ØØ�*�+�ˆAà�Q‰;˜q LÒ0àáÜÐ+SÖT a�A—J‘J˜q•MÒTÔUàØ�|‰|˜MÔ*àØ�|‰|Ð,Ô-àØ�z‰z˜*Ô%ØŸ9™9 Z°Ó:�ðð ×'Ñ'¨Ô1ð ŸW™W Q¨B˜WÓ/‘
��B˜Ø%'�˜Ñ"Ø<>�˜Ÿ™ :¨xÓ8Ñ9ØØ—	‘	˜+ yÓ1ˆAØ—	‘	˜+ yÓ1ˆAØ—	‘	Ð*¨KÓ8‰Aá˜QÐ"nÑnØ�MÒ! Q¨+Ò%5à—I‘I˜f iÓ0‘ñ à$¨Ñ)Ø×*Ñ*×/Ñ/×6Ñ6×<Ñ<‰JˆAˆq�!�QØ�w‰w�r‰{˜aÒ 1§7¡7¨2¡;°!Ò#3Ü(ØØ˜�FØ"/Ø'Ø ô‘ð �+Ò !§'¡'¨!¡*°·±×0EÑ0EÀaÑ0HÒ"Hä%,¨UÐ4DÀeÔ%L¡ÔRYÐZ_ÐatÐvwÓRxÐÜ&ØØ×*Ñ*×4Ñ4Ø"3Ø+Ø#ØôˆAð �I‰I�l JÓ/ˆØ�I‰IÐ*¨KÓ8ˆØ�I‰I�i Ó+ˆØ�I‰I�h Ó,ˆØ�I‰I�h Ó,ˆØ�I‰I�h 	Ó*ˆÙØ—	‘	˜( MÓ2ˆAØ—	‘	˜( MÓ2ˆAàˆ�‹ð_Oðb €OùòM Uøô !ò Ü˜!”Håûðús   Ã$M 
ÅM%Í%	NÍ.M?Í?NÚvariantÚ
pretrainedc                 ó  — |j                  dd«      }t        j                  j                  dd«      dk(  }|€|}|rddlm}  || |fi |¤ŽS |j                  dd	«      }t        t        | |ft        t        |d
¬«      dœ|¤Ž}|S )zÒCreate an EVA model.

    Args:
        variant: Model variant name.
        pretrained: Load pretrained weights.
        **kwargs: Additional model arguments.

    Returns:
        Instantiated Eva model.
    Ú
use_naflexNÚTIMM_USE_NAFLEXÚ0Ú1r%   )Ú_create_naflexvit_from_evaÚout_indicesrA   Úgetter)rÐ  Úfeature_cls)Úpretrained_filter_fnÚfeature_cfg)
ÚpopÚosÚenvironr¤  Ú	naflexvitrÏ  r&   r+   rÇ  r  )rÈ  rÉ  rÅ   rË  Ú_USE_NAFLEX_DEFAULTrÏ  rÐ  r–  s           ra   Ú_create_evarÚ    s–   € ð —‘˜L¨$Ó/€JÜŸ*™*Ÿ.™.Ð):¸CÓ@ÀCÑGÐØÐØ(ˆ
Ùå9Ù)¨'°:ÑHÀÑHÐHà—*‘*˜]¨AÓ.€KÜ ÜˆW�jðä1Ü [¸hÔGñð ñ	€Eð €Lrb   Úurlc                 ó4   — | ddddddt         t        ddd	d
œ|¥S )zËGenerate default configuration for EVA models.

    Args:
        url: Model weights URL.
        **kwargs: Additional configuration parameters.

    Returns:
        Model configuration dictionary.
    rÖ   ©rA   rÔ   rÔ   NgÍÌÌÌÌÌì?ÚbicubicTrš  r*  Úmit©rÛ  rÞ   Ú
input_sizeÚ	pool_sizeÚcrop_pctr¯  Úfixed_input_sizeÚmeanr9  Ú
first_convÚ
classifierÚlicense)r   r   ©rÛ  rÅ   s     ra   Ú_cfgrê  .  s6   € ð Ø¨=ÀtØ¨ÈÜ ¬Ø(¸Øñð #ðð rb   c                 ó$   — | dddddddddd	d
dœ|¥S )zÚGenerate default configuration for Perception Encoder models.

    Args:
        url: Model weights URL.
        **kwargs: Additional configuration parameters.

    Returns:
        Model configuration dictionary.
    r   rÝ  Nç      ð?rÞ  T©ç      à?rî  rî  rš  r*  ú
apache-2.0rà  r¼   ré  s     ra   Ú_pe_cfgrð  B  s6   € ð Ø¨ÀDØ¨)ÈØ¨Ø(¸Øñð $*ðð rb   c                 ó4   — | ddddddt         t        ddd	d
œ|¥S )aè  Generate default configuration for DINOv3 models.

    Note: Original DINOv3 uses CLS-token pooling for representations. timm defaults to avg
    pooling for the Eva architecture. Pass global_pool='token' at model creation to match
    upstream behavior, which may be preferred for tasks like retrieval and few-shot classification.

    Args:
        url: Model weights URL.
        **kwargs: Additional configuration parameters.

    Returns:
        Model configuration dictionary.
    r   ©rA   é   ró  Nrì  rÞ  Trš  r*  zdinov3-licenserà  ©r   r   ré  s     ra   Ú_dinov3_cfgrõ  V  s7   € ð Ø¨ÀDØ¨)ÈÜ%Ô.BØ(¸Ø#ñð (.ðð rb   c                 ó4   — | ddddddt         t        ddd	d
œ|¥S )z/Generate default configuration for EUPE models.r   rò  Nrì  rÞ  Trš  r*  z#fair-noncommercial-research-licenserà  rô  ré  s     ra   Ú	_eupe_cfgr÷  n  s8   € ð Ø¨ÀDØ¨)ÈÜ%Ô.BØ(¸Ø8ñð =Cðð rb   z"eva_giant_patch14_224.clip_ft_in1kztimm/)Ú	hf_hub_idz"eva_giant_patch14_336.clip_ft_in1k)rA   éP  rù  rì  Úsquash)rø  rá  rã  Ú	crop_modez(eva_giant_patch14_336.m30m_ft_in22k_in1k)rø  rå  r9  rá  rã  rû  z(eva_giant_patch14_560.m30m_ft_in22k_in1k)rA   é0  rü  z.eva02_base_patch14_448.mim_in22k_ft_in22k_in1k)rA   éÀ  rý  z/eva02_large_patch14_448.mim_in22k_ft_in22k_in1kz.eva02_large_patch14_448.mim_m38m_ft_in22k_in1kz(eva02_tiny_patch14_336.mim_in22k_ft_in1k)rø  rá  rã  z)eva02_small_patch14_336.mim_in22k_ft_in1kz(eva02_base_patch14_448.mim_in22k_ft_in1kz)eva02_large_patch14_448.mim_in22k_ft_in1kz(eva02_large_patch14_448.mim_m38m_ft_in1kz)eva02_base_patch14_448.mim_in22k_ft_in22kiQU  )rø  rá  rã  rû  rÞ   z*eva02_large_patch14_448.mim_in22k_ft_in22kz)eva02_large_patch14_448.mim_m38m_ft_in22kz eva02_tiny_patch14_224.mim_in22k)rø  rÞ   z!eva02_small_patch14_224.mim_in22kz eva02_base_patch14_224.mim_in22kz!eva02_large_patch14_224.mim_in22kz eva02_large_patch14_224.mim_m38mz$eva_giant_patch14_clip_224.laion400mé   z#eva_giant_patch14_clip_224.merged2bz$eva02_base_patch16_clip_224.merged2bé   z%eva02_large_patch14_clip_224.merged2brØ   z%eva02_large_patch14_clip_336.merged2b)rø  rá  rã  rÞ   z'eva02_enormous_patch14_clip_224.laion2bz,eva02_enormous_patch14_clip_224.laion2b_plusz(eva02_enormous_patch14_clip_224.pretrain)rÞ   z-vit_medium_patch16_rope_reg1_gap_256.sbb_in1krò  gffffffî?rí  )rø  rá  rã  rå  r9  z.vit_mediumd_patch16_rope_reg1_gap_256.sbb_in1kz.vit_betwixt_patch16_rope_reg4_gap_256.sbb_in1kz+vit_base_patch16_rope_reg1_gap_256.sbb_in1kzvit_pe_core_tiny_patch16_384.fb)rA   é€  r   )rø  rá  rÞ   z vit_pe_core_small_patch16_384.fbzvit_pe_core_base_patch16_224.fbrÝ  z vit_pe_core_large_patch14_336.fbz#vit_pe_core_gigantic_patch14_448.fbé   z vit_pe_lang_large_patch14_448.fbz'vit_pe_lang_large_patch14_448.fb_tilingz#vit_pe_lang_gigantic_patch14_448.fbz*vit_pe_lang_gigantic_patch14_448.fb_tilingz"vit_pe_spatial_tiny_patch16_512.fb)rA   rÿ  rÿ  z#vit_pe_spatial_small_patch16_512.fbz"vit_pe_spatial_base_patch16_512.fbz#vit_pe_spatial_large_patch14_448.fbz&vit_pe_spatial_gigantic_patch14_448.fbz%vit_small_patch16_rope_224.naver_in1krï  )rø  rå  r9  rè  z$vit_base_patch16_rope_224.naver_in1kz%vit_large_patch16_rope_224.naver_in1kz+vit_small_patch16_rope_mixed_224.naver_in1kz*vit_base_patch16_rope_mixed_224.naver_in1kz+vit_large_patch16_rope_mixed_224.naver_in1kz)vit_small_patch16_rope_ape_224.naver_in1kz(vit_base_patch16_rope_ape_224.naver_in1kz)vit_large_patch16_rope_ape_224.naver_in1kz/vit_small_patch16_rope_mixed_ape_224.naver_in1kz.vit_base_patch16_rope_mixed_ape_224.naver_in1kz/vit_large_patch16_rope_mixed_ape_224.naver_in1kz!vit_small_patch16_dinov3.lvd1689mz&vit_small_patch16_dinov3_qkvb.lvd1689mz&vit_small_plus_patch16_dinov3.lvd1689mz+vit_small_plus_patch16_dinov3_qkvb.lvd1689mz vit_base_patch16_dinov3.lvd1689mz%vit_base_patch16_dinov3_qkvb.lvd1689mz*vit_tiny_patch16_dinov3_qkvb.eupe_lvd1689mz+vit_small_patch16_dinov3_qkvb.eupe_lvd1689mz*vit_base_patch16_dinov3_qkvb.eupe_lvd1689mz!vit_large_patch16_dinov3.lvd1689m)g…ëQ¸…Û?gçû©ñÒMÚ?g‹lçû©ñÒ?)gÝ$�•CË?g+‡ÙÎ÷Ã?gçû©ñÒMÂ?)rø  rå  r9  )z&vit_large_patch16_dinov3_qkvb.lvd1689mz vit_large_patch16_dinov3.sat493mz%vit_large_patch16_dinov3_qkvb.sat493mz%vit_huge_plus_patch16_dinov3.lvd1689mz*vit_huge_plus_patch16_dinov3_qkvb.lvd1689mzvit_7b_patch16_dinov3.lvd1689mzvit_7b_patch16_dinov3.sat493mc           	      óT   — t        ddddd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )	ú,EVA-g model https://arxiv.org/abs/2211.07636é   é€  é(   rÕ   çtÑE]t@©rÜ   rà   rá   r0   r¨   rÉ  )Úeva_giant_patch14_224©r  rÚ  ©rÉ  rÅ   Ú
model_argsr–  s       ra   r	  r	    ó9   € ô  ¨t¸2ÈÐWbÔc€JÜÑe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑe€EØ€Lrb   c           	      óT   — t        ddddd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )	r  r  r  r  rÕ   r  r  rÉ  )Úeva_giant_patch14_336r
  r  s       ra   r  r    r  rb   c           	      óT   — t        ddddd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )	r  r  r  r  rÕ   r  r  rÉ  )Úeva_giant_patch14_560r
  r  s       ra   r  r  '  r  rb   c                 ó\   — t        ddddddddd¬	«	      }t        dd
| it        |fi |¤Ž¤Ž}|S )ú+EVA02 Tiny https://arxiv.org/abs/2303.11331rÔ   r  éÀ   rÙ   rA   çUUUUUU@T©rÕ   rÕ   ©	rÛ   rÜ   rà   rá   r0   r¨   r©   rì   rú   rÉ  )Úeva02_tiny_patch14_224r
  r  s       ra   r  r  /  óN   € ô ØØØØØØØØØô
€Jô Ñf¸ZÐfÌ4ÐPZÑKeÐ^dÑKeÑf€EØ€Lrb   c                 ó\   — t        ddddddddd¬	«	      }t        dd
| it        |fi |¤Ž¤Ž}|S )ú,EVA02 Small https://arxiv.org/abs/2303.11331rÔ   r  r   rÙ   é   r  Tr  r  rÉ  )Úeva02_small_patch14_224r
  r  s       ra   r  r  A  óN   € ô ØØØØØØØØØô
€Jô Ñg¸jÐgÌDÐQ[ÑLfÐ_eÑLfÑg€EØ€Lrb   c                 ó`   — t        ddddddddddd¬	«      }t        dd
| it        |fi |¤Ž¤Ž}|S )ú+EVA02 Base https://arxiv.org/abs/2303.11331rÔ   r  rØ   rÙ   Fr  Tr  ©rÛ   rÜ   rà   rá   r0   r2   r¨   r©   r«   rì   rú   rÉ  )Úeva02_base_patch14_224r
  r  s       ra   r"  r"  S  óT   € ô ØØØØØØØØØØØô€Jô Ñf¸ZÐfÌ4ÐPZÑKeÐ^dÑKeÑf€EØ€Lrb   c                 ó`   — t        ddddddddddd	¬
«      }t        dd| it        |fi |¤Ž¤Ž}|S )ú,EVA02 Large https://arxiv.org/abs/2303.11331rÔ   r  rþ  é   rÕ   r  FTr  ©rÛ   rÜ   rà   rá   r0   r¨   r2   r©   r«   rì   rú   rÉ  )Úeva02_large_patch14_224r
  r  s       ra   r(  r(  g  óT   € ô ØØØØØØØØØØØô€Jô Ñg¸jÐgÌDÐQ[ÑLfÐ_eÑLfÑg€EØ€Lrb   c                 ó\   — t        ddddddddd¬	«	      }t        dd
| it        |fi |¤Ž¤Ž}|S )r  rù  r  r  rÙ   rA   r  Tr  r  rÉ  )Úeva02_tiny_patch14_336r
  r  s       ra   r+  r+  {  r  rb   c                 ó\   — t        ddddddddd¬	«	      }t        dd
| it        |fi |¤Ž¤Ž}|S )r  rù  r  r   rÙ   r  r  Tr  r  rÉ  )Úeva02_small_patch14_336r
  r  s       ra   r-  r-  �  r  rb   c                 ó`   — t        ddddddddddd¬	«      }t        dd
| it        |fi |¤Ž¤Ž}|S )r   rý  r  rØ   rÙ   Fr  Tr  r!  rÉ  )Úeva02_base_patch14_448r
  r  s       ra   r/  r/  Ÿ  r#  rb   c                 ó`   — t        ddddddddddd	¬
«      }t        dd| it        |fi |¤Ž¤Ž}|S )r%  rý  r  rþ  r&  rÕ   r  FTr  r'  rÉ  )Úeva02_large_patch14_448r
  r  s       ra   r1  r1  ³  r)  rb   c                 óv   — t        ddddd|j                  dd«      ¬«      }t        d
d	| it        |fi |¤Ž¤Ž}|S )z?EVA-g CLIP model (only difference from non-CLIP is the pooling)r  r  r  rÕ   r  rß   r   )rÜ   rà   rá   r0   r¨   rß   rÉ  )Úeva_giant_patch14_clip_224©r  rÕ  rÚ  r  s       ra   r3  r3  Ç  sL   € ô Ø ¨R¸2ÈØ—J‘J˜}¨gÓ6ô8€Jô ÑjÀÐjÌtÐT^ÑOiÐbhÑOiÑj€EØ€Lrb   c                 ó„   — t        dddddddddddd|j                  d	d
«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )zUAn EVA-CLIP specific variant that adds additional attn scale layer-norm to eva02_baserÔ   rÕ   rØ   rÙ   Fr  Tr  rß   r   )rÛ   rÜ   rà   rá   r0   r2   r¨   r©   r«   r¬   rì   rú   rß   rÉ  )Úeva02_base_patch16_clip_224r4  r  s       ra   r6  r6  Ñ  sf   € ô ØØØØØØØØØØØØØ—J‘J˜}¨gÓ6ô€Jô ÑkÀ*ÐkÔPTÐU_ÑPjÐciÑPjÑk€EØ€Lrb   c                 ó„   — t        dddddddddddd	|j                  d
d«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )úVAn EVA-CLIP specific variant that adds additional attn scale layer-norm to eva02_largerÔ   r  rþ  r&  rÕ   r  FTr  rß   r   ©rÛ   rÜ   rà   rá   r0   r¨   r2   r©   r«   r¬   rì   rú   rß   rÉ  )Úeva02_large_patch14_clip_224r4  r  s       ra   r:  r:  ç  óf   € ô ØØØØØØØØØØØØØ—J‘J˜}¨gÓ6ô€Jô ÑlÀ:ÐlÔQUÐV`ÑQkÐdjÑQkÑl€EØ€Lrb   c                 ó„   — t        dddddddddddd	|j                  d
d«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )r8  rù  r  rþ  r&  rÕ   r  FTr  rß   r   r9  rÉ  )Úeva02_large_patch14_clip_336r4  r  s       ra   r=  r=  ý  r;  rb   c                 óz   — t        ddddddd|j                  dd	«      ¬
«      }t        dd| it        |fi |¤Ž¤Ž}|S )zCAn EVA-CLIP specific variant that uses residual post-norm in blocksrÔ   r  i   é@   rÕ   gI’$I’$!@Trß   r   )rÛ   rÜ   rà   rá   r0   r¨   rò   rß   rÉ  )Úeva02_enormous_patch14_clip_224r4  r  s       ra   r@  r@    sW   € ô ØØØØØØØØ—J‘J˜}¨gÓ6ô	€Jô ÑoÀjÐoÔTXÐYcÑTnÐgmÑTnÑo€EØ€Lrb   c                 ód   — t        dddddddddd	ddd
¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )útimm SBB ViT with ROPEró  rÕ   rÿ  rÙ   r“   Tçñhãˆµøä>Fr%   r  ©rÛ   rÜ   rà   rá   r0   r2   r1   r°   rè   ré   rì   rë   rú   rÉ  )Ú$vit_medium_patch16_rope_reg1_gap_256r
  r  s       ra   rE  rE  $  s[   € ô ØØØØØØØØØØØØØô€Jô ÑtÈ:ÐtÔY]Ð^hÑYsÐlrÑYsÑt€EØ€Lrb   c                 ód   — t        dddddddddd	ddd
¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )rB  ró  rÕ   rÿ  é   r“   TFrC  r%   r  rD  rÉ  )Ú%vit_mediumd_patch16_rope_reg1_gap_256r
  r  s       ra   rH  rH  :  s[   € ô ØØØØØØØØØØØØØô€Jô ÑuÈJÐuÔZ^Ð_iÑZtÐmsÑZtÑu€EØ€Lrb   c                 ód   — t        dddddddddd	ddd
¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )rB  ró  rÕ   i€  rÙ   é
   TrC  Frq   r  rD  rÉ  )Ú%vit_betwixt_patch16_rope_reg4_gap_256r
  r  s       ra   rK  rK  P  s[   € ô ØØØØØØØØØØØØØô€Jô ÑuÈJÐuÔZ^Ð_iÑZtÐmsÑZtÑu€EØ€Lrb   c                 ód   — t        ddddddddddddd	¬
«      }t        dd| it        |fi |¤Ž¤Ž}|S )rB  ró  rÕ   rØ   rÙ   TrC  Fr%   r  rD  rÉ  )Ú"vit_base_patch16_rope_reg1_gap_256r
  r  s       ra   rM  rM  f  s[   € ô ØØØØØØØØØØØØØô€Jô ÑrÈÐrÔW[Ð\fÑWqÐjpÑWqÑr€EØ€Lrb   c                 ó‚   — t        dddddddddd	d
dddt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )úHPerception Encoder (PE) ViT from Meta (https://arxiv.org/abs/2504.13181)rÕ   r  rÙ   rA   r¦   r  rj   T©r&  r&  rì  Úxyr“   rC  ©Úeps©rÜ   rà   rá   r0   r¨   rß   r­   ró   rì   rú   rî   rï   rö   r÷   r8   rÉ  )Úvit_pe_core_tiny_patch16_384©r  r   r   rÚ  ©rÉ  rÅ   r  s      ra   rU  rU  |  sd   € ô ØØØØØØØØ!%ØØØØØØÜœ9¨$Ô/ô€Jô$ ÑkÀ*ÐkÔPTÐU_ÑPjÐciÑPjÑkÐkrb   c                 ó‚   — t        dddddddddd	d
dddt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  rÕ   r   rÙ   r  r¦   r  rj   TrP  rì  rQ  r“   rC  rR  rT  rÉ  )Úvit_pe_core_small_patch16_384rV  rW  s      ra   rY  rY  •  sd   € ô ØØØØØØØØ!%ØØØØØØÜœ9¨$Ô/ô€Jô$ ÑlÀ:ÐlÔQUÐV`ÑQkÐdjÑQkÑlÐlrb   c                 ó‚   — t        ddddddddddd	d
ddt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  rÕ   rØ   rÙ   r¦   r  rj   T)r  r  rì  rQ  r“   rC  rR  rT  rÉ  )Úvit_pe_core_base_patch16_224rV  rW  s      ra   r[  r[  ­  sd   € ô ØØØØØØØØ!%ØØØØØØÜœ9¨$Ô/ô€Jô$ ÑkÀ*ÐkÔPTÐU_ÑPjÐciÑPjÑkÐkrb   c                 ó‚   — t        dddddddddd	d
dddt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  r  rþ  r&  rÕ   r¦   r  rj   TrP  rì  rQ  r“   rC  rR  rT  rÉ  )Úvit_pe_core_large_patch14_336rV  rW  s      ra   r]  r]  Å  sd   € ô ØØØØØØØØ!%ØØØØØØÜœ9¨$Ô/ô€Jô$ ÑlÀ:ÐlÔQUÐV`ÑQkÐdjÑQkÑlÐlrb   c                 ó‚   — t        ddddddddd	d	d
dddt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  r  é   é2   rÕ   çUUUUUU@r  rj   FT©é    rc  rQ  r“   r¦   rC  rR  )rÜ   rà   rá   r0   r¨   rß   r­   rè   ró   rì   rú   rï   rö   r÷   r8   rÉ  )Ú vit_pe_core_gigantic_patch14_448rV  rW  s      ra   rd  rd  Ý  sd   € ô ØØØØØØØØØ!%ØØØØØÜœ9¨$Ô/ô€Jô$ ÑoÀjÐoÔTXÐYcÑTnÐgmÑTnÑoÐorb   c           	      óÀ   — t        d i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dt        t        d¬«      “Ž}t        d!d| it        |fi |¤Ž¤ŽS )"rO  rÜ   r  rà   rþ  rá   é   r0   rÕ   r¨   r¦   r­   rj   rè   Trì   rú   rb  rî   rì  rï   rQ  ró   rô   Frõ   r°   çš™™™™™¹?r8   rC  rR  rÉ  r¼   )Úvit_pe_lang_large_patch14_448rV  rW  s      ra   rh  rh  õ  sÓ   € ô ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ  ðñ ðñ  ðñ "&ðñ #(ðñ ðñ ðô  œ9¨$Õ/ð!€Jô& ÑlÀ:ÐlÔQUÐV`ÑQkÐdjÑQkÑlÐlrb   c                 ó‚   — t        ddddddddd	d
ddddt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  r  r_  é/   rÕ   ra  rj   FTrb  rQ  rg  rC  rR  ©rÜ   rà   rá   r0   r¨   r­   rè   rì   rú   rï   ró   rô   rõ   r°   r8   rÉ  )Ú vit_pe_lang_gigantic_patch14_448rV  rW  s      ra   rl  rl  	  sd   € ô ØØØØØØØØØØØ!%Ø"'ØØÜœ9¨$Ô/ô€Jô$ ÑoÀjÐoÔTXÐYcÑTnÐgmÑTnÑoÐorb   c                 ó€   — t        ddddddddddd	d
dt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  rÕ   r  rÙ   rA   r¦   rj   TFrb  rì  rQ  rC  rR  ©rÜ   rà   rá   r0   r¨   r­   ró   rô   rõ   rì   rú   rî   rï   r8   rÉ  )Úvit_pe_spatial_tiny_patch16_512rV  rW  s      ra   ro  ro  &	  sa   € ô ØØØØØØØ!%Ø"'ØØØØØÜœ9¨$Ô/ô€Jô" ÑnÀZÐnÔSWÐXbÑSmÐflÑSmÑnÐnrb   c                 ó€   — t        ddddddddddd	d
dt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  rÕ   r   rÙ   r  r¦   rj   TFrb  rì  rQ  rC  rR  rn  rÉ  )Ú vit_pe_spatial_small_patch16_512rV  rW  s      ra   rq  rq  =	  sa   € ô ØØØØØØØ!%Ø"'ØØØØØÜœ9¨$Ô/ô€Jô" ÑoÀjÐoÔTXÐYcÑTnÐgmÑTnÑoÐorb   c                 ó€   — t        dddddddddddd	d
t        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  rÕ   rØ   rÙ   r¦   rj   TFrb  rì  rQ  rC  rR  rn  rÉ  )Úvit_pe_spatial_base_patch16_512rV  rW  s      ra   rs  rs  T	  sa   € ô ØØØØØØØ!%Ø"'ØØØØØÜœ9¨$Ô/ô€Jô" ÑnÀZÐnÔSWÐXbÑSmÐflÑSmÑnÐnrb   c                 ó€   — t        ddddddddddd	d
dt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  r  rþ  r&  rÕ   r¦   rj   TFrb  rì  rQ  rC  rR  rn  rÉ  )Ú vit_pe_spatial_large_patch14_448rV  rW  s      ra   ru  ru  k	  sa   € ô ØØØØØØØ!%Ø"'ØØØØØÜœ9¨$Ô/ô€Jô" ÑoÀjÐoÔTXÐYcÑTnÐgmÑTnÑoÐorb   c                 ó‚   — t        ddddddddd	d
ddddt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤ŽS )rO  r  r_  r`  rÕ   ra  rj   FTrb  rQ  rg  rC  rR  rk  rÉ  )Ú#vit_pe_spatial_gigantic_patch14_448rV  rW  s      ra   rw  rw  ‚	  sd   € ô ØØØØØØØØØØØ!%Ø"'ØØÜœ9¨$Ô/ô€Jô$ ÑrÈÐrÔW[Ð\fÑWqÐjpÑWqÑrÐrrb   c                 óf   — t        dddddddddd	d
ddd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z=RoPE-Axial ViT-S/16 from https://github.com/naver-ai/rope-vitrÕ   r   rÙ   r  rq   rj   TrC  r   FrQ  ç      Y@©rÜ   rà   rá   r0   r¨   r­   r1   r°   rè   rß   rë   rì   rï   rð   rÉ  )Úvit_small_patch16_rope_224r
  r  s       ra   r{  r{  ›	  s]   € ô ØØØØØØØØØØØØØØô€Jô  ÑjÀÐjÌtÐT^ÑOiÐbhÑOiÑj€EØ€Lrb   c                 óh   — t        ddddddddddd	ddd
d¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z=RoPE-Axial ViT-B/16 from https://github.com/naver-ai/rope-vitrÕ   rØ   rÙ   rq   rj   FTrC  r   rQ  ry  )rÜ   rà   rá   r0   r¨   r­   rõ   r1   r°   rè   rß   rë   rì   rï   rð   rÉ  )Úvit_base_patch16_rope_224r
  r  s       ra   r}  r}  ²	  s`   € ô ØØØØØØØØØØØØØØØô€Jô" ÑiÀ
ÐiÌdÐS]ÑNhÐagÑNhÑi€EØ€Lrb   c                 óf   — t        ddddddddddd	dd
d¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z=RoPE-Axial ViT-L/16 from https://github.com/naver-ai/rope-vitrÕ   rþ  r&  rq   rj   TrC  r   FrQ  ry  rz  rÉ  )Úvit_large_patch16_rope_224r
  r  s       ra   r  r  Ê	  s]   € ô ØØØØØØØØØØØØØØô€Jô  ÑjÀÐjÌtÐT^ÑOiÐbhÑOiÑj€EØ€Lrb   c                 óh   — t        dddddddddd	d
dddd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z=RoPE-Mixed ViT-S/16 from https://github.com/naver-ai/rope-vitrÕ   r   rÙ   r  rq   rj   TrC  r   FrQ  ç      $@r	  ©rÜ   rà   rá   r0   r¨   r­   r1   r°   rè   rß   rë   rì   rï   rð   rí   rÉ  )Ú vit_small_patch16_rope_mixed_224r
  r  s       ra   rƒ  rƒ  á	  sa   € ô ØØØØØØØØØØØØØØØô€Jô" ÑpÀzÐpÔUYÐZdÑUoÐhnÑUoÑp€EØ€Lrb   c                 óh   — t        ddddddddddd	dd
dd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z=RoPE-Mixed ViT-B/16 from https://github.com/naver-ai/rope-vitrÕ   rØ   rÙ   rq   Trj   rC  r   FrQ  r�  r	  )rÜ   rà   rá   r0   r¨   r1   r­   r°   rè   rß   rë   rì   rï   rð   rí   rÉ  )Úvit_base_patch16_rope_mixed_224r
  r  s       ra   r…  r…  ù	  sa   € ô ØØØØØØØØØØØØØØØô€Jô" ÑoÀjÐoÔTXÐYcÑTnÐgmÑTnÑo€EØ€Lrb   c                 óh   — t        ddddddddddd	dd
dd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z=RoPE-Mixed ViT-L/16 from https://github.com/naver-ai/rope-vitrÕ   rþ  r&  rq   rj   TrC  r   FrQ  r�  r	  r‚  rÉ  )Ú vit_large_patch16_rope_mixed_224r
  r  s       ra   r‡  r‡  
  sa   € ô ØØØØØØØØØØØØØØØô€Jô" ÑpÀzÐpÔUYÐZdÑUoÐhnÑUoÑp€EØ€Lrb   c                 óh   — t        dddddddddd	dddd
d¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )zCRoPE-Axial + APE ViT-S/16 from https://github.com/naver-ai/rope-vitrÕ   r   rÙ   r  rq   rj   TrC  r   rQ  ry  ©rÜ   rà   rá   r0   r¨   r­   r1   r°   rè   rß   rê   rë   rì   rï   rð   rÉ  )Úvit_small_patch16_rope_ape_224r
  r  s       ra   rŠ  rŠ  *
  sa   € ô ØØØØØØØØØØØØØØØô€Jô" ÑnÀZÐnÔSWÐXbÑSmÐflÑSmÑn€EØ€Lrb   c                 óh   — t        dddddddddddddd	d
¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )zCRoPE-Axial + APE ViT-B/16 from https://github.com/naver-ai/rope-vitrÕ   rØ   rÙ   rq   rj   TrC  r   rQ  ry  r‰  rÉ  )Úvit_base_patch16_rope_ape_224r
  r  s       ra   rŒ  rŒ  B
  sa   € ô ØØØØØØØØØØØØØØØô€Jô$ ÑmÀJÐmÔRVÐWaÑRlÐekÑRlÑm€EØ€Lrb   c                 óh   — t        dddddddddddddd	d
¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )zCRoPE-Axial + APE ViT-L/16 from https://github.com/naver-ai/rope-vitrÕ   rþ  r&  rq   rj   TrC  r   rQ  ry  r‰  rÉ  )Úvit_large_patch16_rope_ape_224r
  r  s       ra   rŽ  rŽ  [
  sa   € ô ØØØØØØØØØØØØØØØô€Jô$ ÑnÀZÐnÔSWÐXbÑSmÐflÑSmÑn€EØ€Lrb   c           	      ó¦   — t        di dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“Ž}t        dd| it        |fi |¤Ž¤Ž}|S ) zCRoPE-Mixed + APE ViT-S/16 from https://github.com/naver-ai/rope-vitrÜ   rÕ   rà   r   rá   rÙ   r0   r  r¨   rq   r­   rj   r1   Tr°   rC  rè   rß   r   rê   rë   rì   rï   rQ  rð   r�  rí   r	  rÉ  r¼   )Ú$vit_small_patch16_rope_mixed_ape_224r
  r  s       ra   r�  r�  t
  sÐ   € ô ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ðñ ðñ  ð!€Jô& ÑtÈ:ÐtÔY]Ð^hÑYsÐlrÑYsÑt€EØ€Lrb   c           	      ó¦   — t        di dd“dd“dd“dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“Ž}t        dd| it        |fi |¤Ž¤Ž}|S )zCRoPE-Mixed + APE ViT-B/16 from https://github.com/naver-ai/rope-vitrÜ   rÕ   rà   rØ   rá   rÙ   r0   r¨   rq   r­   rj   r1   Tr°   rC  rè   rß   r   rê   rë   rì   rï   rQ  rð   r�  rí   r	  rÉ  r¼   )Ú#vit_base_patch16_rope_mixed_ape_224r
  r  s       ra   r’  r’  Ž
  sÐ   € ô ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ðñ ðñ  ð!€Jô$ ÑsÈ*ÐsÔX\Ð]gÑXrÐkqÑXrÑs€EØ€Lrb   c           	      ó¦   — t        di dd“dd“dd“dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“Ž}t        dd| it        |fi |¤Ž¤Ž}|S )zCRoPE-Mixed + APE ViT-L/16 from https://github.com/naver-ai/rope-vitrÜ   rÕ   rà   rþ  rá   r&  r0   r¨   rq   r­   rj   r1   Tr°   rC  rè   rß   r   rê   rë   rì   rï   rQ  rð   r�  rí   r	  rÉ  r¼   )Ú$vit_large_patch16_rope_mixed_ape_224r
  r  s       ra   r”  r”  §
  sÐ   € ô ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ðñ ðñ  ð!€Jô$ ÑtÈ:ÐtÔY]Ð^hÑYsÐlrÑYsÑt€EØ€Lrb   c                 ó†   — t        dddddddddddd	d
d	t        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z&DINOv3-style T/16 w/ QKV bias enabled.rÕ   Tr  rÙ   rA   rC  Údinov3éd   Frq   rR  ©rÜ   rø   rà   rá   r0   r1   r°   rí   rð   rñ   rì   rë   ré   rõ   r8   rÉ  )Úvit_tiny_patch16_dinov3_qkvbrV  r  s       ra   r™  r™  À
  sh   € ô ØØØØØØàØØàØØØØÜœ9¨$Ô/ô#€Jô& ÑlÀ:ÐlÔQUÐV`ÑQkÐdjÑQkÑl€EØ€Lrb   c                 ó†   — t        ddddddddd	dddd
dt        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )zˆDINOv3 S/16 https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÕ   Tr   rÙ   r  FrC  r–  r—  rq   rR  r˜  rÉ  )Úvit_small_patch16_dinov3rV  r  s       ra   r›  r›  Ú
  sg   € ô
 ØØØØØØàØØàØØØØÜœ9¨$Ô/ô#€Jô& Ñh¸zÐhÌTÐR\ÑMgÐ`fÑMgÑh€EØ€Lrb   c                 ó†   — t        dddddddddddd	d
d	t        t        d¬«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z§DINOv3 S/16 w/ QKV bias enabled (but zero) https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÕ   Tr   rÙ   r  rC  r–  r—  Frq   rR  r˜  rÉ  )Úvit_small_patch16_dinov3_qkvbrV  r  s       ra   r�  r�  ö
  sh   € ô
 ØØØØØØàØØàØØØØÜœ9¨$Ô/ô#€Jô& ÑmÀJÐmÔRVÐWaÑRlÐekÑRlÑm€EØ€Lrb   c           	      óÊ   — t        di dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dt        t        d¬«      “Ž}t        d d| it        |fi |¤Ž¤Ž}|S )!z�DINOv3 S/16 Plus https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÜ   rÕ   rø   Trà   r   rá   rÙ   r0   r  r1   Fr°   rC  rí   r–  rð   r—  rñ   rì   rë   r©   rª   r“   ré   rq   rõ   r8   rR  rÉ  r¼   )Úvit_small_plus_patch16_dinov3rV  r  s       ra   rŸ  rŸ    sá   € ô
 ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ð!ñ" ð#ñ$ ð%ô& œ9¨$Õ/ð'€Jô* ÑmÀJÐmÔRVÐWaÑRlÐekÑRlÑm€EØ€Lrb   c           	      óÊ   — t        di dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dt        t        d¬«      “Ž}t        d d| it        |fi |¤Ž¤Ž}|S )!z©DINOv3 S/16 Plus w/ QKV bias enabled (but 0) https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÜ   rÕ   rø   Trà   r   rá   rÙ   r0   r  r1   r°   rC  rí   r–  rð   r—  rñ   rì   rë   Fr©   rª   r“   ré   rq   rõ   r8   rR  rÉ  r¼   )Ú"vit_small_plus_patch16_dinov3_qkvbrV  r  s       ra   r¡  r¡  0  sá   € ô
 ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ð!ñ" ð#ñ$ ð%ô& œ9¨$Õ/ð'€Jô* ÑrÈÐrÔW[Ð\fÑWqÐjpÑWqÑr€EØ€Lrb   c                 ó†   — t        ddddddddddddd	dt        t        d¬
«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )zˆDINOv3 B/16 https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÕ   TrØ   rÙ   FrC  r–  r—  rq   rR  r˜  rÉ  )Úvit_base_patch16_dinov3rV  r  s       ra   r£  r£  N  sg   € ô
 ØØØØØØàØØàØØØØÜœ9¨$Ô/ô#€Jô& Ñg¸jÐgÌDÐQ[ÑLfÐ_eÑLfÑg€EØ€Lrb   c                 ó†   — t        ddddddddddddd	dt        t        d¬
«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z§DINOv3 B/16 w/ QKV bias enabled (but zero) https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÕ   TrØ   rÙ   rC  r–  r—  Frq   rR  r˜  rÉ  )Úvit_base_patch16_dinov3_qkvbrV  r  s       ra   r¥  r¥  j  sh   € ô
 ØØØØØØàØØàØØØØÜœ9¨$Ô/ô#€Jô& ÑlÀ:ÐlÔQUÐV`ÑQkÐdjÑQkÑl€EØ€Lrb   c                 ó†   — t        ddddddddddddd	dt        t        d¬
«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )zˆDINOv3 L/16 https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÕ   Trþ  r&  FrC  r–  r—  rq   rR  ©rÜ   rø   rà   rá   r0   r1   r°   rí   rð   rì   rë   rñ   ré   rõ   r8   rÉ  )Úvit_large_patch16_dinov3rV  r  s       ra   r¨  r¨  †  sg   € ô
 ØØØØØØàØØØØØàØÜœ9¨$Ô/ô#€Jô& Ñh¸zÐhÌTÐR\ÑMgÐ`fÑMgÑh€EØ€Lrb   c                 ó†   — t        ddddddddddddd	dt        t        d¬
«      ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )z¢DINOv3 w/ QKV bias enabled (but zero) https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÕ   Trþ  r&  rC  r–  r—  Frq   rR  r§  rÉ  )Úvit_large_patch16_dinov3_qkvbrV  r  s       ra   rª  rª  ¢  sh   € ô
 ØØØØØØàØØØØØàØÜœ9¨$Ô/ô#€Jô& ÑmÀJÐmÔRVÐWaÑRlÐekÑRlÑm€EØ€Lrb   c           	      óÊ   — t        di dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dt        t        d¬«      “Ž}t        d d| it        |fi |¤Ž¤Ž}|S )!z�DINOv3 H/16 Plus https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÜ   rÕ   rø   Trà   r  rá   rc  r0   rG  r1   Fr°   rC  rí   r–  rð   r—  rì   rë   rñ   r©   rª   r“   ré   rq   rõ   r8   rR  rÉ  r¼   )Úvit_huge_plus_patch16_dinov3rV  r  s       ra   r¬  r¬  ¾  sá   € ô
 ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ" ð#ñ$ ð%ô& œ9¨$Õ/ð'€Jô, ÑlÀ:ÐlÔQUÐV`ÑQkÐdjÑQkÑl€EØ€Lrb   c           	      óÊ   — t        di dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dt        t        d¬«      “Ž}t        d d| it        |fi |¤Ž¤Ž}|S )!z¬DINOv3 H/16 Plus w/ QKV bias enabled (but zero) https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÜ   rÕ   rø   Trà   r  rá   rc  r0   rG  r1   r°   rC  rí   r–  rð   r—  rì   rë   Frñ   r©   rª   r“   ré   rq   rõ   r8   rR  rÉ  r¼   )Ú!vit_huge_plus_patch16_dinov3_qkvbrV  r  s       ra   r®  r®  Ý  sá   € ô
 ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ" ð#ñ$ ð%ô& œ9¨$Õ/ð'€Jô, ÑqÈ
ÐqÔVZÐ[eÑVpÐioÑVpÑq€EØ€Lrb   c           	      óÐ   — t        d!i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dt        t        d¬«      “Ž}t        d"d | it        |fi |¤Ž¤Ž}|S )#z‰DINOv3 7B/16 https://arxiv.org/abs/2508.10104
    NOTE: Pass global_pool='token' to use CLS-token pooling (matches upstream DINOv3).
    rÜ   rÕ   rø   Trà   i   rá   r  r0   rc  r1   Fr¨   rp   r°   rC  rí   r–  rð   r—  rì   rë   rñ   r©   rª   r?  ré   rq   rõ   r8   rR  rÉ  r¼   )Úvit_7b_patch16_dinov3rV  r  s       ra   r°  r°  û  sé   € ô
 ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ð!ñ$ ð%ñ& ð'ô( œ9¨$Õ/ð)€Jô. Ñe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑe€EØ€Lrb   )r³  )rÞ  Tr’  )rý   )�rš   rB  rÖ  Ú	functoolsr   Útypingr   r   r   r   r   r	   r
   r   rP   Útorch.nnrI   Útorch.nn.functionalÚ
functionalrz   Ú	timm.datar   r   r   r   Útimm.layersr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Ú_builderr&   Ú	_featuresr'   Ú_manipulater(   Ú	_registryr)   r*   Ú__all__r“  r-   r¥   rÐ   r+   rÎ   r¡   r®  r�   rÇ  rÚ  rê  rð  rõ  r÷  Údefault_cfgsr	  r  r  r  r  r"  r(  r+  r-  r/  r1  r3  r6  r:  r=  r@  rE  rH  rK  rM  rU  rY  r[  r]  rd  rh  rl  ro  rq  rs  ru  rw  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¼   rb   ra   ú<module>r¾     sÐ  ðñ=ó@ Û 	Ý ß I× IÓ Iã Ý ß Ð ç dÓ d÷÷ ÷ ÷ ÷ õ õ, +Ý +Ý #ß <àˆ'€ôf�2—9‘9ô fôRCˆr�y‰yô CôLs�r—y‘yô sôlyˆ"�)‰)ô yð~ ñCØ�S˜%Ÿ,™,Ð&Ñ'ðCà�9‰9ðCð ðCð 
ˆ#ˆu�|‰|Ð
Ñó	CðR 'Øñ	|Ø˜˜eŸl™lÐ*Ñ+ð|à�y‰yð|ð ð|ð ð	|ð
 
ˆ#ˆu�|‰|Ð
Ñó|ñ~˜ð ¨$ð ÀSó ñ>ˆcð  T¨#¨s¨(¡^ó ñ(�ð ¨¨S°#¨X©ó ñ(�Sð ¨D°°c°©Nó ñ0	�3ð 	¨$¨s°C¨x©.ó 	ñ %ð [&ð )©$àô+ð[&ð )©$àØ ¨3¸(ô+Dð[&ð /±àØ"Ð(<Ø ¨3¸(ô	1Dð[&ð$ /±àØ"Ð(<Ø ¨3¸(ô	1Dð%[&ð2 5±dàØ ¨3¸(ô7ð3[&ð< 6±tàØ ¨3¸(ô8ð=[&ðF 5±dØà ¨3¸(ô7ðG[&ðT /±àØ ¨3ô1ðU[&ð^ 0±àØ ¨3ô2ð_[&ðh /±àØ ¨3ô1ði[&ðr 0±àØ ¨3ô2ðs[&ð| /±àØ ¨3ô1ð}[&ðJ 0±àØ ¨3¸(ÐPUô2ðK[&ðT 1±$àØ ¨3¸(ÐPUô3ðU[&ð^ 0±àØ ¨3¸(ÐPUô2ð_[&ðl '©àØô)ðm[&ðv (©àØô*ñw[&ð@ '©àØô)ðA[&ðJ (©àØô*ðK[&ðT '©àØô)ðU[&ðb +©Dð Øô-ðc[&ðp *©4ð Øô,ðq[&ð~ +©Dð Øô-ð[&ðL ,©Tð Øô.ðM[&ðZ ,©Tð Ø ¨3Øô.ð[[&ðj .©tð Øô0ðk[&ðx 3±Dð Øô5ðy[&ðF /±àô1ðG[&ðP 4±TØØ ¨4Ø /ô6ðQ[&ðZ 5±dØØ ¨4Ø /ô7ð[[&ðd 5±dØØ ¨4ô7ðe[&ðl 2±4ØØ ¨4Ø /ô4ðm[&ðz &¡wØð !Øô(ð{[&ðH '©Øð !Øô)òI[&ðV &¡wØð !Øô(ðW[&ðd '©Øð !Øô)ðe[&ðr *©7Øð !Øô,ðs[&ðB '©Øð !Øô)ðC[&ðP .©wØð !Øô0ðQ[&ð^ *©7Øð !Øô,ð_[&ðl 1±'Øð !Øô3ðm[&ð| )©'Øð !Øô+ð}[&ðJ *©7Øð !Øô,ðK[&ðX )©'Øð !Øô+ðY[&ðf *©7Øð !Øô,ðg[&ðt -©gØð !Øô/ðu[&ðF	 ,©TØØ"Ð(<Øô.ðG	[&ðP	 +©DØØ"Ð(<Øô-ðQ	[&ðZ	 ,©TØØ"Ð(<Øô.ð[	[&ðd	 2±4ØØ"Ð(<Øô4ðe	[&ðn	 1±$ØØ"Ð(<Øô3òo	[&ðx	 2±4ØØ"Ð(<Øô4ðy	[&ðB
 0±ØØ"Ð(<Øô2ðC
[&ðL
 /±ØØ"Ð(<Øô1ðM
[&ðV
 0±ØØ"Ð(<Øô2ðW
[&ð`
 6±tØØ"Ð(<Øô8ða
[&ðj
 5±dØØ"Ð(<Øô7ðk
[&ðt
 6±tØØ"Ð(<Øô8ðu
[&ðH (©Øô*ðI[&ðN -©kØô/ðO[&ðT -©kØô/ðU[&ðZ 2±;Øô4ð[[&ð` '©Øô)ða[&ðf ,©[Øô.ðg[&ðl 1±)Øô3ðm[&ðr 2±9Øô4ðs[&ðx 1±)Øô3ðy[&ð~ (©Øô*ñ[&ñD /:Øô/ñ )4ØØ"Ð(=ô)ñ .9ØØ"Ð(=ô.ñ .9Øô.ñ 3>Øô3ñ '2Øô'ñ &1ØØ"Ð(=ô&òm[&ó [€ð| ñ dð Àò ó ðð ñ dð Àò ó ðð ñ dð Àò ó ðð ñ tð À#ò ó ðð" ñ¨ð À3ò ó ðð" ñ tð À#ò ó ðð& ñ¨ð À3ò ó ðð& ñ tð À#ò ó ðð" ñ¨ð À3ò ó ðð" ñ tð À#ò ó ðð& ñ¨ð À3ò ó ðð& ñ¨4ð Àcò ó ðð ñ¨Dð Àsò ó ðð* ñ¨Tð Èò ó ðð* ñ¨Tð Èò ó ðð* ñ°ð È3ò ó ðð  ñ°Tð ÐPSò ó ðð* ñ°dð ÐQTò ó ðð* ñ°dð ÐQTò ó ðð* ñ°4ð Ècò ó ðð* ñl¨Tð lÈò ló ðlð0 ñm¨dð mÈò mó ðmð. ñl¨Tð lÈò ló ðlð. ñm¨dð mÈò mó ðmð. ñp°ð pÈCò pó ðpð. ñm¨dð mÈò mó ðmð0 ñp°ð pÈCò pó ðpð. ño°ð oÈ3ò oó ðoð, ñp°ð pÈCò pó ðpð, ño°ð oÈ3ò oó ðoð, ñp°ð pÈCò pó ðpð, ñs°Dð sÈsò só ðsð0 ñ¨4ð Àcò ó ðð, ñ¨$ð ÀSò ó ðð. ñ¨4ð Àcò ó ðð, ñ°ð ÈCò ó ðð. ñ°ð È3ò ó ðð. ñ°ð ÈCò ó ðð0 ñ¨tð È#ò ó ðð. ñ¨dð Èò ó ðð0 ñ¨tð È#ò ó ðð0 ñ°Tð ÐPSò ó ðð2 ñ°Dð Èsò ó ðð0 ñ°Tð ÐPSò ó ðð0 ñ¨Tð Èò ó ðð2 ñ¨ð ÀCò ó ðð6 ñ¨dð Èò ó ðð6 ñ¨dð Èò ó ðð: ñ°4ð Ècò ó ðð: ñ¨ð À3ò ó ðð6 ñ¨Tð Èò ó ðð6 ñ¨ð ÀCò ó ðð6 ñ¨dð Èò ó ðð6 ñ¨Tð Èò ó ðð< ñ°$ð ÈSò ó ðð: ñ dð Àò ó ñrb   