Ë
    T^(hKo  ã            	       ó  — d Z ddlZddlZddlmZmZmZmZ ddlZddl	m
c 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 ddlmZmZ dd	lmZ dd
lmZmZ ddlmZmZmZm Z  ddl!m"Z"  e jF                  e$«      Z%dZ&dZ'g d¢Z(dZ)dZ*d2dejV                  de,de-dejV                  fd„Z. G d„ de
j^                  «      Z0 G d„ de
j^                  «      Z1 G d„ de
j^                  «      Z2 G d„ de
j^                  «      Z3 G d„ d e
j^                  «      Z4 G d!„ d"e
j^                  «      Z5 G d#„ d$e
j^                  «      Z6 G d%„ d&e
j^                  «      Z7 G d'„ d(e«      Z8d)Z9d*Z: ed+e9«       G d,„ d-e8«      «       Z; ed.e9«       G d/„ d0e8«      «       Z<g d1¢Z=y)3zPyTorch PVT model.é    N)ÚIterableÚOptionalÚTupleÚUnion)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )ÚACT2FN)ÚBaseModelOutputÚImageClassifierOutput)ÚPreTrainedModel)Ú find_pruneable_heads_and_indicesÚprune_linear_layer)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingé   )Ú	PvtConfigr   zZetatech/pvt-tiny-224)r   é2   i   ztabby, tabby catÚinputÚ	drop_probÚtrainingÚreturnc                 ó  — |dk(  s|s| S d|z
  }| j                   d   fd| j                  dz
  z  z   }|t        j                  || j                  | j
                  ¬«      z   }|j                  «        | j                  |«      |z  }|S )aF  
    Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

    Comment by Ross Wightman: This is the same as the DropConnect impl I created for EfficientNet, etc networks,
    however, the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...
    See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for changing the
    layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use 'survival rate' as the
    argument.
    ç        r   r   )r   )ÚdtypeÚdevice)ÚshapeÚndimÚtorchÚrandr   r    Úfloor_Údiv)r   r   r   Ú	keep_probr!   Úrandom_tensorÚoutputs          úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/pvt/modeling_pvt.pyÚ	drop_pathr+   6   s�   € ð �CÒ™xØˆØ�I‘€IØ�[‰[˜‰^Ð ¨¯
©
°Q©Ñ 7Ñ7€EØ¤§
¡
¨5¸¿¹ÈEÏLÉLÔ YÑY€MØ×ÑÔØ�Y‰Y�yÓ! MÑ1€FØ€Mó    c                   óx   ‡ — e Zd ZdZd	dee   ddfˆ fd„Zdej                  dej                  fd„Z	de
fd„Zˆ xZS )
ÚPvtDropPathzXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr   r   c                 ó0   •— t         ‰| �  «        || _        y ©N)ÚsuperÚ__init__r   )Úselfr   Ú	__class__s     €r*   r2   zPvtDropPath.__init__N   s   ø€ Ü‰ÑÔØ"ˆ�r,   Úhidden_statesc                 óD   — t        || j                  | j                  «      S r0   )r+   r   r   ©r3   r5   s     r*   ÚforwardzPvtDropPath.forwardR   s   € Ü˜¨¯©¸¿¹ÓFÐFr,   c                 ó8   — dj                  | j                  «      S )Nzp={})Úformatr   )r3   s    r*   Ú
extra_reprzPvtDropPath.extra_reprU   s   € Ø�}‰}˜TŸ^™^Ó,Ð,r,   r0   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úfloatr2   r#   ÚTensorr8   Ústrr;   Ú__classcell__©r4   s   @r*   r.   r.   K   sG   ø„ Ùbñ# (¨5¡/ð #¸Tõ #ðG U§\¡\ð G°e·l±ló Gð-˜C÷ -r,   r.   c                   óè   ‡ — e Zd ZdZ	 ddedeeee   f   deeee   f   dedededefˆ fd	„Z	d
e
j                  dedede
j                  fd„Zde
j                  dee
j                  eef   fd„Zˆ xZS )ÚPvtPatchEmbeddingszì
    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.
    ÚconfigÚ
image_sizeÚ
patch_sizeÚstrideÚnum_channelsÚhidden_sizeÚ	cls_tokenc                 óâ  •— t         ‰	| �  «        || _        t        |t        j
                  j                  «      r|n||f}t        |t        j
                  j                  «      r|n||f}|d   |d   z  |d   |d   z  z  }|| _        || _        || _	        || _
        t        j                  t        j                  d|r|dz   n||«      «      | _        |r*t        j                  t        j                   dd|«      «      nd | _        t        j$                  ||||¬«      | _        t        j(                  ||j*                  ¬«      | _        t        j.                  |j0                  ¬«      | _        y )Nr   r   ©Úkernel_sizerJ   ©Úeps)Úp)r1   r2   rG   Ú
isinstanceÚcollectionsÚabcr   rH   rI   rK   Únum_patchesr   Ú	Parameterr#   ÚrandnÚposition_embeddingsÚzerosrM   ÚConv2dÚ
projectionÚ	LayerNormÚlayer_norm_epsÚ
layer_normÚDropoutÚhidden_dropout_probÚdropout)
r3   rG   rH   rI   rJ   rK   rL   rM   rW   r4   s
            €r*   r2   zPvtPatchEmbeddings.__init__`   s0  ø€ ô 	‰ÑÔØˆŒÜ#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔä#%§<¡<Ü�K‰K˜©i˜;¨š?¸[È+ÓVó$
ˆÔ ñ JSœŸ™¤e§k¡k°!°Q¸Ó&DÔEÐX\ˆŒÜŸ)™) L°+È6ÐZdÔeˆŒÜŸ,™, {¸×8MÑ8MÔNˆŒÜ—z‘z F×$>Ñ$>Ô?ˆ�r,   Ú
embeddingsÚheightÚwidthr   c                 ó’  — ||z  }t         j                  j                  «       s<|| j                  j                  | j                  j                  z  k(  r| j
                  S |j                  d||d«      j                  dddd«      }t        j                  |||fd¬«      }|j                  dd||z  «      j                  ddd«      }|S )Nr   éÿÿÿÿr   r   é   Úbilinear)ÚsizeÚmode)
r#   ÚjitÚ
is_tracingrG   rH   rZ   ÚreshapeÚpermuteÚFÚinterpolate)r3   rd   re   rf   rW   Úinterpolated_embeddingss         r*   Úinterpolate_pos_encodingz+PvtPatchEmbeddings.interpolate_pos_encoding|   s½   € Ø˜u‘nˆô �y‰y×#Ñ#Ô%¨+¸¿¹×9OÑ9OÐRV×R]ÑR]×RhÑRhÑ9hÒ*hØ×+Ñ+Ð+Ø×'Ñ'¨¨6°5¸"Ó=×EÑEÀaÈÈAÈqÓQˆ
Ü"#§-¡-°
À&È%ÀÐWaÔ"bÐØ"9×"AÑ"AÀ!ÀRÈÐRWÉÓ"X×"`Ñ"`ÐabÐdeÐghÓ"iÐØ&Ð&r,   Úpixel_valuesc                 ó”  — |j                   \  }}}}|| j                  k7  rt        d«      ‚| j                  |«      }|j                   �^ }}}|j	                  d«      j                  dd«      }| j                  |«      }| j                  �‰| j                  j                  |dd«      }	t        j                  |	|fd¬«      }| j                  | j                  d d …dd …f   ||«      }
t        j                  | j                  d d …d d…f   |
fd¬«      }
n| j                  | j                  ||«      }
| j                  ||
z   «      }|||fS )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.ri   r   rh   ©Údim)r!   rK   Ú
ValueErrorr]   ÚflattenÚ	transposer`   rM   Úexpandr#   Úcatrt   rZ   rc   )r3   ru   Ú
batch_sizerK   re   rf   Úpatch_embedÚ_rd   rM   rZ   s              r*   r8   zPvtPatchEmbeddings.forward‡   sM  € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ø˜4×,Ñ,Ò,ÜØwóð ð —o‘o lÓ3ˆØ'×-Ñ-ÑˆˆF�EØ!×)Ñ)¨!Ó,×6Ñ6°q¸!Ó<ˆØ—_‘_ [Ó1ˆ
Ø�>‰>Ð%ØŸ™×-Ñ-¨j¸"¸bÓAˆIÜŸ™ I¨zÐ#:ÀÔBˆJØ"&×"?Ñ"?À×@XÑ@XÒYZÐ\]Ñ\^ÐY^Ñ@_ÐagÐinÓ"oÐÜ"'§)¡)¨T×-EÑ-EÂaÈÈ!ÈÀeÑ-LÐNaÐ,bÐhiÔ"jÑà"&×"?Ñ"?À×@XÑ@XÐZ`ÐbgÓ"hÐØ—\‘\ *Ð/BÑ"BÓCˆ
à˜6 5Ð(Ð(r,   ©F)r<   r=   r>   r?   r   r   Úintr   Úboolr2   r#   rA   rt   r   r8   rC   rD   s   @r*   rF   rF   Y   sÎ   ø„ ñð  ñ@àð@ð ˜#˜x¨™}Ð,Ñ-ð@ð ˜#˜x¨™}Ð,Ñ-ð	@ð
 ð@ð ð@ð ð@ð õ@ð8	'°5·<±<ð 	'Èð 	'ÐUXð 	'Ð]b×]iÑ]ió 	'ð) E§L¡Lð )°U¸5¿<¹<ÈÈcÐ;QÑ5R÷ )r,   rF   c                   ó`   ‡ — e Zd Zdedefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚPvtSelfOutputrG   rL   c                 ó    •— t         ‰| �  «        t        j                  ||«      | _        t        j
                  |j                  «      | _        y r0   )r1   r2   r   ÚLinearÚdensera   rb   rc   )r3   rG   rL   r4   s      €r*   r2   zPvtSelfOutput.__init__ž   s6   ø€ Ü‰ÑÔÜ—Y‘Y˜{¨KÓ8ˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r,   r5   r   c                 óJ   — | j                  |«      }| j                  |«      }|S r0   )rˆ   rc   r7   s     r*   r8   zPvtSelfOutput.forward£   s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr,   )
r<   r=   r>   r   r‚   r2   r#   rA   r8   rC   rD   s   @r*   r…   r…   �   s1   ø„ ð>˜yð >°sõ >ð
 U§\¡\ð °e·l±l÷ r,   r…   c                   ó¦   ‡ — e Zd ZdZdedededefˆ fd„Zdedej                  fd	„Z
	 ddej                  d
edededeej                     f
d„Zˆ xZS )ÚPvtEfficientSelfAttentionzpEfficient self-attention mechanism with reduction of the sequence [PvT paper](https://arxiv.org/abs/2102.12122).rG   rL   Únum_attention_headsÚsequences_reduction_ratioc                 ó˜  •— t         ‰| �  «        || _        || _        | j                  | j                  z  dk7  r&t	        d| j                  › d| j                  › d�«      ‚t        | j                  | j                  z  «      | _        | j                  | j                  z  | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  |j                  «      | _        || _        |dkD  rEt        j$                  ||||¬«      | _        t        j(                  ||j*                  ¬«      | _        y y )	Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (ú))Úbiasr   rO   rQ   )r1   r2   rL   rŒ   ry   r‚   Úattention_head_sizeÚall_head_sizer   r‡   Úqkv_biasÚqueryÚkeyÚvaluera   Úattention_probs_dropout_probrc   r�   r\   Úsequence_reductionr^   r_   r`   ©r3   rG   rL   rŒ   r�   r4   s        €r*   r2   z"PvtEfficientSelfAttention.__init__¬   sr  ø€ ô 	‰ÑÔØ&ˆÔØ#6ˆÔ à×Ñ˜d×6Ñ6Ñ6¸!Ò;ÜØ# D×$4Ñ$4Ð#5ð 6Ø×2Ñ2Ð3°1ð6óð ô
 $' t×'7Ñ'7¸$×:RÑ:RÑ'RÓ#SˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y‘Y˜t×/Ñ/°×1CÑ1CÈ&Ï/É/ÔZˆŒ
Ü—9‘9˜T×-Ñ-¨t×/AÑ/AÈÏÉÔXˆŒÜ—Y‘Y˜t×/Ñ/°×1CÑ1CÈ&Ï/É/ÔZˆŒ
ä—z‘z &×"EÑ"EÓFˆŒà)BˆÔ&Ø$ qÒ(Ü&(§i¡iØ˜[Ð6OÐXqô'ˆDÔ#ô !Ÿl™l¨;¸F×<QÑ<QÔRˆD�Oð	 )r,   r5   r   c                 ó¤   — |j                  «       d d | j                  | j                  fz   }|j                  |«      }|j	                  dddd«      S )Nrh   r   ri   r   r   )rk   rŒ   r‘   Úviewrp   )r3   r5   Ú	new_shapes      r*   Útranspose_for_scoresz.PvtEfficientSelfAttention.transpose_for_scoresÉ   sT   € Ø!×&Ñ&Ó(¨¨"Ð-°×1IÑ1IÈ4×KcÑKcÐ0dÑdˆ	Ø%×*Ñ*¨9Ó5ˆØ×$Ñ$ Q¨¨1¨aÓ0Ð0r,   re   rf   Úoutput_attentionsc                 ó¸  — | j                  | j                  |«      «      }| j                  dkD  r{|j                  \  }}}|j	                  ddd«      j                  ||||«      }| j                  |«      }|j                  ||d«      j	                  ddd«      }| j                  |«      }| j                  | j                  |«      «      }	| j                  | j                  |«      «      }
t        j                  ||	j                  dd«      «      }|t        j                  | j                  «      z  }t         j"                  j%                  |d¬«      }| j'                  |«      }t        j                  ||
«      }|j	                  dddd«      j)                  «       }|j+                  «       d d | j,                  fz   }|j/                  |«      }|r||f}|S |f}|S )Nr   r   ri   rh   éþÿÿÿrw   r   )r�   r”   r�   r!   rp   ro   r˜   r`   r•   r–   r#   Úmatmulr{   ÚmathÚsqrtr‘   r   Ú
functionalÚsoftmaxrc   Ú
contiguousrk   r’   r›   )r3   r5   re   rf   rž   Úquery_layerr~   Úseq_lenrK   Ú	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                   r*   r8   z!PvtEfficientSelfAttention.forwardÎ   sÆ  € ð ×/Ñ/°·
±
¸=Ó0IÓJˆà×)Ñ)¨AÒ-Ø0=×0CÑ0CÑ-ˆJ˜ à)×1Ñ1°!°Q¸Ó:×BÑBÀ:È|Ð]cÐejÓkˆMà ×3Ñ3°MÓBˆMà)×1Ñ1°*¸lÈBÓO×WÑWÐXYÐ[\Ð^_Ó`ˆMØ ŸO™O¨MÓ:ˆMà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯i©i¸×8PÑ8PÓ.QÑQÐô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ%×*Ñ*Ð+BÓCˆá6G�= /Ð2ˆàˆð O\ÐM]ˆàˆr,   r�   )r<   r=   r>   r?   r   r‚   r@   r2   r#   rA   r�   rƒ   r   r8   rC   rD   s   @r*   r‹   r‹   ©   sŽ   ø„ ÙzðSØðSØ.1ðSØHKðSØhmõSð:1°#ð 1¸%¿,¹,ó 1ð #(ñ*à—|‘|ð*ð ð*ð ð	*ð
  ð*ð 
ˆu�|‰|Ñ	÷*r,   r‹   c                   ó„   ‡ — e Zd Zdedededefˆ fd„Zd„ Z	 ddej                  ded	ed
e
deej                     f
d„Zˆ xZS )ÚPvtAttentionrG   rL   rŒ   r�   c                 óŒ   •— t         ‰| �  «        t        ||||¬«      | _        t	        ||¬«      | _        t        «       | _        y )N)rL   rŒ   r�   )rL   )r1   r2   r‹   r3   r…   r)   ÚsetÚpruned_headsr™   s        €r*   r2   zPvtAttention.__init__ü   sB   ø€ ô 	‰ÑÔÜ-ØØ#Ø 3Ø&?ô	
ˆŒ	ô $ F¸ÔDˆŒÜ›EˆÕr,   c                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y )Nr   r   rw   )Úlenr   r3   rŒ   r‘   r´   r   r”   r•   r–   r)   rˆ   r’   Úunion)r3   ÚheadsÚindexs      r*   Úprune_headszPvtAttention.prune_heads	  s  € Üˆu‹:˜Š?ØÜ7Ø�4—9‘9×0Ñ0°$·)±)×2OÑ2OÐQU×QbÑQbó
‰ˆˆuô
 -¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ*¨4¯9©9¯=©=¸%Ó@ˆ�	‰	ŒÜ,¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ.¨t¯{©{×/@Ñ/@À%ÈQÔOˆ�‰Ôð )-¯	©	×(EÑ(EÌÈEË
Ñ(Rˆ�	‰	Ô%Ø"&§)¡)×"?Ñ"?À$Ç)Á)×B_ÑB_Ñ"_ˆ�	‰	ÔØ ×-Ñ-×3Ñ3°EÓ:ˆÕr,   r5   re   rf   rž   r   c                 óh   — | j                  ||||«      }| j                  |d   «      }|f|dd  z   }|S )Nr   r   )r3   r)   )r3   r5   re   rf   rž   Úself_outputsÚattention_outputr¯   s           r*   r8   zPvtAttention.forward  sE   € ð —y‘y °¸Ð?PÓQˆàŸ;™; |°A¡Ó7ÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr,   r�   )r<   r=   r>   r   r‚   r@   r2   rº   r#   rA   rƒ   r   r8   rC   rD   s   @r*   r±   r±   û   sn   ø„ ð"Øð"Ø.1ð"ØHKð"Øhmõ"ò;ð& _dñØ"Ÿ\™\ðØ36ðØ?BðØW[ðà	ˆu�|‰|Ñ	÷r,   r±   c            
       óz   ‡ — e Zd Z	 	 d	dededee   dee   fˆ fd„Zdej                  dej                  fd„Z	ˆ xZ
S )
ÚPvtFFNrG   Úin_featuresÚhidden_featuresÚout_featuresc                 ój  •— t         ‰| �  «        |�|n|}t        j                  ||«      | _        t        |j                  t        «      rt        |j                     | _	        n|j                  | _	        t        j                  ||«      | _
        t        j                  |j                  «      | _        y r0   )r1   r2   r   r‡   Údense1rT   Ú
hidden_actrB   r   Úintermediate_act_fnÚdense2ra   rb   rc   )r3   rG   rÀ   rÁ   rÂ   r4   s        €r*   r2   zPvtFFN.__init__&  s‡   ø€ ô 	‰ÑÔØ'3Ð'?‘|À[ˆÜ—i‘i ¨_Ó=ˆŒÜ�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÔ$Ü—i‘i °Ó>ˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r,   r5   r   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S r0   )rÄ   rÆ   rc   rÇ   r7   s     r*   r8   zPvtFFN.forward7  sP   € ØŸ™ MÓ2ˆØ×0Ñ0°Ó?ˆØŸ™ ]Ó3ˆØŸ™ MÓ2ˆØŸ™ ]Ó3ˆØÐr,   )NN)r<   r=   r>   r   r‚   r   r2   r#   rA   r8   rC   rD   s   @r*   r¿   r¿   %  sY   ø„ ð
 *.Ø&*ñ>àð>ð ð>ð " #™ð	>ð
 ˜s‘mõ>ð" U§\¡\ð °e·l±l÷ r,   r¿   c                   óf   ‡ — e Zd Zdedededededefˆ fd„Zddej                  d	ed
ede	fd„Z
ˆ xZS )ÚPvtLayerrG   rL   rŒ   r+   r�   Ú	mlp_ratioc                 óv  •— t         ‰| �  «        t        j                  ||j                  ¬«      | _        t        ||||¬«      | _        |dkD  rt        |«      nt        j                  «       | _
        t        j                  ||j                  ¬«      | _        t        ||z  «      }t        |||¬«      | _        y )NrQ   )rG   rL   rŒ   r�   r   )rG   rÀ   rÁ   )r1   r2   r   r^   r_   Úlayer_norm_1r±   Ú	attentionr.   ÚIdentityr+   Úlayer_norm_2r‚   r¿   Úmlp)	r3   rG   rL   rŒ   r+   r�   rË   Úmlp_hidden_sizer4   s	           €r*   r2   zPvtLayer.__init__A  s–   ø€ ô 	‰ÑÔÜŸL™L¨¸&×:OÑ:OÔPˆÔÜ%ØØ#Ø 3Ø&?ô	
ˆŒð 4=¸s²?œ YÔ/ÌÏÉËˆŒÜŸL™L¨¸&×:OÑ:OÔPˆÔÜ˜k¨IÑ5Ó6ˆÜ °[ÐRaÔbˆ�r,   r5   re   rf   rž   c                 ó  — | j                  | j                  |«      |||¬«      }|d   }|dd  }| j                  |«      }||z   }| j                  | j	                  |«      «      }| j                  |«      }||z   }	|	f|z   }|S )N)r5   re   rf   rž   r   r   )rÎ   rÍ   r+   rÑ   rÐ   )
r3   r5   re   rf   rž   Úself_attention_outputsr½   r¯   Ú
mlp_outputÚlayer_outputs
             r*   r8   zPvtLayer.forwardW  s¢   € Ø!%§¡Ø×+Ñ+¨MÓ:ØØØ/ð	 "0ó "
Ðð 2°!Ñ4ÐØ(¨¨Ð,ˆàŸ>™>Ð*:Ó;ÐØ(¨=Ñ8ˆà—X‘X˜d×/Ñ/°Ó>Ó?ˆ
à—^‘^ JÓ/ˆ
Ø$ zÑ1ˆà�/ GÑ+ˆàˆr,   r�   )r<   r=   r>   r   r‚   r@   r2   r#   rA   rƒ   r8   rC   rD   s   @r*   rÊ   rÊ   @  so   ø„ ðcàðcð ðcð !ð	cð
 ðcð $)ðcð õcñ, U§\¡\ð ¸3ð Àsð Ð_c÷ r,   rÊ   c                   óx   ‡ — e Zd Zdefˆ fd„Z	 	 	 d	dej                  dee   dee   dee   de	e
ef   f
d„Zˆ xZS )
Ú
PvtEncoderrG   c                 ó²  •— t         ‰	| �  «        || _        t        j                  d|j
                  t        |j                  «      «      j                  «       }g }t        |j                  «      D ]©  }|j                  t        ||dk(  r|j                  n| j                  j                  d|dz   z  z  |j                  |   |j                  |   |dk(  r|j                   n|j"                  |dz
     |j"                  |   ||j                  dz
  k(  ¬«      «       Œ« t%        j&                  |«      | _        g }d}t        |j                  «      D ]¹  }g }|dk7  r||j                  |dz
     z  }t        |j                  |   «      D ]\  }|j                  t+        ||j"                  |   |j,                  |   |||z      |j.                  |   |j0                  |   ¬«      «       Œ^ |j                  t%        j&                  |«      «       Œ» t%        j&                  |«      | _        t%        j4                  |j"                  d   |j6                  ¬«      | _        y )Nr   ri   r   )rG   rH   rI   rJ   rK   rL   rM   )rG   rL   rŒ   r+   r�   rË   rh   rQ   )r1   r2   rG   r#   ÚlinspaceÚdrop_path_rateÚsumÚdepthsÚtolistÚrangeÚnum_encoder_blocksÚappendrF   rH   Úpatch_sizesÚstridesrK   Úhidden_sizesr   Ú
ModuleListÚpatch_embeddingsrÊ   rŒ   Úsequence_reduction_ratiosÚ
mlp_ratiosÚblockr^   r_   r`   )
r3   rG   Údrop_path_decaysrd   ÚiÚblocksÚcurÚlayersÚjr4   s
            €r*   r2   zPvtEncoder.__init__o  s*  ø€ Ü‰ÑÔØˆŒô !Ÿ>™>¨!¨V×-BÑ-BÄCÈÏÉÓDVÓW×^Ñ^Ó`Ðð ˆ
ä�v×0Ñ0Ó1ò 	ˆAØ×ÑÜ"Ø!Ø45¸²F˜v×0Ò0ÀÇÁ×@VÑ@VÐ[\ÐabÐefÑafÑ[gÑ@hØ%×1Ñ1°!Ñ4Ø!Ÿ>™>¨!Ñ,Ø89¸Qº ×!4Ò!4ÀF×DWÑDWÐXYÐ\]ÑX]ÑD^Ø &× 3Ñ 3°AÑ 6Ø 6×#<Ñ#<¸qÑ#@Ñ@ôõ
ð	ô !#§¡¨jÓ 9ˆÔð ˆØˆÜ�v×0Ñ0Ó1ò 	1ˆAàˆFØ�AŠvØ�v—}‘} Q¨¡UÑ+Ñ+�Ü˜6Ÿ=™=¨Ñ+Ó,ò 
�Ø—‘ÜØ%Ø$*×$7Ñ$7¸Ñ$:Ø,2×,FÑ,FÀqÑ,IØ"2°3¸±7Ñ";Ø28×2RÑ2RÐSTÑ2UØ"(×"3Ñ"3°AÑ"6ôõ	ð
ð �M‰Mœ"Ÿ-™-¨Ó/Õ0ð!	1ô$ —]‘] 6Ó*ˆŒ
ô Ÿ,™, v×':Ñ':¸2Ñ'>ÀF×DYÑDYÔZˆ�r,   ru   rž   Úoutput_hidden_statesÚreturn_dictr   c                 ó2  — |rdnd }|rdnd }|j                   d   }t        | j                  «      }|}	t        t	        | j
                  | j                  «      «      D ]|  \  }
\  }} ||	«      \  }	}}|D ]&  } ||	|||«      }|d   }	|r	||d   fz   }|sŒ!||	fz   }Œ( |
|dz
  k7  sŒI|	j                  |||d«      j                  dddd«      j                  «       }	Œ~ | j                  |	«      }	|r||	fz   }|st        d„ |	||fD «       «      S t        |	||¬«      S )	N© r   r   rh   r   ri   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr0   ró   )Ú.0Úvs     r*   ú	<genexpr>z%PvtEncoder.forward.<locals>.<genexpr>¿  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š©Úlast_hidden_stater5   Ú
attentions)r!   r¶   ré   Ú	enumerateÚzipræ   ro   rp   r¦   r`   Útupler   )r3   ru   rž   rð   rñ   Úall_hidden_statesÚall_self_attentionsr~   Ú
num_blocksr5   ÚidxÚembedding_layerÚblock_layerre   rf   ré   Úlayer_outputss                    r*   r8   zPvtEncoder.forward¡  si  € ñ #7™B¸DÐÙ$5™b¸4Ðà!×'Ñ'¨Ñ*ˆ
Ü˜Ÿ™“_ˆ
Ø$ˆÜ3<¼SÀ×AVÑAVÐX\×XbÑXbÓ=cÓ3dò 	vÑ/ˆCÑ/�/ ;á+:¸=Ó+IÑ(ˆM˜6 5à$ò M�Ù % m°V¸UÐDUÓ V�Ø -¨aÑ 0�Ù$Ø*=ÀÈqÑAQÐ@SÑ*SÐ'Ú'Ø(9¸]Ð<LÑ(LÑ%ðMð �j 1‘nÓ$Ø -× 5Ñ 5°jÀ&È%ÐQSÓ T× \Ñ \Ð]^Ð`aÐcdÐfgÓ h× sÑ sÓ u‘ð	vð Ÿ™¨Ó6ˆÙØ 1°]Ð4DÑ DÐÙÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ø+Ø*ô
ð 	
r,   )FFT)r<   r=   r>   r   r2   r#   ÚFloatTensorr   rƒ   r   r   r   r8   rC   rD   s   @r*   rØ   rØ   n  sn   ø„ ð0[˜yõ 0[ðj -2Ø/4Ø&*ñ#
à×'Ñ'ð#
ð $ D™>ð#
ð ' t™nð	#
ð
 ˜d‘^ð#
ð 
ˆu�oÐ%Ñ	&÷#
r,   rØ   c                   óx   — e Zd ZdZeZdZdZg Zde	e
j                  e
j                  e
j                  f   ddfd„Zy)ÚPvtPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úpvtru   Úmoduler   Nc                 ó¶  — t        |t        j                  «      r‹t        j                  j	                  |j
                  j                  d| j                  j                  ¬«      |j
                  _        |j                  �%|j                  j                  j                  «        yyt        |t        j                  «      rJ|j                  j                  j                  «        |j
                  j                  j                  d«       yt        |t        «      rÀt        j                  j	                  |j                  j                  d| j                  j                  ¬«      |j                  _        |j                  �Zt        j                  j	                  |j                  j                  d| j                  j                  ¬«      |j                  _        yyy)zInitialize the weightsr   )ÚmeanÚstdNg      ð?)rT   r   r‡   ÚinitÚtrunc_normal_ÚweightÚdatarG   Úinitializer_ranger�   Úzero_r^   Úfill_rF   rZ   rM   )r3   r	  s     r*   Ú_init_weightsz PvtPreTrainedModel._init_weightsÒ  sS  € ä�fœbŸi™iÔ(ô "$§¡×!6Ñ!6°v·}±}×7IÑ7IÐPSÐY]×YdÑYd×YvÑYvÐ!6Ó!wˆF�M‰MÔØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜Ô 2Ô3Ü.0¯g©g×.CÑ.CØ×*Ñ*×/Ñ/ØØ—K‘K×1Ñ1ð /Dó /ˆF×&Ñ&Ô+ð
 ×ÑÐ+Ü(*¯©×(=Ñ(=Ø×$Ñ$×)Ñ)ØØŸ™×5Ñ5ð )>ó )�× Ñ Õ%ð ,ð 4r,   )r<   r=   r>   r?   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚ_no_split_modulesr   r   r‡   r\   r^   r  ró   r,   r*   r  r  Ç  sK   „ ñð
 €LØÐØ$€OØÐð E¨"¯)©)°R·Y±YÀÇÁÐ*LÑ$Mð ÐRVô r,   r  aG  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`~PvtConfig`]): 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 (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See [`PvtImageProcessor.__call__`]
            for details.
        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.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
zSThe bare Pvt encoder outputting raw hidden-states without any specific head on top.c                   óÒ   ‡ — e Zd Zdefˆ fd„Zd„ Z eej                  d«      «       e	e
eede¬«      	 	 	 ddej                  dee   d	ee   d
ee   deeef   f
d„«       «       Zˆ xZS )ÚPvtModelrG   c                 ór   •— t         ‰| �  |«       || _        t        |«      | _        | j                  «        y r0   )r1   r2   rG   rØ   ÚencoderÚ	post_init©r3   rG   r4   s     €r*   r2   zPvtModel.__init__  s1   ø€ Ü‰Ñ˜Ô ØˆŒô " &Ó)ˆŒð 	�‰Õr,   c                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 y)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
        N)Úitemsr  ÚlayerrÎ   rº   )r3   Úheads_to_pruner!  r¸   s       r*   Ú_prune_headszPvtModel._prune_heads  sE   € ð
 +×0Ñ0Ó2ò 	C‰LˆE�5Ø�L‰L×Ñ˜uÑ%×/Ñ/×;Ñ;¸EÕBñ	Cr,   ú%(batch_size, channels, height, width)Úvision)Ú
checkpointÚoutput_typer  ÚmodalityÚexpected_outputru   rž   rð   rñ   r   c                 ó,  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  ||||¬«      }|d   }|s	|f|dd  z   S t        ||j                  |j                  ¬«      S )N©ru   rž   rð   rñ   r   r   rø   )rG   rž   rð   Úuse_return_dictr  r   r5   rú   )r3   ru   rž   rð   rñ   Úencoder_outputsÚsequence_outputs          r*   r8   zPvtModel.forward  s·   € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàŸ,™,Ø%Ø/Ø!5Ø#ð	 'ó 
ˆð *¨!Ñ,ˆáØ#Ð%¨¸¸Ð(;Ñ;Ð;äØ-Ø)×7Ñ7Ø&×1Ñ1ô
ð 	
r,   )NNN)r<   r=   r>   r   r2   r#  r   ÚPVT_INPUTS_DOCSTRINGr:   r   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr#   r  r   rƒ   r   r   r8   rC   rD   s   @r*   r  r    s¯   ø„ ð
˜yõ òCñ +Ð+?×+FÑ+FÐGnÓ+oÓpÙØ&Ø#Ø$ØØ.ôð -1Ø/3Ø&*ñ
à×'Ñ'ð
ð $ D™>ð
ð ' t™nð	
ð
 ˜d‘^ð
ð 
ˆu�oÐ%Ñ	&ò
óó qô
r,   r  z¤
    Pvt 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eddfˆ fd„Z eej                  d«      «       ee	e
ee¬«      	 	 	 	 ddeej                     deej                     d	ee   d
ee   dee   deee
f   fd„«       «       Zˆ xZS )ÚPvtForImageClassificationrG   r   Nc                 ó0  •— t         ‰| �  |«       |j                  | _        t        |«      | _        |j                  dkD  r-t        j                  |j                  d   |j                  «      nt        j                  «       | _	        | j                  «        y )Nr   rh   )r1   r2   Ú
num_labelsr  r  r   r‡   rä   rÏ   Ú
classifierr  r  s     €r*   r2   z"PvtForImageClassification.__init__L  sy   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ˜FÓ#ˆŒð FL×EVÑEVÐYZÒEZŒB�I‰I�f×)Ñ)¨"Ñ-¨v×/@Ñ/@ÔAÔ`b×`kÑ`kÓ`mð 	Œð
 	�‰Õr,   r$  )r&  r'  r  r)  ru   Úlabelsrž   rð   rñ   c                 ó(  — |�|n| j                   j                  }| j                  ||||¬«      }|d   }| j                  |dd…ddd…f   «      }d}	|��‡| j                   j                  €�| j
                  dk(  rd| j                   _        nl| j
                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                   _        nd| j                   _        | j                   j                  dk(  rIt        «       }
| j
                  dk(  r& |
|j                  «       |j                  «       «      }	nŒ |
||«      }	n‚| j                   j                  dk(  r=t        «       }
 |
|j                  d| j
                  «      |j                  d«      «      }	n,| j                   j                  dk(  rt        «       }
 |
||«      }	|s|f|dd z   }|	�|	f|z   S |S t        |	||j                   |j"                  ¬	«      S )
aŠ  
        labels (`torch.LongTensor` 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).
        Nr+  r   r   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrh   )ÚlossÚlogitsr5   rú   )rG   r,  r  r7  Úproblem_typer6  r   r#   Úlongr‚   r
   Úsqueezer	   r›   r   r   r5   rú   )r3   ru   r8  rž   rð   rñ   r¯   r.  r>  r=  Úloss_fctr)   s               r*   r8   z!PvtForImageClassification.forwardZ  sÖ  € ð* &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—(‘(Ø%Ø/Ø!5Ø#ð	 ó 
ˆð " !™*ˆà—‘ ²°A²q°Ñ!9Ó:ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�áØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r,   )NNNN)r<   r=   r>   r   r2   r   r/  r:   r   Ú_IMAGE_CLASS_CHECKPOINTr   r1  Ú_IMAGE_CLASS_EXPECTED_OUTPUTr   r#   rA   rƒ   r   rý   r8   rC   rD   s   @r*   r4  r4  D  sÇ   ø„ ð˜yð ¨Tõ ñ +Ð+?×+FÑ+FÐGnÓ+oÓpÙØ*Ø)Ø$Ø4ô	ð *.Ø,0Ø/3Ø&*ñ;
à˜uŸ|™|Ñ,ð;
ð ˜Ÿ™Ñ&ð;
ð $ D™>ð	;
ð
 ' t™nð;
ð ˜d‘^ð;
ð 
ˆuÐ+Ð+Ñ	,ò;
óó qô;
r,   r4  )r4  r  r  )r   F)>r?   rU   r¢   Útypingr   r   r   r   r#   Útorch.nn.functionalr   r¤   rq   Útorch.utils.checkpointÚtorch.nnr   r	   r
   Úactivationsr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úpytorch_utilsr   r   Úutilsr   r   r   r   Úconfiguration_pvtr   Ú
get_loggerr<   Úloggerr1  r0  r2  rC  rD  rA   r@   rƒ   r+   ÚModuler.   rF   r…   r‹   r±   r¿   rÊ   rØ   r  ÚPVT_START_DOCSTRINGr/  r  r4  Ú__all__ró   r,   r*   ú<module>rT     sª  ðñ" ã Û ß 3Ó 3ã ß Ð Û Ý ß AÑ Aå !ß FÝ -ß Q÷ó õ )ð 
ˆ×	Ñ	˜HÓ	%€à€à-Ð Ú%Ð à1Ð Ø1Ð ñ�U—\‘\ð ¨eð ÀTð ÐV[×VbÑVbó ô*-�"—)‘)ô -ôA)˜Ÿ™ô A)ôH	�B—I‘Iô 	ôO §	¡	ô Oôd'�2—9‘9ô 'ôTˆR�Y‰Yô ô6+ˆr�y‰yô +ô\V
�—‘ô V
ôr!˜ô !ðH	Ð ðÐ ñ  ØYØóô7
Ð!ó 7
ó	ð7
ñt ðð óôQ
Ð 2ó Q
óðQ
òh J�r,   