Ë
    T^(h[o  ã                   óT  — d dl mZ d dlmZmZ d dlmZ d dlZd dl	m
Z d dlmZmZmZ d dlmZmZ d dlmZ d dlmZmZmZmZ d dlmZmZmZmZ d d	lm Z m!Z! d
Z"dZ# G d„ dejH                  «      Z% G d„ dejH                  «      Z& G d„ dejH                  «      Z' G d„ dejH                  «      Z( G d„ dejH                  «      Z) G d„ dejH                  «      Z* G d„ dejH                  «      Z+ G d„ dejH                  «      Z, G d„ dejH                  «      Z- G d„ dejH                  «      Z. G d „ d!ejH                  «      Z/ G d"„ d#ejH                  «      Z0 G d$„ d%ejH                  «      Z1 G d&„ d'ejH                  «      Z2 G d(„ d)e«      Z3 G d*„ d+ejH                  «      Z4 e d,e"«       G d-„ d.e3«      «       Z5d/Z6 ee5e6«        ee5ee¬0«        G d1„ d2ejH                  «      Z7 G d3„ d4ejH                  «      Z8 e d5e"«       G d6„ d7e3«      «       Z9d8Z: ee9e:«        ee9ee¬0«       g d9¢Z;y):é    )Úpartial)ÚOptionalÚTupleN)Ú
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                   ó4   — e Zd ZdZej
                  d„ «       Zy)ÚIdentityzIdentity function.c                 ó   — |S ©N© )ÚselfÚxÚkwargss      úm/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/regnet/modeling_flax_regnet.pyÚ__call__zIdentity.__call__b   s   € àˆó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnnÚcompactr   r   r    r   r   r   _   s   „ Ùà‡Z�Zñó ñr    r   c                   óÐ   — e Zd ZU eed<   dZeed<   dZeed<   dZeed<   dZe	e
   ed<   ej                  Zej                  ed	<   d
„ Zddej                  dedej                  fd„Zy)ÚFlaxRegNetConvLayerÚout_channelsé   Úkernel_sizeé   ÚstrideÚgroupsÚreluÚ
activationÚdtypec                 óÔ  — t        j                  | j                  | j                  | j                  f| j                  | j                  dz  | j
                  dt         j                  j                  ddd¬«      | j                  ¬«      | _	        t        j                  dd	| j                  ¬
«      | _        | j                  �t        | j                     | _        y t        «       | _        y )Né   Fç       @Úfan_outÚtruncated_normal©ÚmodeÚdistribution)r+   ÚstridesÚpaddingÚfeature_group_countÚuse_biasÚkernel_initr1   çÍÌÌÌÌÌì?çñhãˆµøä>©ÚmomentumÚepsilonr1   )r%   ÚConvr)   r+   r-   r.   ÚinitializersÚvariance_scalingr1   ÚconvolutionÚ	BatchNormÚnormalizationr0   r   r   Úactivation_func©r   s    r   ÚsetupzFlaxRegNetConvLayer.setupo   s°   € ÜŸ7™7Ø×ÑØ×)Ñ)¨4×+;Ñ+;Ð<Ø—K‘KØ×$Ñ$¨Ñ)Ø $§¡ØÜŸ™×8Ñ8¸À9Ð[mÐ8ÓnØ—*‘*ô	
ˆÔô  Ÿ\™\°3ÀÈTÏZÉZÔXˆÔØ:>¿/¹/Ð:Uœv d§o¡oÑ6ˆÕÔ[cÓ[eˆÕr    Úhidden_stateÚdeterministicÚreturnc                 óp   — | j                  |«      }| j                  ||¬«      }| j                  |«      }|S ©N)Úuse_running_average)rG   rI   rJ   )r   rM   rN   s      r   r   zFlaxRegNetConvLayer.__call__}   s=   € Ø×'Ñ'¨Ó5ˆØ×)Ñ)¨,ÈMÐ)ÓZˆØ×+Ñ+¨LÓ9ˆØÐr    N©T)r!   r"   r#   ÚintÚ__annotations__r+   r-   r.   r0   r   ÚstrÚjnpÚfloat32r1   rL   ÚndarrayÚboolr   r   r    r   r(   r(   g   so   … ØÓØ€K�ÓØ€FˆCƒOØ€FˆCƒOØ &€J�˜‘Ó&Ø—{‘{€Eˆ3�9‰9Ó"òfñ S§[¡[ð Àð ÐQT×Q\ÑQ\ô r    r(   c                   ó’   — e Zd ZU eed<   ej                  Zej                  ed<   d„ Zd	dej                  de
dej                  fd„Zy)
ÚFlaxRegNetEmbeddingsÚconfigr1   c                 ó’   — t        | j                  j                  dd| j                  j                  | j                  ¬«      | _        y )Nr*   r3   )r+   r-   r0   r1   )r(   r]   Úembedding_sizeÚ
hidden_actr1   ÚembedderrK   s    r   rL   zFlaxRegNetEmbeddings.setupˆ   s5   € Ü+Ø�K‰K×&Ñ&ØØØ—{‘{×-Ñ-Ø—*‘*ô
ˆ�r    Úpixel_valuesrN   rO   c                 ó’   — |j                   d   }|| j                  j                  k7  rt        d«      ‚| j	                  ||¬«      }|S )NéÿÿÿÿzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.©rN   )Úshaper]   Únum_channelsÚ
ValueErrorra   )r   rb   rN   rg   rM   s        r   r   zFlaxRegNetEmbeddings.__call__‘   sN   € Ø#×)Ñ)¨"Ñ-ˆØ˜4Ÿ;™;×3Ñ3Ò3ÜØwóð ð —}‘} \À�}ÓOˆØÐr    NrS   )r!   r"   r#   r   rU   rW   rX   r1   rL   rY   rZ   r   r   r    r   r\   r\   „   sD   … ØÓØ—{‘{€Eˆ3�9‰9Ó"ò
ñ S§[¡[ð Àð ÐQT×Q\ÑQ\ô r    r\   c                   ó¤   — e Zd ZU dZeed<   dZeed<   ej                  Z	ej                  ed<   d„ Z
ddej                  ded	ej                  fd
„Zy)ÚFlaxRegNetShortCutzž
    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)   r3   r-   r1   c                 ó  — t        j                  | j                  d| j                  dt         j                  j                  ddd¬«      | j                  ¬«      | _        t        j                  dd	| j                  ¬
«      | _	        y )N©r,   r,   Fr4   r5   r6   r7   )r+   r:   r=   r>   r1   r?   r@   rA   )
r%   rD   r)   r-   rE   rF   r1   rG   rH   rI   rK   s    r   rL   zFlaxRegNetShortCut.setup¦   se   € ÜŸ7™7Ø×ÑØØ—K‘KØÜŸ™×8Ñ8¸À9Ð[mÐ8ÓnØ—*‘*ô
ˆÔô  Ÿ\™\°3ÀÈTÏZÉZÔXˆÕr    r   rN   rO   c                 óN   — | j                  |«      }| j                  ||¬«      }|S rQ   )rG   rI   )r   r   rN   rM   s       r   r   zFlaxRegNetShortCut.__call__±   s-   € Ø×'Ñ'¨Ó*ˆØ×)Ñ)¨,ÈMÐ)ÓZˆØÐr    NrS   )r!   r"   r#   r$   rT   rU   r-   rW   rX   r1   rL   rY   rZ   r   r   r    r   rj   rj   œ   sR   … ñð
 ÓØ€FˆCƒOØ—{‘{€Eˆ3�9‰9Ó"ò	Yñ˜#Ÿ+™+ð °dð ÀcÇkÁkô r    rj   c                   ó–   — e Zd ZU eed<   eed<   ej                  Zej                  ed<   d„ Zdej                  dej                  fd„Z
y)	ÚFlaxRegNetSELayerCollectionÚin_channelsÚreduced_channelsr1   c           	      óP  — t        j                  | j                  dt         j                  j	                  ddd¬«      | j
                  d¬«      | _        t        j                  | j                  dt         j                  j	                  ddd¬«      | j
                  d¬«      | _        y )	Nrl   r4   r5   r6   r7   Ú0)r+   r>   r1   ÚnameÚ2)	r%   rD   rq   rE   rF   r1   Úconv_1rp   Úconv_2rK   s    r   rL   z!FlaxRegNetSELayerCollection.setup¼   s„   € Ü—g‘gØ×!Ñ!ØÜŸ™×8Ñ8¸À9Ð[mÐ8ÓnØ—*‘*Øô
ˆŒô —g‘gØ×ÑØÜŸ™×8Ñ8¸À9Ð[mÐ8ÓnØ—*‘*Øô
ˆ�r    rM   rO   c                 óž   — | j                  |«      }t        j                  |«      }| j                  |«      }t        j                  |«      }|S r   )rv   r%   r/   rw   Úsigmoid)r   rM   Ú	attentions      r   r   z$FlaxRegNetSELayerCollection.__call__Ì   s@   € Ø—{‘{ <Ó0ˆÜ—w‘w˜|Ó,ˆØ—{‘{ <Ó0ˆÜ—J‘J˜|Ó,ˆ	àÐr    N)r!   r"   r#   rT   rU   rW   rX   r1   rL   rY   r   r   r    r   ro   ro   ·   s@   … ØÓØÓØ—{‘{€Eˆ3�9‰9Ó"ò
ð  S§[¡[ð °S·[±[ô r    ro   c                   óš   — e Zd ZU dZeed<   eed<   ej                  Zej                  ed<   d„ Z	dej                  dej                  fd„Zy	)
ÚFlaxRegNetSELayerz|
    Squeeze and Excitation layer (SE) proposed in [Squeeze-and-Excitation Networks](https://arxiv.org/abs/1709.01507).
    rp   rq   r1   c                 ó¦   — t        t        j                  d¬«      | _        t	        | j
                  | j                  | j                  ¬«      | _        y )N©©r   r   r   ©r;   ©r1   )	r   r%   Úavg_poolÚpoolerro   rp   rq   r1   rz   rK   s    r   rL   zFlaxRegNetSELayer.setupÞ   s8   € ÜœbŸk™kÐ3CÔDˆŒÜ4°T×5EÑ5EÀt×G\ÑG\Ðdh×dnÑdnÔoˆ�r    rM   rO   c                 óÊ   — | j                  ||j                  d   |j                  d   f|j                  d   |j                  d   f¬«      }| j                  |«      }||z  }|S )Nr,   r3   ©Úwindow_shaper:   )rƒ   rf   rz   )r   rM   Úpooledrz   s       r   r   zFlaxRegNetSELayer.__call__â   st   € Ø—‘ØØ&×,Ñ,¨QÑ/°×1CÑ1CÀAÑ1FÐGØ!×'Ñ'¨Ñ*¨L×,>Ñ,>¸qÑ,AÐBð ó 
ˆð
 —N‘N 6Ó*ˆ	Ø# iÑ/ˆØÐr    N)r!   r"   r#   r$   rT   rU   rW   rX   r1   rL   rY   r   r   r    r   r|   r|   Õ   sH   … ñð ÓØÓØ—{‘{€Eˆ3�9‰9Ó"òpð S§[¡[ð °S·[±[ô r    r|   c                   óª   — e Zd ZU eed<   eed<   dZeed<   ej                  Z	ej                  ed<   d„ Z
ddej                  ded	ej                  fd
„Zy)ÚFlaxRegNetXLayerCollectionr]   r)   r,   r-   r1   c           	      ó¤  — t        d| j                  | j                  j                  z  «      }t	        | j                  d| j                  j
                  | j                  d¬«      t	        | j                  | j                  || j                  j
                  | j                  d¬«      t	        | j                  dd | j                  d¬«      g| _        y )Nr,   rs   ©r+   r0   r1   rt   Ú1©r-   r.   r0   r1   rt   ru   )	Úmaxr)   r]   Úgroups_widthr(   r`   r1   r-   Úlayer©r   r.   s     r   rL   z FlaxRegNetXLayerCollection.setupó   s°   € Ü�Q˜×)Ñ)¨T¯[©[×-EÑ-EÑEÓFˆô  Ø×!Ñ!ØØŸ;™;×1Ñ1Ø—j‘jØôô  Ø×!Ñ!Ø—{‘{ØØŸ;™;×1Ñ1Ø—j‘jØôô  Ø×!Ñ!ØØØ—j‘jØôð!
ˆ�
r    rM   rN   rO   c                 ó<   — | j                   D ]  } |||¬«      }Œ |S ©Nre   ©r�   )r   rM   rN   r�   s       r   r   z#FlaxRegNetXLayerCollection.__call__  s)   € Ø—Z‘Zò 	LˆEÙ  ¸]ÔK‰Lð	LàÐr    NrS   )r!   r"   r#   r   rU   rT   r-   rW   rX   r1   rL   rY   rZ   r   r   r    r   r‰   r‰   í   sS   … ØÓØÓØ€FˆCƒOØ—{‘{€Eˆ3�9‰9Ó"ò
ñ8 S§[¡[ð Àð ÐQT×Q\ÑQ\ô r    r‰   c                   ó¸   — e Zd ZU dZeed<   eed<   eed<   dZeed<   ej                  Z
ej                  ed<   d„ Zdd	ej                  d
edej                  fd„Zy)ÚFlaxRegNetXLayerzt
    RegNet's layer composed by three `3x3` convolutions, same as a ResNet bottleneck layer with reduction = 1.
    r]   rp   r)   r,   r-   r1   c                 ó¤  — | j                   | j                  k7  xs | j                  dk7  }|r,t        | j                  | j                  | j                  ¬«      n	t        «       | _        t        | j                  | j                   | j                  | j                  | j                  ¬«      | _	        t        | j                  j                     | _        y ©Nr,   )r-   r1   )rp   r)   r-   r1   )rp   r)   r-   rj   r1   r   Úshortcutr‰   r]   r�   r   r`   rJ   ©r   Úshould_apply_shortcuts     r   rL   zFlaxRegNetXLayer.setup   sª   € Ø $× 0Ñ 0°D×4EÑ4EÑ EÒ YÈÏÉÐXYÑIYÐñ %ô Ø×!Ñ!Ø—{‘{Ø—j‘jõô “ð 	Œô 0Ø�K‰KØ×(Ñ(Ø×*Ñ*Ø—;‘;Ø—*‘*ô
ˆŒ
ô  & d§k¡k×&<Ñ&<Ñ=ˆÕr    rM   rN   rO   c                 ó~   — |}| j                  |«      }| j                  ||¬«      }||z  }| j                  |«      }|S r“   ©r�   r™   rJ   ©r   rM   rN   Úresiduals       r   r   zFlaxRegNetXLayer.__call__4  óG   € ØˆØ—z‘z ,Ó/ˆØ—=‘= ¸�=ÓGˆØ˜Ñ ˆØ×+Ñ+¨LÓ9ˆØÐr    NrS   ©r!   r"   r#   r$   r   rU   rT   r-   rW   rX   r1   rL   rY   rZ   r   r   r    r   r–   r–     s`   … ñð ÓØÓØÓØ€FˆCƒOØ—{‘{€Eˆ3�9‰9Ó"ò>ñ( S§[¡[ð Àð ÐQT×Q\ÑQ\ô r    r–   c                   ó®   — e Zd ZU eed<   eed<   eed<   dZeed<   ej                  Z	ej                  ed<   d„ Z
dej                  d	ej                  fd
„Zy)ÚFlaxRegNetYLayerCollectionr]   rp   r)   r,   r-   r1   c                 ó&  — t        d| j                  | j                  j                  z  «      }t	        | j                  d| j                  j
                  | j                  d¬«      t	        | j                  | j                  || j                  j
                  | j                  d¬«      t        | j                  t        t        | j                  dz  «      «      | j                  d¬«      t	        | j                  dd | j                  d	¬«      g| _        y )
Nr,   rs   r‹   rŒ   r�   é   ru   )rq   r1   rt   Ú3)rŽ   r)   r]   r�   r(   r`   r1   r-   r|   rT   Úroundrp   r�   r‘   s     r   rL   z FlaxRegNetYLayerCollection.setupD  så   € Ü�Q˜×)Ñ)¨T¯[©[×-EÑ-EÑEÓFˆô  Ø×!Ñ!ØØŸ;™;×1Ñ1Ø—j‘jØôô  Ø×!Ñ!Ø—{‘{ØØŸ;™;×1Ñ1Ø—j‘jØôô Ø×!Ñ!Ü!$¤U¨4×+;Ñ+;¸aÑ+?Ó%@Ó!AØ—j‘jØô	ô  Ø×!Ñ!ØØØ—j‘jØôð-
ˆ�
r    rM   rO   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r   r”   )r   rM   r�   s      r   r   z#FlaxRegNetYLayerCollection.__call__f  s%   € Ø—Z‘Zò 	/ˆEÙ  Ó.‰Lð	/àÐr    N)r!   r"   r#   r   rU   rT   r-   rW   rX   r1   rL   rY   r   r   r    r   r£   r£   =  sP   … ØÓØÓØÓØ€FˆCƒOØ—{‘{€Eˆ3�9‰9Ó"ò 
ðD S§[¡[ð °S·[±[ô r    r£   c                   ó¸   — e Zd ZU dZeed<   eed<   eed<   dZeed<   ej                  Z
ej                  ed<   d„ Zdd	ej                  d
edej                  fd„Zy)ÚFlaxRegNetYLayerzC
    RegNet's Y layer: an X layer with Squeeze and Excitation.
    r]   rp   r)   r,   r-   r1   c                 ó¤  — | j                   | j                  k7  xs | j                  dk7  }|r,t        | j                  | j                  | j                  ¬«      n	t        «       | _        t        | j                  | j                   | j                  | j                  | j                  ¬«      | _	        t        | j                  j                     | _        y r˜   )rp   r)   r-   rj   r1   r   r™   r£   r]   r�   r   r`   rJ   rš   s     r   rL   zFlaxRegNetYLayer.setupw  sª   € Ø $× 0Ñ 0°D×4EÑ4EÑ EÒ YÈÏÉÐXYÑIYÐñ %ô Ø×!Ñ!Ø—{‘{Ø—j‘jõô “ð 	Œô 0Ø�K‰KØ×(Ñ(Ø×*Ñ*Ø—;‘;Ø—*‘*ô
ˆŒ
ô  & d§k¡k×&<Ñ&<Ñ=ˆÕr    rM   rN   rO   c                 ó~   — |}| j                  |«      }| j                  ||¬«      }||z  }| j                  |«      }|S r“   r�   rž   s       r   r   zFlaxRegNetYLayer.__call__Œ  r    r    NrS   r¡   r   r    r   rª   rª   l  s`   … ñð ÓØÓØÓØ€FˆCƒOØ—{‘{€Eˆ3�9‰9Ó"ò>ñ* S§[¡[ð Àð ÐQT×Q\ÑQ\ô r    rª   c                   óÆ   — e Zd ZU dZeed<   eed<   eed<   dZeed<   dZeed<   e	j                  Ze	j                  ed<   d	„ Zdd
e	j                  dede	j                  fd„Zy)ÚFlaxRegNetStageLayersCollectionú4
    A RegNet stage composed by stacked layers.
    r]   rp   r)   r3   r-   Údepthr1   c                 ó¸  — | j                   j                  dk(  rt        nt        } || j                   | j                  | j
                  | j                  | j                  d¬«      g}t        | j                  dz
  «      D ]R  }|j                   || j                   | j
                  | j
                  | j                  t        |dz   «      ¬«      «       ŒT || _        y )Nr   rs   )r-   r1   rt   r,   ©r1   rt   )r]   Ú
layer_typer–   rª   rp   r)   r-   r1   Úranger°   ÚappendrV   Úlayers)r   r�   r¶   Úis       r   rL   z%FlaxRegNetStageLayersCollection.setup¡  s½   € Ø$(§K¡K×$:Ñ$:¸cÒ$AÕ ÔGWˆñ Ø—‘Ø× Ñ Ø×!Ñ!Ø—{‘{Ø—j‘jØôð

ˆô �t—z‘z A‘~Ó&ò 		ˆAØ�M‰MÙØ—K‘KØ×%Ñ%Ø×%Ñ%ØŸ*™*Ü˜Q ™U›ôõð		ð ˆ�r    r   rN   rO   c                 ó@   — |}| j                   D ]  } |||¬«      }Œ |S r“   ©r¶   )r   r   rN   rM   r�   s        r   r   z(FlaxRegNetStageLayersCollection.__call__½  s.   € ØˆØ—[‘[ò 	LˆEÙ  ¸]ÔK‰Lð	LàÐr    NrS   ©r!   r"   r#   r$   r   rU   rT   r-   r°   rW   rX   r1   rL   rY   rZ   r   r   r    r   r®   r®   •  sf   … ñð ÓØÓØÓØ€FˆCƒOØ€Eˆ3ƒNØ—{‘{€Eˆ3�9‰9Ó"òñ8˜#Ÿ+™+ð °dð ÀcÇkÁkô r    r®   c                   óÆ   — e Zd ZU dZeed<   eed<   eed<   dZeed<   dZeed<   e	j                  Ze	j                  ed<   d	„ Zdd
e	j                  dede	j                  fd„Zy)ÚFlaxRegNetStager¯   r]   rp   r)   r3   r-   r°   r1   c                 ó¨   — t        | j                  | j                  | j                  | j                  | j
                  | j                  ¬«      | _        y )N)rp   r)   r-   r°   r1   )r®   r]   rp   r)   r-   r°   r1   r¶   rK   s    r   rL   zFlaxRegNetStage.setupÑ  s<   € Ü5Ø�K‰KØ×(Ñ(Ø×*Ñ*Ø—;‘;Ø—*‘*Ø—*‘*ô
ˆ�r    r   rN   rO   c                 ó(   — | j                  ||¬«      S r“   r¹   )r   r   rN   s      r   r   zFlaxRegNetStage.__call__Û  s   € Ø�{‰{˜1¨Mˆ{Ó:Ð:r    NrS   rº   r   r    r   r¼   r¼   Å  sf   … ñð ÓØÓØÓØ€FˆCƒOØ€Eˆ3ƒNØ—{‘{€Eˆ3�9‰9Ó"ò
ñ;˜#Ÿ+™+ð ;°dð ;ÀcÇkÁkô ;r    r¼   c            	       ó†   — e Zd ZU eed<   ej                  Zej                  ed<   d„ Z	 	 d
dej                  de
de
defd„Zy	)ÚFlaxRegNetStageCollectionr]   r1   c                 óv  — t        | j                  j                  | j                  j                  dd  «      }t        | j                  | j                  j                  | j                  j                  d   | j                  j
                  rdnd| j                  j                  d   | j                  d¬«      g}t        t        || j                  j                  dd  «      «      D ]K  \  }\  \  }}}|j                  t        | j                  |||| j                  t        |dz   «      ¬«      «       ŒM || _        y )Nr,   r   r3   rs   )r-   r°   r1   rt   )r°   r1   rt   )Úzipr]   Úhidden_sizesr¼   r_   Údownsample_in_first_stageÚdepthsr1   Ú	enumeraterµ   rV   Ústages)r   Úin_out_channelsrÇ   r·   rp   r)   r°   s          r   rL   zFlaxRegNetStageCollection.setupä  s  € Ü˜dŸk™k×6Ñ6¸¿¹×8PÑ8PÐQRÐQSÐ8TÓUˆäØ—‘Ø—‘×*Ñ*Ø—‘×(Ñ(¨Ñ+Ø ŸK™K×AÒA‘qÀqØ—k‘k×(Ñ(¨Ñ+Ø—j‘jØôð

ˆô 8AÄÀ_ÐVZ×VaÑVa×VhÑVhÐijÐikÐVlÓAmÓ7nò 	Ñ3ˆAÑ3Ñ+�˜l¨UØ�M‰MÜ §¡¨[¸,ÈeÐ[_×[eÑ[eÔloÐpqÐtuÑpuÓlvÔwõð	ð
 ˆ�r    rM   Úoutput_hidden_statesrN   rO   c                 ó€   — |rdnd }| j                   D ]&  }|r||j                  dddd«      fz   } |||¬«      }Œ( ||fS )Nr   r   r*   r,   r3   re   )rÇ   Ú	transpose)r   rM   rÉ   rN   Úhidden_statesÚstage_modules         r   r   z"FlaxRegNetStageCollection.__call__ù  s]   € ñ 3™¸ˆà ŸK™Kò 	SˆLÙ#Ø -°×1GÑ1GÈÈ1ÈaÐQRÓ1SÐ0UÑ U�á'¨ÀMÔR‰Lð		Sð ˜]Ð*Ð*r    N)FT©r!   r"   r#   r   rU   rW   rX   r1   rL   rY   rZ   r   r   r   r    r   rÀ   rÀ   à  sV   … ØÓØ—{‘{€Eˆ3�9‰9Ó"òð0 &+Ø"ñ	+à—k‘kð+ð #ð+ð ð	+ð
 
,ô+r    rÀ   c                   óŒ   — e Zd ZU eed<   ej                  Zej                  ed<   d„ Z	 	 	 ddej                  de
de
de
def
d	„Zy
)ÚFlaxRegNetEncoderr]   r1   c                 óP   — t        | j                  | j                  ¬«      | _        y )Nr�   )rÀ   r]   r1   rÇ   rK   s    r   rL   zFlaxRegNetEncoder.setup  s   € Ü/°·±À4Ç:Á:ÔNˆ�r    rM   rÉ   Úreturn_dictrN   rO   c                 óª   — | j                  |||¬«      \  }}|r||j                  dddd«      fz   }|st        d„ ||fD «       «      S t        ||¬«      S )N)rÉ   rN   r   r*   r,   r3   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr   r   )Ú.0Úvs     r   ú	<genexpr>z-FlaxRegNetEncoder.__call__.<locals>.<genexpr>!  s   è ø€ ÒS˜qÀQÁ]œÑSùs   ‚Š)Úlast_hidden_staterÌ   )rÇ   rË   Útupler   )r   rM   rÉ   rÒ   rN   rÌ   s         r   r   zFlaxRegNetEncoder.__call__  st   € ð '+§k¡kØÐ/CÐS`ð '2ó '
Ñ#ˆ�mñ  Ø)¨\×-CÑ-CÀAÀqÈ!ÈQÓ-OÐ,QÑQˆMáÜÑS \°=Ð$AÔSÓSÐSä1Ø*Ø'ô
ð 	
r    N)FTTrÎ   r   r    r   rÐ   rÐ     sd   … ØÓØ—{‘{€Eˆ3�9‰9Ó"òOð &+Ø Ø"ñ
à—k‘kð
ð #ð
ð ð	
ð
 ð
ð 
,ô
r    rÐ   c                   ó  ‡ — e Zd ZU dZeZdZdZdZe	j                  ed<   ddej                  dfd	ed
edej                  defˆ fd„Zddej&                  j(                  dededefd„Z ee«      	 	 	 	 ddededee   dee   fd„«       Zˆ xZS )ÚFlaxRegNetPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úregnetrb   NÚmodule_class)r,   éà   rÞ   r*   r   Tr]   Úseedr1   Ú_do_initc                 ó¦   •—  | j                   d||dœ|¤Ž}|€$d|j                  |j                  |j                  f}t        ‰| �  ||||||¬«       y )N©r]   r1   r,   )Úinput_shaperß   r1   rà   r   )rÝ   Ú
image_sizerg   ÚsuperÚ__init__)	r   r]   rã   rß   r1   rà   r   ÚmoduleÚ	__class__s	           €r   ræ   z"FlaxRegNetPreTrainedModel.__init__5  sc   ø€ ð #�×"Ñ"ÐH¨&¸ÑHÀÑHˆØÐØ˜f×/Ñ/°×1BÑ1BÀF×DWÑDWÐXˆKÜ‰Ñ˜ °[ÀtÐSXÐckÐÕlr    Úrngrã   ÚparamsrO   c                 óX  — t        j                  || j                  ¬«      }d|i}| j                  j	                  ||d¬«      }|�dt        t        |«      «      }t        t        |«      «      }| j                  D ]
  }||   ||<   Œ t        «       | _        t        t        |«      «      S |S )Nr�   rê   F)rÒ   )rW   Úzerosr1   rç   Úinitr	   r   Ú_missing_keysÚsetr   r
   )r   ré   rã   rê   rb   ÚrngsÚrandom_paramsÚmissing_keys           r   Úinit_weightsz&FlaxRegNetPreTrainedModel.init_weightsC  s¤   € ä—y‘y °D·J±JÔ?ˆà˜#ˆˆàŸ™×(Ñ(¨¨|ÈÐ(ÓOˆàÐÜ(¬°-Ó)@ÓAˆMÜ!¤(¨6Ó"2Ó3ˆFØ#×1Ñ1ò A�Ø&3°KÑ&@��{Ò#ðAä!$£ˆDÔÜœ.¨Ó0Ó1Ð1à Ð r    ÚtrainrÉ   rÒ   c           	      ó�  — |�|n| j                   j                  }|�|n| j                   j                  }t        j                  |d«      }i }| j
                  j                  |�|d   n| j                  d   |�|d   n| j                  d   dœt        j                  |t        j                  ¬«      | ||||rdg¬«      S d¬«      S )N)r   r3   r*   r,   rê   Úbatch_stats)rê   rö   r�   F)rð   Úmutable)
r]   rÉ   rÒ   rW   rË   rç   Úapplyrê   ÚarrayrX   )r   rb   rê   rô   rÉ   rÒ   rð   s          r   r   z"FlaxRegNetPreTrainedModel.__call__U  sà   € ð %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆä—}‘} \°<Ó@ˆð ˆà�{‰{× Ñ à.4Ð.@˜& Ò*ÀdÇkÁkÐRZÑF[Ø8>Ð8J˜v mÒ4ÐPT×P[ÑP[Ð\iÑPjñô �I‰I�l¬#¯+©+Ô6ØˆIØ ØØÙ',�]�Oð !ó 
ð 	
ð 38ð !ó 
ð 	
r    r   )NFNN)r!   r"   r#   r$   r   Úconfig_classÚbase_model_prefixÚmain_input_namerÝ   r%   ÚModulerU   rW   rX   rT   r1   rZ   ræ   ÚjaxÚrandomÚPRNGKeyr   r   ró   r   ÚREGNET_INPUTS_DOCSTRINGÚdictr   r   Ú__classcell__)rè   s   @r   rÛ   rÛ   *  sô   ø… ñð
  €LØ ÐØ$€OØ"€L�"—)‘)Ó"ð
 %ØØŸ;™;Øñmàðmð ð	mð
 �y‰yðmð õmñ! §
¡
× 2Ñ 2ð !Àð !ÐPZð !Ðfpó !ñ$ +Ð+BÓCð ØØ/3Ø&*ñ
ð ð
ð ð	
ð
 ' t™nð
ð ˜d‘^ò
ó Dô
r    rÛ   c            	       ót   — e Zd ZU eed<   ej                  Zej                  ed<   d„ Z	 	 	 d
de	de	de	de
fd„Zy	)ÚFlaxRegNetModuler]   r1   c                 óÜ   — t        | j                  | j                  ¬«      | _        t	        | j                  | j                  ¬«      | _        t        t        j                  d¬«      | _	        y )Nr�   r~   r€   )
r\   r]   r1   ra   rÐ   Úencoderr   r%   r‚   rƒ   rK   s    r   rL   zFlaxRegNetModule.setup{  sF   € Ü,¨T¯[©[ÀÇ
Á
ÔKˆŒÜ(¨¯©¸D¿J¹JÔGˆŒô Ü�K‰KØ$ô
ˆ�r    rN   rÉ   rÒ   rO   c                 óð  — |�|n| j                   j                  }|�|n| j                   j                  }| j                  ||¬«      }| j	                  ||||¬«      }|d   }| j                  ||j                  d   |j                  d   f|j                  d   |j                  d   f¬«      j                  dddd«      }|j                  dddd«      }|s
||f|dd  z   S t        |||j                  ¬«      S )	Nre   )rÉ   rÒ   rN   r   r,   r3   r…   r*   )rØ   Úpooler_outputrÌ   )
r]   rÉ   Úuse_return_dictra   r  rƒ   rf   rË   r   rÌ   )	r   rb   rN   rÉ   rÒ   Úembedding_outputÚencoder_outputsrØ   Úpooled_outputs	            r   r   zFlaxRegNetModule.__call__…  s-  € ð %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàŸ=™=¨À]˜=ÓSÐàŸ,™,ØØ!5Ø#Ø'ð	 'ó 
ˆð ,¨AÑ.ÐàŸ™ØØ+×1Ñ1°!Ñ4Ð6G×6MÑ6MÈaÑ6PÐQØ&×,Ñ,¨QÑ/Ð1B×1HÑ1HÈÑ1KÐLð $ó 
÷ ‰)�A�q˜!˜QÓ
ð	 	ð .×7Ñ7¸¸1¸aÀÓCÐáØ% }Ð5¸ÈÈÐ8KÑKÐKä;Ø/Ø'Ø)×7Ñ7ô
ð 	
r    N)TFT)r!   r"   r#   r   rU   rW   rX   r1   rL   rZ   r   r   r   r    r   r  r  w  sW   … ØÓØ—{‘{€Eˆ3�9‰9Ó"ò
ð #Ø%*Ø ñ&
ð ð&
ð #ð	&
ð
 ð&
ð 
6ô&
r    r  zOThe bare RegNet model outputting raw features without any specific head on top.c                   ó   — e Zd ZeZy)ÚFlaxRegNetModelN)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                   óŒ   — e Zd ZU eed<   ej                  Zej                  ed<   d„ Zdej                  dej                  fd„Z
y)ÚFlaxRegNetClassifierCollectionr]   r1   c                 óz   — t        j                  | j                  j                  | j                  d¬«      | _        y )NrŒ   r²   )r%   ÚDenser]   Ú
num_labelsr1   Ú
classifierrK   s    r   rL   z$FlaxRegNetClassifierCollection.setupÙ  s%   € ÜŸ(™( 4§;¡;×#9Ñ#9ÀÇÁÐRUÔVˆ�r    r   rO   c                 ó$   — | j                  |«      S r   )r  )r   r   s     r   r   z'FlaxRegNetClassifierCollection.__call__Ü  s   € Ø�‰˜qÓ!Ð!r    N)r!   r"   r#   r   rU   rW   rX   r1   rL   rY   r   r   r    r   r  r  Õ  s;   … ØÓØ—{‘{€Eˆ3�9‰9Ó"òWð"˜#Ÿ+™+ð "¨#¯+©+ô "r    r  c                   ój   — e Zd ZU eed<   ej                  Zej                  ed<   d„ Z	 	 	 	 dde	fd„Z
y)Ú&FlaxRegNetForImageClassificationModuler]   r1   c                 óî   — t        | j                  | j                  ¬«      | _        | j                  j                  dkD  r't        | j                  | j                  ¬«      | _        y t        «       | _        y )Nrâ   r   r�   )r  r]   r1   rÜ   r  r  r  r   rK   s    r   rL   z,FlaxRegNetForImageClassificationModule.setupå  sL   € Ü&¨d¯k©kÀÇÁÔLˆŒà�;‰;×!Ñ! AÒ%Ü<¸T¿[¹[ÐPT×PZÑPZÔ[ˆD�Oä&›jˆD�Or    NrN   c                 ó  — |�|n| j                   j                  }| j                  ||||¬«      }|r|j                  n|d   }| j	                  |d d …d d …ddf   «      }|s|f|dd  z   }|S t        ||j                  ¬«      S )N)rN   rÉ   rÒ   r,   r   r3   )ÚlogitsrÌ   )r]   r
  rÜ   r	  r  r   rÌ   )	r   rb   rN   rÉ   rÒ   Úoutputsr  r  Úoutputs	            r   r   z/FlaxRegNetForImageClassificationModule.__call__í  s—   € ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—+‘+ØØ'Ø!5Ø#ð	 ó 
ˆñ 2=˜×-Ò-À'È!Á*ˆà—‘ ªq²!°Q¸¨zÑ!:Ó;ˆáØ�Y ¨¨ Ñ,ˆFØˆMä7¸vÐU\×UjÑUjÔkÐkr    )NTNN)r!   r"   r#   r   rU   rW   rX   r1   rL   rZ   r   r   r    r   r  r  á  s>   … ØÓØ—{‘{€Eˆ3�9‰9Ó"ò)ð Ø"Ø!Øñlð ôlr    r  z†
    RegNet Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    c                   ó   — e Zd ZeZy)Ú FlaxRegNetForImageClassificationN)r!   r"   r#   r  rÝ   r   r    r   r   r     s	   „ ð :�Lr    r   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()])
    ```
)r   r  rÛ   )<Ú	functoolsr   Útypingr   r   Ú
flax.linenÚlinenr%   rþ   Ú	jax.numpyÚnumpyrW   Ú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(   r\   rj   ro   r|   r‰   r–   r£   rª   r®   r¼   rÀ   rÐ   rÛ   r  r  ÚFLAX_VISION_MODEL_DOCSTRINGr  r  r   ÚFLAX_VISION_CLASSIF_DOCSTRINGÚ__all__r   r    r   ú<module>r1     s  ðõ" ß "å Û 
Ý ß >Ñ >ß ;å %÷ó ÷ó ÷ð!Ð ðFÐ ôˆr�y‰yô ô˜"Ÿ)™)ô ô:˜2Ÿ9™9ô ô0˜Ÿ™ô ô6 "§)¡)ô ô<˜Ÿ	™	ô ô0% §¡ô %ôP%�r—y‘yô %ôP, §¡ô ,ô^&�r—y‘yô &ôR, b§i¡iô ,ô`;�b—i‘iô ;ô6'+ §	¡	ô '+ôV
˜Ÿ	™	ô 
ô>I
Ð 3ô I
ôZ4
�r—y‘yô 4
ñn ØUØóô$Ð/ó $ó	ð$ðÐ ñ, ˜Ð*EÔ FÙ  ØØ.Øõô" R§Y¡Yô "ô$l¨R¯Y©Yô $lñN ðð óô:Ð'@ó :óð:ð!Ð ñ6 Ð9Ð;XÔ YÙ  Ø$Ø8Øõò _�r    