
    cCiJy                        S r SSKrSSKrSSKJr  SSKJr  SSK	r	SSK
Jr  SSKJrJrJr  SSKJr  SSKJrJr  SSKJrJrJr  SS	KJrJrJrJr  SS
KJ r J!r!  SSK"J#r#  Sr$Sr% " S S\RL                  5      r' " S S\RL                  5      r( " S S\RL                  5      r) " S S\RL                  5      r* " S S\RL                  5      r+\RX                  4S jr- " S S\RL                  5      r. " S S\RL                  5      r/ " S S\RL                  5      r0 " S  S!\RL                  5      r1 " S" S#\RL                  5      r2 " S$ S%\RL                  5      r3 " S& S'\RL                  5      r4 " S( S)\5      r5 " S* S+\RL                  5      r6\ " S,\$5       " S- S.\55      5       r7S/r8\" \7\85        \" \7\\#S09   " S1 S2\RL                  5      r9\ " S3\$5       " S4 S5\55      5       r:S6r;\" \:\;5        \" \:\\#S09  / S7Qr<g)8zFlax DINOv2 model.    N)Optional)
FrozenDictfreezeunfreeze)dot_product_attention_weights)flatten_dictunflatten_dict   )FlaxBaseModelOutputFlaxBaseModelOutputWithPoolingFlaxSequenceClassifierOutput)ACT2FNFlaxPreTrainedModel append_replace_return_docstringsoverwrite_call_docstring)add_start_docstrings%add_start_docstrings_to_model_forward   )Dinov2Configa  

    This model inherits from [`FlaxPreTrainedModel`]. Check the superclass documentation for the generic methods the
    library implements for all its model (such as downloading, saving and converting weights from PyTorch models)

    This model is also a
    [flax.linen.Module](https://flax.readthedocs.io/en/latest/api_reference/flax.linen/module.html) subclass. Use it as
    a regular Flax linen Module and refer to the Flax documentation for all matter related to general usage and
    behavior.

    Finally, this model supports inherent JAX features such as:

    - [Just-In-Time (JIT) compilation](https://jax.readthedocs.io/en/latest/jax.html#just-in-time-compilation-jit)
    - [Automatic Differentiation](https://jax.readthedocs.io/en/latest/jax.html#automatic-differentiation)
    - [Vectorization](https://jax.readthedocs.io/en/latest/jax.html#vectorization-vmap)
    - [Parallelization](https://jax.readthedocs.io/en/latest/jax.html#parallelization-pmap)

    Parameters:
        config ([`Dinov2Config`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~FlaxPreTrainedModel.from_pretrained`] method to load the model weights.
        dtype (`jax.numpy.dtype`, *optional*, defaults to `jax.numpy.float32`):
            The data type of the computation. Can be one of `jax.numpy.float32`, `jax.numpy.float16` (on GPUs) and
            `jax.numpy.bfloat16` (on TPUs).

            This can be used to enable mixed-precision training or half-precision inference on GPUs or TPUs. If
            specified all the computation will be performed with the given `dtype`.

            **Note that this only specifies the dtype of the computation and does not influence the dtype of model
            parameters.**

            If you wish to change the dtype of the model parameters, see [`~FlaxPreTrainedModel.to_fp16`] and
            [`~FlaxPreTrainedModel.to_bf16`].
a
  
    Args:
        pixel_values (`numpy.ndarray` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See [`Dinov2ImageProcessor.__call__`]
            for details.

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
c                   b    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S r
Srg)FlaxDinov2PatchEmbeddings[   configdtypec                 |   U R                   R                  nU R                   R                  n[        U[        R
                  R                  5      (       a  UOX4n[        U[        R
                  R                  5      (       a  UOX"4nUS   US   -  US   US   -  -  nX0l        U R                   R                  U l        [        R                  " U R                   R                  UUSU R                  [        R                  R                  R                  U R                   R                   S-  SS5      S9U l        g )Nr   r   VALID   fan_intruncated_normal)kernel_sizestridespaddingr   kernel_init)r   
image_size
patch_size
isinstancecollectionsabcIterablenum_patchesnum_channelsnnConvhidden_sizer   jaxinitializersvariance_scalinginitializer_range
projection)selfr$   r%   r*   s       i/home/james-whalen/.local/lib/python3.13/site-packages/transformers/models/dinov2/modeling_flax_dinov2.pysetupFlaxDinov2PatchEmbeddings.setup_   s    [[++
[[++
#-j+//:R:R#S#SZZdYq
#-j+//:R:R#S#SZZdYq
!!}
15*Q-:VW=:XY& KK44''KK##"**++<<--q0(<N	
    c                     UR                   S   nX R                  :w  a  [        S5      eU R                  U5      nUR                   u  n  pV[        R
                  " X4SU45      $ )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)shaper+   
ValueErrorr3   jnpreshape)r4   pixel_valuesr+   
embeddings
batch_size_channelss          r5   __call__"FlaxDinov2PatchEmbeddings.__call__t   sf    #))"-,,,w  __\2
%/%5%5"
Aq{{:B'ABBr8   )r+   r*   r3   N__name__
__module____qualname____firstlineno__r   __annotations__r=   float32r   r6   rD   __static_attributes__ r8   r5   r   r   [   s%    {{E399"
*Cr8   r   c                   p    \ rS rSr% Sr\\S'   \R                  r	\R                  \S'   S r
S rS
S jrSrg	)FlaxDinov2Embeddings   z7Construct the CLS token, position and patch embeddings.r   r   c                    U R                  S[        R                  R                  R	                  U R
                  R                  S-  SS5      SSU R
                  R                  45      U l        U R
                  R                  (       an  U R                  S[        R                  R                  R	                  U R
                  R                  S-  SS5      SU R
                  R                  45      U l
        [        U R
                  U R                  S9U l        U R                  R                  nU R                  S[        R                  R                  R	                  U R
                  R                  S-  SS5      SUS-   U R
                  R                  45      U l        [        R                   " U R
                  R"                  S	9U l        g )
N	cls_tokenr   r   r   r   
mask_tokenr   position_embeddingsrate)paramr/   r,   r0   r1   r   r2   r.   rS   use_mask_tokenrT   r   r   patch_embeddingsr*   rV   Dropouthidden_dropout_probdropout)r4   r*   s     r5   r6   FlaxDinov2Embeddings.setup   sY   FF001N1NPQ1QS[]op4;;**+

 ;;%%"jj##44T[[5R5RTU5UW_astDKK++,DO
 !:$++TZZ X++77#'::!FF001N1NPQ1QS[]opa!8!89$
 
 zzt{{'F'FGr8   c           
      *   UR                   S   S-
  nUR                   S   S-
  nXg:X  a  X4:X  a  U$ US S 2S4   nUS S 2SS 24   n	UR                   S   n
X1R                  -  nXAR                  -  nUS-   US-   pCU	R                  S[        [        R
                  " U5      5      [        [        R
                  " U5      5      U
45      n	[        R                  " U	S5      n	U	R                  n[        R                  " U[        R
                  " U5      -  5      n[        R                  " U[        R
                  " U5      -  5      n[        R                  " X/[        R                  S9n[        R                  " SS/[        R                  S9n[        R                  R                  U	R                  [        R                  5      U	R                   S   U	R                   S   X4SUUS	S
S9n	U	R                  U5      n	[        R                  " U	S5      R                  UR                   S   SU
45      n	[        R                  " XR                   S   SS45      n[        R                  " XR                   S   SS45      n[        R                   " UU4SS9$ )Nr   r   r:   g?)r   r
   r   r   rU           )r   r
   bicubicF)r;   spatial_dimsscaletranslationmethod	antialiasr   r   r
   r   axis)r;   r%   r>   intmathsqrtr=   	transposer   rL   arrayr/   imagescale_and_translateastypetileconcatenate)r4   r   hidden_statesheightwidthrV   r*   num_positionsclass_pos_embedpatch_pos_embeddimhwtarget_dtypenew_height_rationew_width_ratiord   re   patch_pos_embed_expandedclass_pos_embed_expandeds                       r5   interpolate_pos_encoding-FlaxDinov2Embeddings.interpolate_pos_encoding   sQ   #))!,q0+11!4q8'FO&&-ad3-ae4!!"%'''&&&CS)11DIIm,-s499]3K/LcR
 --F&,,;;v		-0H'HI++edii.F&FG		+=S[[Qiic
#++>))77""3;;/"((+_-B-B1-EqL# 8 
 *00>--FNNPcPiPijkPlnpruOvw#&88O>Q>QRS>TVWYZ=[#\ #&88O>Q>QRS>TVWYZ=[#\  8:RSZ[\\r8   c                    UR                   S   nU R                  R                  R                  nUR                   S   UR                   S   peU R                  UR	                  U5      5      n[
        R                  " U R                  USU R                  R                  45      n[
        R                  " X4SS9nXpR                  U R                  XuX`R                  5      -   nU R                  XrS9nU$ )Nr   r   r   ri   deterministic)r;   r[   r3   r   rr   r=   broadcast_torS   r   r.   rt   r   rV   r^   )	r4   r?   r   rA   r~   rv   rw   r@   
cls_tokenss	            r5   rD   FlaxDinov2Embeddings.__call__   s    !''*
,,77==$**1-|/A/A!/D**<+>+>|+LM
%%dnnz1dkkF]F]6^_
__j%=AF
"?"?KKU4L4L#
 

 \\*\J
r8   )rS   r^   rT   r[   rV   NT)rG   rH   rI   rJ   __doc__r   rK   r=   rL   r   r6   r   rD   rM   rN   r8   r5   rP   rP      s/    A{{E399"H*&]Pr8   rP   c                   r    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S
S\
S\
4S jjrSrg	)FlaxDinov2SelfAttention   r   r   c           
         U R                   R                  U R                   R                  -  S:w  a  [        S5      e[        R
                  " U R                   R                  U R                  [        R                  R                  R                  U R                   R                  S-  SSS9U R                   R                  S9U l        [        R
                  " U R                   R                  U R                  [        R                  R                  R                  U R                   R                  S-  SSS9U R                   R                  S9U l        [        R
                  " U R                   R                  U R                  [        R                  R                  R                  U R                   R                  S-  SSS9U R                   R                  S9U l        g )Nr   z`config.hidden_size`: {self.config.hidden_size} has to be a multiple of `config.num_attention_heads`: {self.config.num_attention_heads}r   r   r   )modedistribution)r   r#   use_bias)r   r.   num_attention_headsr<   r,   Denser   r/   r0   r1   r2   qkv_biasquerykeyvaluer4   s    r5   r6   FlaxDinov2SelfAttention.setup   sp   ;;""T[[%D%DDI5 
 XXKK##**++<<--q0xN` =  [[))

 88KK##**++<<--q0xN` =  [[))
 XXKK##**++<<--q0xN` =  [[))

r8   r   output_attentionsc                 V   U R                   R                  U R                   R                  -  nU R                  U5      R	                  UR
                  S S U R                   R                  U4-   5      nU R                  U5      R	                  UR
                  S S U R                   R                  U4-   5      nU R                  U5      R	                  UR
                  S S U R                   R                  U4-   5      nS nU(       d+  U R                   R                  S:  a  U R                  S5      n[        UUUU R                   R                  SUU R                  S S9n	[        R                  " SX5      n
U
R	                  U
R
                  S S S-   5      n
U(       a  X4nU$ U
4nU$ )Nr   ra   r^   T)dropout_rngdropout_ratebroadcast_dropoutr   r   	precisionz...hqk,...khd->...qhd)r:   )r   r.   r   r   r>   r;   r   r   attention_probs_dropout_probmake_rngr   r   r=   einsum)r4   ru   r   r   head_dimquery_statesvalue_states
key_statesr   attn_weightsattn_outputoutputss               r5   rD    FlaxDinov2SelfAttention.__call__   s   ;;**dkk.M.MMzz-088#t{{'F'F&QQ
 zz-088#t{{'F'F&QQ
 XXm,44#t{{'F'F&QQ

 !I!IC!O--	2K4#AA"'**	
 jj!8,U!))+*;*;BQ*?%*GH1B;- JUr8   )r   r   r   NTFrG   rH   rI   rJ   r   rK   r=   rL   r   r6   boolrD   rM   rN   r8   r5   r   r      s9    {{E399"
@ T  UY    r8   r   c                   n    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S	S\
4S jjrSrg)
FlaxDinov2SelfOutputi  r   r   c                 P   [         R                  " U R                  R                  [        R                   R
                  R                  U R                  R                  S-  SS5      U R                  S9U l	        [         R                  " U R                  R                  S9U l        g )Nr   r   r   r#   r   rW   )r,   r   r   r.   r/   r0   r1   r2   r   denser\   r]   r^   r   s    r5   r6   FlaxDinov2SelfOutput.setup!  ss    XXKK##++<<--q0(<N **

 zzt{{'F'FGr8   r   c                 F    U R                  U5      nU R                  XS9nU$ )Nr   r   r^   )r4   ru   input_tensorr   s       r5   rD   FlaxDinov2SelfOutput.__call__+  s&    

=1]Pr8   r   Nr   r   rN   r8   r5   r   r     s1    {{E399"H4  r8   r   c                   n    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S	S\
4S jjrSrg)
FlaxDinov2Attentioni2  r   r   c                     [        U R                  U R                  S9U l        [	        U R                  U R                  S9U l        g NrU   )r   r   r   	attentionr   outputr   s    r5   r6   FlaxDinov2Attention.setup6  s.    0DJJO*4;;djjIr8   r   c                 t    U R                  XUS9nUS   nU R                  XQUS9nU4nU(       a  XdS   4-  nU$ )Nr   r   r   r   r   r   r   )r4   ru   r   r   attn_outputsr   r   s          r5   rD   FlaxDinov2Attention.__call__:  sO    ~~mdu~v"1oKm\ "Q))Gr8   r   Nr   r   rN   r8   r5   r   r   2  s1    {{E399"J
T 
 
r8   r   c                 4    [         R                  " X5      U-  $ N)r=   ones)r   r;   rd   r   s       r5   ones_with_scaler   G  s    88E!E))r8   c                   b    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S r
Srg)FlaxDinov2LayerScaleiK  r   r   c                     U R                   R                  U R                  S[        R                  R
                  R                  U R                   R                  45      -  U l        U R                  U R                   R                  -  U l        g )Nlambda1)	r   layerscale_valuerY   r/   r,   r0   r   r.   r   r   s    r5   r6   FlaxDinov2LayerScale.setupO  se    {{33djjFF$$[[$$&7
 

 ||dkk&B&BBr8   c                      U R                   U-  $ r   r   r4   ru   s     r5   rD   FlaxDinov2LayerScale.__call__W  s    ||m++r8   r   NrF   rN   r8   r5   r   r   K  s%    {{E399"C,r8   r   c                   n    \ rS rSr% Sr\\S'   \R                  R                  SS\
\   4S jj5       rSrg)	FlaxDinov2DropPathi\  zXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).rX   r   c                 R   U R                   S:X  a  U$ SU R                   -
  nU(       a  U$ UR                  S   4SUR                  S-
  -  -   nU R                  S5      nU[        R
                  R                  XTUR                  S9-   n[        R                  " U5      nX-  U-  nU$ )Nra   g      ?r   )r   r   droppath)r;   r   )
rX   r;   ndimr   r/   randomuniformr   r=   floor)	r4   inputsr   	keep_probr;   rngrandom_tensorbinary_tensorr   s	            r5   rD   FlaxDinov2DropPath.__call__a  s    99M$))O	M\\!_&q)AAE--
+C%

(:(:3SYS_S_(:(``MIIm4M'-7FMr8   rN   Nr   )rG   rH   rI   rJ   r   floatrK   r,   modulecompactr   r   rD   rM   rN   r8   r5   r   r   \  s1    b
KYYhtn  r8   r   c                   b    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S r
Srg)FlaxDinov2MLPiq  r   r   c                    [         R                  " U R                  R                  U R                  R                  -  [
        R                   R                  R                  U R                  R                  S-  SS5      U R                  S9U l
        [         R                  " U R                  R                  [
        R                   R                  R                  U R                  R                  S-  SS5      U R                  S9U l        [        U R                  R                  [        5      (       a#  [        U R                  R                     U l        g U R                  R                  U l        g )Nr   r   r   r   )r,   r   r   r.   	mlp_ratior/   r0   r1   r2   r   fc1fc2r&   
hidden_actstrr   actr   s    r5   r6   FlaxDinov2MLP.setupu  s    88KK##dkk&;&;;++<<--q0(<N **
 88KK##++<<--q0(<N **
 dkk,,c22dkk445DH{{--DHr8   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r   r   r   r   s     r5   rD   FlaxDinov2MLP.__call__  s2    ///r8   )r   r   r   NrF   rN   r8   r5   r   r   q  s$    {{E399".(r8   r   c                   b    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S r
Srg)FlaxDinov2SwiGLUFFNi  r   r   c                 f   [        U R                  R                  U R                  R                  -  5      n[        US-  S-  5      S-   S-  S-  n[        R
                  " SU-  [        R                  R                  R                  U R                  R                  S-  SS5      U R                  S9U l        [        R
                  " U R                  R                  [        R                  R                  R                  U R                  R                  S-  SS5      U R                  S9U l        g )Nr   r
         r   r   r   )rk   r   r.   r   r,   r   r/   r0   r1   r2   r   
weights_inweights_out)r4   hidden_featuress     r5   r6   FlaxDinov2SwiGLUFFN.setup  s    dkk558M8MMN2Q67!;AAE((++<<--q0(<N **
 88KK##++<<--q0(<N **
r8   c                     U R                  U5      n[        R                  " USSS9u  p#[        R                  " U5      U-  nU R                  U5      $ )Nr   r:   ri   )r   r=   splitr,   silur   )r4   ru   x1x2hiddens        r5   rD   FlaxDinov2SwiGLUFFN.__call__  sG    6=!"5r!''r8   )r   r   NrF   rN   r8   r5   r   r     s$    {{E399"
&(r8   r   c                   r    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S
S\
S\
4S jjrSrg	)FlaxDinov2Layeri  r   r   c                    [         R                  " U R                  R                  U R                  S9U l        [        U R                  U R                  S9U l        [        U R                  U R                  S9U l	        [        U R                  R                  5      U l        [         R                  " U R                  R                  U R                  S9U l        U R                  R                  (       a$  [        U R                  U R                  S9U l        O#[#        U R                  U R                  S9U l        [        U R                  U R                  S9U l        g )Nepsilonr   rU   )r,   	LayerNormr   layer_norm_epsr   norm1r   r   r   layer_scale1r   drop_path_rate	drop_pathnorm2use_swiglu_ffnr   mlpr   layer_scale2r   s    r5   r6   FlaxDinov2Layer.setup  s    \\$++*D*DDJJW
,T[[

K0DJJO+DKK,F,FG\\$++*D*DDJJW
;;%%*4;;djjIDH$T[[

CDH0DJJOr8   r   r   c                 >   U R                  U R                  U5      UUS9nUS   nU R                  U5      nUSS  nU R                  U5      U-   nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  U5      U-   nU4U-   nU$ )Nr   r   r   )r   r  r	  r  r  r  r  )r4   ru   r   r   self_attention_outputsattention_outputr   layer_outputs           r5   rD   FlaxDinov2Layer.__call__  s    !%JJ}%'/ "0 "
 2!4,,-=>(, '78=H zz-0xx-((6 ~~l3mC/G+r8   )r   r  r	  r  r  r  r  Nr   r   rN   r8   r5   r  r    s9    {{E399"PT UY  r8   r  c            	           \ rS rSr% \\S'   \R                  r\R                  \S'   S r	    SS\
S\
S\
S\
4S	 jjrS
rg)FlaxDinov2LayerCollectioni  r   r   c           	          [        U R                  R                  5       Vs/ s H+  n[        U R                  [	        U5      U R
                  S9PM-     snU l        g s  snf )N)namer   )ranger   num_hidden_layersr  r   r   layers)r4   is     r5   r6   FlaxDinov2LayerCollection.setup  sJ    QVW[WbWbWtWtQu
QuAODKKc!fDJJGQu
 
s   2Ar   r   output_hidden_statesreturn_dictc                     U(       a  SOS nU(       a  SOS n[        U R                  5       H.  u  pU(       a  Xq4-  nU	" XUS9n
U
S   nU(       d  M&  XjS   4-  nM0     U(       a  Xq4-  nU4nU(       d  [        S U 5       5      $ [        XUS9$ )NrN   r   r   r   c              3   .   #    U  H  oc  M  Uv   M     g 7fr   rN   ).0vs     r5   	<genexpr>5FlaxDinov2LayerCollection.__call__.<locals>.<genexpr>  s     =GqGs   	)last_hidden_stateru   
attentions)	enumerater  tupler   )r4   ru   r   r   r  r   all_attentionsall_hidden_statesr  layerlayer_outputsr   s               r5   rD   "FlaxDinov2LayerCollection.__call__  s      1d"6BD!$++.HA#!%55!!-`qrM)!,M  #3"55 /  !11 "=G==="+Yg
 	
r8   )r  NTFFTr   rN   r8   r5   r  r    s_    {{E399"
 #"'%* 
 
  	

 #
 
 
r8   r  c            	           \ rS rSr% \\S'   \R                  r\R                  \S'   S r	    SS\
S\
S\
S\
4S	 jjrS
rg)FlaxDinov2Encoderi
  r   r   c                 J    [        U R                  U R                  S9U l        g r   )r  r   r   r-  r   s    r5   r6   FlaxDinov2Encoder.setup  s    .t{{$**M
r8   r   r   r  r   c                 (    U R                  UUUUUS9$ )Nr   r   r  r   r-  )r4   ru   r   r   r  r   s         r5   rD   FlaxDinov2Encoder.__call__  s)     zz'/!5#  
 	
r8   r7  Nr0  r   rN   r8   r5   r2  r2  
  s`    {{E399"N #"'%* 
 
  	

 #
 
 
r8   r2  c                     ^  \ rS rSr% Sr\rSrSrSr	\
R                  \S'   SS\R                  S4S	\S
\S\R                   S\4U 4S jjjrSS\R(                  R*                  S\S\S\4S jjr\" \R7                  S5      5            SS\\   S\R(                  R*                  S\S\\   S\\   S\\   4S jj5       rSrU =r $ )FlaxDinov2PreTrainedModeli"  zz
An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
models.
dinov2r?   Nmodule_classr   Tr   seedr   _do_initc           	         > U R                   " SXS.UD6nUc$  SUR                  UR                  UR                  4n[        TU ]  XX#XES9  g )Nr   r   r   )input_shaper=  r   r>  rN   )r<  r$   r+   super__init__)	r4   r   rA  r=  r   r>  kwargsr   	__class__s	           r5   rC  "FlaxDinov2PreTrainedModel.__init__-  sX     ""H&HHf//1B1BFDWDWXK[SXlr8   r   rA  paramsreturnc                    [         R                  " X R                  S9n[        R                  R                  U5      u  pV[        R                  R                  U5      u  pgXVUS.nU R                  R                  XSS9S   n	Ubd  [        [        U	5      5      n	[        [        U5      5      nU R                   H	  n
X   X:'   M     [        5       U l
        [        [        U5      5      $ U	$ )NrU   )rG  r^   r   F)r   rG  )r=   zerosr   r/   r   r   r   initr   r   _missing_keyssetr   r	   )r4   r   rA  rG  r?   
params_rngr   droppath_rngrngsrandom_paramsmissing_keys              r5   init_weights&FlaxDinov2PreTrainedModel.init_weights;  s    yyJJ?"%**"2"23"7
$'JJ$4$4[$A!$,W(((OPXY(-)@AM!(6"23F#11&3&@#  2!$D.011  r8   zbatch_size, sequence_lengthr   trainr   r  r   c           
         Ub  UOU R                   R                  nUb  UOU R                   R                  nUb  UOU R                   R                  n[        R
                  " US5      n0 nUb)  [        R                  R                  U5      u  p9X8S'   XS'   U R                  R                  SU=(       d    U R                  0[        R                  " U[        R                  S9U(       + UUUUS9$ )Nrh   r^   r   rG  rU   )rP  )r   r   r  r   r=   rn   r/   r   r   r   applyrG  ro   rL   )
r4   r?   rG  r   rU  r   r  r   rP  rO  s
             r5   rD   "FlaxDinov2PreTrainedModel.__call__O  s     2C1N-TXT_T_TqTq$8$D $++JjJj 	 &1%<k$++BYBY}}\<@"(+

(8(8(E%K)O+{{  v,-IIl#++6I  ! 
 	
r8   )rL  r   )NNFNNN)!rG   rH   rI   rJ   r   r   config_classbase_model_prefixmain_input_namer<  r,   ModulerK   r=   rL   rk   r   r   rC  r/   r   PRNGKeyr*  r   rS  r   DINOV2_INPUTS_DOCSTRINGformatr   dictrD   rM   __classcell__)rE  s   @r5   r:  r:  "  s2   
  L $O"L"))"
 ;;mm 	m
 yym m m!

 2 2 ! !PZ !fp !( ++B+I+IJg+hi "&*.,0/3&* 
  
 ZZ''	 

  
 $D> 
 'tn 
 d^ 
 j 
r8   r:  c            	           \ rS rSr% \\S'   \R                  r\R                  \S'   S r	    SS\
S\
S\
S\
4S	 jjrS
rg)FlaxDinov2Moduleis  r   r   c                     [        U R                  U R                  S9U l        [	        U R                  U R                  S9U l        [        R                  " U R                  R                  U R                  S9U l	        g )NrU   r  )
rP   r   r   r@   r2  encoderr,   r  r  	layernormr   s    r5   r6   FlaxDinov2Module.setupw  sQ    .t{{$**M(DJJGdkk.H.HPTPZPZ[r8   r   r   r  r   c                     U R                  XS9nU R                  UUUUUS9nUS   nU R                  U5      nUS S 2SS S 24   n	U(       d
  X4n
XSS  -   $ [        UU	UR                  UR
                  S9$ )Nr   r6  r   r   )r'  pooler_outputru   r(  )r@   re  rf  r   ru   r(  )r4   r?   r   r   r  r   ru   encoder_outputssequence_outputpooled_outputhead_outputss              r5   rD   FlaxDinov2Module.__call__|  s     R,,'/!5# ' 
 *!,..9'1a0+;L!""555--')77&11	
 	
r8   )r@   re  rf  Nr0  r   rN   r8   r5   rc  rc  s  s`    {{E399"\ #"'%* 
 
  	

 #
 
 
r8   rc  z`The bare Dinov2 Model transformer outputting raw hidden-states without any specific head on top.c                       \ rS rSr\rSrg)FlaxDinov2Modeli  rN   N)rG   rH   rI   rJ   rc  r<  rM   rN   r8   r5   rp  rp    s	    
 $Lr8   rp  ar  
    Returns:

    Examples:

    ```python
    >>> from transformers import AutoImageProcessor, FlaxDinov2Model
    >>> from PIL import Image
    >>> import requests

    >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
    >>> image = Image.open(requests.get(url, stream=True).raw)

    >>> image_processor = AutoImageProcessor.from_pretrained("facebook/dinov2-base")
    >>> model = FlaxDinov2Model.from_pretrained("facebook/dinov2-base")

    >>> inputs = image_processor(images=image, return_tensors="np")
    >>> outputs = model(**inputs)
    >>> last_hidden_states = outputs.last_hidden_state
    ```
)output_typerY  c                   x    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	     S	S\
4S jjrSrg)
&FlaxDinov2ForImageClassificationModulei  r   r   c           	      <   [        U R                  U R                  S9U l        [        R
                  " U R                  R                  U R                  [        R                  R                  R                  U R                  R                  S-  SS5      S9U l        g )Nr@  r   r   r   )r   r#   )rc  r   r   r;  r,   r   
num_labelsr/   r0   r1   r2   
classifierr   s    r5   r6   ,FlaxDinov2ForImageClassificationModule.setup  sk    &dkkL((KK""**++<<--q0(<N
r8   Nr   c                 Z   Ub  UOU R                   R                  nU R                  UUUUUS9nUS   nUS S 2S4   nUS S 2SS 24   n	[        R                  " XR                  SS9/SS9n
U R                  U
5      nU(       d  U4USS  -   nU$ [        UUR                  UR                  S9$ )Nr6  r   r   ri   r:   r   )logitsru   r(  )
r   use_return_dictr;  r=   rt   meanrv  r   ru   r(  )r4   r?   r   r   r  r   r   ru   rS   patch_tokenslinear_inputry  r   s                r5   rD   /FlaxDinov2ForImageClassificationModule.__call__  s     &1%<k$++B]B]++'/!5#  
  
!!Q$'	$QU+	3D3D!3D3L'MTVW.Y,FM+!//))
 	
r8   )rv  r;  )NTNNNr   rN   r8   r5   rs  rs    sD    {{E399"
 "!"
 "
 "
r8   rs  z
    Dinov2 Model transformer with an image classification head on top (a linear layer on top of the final hidden state of
    the [CLS] token) e.g. for ImageNet.
    c                       \ rS rSr\rSrg) FlaxDinov2ForImageClassificationi  rN   N)rG   rH   rI   rJ   rs  r<  rM   rN   r8   r5   r  r    s	     :Lr8   r  a  
    Returns:

    Example:

    ```python
    >>> from transformers import AutoImageProcessor, FlaxDinov2ForImageClassification
    >>> from PIL import Image
    >>> import jax
    >>> import requests

    >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
    >>> image = Image.open(requests.get(url, stream=True).raw)

    >>> image_processor = AutoImageProcessor.from_pretrained("facebook/dinov2-base-imagenet1k-1-layer")
    >>> model = FlaxDinov2ForImageClassification.from_pretrained("facebook/dinov2-base-imagenet1k-1-layer", from_pt=True)

    >>> inputs = image_processor(images=image, return_tensors="np")
    >>> outputs = model(**inputs)
    >>> logits = outputs.logits

    >>> # model predicts one of the 1000 ImageNet classes
    >>> predicted_class_idx = jax.numpy.argmax(logits, axis=-1)
    >>> print("Predicted class:", model.config.id2label[predicted_class_idx.item()])
    ```
)r  rp  r:  )=r   collections.abcr'   rl   typingr   
flax.linenlinenr,   r/   	jax.numpynumpyr=   flax.core.frozen_dictr   r   r   flax.linen.attentionr   flax.traverse_utilr   r	   modeling_flax_outputsr   r   r   modeling_flax_utilsr   r   r   r   utilsr   r   configuration_dinov2r   DINOV2_START_DOCSTRINGr^  r\  r   rP   r   r   r   rL   r   r   r   r   r   r  r  r2  r:  rc  rp  FLAX_VISION_MODEL_DOCSTRINGrs  r  $FLAX_VISION_CLASSIFICATION_DOCSTRING__all__rN   r8   r5   <module>r     s        
  > > > ; v v  Q .! F "!C		 !CHR299 RlDbii DP299 *")) * .1[[ *,299 ," *BII >(")) (<,bii ,`(
		 (
X
		 
0N
 3 N
b(
ryy (
V f$/ $	$ , *E F  !?l
0
RYY 0
f  :'@ ::( $6 9;_ `  $2N]i
 _r8   