Ë
    ÜÓ^j ã                   ó’  — d Z ddl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	m
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mZmZmZmZm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*  e'jV                  e,«      Z- G d„ dej\                  «      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«      Z6 G d!„ d"ej\                  «      Z7e& G d#„ d$e"«      «       Z8 G d%„ d&e8«      Z9e& G d'„ d(e8«      «       Z: e&d)¬*«       G d+„ d,e8e«      «       Z;e& G d-„ d.e8«      «       Z< e&d/¬*«       G d0„ d1e8«      «       Z=e& G d2„ d3e8«      «       Z>e& G d4„ d5e8«      «       Z?g d6¢Z@y)7zPyTorch T5 model.é    N)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚ)BaseModelOutputWithPastAndCrossAttentionsÚSeq2SeqLMOutputÚSeq2SeqModelOutputÚ#Seq2SeqQuestionAnsweringModelOutputÚSeq2SeqSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)ÚDUMMY_INPUTSÚ
DUMMY_MASKÚauto_docstringÚloggingÚtorch_compilable_checké   )ÚT5Configc                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚT5LayerNormc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)zc
        Construct a layernorm module in the T5 style. No bias and no subtraction of mean.
        N)ÚsuperÚ__init__r   Ú	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizeÚepsÚ	__class__s      €úm/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/t5/modeling_t5.pyr$   zT5LayerNorm.__init__/   s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕó    c                 óž  — |j                  t        j                  «      j                  d«      j	                  dd¬«      }|t        j
                  || j                  z   «      z  }| j                  j                  t        j                  t        j                  fv r%|j                  | j                  j                  «      }| j                  |z  S )Né   éÿÿÿÿT)Úkeepdim)Útor&   Úfloat32ÚpowÚmeanÚrsqrtr)   r(   ÚdtypeÚfloat16Úbfloat16)r*   Úhidden_statesÚvariances      r.   ÚforwardzT5LayerNorm.forward7   s›   € ð !×#Ñ#¤E§M¡MÓ2×6Ñ6°qÓ9×>Ñ>¸rÈ4Ð>ÓPˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆð �;‰;×Ñ¤§¡´·±Ð ?Ñ?Ø)×,Ñ,¨T¯[©[×->Ñ->Ó?ˆMà�{‰{˜]Ñ*Ð*r/   )g�íµ ÷Æ°>)Ú__name__Ú
__module__Ú__qualname__r$   r>   Ú__classcell__©r-   s   @r.   r!   r!   .   s   ø„ õ$ö+r/   r!   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚT5DenseActDenseÚconfigc                 ó^  •— t         ‰| �  «        t        j                  |j                  |j
                  d¬«      | _        t        j                  |j
                  |j                  d¬«      | _        t        j                  |j                  «      | _
        t        |j                     | _        y ©NF©Úbias)r#   r$   r   ÚLinearÚd_modelÚd_ffÚwiÚwoÚDropoutÚdropout_rateÚdropoutr	   Údense_act_fnÚact©r*   rF   r-   s     €r.   r$   zT5DenseActDense.__init__H   sn   ø€ Ü‰ÑÔÜ—)‘)˜FŸN™N¨F¯K©K¸eÔDˆŒÜ—)‘)˜FŸK™K¨¯©¸eÔDˆŒÜ—z‘z &×"5Ñ"5Ó6ˆŒÜ˜&×-Ñ-Ñ.ˆ�r/   c                 ó  — | j                  |«      }| j                  |«      }| j                  |«      }t        | j                  j
                  t        j                  «      r�|j                  | j                  j
                  j                  k7  r`| j                  j
                  j                  t        j                  k7  r/|j                  | j                  j
                  j                  «      }| j	                  |«      }|S ©N)rN   rT   rR   Ú
isinstancerO   r(   r&   ÚTensorr9   Úint8r4   ©r*   r<   s     r.   r>   zT5DenseActDense.forwardO   sª   € ØŸ™ Ó.ˆØŸ™ Ó/ˆØŸ™ ]Ó3ˆä�t—w‘w—~‘~¤u§|¡|Ô4Ø×#Ñ# t§w¡w§~¡~×';Ñ';Ò;Ø—‘—‘×$Ñ$¬¯
©
Ò2à)×,Ñ,¨T¯W©W¯^©^×-AÑ-AÓBˆMØŸ™ Ó.ˆØÐr/   ©r?   r@   rA   r   r$   r>   rB   rC   s   @r.   rE   rE   G   s   ø„ ð/˜xõ /ör/   rE   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚT5DenseGatedActDenserF   c                 óÀ  •— t         ‰| �  «        t        j                  |j                  |j
                  d¬«      | _        t        j                  |j                  |j
                  d¬«      | _        t        j                  |j
                  |j                  d¬«      | _        t        j                  |j                  «      | _        t        |j                     | _        y rH   )r#   r$   r   rK   rL   rM   Úwi_0Úwi_1rO   rP   rQ   rR   r	   rS   rT   rU   s     €r.   r$   zT5DenseGatedActDense.__init__^   sŠ   ø€ Ü‰ÑÔÜ—I‘I˜fŸn™n¨f¯k©kÀÔFˆŒ	Ü—I‘I˜fŸn™n¨f¯k©kÀÔFˆŒ	Ü—)‘)˜FŸK™K¨¯©¸eÔDˆŒÜ—z‘z &×"5Ñ"5Ó6ˆŒÜ˜&×-Ñ-Ñ.ˆ�r/   c                 ó,  — | j                  | j                  |«      «      }| j                  |«      }||z  }| j                  |«      }t	        | j
                  j                  t        j                  «      r�|j                  | j
                  j                  j                  k7  r`| j
                  j                  j                  t        j                  k7  r/|j                  | j
                  j                  j                  «      }| j                  |«      }|S rW   )rT   r`   ra   rR   rX   rO   r(   r&   rY   r9   rZ   r4   )r*   r<   Úhidden_geluÚhidden_linears       r.   r>   zT5DenseGatedActDense.forwardf   s¿   € Ø—h‘h˜tŸy™y¨Ó7Ó8ˆØŸ	™	 -Ó0ˆØ# mÑ3ˆØŸ™ ]Ó3ˆô �t—w‘w—~‘~¤u§|¡|Ô4Ø×#Ñ# t§w¡w§~¡~×';Ñ';Ò;Ø—‘—‘×$Ñ$¬¯
©
Ò2à)×,Ñ,¨T¯W©W¯^©^×-AÑ-AÓBˆMàŸ™ Ó.ˆØÐr/   r\   rC   s   @r.   r^   r^   ]   s   ø„ ð/˜xõ /ör/   r^   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )Ú	T5LayerFFrF   c                 ó  •— t         ‰| �  «        |j                  rt        |«      | _        nt        |«      | _        t        |j                  |j                  ¬«      | _	        t        j                  |j                  «      | _        y )N©r,   )r#   r$   Úis_gated_actr^   ÚDenseReluDenserE   r!   rL   Úlayer_norm_epsilonÚ
layer_normr   rP   rQ   rR   rU   s     €r.   r$   zT5LayerFF.__init__{   s_   ø€ Ü‰ÑÔØ×ÒÜ"6°vÓ">ˆDÕä"1°&Ó"9ˆDÔä% f§n¡n¸&×:SÑ:SÔTˆŒÜ—z‘z &×"5Ñ"5Ó6ˆ�r/   c                 ór   — | j                  |«      }| j                  |«      }|| j                  |«      z   }|S rW   )rl   rj   rR   )r*   r<   Úforwarded_statess      r.   r>   zT5LayerFF.forward…   s=   € ØŸ?™?¨=Ó9ÐØ×.Ñ.Ð/?Ó@ÐØ%¨¯©Ð5EÓ(FÑFˆØÐr/   r\   rC   s   @r.   rf   rf   z   s   ø„ ð7˜xõ 7ör/   rf   c                   ó`   ‡ — e Zd Z	 	 ddededz  fˆ fd„Zed	d„«       Zd
d„Z	 	 	 	 	 dd„Z	ˆ xZ
S )ÚT5AttentionNrF   Ú	layer_idxc                 óê  •— t         ‰| �  «        |j                  | _        || _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _
        |j                  | _        | j                  | j                  z  | _        || _        |€9| j                  r-t        j!                  d| j"                  j$                  › d�«       t'        j(                  | j                  | j                  d¬«      | _        t'        j(                  | j                  | j                  d¬«      | _        t'        j(                  | j                  | j                  d¬«      | _        t'        j(                  | j                  | j                  d¬«      | _        | j                  r/t'        j2                  | j                  | j                  «      | _        d| _        y )NzInstantiating a decoder z³ without passing `layer_idx` is not recommended and will to errors during the forward call, if caching is used. Please make sure to provide a `layer_idx` when creating this class.FrI   )r#   r$   Ú
is_decoderÚhas_relative_attention_biasÚrelative_attention_num_bucketsÚrelative_attention_max_distancerL   Úd_kvÚkey_value_proj_dimÚ	num_headsÚn_headsrQ   rR   Ú	inner_dimrq   ÚloggerÚwarning_oncer-   r?   r   rK   ÚqÚkÚvÚoÚ	EmbeddingÚrelative_attention_biasÚgradient_checkpointing©r*   rF   rt   rq   r-   s       €r.   r$   zT5Attention.__init__�   si  ø€ ô 	‰ÑÔØ ×+Ñ+ˆŒØ+FˆÔ(Ø.4×.SÑ.SˆÔ+Ø/5×/UÑ/UˆÔ,Ø—~‘~ˆŒØ"(§+¡+ˆÔØ×'Ñ'ˆŒØ×*Ñ*ˆŒØŸ™¨×(?Ñ(?Ñ?ˆŒØ"ˆŒØÐ §¢Ü×ÑØ*¨4¯>©>×+BÑ+BÐ*Cð D,ð ,ôô —‘˜4Ÿ<™<¨¯©¸eÔDˆŒÜ—‘˜4Ÿ<™<¨¯©¸eÔDˆŒÜ—‘˜4Ÿ<™<¨¯©¸eÔDˆŒÜ—‘˜4Ÿ>™>¨4¯<©<¸eÔDˆŒà×+Ò+Ü+-¯<©<¸×8[Ñ8[Ð]a×]iÑ]iÓ+jˆDÔ(à&+ˆÕ#r/   c                 óT  — d}|rC|dz  }|| dkD  j                  t        j                  «      |z  z  }t        j                  | «      } n*t        j                  | t        j
                  | «      «       } |dz  }| |k  }|t        j                  | j                  «       |z  «      t        j                  ||z  «      z  ||z
  z  j                  t        j                  «      z   }t        j                  |t        j                  ||dz
  «      «      }|t        j                  || |«      z  }|S )aÒ  
        Adapted from Mesh Tensorflow:
        https://github.com/tensorflow/mesh/blob/0cb87fe07da627bf0b7e60475d59f95ed6b5be3d/mesh_tensorflow/transformer/transformer_layers.py#L593

        Translate relative position to a bucket number for relative attention. The relative position is defined as
        memory_position - query_position, i.e. the distance in tokens from the attending position to the attended-to
        position. If bidirectional=False, then positive relative positions are invalid. We use smaller buckets for
        small absolute relative_position and larger buckets for larger absolute relative_positions. All relative
        positions >=max_distance map to the same bucket. All relative positions <=-max_distance map to the same bucket.
        This should allow for more graceful generalization to longer sequences than the model has been trained on

        Args:
            relative_position: an int32 Tensor
            bidirectional: a boolean - whether the attention is bidirectional
            num_buckets: an integer
            max_distance: an integer

        Returns:
            a Tensor with the same shape as relative_position, containing int32 values in the range [0, num_buckets)
        r   r1   r   )r4   r&   ÚlongÚabsÚminÚ
zeros_likeÚlogÚfloatÚmathÚ	full_likeÚwhere)Úrelative_positionÚbidirectionalÚnum_bucketsÚmax_distanceÚrelative_bucketsÚ	max_exactÚis_smallÚrelative_position_if_larges           r.   Ú_relative_position_bucketz%T5Attention._relative_position_bucket¯   s(  € ð, ÐÙØ˜AÑˆKØÐ!2°QÑ!6× :Ñ :¼5¿:¹:Ó FÈÑ TÑTÐÜ %§	¡	Ð*;Ó <Ñä!&§¡Ð+<¼e×>NÑ>NÐO`Ó>aÓ!bÐ bÐð   1Ñ$ˆ	Ø$ yÑ0ˆð &/Ü�I‰IÐ'×-Ñ-Ó/°)Ñ;Ó<Ü�h‰h�| iÑ/Ó0ñ1à˜YÑ&ñ(÷ ‰"ŒU�Z‰Z‹.ñ	&Ð"ô
 &+§Y¡YØ&¬¯©Ð8RÐT_ÐbcÑTcÓ(dó&
Ð"ð 	œEŸK™K¨Ð2CÐE_Ó`Ñ`ÐØÐr/   c                 óÜ  — |€ | j                   j                  j                  }t        j                  |t        j
                  |¬«      dd…df   |z   }t        j                  |t        j
                  |¬«      ddd…f   }||z
  }| j                  || j                   | j                  | j                  ¬«      }| j                  |«      }	|	j                  g d¢«      j                  d«      }	|	S )z%Compute binned relative position biasN)r9   Údevice)r‘   r’   r“   )r1   r   r   r   )rƒ   r(   rš   r&   Úaranger‡   r˜   rs   ru   rv   ÚpermuteÚ	unsqueeze)
r*   Úquery_lengthÚ
key_lengthrš   Úpast_seen_tokensÚcontext_positionÚmemory_positionr�   Úrelative_position_bucketÚvaluess
             r.   Úcompute_biaszT5Attention.compute_biasß   sÜ   € àˆ>Ø×1Ñ1×8Ñ8×?Ñ?ˆFÜ Ÿ<™<¨¼E¿J¹JÈvÔVÒWXÐZ^ÐW^Ñ_ÐbrÑrÐÜŸ,™, z¼¿¹ÈFÔSÐTXÒZ[ÐT[Ñ\ˆØ+Ð.>Ñ>ÐØ#'×#AÑ#AØØ#Ÿ™Ð.Ø×;Ñ;Ø×=Ñ=ð	 $Bó $
Ð ð ×-Ñ-Ð.FÓGˆØ—‘¢	Ó*×4Ñ4°QÓ7ˆØˆr/   c                 óÊ  — |j                   dd }g |¢d‘| j                  ‘­}	|�|j                  | j                  «      nd}
t	        |
t
        j                  «      r|
j                  «       n|
}
|du}| j                  |«      j                  |	«      j                  dd«      }d}t	        |t        «      rA|j                  j                  | j                  «      }|r|j                  }n|j                  }n|}|r|n|}|rK|�I|rG|j                   | j                     j"                  }|j                   | j                     j$                  }nÍg |j                   dd ¢d‘| j                  ‘­}| j'                  |«      j                  |«      j                  dd«      }| j)                  |«      j                  |«      j                  dd«      }|�K|j+                  ||| j                  «      \  }}|r)t	        |t        «      rd|j                  | j                  <   t        j,                  ||j                  dd«      «      }|€Â|j                   d	   }| j.                  s`t        j0                  d|j                   d   |d   |f|j2                  |j4                  ¬
«      }| j6                  r6| j8                  r*d|_        n"| j=                  |d   ||j2                  |
¬«      }|�#|dd…dd…dd…d|j                   d	   …f   }||z   }|}||z  }t>        j@                  jC                  |jE                  «       d¬«      jG                  |«      }t>        j@                  jI                  || jH                  | j8                  ¬«      }t        j,                  ||«      }|j                  dd«      jK                  «       } |jL                  g |¢d‘­Ž }| jO                  |«      }||f}|r||fz   }|S )z€
        Self-attention (if key_value_states is None) or attention over source sentence (provided by key_value_states).
        Nr2   r   r   r1   FTr   éþÿÿÿ)rš   r9   )rš   r    ©Údim)ÚpÚtraining)(Úshaperx   Úget_seq_lengthrq   rX   r&   rY   Úcloner~   ÚviewÚ	transposer   Ú
is_updatedÚgetÚcross_attention_cacheÚself_attention_cacheÚlayersÚkeysr¤   r   r€   ÚupdateÚmatmulrt   Úzerosrš   r9   r„   r«   Úrequires_gradr¥   r   Ú
functionalÚsoftmaxrŒ   Útype_asrR   Ú
contiguousÚreshaper�   )r*   r<   ÚmaskÚkey_value_statesÚposition_biasÚpast_key_valuesÚoutput_attentionsÚkwargsÚinput_shapeÚhidden_shaper    Úis_cross_attentionÚquery_statesr±   Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚkv_shapeÚscoresrŸ   Úcausal_maskÚposition_bias_maskedÚattn_weightsÚattn_outputÚoutputss                             r.   r>   zT5Attention.forwardð   s·  € ð $×)Ñ)¨#¨2Ð.ˆØB˜ÐB bÐB¨$×*AÑ*AÑBˆØM\ÐMh˜?×9Ñ9¸$¿.¹.ÔIÐnoÐä7AÐBRÔTY×T`ÑT`Ô7aÐ+×1Ñ1Ô3ÐgwÐð .°TÐ9Ðà—v‘v˜mÓ,×1Ñ1°,Ó?×IÑIÈ!ÈQÓOˆð ˆ
Ü�oÔ':Ô;Ø(×3Ñ3×7Ñ7¸¿¹ÓGˆJÙ!à'6×'LÑ'LÑ$à'6×'KÑ'KÑ$à#2Ð á-?Ñ)À]ˆÙ /Ð"=Á*à-×4Ñ4°T·^±^ÑD×IÑIˆJØ/×6Ñ6°t·~±~ÑF×MÑM‰LàP˜×-Ñ-¨c¨rÐ2ÐP°BÐP¸×8OÑ8OÑPˆHØŸ™ Ó/×4Ñ4°XÓ>×HÑHÈÈAÓNˆJØŸ6™6 .Ó1×6Ñ6°xÓ@×JÑJÈ1ÈaÓPˆLàÐ*Ø+?×+FÑ+FÀzÐS_Ðae×aoÑaoÓ+pÑ(�
˜Lá%¬*°_ÔFYÔ*ZØAE�O×.Ñ.¨t¯~©~Ñ>ô —‘˜l¨J×,@Ñ,@ÀÀAÓ,FÓGˆàÐ Ø#×)Ñ)¨"Ñ-ˆJØ×3Ò3Ü %§¡Ø˜×*Ñ*¨1Ñ-¨{¸1©~¸zÐJÐSY×S`ÑS`Ðhn×htÑhtô!�ð ×.Ò.°4·=²=Ø26�MÕ/à $× 1Ñ 1Ø ‘N J°v·}±}ÐWgð !2ó !�ð ÐØ"¢1¢aªÐ,B¨j×.>Ñ.>¸rÑ.BÐ,BÐ#BÑC�Ø -°Ñ ;�à,ÐØÐ&Ñ&ˆô —}‘}×,Ñ,¨V¯\©\«^ÀÐ,ÓD×LÑLÈVÓTˆÜ—}‘}×,Ñ,¨\¸T¿\¹\ÐTX×TaÑTaÐ,Óbˆä—l‘l <°Ó>ˆà!×+Ñ+¨A¨qÓ1×<Ñ<Ó>ˆØ)�k×)Ñ)Ð;¨;Ð;¸Ò;ˆØ—f‘f˜[Ó)ˆà Ð.ˆáØ  Ñ/ˆGØˆr/   ©FN)Té    é€   )Nr   )NNNNF)r?   r@   rA   r   Úintr$   Ústaticmethodr˜   r¥   r>   rB   rC   s   @r.   rp   rp   Œ   sX   ø„ ð %*Ø $ñ	 ,àð ,ð ˜‘:õ	 ,ðD ò- ó ð- ó^ð( ØØØØ÷[r/   rp   c                   ó>   ‡ — e Zd Zddedz  fˆ fd„Z	 	 	 	 	 dd„Zˆ xZS )ÚT5LayerSelfAttentionNrq   c                 óÜ   •— t         ‰| �  «        t        |||¬«      | _        t	        |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y )N©rt   rq   rh   )r#   r$   rp   ÚSelfAttentionr!   rL   rk   rl   r   rP   rQ   rR   r…   s       €r.   r$   zT5LayerSelfAttention.__init__O  sT   ø€ Ü‰ÑÔÜ(ØÐ0KÐW`ô
ˆÔô & f§n¡n¸&×:SÑ:SÔTˆŒÜ—z‘z &×"5Ñ"5Ó6ˆ�r/   c                 ó–   — | j                  |«      }| j                  ||||||¬«      }	|| j                  |	d   «      z   }|f|	dd  z   }
|
S )N)rÀ   rÂ   rÃ   Ú	use_cacherÄ   r   r   )rl   rÞ   rR   )r*   r<   Úattention_maskrÂ   rÃ   rà   rÄ   rÅ   Únormed_hidden_statesÚattention_outputrÔ   s              r.   r>   zT5LayerSelfAttention.forwardW  sp   € ð  $Ÿ™¨}Ó=ÐØ×-Ñ-Ø ØØ'Ø+ØØ/ð .ó 
Ðð &¨¯©Ð5EÀaÑ5HÓ(IÑIˆØ Ð"Ð%5°a°bÐ%9Ñ9ˆØˆr/   rÕ   )NNNFF©r?   r@   rA   rØ   r$   r>   rB   rC   s   @r.   rÛ   rÛ   N  s*   ø„ ñ7ÈSÐSWÉZõ 7ð ØØØØ÷r/   rÛ   c                   ó<   ‡ — e Zd Zddedz  fˆ fd„Z	 	 	 	 dd„Zˆ xZS )ÚT5LayerCrossAttentionNrq   c                 óÜ   •— t         ‰| �  «        t        |d|¬«      | _        t	        |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y )NFrÝ   rh   )r#   r$   rp   ÚEncDecAttentionr!   rL   rk   rl   r   rP   rQ   rR   )r*   rF   rq   r-   s      €r.   r$   zT5LayerCrossAttention.__init__p  sN   ø€ Ü‰ÑÔÜ*¨6ÈuÐ`iÔjˆÔÜ% f§n¡n¸&×:SÑ:SÔTˆŒÜ—z‘z &×"5Ñ"5Ó6ˆ�r/   c                 ó–   — | j                  |«      }| j                  ||||||¬«      }	|| j                  |	d   «      z   }
|
f|	dd  z   }|S )N)rÀ   rÁ   rÂ   rÃ   rÄ   r   r   )rl   rè   rR   )r*   r<   rÁ   rá   rÂ   rÃ   rÄ   rÅ   râ   rã   Úlayer_outputrÔ   s               r.   r>   zT5LayerCrossAttention.forwardv  so   € ð  $Ÿ™¨}Ó=ÐØ×/Ñ/Ø ØØ-Ø'Ø+Ø/ð 0ó 
Ðð % t§|¡|Ð4DÀQÑ4GÓ'HÑHˆØ�/Ð$4°Q°RÐ$8Ñ8ˆØˆr/   rW   )NNNFrä   rC   s   @r.   ræ   ræ   o  s&   ø„ ñ7¨#°©*õ 7ð ØØØ÷r/   ræ   c                   óF   ‡ — e Zd Zddedz  fˆ fd„Z	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )ÚT5BlockNrq   c                 óp  •— t         ‰| �  «        |j                  | _        t        j                  «       | _        | j
                  j                  t        |||¬«      «       | j                  r&| j
                  j                  t        ||¬«      «       | j
                  j                  t        |«      «       y )NrÝ   )rq   )
r#   r$   rs   r   Ú
ModuleListÚlayerÚappendrÛ   ræ   rf   r…   s       €r.   r$   zT5Block.__init__�  s‚   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒÜ—]‘]“_ˆŒ
Ø�
‰
×ÑÜ  ÐE`ÐluÔvô	
ð �?Š?Ø�J‰J×ÑÔ3°FÀiÔPÔQà�
‰
×Ñœ) FÓ+Õ,r/   c                 óx  —  | j                   d   ||||||	¬«      }|d   }|dd  }|j                  t        j                  k(  r¢t        j                  t        j
                  |«      j                  «       t        j                  |j                  «      j                  dz
  t        j                  |j                  «      j                  «      }t        j                  || |¬«      }| j                  xr |d u}|rç | j                   d   ||||||	¬«      }|d   }|j                  t        j                  k(  r¢t        j                  t        j
                  |«      j                  «       t        j                  |j                  «      j                  dz
  t        j                  |j                  «      j                  «      }t        j                  || |¬«      }||dd  z   } | j                   d   |«      }|j                  t        j                  k(  r¢t        j                  t        j
                  |«      j                  «       t        j                  |j                  «      j                  dz
  t        j                  |j                  «      j                  «      }t        j                  || |¬«      }|f}||z   S )Nr   )rá   rÂ   rÃ   rà   rÄ   r   iè  )r‰   Úmax)rÁ   rá   rÂ   rÃ   rÄ   r2   )rï   r9   r&   r:   r�   ÚisinfÚanyÚfinforò   Úclamprs   )r*   r<   rá   rÂ   Úencoder_hidden_statesÚencoder_attention_maskÚencoder_decoder_position_biasrÃ   rà   rÄ   Úreturn_dictrÅ   Úself_attention_outputsÚattention_outputsÚclamp_valueÚdo_cross_attentionÚcross_attention_outputsrÔ   s                     r.   r>   zT5Block.forward›  sY  € ð "/ §¡¨A¡ØØ)Ø'Ø+ØØ/ô"
Ðð /¨qÑ1ˆØ2°1°2Ð6Ðð ×Ñ¤%§-¡-Ò/ÜŸ+™+Ü—‘˜MÓ*×.Ñ.Ó0Ü—‘˜M×/Ñ/Ó0×4Ñ4°tÑ;Ü—‘˜M×/Ñ/Ó0×4Ñ4óˆKô
 "ŸK™K¨¸K¸<È[ÔYˆMà!Ÿ_™_ÒRÐ1FÈdÐ1RÐÙØ&3 d§j¡j°¡mØØ!6Ø5Ø;Ø /Ø"3ô'Ð#ð 4°AÑ6ˆMð ×"Ñ"¤e§m¡mÒ3Ü#Ÿk™kÜ—K‘K Ó.×2Ñ2Ó4Ü—K‘K × 3Ñ 3Ó4×8Ñ8¸4Ñ?Ü—K‘K × 3Ñ 3Ó4×8Ñ8ó�ô
 !&§¡¨MÀ¸|ÐQ\Ô ]�ð !2Ð4KÈAÈBÐ4OÑ OÐð '˜Ÿ
™
 2™ }Ó5ˆð ×Ñ¤%§-¡-Ò/ÜŸ+™+Ü—‘˜MÓ*×.Ñ.Ó0Ü—‘˜M×/Ñ/Ó0×4Ñ4°tÑ;Ü—‘˜M×/Ñ/Ó0×4Ñ4óˆKô
 "ŸK™K¨¸K¸<È[ÔYˆMà Ð"ˆð Ð'Ñ'ð	
r/   rÕ   )	NNNNNNFFTrä   rC   s   @r.   rì   rì   Ž  s7   ø„ ñ
-ÈSÐSWÉZõ 
-ð ØØ"Ø#Ø&*ØØØØ÷J
r/   rì   c                   ó`   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚT5ClassificationHeadz-Head for sentence-level classification tasks.rF   c                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  ¬«      | _        t        j                  |j                  |j                  «      | _
        y )N)rª   )r#   r$   r   rK   rL   ÚdenserP   Úclassifier_dropoutrR   Ú
num_labelsÚout_projrU   s     €r.   r$   zT5ClassificationHead.__init__ë  sZ   ø€ Ü‰ÑÔÜ—Y‘Y˜vŸ~™~¨v¯~©~Ó>ˆŒ
Ü—z‘z F×$=Ñ$=Ô>ˆŒÜŸ	™	 &§.¡.°&×2CÑ2CÓDˆ�r/   r<   Úreturnc                 ó¸   — | j                  |«      }| j                  |«      }t        j                  |«      }| j                  |«      }| j	                  |«      }|S rW   )rR   r  r&   Útanhr  r[   s     r.   r>   zT5ClassificationHead.forwardñ  sN   € ØŸ™ ]Ó3ˆØŸ
™
 =Ó1ˆÜŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ mÓ4ˆØÐr/   )
r?   r@   rA   Ú__doc__r   r$   r&   rY   r>   rB   rC   s   @r.   r  r  è  s/   ø„ Ù7ðE˜xõ Eð U§\¡\ð °e·l±l÷ r/   r  c                   ó€   ‡ — e Zd ZU eed<   dZdZdZdgZdgZ	e
d„ «       Z ej                  «       ˆ fd„«       Zd„ Zˆ xZS )	ÚT5PreTrainedModelrF   ÚtransformerTrì   rO   c                 óv   — t        j                  t        «      }t        j                  t        «      }|||dœ}|S )N)Údecoder_input_idsÚ	input_idsÚdecoder_attention_mask)r&   Útensorr   r   )r*   r  Ú
input_maskÚdummy_inputss       r.   r  zT5PreTrainedModel.dummy_inputs  s6   € ä—L‘L¤Ó.ˆ	Ü—\‘\¤*Ó-ˆ
à!*Ø"Ø&0ñ
ˆð
 Ðr/   c                 ó’  •— t         ‰| �  |«       | j                  j                  }t	        |t
        «      r$t        j                  |j                  |dz  «       y	t	        |t        t        t        t        f«      rýt        j                  |j                  j                  d|dz  ¬«       t        |d«      rE| j                  j                   s/t        j                  |j"                  j                  d|dz  ¬«       t        |d«      rpt        j                  |j$                  j                  d|| j                  j&                  dz  z  ¬«       t        j(                  |j$                  j*                  «       y	y	t	        |t,        «      rft        |d«      rYt        j                  |j.                  j                  d|dz  ¬«       t        j(                  |j.                  j*                  «       y	y	t	        |t0        «      �r9t        j                  |j2                  j                  d|| j                  j&                  dz  z  ¬«       t        |j2                  d«      r?|j2                  j*                  �)t        j(                  |j2                  j*                  «       t        j                  |j4                  j                  d|| j                  j&                  dz  z  ¬«       t        |j4                  d«      rA|j4                  j*                  �*t        j(                  |j4                  j*                  «       y	y	y	t	        |t6        «      �r9t        j                  |j8                  j                  d|| j                  j&                  dz  z  ¬«       t        |j8                  d«      r?|j8                  j*                  �)t        j(                  |j8                  j*                  «       t        j                  |j:                  j                  d|| j                  j<                  dz  z  ¬«       t        |j:                  d«      rA|j:                  j*                  �*t        j(                  |j:                  j*                  «       y	y	y	t	        |t>        «      �rÔt        j                  |j@                  j                  d|| j                  j&                  dz  z  ¬«       t        |j@                  d«      r?|j@                  j*                  �)t        j(                  |j@                  j*                  «       t        j                  |jB                  j                  d|| j                  j&                  dz  z  ¬«       t        |jB                  d«      r?|jB                  j*                  �)t        j(                  |jB                  j*                  «       t        j                  |j:                  j                  d|| j                  j<                  dz  z  ¬«       t        |j:                  d«      rA|j:                  j*                  �*t        j(                  |j:                  j*                  «       y	y	y	t	        |tD        «      �rP| j                  j&                  }| j                  jF                  }| j                  jH                  }t        j                  |jJ                  j                  d|||z  dz  z  ¬«       t        j                  |jL                  j                  d||dz  z  ¬«       t        j                  |jN                  j                  d||dz  z  ¬«       t        j                  |jP                  j                  d|||z  dz  z  ¬«       |jR                  r3t        j                  |jT                  j                  d||dz  z  ¬«       y	y	y	)
zInitialize the weightsg      ð?g        )r7   ÚstdÚlm_headÚ
qa_outputsç      à¿Ú
classifierrJ   N)+r#   Ú_init_weightsrF   Úinitializer_factorrX   r!   ÚinitÚ	constant_r(   ÚT5ModelÚT5ForConditionalGenerationÚT5EncoderModelÚT5ForQuestionAnsweringÚnormal_ÚsharedÚhasattrÚtie_word_embeddingsr  r  rL   Úzeros_rJ   ÚT5ForTokenClassificationr  r  r  r  rE   rN   rO   rM   r^   r`   ra   rp   rw   ry   r~   r   r€   r�   rt   rƒ   )r*   ÚmoduleÚfactorrL   rx   rz   r-   s         €r.   r  zT5PreTrainedModel._init_weights  sD  ø€ ô 	‰Ñ˜fÔ%Ø—‘×/Ñ/ˆÜ�fœkÔ*Ü�N‰N˜6Ÿ=™=¨&°3©,Õ7ÜØÜÔ0´.ÔBXÐYô
ô �L‰L˜Ÿ™×-Ñ-°C¸VÀc¹\ÕJÜ�v˜yÔ)°$·+±+×2QÒ2QÜ—‘˜VŸ^™^×2Ñ2¸À&È3Á,ÕOÜ�v˜|Ô,Ü—‘˜V×.Ñ.×5Ñ5¸CÀVÐPT×P[ÑP[×PcÑPcÐhlÑOlÑEmÕnÜ—‘˜F×-Ñ-×2Ñ2Õ3ð -ô ˜Ô 8Ô9Ü�v˜|Ô,Ü—‘˜V×.Ñ.×5Ñ5¸CÀVÈcÁ\ÕRÜ—‘˜F×-Ñ-×2Ñ2Õ3ð -ô ˜Ô 4Õ5Ü�L‰L˜Ÿ™×,Ñ,°3¸FÀtÇ{Á{×GZÑGZÐ_cÑFcÑ<dÕeÜ�v—|‘| VÔ,°·±×1BÑ1BÐ1NÜ—‘˜FŸL™L×-Ñ-Ô.Ü�L‰L˜Ÿ™×/Ñ/°c¸vÈ$Ï+É+×J]ÑJ]ÐbfÑIfÑ?gÕhÜ�v—‘¨Ô/°F·O±O×4HÑ4HÐ4TÜ—‘˜FŸO™O×0Ñ0Õ1ð 5UÐ/ä˜¤Õ0Ü�L‰L˜Ÿ™×)Ñ)°¸ÀDÇKÁK×DWÑDWÐ\`ÑC`Ñ9aÕbÜ�v—y‘y &Ô)¨f¯i©i¯n©nÐ.HÜ—‘˜FŸI™IŸN™NÔ+Ü�L‰L˜Ÿ™×)Ñ)°¸ÀDÇKÁK×DTÑDTÐY]ÑC]Ñ9^Õ_Ü�v—y‘y &Ô)¨f¯i©i¯n©nÐ.HÜ—‘˜FŸI™IŸN™NÕ+ð /IÐ)ä˜Ô 4Õ5Ü�L‰L˜Ÿ™×+Ñ+°#¸6ÀdÇkÁk×FYÑFYÐ^bÑEbÑ;cÕdÜ�v—{‘{ FÔ+°·±×0@Ñ0@Ð0LÜ—‘˜FŸK™K×,Ñ,Ô-Ü�L‰L˜Ÿ™×+Ñ+°#¸6ÀdÇkÁk×FYÑFYÐ^bÑEbÑ;cÕdÜ�v—{‘{ FÔ+°·±×0@Ñ0@Ð0LÜ—‘˜FŸK™K×,Ñ,Ô-Ü�L‰L˜Ÿ™×)Ñ)°¸ÀDÇKÁK×DTÑDTÐY]ÑC]Ñ9^Õ_Ü�v—y‘y &Ô)¨f¯i©i¯n©nÐ.HÜ—‘˜FŸI™IŸN™NÕ+ð /IÐ)ä˜¤Õ,Ø—k‘k×)Ñ)ˆGØ!%§¡×!1Ñ!1ÐØ—k‘k×+Ñ+ˆGÜ�L‰L˜Ÿ™Ÿ™¨s¸À7ÐM_ÑC_ÐdhÑBhÑ8iÕjÜ�L‰L˜Ÿ™Ÿ™¨s¸À'È4Á-Ñ8PÕQÜ�L‰L˜Ÿ™Ÿ™¨s¸À'È4Á-Ñ8PÕQÜ�L‰L˜Ÿ™Ÿ™¨s¸À7ÐM_ÑC_ÐdhÑBhÑ8iÕjØ×1Ò1Ü—‘˜V×;Ñ;×BÑBÈÐRXÐ]dÐimÑ\mÑRnÖoð 2ð -r/   c                 ó8  — | j                   j                  }| j                   j                  }|€t        d«      ‚|j	                  |j
                  «      }|dd d…f   j                  «       |ddd …f<   ||d<   |€t        d«      ‚|j                  |dk(  |«       |S )NzŠself.model.config.decoder_start_token_id has to be defined. In T5 it is usually set to the pad_token_id. See T5 docs for more information..r2   r   ).r   z1self.model.config.pad_token_id has to be defined.éœÿÿÿ)rF   Údecoder_start_token_idÚpad_token_idÚ
ValueErrorÚ	new_zerosr¬   r®   Úmasked_fill_)r*   r  r-  r.  Úshifted_input_idss        r.   Ú_shift_rightzT5PreTrainedModel._shift_rightG  s°   € Ø!%§¡×!CÑ!CÐØ—{‘{×/Ñ/ˆà!Ð)Üð4óð ð
 &×/Ñ/°	·±Ó@ÐØ%.¨s°C°R°C¨xÑ%8×%>Ñ%>Ó%@Ð˜#˜q™r˜'Ñ"Ø$:Ð˜&Ñ!àÐÜÐPÓQÐQà×&Ñ&Ð'8¸DÑ'@À,ÔOà Ð r/   )r?   r@   rA   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_can_compile_fullgraphÚ_no_split_modulesÚ_keep_in_fp32_modulesÚpropertyr  r&   Úno_gradr  r3  rB   rC   s   @r.   r  r  ú  sa   ø… àÓØ%ÐØ&*Ð#Ø!Ðà"˜ÐØ!˜FÐàñó ðð €U‡]�]ƒ_ó5pó ð5pön!r/   r  c                   ó@   ‡ — e Zd Zˆ fd„Zd„ Z	 	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )ÚT5Stackc                 ó  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        |j                  | _        t        j                  t        |j                  «      D �cg c]  }t        |t        |dk(  «      |¬«      ‘Œ c}«      | _        t        |j
                  |j                  ¬«      | _        t        j"                  |j$                  «      | _        | j)                  «        d| _        y c c}w )Nr   rÝ   rh   F)r#   r$   r   r‚   Ú
vocab_sizerL   Úembed_tokensrs   rî   ÚrangeÚ
num_layersrì   ÚboolÚblockr!   rk   Úfinal_layer_normrP   rQ   rR   Ú	post_initr„   )r*   rF   Úir-   s      €r.   r$   zT5Stack.__init__^  sÂ   ø€ Ü‰Ñ˜Ô äŸL™L¨×):Ñ):¸F¿N¹NÓKˆÔØ ×+Ñ+ˆŒä—]‘]Ü]bÐci×ctÑctÓ]uÖvÐXYŒW�V¼¸aÀ1¹f»ÐQRÖSÒvó
ˆŒ
ô !,¨F¯N©NÀ×@YÑ@YÔ ZˆÔÜ—z‘z &×"5Ñ"5Ó6ˆŒð 	�‰ÔØ&+ˆÕ#ùò ws   Á7!Dc                 ó   — || _         y rW   )r@  ©r*   Únew_embeddingss     r.   Úset_input_embeddingszT5Stack.set_input_embeddingsn  s
   € Ø*ˆÕr/   c                 óÞ  — |�|n| j                   j                  }|�|n| j                   j                  }|	�|	n| j                   j                  }	|
�|
n| j                   j                  }
|�$|�"| j
                  rdnd}t        d|› d|› d�«      ‚|�&|j                  «       }|j                  d|d   «      }n8|�|j                  «       d d }n"| j
                  rdnd}t        d|› d|› d	�«      ‚| j                  r%| j                  r|rt        j                  d
«       d}|€(| j                  €t        d«      ‚| j                  |«      }|\  }}|du r| j
                  st        d| › d�«      ‚| j
                  rf|rr|€p| j                   j                  r5t        t!        | j                   ¬«      t!        | j                   ¬«      «      }n%t!        | j                   ¬«      }n| j
                  sd }| j                   j
                  r6t#        | j                   ||t%        |t        «      r|j&                  n|¬«      }nt)        | j                   ||¬«      }d }| j
                  r|�t)        | j                   |||¬«      }|	rdnd }|rdnd }|r| j
                  rdnd }d }d }| j+                  |«      }| j,                  D ]_  }|	r||fz   } |||||||||||
¬«
      }|d   }|d   }| j
                  r|�	||rdnd   }|sŒA||d   fz   }| j
                  sŒW||d   fz   }Œa | j/                  |«      }| j+                  |«      }|	r||fz   }|
st1        d„ |||||fD «       «      S t3        |||||¬«      S )NÚdecoder_Ú zYou cannot specify both zinput_ids and zinputs_embeds at the same timer2   zYou have to specify either zinput_ids or Úinputs_embedszZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...Fz<You have to initialize the model with valid token embeddingsTz)`use_cache` can only be set to `True` if z is used as a decoder)rF   )rF   rO  rá   rÃ   )rF   rO  rá   )rF   rO  rá   r÷   © )rÃ   rà   rÄ   rú   r   r   r   r1   é   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wrW   rP  )Ú.0r€   s     r.   ú	<genexpr>z"T5Stack.forward.<locals>.<genexpr>û  s   è ø€ ò 
àð �=ô ñ
ùs   ‚)Úlast_hidden_staterÃ   r<   Ú
attentionsÚcross_attentions)rF   rà   rÄ   Úoutput_hidden_statesrú   rs   r/  Úsizer¯   r„   r«   r|   r}   r@  Úis_encoder_decoderr   r   r   rX   r´   r   rR   rD  rE  Útupler   )r*   r  rá   r÷   rø   rO  rÃ   rà   rÄ   rX  rú   rÅ   Úerr_msg_prefixrÆ   Ú
batch_sizeÚ
seq_lengthÚencoder_extended_attention_maskÚall_hidden_statesÚall_attentionsÚall_cross_attentionsrÂ   rù   r<   Úlayer_moduleÚlayer_outputss                            r.   r>   zT5Stack.forwardq  sì  € ð "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø1BÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ  ]Ð%>Ø+/¯?ª?™ZÀˆNÜØ*¨>Ð*:¸.ÈÐHXÐXvÐwóð ð Ð"Ø#Ÿ.™.Ó*ˆKØ!Ÿ™ r¨;°r©?Ó;‰IØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰Kà+/¯?ª?™ZÀˆNÜÐ:¸>Ð:JÈ-ÐXfÐWgÐgtÐuÓvÐvà×&Ò&¨4¯=ª=ÙÜ×#Ñ#Øpôð "�	àÐ Ø× Ñ Ð(Ü Ð!_Ó`Ð`Ø ×-Ñ-¨iÓ8ˆMà!,Ñˆ
�Jà˜ÑØ—?’?Ü Ð#LÈTÈFÐRgÐ!hÓiÐià�?Š?Ù˜_Ð4Ø—;‘;×1Ò1Ü&9Ü$¨D¯K©KÔ8¼,ÈdÏkÉkÔ:Zó'‘Oô '3¸$¿+¹+Ô&F‘OØ—’ð #ˆOà�;‰;×!Ò!Ü/Ø—{‘{Ø+Ø-ä˜oÔ/BÔCð !0× DÒ Dà$ô‰Nô 7Ø—{‘{Ø+Ø-ôˆNð +/Ð'Ø�?Š?Ð4Ð@Ü.GØ—{‘{Ø+Ø5Ø&;ô	/Ð+ñ #7™B¸DÐÙ0™°dˆÙ&7¸D¿OºO™rÐRVÐØˆØ(,Ð%àŸ™ ]Ó3ˆà ŸJ™Jò 	VˆLÙ#Ø$5¸Ð8HÑ$HÐ!á(ØØØØ%Ø/Ø-Ø /Ø#Ø"3Ø'ôˆMð *¨!Ñ,ˆMð
 *¨!Ñ,ˆMØ�ŠÐ#8Ð#DØ0=ÑCT¹aÐZ[Ñ0\Ð-â Ø!/°=ÀÑ3CÐ2EÑ!E�Ø—?“?Ø+?À=ÐQRÑCSÐBUÑ+UÑ(ð;	Vð> ×-Ñ-¨mÓ<ˆØŸ™ ]Ó3ˆñ  Ø 1°]Ð4DÑ DÐáÜñ 
ð "Ø#Ø%Ø"Ø(ðô
ó 
ð 
ô 9Ø+Ø+Ø+Ø%Ø1ô
ð 	
r/   )
NNNNNNNNNN)r?   r@   rA   r$   rK  r>   rB   rC   s   @r.   r=  r=  ]  s3   ø„ ô,ò +ð
 ØØ"Ø#ØØØØØ!Ø÷[
r/   r=  c                   ó   ‡ — e Zd ZdgZdddœZdefˆ fd„Zd„ Zd„ Ze		 	 	 	 	 	 	 	 	 	 	 	 dd	e
j                  dz  d
e
j                  dz  de
j                  dz  de
j                  dz  deee
j                        dz  dedz  de
j                   dz  de
j                   dz  dedz  dedz  dedz  dedz  dee
j                     ez  fd„«       Zˆ xZS )r  úFdecoder.block.0.layer.1.EncDecAttention.relative_attention_bias.weightúshared.weight©úencoder.embed_tokens.weightúdecoder.embed_tokens.weightrF   c                 ó‚  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        t        j                  |«      }d|_	        d|_
        t        |«      | _        t        j                  |«      }d|_	        |j                  |_        t        |«      | _        | j!                  «        y ©NFT)r#   r$   r   r‚   r?  rL   r$  ÚcopyÚdeepcopyrs   rà   r=  ÚencoderÚnum_decoder_layersrB  ÚdecoderrF  ©r*   rF   Úencoder_configÚdecoder_configr-   s       €r.   r$   zT5Model.__init__  s’   ø€ Ü‰Ñ˜Ô Ü—l‘l 6×#4Ñ#4°f·n±nÓEˆŒäŸ™ vÓ.ˆØ$)ˆÔ!Ø#(ˆÔ Ü˜~Ó.ˆŒäŸ™ vÓ.ˆØ$(ˆÔ!Ø$*×$=Ñ$=ˆÔ!Ü˜~Ó.ˆŒð 	�‰Õr/   c                 ó   — | j                   S rW   ©r$  ©r*   s    r.   Úget_input_embeddingszT5Model.get_input_embeddings*  ó   € Ø�{‰{Ðr/   c                 ó~   — || _         | j                  j                  |«       | j                  j                  |«       y rW   ©r$  ro  rK  rq  rI  s     r.   rK  zT5Model.set_input_embeddings-  ó-   € Ø$ˆŒØ�‰×)Ñ)¨.Ô9Ø�‰×)Ñ)¨.Õ9r/   Nr  rá   r  r  Úencoder_outputsrÃ   rO  Údecoder_inputs_embedsrà   rÄ   rX  rú   r  c                 óD  — |	�|	n| j                   j                  }	|�|n| j                   j                  }|€| j                  ||||
||¬«      }nI|rGt	        |t
        «      s7t        |d   t        |«      dkD  r|d   ndt        |«      dkD  r|d   nd¬«      }|d   }| j                  |||||||	|
||¬«
      }|s||z   S t        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  ¬«      S )	aV
  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. T5 is a model with relative position embeddings so you
            should be able to pad the inputs on both the right and the left.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for detail.

            [What are input IDs?](../glossary#input-ids)

            To know more on how to prepare `input_ids` for pretraining take a look a [T5 Training](./t5#training).
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            T5 uses the `pad_token_id` as the starting token for `decoder_input_ids` generation. If `past_key_values`
            is used, optionally only the last `decoder_input_ids` have to be input (see `past_key_values`).

            To know more on how to prepare `decoder_input_ids` for pretraining take a look at [T5
            Training](./t5#training).
        decoder_attention_mask (`torch.BoolTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.

        Example:

        ```python
        >>> from transformers import AutoTokenizer, T5Model

        >>> tokenizer = AutoTokenizer.from_pretrained("google-t5/t5-small")
        >>> model = T5Model.from_pretrained("google-t5/t5-small")

        >>> input_ids = tokenizer(
        ...     "Studies have been shown that owning a dog is good for you", return_tensors="pt"
        ... ).input_ids  # Batch size 1
        >>> decoder_input_ids = tokenizer("Studies show that", return_tensors="pt").input_ids  # Batch size 1

        >>> # preprocess: Prepend decoder_input_ids with start token which is pad token for T5Model.
        >>> # This is not needed for torch's T5ForConditionalGeneration as it does this internally using labels arg.
        >>> decoder_input_ids = model._shift_right(decoder_input_ids)

        >>> # forward pass
        >>> outputs = model(input_ids=input_ids, decoder_input_ids=decoder_input_ids)
        >>> last_hidden_states = outputs.last_hidden_state
        ```N©r  rá   rO  rÄ   rX  rú   r   r   r1   ©rU  r<   rV  ©
r  rá   rO  rÃ   r÷   rø   rà   rÄ   rX  rú   )rU  rÃ   Údecoder_hidden_statesÚdecoder_attentionsrW  Úencoder_last_hidden_stater÷   Úencoder_attentions)rF   rà   rú   ro  rX   r   Úlenrq  r   rU  rÃ   r<   rV  rW  )r*   r  rá   r  r  r}  rÃ   rO  r~  rà   rÄ   rX  rú   rÅ   r<   Údecoder_outputss                   r.   r>   zT5Model.forward2  sO  € ðD "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆð Ð"Ø"Ÿl™lØ#Ø-Ø+Ø"3Ø%9Ø'ð +ó ‰Oñ ¤¨O¼_Ô!MÜ-Ø"1°!Ñ"4Ü47¸Ó4HÈ1Ò4L˜o¨aÒ0ÐRVÜ14°_Ó1EÈÒ1I˜?¨1Ò-ÈtôˆOð (¨Ñ*ˆð Ÿ,™,Ø'Ø1Ø/Ø+Ø"/Ø#1ØØ/Ø!5Ø#ð 'ó 
ˆñ Ø" _Ñ4Ð4ä!Ø-×?Ñ?Ø+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ô	
ð 		
r/   ©NNNNNNNNNNNN)r?   r@   rA   Ú"_keys_to_ignore_on_load_unexpectedÚ_tied_weights_keysr   r$   rx  rK  r   r&   Ú
LongTensorÚFloatTensorÚ
BoolTensorr[  r
   rY   rC  r   r>   rB   rC   s   @r.   r  r    sx  ø„ ð 	Qð*Ð&ð (7Ø'6ñÐð
˜xõ ò"ò:ð
 ð .2Ø37Ø59Ø:>ØBFØ(,Ø-1Ø59Ø!%Ø)-Ø,0Ø#'ñq
à×#Ñ# dÑ*ðq
ð ×)Ñ)¨DÑ0ðq
ð !×+Ñ+¨dÑ2ð	q
ð
 !&× 0Ñ 0°4Ñ 7ðq
ð ˜u U×%6Ñ%6Ñ7Ñ8¸4Ñ?ðq
ð  ™ðq
ð —|‘| dÑ*ðq
ð  %Ÿ|™|¨dÑ2ðq
ð ˜$‘;ðq
ð   $™;ðq
ð # T™kðq
ð ˜D‘[ðq
ð 
ˆu× Ñ Ñ	!Ð$6Ñ	6òq
ó ôq
r/   r  z:
    T5 Model with a `language modeling` head on top.
    )Úcustom_introc                   óâ  ‡ — e Zd ZdgZddddœZdefˆ fd„Zd„ Zd„ Ze		 	 	 	 	 	 	 	 	 	 	 	 	 dd	e
j                  dz  d
e
j                  dz  de
j                  dz  de
j                  dz  deee
j                        dz  dedz  de
j                  dz  de
j                  dz  de
j                  dz  dedz  dedz  dedz  dedz  dee
j                     ez  fd„«       Zde
j                  fd„Zˆ xZS )r   rf  rg  )zlm_head.weightri  rj  rF   c                 ó  •— t         ‰| �  |«       |j                  | _        t	        j
                  |j                  |j                  «      | _        t        j                  |«      }d|_
        d|_        t        |«      | _        t        j                  |«      }d|_
        |j                  |_        t        |«      | _        t	        j"                  |j                  |j                  d¬«      | _        | j'                  «        y )NFTrI   )r#   r$   rL   Ú	model_dimr   r‚   r?  r$  rm  rn  rs   rà   r=  ro  rp  rB  rq  rK   r  rF  rr  s       €r.   r$   z#T5ForConditionalGeneration.__init__¶  s»   ø€ Ü‰Ñ˜Ô ØŸ™ˆŒä—l‘l 6×#4Ñ#4°f·n±nÓEˆŒäŸ™ vÓ.ˆØ$)ˆÔ!Ø#(ˆÔ Ü˜~Ó.ˆŒäŸ™ vÓ.ˆØ$(ˆÔ!Ø$*×$=Ñ$=ˆÔ!Ü˜~Ó.ˆŒä—y‘y §¡°×1BÑ1BÈÔOˆŒð 	�‰Õr/   c                 ó   — | j                   S rW   rv  rw  s    r.   rx  z/T5ForConditionalGeneration.get_input_embeddingsË  ry  r/   c                 ó~   — || _         | j                  j                  |«       | j                  j                  |«       y rW   r{  rI  s     r.   rK  z/T5ForConditionalGeneration.set_input_embeddingsÎ  r|  r/   Nr  rá   r  r  r}  rÃ   rO  r~  Úlabelsrà   rÄ   rX  rú   r  c                 óÂ  — |
�|
n| j                   j                  }
|�|n| j                   j                  }|€| j                  ||||||¬«      }nI|rGt	        |t
        «      s7t        |d   t        |«      dkD  r|d   ndt        |«      dkD  r|d   nd¬«      }|d   }|	�|€|€| j                  |	«      }| j                  |||||||
|||¬«
      }|d   }| j                   j                  r|| j                  dz  z  }| j                  |«      }d}|	�^t        d	¬
«      }|	j                  |j                  «      }	 ||j                  d|j!                  d«      «      |	j                  d«      «      }|s|f|dd z   |z   }|�|f|z   S |S t#        |||j$                  |j&                  |j(                  |j*                  |j,                  |j&                  |j(                  ¬«	      S )a  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. T5 is a model with relative position embeddings so you
            should be able to pad the inputs on both the right and the left.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for detail.

            [What are input IDs?](../glossary#input-ids)

            To know more on how to prepare `input_ids` for pretraining take a look a [T5 Training](./t5#training).
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            T5 uses the `pad_token_id` as the starting token for `decoder_input_ids` generation. If `past_key_values`
            is used, optionally only the last `decoder_input_ids` have to be input (see `past_key_values`).

            To know more on how to prepare `decoder_input_ids` for pretraining take a look at [T5
            Training](./t5#training).
        decoder_attention_mask (`torch.BoolTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[-100, 0, ...,
            config.vocab_size - 1]`. All labels set to `-100` are ignored (masked), the loss is only computed for
            labels in `[0, ..., config.vocab_size]`

        Examples:

        ```python
        >>> from transformers import AutoTokenizer, T5ForConditionalGeneration

        >>> tokenizer = AutoTokenizer.from_pretrained("google-t5/t5-small")
        >>> model = T5ForConditionalGeneration.from_pretrained("google-t5/t5-small")

        >>> # training
        >>> input_ids = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="pt").input_ids
        >>> labels = tokenizer("<extra_id_0> cute dog <extra_id_1> the <extra_id_2>", return_tensors="pt").input_ids
        >>> outputs = model(input_ids=input_ids, labels=labels)
        >>> loss = outputs.loss
        >>> logits = outputs.logits

        >>> # inference
        >>> input_ids = tokenizer(
        ...     "summarize: studies have shown that owning a dog is good for you", return_tensors="pt"
        ... ).input_ids  # Batch size 1
        >>> outputs = model.generate(input_ids)
        >>> print(tokenizer.decode(outputs[0], skip_special_tokens=True))
        >>> # studies have shown that owning a dog is good for you.
        ```Nr€  r   r   r1   r�  r‚  r  r,  ©Úignore_indexr2   ©	ÚlossÚlogitsrÃ   rƒ  r„  rW  r…  r÷   r†  )rF   rà   rú   ro  rX   r   r‡  r3  rq  Úscale_decoder_outputsr’  r  r   r4   rš   r¯   rY  r   rÃ   r<   rV  rW  rU  )r*   r  rá   r  r  r}  rÃ   rO  r~  r•  rà   rÄ   rX  rú   rÅ   r<   rˆ  Úsequence_outputÚ	lm_logitsrš  Úloss_fctÚoutputs                         r.   r>   z"T5ForConditionalGeneration.forwardÓ  s  € ðR "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆð Ð"à"Ÿl™lØ#Ø-Ø+Ø"3Ø%9Ø'ð +ó ‰Oñ ¤¨O¼_Ô!MÜ-Ø"1°!Ñ"4Ü47¸Ó4HÈ1Ò4L˜o¨aÒ0ÐRVÜ14°_Ó1EÈÒ1I˜?¨1Ò-ÈtôˆOð (¨Ñ*ˆàÐÐ"3Ð";Ð@UÐ@]à $× 1Ñ 1°&Ó 9Ðð Ÿ,™,Ø'Ø1Ø/Ø+Ø"/Ø#1ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆà�;‰;×,Ò,Ø-°·±ÀÑ1EÑFˆOà—L‘L Ó1ˆ	àˆØÐÜ'°TÔ:ˆHà—Y‘Y˜y×/Ñ/Ó0ˆFÙ˜IŸN™N¨2¨y¯~©~¸bÓ/AÓBÀFÇKÁKÐPRÃOÓTˆDáØ�\ O°A°BÐ$7Ñ7¸/ÑIˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØØØ+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ô

ð 
	
r/   c                 ó$   — | j                  |«      S rW   )r3  )r*   r•  s     r.   Ú%prepare_decoder_input_ids_from_labelsz@T5ForConditionalGeneration.prepare_decoder_input_ids_from_labelsc  s   € Ø× Ñ  Ó(Ð(r/   ©NNNNNNNNNNNNN)r?   r@   rA   rŠ  r‹  r   r$   rx  rK  r   r&   rŒ  r�  rŽ  r[  rY   r
   rC  r   r>   r¢  rB   rC   s   @r.   r   r   §  s¦  ø„ ð 	Qð*Ð&ð *Ø'6Ø'6ñÐð˜xõ ò*ò:ð
 ð .2Ø37Ø59Ø:>Ø=AØ(,Ø26Ø:>Ø*.Ø!%Ø)-Ø,0Ø#'ñM
à×#Ñ# dÑ*ðM
ð ×)Ñ)¨DÑ0ðM
ð !×+Ñ+¨dÑ2ð	M
ð
 !&× 0Ñ 0°4Ñ 7ðM
ð ˜u U§\¡\Ñ2Ñ3°dÑ:ðM
ð  ™ðM
ð ×(Ñ(¨4Ñ/ðM
ð  %×0Ñ0°4Ñ7ðM
ð × Ñ  4Ñ'ðM
ð ˜$‘;ðM
ð   $™;ðM
ð # T™kðM
ð ˜D‘[ðM
ð  
ˆu× Ñ Ñ	! OÑ	3ò!M
ó ðM
ð^)¸E¿L¹L÷ )r/   r   c                   óú   ‡ — e Zd ZddiZdgZdefˆ fd„Zd„ Zd„ Ze		 	 	 	 	 	 dd	e
j                  dz  d
e
j                  dz  de
j                  dz  dedz  dedz  dedz  dee
j                     ez  fd„«       Zˆ xZS )r!  ri  rg  rq  rF   c                 óâ   •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        |}d|_        d|_        t        |«      | _
        | j                  «        y )NF)r#   r$   r   r‚   r?  rL   r$  rà   rZ  r=  ro  rF  )r*   rF   rs  r-   s      €r.   r$   zT5EncoderModel.__init__l  sY   ø€ Ü‰Ñ˜Ô Ü—l‘l 6×#4Ñ#4°f·n±nÓEˆŒàˆØ#(ˆÔ Ø,1ˆÔ)Ü˜~Ó.ˆŒð 	�‰Õr/   c                 ó   — | j                   S rW   rv  rw  s    r.   rx  z#T5EncoderModel.get_input_embeddingsx  ry  r/   c                 óH   — || _         | j                  j                  |«       y rW   )r$  ro  rK  rI  s     r.   rK  z#T5EncoderModel.set_input_embeddings{  s   € Ø$ˆŒØ�‰×)Ñ)¨.Õ9r/   Nr  rá   rO  rÄ   rX  rú   r  c                 óh   — |�|n| j                   j                  }| j                  ||||||¬«      }|S )aI  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. T5 is a model with relative position embeddings so you
            should be able to pad the inputs on both the right and the left.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for detail.

            To know more on how to prepare `input_ids` for pretraining take a look a [T5 Training](./t5#training).

        Example:

        ```python
        >>> from transformers import AutoTokenizer, T5EncoderModel

        >>> tokenizer = AutoTokenizer.from_pretrained("google-t5/t5-small")
        >>> model = T5EncoderModel.from_pretrained("google-t5/t5-small")
        >>> input_ids = tokenizer(
        ...     "Studies have been shown that owning a dog is good for you", return_tensors="pt"
        ... ).input_ids  # Batch size 1
        >>> outputs = model(input_ids=input_ids)
        >>> last_hidden_states = outputs.last_hidden_state
        ```r€  )rF   rú   ro  )	r*   r  rá   rO  rÄ   rX  rú   rÅ   r}  s	            r.   r>   zT5EncoderModel.forward  sH   € ðD &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàŸ,™,ØØ)Ø'Ø/Ø!5Ø#ð 'ó 
ˆð Ðr/   )NNNNNN)r?   r@   rA   r‹  rŠ  r   r$   rx  rK  r   r&   rŒ  r�  rC  r[  r   r>   rB   rC   s   @r.   r!  r!  g  sÕ   ø„ à7¸ÐIÐØ*4¨Ð&ð
˜xõ 
òò:ð ð .2Ø37Ø26Ø)-Ø,0Ø#'ñ,à×#Ñ# dÑ*ð,ð ×)Ñ)¨DÑ0ð,ð ×(Ñ(¨4Ñ/ð	,ð
   $™;ð,ð # T™kð,ð ˜D‘[ð,ð 
ˆu× Ñ Ñ	! OÑ	3ò,ó ô,r/   r!  zƒ
    T5 model with a sequence classification/head on top (a linear layer on top of the pooled output) e.g. for GLUE
    tasks.
    c                   ó~  ‡ — e Zd ZdgZdefˆ fd„Ze	 	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	e
ej                     dz  d
ej                  dz  dej                  dz  dej                  dz  dedz  dedz  dedz  dedz  deez  fd„«       Zˆ xZS )ÚT5ForSequenceClassificationrf  rF   c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y rW   )r#   r$   r  r  r  Úclassification_headrF  rU   s     €r.   r$   z$T5ForSequenceClassification.__init__¸  s5   ø€ Ü‰Ñ˜Ô Ü" 6›?ˆÔÜ#7¸Ó#?ˆÔ ð 	�‰Õr/   Nr  rá   r  r  r}  rO  r~  r•  rà   rÄ   rX  rú   r  c                 óR  — |�|n| j                   j                  }|�d}	|€$|�"t        d| j                  j                  › �«      ‚|€ |€|€t        d«      ‚| j                  |«      }| j                  ||||||||	|
||¬«      }|d   }|j                  | j                   j                  «      j                  |j                  «      }t        t        j                  |j                  d«      «      j!                  «       dk(  d«       |j"                  \  }}}||dd…f   }t        |j"                  d   |z  dk\  d	«       |j%                  |d
|«      dd…d
dd…f   }| j'                  |«      }d}|��Ê|j                  |j                  «      }| j                   j(                  €¡| j                   j*                  dk(  rd| j                   _        nv| j                   j*                  dkD  rL|j,                  t        j.                  k(  s|j,                  t        j0                  k(  rd| j                   _        nd| j                   _        | j                   j(                  dk(  rSt3        «       }| j                   j*                  dk(  r& ||j5                  «       |j5                  «       «      }n– |||«      }nŒ| j                   j(                  dk(  rGt7        «       } ||j%                  d
| j                   j*                  «      |j%                  d
«      «      }n,| j                   j(                  dk(  rt9        «       } |||«      }|s|f|dd z   }|�|f|z   S |S t;        |||j<                  |j>                  |j@                  |jB                  |jD                  |jF                  |jH                  ¬«	      S )a¤  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. T5 is a model with relative position embeddings so you
            should be able to pad the inputs on both the right and the left.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for detail.

            [What are input IDs?](../glossary#input-ids)

            To know more on how to prepare `input_ids` for pretraining take a look a [T5 Training](./t5#training).
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            T5 uses the `pad_token_id` as the starting token for `decoder_input_ids` generation. If `past_key_values`
            is used, optionally only the last `decoder_input_ids` have to be input (see `past_key_values`).

            To know more on how to prepare `decoder_input_ids` for pretraining take a look at [T5
            Training](./t5#training).
        decoder_attention_mask (`torch.BoolTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        NFz8Passing input embeddings is currently not supported for ú°If no `decoder_input_ids` or `decoder_inputs_embeds` are passed, `input_ids` cannot be `None`. Please pass either `input_ids` or `decoder_input_ids` or `decoder_inputs_embeds`.)
rá   r  r  r}  rO  r~  rà   rÄ   rX  rú   r   r   z7All examples must have the same number of <eos> tokens.z3Each example must contain at least one <eos> token.r2   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationr™  )%rF   rú   ÚNotImplementedErrorr-   r?   r/  r3  r  ÚeqÚeos_token_idr4   rš   r   r&   Úunique_consecutiveÚsumÚnumelr¬   r¯   r¬  Úproblem_typer  r9   r‡   rØ   r   Úsqueezer   r   r   rÃ   rƒ  r„  rW  r…  r÷   r†  )r*   r  rá   r  r  r}  rO  r~  r•  rà   rÄ   rX  rú   rÅ   rÔ   r�  Úeos_maskr]  Ú_r+   ÚselectedÚsentence_representationr›  rš  rŸ  r   s                             r.   r>   z#T5ForSequenceClassification.forwardÀ  sp  € ð` &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØÐØˆIàÐ Ð!:Ü%ØJÈ4Ï>É>×KbÑKbÐJcÐdóð ð Ð$Ð)>Ð)FØÐ Ü ðUóð ð
 !%× 1Ñ 1°)Ó <Ðà×"Ñ"ØØ)Ø/Ø#9Ø+Ø'Ø"7ØØ/Ø!5Ø#ð #ó 
ˆð " !™*ˆà—<‘< §¡× 8Ñ 8Ó9×<Ñ<¸_×=SÑ=SÓTˆäÜ×$Ñ$ X§\¡\°!£_Ó5×;Ñ;Ó=ÀÑBØEô	
ð &5×%:Ñ%:Ñ"ˆ
�A�{Ø" 8ªQ ;Ñ/ˆÜØ�N‰N˜1Ñ Ñ+¨qÑ0ØAô	
ð #+§-¡-°
¸BÀÓ"LÊQÐPRÒTUÈXÑ"VÐØ×)Ñ)Ð*AÓBˆàˆØÑØ—Y‘Y˜vŸ}™}Ó-ˆFØ�{‰{×'Ñ'Ð/Ø—;‘;×)Ñ)¨QÒ.Ø/;�D—K‘KÕ,Ø—[‘[×+Ñ+¨aÒ/°V·\±\ÄUÇZÁZÒ5OÐSY×S_ÑS_Ôch×clÑclÒSlØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—;‘;×)Ñ)¨QÒ.Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±×0FÑ0FÓ GÈÏÉÐUWËÓY‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ÙØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä.ØØØ#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô

ð 
	
r/   r‰  )r?   r@   rA   rŠ  r   r$   r   r&   rŒ  rY   Úlistr�  rC  r[  r   r>   rB   rC   s   @r.   rª  rª  ¯  sU  ø„ ð +sÐ)sÐ&ð˜xõ ð ð .2Ø.2Ø59Ø:>Ø:>Ø26Ø:>Ø*.Ø!%Ø)-Ø,0Ø#'ñF
à×#Ñ# dÑ*ðF
ð Ÿ™ tÑ+ðF
ð !×+Ñ+¨dÑ2ð	F
ð
 !&× 0Ñ 0°4Ñ 7ðF
ð ˜e×/Ñ/Ñ0°4Ñ7ðF
ð ×(Ñ(¨4Ñ/ðF
ð  %×0Ñ0°4Ñ7ðF
ð × Ñ  4Ñ'ðF
ð ˜$‘;ðF
ð   $™;ðF
ð # T™kðF
ð ˜D‘[ðF
ð 
Ð0Ñ	0òF
ó ôF
r/   rª  c                   ó   ‡ — e Zd Zdefˆ fd„Ze	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dedz  d	edz  d
edz  de	ej                     e
z  fd„«       Zˆ xZS )r(  rF   c                 ó,  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        | j                  «        y rW   )r#   r$   r  r!  r  r   rP   r  rR   rK   r+   r  rF  rU   s     €r.   r$   z!T5ForTokenClassification.__init__L  sj   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä)¨&Ó1ˆÔÜ—z‘z &×";Ñ";Ó<ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr/   Nr  rá   rO  r•  rÄ   rX  rú   r  c                 óž  — |�|n| j                   j                  }| j                  ||||||¬«      }	|	d   }
| j                  |
«      }
| j	                  |
«      }d}|�<t        «       } ||j                  d| j                  «      |j                  d«      «      }|s||	dd f}|�|f|z   S |S t        |||	j                  |	j                  ¬«      S )a<  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. T5 is a model with relative position embeddings so you
            should be able to pad the inputs on both the right and the left.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for detail.

            [What are input IDs?](../glossary#input-ids)

            To know more on how to prepare `input_ids` for pretraining take a look a [T5 Training](./t5#training).
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.
        N)rá   rO  rÄ   rX  rú   r   r2   r1   )rš  r›  r<   rV  )rF   rú   r  rR   r  r   r¯   r  r   r<   rV  )r*   r  rá   rO  r•  rÄ   rX  rú   rÅ   rÔ   r<   r›  rš  rŸ  r   s                  r.   r>   z T5ForTokenClassification.forwardW  sí   € ð4 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà×"Ñ"ØØ)Ø'Ø/Ø!5Ø#ð #ó 
ˆð   ™
ˆØŸ™ ]Ó3ˆØ—‘ Ó/ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDáØ˜g a¨˜mÐ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r/   )NNNNNNN)r?   r@   rA   r   r$   r   r&   rY   rC  r[  r   r>   rB   rC   s   @r.   r(  r(  J  sÇ   ø„ ð	˜xõ 	ð ð *.Ø.2Ø-1Ø&*Ø)-Ø,0Ø#'ñ6
à—<‘< $Ñ&ð6
ð Ÿ™ tÑ+ð6
ð —|‘| dÑ*ð	6
ð
 —‘˜tÑ#ð6
ð   $™;ð6
ð # T™kð6
ð ˜D‘[ð6
ð 
ˆu�|‰|Ñ	Ð4Ñ	4ò6
ó ô6
r/   r(  c                   óÔ  ‡ — e Zd ZdgZdddœZdefˆ fd„Zd„ Zd„ Ze		 	 	 	 	 	 	 	 	 	 	 	 	 dd	e
j                  dz  d
e
j                  dz  de
j                  dz  de
j                  dz  deee
j                        dz  de
j                  dz  de
j                  dz  de
j                  dz  de
j                  dz  dedz  dedz  dedz  dedz  dee
j                     ez  fd„«       Zˆ xZS )r"  rf  rg  rh  rF   c                 ó$  •— t         ‰| �  |«       |j                  | _        t	        j
                  |j                  |j                  «      | _        t        j                  |«      }d|_
        d|_        t        |«      | _        t        j                  |«      }d|_
        |j                  |_        t        |«      | _        |j"                  | _        t	        j$                  |j&                  |j"                  «      | _        | j+                  «        y rl  )r#   r$   rL   r’  r   r‚   r?  r$  rm  rn  rs   rà   r=  ro  rp  rB  rq  r  rK   r+   r  rF  rr  s       €r.   r$   zT5ForQuestionAnswering.__init__™  sÈ   ø€ Ü‰Ñ˜Ô ØŸ™ˆŒä—l‘l 6×#4Ñ#4°f·n±nÓEˆŒäŸ™ vÓ.ˆØ$)ˆÔ!Ø#(ˆÔ Ü˜~Ó.ˆŒäŸ™ vÓ.ˆØ$(ˆÔ!Ø$*×$=Ñ$=ˆÔ!Ü˜~Ó.ˆŒà ×+Ñ+ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr/   c                 ó   — | j                   S rW   rv  rw  s    r.   rx  z+T5ForQuestionAnswering.get_input_embeddings¯  ry  r/   c                 ó~   — || _         | j                  j                  |«       | j                  j                  |«       y rW   r{  rI  s     r.   rK  z+T5ForQuestionAnswering.set_input_embeddings²  r|  r/   Nr  rá   r  r  r}  Ústart_positionsÚend_positionsrO  r~  rà   rÄ   rX  rú   r  c                 ó¾  — |�|n| j                   j                  }|
�|
n| j                   j                  }
|�|�d}
|€ |	€|€t        d«      ‚| j	                  |«      }|
�|
n| j                   j                  }
|�|n| j                   j                  }|€| j                  ||||||¬«      }nI|rGt        |t        «      s7t        |d   t        |«      dkD  r|d   ndt        |«      dkD  r|d   nd¬«      }|d   }| j                  |||	d|||
|||¬	«
      }|d   }| j                  |«      }|j                  dd
¬«      \  }}|j                  d
«      j                  «       }|j                  d
«      j                  «       }d}|�é|�çt        |j                  «       «      dkD  r*|j                  d
«      j                  |j                   «      }t        |j                  «       «      dkD  r*|j                  d
«      j                  |j                   «      }|j                  d«      }|j#                  d|«      }|j#                  d|«      }t%        |¬«      } |||«      } |||«      }||z   dz  }|s||f|dd z   |z   }|�|f|z   S |S t'        ||||j(                  |j*                  |j,                  |j.                  |j0                  |j*                  |j,                  ¬«
      S )az  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. T5 is a model with relative position embeddings so you
            should be able to pad the inputs on both the right and the left.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for detail.

            [What are input IDs?](../glossary#input-ids)

            To know more on how to prepare `input_ids` for pretraining take a look a [T5 Training](./t5#training).
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            T5 uses the `pad_token_id` as the starting token for `decoder_input_ids` generation. If `past_key_values`
            is used, optionally only the last `decoder_input_ids` have to be input (see `past_key_values`).

            To know more on how to prepare `decoder_input_ids` for pretraining take a look at [T5
            Training](./t5#training).
        decoder_attention_mask (`torch.BoolTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.
        NFr®  r€  r   r   r1   r�  r‚  r2   r¨   r—  )
rš  Ústart_logitsÚ
end_logitsrÃ   rƒ  r„  rW  r…  r÷   r†  )rF   rú   rà   r/  r3  ro  rX   r   r‡  rq  r  Úsplitr¹  r¾   rY  r4   rš   rö   r   r   rÃ   r<   rV  rW  rU  )r*   r  rá   r  r  r}  rÆ  rÇ  rO  r~  rà   rÄ   rX  rú   rÅ   r<   rˆ  r�  r›  rÉ  rÊ  Ú
total_lossÚignored_indexrŸ  Ú
start_lossÚend_lossr   s                              r.   r>   zT5ForQuestionAnswering.forward·  s0  € ð\ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØ!*Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	ØÐ&¨=Ð+DØˆIð
 Ð$Ð)>Ð)FØÐ Ü ðUóð ð
 !%× 1Ñ 1°)Ó <Ðà!*Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆð Ð"Ø"Ÿl™lØ#Ø-Ø+Ø"3Ø%9Ø'ð +ó ‰Oñ ¤¨O¼_Ô!MÜ-Ø"1°!Ñ"4Ü47¸Ó4HÈ1Ò4L˜o¨aÒ0ÐRVÜ14°_Ó1EÈÒ1I˜?¨1Ò-ÈtôˆOð (¨Ñ*ˆð Ÿ,™,Ø'Ø1Ø/Ø Ø"/Ø#1ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÐ&¨=Ð+Dä�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=×"@Ñ"@À×ATÑATÓ"U�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9× <Ñ <¸Z×=NÑ=NÓ O�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJáØ" JÐ/°/À!À"Ð2EÑEÈÑWˆFØ/9Ð/E�Z�M FÑ*ÐQÈ6ÐQä2ØØ%Ø!Ø+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ô
ð 	
r/   r£  )r?   r@   rA   rŠ  r‹  r   r$   rx  rK  r   r&   rŒ  r�  rŽ  r[  rY   rC  r   r>   rB   rC   s   @r.   r"  r"  ‘  s“  ø„ à*rÐ)sÐ&à'6Ø'6ñÐð
˜xõ ò,ò:ð
 ð .2Ø37Ø59Ø:>Ø=AØ37Ø15Ø26Ø:>Ø!%Ø)-Ø,0Ø#'ñI
à×#Ñ# dÑ*ðI
ð ×)Ñ)¨DÑ0ðI
ð !×+Ñ+¨dÑ2ð	I
ð
 !&× 0Ñ 0°4Ñ 7ðI
ð ˜u U§\¡\Ñ2Ñ3°dÑ:ðI
ð ×)Ñ)¨DÑ0ðI
ð ×'Ñ'¨$Ñ.ðI
ð ×(Ñ(¨4Ñ/ðI
ð  %×0Ñ0°4Ñ7ðI
ð ˜$‘;ðI
ð   $™;ðI
ð # T™kðI
ð ˜D‘[ðI
ð  
ˆu× Ñ Ñ	!Ð$GÑ	Gò!I
ó ôI
r/   r"  )r!  r   r  r  r"  rª  r(  )Ar
  rm  r�   r&   r   Útorch.nnr   r   r   rN  r   r  Úactivationsr	   Úcache_utilsr
   r   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   r   Úmodeling_utilsr   Úutilsr   r   r   r   r   Úconfiguration_t5r   Ú
get_loggerr?   r|   ÚModuler!   rE   r^   rf   rp   rÛ   ræ   rì   r  r  r=  r  r   r!  rª  r(  r"  Ú__all__rP  r/   r.   ú<module>rÝ     s  ðñ ã Û ã Ý ß AÑ Aå &Ý !ß CÑ CÝ )ß JÝ 9÷÷ ñ õ .ß ^Õ ^Ý &ð 
ˆ×	Ñ	˜HÓ	%€ô+�"—)‘)ô +ô2�b—i‘iô ô,˜2Ÿ9™9ô ô:�—	‘	ô ô$�"—)‘)ô ôD˜2Ÿ9™9ô ôB˜BŸI™Iô ô>W
Ð(ô W
ôt˜2Ÿ9™9ô ð$ ô_!˜ó _!ó ð_!ôDo
Ðô o
ðd ôT
Ðó T
ó ðT
ñn ðôô
x)Ð!2°Oó x)óð
x)ðv ôDÐ&ó Dó ðDñN ðôôR
Ð"3ó R
óðR
ðj ôC
Ð0ó C
ó ðC
ðL ôo
Ð.ó o
ó ðo
òd�r/   