
    cCigo                     D   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  S SKJr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
r!Sr" " S S\RF                  5      r$ " S S\RF                  5      r% " S S\RF                  5      r& " S S\RF                  5      r' " S S\RF                  5      r( " S S\RF                  5      r) " S S\RF                  5      r* " S S\RF                  5      r+ " S S\RF                  5      r, " S S\RF                  5      r- " S  S!\RF                  5      r. " S" S#\RF                  5      r/ " S$ S%\RF                  5      r0 " S& S'\RF                  5      r1 " S( S)\5      r2 " S* S+\RF                  5      r3\" S,\!5       " S- S.\25      5       r4S/r5\" \4\55        \" \4\\S09   " S1 S2\RF                  5      r6 " S3 S4\RF                  5      r7\" S5\!5       " S6 S7\25      5       r8S8r9\" \8\95        \" \8\\S09  / S9Qr:g):    )partial)OptionalN)
FrozenDictfreezeunfreeze)flatten_dictunflatten_dict)RegNetConfig)"FlaxBaseModelOutputWithNoAttentionFlaxBaseModelOutputWithPooling,FlaxBaseModelOutputWithPoolingAndNoAttention(FlaxImageClassifierOutputWithNoAttention)ACT2FNFlaxPreTrainedModel append_replace_return_docstringsoverwrite_call_docstring)add_start_docstrings%add_start_docstrings_to_model_forwarda  

    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 ([`RegNetConfig`]): 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
            [`RegNetImageProcessor.__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)Identity_   zIdentity function.c                     U$ N )selfxkwargss      i/home/james-whalen/.local/lib/python3.13/site-packages/transformers/models/regnet/modeling_flax_regnet.py__call__Identity.__call__b   s        r   N)	__name__
__module____qualname____firstlineno____doc__nncompactr   __static_attributes__r   r!   r   r   r   _   s    ZZ r!   r   c                       \ rS rSr% \\S'   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)FlaxRegNetConvLayerg   out_channels   kernel_size   stridegroupsrelu
activationdtypec                    [         R                  " U R                  U R                  U R                  4U 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        U R                  b  [        U R                     U l        g [        5       U l        g )N   F       @fan_outtruncated_normalmodedistribution)r/   stridespaddingfeature_group_countuse_biaskernel_initr5   ?h㈵>momentumepsilonr5   )r'   Convr-   r/   r1   r2   initializersvariance_scalingr5   convolution	BatchNormnormalizationr4   r   r   activation_funcr   s    r   setupFlaxRegNetConvLayer.setupo   s    77))4+;+;<KK$$) $889[m8n**	
  \\3TZZX:>//:Uvdoo6[c[er!   hidden_statedeterministicreturnc                 h    U R                  U5      nU R                  XS9nU R                  U5      nU$ N)use_running_average)rK   rM   rN   )r   rR   rS   s      r   r   FlaxRegNetConvLayer.__call__}   s;    ''5)),)Z++L9r!   )rN   rK   rM   NT)r"   r#   r$   r%   int__annotations__r/   r1   r2   r4   r   strjnpfloat32r5   rP   ndarrayboolr   r)   r   r!   r   r+   r+   g   st    KFCOFCO &J&{{E399"fS[[  QTQ\Q\  r!   r+   c                       \ 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
)FlaxRegNetEmbeddings   configr5   c                     [        U R                  R                  SSU R                  R                  U R                  S9U l        g )Nr.   r7   )r/   r1   r4   r5   )r+   rd   embedding_size
hidden_actr5   embedderrO   s    r   rP   FlaxRegNetEmbeddings.setup   s5    +KK&&{{--**
r!   pixel_valuesrS   rT   c                     UR                   S   nX0R                  R                  :w  a  [        S5      eU R	                  XS9nU$ )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.rS   )shaperd   num_channels
ValueErrorrh   )r   rj   rS   ro   rR   s        r   r   FlaxRegNetEmbeddings.__call__   sJ    #))"-;;333w  }}\}Or!   )rh   NrY   )r"   r#   r$   r%   r
   r[   r]   r^   r5   rP   r_   r`   r   r)   r   r!   r   rb   rb      sI    {{E399"
S[[  QTQ\Q\  r!   rb   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)FlaxRegNetShortCut   z
RegNet 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-   r7   r1   r5   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 )Nr0   r0   Fr8   r9   r:   r;   )r/   r>   rA   rB   r5   rC   rD   rE   )
r'   rH   r-   r1   rI   rJ   r5   rK   rL   rM   rO   s    r   rP   FlaxRegNetShortCut.setup   se    77KK889[m8n**
  \\3TZZXr!   r   rS   rT   c                 F    U R                  U5      nU R                  X2S9nU$ rV   rK   rM   )r   r   rS   rR   s       r   r   FlaxRegNetShortCut.__call__   s+    ''*)),)Zr!   ry   NrY   )r"   r#   r$   r%   r&   rZ   r[   r1   r]   r^   r5   rP   r_   r`   r   r)   r   r!   r   rs   rs      sW    
 FCO{{E399"	Y#++ d ckk  r!   rs   c                       \ rS rSr% \\S'   \\S'   \R                  r\R                  \S'   S r	S\R                  S\R                  4S jrS	rg
)FlaxRegNetSELayerCollection   in_channelsreduced_channelsr5   c           
      <   [         R                  " U R                  S[         R                  R	                  SSSS9U R
                  SS9U l        [         R                  " U R                  S[         R                  R	                  SSSS9U R
                  SS9U l        g )	Nrv   r8   r9   r:   r;   0)r/   rB   r5   name2)	r'   rH   r   rI   rJ   r5   conv_1r~   conv_2rO   s    r   rP   !FlaxRegNetSELayerCollection.setup   s    gg!!889[m8n**
 gg889[m8n**
r!   rR   rT   c                     U R                  U5      n[        R                  " U5      nU R                  U5      n[        R                  " U5      nU$ r   )r   r'   r3   r   sigmoid)r   rR   	attentions      r   r   $FlaxRegNetSELayerCollection.__call__   s@    {{<0ww|,{{<0JJ|,	r!   )r   r   N)r"   r#   r$   r%   rZ   r[   r]   r^   r5   rP   r_   r   r)   r   r!   r   r|   r|      s@    {{E399"
 S[[ S[[ r!   r|   c                       \ rS rSr% Sr\\S'   \\S'   \R                  r	\R                  \S'   S r
S\R                  S\R                  4S	 jrS
rg)FlaxRegNetSELayer   z|
Squeeze and Excitation layer (SE) proposed in [Squeeze-and-Excitation Networks](https://huggingface.co/papers/1709.01507).
r~   r   r5   c                     [        [        R                  SS9U l        [	        U R
                  U R                  U R                  S9U l        g )Nr   r   r   r?   r5   )	r   r'   avg_poolpoolerr|   r~   r   r5   r   rO   s    r   rP   FlaxRegNetSELayer.setup   s8    bkk3CD4T5E5EtG\G\dhdndnor!   rR   rT   c                     U R                  UUR                  S   UR                  S   4UR                  S   UR                  S   4S9nU R                  U5      nX-  nU$ )Nr0   r7   window_shaper>   )r   rn   r   )r   rR   pooledr   s       r   r   FlaxRegNetSELayer.__call__   sr    &,,Q/1C1CA1FG!''*L,>,>q,AB  

 NN6*	#/r!   )r   r   N)r"   r#   r$   r%   r&   rZ   r[   r]   r^   r5   rP   r_   r   r)   r   r!   r   r   r      sH     {{E399"pS[[ S[[ r!   r   c                       \ rS rSr% \\S'   \\S'   Sr\\S'   \R                  r
\R                  \S'   S rSS\R                  S	\S
\R                  4S jjrSrg)FlaxRegNetXLayerCollection   rd   r-   r0   r1   r5   c           
         [        SU R                  U R                  R                  -  5      n[	        U R                  SU R                  R
                  U R                  SS9[	        U R                  U R                  UU R                  R
                  U R                  SS9[	        U R                  SS U R                  SS9/U l        g )Nr0   r   r/   r4   r5   r   1r1   r2   r4   r5   r   r   )	maxr-   rd   groups_widthr+   rg   r5   r1   layerr   r2   s     r   rP    FlaxRegNetXLayerCollection.setup   s    Q))T[[-E-EEF  !!;;11jj  !!{{;;11jj  !!jj!

r!   rR   rS   rT   c                 8    U R                    H	  nU" XS9nM     U$ Nrm   r   )r   rR   rS   r   s       r   r   #FlaxRegNetXLayerCollection.__call__  s     ZZE KL  r!   r   NrY   )r"   r#   r$   r%   r
   r[   rZ   r1   r]   r^   r5   rP   r_   r`   r   r)   r   r!   r   r   r      sX    FCO{{E399"
8S[[  QTQ\Q\  r!   r   c                       \ rS rSr% Sr\\S'   \\S'   \\S'   Sr\\S'   \	R                  r\	R                  \S'   S	 rSS
\	R                  S\S\	R                  4S jjrSrg)FlaxRegNetXLayeri  zl
RegNet's layer composed by three `3x3` convolutions, same as a ResNet bottleneck layer with reduction = 1.
rd   r~   r-   r0   r1   r5   c                    U R                   U R                  :g  =(       d    U R                  S:g  nU(       a)  [        U R                  U R                  U R                  S9O	[        5       U l        [        U R                  U R                   U R                  U R                  U R                  S9U l	        [        U R                  R                     U l        g Nr0   )r1   r5   )r~   r-   r1   r5   )r~   r-   r1   rs   r5   r   shortcutr   rd   r   r   rg   rN   r   should_apply_shortcuts     r   rP   FlaxRegNetXLayer.setup   s     $ 0 0D4E4E E YXYIY % !!{{jj  	 0KK((**;;**

  &dkk&<&<=r!   rR   rS   rT   c                 t    UnU R                  U5      nU R                  X2S9nX-  nU R                  U5      nU$ r   r   r   rN   r   rR   rS   residuals       r   r   FlaxRegNetXLayer.__call__4  C    zz,/===G ++L9r!   rN   r   r   NrY   r"   r#   r$   r%   r&   r
   r[   rZ   r1   r]   r^   r5   rP   r_   r`   r   r)   r   r!   r   r   r     se     FCO{{E399">(S[[  QTQ\Q\  r!   r   c                       \ rS rSr% \\S'   \\S'   \\S'   Sr\\S'   \R                  r
\R                  \S'   S rS	\R                  S
\R                  4S jrSrg)FlaxRegNetYLayerCollectioni=  rd   r~   r-   r0   r1   r5   c                    [        SU R                  U R                  R                  -  5      n[	        U R                  SU R                  R
                  U R                  SS9[	        U R                  U R                  UU R                  R
                  U R                  SS9[        U R                  [        [        U R                  S-  5      5      U R                  SS9[	        U R                  SS U R                  S	S9/U l        g )
Nr0   r   r   r   r      r   )r   r5   r   3)r   r-   rd   r   r+   rg   r5   r1   r   rZ   roundr~   r   r   s     r   rP    FlaxRegNetYLayerCollection.setupD  s    Q))T[[-E-EEF  !!;;11jj  !!{{;;11jj !!!$U4+;+;a+?%@!Ajj	  !!jj-

r!   rR   rT   c                 <    U R                    H  nU" U5      nM     U$ r   r   )r   rR   r   s      r   r   #FlaxRegNetYLayerCollection.__call__f  s     ZZE .L  r!   r   N)r"   r#   r$   r%   r
   r[   rZ   r1   r]   r^   r5   rP   r_   r   r)   r   r!   r   r   r   =  sP    FCO{{E399" 
DS[[ S[[ r!   r   c                       \ rS rSr% Sr\\S'   \\S'   \\S'   Sr\\S'   \	R                  r\	R                  \S'   S	 rSS
\	R                  S\S\	R                  4S jjrSrg)FlaxRegNetYLayeril  z;
RegNet's Y layer: an X layer with Squeeze and Excitation.
rd   r~   r-   r0   r1   r5   c                    U R                   U R                  :g  =(       d    U R                  S:g  nU(       a)  [        U R                  U R                  U R                  S9O	[        5       U l        [        U R                  U R                   U R                  U R                  U R                  S9U l	        [        U R                  R                     U l        g r   )r~   r-   r1   rs   r5   r   r   r   rd   r   r   rg   rN   r   s     r   rP   FlaxRegNetYLayer.setupw  s     $ 0 0D4E4E E YXYIY % !!{{jj  	 0KK((**;;**

  &dkk&<&<=r!   rR   rS   rT   c                 t    UnU R                  U5      nU R                  X2S9nX-  nU R                  U5      nU$ r   r   r   s       r   r   FlaxRegNetYLayer.__call__  r   r!   r   NrY   r   r   r!   r   r   r   l  se     FCO{{E399">*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)FlaxRegNetStageLayersCollectioni  ,
A RegNet stage composed by stacked layers.
rd   r~   r-   r7   r1   depthr5   c                    U R                   R                  S:X  a  [        O[        nU" U R                   U R                  U R
                  U R                  U R                  SS9/n[        U R                  S-
  5       HP  nUR                  U" U R                   U R
                  U R
                  U R                  [        US-   5      S95        MR     X l        g )Nr   r   )r1   r5   r   r0   r5   r   )rd   
layer_typer   r   r~   r-   r1   r5   ranger   appendr\   layers)r   r   r   is       r   rP   %FlaxRegNetStageLayersCollection.setup  s    $(KK$:$:c$A GW   !!{{jj

 tzzA~&AMMKK%%%%**QU ' r!   r   rS   rT   c                 <    UnU R                    H	  nU" X2S9nM     U$ r   r   )r   r   rS   rR   r   s        r   r   (FlaxRegNetStageLayersCollection.__call__  s%    [[E KL !r!   r   NrY   r"   r#   r$   r%   r&   r
   r[   rZ   r1   r   r]   r^   r5   rP   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)FlaxRegNetStagei  r   rd   r~   r-   r7   r1   r   r5   c           	          [        U R                  U R                  U R                  U R                  U R
                  U R                  S9U l        g )N)r~   r-   r1   r   r5   )r   rd   r~   r-   r1   r   r5   r   rO   s    r   rP   FlaxRegNetStage.setup  s<    5KK((**;;****
r!   r   rS   rT   c                      U R                  XS9$ r   r   )r   r   rS   s      r   r   FlaxRegNetStage.__call__  s    {{1{::r!   r   NrY   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)FlaxRegNetStageCollectioni  rd   r5   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 )Nr0   r   r7   r   )r1   r   r5   r   )r   r5   r   )ziprd   hidden_sizesr   rf   downsample_in_first_stagedepthsr5   	enumerater   r\   stages)r   in_out_channelsr   r   r~   r-   r   s          r   rP   FlaxRegNetStageCollection.setup  s    dkk668P8PQRQS8TU**((+ KKAAqqkk((+jj

 8A_VaVaVhVhijikVlAm7n3A3+UMM[e[e[elopqtupulvw 8o
 r!   rR   output_hidden_statesrS   rT   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.   r0   r7   rm   )r   	transpose)r   rR   r   rS   hidden_statesstage_modules         r   r   "FlaxRegNetStageCollection.__call__  sP     3 KKL# -1G1G1aQR1S0U U'RL	 ( **r!   r   N)FTr"   r#   r$   r%   r
   r[   r]   r^   r5   rP   r_   r`   r   r   r)   r   r!   r   r   r     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)FlaxRegNetEncoderi  rd   r5   c                 J    [        U R                  U R                  S9U l        g )Nr   )r   rd   r5   r   rO   s    r   rP   FlaxRegNetEncoder.setup  s    /4::Nr!   rR   r   return_dictrS   rT   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   rS   r   r.   r0   r7   c              3   .   #    U  H  oc  M  Uv   M     g 7fr   r   ).0vs     r   	<genexpr>-FlaxRegNetEncoder.__call__.<locals>.<genexpr>!  s     S$Aq$As   	)last_hidden_stater   )r   r   tupler   )r   rR   r   r   rS   r   s         r   r   FlaxRegNetEncoder.__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$ )FlaxRegNetPreTrainedModeli*  zz
An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
models.
regnetrj   Nmodule_class)r0      r  r.   r   Trd   seedr5   _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rd   r5   r0   )input_shaper  r5   r  r   )r  
image_sizero   super__init__)	r   rd   r
  r  r5   r  r   module	__class__s	           r   r  "FlaxRegNetPreTrainedModel.__init__5  sX     ""H&HHf//1B1BFDWDWXK[SXlr!   rngr
  paramsrT   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   )r]   zerosr5   r  initr   r   _missing_keyssetr   r	   )r   r  r
  r  rj   rngsrandom_paramsmissing_keys           r   init_weights&FlaxRegNetPreTrainedModel.init_weightsC  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   r7   r.   r0   r  batch_stats)r  r  r   F)r  mutable)
rd   r   r   r]   r   r  applyr  arrayr^   )r   rj   r  r  r   r   r  s          r   r   "FlaxRegNetPreTrainedModel.__call__U  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'   Moduler[   r]   r^   rZ   r5   r`   r  jaxrandomPRNGKeyr   r   r  r   REGNET_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)FlaxRegNetModuleiw  rd   r5   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   )
rb   rd   r5   rh   r   encoderr   r'   r   r   rO   s    r   rP   FlaxRegNetModule.setup{  sF    ,T[[

K(DJJG KK$
r!   rS   r   r   rT   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$ )	Nrm   )r   r   rS   r   r0   r7   r   r.   )r   pooler_outputr   )
rd   r   use_return_dictrh   r1  r   rn   r   r   r   )	r   rj   rS   r   r   embedding_outputencoder_outputsr   pooled_outputs	            r   r   FlaxRegNetModule.__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   r1  r   N)TFT)r"   r#   r$   r%   r
   r[   r]   r^   r5   rP   r`   r   r   r)   r   r!   r   r/  r/  w  s\    {{E399"
 #%* &
 &
 #	&

 &
 
6&
 &
r!   r/  zOThe bare RegNet model outputting raw features without any specific head on top.c                       \ rS rSr\rSrg)FlaxRegNetModeli  r   N)r"   r#   r$   r%   r/  r  r)   r   r!   r   r;  r;    s	    
 $Lr!   r;  at  
    Returns:

    Examples:

    ```python
    >>> from transformers import AutoImageProcessor, FlaxRegNetModel
    >>> 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/regnet-y-040")
    >>> model = FlaxRegNetModel.from_pretrained("facebook/regnet-y-040")

    >>> 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	)
FlaxRegNetClassifierCollectioni  rd   r5   c                 v    [         R                  " U R                  R                  U R                  SS9U l        g )Nr   r   )r'   Denserd   
num_labelsr5   
classifierrO   s    r   rP   $FlaxRegNetClassifierCollection.setup  s%    ((4;;#9#9RUVr!   r   rT   c                 $    U R                  U5      $ r   rB  )r   r   s     r   r   'FlaxRegNetClassifierCollection.__call__  s    q!!r!   rE  N)r"   r#   r$   r%   r
   r[   r]   r^   r5   rP   r_   r   r)   r   r!   r   r>  r>    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)
&FlaxRegNetForImageClassificationModulei  rd   r5   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/  rd   r5   r  rA  r>  rB  r   rO   s    r   rP   ,FlaxRegNetForImageClassificationModule.setup  sL    &dkkL;;!!A%<T[[PTPZPZ[DO&jDOr!   NrS   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)rS   r   r   r0   r   r7   )logitsr   )rd   r5  r  r4  rB  r   r   )	r   rj   rS   r   r   outputsr8  rL  outputs	            r   r   /FlaxRegNetForImageClassificationModule.__call__  s     &1%<k$++B]B]++'!5#	  
 2=--'!*q!Qz!:;Y,FM7vUjUjkkr!   )rB  r  )NTNN)r"   r#   r$   r%   r
   r[   r]   r^   r5   rP   r`   r   r)   r   r!   r   rH  rH    sD    {{E399") "!l l lr!   rH  z
    RegNet 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) FlaxRegNetForImageClassificationi  r   N)r"   r#   r$   r%   rH  r  r)   r   r!   r   rQ  rQ    s	     :Lr!   rQ  aa  
    Returns:

    Example:

    ```python
    >>> from transformers import AutoImageProcessor, FlaxRegNetForImageClassification
    >>> 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/regnet-y-040")
    >>> model = FlaxRegNetForImageClassification.from_pretrained("facebook/regnet-y-040")

    >>> 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()])
    ```
)rQ  r;  r  );	functoolsr   typingr   
flax.linenlinenr'   r(  	jax.numpynumpyr]   flax.core.frozen_dictr   r   r   flax.traverse_utilr   r	   transformersr
   "transformers.modeling_flax_outputsr   r   r   r    transformers.modeling_flax_utilsr   r   r   r   transformers.utilsr   r   REGNET_START_DOCSTRINGr+  r'  r   r+   rb   rs   r|   r   r   r   r   r   r   r   r   r   r  r/  r;  FLAX_VISION_MODEL_DOCSTRINGr>  rH  rQ  FLAX_VISION_CLASSIF_DOCSTRING__all__r   r!   r   <module>rb     s  "    
  > > ; %  ! F ryy ")) :299 0 6")) <		 0% %P%ryy %P, ,^&ryy &R,bii ,`;bii ;6'+		 '+V
		 
>I
 3 I
Z4
ryy 4
n U$/ $	$ , *E F  ."RYY "$lRYY $lN  :'@ ::! 6 9;X Y  $8 _r!   