Ë
    S^(hXÊ  ã                  ó8  — d Z ddlmZ ddlZddlZddlm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mZ dd	lmZmZmZmZmZmZ dd
lmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'  e$jP                  e)«      Z*dZ+dZ,g d¢Z-dZ.dZ/e G d„ de «      «       Z0 G d„ dejb                  jd                  «      Z3 G d„ dejb                  jd                  «      Z4 G d„ dejb                  jd                  «      Z5 G d„ dejb                  jd                  «      Z6 G d„ dejb                  jd                  «      Z7 G d„ dejb                  jd                  «      Z8 G d „ d!ejb                  jd                  «      Z9 G d"„ d#ejb                  jd                  «      Z: G d$„ d%ejb                  jd                  «      Z;e G d&„ d'ejb                  jd                  «      «       Z< G d(„ d)e«      Z=d*Z>d+Z? e"d,e>«       G d-„ d.e=«      «       Z@ G d/„ d0ejb                  jd                  «      ZA G d1„ d2ejb                  jd                  «      ZB G d3„ d4ejb                  jd                  «      ZC e"d5e>«       G d6„ d7e=«      «       ZD e"d8e>«       G d9„ d:e=e«      «       ZE e"d;e>«       G d<„ d=e=«      «       ZFg d>¢ZGy)?zTensorFlow DeiT model.é    )ÚannotationsN)Ú	dataclass)ÚOptionalÚTupleÚUnioné   )Úget_tf_activation)ÚTFBaseModelOutputÚTFBaseModelOutputWithPoolingÚTFImageClassifierOutputÚTFMaskedImageModelingOutput)ÚTFPreTrainedModelÚTFSequenceClassificationLossÚget_initializerÚkerasÚkeras_serializableÚunpack_inputs)Ú
shape_listÚstable_softmax)ÚModelOutputÚadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsé   )Ú
DeiTConfigr   z(facebook/deit-base-distilled-patch16-224)r   éÆ   i   ztabby, tabby catc                  óX   — e Zd ZU dZdZded<   dZded<   dZded<   dZded<   dZ	ded	<   y)
Ú-TFDeiTForImageClassificationWithTeacherOutputaý  
    Output type of [`DeiTForImageClassificationWithTeacher`].

    Args:
        logits (`tf.Tensor` of shape `(batch_size, config.num_labels)`):
            Prediction scores as the average of the cls_logits and distillation logits.
        cls_logits (`tf.Tensor` of shape `(batch_size, config.num_labels)`):
            Prediction scores of the classification head (i.e. the linear layer on top of the final hidden state of the
            class token).
        distillation_logits (`tf.Tensor` of shape `(batch_size, config.num_labels)`):
            Prediction scores of the distillation head (i.e. the linear layer on top of the final hidden state of the
            distillation token).
        hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each layer) of shape
            `(batch_size, sequence_length, hidden_size)`. Hidden-states of the model at the output of each layer plus
            the initial embedding outputs.
        attentions (`tuple(tf.Tensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `tf.Tensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`. Attentions weights after the attention softmax, used to compute the weighted average in
            the self-attention heads.
    NzOptional[tf.Tensor]ÚlogitsÚ
cls_logitsÚdistillation_logitszTuple[tf.Tensor] | NoneÚhidden_statesÚ
attentions)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   Ú__annotations__r"   r#   r$   r%   © ó    úg/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/deit/modeling_tf_deit.pyr    r    C   sA   … ñð, #'€FÐÓ&Ø&*€JÐ#Ó*Ø/3ÐÐ,Ó3Ø-1€MÐ*Ó1Ø*.€JÐ'Ô.r,   r    c                  óX   ‡ — e Zd ZdZddˆ fd„Zdd„Zd	d„Z	 	 	 d
	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )ÚTFDeiTEmbeddingszv
    Construct the CLS token, distillation token, position and patch embeddings. Optionally, also the mask token.
    c                óÄ   •— t        ‰| �  di |¤Ž || _        || _        t	        |d¬«      | _        t        j                  j                  |j                  d¬«      | _
        y )NÚpatch_embeddings)ÚconfigÚnameÚdropout©r3   r+   )ÚsuperÚ__init__r2   Úuse_mask_tokenÚTFDeiTPatchEmbeddingsr1   r   ÚlayersÚDropoutÚhidden_dropout_probr4   )Úselfr2   r8   ÚkwargsÚ	__class__s       €r-   r7   zTFDeiTEmbeddings.__init__g   sS   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒØ,ˆÔÜ 5¸VÐJ\Ô ]ˆÔÜ—|‘|×+Ñ+¨F×,FÑ,FÈYÐ+ÓWˆ�r,   c                ó†  — | j                  dd| j                  j                  ft        j                  j                  «       dd¬«      | _        | j                  dd| j                  j                  ft        j                  j                  «       dd¬«      | _        d | _        | j                  rM| j                  dd| j                  j                  ft        j                  j                  «       dd¬«      | _        | j                  j                  }| j                  d|dz   | j                  j                  ft        j                  j                  «       dd¬«      | _        | 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)Nr   TÚ	cls_token)ÚshapeÚinitializerÚ	trainabler3   Údistillation_tokenÚ
mask_tokené   Úposition_embeddingsr1   r4   )Ú
add_weightr2   Úhidden_sizer   ÚinitializersÚzerosrA   rE   rF   r8   r1   Únum_patchesrH   ÚbuiltÚgetattrÚtfÚ
name_scoper3   Úbuildr4   )r=   Úinput_shaperM   s      r-   rR   zTFDeiTEmbeddings.buildn   sí  € ØŸ™Ø�a˜Ÿ™×0Ñ0Ð1Ü×*Ñ*×0Ñ0Ó2ØØð	 )ó 
ˆŒð #'§/¡/Ø�a˜Ÿ™×0Ñ0Ð1Ü×*Ñ*×0Ñ0Ó2ØØ%ð	 #2ó #
ˆÔð ˆŒØ×ÒØ"Ÿo™oØ˜!˜TŸ[™[×4Ñ4Ð5Ü!×.Ñ.×4Ñ4Ó6ØØ!ð	 .ó ˆDŒOð ×+Ñ+×7Ñ7ˆØ#'§?¡?Ø�k A‘o t§{¡{×'>Ñ'>Ð?Ü×*Ñ*×0Ñ0Ó2ØØ&ð	 $3ó $
ˆÔ ð �:Š:ØØˆŒ
Ü�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ 2Ø×%Ñ%×+Ñ+¨DÔ1÷2ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ð )ð 6÷2ð 2ú÷)ð )ús   Æ+H+ÈH7È+H4È7I c           
     ó¤  — |j                   d   dz
  }| j                  j                   d   dz
  }||k(  r||k(  r| j                  S | j                  d d …dd d …f   }| j                  d d …dd d …f   }| j                  d d …dd …d d …f   }|j                   d   }	|| j                  j                  z  }
|| j                  j                  z  }|
dz   |dz   }}
t	        j
                  |dt        t        j                  |«      «      t        t        j                  |«      «      |	f«      }t        j                  j                  |t        |
«      t        |«      fd¬«      }t	        j                  |g d¢¬	«      }t	        j
                  |dd|	f«      }t	        j                  t	        j                  |d¬
«      t	        j                  |d¬
«      |gd¬
«      S )Nr   rG   r   éÿÿÿÿgš™™™™™¹?Úbicubic)ÚsizeÚmethod©r   rG   r   r   ©Úperm©Úaxis)rB   rH   r2   Ú
patch_sizerP   ÚreshapeÚintÚmathÚsqrtÚimageÚresizeÚ	transposeÚconcatÚexpand_dims)r=   Ú
embeddingsÚheightÚwidthrM   Únum_positionsÚclass_pos_embedÚdist_pos_embedÚpatch_pos_embedÚdimÚh0Úw0s               r-   Úinterpolate_pos_encodingz)TFDeiTEmbeddings.interpolate_pos_encoding•   s˜  € Ø ×&Ñ& qÑ)¨AÑ-ˆØ×0Ñ0×6Ñ6°qÑ9¸AÑ=ˆà˜-Ò'¨F°eªOØ×+Ñ+Ð+à×2Ñ2²1°aº°7Ñ;ˆØ×1Ñ1²!°Qº°'Ñ:ˆØ×2Ñ2²1°a±bº!°8Ñ<ˆØ×Ñ˜rÑ"ˆØ�t—{‘{×-Ñ-Ñ-ˆØ�d—k‘k×,Ñ,Ñ,ˆð �c‘˜2 ™8ˆBˆÜŸ*™*Ø˜a¤¤T§Y¡Y¨}Ó%=Ó!>ÄÄDÇIÁIÈmÓD\Ó@]Ð_bÐcó
ˆô Ÿ(™(Ÿ/™/¨/ÄÀRÃÌ#ÈbË'Ð@RÐ[d˜/ÓeˆÜŸ,™, º\ÔJˆÜŸ*™* _°q¸"¸c°lÓCˆä�y‰yÜ�^‰^˜O°!Ô4´b·n±nÀ^ÐZ[Ô6\Ð^mÐnÐuvô
ð 	
r,   c                ól  — |j                   \  }}}}| j                  |«      }t        |«      \  }	}
}|�it        j                  | j
                  |	|
dg«      }t        j                  |d¬«      }t        j                  ||j                  ¬«      }|d|z
  z  ||z  z   }t        j                  | j                  |	d¬«      }t        j                  | j                  |	d¬«      }t        j                  |||fd¬«      }| j                  }|r| j                  |||«      }||z   }| j                  ||¬«      }|S )	Nr   rU   r\   ©Údtypeg      ð?r   )Úrepeatsr]   ©Útraining)rB   r1   r   rP   ÚtilerF   rg   Úcastru   ÚrepeatrA   rE   rf   rH   rr   r4   )r=   Úpixel_valuesÚbool_masked_posrx   rr   Ú_ri   rj   rh   Ú
batch_sizeÚ
seq_lengthÚmask_tokensÚmaskÚ
cls_tokensÚdistillation_tokensÚposition_embeddings                   r-   ÚcallzTFDeiTEmbeddings.call°   s)  € ð +×0Ñ0Ñˆˆ6�5˜!à×*Ñ*¨<Ó8ˆ
Ü$.¨zÓ$:Ñ!ˆ
�J àÐ&ÜŸ'™' $§/¡/°JÀ
ÈAÐ3NÓOˆKä—>‘> /¸Ô;ˆDÜ—7‘7˜4 {×'8Ñ'8Ô9ˆDØ# s¨T¡zÑ2°[À4Ñ5GÑGˆJä—Y‘Y˜tŸ~™~°zÈÔJˆ
Ü Ÿi™i¨×(?Ñ(?ÈÐZ[Ô\ÐÜ—Y‘Y 
Ð,?ÀÐLÐSTÔUˆ
Ø!×5Ñ5ÐÙ#Ø!%×!>Ñ!>¸zÈ6ÐSXÓ!YÐàÐ"4Ñ4ˆ
Ø—\‘\ *°x�\Ó@ˆ
ØÐr,   ©F)r2   r   r8   ÚboolÚreturnÚNone©N)rh   ú	tf.Tensorri   r`   rj   r`   r‰   rŒ   )NFF)
r|   rŒ   r}   útf.Tensor | Nonerx   rˆ   rr   rˆ   r‰   rŒ   )	r&   r'   r(   r)   r7   rR   rr   r†   Ú__classcell__©r?   s   @r-   r/   r/   b   sY   ø„ ñöXó%)óN
ð< -1ØØ).ðàðð *ðð ð	ð
 #'ðð 
÷r,   r/   c                  ó4   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd„Zˆ xZS )r9   zì
    This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
    `hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
    Transformer.
    c                óâ  •— t        ‰| �  di |¤Ž |j                  |j                  }}|j                  |j
                  }}t        |t        j                  j                  «      r|n||f}t        |t        j                  j                  «      r|n||f}|d   |d   z  |d   |d   z  z  }|| _        || _        || _        || _
        t        j                  j                  |||d¬«      | _        y )Nr   r   Ú
projection)Úkernel_sizeÚstridesr3   r+   )r6   r7   Ú
image_sizer^   Únum_channelsrJ   Ú
isinstanceÚcollectionsÚabcÚIterablerM   r   r:   ÚConv2Dr’   )	r=   r2   r>   r•   r^   r–   rJ   rM   r?   s	           €r-   r7   zTFDeiTPatchEmbeddings.__init__Ö   sæ   ø€ Ü‰ÑÑ"˜6Ò"Ø!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø$*×$7Ñ$7¸×9KÑ9K�kˆä#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔäŸ,™,×-Ñ-Ø Z¸È,ð .ó 
ˆ�r,   c                óü   — t        |«      \  }}}}t        j                  «       r|| j                  k7  rt	        d«      ‚| j                  |«      }t        |«      \  }}}}t        j                  ||||z  |f«      }|S )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)r   rP   Úexecuting_eagerlyr–   Ú
ValueErrorr’   r_   )r=   r|   r   ri   rj   r–   Úxs          r-   r†   zTFDeiTPatchEmbeddings.callç   s€   € Ü2<¸\Ó2JÑ/ˆ
�F˜E <Ü×ÑÔ! l°d×6GÑ6GÒ&GÜØwóð ð �O‰O˜LÓ)ˆÜ2<¸Q³-Ñ/ˆ
�F˜E <Ü�J‰J�q˜: v°¡~°|ÐDÓEˆØˆr,   c                ó  — | j                   ry 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   y xY w)NTr’   )rN   rO   rP   rQ   r’   r3   rR   r–   ©r=   rS   s     r-   rR   zTFDeiTPatchEmbeddings.buildó   s}   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ MØ—‘×%Ñ% t¨T°4¸×9JÑ9JÐ&KÔL÷Mð Mð 9÷Mð Mús   Á*A?Á?B©r2   r   r‰   rŠ   )r|   rŒ   r‰   rŒ   r‹   ©r&   r'   r(   r)   r7   r†   rR   rŽ   r�   s   @r-   r9   r9   Ï   s   ø„ ñõ
ó"
÷Mr,   r9   c                  óN   ‡ — e Zd Zdˆ fd„Zdd„Z	 d	 	 	 	 	 	 	 	 	 dd„Zd	d„Zˆ xZS )
ÚTFDeiTSelfAttentionc                ó   •— t        ‰| �  d
i |¤Ž |j                  |j                  z  dk7  r&t	        d|j                  › d|j                  › d�«      ‚|j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _        t        j                  | j                  «      | _
        t        j                  j                  | j                  t        |j                  «      d¬«      | _        t        j                  j                  | j                  t        |j                  «      d¬«      | _        t        j                  j                  | j                  t        |j                  «      d¬«      | _        t        j                  j'                  |j(                  ¬	«      | _        || _        y )Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (ú)Úquery©ÚunitsÚkernel_initializerr3   ÚkeyÚvalue©Úrater+   )r6   r7   rJ   Únum_attention_headsrž   r`   Úattention_head_sizeÚall_head_sizera   rb   Úsqrt_att_head_sizer   r:   ÚDenser   Úinitializer_ranger¨   r¬   r­   r;   Úattention_probs_dropout_probr4   r2   ©r=   r2   r>   r?   s      €r-   r7   zTFDeiTSelfAttention.__init__þ   s†  ø€ Ü‰ÑÑ"˜6Ò"à×Ñ × :Ñ :Ñ:¸aÒ?ÜØ# F×$6Ñ$6Ð#7ð 8'Ø'-×'AÑ'AÐ&BÀ!ðEóð ð
 $*×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔÜ"&§)¡)¨D×,DÑ,DÓ"EˆÔä—\‘\×'Ñ'Ø×$Ñ$¼È×IaÑIaÓ9bÐipð (ó 
ˆŒ
ô —<‘<×%Ñ%Ø×$Ñ$¼È×IaÑIaÓ9bÐinð &ó 
ˆŒô —\‘\×'Ñ'Ø×$Ñ$¼È×IaÑIaÓ9bÐipð (ó 
ˆŒ
ô —|‘|×+Ñ+°×1TÑ1TÐ+ÓUˆŒØˆ�r,   c                ó’   — t        j                  ||d| j                  | j                  f¬«      }t        j                  |g d¢¬«      S )NrU   ©ÚtensorrB   ©r   rG   r   r   rZ   )rP   r_   r°   r±   re   )r=   rº   r   s      r-   Útranspose_for_scoresz(TFDeiTSelfAttention.transpose_for_scores  s;   € ä—‘ 6°*¸bÀ$×BZÑBZÐ\`×\tÑ\tÐ1uÔvˆô �|‰|˜FªÔ6Ð6r,   c                óØ  — t        |«      d   }| j                  |¬«      }| j                  |¬«      }| j                  |¬«      }| j	                  ||«      }	| j	                  ||«      }
| j	                  ||«      }t        j                  |	|
d¬«      }t        j                  | j                  |j                  ¬«      }t        j                  ||«      }t        |d¬«      }| j                  ||¬«      }|�t        j                  ||«      }t        j                  ||«      }t        j                  |g d	¢¬
«      }t        j                  ||d| j                   f¬«      }|r||f}|S |f}|S )Nr   ©ÚinputsT)Útranspose_brt   rU   )r!   r]   ©r¿   rx   r»   rZ   r¹   )r   r¨   r¬   r­   r¼   rP   Úmatmulrz   r³   ru   Údivider   r4   Úmultiplyre   r_   r²   )r=   r$   Ú	head_maskÚoutput_attentionsrx   r   Úmixed_query_layerÚmixed_key_layerÚmixed_value_layerÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚdkÚattention_probsÚattention_outputÚoutputss                    r-   r†   zTFDeiTSelfAttention.call  se  € ô   Ó.¨qÑ1ˆ
Ø ŸJ™J¨m˜JÓ<ÐØŸ(™(¨-˜(Ó8ˆØ ŸJ™J¨m˜JÓ<ÐØ×/Ñ/Ð0AÀ:ÓNˆØ×-Ñ-¨o¸zÓJˆ	Ø×/Ñ/Ð0AÀ:ÓNˆô Ÿ9™9 [°)ÈÔNÐÜ�W‰W�T×,Ñ,Ð4D×4JÑ4JÔKˆÜŸ9™9Ð%5°rÓ:Ðô )Ð0@ÀrÔJˆð Ÿ,™,¨oÈ˜,ÓQˆð Ð Ü Ÿk™k¨/¸9ÓEˆOäŸ9™9 _°kÓBÐÜŸ<™<Ð(8º|ÔLÐô Ÿ:™:Ð-=ÀjÐRTÐVZ×VhÑVhÐEiÔjÐÙ9JÐ# _Ð5ˆàˆð RbÐPcˆàˆr,   c                ó  — | j                   ry d| _         t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 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­   )rN   rO   rP   rQ   r¨   r3   rR   r2   rJ   r¬   r­   r¡   s     r-   rR   zTFDeiTSelfAttention.buildH  s9  € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ HØ—
‘
× Ñ  $¨¨d¯k©k×.EÑ.EÐ!FÔG÷Hä�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ FØ—‘—‘  d¨D¯K©K×,CÑ,CÐDÔE÷Fä�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ HØ—
‘
× Ñ  $¨¨d¯k©k×.EÑ.EÐ!FÔG÷Hð Hð 4÷Hð Hú÷Fð Fú÷Hð Hús$   Á3E*Â<3E6Ä-3FÅ*E3Å6E?ÆF©r2   r   )rº   rŒ   r   r`   r‰   rŒ   r‡   ©
r$   rŒ   rÅ   rŒ   rÆ   rˆ   rx   rˆ   r‰   úTuple[tf.Tensor]r‹   )r&   r'   r(   r7   r¼   r†   rR   rŽ   r�   s   @r-   r¥   r¥   ý   sN   ø„ õó47ð ð'à ð'ð ð'ð  ð	'ð
 ð'ð 
ó'÷RHr,   r¥   c                  ó6   ‡ — e Zd ZdZdˆ fd„Zddd„Zdd„Zˆ xZS )	ÚTFDeiTSelfOutputz£
    The residual connection is defined in TFDeiTLayer instead of here (as is the case with other models), due to the
    layernorm applied before each block.
    c                ó  •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  t        |j                  «      d¬«      | _        t        j                  j                  |j                  ¬«      | _        || _        y ©NÚdenser©   r®   r+   ©r6   r7   r   r:   r´   rJ   r   rµ   rÚ   r;   r<   r4   r2   r·   s      €r-   r7   zTFDeiTSelfOutput.__init__^  óo   ø€ Ü‰ÑÑ"˜6Ò"ä—\‘\×'Ñ'Ø×$Ñ$¼È×IaÑIaÓ9bÐipð (ó 
ˆŒ
ô —|‘|×+Ñ+°×1KÑ1KÐ+ÓLˆŒØˆ�r,   c                óP   — | j                  |¬«      }| j                  ||¬«      }|S ©Nr¾   rÁ   ©rÚ   r4   ©r=   r$   Úinput_tensorrx   s       r-   r†   zTFDeiTSelfOutput.callg  s*   € ØŸ
™
¨-˜
Ó8ˆØŸ™¨MÀH˜ÓMˆàÐr,   c                ó(  — | j                   ry d| _         t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   y xY w©NTrÚ   ©	rN   rO   rP   rQ   rÚ   r3   rR   r2   rJ   r¡   s     r-   rR   zTFDeiTSelfOutput.buildm  ó}   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ HØ—
‘
× Ñ  $¨¨d¯k©k×.EÑ.EÐ!FÔG÷Hð Hð 4÷Hð Húó   Á3BÂBrÓ   r‡   ©r$   rŒ   rá   rŒ   rx   rˆ   r‰   rŒ   r‹   r£   r�   s   @r-   r×   r×   X  s   ø„ ñõ
ô÷Hr,   r×   c                  óL   ‡ — e Zd Zdˆ fd„Zd„ Z	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )	ÚTFDeiTAttentionc                ól   •— t        ‰| �  di |¤Ž t        |d¬«      | _        t	        |d¬«      | _        y )NÚ	attentionr5   Úoutputr+   )r6   r7   r¥   Úself_attentionr×   Údense_outputr·   s      €r-   r7   zTFDeiTAttention.__init__x  s1   ø€ Ü‰ÑÑ"˜6Ò"ä1°&¸{ÔKˆÔÜ,¨V¸(ÔCˆÕr,   c                ó   — t         ‚r‹   ©ÚNotImplementedError)r=   Úheadss     r-   Úprune_headszTFDeiTAttention.prune_heads~  s   € Ü!Ð!r,   c                óp   — | j                  ||||¬«      }| j                  |d   ||¬«      }|f|dd  z   }|S )N©r$   rÅ   rÆ   rx   r   ©r$   rá   rx   r   )rí   rî   )r=   rá   rÅ   rÆ   rx   Úself_outputsrÐ   rÑ   s           r-   r†   zTFDeiTAttention.call�  sb   € ð ×*Ñ*Ø&°)ÐO`Ðksð +ó 
ˆð  ×,Ñ,Ø& q™/¸Èxð -ó 
Ðð $Ð%¨°Q°RÐ(8Ñ8ˆàˆ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î   )rN   rO   rP   rQ   rí   r3   rR   rî   r¡   s     r-   rR   zTFDeiTAttention.build’  s¾   € Ø�:Š:ØØˆŒ
Ü�4Ð)¨4Ó0Ð<Ü—‘˜t×2Ñ2×7Ñ7Ó8ñ 0Ø×#Ñ#×)Ñ)¨$Ô/÷0ä�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ .Ø×!Ñ!×'Ñ'¨Ô-÷.ð .ð ;÷0ð 0ú÷.ð .úó   ÁCÂ%CÃCÃC rÓ   r‡   )
rá   rŒ   rÅ   rŒ   rÆ   rˆ   rx   rˆ   r‰   rÕ   r‹   )r&   r'   r(   r7   ró   r†   rR   rŽ   r�   s   @r-   ré   ré   w  sM   ø„ õDò"ð ðàðð ðð  ð	ð
 ðð 
ó÷"	.r,   ré   c                  ó0   ‡ — e Zd Zdˆ fd„Zdd„Zdd„Zˆ xZS )ÚTFDeiTIntermediatec                óT  •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  t        |j                  «      d¬«      | _        t        |j                  t        «      r"t        |j                  «      | _        || _        y |j                  | _        || _        y )NrÚ   r©   r+   )r6   r7   r   r:   r´   Úintermediate_sizer   rµ   rÚ   r—   Ú
hidden_actÚstrr	   Úintermediate_act_fnr2   r·   s      €r-   r7   zTFDeiTIntermediate.__init__   sŒ   ø€ Ü‰ÑÑ"˜6Ò"ä—\‘\×'Ñ'Ø×*Ñ*¼Èv×OgÑOgÓ?hÐovð (ó 
ˆŒ
ô �f×'Ñ'¬Ô-Ü'8¸×9JÑ9JÓ'KˆDÔ$ð ˆ�ð (.×'8Ñ'8ˆDÔ$Øˆ�r,   c                óL   — | j                  |¬«      }| j                  |«      }|S )Nr¾   )rÚ   r   )r=   r$   s     r-   r†   zTFDeiTIntermediate.call­  s(   € ØŸ
™
¨-˜
Ó8ˆØ×0Ñ0°Ó?ˆàÐr,   c                ó(  — | j                   ry d| _         t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   y xY wrã   rä   r¡   s     r-   rR   zTFDeiTIntermediate.build³  rå   ræ   rÓ   ©r$   rŒ   r‰   rŒ   r‹   ©r&   r'   r(   r7   r†   rR   rŽ   r�   s   @r-   rû   rû   Ÿ  s   ø„ õó÷Hr,   rû   c                  ó2   ‡ — e Zd Zdˆ fd„Zddd„Zdd„Zˆ xZS )ÚTFDeiTOutputc                ó  •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  t        |j                  «      d¬«      | _        t        j                  j                  |j                  ¬«      | _        || _        y rÙ   rÛ   r·   s      €r-   r7   zTFDeiTOutput.__init__¾  rÜ   r,   c                óZ   — | j                  |¬«      }| j                  ||¬«      }||z   }|S rÞ   rß   rà   s       r-   r†   zTFDeiTOutput.callÇ  s4   € ØŸ
™
¨-˜
Ó8ˆØŸ™¨MÀH˜ÓMˆØ%¨Ñ4ˆàÐr,   c                ó(  — | j                   ry d| _         t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   y xY wrã   )	rN   rO   rP   rQ   rÚ   r3   rR   r2   rý   r¡   s     r-   rR   zTFDeiTOutput.buildÎ  s}   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ NØ—
‘
× Ñ  $¨¨d¯k©k×.KÑ.KÐ!LÔM÷Nð Nð 4÷Nð Núræ   rÓ   r‡   rç   r‹   r  r�   s   @r-   r  r  ½  s   ø„ õô÷Nr,   r  c                  óJ   ‡ — e Zd ZdZdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )	ÚTFDeiTLayerz?This corresponds to the Block class in the timm implementation.c                ó^  •— t        ‰| �  di |¤Ž t        |d¬«      | _        t	        |d¬«      | _        t        |d¬«      | _        t        j                  j                  |j                  d¬«      | _        t        j                  j                  |j                  d¬«      | _        || _        y )	Nrë   r5   Úintermediaterì   Úlayernorm_before©Úepsilonr3   Úlayernorm_afterr+   )r6   r7   ré   rë   rû   r  r  Údeit_outputr   r:   ÚLayerNormalizationÚlayer_norm_epsr  r  r2   r·   s      €r-   r7   zTFDeiTLayer.__init__Ú  sŒ   ø€ Ü‰ÑÑ"˜6Ò"ä(¨°kÔBˆŒÜ.¨v¸NÔKˆÔÜ'¨°XÔ>ˆÔä %§¡× ?Ñ ?È×H]ÑH]ÐdvÐ ?Ó wˆÔÜ$Ÿ|™|×>Ñ>Àv×G\ÑG\ÐctÐ>ÓuˆÔØˆ�r,   c                óì   — | j                  | j                  ||¬«      |||¬«      }|d   }||z   }| j                  ||¬«      }| j                  ||¬«      }| j	                  |||¬«      }|f|dd  z   }	|	S )NrÁ   )rá   rÅ   rÆ   rx   r   )r$   rx   rö   r   )rë   r  r  r  r  )
r=   r$   rÅ   rÆ   rx   Úattention_outputsrÐ   Úlayer_outputÚintermediate_outputrÑ   s
             r-   r†   zTFDeiTLayer.callå  sµ   € ð !ŸN™Nà×.Ñ.°mÈhÐ.ÓWØØ/Øð +ó 
Ðð -¨QÑ/Ðð )¨=Ñ8ˆð ×+Ñ+°=È8Ð+ÓTˆà"×/Ñ/¸lÐU]Ð/Ó^Ðð ×'Ñ'Ø-¸MÐT\ð (ó 
ˆð  �/Ð$5°a°bÐ$9Ñ9ˆàˆ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 «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   �Œ¢xY w# 1 sw Y   �ŒUx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  r  )rN   rO   rP   rQ   rë   r3   rR   r  r  r  r2   rJ   r  r¡   s     r-   rR   zTFDeiTLayer.build  sÖ  € Ø�:Š:ØØˆŒ
Ü�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ä�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ .Ø×!Ñ!×'Ñ'¨Ô-÷.ä�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ -Ø× Ñ ×&Ñ& tÔ,÷-ä�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ SØ×%Ñ%×+Ñ+¨T°4¸¿¹×9PÑ9PÐ,QÔR÷Sä�4Ð*¨DÓ1Ð=Ü—‘˜t×3Ñ3×8Ñ8Ó9ñ RØ×$Ñ$×*Ñ*¨D°$¸¿¹×8OÑ8OÐ+PÔQ÷Rð Rð >÷+ñ +ú÷.ñ .ú÷-ñ -ú÷Sð Sú÷Rð Rús<   ÁHÂ%HÃ?H!Å3H.Ç
3H:ÈHÈHÈ!H+È.H7È:IrÓ   r‡   rÔ   r‹   r£   r�   s   @r-   r  r  ×  sL   ø„ ÙIõ	ð  ðà ðð ðð  ð	ð
 ðð 
ó÷@Rr,   r  c                  óN   ‡ — e Zd Zdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚTFDeiTEncoderc                óš   •— t        ‰| �  di |¤Ž t        |j                  «      D �cg c]  }t	        |d|› �¬«      ‘Œ c}| _        y c c}w )Nzlayer_._r5   r+   )r6   r7   ÚrangeÚnum_hidden_layersr  Úlayer)r=   r2   r>   Úir?   s       €r-   r7   zTFDeiTEncoder.__init__  s@   ø€ Ü‰ÑÑ"˜6Ò"äHMÈf×NfÑNfÓHgÖhÀ1”k &°¸!¸¨~Ö>Òhˆ�
ùÒhs   ¨Ac                óþ   — |rdnd }|rdnd }t        | j                  «      D ]-  \  }	}
|r||fz   } |
|||	   ||¬«      }|d   }|sŒ%||d   fz   }Œ/ |r||fz   }|st        d„ |||fD «       «      S t        |||¬«      S )Nr+   rõ   r   r   c              3  ó&   K  — | ]	  }|€Œ|–— Œ y ­wr‹   r+   )Ú.0Úvs     r-   ú	<genexpr>z%TFDeiTEncoder.call.<locals>.<genexpr>A  s   è ø€ Òh˜qÐZ[ÑZgœÑhùs   ‚Š)Úlast_hidden_stater$   r%   )Ú	enumerater  Útupler
   )r=   r$   rÅ   rÆ   Úoutput_hidden_statesÚreturn_dictrx   Úall_hidden_statesÚall_attentionsr   Úlayer_moduleÚlayer_outputss               r-   r†   zTFDeiTEncoder.call!  sÆ   € ñ #7™B¸DÐÙ0™°dˆä(¨¯©Ó4ò 	F‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!á(Ø+Ø# A™,Ø"3Ø!ô	ˆMð *¨!Ñ,ˆMâ Ø!/°=ÀÑ3CÐ2EÑ!E‘ð	Fñ   Ø 1°]Ð4DÑ DÐáÜÑh ]Ð4EÀ~Ð$VÔhÓhÐhä Ø+Ð;LÐYgô
ð 	
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  )rN   rO   r  rP   rQ   r3   rR   )r=   rS   r  s      r-   rR   zTFDeiTEncoder.buildG  sp   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð 4÷&ð &ús   ÁA.Á.A7	rÓ   r‡   )r$   rŒ   rÅ   rŒ   rÆ   rˆ   r)  rˆ   r*  rˆ   rx   rˆ   r‰   z*Union[TFBaseModelOutput, Tuple[tf.Tensor]]r‹   r  r�   s   @r-   r  r    s]   ø„ õið ð$
à ð$
ð ð$
ð  ð	$
ð
 #ð$
ð ð$
ð ð$
ð 
4ó$
÷L&r,   r  c                  ó˜   ‡ — e Zd ZeZ	 d	 	 	 	 	 	 	 dˆ fd„Zd	d„Zd„ Zd„ Ze		 	 	 	 	 	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z
dd„Zˆ xZS )ÚTFDeiTMainLayerc                ó  •— t        ‰| �  di |¤Ž || _        t        ||d¬«      | _        t        |d¬«      | _        t        j                  j                  |j                  d¬«      | _        |rt        |d¬«      | _        y d | _        y )	Nrh   )r8   r3   Úencoderr5   Ú	layernormr  Úpoolerr+   )r6   r7   r2   r/   rh   r  r3  r   r:   r  r  r4  ÚTFDeiTPoolerr5  ©r=   r2   Úadd_pooling_layerr8   r>   r?   s        €r-   r7   zTFDeiTMainLayer.__init__U  st   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒä*¨6À.ÐWcÔdˆŒÜ$ V°)Ô<ˆŒäŸ™×8Ñ8À×AVÑAVÐ]hÐ8ÓiˆŒÙ=N”l 6°Ô9ˆ�ÐTXˆ�r,   c                ó.   — | j                   j                  S r‹   )rh   r1   )r=   s    r-   Úget_input_embeddingsz$TFDeiTMainLayer.get_input_embeddingsa  s   € Ø�‰×/Ñ/Ð/r,   c                ó   — t         ‚)z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        rð   )r=   Úheads_to_prunes     r-   Ú_prune_headszTFDeiTMainLayer._prune_headsd  s
   € ô
 "Ð!r,   c                óJ   — |�t         ‚d g| j                  j                  z  }|S r‹   )rñ   r2   r  )r=   rÅ   s     r-   Úget_head_maskzTFDeiTMainLayer.get_head_maskk  s*   € ØÐ Ü%Ð%à˜ §¡×!>Ñ!>Ñ>ˆIàÐr,   c	                ó<  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚t        j                  |d«      }| j                  |«      }| j                  ||||¬«      }	| j                  |	|||||¬«      }
|
d   }| j                  ||¬«      }| j                  �| j                  ||¬«      nd }|s|�||fn|f}||
dd  z   S t        |||
j                  |
j                  ¬«      S )	Nz You have to specify pixel_valuesrY   )r}   rx   rr   )rÅ   rÆ   r)  r*  rx   r   rw   r   )r&  Úpooler_outputr$   r%   )r2   rÆ   r)  Úuse_return_dictrž   rP   re   r?  rh   r3  r4  r5  r   r$   r%   )r=   r|   r}   rÅ   rÆ   r)  r*  rr   rx   Úembedding_outputÚencoder_outputsÚsequence_outputÚpooled_outputÚhead_outputss                 r-   r†   zTFDeiTMainLayer.calls  sZ  € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ?Ó@Ð@ô —|‘| L°,Ó?ˆð ×&Ñ& yÓ1ˆ	àŸ?™?ØØ+ØØ%=ð	 +ó 
Ðð Ÿ,™,ØØØ/Ø!5Ø#Øð 'ó 
ˆð *¨!Ñ,ˆØŸ.™.¨À8˜.ÓLˆØKOÏ;É;ÐKb˜Ÿ™ O¸h˜ÔGÐhlˆáØ?LÐ?X˜O¨]Ñ;Ð_nÐ^pˆLØ /°!°"Ð"5Ñ5Ð5ä+Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
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 «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   �Œ1xY w# 1 sw Y   ŒãxY w# 1 sw Y   Œ~xY w# 1 sw Y   y xY w)NTrh   r3  r4  r5  )rN   rO   rP   rQ   rh   r3   rR   r3  r4  r2   rJ   r5  r¡   s     r-   rR   zTFDeiTMainLayer.build±  sb  € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ LØ—‘×$Ñ$ d¨D°$·+±+×2IÑ2IÐ%JÔK÷Lä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ (Ø—‘×!Ñ! $Ô'÷(ð (ð 5÷,ñ ,ú÷)ð )ú÷Lð Lú÷(ð (ús0   ÁFÂ%F#Ã?3F/Å0F;ÆF Æ#F,Æ/F8Æ;G©TF©r2   r   r8  rˆ   r8   rˆ   r‰   rŠ   )r‰   r9   ©NNNNNNFF)r|   r�   r}   r�   rÅ   r�   rÆ   úOptional[bool]r)  rL  r*  rL  rr   rˆ   rx   rˆ   r‰   z:Union[TFBaseModelOutputWithPooling, Tuple[tf.Tensor, ...]]r‹   )r&   r'   r(   r   Úconfig_classr7   r:  r=  r?  r   r†   rR   rŽ   r�   s   @r-   r1  r1  Q  sÕ   ø„ à€Lð Z_ð
YØ ð
YØ59ð
YØRVð
Yà	õ
Yó0ò"òð ð *.Ø,0Ø&*Ø,0Ø/3Ø&*Ø).Øð;
à&ð;
ð *ð;
ð $ð	;
ð
 *ð;
ð -ð;
ð $ð;
ð #'ð;
ð ð;
ð 
Dò;
ó ð;
÷z(r,   r1  c                  ó   — e Zd ZdZeZdZdZy)ÚTFDeiTPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Údeitr|   N)r&   r'   r(   r)   r   rM  Úbase_model_prefixÚmain_input_namer+   r,   r-   rO  rO  Ä  s   „ ñð
 €LØÐØ$�Or,   rO  aR  
    This model is a TensorFlow
    [keras.layers.Layer](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Layer). Use it as a regular
    TensorFlow Module and refer to the TensorFlow documentation for all matter related to general usage and behavior.

    Parameters:
        config ([`DeiTConfig`]): 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 [`~PreTrainedModel.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
            [`DeiTImageProcessor.__call__`] for details.

        head_mask (`tf.Tensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        interpolate_pos_encoding (`bool`, *optional*, defaults to `False`):
            Whether to interpolate the pre-trained position encodings.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
z^The bare DeiT Model transformer outputting raw hidden-states without any specific head on top.c            	      ó¶   ‡ — e Zd Z	 d	 	 	 	 	 	 	 dˆ fd„Ze ee«       eee	e
de¬«      	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„«       «       «       Zd
d„Zˆ xZS )ÚTFDeiTModelc                óN   •— t        ‰| �  |fi |¤Ž t        |||d¬«      | _        y )NrP  ©r8  r8   r3   )r6   r7   r1  rP  r7  s        €r-   r7   zTFDeiTModel.__init__ø  s.   ø€ ô 	‰Ñ˜Ñ* 6Ò*ä#ØÐ&7ÈÐ]cô
ˆ�	r,   Úvision)Ú
checkpointÚoutput_typerM  ÚmodalityÚexpected_outputc	           
     ó8   — | j                  ||||||||¬«      }	|	S )N)r|   r}   rÅ   rÆ   r)  r*  rr   rx   )rP  )
r=   r|   r}   rÅ   rÆ   r)  r*  rr   rx   rÑ   s
             r-   r†   zTFDeiTModel.call  s6   € ð( —)‘)Ø%Ø+ØØ/Ø!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)NTrP  )rN   rO   rP   rQ   rP  r3   rR   r¡   s     r-   rR   zTFDeiTModel.build!  se   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ð &ð 3÷&ð &ús   ÁA1Á1A:rI  rJ  rK  )r|   r�   r}   r�   rÅ   r�   rÆ   rL  r)  rL  r*  rL  rr   rˆ   rx   rˆ   r‰   z*Union[Tuple, TFBaseModelOutputWithPooling]r‹   )r&   r'   r(   r7   r   r   ÚDEIT_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr†   rR   rŽ   r�   s   @r-   rT  rT  ó  så   ø„ ð Z_ð
Ø ð
Ø59ð
ØRVð
à	õ
ð Ù*Ð+@ÓAÙØ&Ø0Ø$ØØ.ôð *.Ø,0Ø&*Ø,0Ø/3Ø&*Ø).Øðà&ðð *ðð $ð	ð
 *ðð -ðð $ðð #'ðð ðð 
4òóó Bó ð÷.&r,   rT  c                  ó0   ‡ — e Zd Zdˆ fd„Zdd„Zdd„Zˆ xZS )r6  c                óÐ   •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  t        |j                  «      |j                  d¬«      | _	        || _
        y )NrÚ   )rª   r«   Ú
activationr3   r+   )r6   r7   r   r:   r´   Úpooler_output_sizer   rµ   Ú
pooler_actrÚ   r2   r·   s      €r-   r7   zTFDeiTPooler.__init__,  sZ   ø€ Ü‰ÑÑ"˜6Ò"ä—\‘\×'Ñ'Ø×+Ñ+Ü.¨v×/GÑ/GÓHØ×(Ñ(Øð	 (ó 
ˆŒ
ð ˆ�r,   c                ó<   — |d d …df   }| j                  |¬«      }|S )Nr   r¾   )rÚ   )r=   r$   Úfirst_token_tensorrF  s       r-   r†   zTFDeiTPooler.call7  s*   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð*<˜
Ó=ˆàÐr,   c                ó(  — | j                   ry d| _         t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   y xY wrã   rä   r¡   s     r-   rR   zTFDeiTPooler.build?  rå   ræ   rÓ   r  r‹   r  r�   s   @r-   r6  r6  +  s   ø„ õ	ó÷Hr,   r6  c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )ÚTFDeitPixelShufflez0TF layer implementation of torch.nn.PixelShufflec                óx   •— t        ‰| �  di |¤Ž t        |t        «      r|dk  rt	        d|› �«      ‚|| _        y )NrG   z1upscale_factor must be an integer value >= 2 got r+   )r6   r7   r—   r`   rž   Úupscale_factor)r=   rm  r>   r?   s      €r-   r7   zTFDeitPixelShuffle.__init__K  sA   ø€ Ü‰ÑÑ"˜6Ò"Ü˜.¬#Ô.°.À1Ò2DÜÐPÐQ_ÐP`ÐaÓbÐbØ,ˆÕr,   c           
     ó®  — |}t        |«      \  }}}}| j                  dz  }t        ||z  «      }t        j                  t        |«      D ��	cg c]  }t        |«      D ]
  }	||	|z  z   ‘Œ Œ c}	}g«      }
t        j                  |t        j                  |
|dg«      d¬«      }t        j                  j                  || j                  d¬«      }|S c c}	}w )NrG   r   rU   )ÚparamsÚindicesÚ
batch_dimsÚNHWC)Ú
block_sizeÚdata_format)
r   rm  r`   rP   Úconstantr  Úgatherry   ÚnnÚdepth_to_space)r=   rŸ   r$   r   r~   Únum_input_channelsÚblock_size_squaredÚoutput_depthr   ÚjÚpermutations              r-   r†   zTFDeitPixelShuffle.callQ  sÙ   € ØˆÜ/9¸-Ó/HÑ,ˆ
�A�qÐ,Ø!×0Ñ0°!Ñ3ÐÜÐ-Ð0BÑBÓCˆô
 —k‘kÜ27Ð8JÓ2K×i¨QÔUZÐ[gÓUhÒiÐPQˆa�!Ð(Ñ(Ó(ÐiÐ(ÓiÐjó
ˆô Ÿ	™	¨ÄÇÁÈÐV`ÐbcÐUdÓ@eÐrtÔuˆÜŸ™×,Ñ,¨]Àt×GZÑGZÐhnÐ,ÓoˆØÐùó	 js   ÁC
)rm  r`   r‰   rŠ   )rŸ   rŒ   r‰   rŒ   )r&   r'   r(   r)   r7   r†   rŽ   r�   s   @r-   rk  rk  H  s   ø„ Ù:õ-÷r,   rk  c                  ó2   ‡ — e Zd Zdˆ fd„Zddd„Zdd„Zˆ xZS )ÚTFDeitDecoderc                óì   •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  dz  |j                  z  dd¬«      | _        t        |j
                  d¬«      | _	        || _
        y )NrG   r   Ú0)Úfiltersr“   r3   Ú1r5   r+   )r6   r7   r   r:   r›   Úencoder_strider–   Úconv2drk  Úpixel_shuffler2   r·   s      €r-   r7   zTFDeitDecoder.__init__c  sk   ø€ Ü‰ÑÑ"˜6Ò"Ü—l‘l×)Ñ)Ø×)Ñ)¨1Ñ,¨v×/BÑ/BÑBÐPQÐX[ð *ó 
ˆŒô 0°×0EÑ0EÈCÔPˆÔØˆ�r,   c                óN   — |}| j                  |«      }| j                  |«      }|S r‹   )r…  r†  )r=   r¿   rx   r$   s       r-   r†   zTFDeitDecoder.callk  s+   € ØˆØŸ™ MÓ2ˆØ×*Ñ*¨=Ó9ˆØÐr,   c                óö  — | j                   ry d| _         t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d d | j                  j                  g«       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†  )
rN   rO   rP   rQ   r…  r3   rR   r2   rJ   r†  r¡   s     r-   rR   zTFDeitDecoder.buildq  sÐ   € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ OØ—‘×!Ñ! 4¨¨t°T·[±[×5LÑ5LÐ"MÔN÷Oä�4˜¨$Ó/Ð;Ü—‘˜t×1Ñ1×6Ñ6Ó7ñ /Ø×"Ñ"×(Ñ(¨Ô.÷/ð /ð <÷Oð Oú÷/ð /ús   Á4C#Â=C/Ã#C,Ã/C8r¢   r‡   )r¿   rŒ   rx   rˆ   r‰   rŒ   r‹   r  r�   s   @r-   r  r  b  s   ø„ õô÷	/r,   r  zvDeiT Model with a decoder on top for masked image modeling, as proposed in [SimMIM](https://arxiv.org/abs/2111.09886).c                  óž   ‡ — e Zd Zdˆ fd„Ze ee«       eee	¬«      	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Z
dd„Zˆ xZS )	ÚTFDeiTForMaskedImageModelingc                óp   •— t         ‰| �  |«       t        |ddd¬«      | _        t	        |d¬«      | _        y )NFTrP  rV  Údecoderr5   )r6   r7   r1  rP  r  rŒ  ©r=   r2   r?   s     €r-   r7   z%TFDeiTForMaskedImageModeling.__init__ƒ  s2   ø€ Ü‰Ñ˜Ô ä# F¸eÐTXÐ_eÔfˆŒ	Ü$ V°)Ô<ˆ�r,   ©rY  rM  c	           
     óò  — |�|n| j                   j                  }| j                  ||||||||¬«      }	|	d   }
|
dd…dd…f   }
t        |
«      \  }}}t	        |dz  «      x}}t        j                  |
||||f«      }
| j                  |
|¬«      }t        j                  |d«      }d}|��–| j                   j                  | j                   j                  z  }t        j                  |d||f«      }t        j                  || j                   j                  d«      }t        j                  || j                   j                  d	«      }t        j                  |d«      }t        j                  |t
        j                  «      }t        j                   j#                  t        j                  |d
«      t        j                  |d
«      «      }t        j                  |d«      }t        j$                  ||z  «      }t        j$                  |«      dz   | j                   j&                  z  }||z  }t        j                  |d«      }|s|f|	dd z   }|�|f|z   S |S t)        |||	j*                  |	j,                  ¬«      S )a‚  
        bool_masked_pos (`tf.Tensor` of type bool and shape `(batch_size, num_patches)`):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).

        Returns:

        Examples:
        ```python
        >>> from transformers import AutoImageProcessor, TFDeiTForMaskedImageModeling
        >>> import tensorflow as tf
        >>> 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/deit-base-distilled-patch16-224")
        >>> model = TFDeiTForMaskedImageModeling.from_pretrained("facebook/deit-base-distilled-patch16-224")

        >>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
        >>> pixel_values = image_processor(images=image, return_tensors="tf").pixel_values
        >>> # create random boolean mask of shape (batch_size, num_patches)
        >>> bool_masked_pos = tf.cast(tf.random.uniform((1, num_patches), minval=0, maxval=2, dtype=tf.int32), tf.bool)

        >>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
        >>> loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction
        >>> list(reconstructed_pixel_values.shape)
        [1, 3, 224, 224]
        ```N)r}   rÅ   rÆ   r)  r*  rr   rx   r   r   rU   g      à?rw   )r   r   r   rG   rG   )r   rG   r   r   gñhãˆµøä>)r   )ÚlossÚreconstructionr$   r%   )r2   rB  rP  r   r`   rP   r_   rŒ  re   r•   r^   r{   rg   rz   Úfloat32r   ÚlossesÚmean_absolute_errorÚ
reduce_sumr–   r   r$   r%   )r=   r|   r}   rÅ   rÆ   r)  r*  rr   rx   rÑ   rE  r   Úsequence_lengthr–   ri   rj   Úreconstructed_pixel_valuesÚmasked_im_lossrW   r‚   Úreconstruction_lossÚ
total_lossÚnum_masked_pixelsrì   s                           r-   r†   z!TFDeiTForMaskedImageModeling.call‰  sU  € ðV &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØ+ØØ/Ø!5Ø#Ø%=Øð ó 	
ˆð " !™*ˆð *ª!¨Q¨r¨T¨'Ñ2ˆÜ4>¸Ó4OÑ1ˆ
�O \Ü˜_¨cÑ1Ó2Ð2ˆ�ÜŸ*™* _°zÀ6È5ÐR^Ð6_Ó`ˆð &*§\¡\°/ÈH \Ó%UÐ"ô &(§\¡\Ð2LÈlÓ%[Ð"àˆØÑ&Ø—;‘;×)Ñ)¨T¯[©[×-CÑ-CÑCˆDÜ Ÿj™j¨¸2¸tÀTÐ:JÓKˆOÜ—9‘9˜_¨d¯k©k×.DÑ.DÀaÓHˆDÜ—9‘9˜T 4§;¡;×#9Ñ#9¸1Ó=ˆDÜ—>‘> $¨Ó*ˆDÜ—7‘7˜4¤§¡Ó,ˆDä"'§,¡,×"BÑ"Bä—‘˜\¨<Ó8Ü—‘Ð7¸ÓFó#Ðô
 #%§.¡.Ð1DÀaÓ"HÐÜŸ™Ð':¸TÑ'AÓBˆJÜ!#§¡¨tÓ!4°tÑ!;¸t¿{¹{×?WÑ?WÑ WÐØ'Ð*;Ñ;ˆNÜŸZ™Z¨¸Ó=ˆNáØ0Ð2°W¸Q¸R°[Ñ@ˆFØ3AÐ3M�^Ð%¨Ñ.ÐYÐSYÐYä*ØØ5Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
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)NTrP  rŒ  )rN   rO   rP   rQ   rP  r3   rR   rŒ  r¡   s     r-   rR   z"TFDeiTForMaskedImageModeling.buildï  s±   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ð )ð 6÷&ð &ú÷)ð )úrù   r¢   rK  )r|   r�   r}   r�   rÅ   r�   rÆ   rL  r)  rL  r*  rL  rr   rˆ   rx   rˆ   r‰   z)Union[tuple, TFMaskedImageModelingOutput]r‹   )r&   r'   r(   r7   r   r   r^  r   r   r`  r†   rR   rŽ   r�   s   @r-   rŠ  rŠ  }  sÀ   ø„ õ=ð Ù*Ð+@ÓAÙÐ+FÐUdÔeð *.Ø,0Ø&*Ø,0Ø/3Ø&*Ø).Øða
à&ða
ð *ða
ð $ð	a
ð
 *ða
ð -ða
ð $ða
ð #'ða
ð ða
ð 
3òa
ó fó Bó ða
÷F	)r,   rŠ  z¥
    DeiT Model transformer with an image classification head on top (a linear layer on top of the final hidden state of
    the [CLS] token) e.g. for ImageNet.
    c                  óž   ‡ — e Zd Zdˆ fd„Ze ee«       eee	¬«      	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Z
dd„Zˆ xZS )	ÚTFDeiTForImageClassificationc                ó:  •— t         ‰| �  |«       |j                  | _        t        |dd¬«      | _        |j                  dkD  r+t
        j                  j                  |j                  d¬«      n t
        j                  j                  dd¬«      | _	        || _
        y )NFrP  ©r8  r3   r   Ú
classifierr5   Úlinear)r6   r7   Ú
num_labelsr1  rP  r   r:   r´   Ú
Activationr¡  r2   r�  s     €r-   r7   z%TFDeiTForImageClassification.__init__  sƒ   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ# F¸eÈ&ÔQˆŒ	ð
 × Ñ  1Ò$ô �L‰L×Ñ˜v×0Ñ0°|ÐÔDä—‘×(Ñ(¨¸Ð(ÓEð 	Œð
 ˆ�r,   rŽ  c	           	     óB  — |�|n| j                   j                  }| j                  |||||||¬«      }	|	d   }
| j                  |
dd…ddd…f   «      }|€dn| j	                  ||«      }|s|f|	dd z   }|�|f|z   S |S t        |||	j                  |	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 regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).

        Returns:

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, TFDeiTForImageClassification
        >>> import tensorflow as tf
        >>> from PIL import Image
        >>> import requests

        >>> keras.utils.set_random_seed(3)  # doctest: +IGNORE_RESULT
        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> # note: we are loading a TFDeiTForImageClassificationWithTeacher from the hub here,
        >>> # so the head will be randomly initialized, hence the predictions will be random
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/deit-base-distilled-patch16-224")
        >>> model = TFDeiTForImageClassification.from_pretrained("facebook/deit-base-distilled-patch16-224")

        >>> inputs = image_processor(images=image, return_tensors="tf")
        >>> outputs = model(**inputs)
        >>> logits = outputs.logits
        >>> # model predicts one of the 1000 ImageNet classes
        >>> predicted_class_idx = tf.math.argmax(logits, axis=-1)[0]
        >>> print("Predicted class:", model.config.id2label[int(predicted_class_idx)])
        Predicted class: little blue heron, Egretta caerulea
        ```N©rÅ   rÆ   r)  r*  rr   rx   r   r   )r�  r!   r$   r%   )r2   rB  rP  r¡  Úhf_compute_lossr   r$   r%   )r=   r|   rÅ   ÚlabelsrÆ   r)  r*  rr   rx   rÑ   rE  r!   r�  rì   s                 r-   r†   z!TFDeiTForImageClassification.call  sÒ   € ð^ &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØØ/Ø!5Ø#Ø%=Øð ó 
ˆð " !™*ˆà—‘ ²°A²q°Ñ!9Ó:ˆð �~‰t¨4×+?Ñ+?ÀÈÓ+OˆáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä&ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r,   c                óô  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   Œ|xY w# 1 sw Y   y xY w)NTrP  r¡  )
rN   rO   rP   rQ   rP  r3   rR   r¡  r2   rJ   r¡   s     r-   rR   z"TFDeiTForImageClassification.build^  sÇ   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ä�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ MØ—‘×%Ñ% t¨T°4·;±;×3JÑ3JÐ&KÔL÷Mð Mð 9÷&ð &ú÷Mð Mús   ÁC"Â%3C.Ã"C+Ã.C7rÓ   rK  )r|   r�   rÅ   r�   r¨  r�   rÆ   rL  r)  rL  r*  rL  rr   rˆ   rx   rˆ   r‰   z)Union[tf.Tensor, TFImageClassifierOutput]r‹   )r&   r'   r(   r7   r   r   r^  r   r   r`  r†   rR   rŽ   r�   s   @r-   rž  rž  û  sÁ   ø„ õð Ù*Ð+@ÓAÙÐ+BÐQ`Ôað *.Ø&*Ø#'Ø,0Ø/3Ø&*Ø).ØðH
à&ðH
ð $ðH
ð !ð	H
ð
 *ðH
ð -ðH
ð $ðH
ð #'ðH
ð ðH
ð 
3òH
ó bó Bó ðH
÷T	Mr,   rž  aŠ  
    DeiT Model transformer with image classification heads on top (a linear layer on top of the final hidden state of
    the [CLS] token and a linear layer on top of the final hidden state of the distillation token) e.g. for ImageNet.

    .. warning::

            This model supports inference-only. Fine-tuning with distillation (i.e. with a teacher) is not yet
            supported.
    c                  óœ   ‡ — e Zd Zdˆ fd„Ze ee«       eee	e
e¬«      	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Zdd„Zˆ xZS )	Ú'TFDeiTForImageClassificationWithTeacherc                óú  •— t         ‰| �  |«       |j                  | _        t        |dd¬«      | _        |j                  dkD  r+t
        j                  j                  |j                  d¬«      n t
        j                  j                  dd¬«      | _	        |j                  dkD  r+t
        j                  j                  |j                  d¬«      n t
        j                  j                  dd¬«      | _
        || _        y )	NFrP  r   r   Úcls_classifierr5   r¢  Údistillation_classifier)r6   r7   r£  r1  rP  r   r:   r´   r¤  r­  r®  r2   r�  s     €r-   r7   z0TFDeiTForImageClassificationWithTeacher.__init__w  sÖ   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ# F¸eÈ&ÔQˆŒ	ð
 × Ñ  1Ò$ô �L‰L×Ñ˜v×0Ñ0Ð7GÐÔHä—‘×(Ñ(¨Ð8HÐ(ÓIð 	Ôð × Ñ  1Ò$ô �L‰L×Ñ˜v×0Ñ0Ð7PÐÔQä—‘×(Ñ(¨Ð8QÐ(ÓRð 	Ô$ð
 ˆ�r,   )rX  rY  rM  r[  c           	     óR  — |�|n| j                   j                  }| j                  |||||||¬«      }|d   }	| j                  |	d d …dd d …f   «      }
| j	                  |	d d …dd d …f   «      }|
|z   dz  }|s||
|f|dd  z   }|S t        ||
||j                  |j                  ¬«      S )Nr¦  r   r   rG   )r!   r"   r#   r$   r%   )r2   rB  rP  r­  r®  r    r$   r%   )r=   r|   rÅ   rÆ   r)  r*  rr   rx   rÑ   rE  r"   r#   r!   rì   s                 r-   r†   z,TFDeiTForImageClassificationWithTeacher.callŠ  sß   € ð$ &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØØ/Ø!5Ø#Ø%=Øð ó 
ˆð " !™*ˆà×(Ñ(¨º¸Aºq¸Ñ)AÓBˆ
Ø"×:Ñ:¸?Ê1ÈaÒQRÈ7Ñ;SÓTÐð Ð2Ñ2°aÑ7ˆáØ˜jÐ*=Ð>ÀÈÈÀÑLˆFØˆMä<ØØ!Ø 3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r,   c                óî  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   ŒíxY w# 1 sw Y   ŒˆxY w# 1 sw Y   y xY w)NTrP  r­  r®  )rN   rO   rP   rQ   rP  r3   rR   r­  r2   rJ   r®  r¡   s     r-   rR   z-TFDeiTForImageClassificationWithTeacher.build¼  s3  € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ä�4Ð)¨4Ó0Ð<Ü—‘˜t×2Ñ2×7Ñ7Ó8ñ QØ×#Ñ#×)Ñ)¨4°°t·{±{×7NÑ7NÐ*OÔP÷Qä�4Ð2°DÓ9ÐEÜ—‘˜t×;Ñ;×@Ñ@ÓAñ ZØ×,Ñ,×2Ñ2°D¸$ÀÇÁ×@WÑ@WÐ3XÔY÷Zð Zð F÷&ð &ú÷Qð Qú÷Zð Zús$   ÁEÂ%3EÄ3E+ÅEÅE(Å+E4r¢   )NNNNNFF)r|   r�   rÅ   r�   rÆ   rL  r)  rL  r*  rL  rr   rˆ   rx   rˆ   r‰   z;Union[tuple, TFDeiTForImageClassificationWithTeacherOutput]r‹   )r&   r'   r(   r7   r   r   r^  r   Ú_IMAGE_CLASS_CHECKPOINTr    r`  Ú_IMAGE_CLASS_EXPECTED_OUTPUTr†   rR   rŽ   r�   s   @r-   r«  r«  j  s±   ø„ õð& Ù*Ð+@ÓAÙØ*ØAØ$Ø4ô	ð *.Ø&*Ø,0Ø/3Ø&*Ø).Øð(
à&ð(
ð $ð(
ð *ð	(
ð
 -ð(
ð $ð(
ð #'ð(
ð ð(
ð 
Eò(
óó Bó ð(
÷TZr,   r«  )rž  r«  rŠ  rT  rO  )Hr)   Ú
__future__r   Úcollections.abcr˜   ra   Údataclassesr   Útypingr   r   r   Ú
tensorflowrP   Úactivations_tfr	   Úmodeling_tf_outputsr
   r   r   r   Úmodeling_tf_utilsr   r   r   r   r   r   Útf_utilsr   r   Úutilsr   r   r   r   r   r   Úconfiguration_deitr   Ú
get_loggerr&   Úloggerr`  r_  ra  r±  r²  r    r:   ÚLayerr/   r9   r¥   r×   ré   rû   r  r  r  r1  rO  ÚDEIT_START_DOCSTRINGr^  rT  r6  rk  r  rŠ  rž  r«  Ú__all__r+   r,   r-   ú<module>rÃ     sÉ  ðñ å "ã Û Ý !ß )Ñ )ã å /÷ó ÷÷ ÷ 3÷÷ õ +ð 
ˆ×	Ñ	˜HÓ	%€ð €ð AÐ Ú&Ð ð EÐ Ø1Ð ð ô/°Kó /ó ð/ô<j�u—|‘|×)Ñ)ô jôZ*M˜EŸL™L×.Ñ.ô *Mô\WH˜%Ÿ,™,×,Ñ,ô WHôvH�u—|‘|×)Ñ)ô Hô>$.�e—l‘l×(Ñ(ô $.ôPH˜Ÿ™×+Ñ+ô Hô<N�5—<‘<×%Ñ%ô Nô4@R�%—,‘,×$Ñ$ô @RôH3&�E—L‘L×&Ñ&ô 3&ðl ôn(�e—l‘l×(Ñ(ó n(ó ðn(ôd%Ð-ô %ð	Ð ðÐ ñ2 ØdØóô0&Ð'ó 0&ó	ð0&ôhH�5—<‘<×%Ñ%ô Hô:˜Ÿ™×+Ñ+ô ô4/�E—L‘L×&Ñ&ô /ñ6 ð3àóô
v)Ð#8ó v)óð
v)ñr ðð óôeMÐ#8Ð:Vó eMóðeMñP ðð óôRZÐ.Có RZóðRZòj�r,   