Ë
    T^(hå\  ã                   óJ  — d Z ddlmZmZ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mZ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  ej8                  e«      ZdZdZ g d¢Z!dZ"dZ# G d„ dejH                  jJ                  «      Z& G d„ dejH                  jJ                  «      Z' G d„ dejH                  jJ                  «      Z( G d„ dejH                  jJ                  «      Z) G d„ dejH                  jJ                  «      Z* G d„ dejH                  jJ                  «      Z+ G d„ dejH                  jJ                  «      Z, G d„ de«      Z-d Z.d!Z/e G d"„ d#ejH                  jJ                  «      «       Z0 ed$e.«       G d%„ d&e-«      «       Z1 ed'e.«       G d(„ d)e-e«      «       Z2g d*¢Z3y)+zTensorFlow ResNet model.é    )ÚOptionalÚTupleÚUnionNé   )ÚACT2FN)Ú TFBaseModelOutputWithNoAttentionÚ*TFBaseModelOutputWithPoolingAndNoAttentionÚ&TFImageClassifierOutputWithNoAttention)ÚTFPreTrainedModelÚTFSequenceClassificationLossÚkerasÚkeras_serializableÚunpack_inputs)Ú
shape_list)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingé   )ÚResNetConfigr   zmicrosoft/resnet-50)r   i   é   r   z	tiger catc                   ó¾   ‡ — e Zd Z	 	 	 ddedededededdfˆ fd„Zd	ej                  dej                  fd
„Zdd	ej                  de	dej                  fd„Z
dd„Zˆ xZS )ÚTFResNetConvLayerÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚ
activationÚreturnNc                 óT  •— t        ‰| �  di |¤Ž |dz  | _        t        j                  j                  |||ddd¬«      | _        t        j                  j                  ddd¬	«      | _        |�	t        |   nt        j                  j                  d
«      | _        || _        || _        y )Né   ÚvalidFÚconvolution)r   ÚstridesÚpaddingÚuse_biasÚnameçñhãˆµøä>çÍÌÌÌÌÌì?Únormalization©ÚepsilonÚmomentumr'   Úlinear© )ÚsuperÚ__init__Ú	pad_valuer   ÚlayersÚConv2DÚconvÚBatchNormalizationr*   r   Ú
Activationr   r   r   )Úselfr   r   r   r   r   ÚkwargsÚ	__class__s          €úk/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/resnet/modeling_tf_resnet.pyr1   zTFResNetConvLayer.__init__6   s    ø€ ô 	‰ÑÑ"˜6Ò"Ø$¨Ñ)ˆŒÜ—L‘L×'Ñ'Ø k¸6È7Ð]bÐivð (ó 
ˆŒ	ô #Ÿ\™\×<Ñ<ÀTÐTWÐ^mÐ<ÓnˆÔØ0:Ð0Fœ& Ò,ÌEÏLÉL×LcÑLcÐdlÓLmˆŒØ&ˆÔØ(ˆÕó    Úhidden_statec                 ó�   — | j                   | j                   fx}}t        j                  |d||dg«      }| j                  |«      }|S )N)r   r   )r2   ÚtfÚpadr5   )r8   r=   Ú
height_padÚ	width_pads       r;   r#   zTFResNetConvLayer.convolutionJ   sF   € à"&§.¡.°$·.±.Ð!AÐAˆ
�YÜ—v‘v˜l¨V°ZÀÈFÐ,SÓTˆØ—y‘y Ó.ˆØÐr<   Útrainingc                 óp   — | j                  |«      }| j                  ||¬«      }| j                  |«      }|S ©N©rC   )r#   r*   r   )r8   r=   rC   s      r;   ÚcallzTFResNetConvLayer.callQ   s;   € Ø×'Ñ'¨Ó5ˆØ×)Ñ)¨,ÀÐ)ÓJˆØ—‘ |Ó4ˆØÐr<   c                 óþ  — | j                   ry d| _         t        | dd «      �[t        j                  | j                  j
                  «      5  | j                  j                  d d d | j                  g«       d d d «       t        | dd «      �\t        j                  | j                  j
                  «      5  | j                  j                  d d d | j                  g«       d d d «       y y # 1 sw Y   ŒsxY w# 1 sw Y   y xY w)NTr5   r*   )
ÚbuiltÚgetattrr?   Ú
name_scoper5   r'   Úbuildr   r*   r   ©r8   Úinput_shapes     r;   rL   zTFResNetConvLayer.buildW   sÜ   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ FØ—	‘	—‘  t¨T°4×3CÑ3CÐ DÔE÷Fä�4˜¨$Ó/Ð;Ü—‘˜t×1Ñ1×6Ñ6Ó7ñ PØ×"Ñ"×(Ñ(¨$°°d¸D×<MÑ<MÐ)NÔO÷Pð Pð <÷Fð Fú÷Pð Púó   Á*C'Â3*C3Ã'C0Ã3C<)r   r   Úrelu©F©N)Ú__name__Ú
__module__Ú__qualname__ÚintÚstrr1   r?   ÚTensorr#   ÚboolrG   rL   Ú__classcell__©r:   s   @r;   r   r   5   s�   ø„ ð
 ØØ ñ)àð)ð ð)ð ð	)ð
 ð)ð ð)ð 
õ)ð(¨¯	©	ð °b·i±ió ñ §¡ð °dð ÀrÇyÁyó ÷	Pr<   r   c                   ór   ‡ — e Zd ZdZdeddfˆ fd„Zd
dej                  dedej                  fd„Z	dd	„Z
ˆ xZS )ÚTFResNetEmbeddingszO
    ResNet Embeddings (stem) composed of a single aggressive convolution.
    Úconfigr   Nc                 óþ   •— t        ‰| �  d	i |¤Ž t        |j                  |j                  dd|j
                  d¬«      | _        t        j                  j                  dddd¬«      | _
        |j                  | _        y )
Nr   r!   Úembedder)r   r   r   r'   r   r"   Úpooler)Ú	pool_sizer$   r%   r'   r/   )r0   r1   r   Únum_channelsÚembedding_sizeÚ
hidden_actr`   r   r3   Ú	MaxPool2Dra   ©r8   r^   r9   r:   s      €r;   r1   zTFResNetEmbeddings.__init__h   ss   ø€ Ü‰ÑÑ"˜6Ò"Ü)Ø×ÑØ×!Ñ!ØØØ×(Ñ(Øô
ˆŒô —l‘l×,Ñ,°qÀ!ÈWÐ[cÐ,ÓdˆŒØ"×/Ñ/ˆÕr<   Úpixel_valuesrC   c                 ó  — t        |«      \  }}}}t        j                  «       r|| j                  k7  rt	        d«      ‚|}| j                  |«      }t        j                  |ddgddgddgddgg«      }| j                  |«      }|S )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r   r   )r   r?   Úexecuting_eagerlyrc   Ú
ValueErrorr`   r@   ra   )r8   rh   rC   Ú_rc   r=   s         r;   rG   zTFResNetEmbeddings.callu   s�   € Ü *¨<Ó 8Ñˆˆ1ˆa�Ü×ÑÔ! l°d×6GÑ6GÒ&GÜØwóð ð $ˆØ—}‘} \Ó2ˆÜ—v‘v˜l¨a°¨V°a¸°V¸aÀ¸VÀaÈÀVÐ,LÓMˆØ—{‘{ <Ó0ˆØÐr<   c                 óÆ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr`   ra   )rI   rJ   r?   rK   r`   r'   rL   ra   rM   s     r;   rL   zTFResNetEmbeddings.build�   sµ   € Ø�:Š:ØØˆŒ
Ü�4˜ TÓ*Ð6Ü—‘˜tŸ}™}×1Ñ1Ó2ñ *Ø—‘×#Ñ# DÔ)÷*ä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ (Ø—‘×!Ñ! $Ô'÷(ð (ð 5÷*ð *ú÷(ð (úó   ÁCÂ%CÃCÃC rQ   rR   )rS   rT   rU   Ú__doc__r   r1   r?   rX   rY   rG   rL   rZ   r[   s   @r;   r]   r]   c   sB   ø„ ñð0˜|ð 0¸$õ 0ñ
 §¡ð 
°dð 
ÀrÇyÁyó 
÷	(r<   r]   c            	       ó|   ‡ — e Zd ZdZddedededdfˆ fd„Zddej                  d	edej                  fd
„Z	dd„Z
ˆ xZS )ÚTFResNetShortCutzž
    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   r   r   r   Nc                 óà   •— t        ‰| �  d	i |¤Ž t        j                  j	                  |d|dd¬«      | _        t        j                  j                  ddd¬«      | _        || _        || _	        y )
Nr   Fr#   )r   r$   r&   r'   r(   r)   r*   r+   r/   )
r0   r1   r   r3   r4   r#   r6   r*   r   r   )r8   r   r   r   r9   r:   s        €r;   r1   zTFResNetShortCut.__init__“   sl   ø€ Ü‰ÑÑ"˜6Ò"Ü Ÿ<™<×.Ñ.Ø a°À%Èmð /ó 
ˆÔô #Ÿ\™\×<Ñ<ÀTÐTWÐ^mÐ<ÓnˆÔØ&ˆÔØ(ˆÕr<   ÚxrC   c                 óR   — |}| j                  |«      }| j                  ||¬«      }|S rE   )r#   r*   )r8   rs   rC   r=   s       r;   rG   zTFResNetShortCut.call�   s2   € ØˆØ×'Ñ'¨Ó5ˆØ×)Ñ)¨,ÀÐ)ÓJˆØÐr<   c                 óþ  — | j                   ry d| _         t        | dd «      �[t        j                  | j                  j
                  «      5  | j                  j                  d d d | j                  g«       d d d «       t        | dd «      �\t        j                  | j                  j
                  «      5  | j                  j                  d d d | j                  g«       d d d «       y y # 1 sw Y   ŒsxY w# 1 sw Y   y xY w)NTr#   r*   )
rI   rJ   r?   rK   r#   r'   rL   r   r*   r   rM   s     r;   rL   zTFResNetShortCut.build£   sä   € Ø�:Š:ØØˆŒ
Ü�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ MØ× Ñ ×&Ñ&¨¨d°D¸$×:JÑ:JÐ'KÔL÷Mä�4˜¨$Ó/Ð;Ü—‘˜t×1Ñ1×6Ñ6Ó7ñ PØ×"Ñ"×(Ñ(¨$°°d¸D×<MÑ<MÐ)NÔO÷Pð Pð <÷Mð Mú÷Pð PúrO   )r!   rQ   rR   )rS   rT   rU   ro   rV   r1   r?   rX   rY   rG   rL   rZ   r[   s   @r;   rq   rq   �   sR   ø„ ññ
) Cð )°sð )ÀCð )ÐZ^õ )ñ�b—i‘ið ¨4ð ¸B¿I¹Ió ÷	Pr<   rq   c                   ó‚   ‡ — e Zd ZdZ	 ddededededdf
ˆ fd„Zdd	ej                  d
e	dej                  fd„Z
dd„Zˆ xZS )ÚTFResNetBasicLayerzO
    A classic ResNet's residual layer composed by two `3x3` convolutions.
    r   r   r   r   r   Nc                 ó  •— t        ‰| �  d	i |¤Ž ||k7  xs |dk7  }t        |||d¬«      | _        t        ||d d¬«      | _        |rt        |||d¬«      n t        j                  j                  dd¬«      | _	        t        |   | _        y )
Nr   úlayer.0©r   r'   úlayer.1©r   r'   Úshortcutr.   ©r'   r/   )r0   r1   r   Úconv1Úconv2rq   r   r3   r7   r}   r   r   )r8   r   r   r   r   r9   Úshould_apply_shortcutr:   s          €r;   r1   zTFResNetBasicLayer.__init__´   s�   ø€ ô 	‰ÑÑ"˜6Ò"Ø +¨|Ñ ;Ò J¸vÈ¹{ÐÜ& {°LÈÐV_Ô`ˆŒ
Ü& |°\ÈdÐYbÔcˆŒ
ñ %ô ˜[¨,¸vÈJÕWä—‘×(Ñ(¨¸
Ð(ÓCð 	Œô
 ! Ñ,ˆ�r<   r=   rC   c                 ó¨   — |}| j                  ||¬«      }| j                  ||¬«      }| j                  ||¬«      }||z  }| j                  |«      }|S rE   )r   r€   r}   r   ©r8   r=   rC   Úresiduals       r;   rG   zTFResNetBasicLayer.callÂ   s[   € ØˆØ—z‘z ,¸�zÓBˆØ—z‘z ,¸�zÓBˆØ—=‘= °H�=Ó=ˆØ˜Ñ ˆØ—‘ |Ó4ˆØÐr<   c                 ó’  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   Œ¿xY w# 1 sw Y   ŒqxY w# 1 sw Y   y xY w)NTr   r€   r}   )	rI   rJ   r?   rK   r   r'   rL   r€   r}   rM   s     r;   rL   zTFResNetBasicLayer.buildË   sý   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ 'Ø—
‘
× Ñ  Ô&÷'ä�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ 'Ø—
‘
× Ñ  Ô&÷'ä�4˜ TÓ*Ð6Ü—‘˜tŸ}™}×1Ñ1Ó2ñ *Ø—‘×#Ñ# DÔ)÷*ð *ð 7÷'ð 'ú÷'ð 'ú÷*ð *ús$   ÁD%Â%D1Ã?D=Ä%D.Ä1D:Ä=E)r   rP   rQ   rR   ©rS   rT   rU   ro   rV   rW   r1   r?   rX   rY   rG   rL   rZ   r[   s   @r;   rw   rw   ¯   sc   ø„ ñð
 W]ñ-Øð-Ø.1ð-Ø;>ð-ØPSð-à	õ-ñ §¡ð °dð ÀrÇyÁyó ÷*r<   rw   c                   óŠ   ‡ — e Zd ZdZ	 	 	 ddedededededdfˆ fd	„Zdd
ej                  de	dej                  fd„Z
dd„Zˆ xZS )ÚTFResNetBottleNeckLayera%  
    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   r   Ú	reductionr   Nc                 óJ  •— t        ‰	| �  di |¤Ž ||k7  xs |dk7  }||z  }t        ||dd¬«      | _        t        |||d¬«      | _        t        ||dd d¬«      | _        |rt        |||d¬«      n t        j                  j                  d	d¬
«      | _
        t        |   | _        y )Nr   ry   )r   r'   r{   rz   zlayer.2)r   r   r'   r}   r.   r~   r/   )r0   r1   r   Úconv0r   r€   rq   r   r3   r7   r}   r   r   )
r8   r   r   r   r   r‰   r9   r�   Úreduces_channelsr:   s
            €r;   r1   z TFResNetBottleNeckLayer.__init__â   s¸   ø€ ô 	‰ÑÑ"˜6Ò"Ø +¨|Ñ ;Ò J¸vÈ¹{ÐØ'¨9Ñ4ÐÜ& {Ð4DÐRSÐZcÔdˆŒ
Ü&Ð'7Ð9IÐRXÐ_hÔiˆŒ
Ü&Ð'7¸ÐSTÐaeÐluÔvˆŒ
ñ %ô ˜[¨,¸vÈJÕWä—‘×(Ñ(¨¸
Ð(ÓCð 	Œô
 ! Ñ,ˆ�r<   r=   rC   c                 óÎ   — |}| j                  ||¬«      }| j                  ||¬«      }| j                  ||¬«      }| j                  ||¬«      }||z  }| j	                  |«      }|S rE   )r‹   r   r€   r}   r   rƒ   s       r;   rG   zTFResNetBottleNeckLayer.callø   sm   € ØˆØ—z‘z ,¸�zÓBˆØ—z‘z ,¸�zÓBˆØ—z‘z ,¸�zÓBˆØ—=‘= °H�=Ó=ˆØ˜Ñ ˆØ—‘ |Ó4ˆØÐr<   c                 ó`  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   �ŒxY w# 1 sw Y   ŒÌxY w# 1 sw Y   Œ~xY w# 1 sw Y   y xY w)NTr‹   r   r€   r}   )
rI   rJ   r?   rK   r‹   r'   rL   r   r€   r}   rM   s     r;   rL   zTFResNetBottleNeckLayer.build  sG  € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ 'Ø—
‘
× Ñ  Ô&÷'ä�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ 'Ø—
‘
× Ñ  Ô&÷'ä�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ 'Ø—
‘
× Ñ  Ô&÷'ä�4˜ TÓ*Ð6Ü—‘˜tŸ}™}×1Ñ1Ó2ñ *Ø—‘×#Ñ# DÔ)÷*ð *ð 7÷'ñ 'ú÷'ð 'ú÷'ð 'ú÷*ð *ús0   ÁE?Â%FÃ?FÅF$Å?F	ÆFÆF!Æ$F-)r   rP   é   rQ   rR   r†   r[   s   @r;   rˆ   rˆ   Ú   sy   ø„ ñð Ø Øñ-àð-ð ð-ð ð	-ð
 ð-ð ð-ð 
õ-ñ, §¡ð °dð ÀrÇyÁyó ÷*r<   rˆ   c                   ó†   ‡ — e Zd ZdZ	 ddedededededdfˆ fd	„Zdd
ej                  de	dej                  fd„Z
dd„Zˆ xZS )ÚTFResNetStagez4
    A ResNet stage composed of stacked layers.
    r^   r   r   r   Údepthr   Nc                 ó  •— t        ‰
| �  di |¤Ž |j                  dk(  rt        nt        } |||||j
                  d¬«      g}|t        |dz
  «      D �	cg c]  }	 ||||j
                  d|	dz   › �¬«      ‘Œ  c}	z  }|| _        y c c}	w )NÚ
bottleneckzlayers.0)r   r   r'   r   zlayers.r|   r/   )r0   r1   Ú
layer_typerˆ   rw   re   ÚrangeÚstage_layers)r8   r^   r   r   r   r’   r9   Úlayerr3   Úir:   s             €r;   r1   zTFResNetStage.__init__  s    ø€ ô 	‰ÑÑ"˜6Ò"à+1×+<Ñ+<ÀÒ+LÕ'ÔRdˆá˜ \¸&ÈV×M^ÑM^ÐeoÔpÐqˆØä˜5 1™9Ó%ö
àñ �, ¸×9JÑ9JÐSZÐ[\Ð_`Ñ[`ÐZaÐQbÖcò
ñ 	
ˆð #ˆÕùò	
s   Á#Br=   rC   c                 ó<   — | j                   D ]  } |||¬«      }Œ |S rE   )r—   )r8   r=   rC   r˜   s       r;   rG   zTFResNetStage.call'  s+   € Ø×&Ñ&ò 	BˆEÙ  ¸ÔA‰Lð	BàÐr<   c                 óô   — | j                   ry d| _         t        | dd «      �K| j                  D ];  }t        j                  |j
                  «      5  |j                  d «       d d d «       Œ= y y # 1 sw Y   ŒIxY w)NTr—   )rI   rJ   r—   r?   rK   r'   rL   ©r8   rN   r˜   s      r;   rL   zTFResNetStage.build,  sr   € Ø�:Š:ØØˆŒ
Ü�4˜¨Ó.Ð:Ø×*Ñ*ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð ;÷&ð &úó   ÁA.Á.A7	)r!   r!   rQ   rR   )rS   rT   rU   ro   r   rV   r1   r?   rX   rY   rG   rL   rZ   r[   s   @r;   r‘   r‘     sk   ø„ ñð
 hiñ#Ø"ð#Ø14ð#ØDGð#ØQTð#Øadð#à	õ#ñ §¡ð °dð ÀrÇyÁyó ÷
&r<   r‘   c                   óh   ‡ — e Zd Zdeddfˆ fd„Z	 	 	 ddej                  dedededef
d	„Z	dd
„Z
ˆ xZS )ÚTFResNetEncoderr^   r   Nc                 ó   •— t        ‰| �  di |¤Ž t        ||j                  |j                  d   |j
                  rdnd|j                  d   d¬«      g| _        t        t        |j                  |j                  dd  |j                  dd  «      «      D ]8  \  }\  }}}| j                  j                  t        ||||d|dz   › �¬«      «       Œ: y )	Nr   r!   r   zstages.0)r   r’   r'   zstages.)r’   r'   r/   )r0   r1   r‘   rd   Úhidden_sizesÚdownsample_in_first_stageÚdepthsÚstagesÚ	enumerateÚzipÚappend)r8   r^   r9   r™   r   r   r’   r:   s          €r;   r1   zTFResNetEncoder.__init__7  sÜ   ø€ Ü‰ÑÑ"˜6Ò"ô ØØ×%Ñ%Ø×#Ñ# AÑ&Ø"×<Ò<‘qÀ!Ø—m‘m AÑ&Øôð	
ˆŒô 6?Ü�×#Ñ# V×%8Ñ%8¸¸Ð%<¸f¿m¹mÈAÈBÐ>OÓPó6
ò 	vÑ1ˆAÑ1�˜\¨5ð �K‰K×Ñœ}¨V°[À,ÐV[ÐdkÐlmÐpqÑlqÐkrÐbsÔtÕuñ	vr<   r=   Úoutput_hidden_statesÚreturn_dictrC   c                 óª   — |rdnd }| j                   D ]  }|r||fz   } |||¬«      }Œ |r||fz   }|st        d„ ||fD «       «      S t        ||¬«      S )Nr/   rF   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrR   r/   )Ú.0Úvs     r;   ú	<genexpr>z'TFResNetEncoder.call.<locals>.<genexpr>\  s   è ø€ ÒS˜qÀQÁ]œÑSùs   ‚Š)Úlast_hidden_stateÚhidden_states)r¤   Útupler   )r8   r=   r¨   r©   rC   r°   Ústage_modules          r;   rG   zTFResNetEncoder.callI  su   € ñ 3™¸ˆà ŸK™Kò 	IˆLÙ#Ø -°°Ñ ?�á'¨¸xÔH‰Lð		Iñ  Ø)¨\¨OÑ;ˆMáÜÑS \°=Ð$AÔSÓSÐSä/À,Ð^kÔlÐlr<   c                 óô   — | j                   ry d| _         t        | dd «      �K| j                  D ];  }t        j                  |j
                  «      5  |j                  d «       d d d «       Œ= y y # 1 sw Y   ŒIxY w)NTr¤   )rI   rJ   r¤   r?   rK   r'   rL   rœ   s      r;   rL   zTFResNetEncoder.build`  sp   € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð 5÷&ð &úr�   )FTFrR   )rS   rT   rU   r   r1   r?   rX   rY   r   rG   rL   rZ   r[   s   @r;   rŸ   rŸ   6  sh   ø„ ðv˜|ð v¸$õ vð* &+Ø Øñmà—i‘iðmð #ðmð ð	mð
 ðmð 
*óm÷.&r<   rŸ   c                   ó,   — e Zd ZdZeZdZdZed„ «       Z	y)ÚTFResNetPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úresnetrh   c                 ó€   — dt        j                  d | j                  j                  ddft         j                  ¬«      iS )Nrh   éà   )ÚshapeÚdtype)r?   Ú
TensorSpecr^   rc   Úfloat32)r8   s    r;   Úinput_signaturez'TFResNetPreTrainedModel.input_signaturet  s4   € à¤§¡°T¸4¿;¹;×;SÑ;SÐUXÐZ]Ð4^Ôfh×fpÑfpÔ qÐrÐrr<   N)
rS   rT   rU   ro   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚpropertyr½   r/   r<   r;   rµ   rµ   j  s-   „ ñð
  €LØ ÐØ$€Oàñsó ñsr<   rµ   ad  
    This model is a TensorFlow
    [keras.layers.Layer](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Layer) sub-class. Use it as a
    regular TensorFlow Module and refer to the TensorFlow documentation for all matter related to general usage and
    behavior.

    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 [`~TFPreTrainedModel.from_pretrained`] method to load the model weights.
a>  
    Args:
        pixel_values (`tf.Tensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`ConvNextImageProcessor.__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                   ó¦   ‡ — e Zd ZeZdeddfˆ fd„Ze	 	 	 ddej                  de	e
   de	e
   de
deeej                     ef   f
d	„«       Zdd
„Zˆ xZS )ÚTFResNetMainLayerr^   r   Nc                 óÄ   •— t        ‰| �  di |¤Ž || _        t        |d¬«      | _        t        |d¬«      | _        t        j                  j                  d¬«      | _
        y )Nr`   r~   ÚencoderT)Úkeepdimsr/   )r0   r1   r^   r]   r`   rŸ   rÅ   r   r3   ÚGlobalAveragePooling2Dra   rg   s      €r;   r1   zTFResNetMainLayer.__init__˜  sO   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒÜ*¨6¸
ÔCˆŒÜ& v°IÔ>ˆŒÜ—l‘l×9Ñ9À4Ð9ÓHˆ�r<   rh   r¨   r©   rC   c                 óì  — |�|n| j                   j                  }|�|n| j                   j                  }t        j                  |g d¢¬«      }| j                  ||¬«      }| j                  ||||¬«      }|d   }| j                  |«      }t        j                  |d«      }t        j                  |d«      }d}	|dd  D ]  }
|	t        d	„ |
D «       «      z   }	Œ |s||f|	z   S |r|	nd }	t        |||	¬
«      S )N)r   r!   r   r   )ÚpermrF   ©r¨   r©   rC   r   ©r   r   r   r!   r/   r   c              3   óH   K  — | ]  }t        j                  |d «      –— Œ y­w)rË   N)r?   Ú	transpose)r¬   Úhs     r;   r®   z)TFResNetMainLayer.call.<locals>.<genexpr>À  s   è ø€ Ò1fÐTU´"·,±,¸qÀ,×2OÑ1fùs   ‚ ")r¯   Úpooler_outputr°   )
r^   r¨   Úuse_return_dictr?   rÍ   r`   rÅ   ra   r±   r	   )r8   rh   r¨   r©   rC   Úembedding_outputÚencoder_outputsr¯   Úpooled_outputr°   r=   s              r;   rG   zTFResNetMainLayer.callŸ  s!  € ð %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆô
 —|‘| L²|ÔDˆØŸ=™=¨À˜=ÓIÐàŸ,™,ØÐ3GÐU`Ðksð 'ó 
ˆð ,¨AÑ.ÐàŸ™Ð$5Ó6ˆô ŸL™LÐ):¸LÓIÐÜŸ™ ]°LÓAˆØˆØ+¨A¨BÐ/ò 	gˆLØ)¬EÑ1fÐYeÔ1fÓ,fÑf‰Mð	gñ Ø% }Ð5¸ÑEÐEá)=™À4ˆä9Ø/Ø'Ø'ô
ð 	
r<   c                 óÆ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr`   rÅ   )rI   rJ   r?   rK   r`   r'   rL   rÅ   rM   s     r;   rL   zTFResNetMainLayer.buildÍ  sµ   € Ø�:Š:ØØˆŒ
Ü�4˜ TÓ*Ð6Ü—‘˜tŸ}™}×1Ñ1Ó2ñ *Ø—‘×#Ñ# DÔ)÷*ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ð )ð 6÷*ð *ú÷)ð )úrn   ©NNFrR   )rS   rT   rU   r   r¾   r1   r   r?   rX   r   rY   r   r   r	   rG   rL   rZ   r[   s   @r;   rÃ   rÃ   ”  s“   ø„ à€LðI˜|ð I¸$õ Ið ð 04Ø&*Øñ+
à—i‘ið+
ð ' t™nð+
ð ˜d‘^ð	+
ð
 ð+
ð 
ˆu�R—Y‘YÑÐ!KÐKÑ	Lò+
ó ð+
÷Z	)r<   rÃ   zOThe bare ResNet model outputting raw features without any specific head on top.c                   óØ   ‡ — e Zd Zdeddfˆ fd„Z ee«       eee	e
de¬«      e	 	 	 ddej                  dee   d	ee   d
edeeej                     e	f   f
d„«       «       «       Zdd„Zˆ xZS )ÚTFResNetModelr^   r   Nc                 óJ   •— t        ‰| �  |fi |¤Ž t        |d¬«      | _        y )Nr¶   )r^   r'   )r0   r1   rÃ   r¶   rg   s      €r;   r1   zTFResNetModel.__init__Þ  s#   ø€ Ü‰Ñ˜Ñ* 6Ò*Ü'¨v¸HÔEˆ�r<   Úvision)Ú
checkpointÚoutput_typer¾   ÚmodalityÚexpected_outputrh   r¨   r©   rC   c                 ó˜   — |�|n| j                   j                  }|�|n| j                   j                  }| j                  ||||¬«      }|S )N)rh   r¨   r©   rC   )r^   r¨   rÐ   r¶   )r8   rh   r¨   r©   rC   Úresnet_outputss         r;   rG   zTFResNetModel.callâ  s]   € ð" %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàŸ™Ø%Ø!5Ø#Øð	 %ó 
ˆð Ðr<   c                 óú   — | j                   ry d| _         t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY w)NTr¶   )rI   rJ   r?   rK   r¶   r'   rL   rM   s     r;   rL   zTFResNetModel.buildÿ  si   € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ (Ø—‘×!Ñ! $Ô'÷(ð (ð 5÷(ð (ús   ÁA1Á1A:rÕ   rR   )rS   rT   rU   r   r1   r   ÚRESNET_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr	   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr   r?   rX   r   rY   r   r   rG   rL   rZ   r[   s   @r;   r×   r×   Ù  sº   ø„ ð
F˜|ð F¸$õ Fñ +Ð+BÓCÙØ&Ø>Ø$ØØ.ôð ð 04Ø&*Øñà—i‘iðð ' t™nðð ˜d‘^ð	ð
 ðð 
ˆu�R—Y‘YÑÐ!KÐKÑ	Lòó óó Dð÷((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                   ó6  ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  fd„Z ee	«       e
eeee¬«      e	 	 	 	 	 ddeej                     d	eej                     d
ee   dee   dedeeej                     ef   fd„«       «       «       Zdd„Zˆ xZS )ÚTFResNetForImageClassificationr^   r   Nc                 ó:  •— t        ‰| �  |fi |¤Ž |j                  | _        t        |d¬«      | _        |j                  dkD  r+t
        j                  j                  |j                  d¬«      n t
        j                  j                  dd¬«      | _	        || _
        y )Nr¶   r~   r   zclassifier.1r.   )r0   r1   Ú
num_labelsrÃ   r¶   r   r3   ÚDenser7   Úclassifier_layerr^   rg   s      €r;   r1   z'TFResNetForImageClassification.__init__  s‡   ø€ Ü‰Ñ˜Ñ* 6Ò*Ø ×+Ñ+ˆŒÜ'¨°XÔ>ˆŒð × Ñ  1Ò$ô �L‰L×Ñ˜v×0Ñ0°~ÐÔFä—‘×(Ñ(¨¸Ð(ÓGð 	Ôð
 ˆ�r<   rs   c                 ón   — t        j                  j                  «       |«      }| j                  |«      }|S rR   )r   r3   ÚFlattenrê   )r8   rs   Úlogitss      r;   Ú
classifierz)TFResNetForImageClassification.classifier  s.   € Ü�L‰L× Ñ Ó" 1Ó%ˆØ×&Ñ& qÓ)ˆØˆr<   )rÚ   rÛ   r¾   rÝ   rh   Úlabelsr¨   r©   rC   c                 ó.  — |�|n| j                   j                  }| j                  ||||¬«      }|r|j                  n|d   }| j	                  |«      }|€dn| j                  ||«      }	|s|f|dd z   }
|	�|	f|
z   S |
S t        |	||j                  ¬«      S )a)  
        labels (`tf.Tensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        NrÊ   r   r!   )Úlossrí   r°   )r^   rÐ   r¶   rÏ   rî   Úhf_compute_lossr
   r°   )r8   rh   rï   r¨   r©   rC   ÚoutputsrÓ   rí   rñ   Úoutputs              r;   rG   z#TFResNetForImageClassification.call!  s¶   € ð* &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—+‘+ØÐ/CÐQ\Ðgoð ó 
ˆñ 2=˜×-Ò-À'È!Á*ˆà—‘ Ó/ˆà�~‰t¨4×+?Ñ+?ÀÈÓ+OˆáØ�Y ¨¨ Ñ,ˆFØ'+Ð'7�D�7˜VÑ#ÐC¸VÐCä5¸4ÈÐ^e×^sÑ^sÔtÐtr<   c                 óú  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �ht        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  d   g«       d d d «       y y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NTr¶   rê   éÿÿÿÿ)
rI   rJ   r?   rK   r¶   r'   rL   rê   r^   r¡   rM   s     r;   rL   z$TFResNetForImageClassification.buildH  sÖ   € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ (Ø—‘×!Ñ! $Ô'÷(ä�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ XØ×%Ñ%×+Ñ+¨T°4¸¿¹×9QÑ9QÐRTÑ9UÐ,VÔW÷Xð Xð ?÷(ð (ú÷Xð Xús   ÁC%Â%6C1Ã%C.Ã1C:)NNNNFrR   )rS   rT   rU   r   r1   r?   rX   rî   r   rá   r   Ú_IMAGE_CLASS_CHECKPOINTr
   rã   Ú_IMAGE_CLASS_EXPECTED_OUTPUTr   r   rY   r   r   rG   rL   rZ   r[   s   @r;   ræ   ræ     sö   ø„ ð
˜|ð 
¸$õ 
ð˜BŸI™Ið ¨"¯)©)ó ñ
 +Ð+BÓCÙØ*Ø:Ø$Ø4ô	ð ð -1Ø&*Ø/3Ø&*Øñuà˜rŸy™yÑ)ðuð ˜Ÿ™Ñ#ðuð ' t™nð	uð
 ˜d‘^ðuð ðuð 
ˆu�R—Y‘YÑÐ!GÐGÑ	Hòuó óó Dðu÷>	Xr<   ræ   )ræ   r×   rµ   )4ro   Útypingr   r   r   Ú
tensorflowr?   Úactivations_tfr   Úmodeling_tf_outputsr   r	   r
   Úmodeling_tf_utilsr   r   r   r   r   Útf_utilsr   Úutilsr   r   r   r   Úconfiguration_resnetr   Ú
get_loggerrS   Úloggerrã   râ   rä   r÷   rø   r3   ÚLayerr   r]   rq   rw   rˆ   r‘   rŸ   rµ   ÚRESNET_START_DOCSTRINGrá   rÃ   r×   ræ   Ú__all__r/   r<   r;   ú<module>r     sÁ  ðñ ç )Ñ )ã å $÷ñ ÷
õ õ #ß uÓ uÝ .ð 
ˆ×	Ñ	˜HÓ	%€ð !€ð ,Ð Ú(Ð ð 0Ð Ø*Ð ô+P˜Ÿ™×*Ñ*ô +Pô\'(˜Ÿ™×+Ñ+ô '(ôTP�u—|‘|×)Ñ)ô PôD(*˜Ÿ™×+Ñ+ô (*ôV7*˜eŸl™l×0Ñ0ô 7*ôt&�E—L‘L×&Ñ&ô &ôD1&�e—l‘l×(Ñ(ô 1&ôhsÐ/ô sð
Ð ðÐ ð ôA)˜Ÿ™×*Ñ*ó A)ó ðA)ñH ØUØóô((Ð+ó ((ó	ð((ñV ðð óôBXÐ%<Ð>Zó BXóðBXòJ Y�r<   