
    cCic                        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\RD                  5      r# " S S\RD                  5      r$ " S S\RD                  5      r% " S S\RD                  5      r& " S S\RD                  5      r' " S S\RD                  5      r( " S S\RD                  5      r) " S S\RD                  5      r* " S S\RD                  5      r+ " S  S!\RD                  5      r, " S" S#\RD                  5      r- " S$ S%\5      r. " S& S'\RD                  5      r/\" S(\ 5       " S) S*\.5      5       r0S+r1\" \0\15        \" \0\\S,9   " S- S.\RD                  5      r2\" S/\ 5       " S0 S1\.5      5       r3S2r4\" \3\45        \" \3\\S,9  / S3Qr5g)4    )OptionalN)
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   )	ViTConfiga  

    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 ([`ViTConfig`]): 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 [`ViTImageProcessor.__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)FlaxViTPatchEmbeddingsX   configdtypec                    U R                   R                  nU R                   R                  nX-  X-  -  nX0l        U R                   R                  U l        [
        R                  " U R                   R                  X"4X"4SU R                  [        R
                  R                  R                  U R                   R                  S-  SS5      S9U l        g )NVALID   fan_intruncated_normal)kernel_sizestridespaddingr   kernel_init)r   
image_size
patch_sizenum_patchesnum_channelsnnConvhidden_sizer   jaxinitializersvariance_scalinginitializer_range
projection)selfr$   r%   r&   s       c/home/james-whalen/.local/lib/python3.13/site-packages/transformers/models/vit/modeling_flax_vit.pysetupFlaxViTPatchEmbeddings.setup\   s    [[++
[[++
!/J4LM& KK44''KK###0,**++<<--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'   
ValueErrorr/   jnpreshape)r0   pixel_valuesr'   
embeddings
batch_size_channelss          r1   __call__FlaxViTPatchEmbeddings.__call__m   sf    #))"-,,,w  __\2
%/%5%5"
Aq{{:B'ABBr4   )r'   r&   r/   N__name__
__module____qualname____firstlineno__r   __annotations__r9   float32r   r2   r@   __static_attributes__ r4   r1   r   r   X   s%    {{E399"
"Cr4   r   c                   j    \ rS rSr% Sr\\S'   \R                  r	\R                  \S'   S r
S	S jrSrg)
FlaxViTEmbeddingsx   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
                  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   r   position_embeddingsrate)paramr+   r(   r,   r-   r   r.   r*   rO   r   r   patch_embeddingsr&   rQ   Dropouthidden_dropout_probdropout)r0   r&   s     r1   r2   FlaxViTEmbeddings.setup~   s    FF001N1NPQ1QS[]op4;;**+

 !7t{{$** U++77#'::!FF001N1NPQ1QS[]opa!8!89$
 
 zzt{{'F'FGr4   c                    UR                   S   nU R                  U5      n[        R                  " U R                  USU R
                  R                  45      n[        R                  " XT4SS9nX@R                  -   nU R                  XBS9nU$ )Nr   r   )axisdeterministic)
r7   rU   r9   broadcast_torO   r   r*   concatenaterQ   rX   )r0   r;   r]   r=   r<   
cls_tokenss         r1   r@   FlaxViTEmbeddings.__call__   s    !''*
**<8
%%dnnz1dkkF]F]6^_
__j%=AF
":"::
\\*\J
r4   )rO   rX   rU   rQ   NT)rC   rD   rE   rF   __doc__r   rG   r9   rH   r   r2   r@   rI   rJ   r4   r1   rL   rL   x   s(    A{{E399"H	r4   rL   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	)FlaxViTSelfAttention   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_headsr8   r(   Denser   r+   r,   r-   r.   qkv_biasquerykeyvaluer0   s    r1   r2   FlaxViTSelfAttention.setup   sp   ;;""T[[%D%DDI5 
 XXKK##**++<<--q0xN` =  [[))

 88KK##**++<<--q0xN` =  [[))
 XXKK##**++<<--q0xN` =  [[))

r4   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   g        rX   T)dropout_rngdropout_ratebroadcast_dropoutr]   r   	precisionz...hqk,...khd->...qhd)r6   )r   r*   rk   rn   r:   r7   rp   ro   attention_probs_dropout_probmake_rngr   r   r9   einsum)r0   hidden_statesr]   rs   head_dimquery_statesvalue_states
key_statesru   attn_weightsattn_outputoutputss               r1   r@   FlaxViTSelfAttention.__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r4   )ro   rn   rp   NTFrC   rD   rE   rF   r   rG   r9   rH   r   r2   boolr@   rI   rJ   r4   r1   re   re      s9    {{E399"
@ T  UY    r4   re   c                   n    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S	S\
4S jjrSrg)
FlaxViTSelfOutput   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   rR   r(   rl   r   r*   r+   r,   r-   r.   r   denserV   rW   rX   rq   s    r1   r2   FlaxViTSelfOutput.setup   s    XXKK##++<<--q0(<N **

 zzt{{'F'FGr4   r]   c                 F    U R                  U5      nU R                  XS9nU$ Nr\   r   rX   )r0   r|   input_tensorr]   s       r1   r@   FlaxViTSelfOutput.__call__   s&    

=1]Pr4   r   Nrb   r   rJ   r4   r1   r   r      s1    {{E399"H4  r4   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)
FlaxViTAttention   r   r   c                     [        U R                  U R                  S9U l        [	        U R                  U R                  S9U l        g NrP   )re   r   r   	attentionr   outputrq   s    r1   r2   FlaxViTAttention.setup   s.    -dkkL'4::Fr4   rs   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]   rs   r   r\   r   r   r   )r0   r|   r]   rs   attn_outputsr   r   s          r1   r@   FlaxViTAttention.__call__   sO    ~~mdu~v"1oKm\ "Q))Gr4   r   Nr   r   rJ   r4   r1   r   r      s1    {{E399"G
T 
 
r4   r   c                   b    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S r
Srg)FlaxViTIntermediatei	  r   r   c                 :   [         R                  " U R                  R                  [        R                   R
                  R                  U R                  R                  S-  SS5      U R                  S9U l	        [        U R                  R                     U l        g Nr   r   r   r   )r(   rl   r   intermediate_sizer+   r,   r-   r.   r   r   r   
hidden_act
activationrq   s    r1   r2   FlaxViTIntermediate.setup  so    XXKK))++<<--q0(<N **

 !!7!78r4   c                 J    U R                  U5      nU R                  U5      nU$ Nr   r   )r0   r|   s     r1   r@   FlaxViTIntermediate.__call__  s$    

=16r4   r   r   NrB   rJ   r4   r1   r   r   	  s$    {{E399"9r4   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)
FlaxViTOutputi  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 r   r   rq   s    r1   r2   FlaxViTOutput.setup!  r   r4   r]   c                 N    U R                  U5      nU R                  XS9nX-   nU$ r   r   )r0   r|   attention_outputr]   s       r1   r@   FlaxViTOutput.__call__+  s.    

=1]P%8r4   r   Nrb   r   rJ   r4   r1   r   r     s1    {{E399"Ht  r4   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	)FlaxViTLayeri2  r   r   c                    [        U R                  U R                  S9U l        [	        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        [        R                  " U R                  R                  U R                  S9U l        g NrP   )epsilonr   )r   r   r   r   r   intermediater   r   r(   	LayerNormlayer_norm_epslayernorm_beforelayernorm_afterrq   s    r1   r2   FlaxViTLayer.setup6  s    )$++TZZH/4::N#DKKtzzB "T[[5O5OW[WaWa b!||DKK4N4NVZV`V`ar4   r]   rs   c                     U R                  U R                  U5      UUS9nUS   nXQ-   nU R                  U5      nU R                  U5      nU R	                  XUS9nU4nU(       a  XtS   4-  nU$ r   )r   r   r   r   r   )r0   r|   r]   rs   attention_outputsr   layer_outputr   s           r1   r@   FlaxViTLayer.__call__=  s     NN!!-0'/ + 
 -Q/ ,; ++,<=)),7MS`a "!,..Gr4   )r   r   r   r   r   Nr   r   rJ   r4   r1   r   r   2  s9    {{E399"bT UY  r4   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)FlaxViTLayerCollectioniV  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   strr   layers)r0   is     r1   r2   FlaxViTLayerCollection.setupZ  sJ    NSTXT_T_TqTqNr
NrL3q6DNr
 
s   2Ar]   rs   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$ )NrJ   r   r   r   c              3   .   #    U  H  oc  M  Uv   M     g 7fr   rJ   ).0vs     r1   	<genexpr>2FlaxViTLayerCollection.__call__.<locals>.<genexpr>z  s     =GqGs   	)last_hidden_stater|   
attentions)	enumerater   tupler   )r0   r|   r]   rs   r   r   all_attentionsall_hidden_statesr   layerlayer_outputsr   s               r1   r@   FlaxViTLayerCollection.__call___  s      1d"6BD!$++.HA#!%55!!-`qrM)!,M  #3"55 /  !11 "=G==="+Yg
 	
r4   )r   NTFFTr   rJ   r4   r1   r   r   V  s_    {{E399"
 #"'%* 
 
  	

 #
 
 
r4   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)FlaxViTEncoderi  r   r   c                 J    [        U R                  U R                  S9U l        g r   )r   r   r   r   rq   s    r1   r2   FlaxViTEncoder.setup  s    +DKKtzzJ
r4   r]   rs   r   r   c                 (    U R                  UUUUUS9$ )Nr]   rs   r   r   r   )r0   r|   r]   rs   r   r   s         r1   r@   FlaxViTEncoder.__call__  s)     zz'/!5#  
 	
r4   r   Nr   r   rJ   r4   r1   r   r     s`    {{E399"K #"'%* 
 
  	

 #
 
 
r4   r   c                   b    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S r
Srg)FlaxViTPooleri  r   r   c                 :   [         R                  " U R                  R                  [        R                   R
                  R                  U R                  R                  S-  SS5      U R                  S9U l	        [        U R                  R                     U l        g r   )r(   rl   r   pooler_output_sizer+   r,   r-   r.   r   r   r   
pooler_actr   rq   s    r1   r2   FlaxViTPooler.setup  so    XXKK**++<<--q0(<N **

 !!7!78r4   c                 X    US S 2S4   nU R                  U5      nU R                  U5      $ )Nr   r   )r0   r|   cls_hidden_states      r1   r@   FlaxViTPooler.__call__  s1    (A.::&67/00r4   r   NrB   rJ   r4   r1   r   r     s$    {{E399"91r4   r   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 $ )FlaxViTPreTrainedModeli  zz
An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
models.
vitr;   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   rJ   )r   r$   r'   super__init__)	r0   r   r   r   r   r   kwargsmodule	__class__s	           r1   r   FlaxViTPreTrainedModel.__init__  sX     ""H&HHf//1B1BFDWDWXK[SXlr4   rngr   paramsreturnc                    [         R                  " X R                  S9n[        R                  R                  U5      u  pVXVS.nU R                  R                  XtSS9S   nUbd  [        [        U5      5      n[        [        U5      5      nU R                   H	  n	X   X9'   M     [        5       U l
        [        [        U5      5      $ U$ )NrP   )r  rX   F)r   r  )r9   zerosr   r+   randomsplitr   initr   r   _missing_keyssetr   r	   )
r0   r  r   r  r;   
params_rngru   rngsrandom_paramsmissing_keys
             r1   init_weights#FlaxViTPreTrainedModel.init_weights  s    yyJJ?"%**"2"23"7
$=(((OPXY(-)@AM!(6"23F#11&3&@#  2!$D.011  r4   zbatch_size, sequence_lengthru   trainrs   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  X8S'   U R                  R                  SU=(       d    U R                  0[        R                  " U[        R                  S9U(       + UUUUS9$ )N)r   r   r
   r   rX   r  rP   )r  )r   rs   r   r   r9   	transposer   applyr  arrayrH   )	r0   r;   r  ru   r  rs   r   r   r  s	            r1   r@   FlaxViTPreTrainedModel.__call__  s     2C1N-TXT_T_TqTq$8$D $++JjJj 	 &1%<k$++BYBY}}\<@")O{{  v,-IIl#++6I  ! 
 	
r4   )r  r   )NNFNNN)!rC   rD   rE   rF   rc   r   config_classbase_model_prefixmain_input_namer   r(   ModulerG   r9   rH   intr   r   r   r+   r  PRNGKeyr   r   r  r   VIT_INPUTS_DOCSTRINGformatr   dictr@   rI   __classcell__)r  s   @r1   r   r     s2   
 L$O"L"))"
 ;;mm 	m
 yym m m!

 2 2 ! !PZ !fp !& ++?+F+FGd+ef "&*.,0/3&*
 
 ZZ''	

 
 $D>
 'tn
 d^
 g
r4   r   c            	           \ rS rSr% \\S'   \R                  r\R                  \S'   Sr	\
\S'   S r    SS\
S\
S	\
S
\
4S jjrSrg)FlaxViTModulei  r   r   Tadd_pooling_layerc                 x   [        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	        U R                  (       a$  [        U R                  U R                  S9U l        g S U l        g r   )rL   r   r   r<   r   encoderr(   r   r   	layernormr%  r   poolerrq   s    r1   r2   FlaxViTModule.setup   sv    +DKKtzzJ%dkkDdkk.H.HPTPZPZ[FJF\F\mDKKtzzBbfr4   r]   rs   r   r   c                 2   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 R                  (       a  U R	                  U5      OS nU(       d  Uc	  U4USS  -   $ Xh4USS  -   $ [        UUUR                  UR                  S9$ )Nr\   r   r   r   )r   pooler_outputr|   r   )r<   r'  r(  r%  r)  r   r|   r   )	r0   r;   r]   rs   r   r   r|   r   pooleds	            r1   r@   FlaxViTModule.__call__  s     R,,'/!5#  
  
}5/3/E/E]+4~%''!"+55!*WQR[88-+ !//))	
 	
r4   )r<   r'  r(  r)  Nr   )rC   rD   rE   rF   r   rG   r9   rH   r   r%  r   r2   r@   rI   rJ   r4   r1   r$  r$    sk    {{E399""t"g #"'%*  
  
  	 

 # 
  
  
r4   r$  z]The bare ViT Model transformer outputting raw hidden-states without any specific head on top.c                       \ rS rSr\rSrg)FlaxViTModeli)  rJ   N)rC   rD   rE   rF   r$  r   rI   rJ   r4   r1   r0  r0  )  s	    
 !Lr4   r0  a  
    Returns:

    Examples:

    ```python
    >>> from transformers import AutoImageProcessor, FlaxViTModel
    >>> 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("google/vit-base-patch16-224-in21k")
    >>> model = FlaxViTModel.from_pretrained("google/vit-base-patch16-224-in21k")

    >>> inputs = image_processor(images=image, return_tensors="np")
    >>> outputs = model(**inputs)
    >>> last_hidden_states = outputs.last_hidden_state
    ```
)output_typer  c                   x    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	     S	S\
4S jjrSrg)
#FlaxViTForImageClassificationModuleiK  r   r   c           	      >   [        U R                  U R                  S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 )NF)r   r   r%  r   r   r   )r   r#   )r$  r   r   r   r(   rl   
num_labelsr+   r,   r-   r.   
classifierrq   s    r1   r2   )FlaxViTForImageClassificationModule.setupO  sn     4::Y^_((KK""**++<<--q0(<N
r4   Nr]   c                     Ub  UOU R                   R                  nU R                  UUUUUS9nUS   nU R                  US S 2SS S 24   5      nU(       d  U4USS  -   n	U	$ [	        UUR
                  UR                  S9$ )Nr   r   r   )logitsr|   r   )r   use_return_dictr   r6  r   r|   r   )
r0   r;   r]   rs   r   r   r   r|   r9  r   s
             r1   r@   ,FlaxViTForImageClassificationModule.__call__Y  s     &1%<k$++B]B](('/!5#  
  
q!Qw!78Y,FM+!//))
 	
r4   )r6  r   )NTNNNr   rJ   r4   r1   r3  r3  K  sD    {{E399"
 "!
 
 
r4   r3  z
    ViT 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)FlaxViTForImageClassificationiy  rJ   N)rC   rD   rE   rF   r3  r   rI   rJ   r4   r1   r=  r=  y  s	     7Lr4   r=  ag  
    Returns:

    Example:

    ```python
    >>> from transformers import AutoImageProcessor, FlaxViTForImageClassification
    >>> 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("google/vit-base-patch16-224")
    >>> model = FlaxViTForImageClassification.from_pretrained("google/vit-base-patch16-224")

    >>> 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=  r0  r   )6typingr   
flax.linenlinenr(   r+   	jax.numpynumpyr9   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_vitr   VIT_START_DOCSTRINGr  r  r   rL   re   r   r   r   r   r   r   r   r   r   r$  r0  FLAX_VISION_MODEL_DOCSTRINGr3  r=  FLAX_VISION_CLASSIF_DOCSTRING__all__rJ   r4   r1   <module>rN     s      
  > > > ; v v  Q (! F "CRYY C@		 BD299 DN		 (ryy *")) (BII *!299 !H(
RYY (
V
RYY 
01BII 1(K
0 K
\+
BII +
\ c!) !	! , 'B C  ;Yhq r+
")) +
\  7$: 77! 6 68U V  !/KZc
 Vr4   