
    cCi`                        S SK J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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%\RD                  5      r. " S& S'\5      r/ " S( S)\RD                  5      r0\" S*\ 5       " S+ S,\/5      5       r1S-r2\" \1\25        \" \1\\S.9   " S/ S0\RD                  5      r3 " S1 S2\RD                  5      r4\" S3\ 5       " S4 S5\/5      5       r5S6r6\" \5\65        \" \5\\S.9  / S7Qr7g)8    )partial)OptionalN)
FrozenDictfreezeunfreeze)flatten_dictunflatten_dict   )"FlaxBaseModelOutputWithNoAttention,FlaxBaseModelOutputWithPoolingAndNoAttention(FlaxImageClassifierOutputWithNoAttention)ACT2FNFlaxPreTrainedModel append_replace_return_docstringsoverwrite_call_docstring)add_start_docstrings%add_start_docstrings_to_model_forward   )ResNetConfiga  

    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 ([`ResNetConfig`]): 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`].
aA  
    Args:
        pixel_values (`jax.numpy.float32` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`AutoImageProcessor.__call__`] for details.
        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                   <    \ rS rSrSr\R                  S 5       rSrg)IdentityY   zIdentity function.c                     U$ N )selfxkwargss      i/home/james-whalen/.local/lib/python3.13/site-packages/transformers/models/resnet/modeling_flax_resnet.py__call__Identity.__call__\   s        r   N)	__name__
__module____qualname____firstlineno____doc__nncompactr    __static_attributes__r   r"   r   r   r   Y   s    ZZ r"   r   c                       \ rS rSr% \\S'   Sr\\S'   Sr\\S'   Sr\	\
   \S'   \R                  r\R                  \S	'   S
 rSS\R                  S\S\R                  4S jjrSrg)FlaxResNetConvLayera   out_channelsr
   kernel_sizer   striderelu
activationdtypec                    [         R                  " U R                  U R                  U R                  4U R                  U R                  S-  U R
                  S[         R                  R                  SSSU R
                  S9S9U l        [         R                  " SS	U R
                  S
9U l
        U R                  b  [        U R                     U l        g [        5       U l        g )N   F       @fan_outnormal)modedistributionr3   )r/   stridespaddingr3   use_biaskernel_init?h㈵>momentumepsilonr3   )r(   Convr.   r/   r0   r3   initializersvariance_scalingconvolution	BatchNormnormalizationr2   r   r   activation_funcr   s    r   setupFlaxResNetConvLayer.setuph   s    77))4+;+;<KK$$)**889[ckokuku8v
  \\3TZZX:>//:Uvdoo6[c[er"   r   deterministicreturnc                 h    U R                  U5      nU R                  X2S9nU R                  U5      nU$ N)use_running_average)rG   rI   rJ   r   r   rN   hidden_states       r   r    FlaxResNetConvLayer.__call__u   s;    ''*)),)Z++L9r"   )rJ   rG   rI   NT)r#   r$   r%   r&   int__annotations__r/   r0   r2   r   strjnpfloat32r3   rL   ndarrayboolr    r*   r   r"   r   r,   r,   a   sh    KFCO &J&{{E399"f#++ d ckk  r"   r,   c                       \ rS rSr% Sr\\S'   \R                  r	\R                  \S'   S r
SS\R                  S\S\R                  4S	 jjrS
rg)FlaxResNetEmbeddings|   zG
ResNet Embeddings (stem) composed of a single aggressive convolution.
configr3   c                     [        U R                  R                  SSU R                  R                  U R                  S9U l        [        [        R                  SSSS9U l        g )N   r5   )r/   r0   r2   r3   )r
   r
   )r5   r5   )r   r   rd   )window_shaper;   r<   )	r,   ra   embedding_size
hidden_actr3   embedderr   r(   max_poolrK   s    r   rL   FlaxResNetEmbeddings.setup   sN    +KK&&{{--**
  &&Zjkr"   pixel_valuesrN   rO   c                     UR                   S   nX0R                  R                  :w  a  [        S5      eU R	                  XS9nU R                  U5      nU$ )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.rN   )shapera   num_channels
ValueErrorrh   ri   )r   rk   rN   rp   	embeddings        r   r    FlaxResNetEmbeddings.__call__   sX    #))"-;;333w  MM,ML	MM),	r"   )rh   ri   NrV   )r#   r$   r%   r&   r'   r   rX   rZ   r[   r3   rL   r\   r]   r    r*   r   r"   r   r_   r_   |   sQ     {{E399"	lS[[  QTQ\Q\  r"   r_   c                       \ rS rSr% Sr\\S'   Sr\\S'   \R                  r
\R                  \S'   S rSS\R                  S	\S
\R                  4S jjrSrg)FlaxResNetShortCut   z
ResNet shortcut, used to project the residual features to the correct size. If needed, it is also used to
downsample the input using `stride=2`.
r.   r5   r0   r3   c                     [         R                  " U R                  SU R                  S[         R                  R                  SSSS9U R                  S9U l        [         R                  " SS	U R                  S
9U l	        g )Nrd   Fr6   r7   truncated_normal)r9   r:   )r/   r;   r=   r>   r3   r?   r@   rA   )
r(   rD   r.   r0   rE   rF   r3   rG   rH   rI   rK   s    r   rL   FlaxResNetShortCut.setup   se    77KK889[m8n**
  \\3TZZXr"   r   rN   rO   c                 F    U R                  U5      nU R                  X2S9nU$ rQ   rG   rI   rS   s       r   r    FlaxResNetShortCut.__call__   s+    ''*)),)Zr"   r{   NrV   )r#   r$   r%   r&   r'   rW   rX   r0   rZ   r[   r3   rL   r\   r]   r    r*   r   r"   r   ru   ru      sW    
 FCO{{E399"	Y#++ d ckk  r"   ru   c                       \ rS rSr% \\S'   Sr\\S'   \R                  r	\R                  \S'   S r
SS\R                  S\S	\R                  4S
 jjrSrg)FlaxResNetBasicLayerCollection   r.   r   r0   r3   c                     [        U R                  U R                  U R                  S9[        U R                  S U R                  S9/U l        g )Nr0   r3   )r2   r3   )r,   r.   r0   r3   layerrK   s    r   rL   $FlaxResNetBasicLayerCollection.setup   s;     1 1$++TZZX 1 1d$**U

r"   rT   rN   rO   c                 8    U R                    H	  nU" XS9nM     U$ Nrn   r   r   rT   rN   r   s       r   r    'FlaxResNetBasicLayerCollection.__call__        ZZE KL  r"   r   NrV   )r#   r$   r%   r&   rW   rX   r0   rZ   r[   r3   rL   r\   r]   r    r*   r   r"   r   r~   r~      sR    FCO{{E399"
S[[  QTQ\Q\  r"   r~   c                       \ rS rSr% Sr\\S'   \\S'   Sr\\S'   Sr\	\
   \S'   \R                  r\R                  \S	'   S
 rSS\4S jjrSrg)FlaxResNetBasicLayer   zG
A classic ResNet's residual layer composed by two `3x3` convolutions.
in_channelsr.   r   r0   r1   r2   r3   c                 \   U R                   U R                  :g  =(       d    U R                  S:g  nU(       a)  [        U R                  U R                  U R                  S9OS U l        [        U R                  U R                  U R                  S9U l        [        U R                     U l
        g )Nr   r   )r.   r0   r3   )r   r.   r0   ru   r3   shortcutr~   r   r   r2   rJ   r   should_apply_shortcuts     r   rL   FlaxResNetBasicLayer.setup   s     $ 0 0D4E4E E YXYIY % t00DJJW 	
 4**;;**


  &doo6r"   rN   c                     UnU R                  XS9nU R                  b  U R                  X2S9nX-  nU R                  U5      nU$ r   )r   r   rJ   r   rT   rN   residuals       r   r    FlaxResNetBasicLayer.__call__   sO    zz,zL==$}}X}KH ++L9r"   rJ   r   r   NrV   )r#   r$   r%   r&   r'   rW   rX   r0   r2   r   rY   rZ   r[   r3   rL   r]   r    r*   r   r"   r   r   r      sT     FCO &J&{{E399"7	D 	 	r"   r   c                       \ rS rSr% \\S'   Sr\\S'   Sr\\	   \S'   Sr
\\S'   \R                  r\R                  \S	'   S
 rSS\R                  S\S\R                  4S jjrSrg)#FlaxResNetBottleNeckLayerCollection   r.   r   r0   r1   r2      	reductionr3   c           
          U R                   U R                  -  n[        USU R                  SS9[        XR                  U R                  SS9[        U R                   SS U R                  SS9/U l        g )Nr   0)r/   r3   name1)r0   r3   r   2)r/   r2   r3   r   )r.   r   r,   r3   r0   r   )r   reduces_channelss     r   rL   )FlaxResNetBottleNeckLayerCollection.setup   sj    ,,>   0atzzX[\ 0DJJ]`a 1 1qTY]YcYcjmn

r"   rT   rN   rO   c                 8    U R                    H	  nU" XS9nM     U$ r   r   r   s       r   r    ,FlaxResNetBottleNeckLayerCollection.__call__   r   r"   r   NrV   )r#   r$   r%   r&   rW   rX   r0   r2   r   rY   r   rZ   r[   r3   rL   r\   r]   r    r*   r   r"   r   r   r      sj    FCO &J&Is{{E399"
S[[  QTQ\Q\  r"   r   c                       \ rS rSr% Sr\\S'   \\S'   Sr\\S'   Sr\	\
   \S'   S	r\\S
'   \R                  r\R                  \S'   S rSS\R                   S\S\R                   4S jjrSrg)FlaxResNetBottleNeckLayeri  a  
A classic ResNet's bottleneck layer composed by three `3x3` convolutions. The first `1x1` convolution reduces the
input by a factor of `reduction` in order to make the second `3x3` convolution faster. The last `1x1` convolution
remaps the reduced features to `out_channels`.
r   r.   r   r0   r1   r2   r   r   r3   c                    U R                   U R                  :g  =(       d    U R                  S:g  nU(       a)  [        U R                  U R                  U R                  S9OS U l        [        U R                  U R                  U R                  U R                  U R                  S9U l	        [        U R                     U l        g )Nr   r   )r0   r2   r   r3   )r   r.   r0   ru   r3   r   r   r2   r   r   r   rJ   r   s     r   rL   FlaxResNetBottleNeckLayer.setup  s     $ 0 0D4E4E E YXYIY % t00DJJW 	 9;;nn**

  &doo6r"   rT   rN   rO   c                     UnU R                   b  U R                  X2S9nU R                  X5      nX-  nU R                  U5      nU$ r   )r   r   rJ   r   s       r   r    "FlaxResNetBottleNeckLayer.__call__!  sM    ==$}}X}KHzz,> ++L9r"   r   NrV   )r#   r$   r%   r&   r'   rW   rX   r0   r2   r   rY   r   rZ   r[   r3   rL   r\   r]   r    r*   r   r"   r   r   r     sw     FCO &J&Is{{E399"7$S[[  QTQ\Q\  r"   r   c                       \ rS rSr% Sr\\S'   \\S'   \\S'   Sr\\S'   Sr	\\S'   \
R                  r\
R                  \S	'   S
 rSS\
R                  S\S\
R                  4S jjrSrg)FlaxResNetStageLayersCollectioni,  ,
A ResNet stage composed by stacked layers.
ra   r   r.   r5   r0   depthr3   c                    U R                   R                  S:X  a  [        O[        nU" U R                  U R
                  U R                  U R                   R                  U R                  SS9/n[        U R                  S-
  5       HZ  nUR                  U" U R
                  U R
                  U R                   R                  U R                  [        US-   5      S95        M\     X l        g )N
bottleneckr   )r0   r2   r3   r   r   )r2   r3   r   )ra   
layer_typer   r   r   r.   r0   rg   r3   ranger   appendrY   layers)r   r   r   is       r   rL   %FlaxResNetStageLayersCollection.setup8  s    -1[[-C-C|-S)Ym   !!{{;;11jj

 tzzA~&AMM%%%%#{{55**QU ' r"   r   rN   rO   c                 <    UnU R                    H	  nU" X2S9nM     U$ r   r   )r   r   rN   rT   r   s        r   r    (FlaxResNetStageLayersCollection.__call__T  s%    [[E KL !r"   r   NrV   r#   r$   r%   r&   r'   r   rX   rW   r0   r   rZ   r[   r3   rL   r\   r]   r    r*   r   r"   r   r   r   ,  sk     FCOE3N{{E399"8#++ d ckk  r"   r   c                       \ rS rSr% Sr\\S'   \\S'   \\S'   Sr\\S'   Sr	\\S'   \
R                  r\
R                  \S	'   S
 rSS\
R                  S\S\
R                  4S jjrSrg)FlaxResNetStagei[  r   ra   r   r.   r5   r0   r   r3   c           	          [        U R                  U R                  U R                  U R                  U R
                  U R                  S9U l        g )N)r   r.   r0   r   r3   )r   ra   r   r.   r0   r   r3   r   rK   s    r   rL   FlaxResNetStage.setupg  s<    5KK((**;;****
r"   r   rN   rO   c                      U R                  XS9$ r   r   )r   r   rN   s      r   r    FlaxResNetStage.__call__q  s    {{1{::r"   r   NrV   r   r   r"   r   r   r   [  sk     FCOE3N{{E399"
;#++ ;d ;ckk ; ;r"   r   c            	           \ rS rSr% \\S'   \R                  r\R                  \S'   S r	  SS\R                  S\S\S\4S	 jjrS
rg)FlaxResNetStageCollectioniu  ra   r3   c                 n   [        U R                  R                  U R                  R                  SS  5      n[        U R                  U R                  R                  U R                  R                  S   U R                  R
                  (       a  SOSU R                  R                  S   U R                  SS9/n[        [        XR                  R                  SS  5      5       HF  u  nu  u  pEnUR                  [        U R                  XEX`R                  [        US-   5      S95        MH     X l        g )Nr   r   r5   r   )r0   r   r3   r   )r   r3   r   )zipra   hidden_sizesr   rf   downsample_in_first_stagedepthsr3   	enumerater   rY   stages)r   in_out_channelsr   r   r   r.   r   s          r   rL   FlaxResNetStageCollection.setupy  s    dkk668P8PQRQS8TU**((+ KKAAqqkk((+jj

 8A_VaVaVhVhijikVlAm7n3A3+UMM[e[e[elopqtupulvw 8o
 r"   rT   output_hidden_statesrN   rO   c                     U(       a  SOS nU R                    H'  nU(       a  XAR                  SSSS5      4-   nU" XS9nM)     X4$ )Nr   r   r
   r   r5   rn   )r   	transpose)r   rT   r   rN   hidden_statesstage_modules         r   r    "FlaxResNetStageCollection.__call__  sP     3 KKL# -1G1G1aQR1S0U U'RL	 ( **r"   r   N)FTr#   r$   r%   r&   r   rX   rZ   r[   r3   rL   r\   r]   r   r    r*   r   r"   r   r   r   u  s[    {{E399"0 &+"	+kk+ #+ 	+
 
,+ +r"   r   c                       \ rS rSr% \\S'   \R                  r\R                  \S'   S r	   SS\R                  S\S\S\S	\4
S
 jjrSrg)FlaxResNetEncoderi  ra   r3   c                 J    [        U R                  U R                  S9U l        g )Nr3   )r   ra   r3   r   rK   s    r   rL   FlaxResNetEncoder.setup  s    /4::Nr"   rT   r   return_dictrN   rO   c                     U R                  XUS9u  pU(       a  XQR                  SSSS5      4-   nU(       d  [        S X4 5       5      $ [        UUS9$ )N)r   rN   r   r
   r   r5   c              3   .   #    U  H  oc  M  Uv   M     g 7fr   r   ).0vs     r   	<genexpr>-FlaxResNetEncoder.__call__.<locals>.<genexpr>  s     S$Aq$As   	)last_hidden_stater   )r   r   tupler   )r   rT   r   r   rN   r   s         r   r    FlaxResNetEncoder.__call__  sk     '+kkS` '2 '
#  )-C-CAq!Q-O,QQMS\$ASSS1*'
 	
r"   r   N)FTTr   r   r"   r   r   r     si    {{E399"O &+ "
kk
 #
 	

 
 
,
 
r"   r   c                   8  ^  \ 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\" \5          SS\\   S\S\\   S\\   4S jj5       rSrU =r$ )FlaxResNetPreTrainedModeli  zz
An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
models.
resnetrk   Nmodule_class)r      r   r
   r   Tra   seedr3   _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ra   r3   r   )input_shaper   r3   r   r   )r   
image_sizerp   super__init__)	r   ra   r   r   r3   r   r   module	__class__s	           r   r   "FlaxResNetPreTrainedModel.__init__  sX     ""H&HHf//1B1BFDWDWXK[SXlr"   rngr   paramsrO   c                 L   [         R                  " X R                  S9nSU0nU R                  R	                  XTSS9nUbd  [        [        U5      5      n[        [        U5      5      nU R                   H	  nXg   X7'   M     [        5       U l        [        [        U5      5      $ U$ )Nr   r   F)r   )rZ   zerosr3   r   initr   r   _missing_keyssetr   r	   )r   r   r   r   rk   rngsrandom_paramsmissing_keys           r   init_weights&FlaxResNetPreTrainedModel.init_weights  s    yyJJ?#(((O(-)@AM!(6"23F#11&3&@#  2!$D.011  r"   trainr   r   c           
         Ub  UOU R                   R                  nUb  UOU R                   R                  n[        R                  " US5      n0 nU R
                  R                  Ub  US   OU R                  S   Ub  US   OU R                  S   S.[        R                  " U[        R                  S9U(       + UUUU(       a  S/S9$ SS9$ )N)r   r5   r
   r   r   batch_stats)r   r  r   F)r   mutable)
ra   r   r   rZ   r   r   applyr   arrayr[   )r   rk   r   r   r   r   r   s          r   r    "FlaxResNetPreTrainedModel.__call__  s     %9$D $++JjJj 	 &1%<k$++BYBY}}\<@ {{  .4.@&*dkkRZF[8>8Jvm4PTP[P[\iPj IIl#++6I ',]O ! 
 	
 38 ! 
 	
r"   )r   r   )NFNN) r#   r$   r%   r&   r'   r   config_classbase_model_prefixmain_input_namer   r(   ModulerX   rZ   r[   rW   r3   r]   r   jaxrandomPRNGKeyr   r   r   r   RESNET_INPUTS_DOCSTRINGr   dictr    r*   __classcell__)r   s   @r   r   r     s    
  L $O"L"))"
 %;;mm 	m
 yym m m!

 2 2 ! !PZ !fp !$ ++BC "&/3&*
 
 	

 'tn
 d^
 D
r"   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)FlaxResNetModulei	  ra   r3   c                     [        U R                  U R                  S9U l        [	        U R                  U R                  S9U l        [        [        R                  SS9U l	        g )Nr   )r   r   r  )r<   )
r_   ra   r3   rh   r   encoderr   r(   avg_poolpoolerrK   s    r   rL   FlaxResNetModule.setup  sF    ,T[[

K(DJJG KK$
r"   rN   r   r   rO   c                    Ub  UOU R                   R                  nUb  UOU R                   R                  nU R                  XS9nU R	                  UUUUS9nUS   nU R                  UUR                  S   UR                  S   4UR                  S   UR                  S   4S9R                  SSSS5      nUR                  SSSS5      nU(       d	  Xx4USS  -   $ [        UUUR                  S9$ )	Nrn   )r   r   rN   r   r   r5   )re   r;   r
   )r   pooler_outputr   )
ra   r   use_return_dictrh   r  r  ro   r   r   r   )	r   rk   rN   r   r   embedding_outputencoder_outputsr   pooled_outputs	            r   r    FlaxResNetModule.__call__  s)    %9$D $++JjJj 	 &1%<k$++B]B]===S,,!5#'	 ' 
 ,A.+11!46G6M6Ma6PQ&,,Q/1B1H1H1KL $ 
 )Aq!Q
	 	 .771aC%58KKK;/')77
 	
r"   )rh   r  r  N)TFT)r#   r$   r%   r&   r   rX   rZ   r[   r3   rL   r]   r   r    r*   r   r"   r   r  r  	  s\    {{E399"
 #%* &
 &
 #	&

 &
 
6&
 &
r"   r  zOThe bare ResNet model outputting raw features without any specific head on top.c                       \ rS rSr\rSrg)FlaxResNetModeli@  r   N)r#   r$   r%   r&   r  r   r*   r   r"   r   r!  r!  @  s	    
 $Lr"   r!  an  
    Returns:

    Examples:

    ```python
    >>> from transformers import AutoImageProcessor, FlaxResNetModel
    >>> 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("microsoft/resnet-50")
    >>> model = FlaxResNetModel.from_pretrained("microsoft/resnet-50")
    >>> inputs = image_processor(images=image, return_tensors="np")
    >>> outputs = model(**inputs)
    >>> last_hidden_states = outputs.last_hidden_state
    ```
)output_typer  c                       \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S\R                  S\R                  4S jrSrg	)
FlaxResNetClassifierCollectionib  ra   r3   c                 v    [         R                  " U R                  R                  U R                  SS9U l        g )Nr   )r3   r   )r(   Densera   
num_labelsr3   
classifierrK   s    r   rL   $FlaxResNetClassifierCollection.setupf  s%    ((4;;#9#9RUVr"   r   rO   c                 $    U R                  U5      $ r   r(  )r   r   s     r   r    'FlaxResNetClassifierCollection.__call__i  s    q!!r"   r+  N)r#   r$   r%   r&   r   rX   rZ   r[   r3   rL   r\   r    r*   r   r"   r   r$  r$  b  s;    {{E399"W"#++ "#++ "r"   r$  c                   v    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	    S	S\
4S jjrSrg)
&FlaxResNetForImageClassificationModuleim  ra   r3   c                     [        U R                  U R                  S9U l        U R                  R                  S:  a$  [        U R                  U R                  S9U l        g [        5       U l        g )Nr   r   r   )r  ra   r3   r   r'  r$  r(  r   rK   s    r   rL   ,FlaxResNetForImageClassificationModule.setupq  sL    &dkkL;;!!A%<T[[PTPZPZ[DO&jDOr"   NrN   c                    Ub  UOU R                   R                  nU R                  UUUUS9nU(       a  UR                  OUS   nU R	                  US S 2S S 2SS4   5      nU(       d  U4USS  -   nU$ [        XuR                  S9$ )N)rN   r   r   r   r   r5   )logitsr   )ra   r  r   r  r(  r   r   )	r   rk   rN   r   r   outputsr  r2  outputs	            r   r    /FlaxResNetForImageClassificationModule.__call__y  s     &1%<k$++B]B]++'!5#	  
 2=--'!*q!Qz!:;Y,FM7vUjUjkkr"   )r(  r   )NTNN)r#   r$   r%   r&   r   rX   rZ   r[   r3   rL   r]   r    r*   r   r"   r   r.  r.  m  sD    {{E399") "!l l lr"   r.  z
    ResNet Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    c                       \ rS rSr\rSrg) FlaxResNetForImageClassificationi  r   N)r#   r$   r%   r&   r.  r   r*   r   r"   r   r7  r7    s	     :Lr"   r7  a]  
    Returns:

    Example:

    ```python
    >>> from transformers import AutoImageProcessor, FlaxResNetForImageClassification
    >>> 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("microsoft/resnet-50")
    >>> model = FlaxResNetForImageClassification.from_pretrained("microsoft/resnet-50")

    >>> 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()])
    ```
)r7  r!  r   )8	functoolsr   typingr   
flax.linenlinenr(   r  	jax.numpynumpyrZ   flax.core.frozen_dictr   r   r   flax.traverse_utilr   r	   modeling_flax_outputsr   r   r   modeling_flax_utilsr   r   r   r   utilsr   r   configuration_resnetr   RESNET_START_DOCSTRINGr  r
  r   r,   r_   ru   r~   r   r   r   r   r   r   r   r   r  r!  FLAX_VISION_MODEL_DOCSTRINGr$  r.  r7  FLAX_VISION_CLASSIF_DOCSTRING__all__r   r"   r   <module>rH     s       
  > > ; 
  Q .! H
 ryy ")) 6299 < 6RYY ""299 "J")) ,(		 (V,bii ,^;bii ;4'+		 '+T
		 
<I
 3 I
X4
ryy 4
n U$/ $	$ ( *E F  !M\h
"RYY "$lRYY $lN  :'@ ::! 6 9;X Y  $2Ziu
 _r"   