Ë
    ÜÓ^jb¶  ã                   ób  — d Z ddlZddlmZ ddlZddlZddlmZ ddl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 ddlmZmZmZm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3  e,jh                  e5«      Z6dejn                  de8de8fd„Z9 G d„ dejt                  «      Z;	 	 d<dejx                  dejn                  dejn                  dejn                  d ejn                  dz  d!e=dz  d"e=d#e&e(   fd$„Z> G d%„ d&ejx                  «      Z? G d'„ d(e«      Z@ G d)„ d*e«      ZAe) G d+„ d,e$«      «       ZB G d-„ d.eB«      ZC G d/„ d0eB«      ZDe) G d1„ d2eB«      «       ZE e)d3¬4«       G d5„ d6eBe«      «       ZF G d7„ d8eB«      ZG G d9„ d:eBe«      ZHg d;¢ZIy)=z=PyTorch MarianMTModel model, ported from the Marian C++ repo.é    N)ÚCallable)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚ)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚSeq2SeqLMOutputÚSeq2SeqModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_torchdynamo_compilingÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚMarianConfigÚ	input_idsÚpad_token_idÚdecoder_start_token_idc                 óÖ   — | j                  | j                  «      }| dd…dd…f   j                  «       |dd…dd…f<   ||dd…df<   |€t        d«      ‚|j	                  |dk(  |«       |S )z1
    Shift input ids one token to the right.
    Néÿÿÿÿr!   r   z1self.model.config.pad_token_id has to be defined.iœÿÿÿ)Ú	new_zerosÚshapeÚcloneÚ
ValueErrorÚmasked_fill_)r#   r$   r%   Úshifted_input_idss       úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/marian/modeling_marian.pyÚshift_tokens_rightr/   8   s}   € ð "×+Ñ+¨I¯O©OÓ<ÐØ(ª¨C¨R¨C¨Ñ0×6Ñ6Ó8Ð’a˜™�eÑØ4Ð’a˜�dÑàÐÜÐLÓMÐMà×"Ñ"Ð#4¸Ñ#<¸lÔKàÐó    c            
       óÌ   ‡ — e Zd ZdZddedededz  ddfˆ fd„Zd„ Z ej                  «       	 dd	ej                  d
edej                  dz  dej                  fˆ fd„«       Zˆ xZS )Ú#MarianSinusoidalPositionalEmbeddingzDThis module produces sinusoidal positional embeddings of any length.NÚnum_positionsÚembedding_dimÚpadding_idxÚreturnc                 ó*   •— t         ‰| �  ||d¬«       y )NT)Ú_freeze)ÚsuperÚ__init__)Úselfr3   r4   r5   Ú	__class__s       €r.   r:   z,MarianSinusoidalPositionalEmbedding.__init__K   s   ø€ Ü‰Ñ˜¨¸tÐÕDr0   c                 óˆ  — | j                   j                  \  }}t        j                  t	        |«      D ��cg c];  }t	        |«      D �cg c]$  }|t        j
                  dd|dz  z  |z  «      z  ‘Œ& c}‘Œ= c}}«      }t        j                  ||| j                   j                  d¬«      }|dz  dk(  r|dz  n|dz  dz   }t        j                  t        j                  |dd…ddd…f   «      «      |dd…d|…f<   t        j                  t        j                  |dd…ddd…f   «      «      |dd…|d…f<   |S c c}w c c}}w )z°
        Identical to the XLM create_sinusoidal_embeddings except features are not interleaved. The cos features are in
        the 2nd half of the vector. [dim // 2:]
        i'  é   F)ÚdtypeÚrequires_gradr   r!   N)Úweightr)   ÚnpÚarrayÚrangeÚpowerÚtorchÚemptyr?   ÚFloatTensorÚsinÚcos)r;   Ún_posÚdimÚposÚjÚposition_encÚoutÚsentinels           r.   Úcreate_weightz1MarianSinusoidalPositionalEmbedding.create_weightN   s  € ð
 —[‘[×&Ñ&‰
ˆˆsÜ—x‘xÜX]Ð^cÓXd×eÐQTÄÀsÃÖL¸Aˆc”B—H‘H˜U A¨¨a©¡L°3Ñ$6Ó7Ó7ÔLÓeó
ˆô �k‰k˜% ¨D¯K©K×,=Ñ,=ÈUÔSˆØ" Q™w¨!š|�3˜!’8°#¸±(¸a±ˆÜ"×.Ñ.¬r¯v©v°lÂ1ÀaÀdÈÀdÀ7Ñ6KÓ/LÓMˆŠAˆq�ˆzˆMÑÜ!×-Ñ-¬b¯f©f°\Â!ÀQÀTÈÀTÀ'Ñ5JÓ.KÓLˆŠAˆx‰yˆLÑØˆ
ùò MùÓes   ·D>
Á	)D9Á2D>
Ä9D>
Úinput_ids_shapeÚpast_key_values_lengthÚposition_idsc                 ó²   •— |€F|dd \  }}t        j                  |||z   t         j                  | j                  j                  ¬«      }t
        ‰| �  |«      S )z3`input_ids_shape` is expected to be [bsz x seqlen].Nr>   )r?   Údevice)rF   ÚarangeÚlongrA   rW   r9   Úforward)r;   rS   rT   rU   ÚbszÚseq_lenr<   s         €r.   rZ   z+MarianSinusoidalPositionalEmbedding.forward]   s]   ø€ ð
 ÐØ*¨2¨AÐ.‰LˆC�Ü Ÿ<™<Ø&Ð(>ÀÑ(HÔPU×PZÑPZÐcg×cnÑcn×cuÑcuôˆLô ‰w‰˜|Ó,Ð,r0   ©N)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr:   rR   rF   Úno_gradÚSizeÚTensorrZ   Ú__classcell__©r<   s   @r.   r2   r2   H   sŠ   ø„ ÙNñE cð E¸#ð EÈCÐRVÉJð EÐbfõ Eòð €U‡]�]ƒ_àptñ	-Ø$Ÿz™zð	-ØCFð	-ØZ_×ZfÑZfÐimÑZmð	-à	�‰ô	-ó ô	-r0   r2   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 óœ  — |€|j                  d«      dz  }t        j                  ||j                  dd«      «      |z  }|�||z   }t        j
                  j                  |d¬«      }t        j
                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nr'   ç      à¿r>   r   ©rL   ©ÚpÚtrainingr!   )
ÚsizerF   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxrn   ru   Ú
contiguous)
rh   ri   rj   rk   rl   rm   rn   ro   Úattn_weightsÚattn_outputs
             r.   Úeager_attention_forwardr~   k   s»   € ð €Ø—*‘*˜R“. DÑ(ˆô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LàÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r0   c                   ó  ‡ — e Zd ZdZ	 	 	 	 	 	 ddedededededed	edz  d
edz  fˆ fd„Z	 	 	 dde	j                  de	j                  dz  dedz  de	j                  dz  dee   dee	j                  e	j                  dz  f   fd„Zˆ xZS )ÚMarianAttentionz=Multi-headed attention from 'Attention Is All You Need' paperNÚ	embed_dimÚ	num_headsrn   Ú
is_decoderÚbiasÚ	is_causalÚconfigÚ	layer_idxc	                 óŽ  •— t         ‰	| �  «        || _        || _        || _        ||z  | _        || _        | j
                  |z  | j                  k7  rt        d| j                  › d|› d�«      ‚| j
                  dz  | _        || _	        || _
        || _        |€9| j                  r-t        j                  d| j                  j                  › d�«       t!        j"                  |||¬«      | _        t!        j"                  |||¬«      | _        t!        j"                  |||¬«      | _        t!        j"                  |||¬«      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).rq   zInstantiating a decoder z¸ without passing `layer_idx` is not recommended and will lead to errors during the forward call, if caching is used. Please make sure to provide a `layer_idx` when creating this class.©r„   )r9   r:   r�   r‚   rn   Úhead_dimr†   r+   rm   rƒ   r…   r‡   ÚloggerÚwarning_oncer<   r^   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)
r;   r�   r‚   rn   rƒ   r„   r…   r†   r‡   r<   s
            €r.   r:   zMarianAttention.__init__‹   s$  ø€ ô 	‰ÑÔØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒà�M‰M˜IÑ%¨$¯.©.Ò8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒØ$ˆŒØ"ˆŒØ"ˆŒØÐ §¢Ü×ÑØ*¨4¯>©>×+BÑ+BÐ*Cð D,ð ,ôô —i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜŸ	™	 )¨Y¸TÔBˆ�r0   Úhidden_statesÚkey_value_statesÚpast_key_valuesrl   ro   r6   c                 óØ  — |du}|j                   dd }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }	d}
|�St        |t        «      rA|j                  j                  | j                  «      }
|r|j                  }n|j                  }n|}|r|n|}|rK|�I|
rGj                  | j                     j                  }|j                  | j                     j                  }nÑ| j                  |«      }| j!                  |«      }g |j                   dd ¢d‘| j                  ‘­}|j                  |«      j	                  dd«      }|j                  |«      j	                  dd«      }|�Kj#                  ||| j                  «      \  }}|r)t        |t        «      rd|j                  | j                  <   t%        j&                  | j(                  j*                  t,        «      } || |	|||f| j.                  sdn| j0                  | j2                  dœ|¤Ž\  }} |j4                  g |¢d‘­Ž j7                  «       }| j9                  |«      }||fS )	z#Input shape: Batch x Time x ChannelNr'   r!   r>   FTç        )rn   rm   )r)   rŠ   r�   Úviewrx   Ú
isinstancer   Ú
is_updatedÚgetr‡   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesrŽ   r�   Úupdater   Úget_interfacer†   Ú_attn_implementationr~   ru   rn   rm   Úreshaper{   r‘   )r;   r’   r“   r”   rl   ro   Úis_cross_attentionÚinput_shapeÚhidden_shapeÚquery_statesr™   Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚkv_shapeÚattention_interfacer}   r|   s                      r.   rZ   zMarianAttention.forward²   sd  € ð .°TÐ9Ðð $×)Ñ)¨#¨2Ð.ˆà8˜Ð8 bÐ8¨$¯-©-Ñ8ˆð —{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆàˆ
ØÐ&Ü˜/Ô+>Ô?Ø,×7Ñ7×;Ñ;¸D¿N¹NÓK�
Ù%à+:×+PÑ+PÑ(à+:×+OÑ+OÑ(à'6Ð$á-?Ñ)À]ˆÙ /Ð"=Á*à-×4Ñ4°T·^±^ÑD×IÑIˆJØ/×6Ñ6°t·~±~ÑF×MÑM‰LàŸ™ ^Ó4ˆJØŸ;™; ~Ó6ˆLØF˜×-Ñ-¨c¨rÐ2ÐF°BÐF¸¿¹ÑFˆHØ#Ÿ™¨Ó2×<Ñ<¸QÀÓBˆJØ'×,Ñ,¨XÓ6×@Ñ@ÀÀAÓFˆLàÐ*Ø+?×+FÑ+FÀzÐS_Ðae×aoÑaoÓ+pÑ(�
˜Lá%¬*°_ÔFYÔ*ZØAE�O×.Ñ.¨t¯~©~Ñ>ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆà˜LÐ(Ð(r0   )r–   FTFNN©NNN)r^   r_   r`   ra   rb   ÚfloatÚboolr"   r:   rF   re   r	   r   r   ÚtuplerZ   rf   rg   s   @r.   r€   r€   ˆ   s  ø„ ÙGð Ø ØØØ&*Ø $ñ%Càð%Cð ð%Cð ð	%Cð
 ð%Cð ð%Cð ð%Cð ˜tÑ#ð%Cð ˜‘:õ%CðT 15Ø(,Ø.2ñH)à—|‘|ðH)ð  Ÿ,™,¨Ñ-ðH)ð  ™ð	H)ð
 Ÿ™ tÑ+ðH)ð Ð-Ñ.ðH)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷H)r0   r€   c                   óŠ   ‡ — e Zd Zd
dededz  fˆ fd„Zdej                  dej                  dee	   dej                  fd	„Zˆ xZS )ÚMarianEncoderLayerNr†   r‡   c                 ój  •— t         ‰| �  «        |j                  | _        t	        | j                  |j
                  |j                  ||¬«      | _        t        j                  | j                  «      | _
        |j                  | _        t        |j                     | _        |j                  | _        t        j                   | j                  |j"                  «      | _        t        j                   |j"                  | j                  «      | _        t        j                  | j                  «      | _        y )N)r�   r‚   rn   r†   r‡   )r9   r:   Úd_modelr�   r€   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normrn   r   Úactivation_functionÚactivation_fnÚactivation_dropoutr�   Úencoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm©r;   r†   r‡   r<   s      €r.   r:   zMarianEncoderLayer.__init__ÿ   sÔ   ø€ Ü‰ÑÔØŸ™ˆŒä(Ø—n‘nØ×4Ñ4Ø×,Ñ,ØØô
ˆŒô %'§L¡L°·±Ó$@ˆÔ!Ø—~‘~ˆŒÜ# F×$>Ñ$>Ñ?ˆÔØ"(×";Ñ";ˆÔÜ—9‘9˜TŸ^™^¨V×-CÑ-CÓDˆŒÜ—9‘9˜V×3Ñ3°T·^±^ÓDˆŒÜ "§¡¨T¯^©^Ó <ˆÕr0   r’   rl   ro   r6   c                 óF  — |} | j                   |fd|i|¤Ž\  }}t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }|}| j                  | j                  |«      «      }t        j                  j                  || j                  | j                  ¬«      }| j                  |«      }t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }|j                  t        j                  k(  rht        j                  |«      j                  «       sEt        j                   |j                  «      j"                  dz
  }t        j$                  || |¬«      }|S )Nrl   rs   iè  )ÚminÚmax)r¸   r   ry   rn   ru   rº   r¼   r¿   r½   rÀ   rÁ   r?   rF   Úfloat16ÚisfiniteÚallÚfinforÅ   Úclamp)r;   r’   rl   ro   ÚresidualÚ_Úclamp_values          r.   rZ   zMarianEncoderLayer.forward  sh  € ð !ˆØ)˜4Ÿ>™>Øñ
à)ð
ð ñ
Ñˆ�qô
 Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆØ×1Ñ1°-Ó@ˆà ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆØ×-Ñ-¨mÓ<ˆà×Ñ¤%§-¡-Ò/¼¿¹À}Ó8U×8YÑ8YÔ8[ÜŸ+™+ m×&9Ñ&9Ó:×>Ñ>ÀÑEˆKÜ!ŸK™K¨¸K¸<È[ÔYˆMàÐr0   r]   )r^   r_   r`   r"   rb   r:   rF   rH   r   r   re   rZ   rf   rg   s   @r.   r³   r³   þ   s[   ø„ ñ=˜|ð =¸¸d¹
õ =ð&à×(Ñ(ðð ×)Ñ)ðð Ð+Ñ,ð	ð
 
�‰÷r0   r³   c                   óì   ‡ — e Zd Zddededz  fˆ fd„Z	 	 	 	 	 ddej                  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
e   dej                  fd„Zˆ xZS )ÚMarianDecoderLayerNr†   r‡   c           	      ó  •— t         ‰| �  «        |j                  | _        t	        | j                  |j
                  |j                  dd||¬«      | _        |j                  | _        t        |j                     | _        |j                  | _        t        j                  | j                  «      | _        t	        | j                  |j
                  |j                  d||¬«      | _        t        j                  | j                  «      | _        t        j$                  | j                  |j&                  «      | _        t        j$                  |j&                  | j                  «      | _        t        j                  | j                  «      | _        y )NT)r�   r‚   rn   rƒ   r…   r†   r‡   )rn   rƒ   r†   r‡   )r9   r:   rµ   r�   r€   Údecoder_attention_headsr·   r¸   rn   r   r»   r¼   r½   r   r¹   rº   Úencoder_attnÚencoder_attn_layer_normr�   Údecoder_ffn_dimr¿   rÀ   rÁ   rÂ   s      €r.   r:   zMarianDecoderLayer.__init__3  s   ø€ Ü‰ÑÔØŸ™ˆŒä(Ø—n‘nØ×4Ñ4Ø×,Ñ,ØØØØô
ˆŒð —~‘~ˆŒÜ# F×$>Ñ$>Ñ?ˆÔØ"(×";Ñ";ˆÔä$&§L¡L°·±Ó$@ˆÔ!Ü+Ø�N‰NØ×*Ñ*Ø×,Ñ,ØØØô
ˆÔô (*§|¡|°D·N±NÓ'CˆÔ$Ü—9‘9˜TŸ^™^¨V×-CÑ-CÓDˆŒÜ—9‘9˜V×3Ñ3°T·^±^ÓDˆŒÜ "§¡¨T¯^©^Ó <ˆÕr0   r’   rl   Úencoder_hidden_statesÚencoder_attention_maskr”   Ú	use_cachero   r6   c                 ó  — |} | j                   |f||dœ|¤Ž\  }}	t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }|�h|} | j                  |f|||dœ|¤Ž\  }}	t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }|}| j                  | j                  |«      «      }t        j                  j                  || j                  | j                  ¬«      }| j                  |«      }t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }|S )N)r”   rl   rs   )r“   rl   r”   )r¸   r   ry   rn   ru   rº   rÒ   rÓ   r¼   r¿   r½   rÀ   rÁ   )
r;   r’   rl   rÕ   rÖ   r”   r×   ro   rË   rÌ   s
             r.   rZ   zMarianDecoderLayer.forwardR  s—  € ð !ˆð *˜4Ÿ>™>Øð
à+Ø)ñ
ð ñ	
Ñˆ�qô Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆØ×1Ñ1°-Ó@ˆð !Ð,Ø$ˆHà0˜t×0Ñ0Øð à!6Ø5Ø /ñ	 ð
 ñ ÑˆM˜1ô ŸM™M×1Ñ1°-À4Ç<Á<ÐZ^×ZgÑZgÐ1ÓhˆMØ$ }Ñ4ˆMØ ×8Ñ8¸ÓGˆMð !ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆØ×-Ñ-¨mÓ<ˆàÐr0   r]   )NNNNT)r^   r_   r`   r"   rb   r:   rF   re   r	   r°   r   r   rZ   rf   rg   s   @r.   rÏ   rÏ   2  s°   ø„ ñ=˜|ð =¸¸d¹
õ =ðD /3Ø59Ø6:Ø(,Ø!%ñ/à—|‘|ð/ð Ÿ™ tÑ+ð/ð  %Ÿ|™|¨dÑ2ð	/ð
 !&§¡¨tÑ 3ð/ð  ™ð/ð ˜$‘;ð/ð Ð+Ñ,ð/ð 
�‰÷/r0   rÏ   c                   óz   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
 ej                  «       ˆ fd„«       Zed„ «       Zˆ xZS )ÚMarianPreTrainedModelr†   ÚmodelTc                 ó  •— t         ‰| �  |«       t        |t        «      r/t	        j
                  |j                  |j                  «       «       y t        |t        «      r t	        j                  |j                  «       y y r]   )r9   Ú_init_weightsr˜   r2   ÚinitÚcopy_rA   rR   ÚMarianMTModelÚzeros_Úfinal_logits_bias)r;   rh   r<   s     €r.   rÝ   z#MarianPreTrainedModel._init_weights�  sW   ø€ ä‰Ñ˜fÔ%Ü�fÔAÔBÜ�J‰J�v—}‘} f×&:Ñ&:Ó&<Õ=Ü˜¤Ô.Ü�K‰K˜×0Ñ0Õ1ð /r0   c                 ó°   — | j                   j                  }t        j                  g d¢dddd|gg| j                  ¬«      }|j                  |«      ||dœ}|S )N)r   é   é
   é   r>   r   é   é   r>   ©rW   )rl   r#   Údecoder_input_ids)r†   r$   rF   ÚtensorrW   Úne)r;   Ú	pad_tokenr#   Údummy_inputss       r.   rî   z"MarianPreTrainedModel.dummy_inputs—  sZ   € à—K‘K×,Ñ,ˆ	Ü—L‘LÒ"2°Q¸¸2¸qÀ)Ð4LÐ!MÐVZ×VaÑVaÔbˆ	à'Ÿl™l¨9Ó5Ø"Ø!*ñ
ˆð
 Ðr0   )r^   r_   r`   r"   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphrF   rc   rÝ   Úpropertyrî   rf   rg   s   @r.   rÚ   rÚ   „  sZ   ø… àÓØÐØ&*Ð#ØÐØ€NØÐà!Ðà€U‡]�]ƒ_ó2ó ð2ð ñó ôr0   rÚ   c                   óÈ   ‡ — e Zd ZdZeedœZdefˆ fd„Ze	e
e	 	 	 ddej                  dz  dej                  dz  dej                  dz  d	ee   d
ef
d„«       «       «       Zˆ xZS )ÚMarianEncoderzä
    Transformer encoder consisting of *config.encoder_layers* self attention layers. Each layer is a
    [`MarianEncoderLayer`].

    Args:
        config: MarianConfig
        embed_tokens (nn.Embedding): output embedding
    )r’   Ú
attentionsr†   c                 ó€  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j
                  }|j                  | _        |j                  | _	        |j                  rt        j                  |«      nd| _        t        j                  |j                   || j                  «      | _        t%        |j                  || j                  «      | _        t        j(                  t+        |j,                  «      D �cg c]  }t/        |«      ‘Œ c}«      | _        d| _        | j5                  «        y c c}w )Nç      ð?F)r9   r:   rn   Úencoder_layerdropÚ	layerdroprµ   r$   r5   Úmax_position_embeddingsÚmax_source_positionsÚscale_embeddingÚmathÚsqrtÚembed_scaler   Ú	EmbeddingÚ
vocab_sizeÚembed_tokensr2   Úembed_positionsÚ
ModuleListrD   Úencoder_layersr³   r�   Úgradient_checkpointingÚ	post_init)r;   r†   r�   rÌ   r<   s       €r.   r:   zMarianEncoder.__init__²  sï   ø€ Ü‰Ñ˜Ô à—~‘~ˆŒØ×1Ñ1ˆŒà—N‘Nˆ	Ø!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø39×3IÒ3Iœ4Ÿ9™9 YÔ/ÈsˆÔäŸL™L¨×):Ñ):¸IÀt×GWÑGWÓXˆÔäBØ×*Ñ*¨I°t×7GÑ7Gó 
ˆÔô —m‘mÌÈv×OdÑOdÓIeÖ$fÀAÔ%7¸Õ%?Ò$fÓgˆŒà&+ˆÔ#à�‰Õùò	 %gs   ÄD;Nr#   rl   Úinputs_embedsro   r6   c                 ó   — |d u |d uz  rt        d«      ‚|€| j                  |«      | j                  z  }| j                  |j                  d d «      }||z   }t
        j                  j                  || j                  | j                  ¬«      }t        | j                  ||¬«      }t        | j                  «      D ]F  \  }}d}	| j                  r&t        j                  g «      }
|
| j                  k  rd}	|	rŒ= |||fi |¤Ž}ŒH t!        |¬«      S )Nz:You must specify exactly one of input_ids or inputs_embedsr'   rs   )r†   r  rl   FT)Úlast_hidden_state)r+   r  r  r  r)   r   ry   rn   ru   r   r†   Ú	enumerater�   rF   Úrandrý   r   )r;   r#   rl   r  ro   Ú	embed_posr’   ÚidxÚencoder_layerÚto_dropÚdropout_probabilitys              r.   rZ   zMarianEncoder.forwardÈ  s   € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø ×-Ñ-¨iÓ8¸4×;KÑ;KÑKˆMà×(Ñ(¨×)<Ñ)<¸S¸bÐ)AÓBˆ	à%¨	Ñ1ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ódˆä2Ø—;‘;Ø'Ø)ô
ˆô #,¨D¯K©KÓ"8ò 	ÑˆC�àˆGØ�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Ø"�GâÙ -Ø!Ø"ñ!ð ñ!‘ð	ô Ø+ô
ð 	
r0   r®   )r^   r_   r`   ra   r³   r€   Ú_can_record_outputsr"   r:   r   r    r   rF   Ú
LongTensorrH   r   r   r   rZ   rf   rg   s   @r.   rø   rø   £  sª   ø„ ñð ,Ø%ñÐð
˜|õ ð,  ØØð .2Ø26Ø26ñ	(
à×#Ñ# dÑ*ð(
ð ×(Ñ(¨4Ñ/ð(
ð ×(Ñ(¨4Ñ/ð	(
ð
 Ð+Ñ,ð(
ð 
ò(
ó ó ó  ô(
r0   rø   c                   óF  ‡ — e Zd ZdZe eedd¬«       eedd¬«      dœZdefˆ fd„Z	e
e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j                   d	z  ded	z  dee   defd„«       «       «       Zˆ xZS )ÚMarianDecoderzÐ
    Transformer decoder consisting of *config.decoder_layers* layers. Each layer is a [`MarianDecoderLayer`]

    Args:
        config: MarianConfig
        embed_tokens (nn.Embedding): output embedding
    r!   r¸   )ÚindexÚ
layer_namerÒ   )r’   rù   Úcross_attentionsr†   c           	      ó¨  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  rt        j                  |j                  «      nd| _        t        j                  |j                   |j                  | j                  «      | _        t%        |j                  |j                  | j                  «      | _        t        j(                  t+        |j,                  «      D �cg c]  }t/        ||¬«      ‘Œ c}«      | _        d| _        | j5                  «        y c c}w )Nrû   )r‡   F)r9   r:   rn   Údecoder_layerdroprý   r$   r5   rþ   Úmax_target_positionsr   r  r  rµ   r  r   r  Údecoder_vocab_sizer  r2   r  r  rD   Údecoder_layersrÏ   r�   r
  r  )r;   r†   Úir<   s      €r.   r:   zMarianDecoder.__init__  sù   ø€ Ü‰Ñ˜Ô Ø—~‘~ˆŒØ×1Ñ1ˆŒØ!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø8>×8NÒ8Nœ4Ÿ9™9 V§^¡^Ô4ÐTWˆÔäŸL™L¨×)BÑ)BÀFÇNÁNÐTX×TdÑTdÓeˆÔäBØ×*Ñ*¨F¯N©N¸D×<LÑ<Ló 
ˆÔô —m‘mÔV[Ð\b×\qÑ\qÓVrÖ$sÐQRÔ%7¸È!Ö%LÒ$sÓtˆŒà&+ˆÔ#à�‰Õùò	 %ts   ÄENr#   rl   rÕ   rÖ   r”   r  r×   ro   r6   c                 óR  — |d u |d uz  rt        d«      ‚|€| j                  |«      }|| j                  z  }|rd|€b|€| j                  j                  r4t        t        | j                  ¬«      t        | j                  ¬«      «      nt        | j                  ¬«      }|j                  «       d d \  }	}
|�|j                  «       nd}t        j                  |
|j                  ¬«      |z   }|€1t        «       s'||
z   }t        j                  |	||j                  ¬«      }t        |t
        «      r|j                  n|}t!        | j                  |||¬«      }t#        | j                  |||¬«      }| j%                  |	|
f||¬«      }||z   }t&        j(                  j+                  || j*                  | j,                  ¬	«      }t/        | j0                  «      D ]E  \  }}| j,                  r%t        j2                  g «      }|| j4                  k  rŒ7 ||||f|||d
œ|¤Ž}ŒG t7        ||¬«      S )NzTYou cannot specify both decoder_input_ids and decoder_inputs_embeds at the same time)r†   r'   r   ré   )r†   r  rl   r”   )r†   r  rl   rÕ   )rU   rs   )rÖ   r”   r×   )r  r”   )r+   r  r  r†   Úis_encoder_decoderr   r
   rv   Úget_seq_lengthrF   rX   rW   r   Úonesr˜   rœ   r   r   r  r   ry   rn   ru   r  r�   r  rý   r   )r;   r#   rl   rÕ   rÖ   r”   r  r×   ro   Ú
batch_sizeÚ
seq_lengthrT   rU   Úmask_seq_lengthÚself_attn_cacheÚcausal_maskr’   r  Údecoder_layerr  s                       r.   rZ   zMarianDecoder.forward  sI  € ð ˜Ð -°tÐ";Ò<ÜÐsÓtÐtàÐ Ø ×-Ñ-¨iÓ8ˆMð &¨×(8Ñ(8Ñ8ˆñ ˜Ð0ð )Ð4¸¿¹×8VÒ8Vô $¤L¸¿¹Ô$DÄlÐZ^×ZeÑZeÔFfÔgä!¨¯©Ô5ð ð "/×!3Ñ!3Ó!5°c°rÐ!:Ñˆ
�JØETÐE` ×!?Ñ!?Ô!AÐfgÐÜ—|‘| J°}×7KÑ7KÔLÐOeÑeˆàÐ!Ô*BÔ*Dà4°zÑAˆOÜ"ŸZ™Z¨
°OÈM×L`ÑL`ÔaˆNô ˜/Ô+>Ô?ð ×0Ò0à ð 	ô )Ø—;‘;Ø'Ø)Ø+ô	
ˆô ";Ø—;‘;Ø'Ø1Ø"7ô	"
Ðð ×+Ñ+Ø˜Ð$Ð&<È<ð ,ó 
ˆð &¨Ñ4ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ódˆä"+¨D¯K©KÓ"8ò 	ÑˆC�à�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Øá)ØØØ%ðð (>Ø /Ø#ñð ñ‰Mð	ô  9Ø+Ø+ô
ð 	
r0   )NNNNNNN)r^   r_   r`   ra   rÏ   r   r€   r  r"   r:   r   r    r   rF   r  re   rH   r	   r°   r   r   r   rZ   rf   rg   s   @r.   r  r  ö  s  ø„ ñð ,Ù$ _¸AÈ+ÔVÙ*¨?À!ÐP^Ô_ñÐð˜|õ ð&  ØØð .2Ø.2Ø:>Ø:>Ø(,Ø26Ø!%ñR
à×#Ñ# dÑ*ðR
ð Ÿ™ tÑ+ðR
ð  %×0Ñ0°4Ñ7ð	R
ð
 !&× 0Ñ 0°4Ñ 7ðR
ð  ™ðR
ð ×(Ñ(¨4Ñ/ðR
ð ˜$‘;ðR
ð Ð+Ñ,ðR
ð 
3òR
ó ó ó  ôR
r0   r  c                   ó˜  ‡ — e Zd ZddgZdefˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d	e
d
ej                  fd„Ze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$                     ez  dz  dedz  dej,                  dz  dej,                  dz  dedz  dee   d
efd„«       «       Zˆ xZS )ÚMarianModelú$model.encoder.embed_positions.weightú$model.decoder.embed_positions.weightr†   c                 óP  •— t         ‰| �  |«       |j                  |j                  }}| j                  j
                  r1t        j                  ||j                  |«      | _	        dddœ| _
        nd | _
        t        |«      | _        t        |«      | _        | j                  «        y )Nzshared.weight)zdecoder.embed_tokens.weightzencoder.embed_tokens.weight)r9   r:   r$   r  r†   Ú share_encoder_decoder_embeddingsr   r  rµ   ÚsharedÚ_tied_weights_keysrø   Úencoderr  Údecoderr  )r;   r†   r5   r  r<   s       €r.   r:   zMarianModel.__init__w  sŠ   ø€ Ü‰Ñ˜Ô à"(×"5Ñ"5°v×7HÑ7H�Zˆð �;‰;×7Ò7ÜŸ,™, z°6·>±>À;ÓOˆDŒKà/>Ø/>ñ'ˆDÕ#ð
 '+ˆDÔ#ä$ VÓ,ˆŒÜ$ VÓ,ˆŒð 	�‰Õr0   c                 ó>   — | j                  «       j                  «       S r]   )Úget_encoderÚget_input_embeddings©r;   s    r.   r9  z MarianModel.get_input_embeddingsŒ  s   € à×ÑÓ!×6Ñ6Ó8Ð8r0   c                 óÎ   — | j                   j                  r>|| _        | j                  | j                  _        | j                  | j
                  _        y || j                  _        y r]   )r†   r2  r3  r5  r  r6  ©r;   rk   s     r.   Úset_input_embeddingsz MarianModel.set_input_embeddings�  sB   € Ø�;‰;×7Ò7ØˆDŒKØ(,¯©ˆD�L‰LÔ%Ø(,¯©ˆD�L‰LÕ%à(-ˆD�L‰LÕ%r0   c                 ó€   — | j                   j                  rt        d«      ‚| j                  «       j	                  «       S )Nz–`get_decoder_input_embeddings` should not be called if `config.share_encoder_decoder_embeddings` is `True`. Please use `get_input_embeddings` instead.)r†   r2  r+   Úget_decoderr9  r:  s    r.   Úget_decoder_input_embeddingsz(MarianModel.get_decoder_input_embeddings˜  s<   € Ø�;‰;×7Ò7ÜðHóð ð ×ÑÓ!×6Ñ6Ó8Ð8r0   c                 óh   — | j                   j                  rt        d«      ‚|| j                  _        y )Na   `config.share_encoder_decoder_embeddings` is set to `True` meaning the decoder input embeddings are shared with the encoder. In order to set the decoder input embeddings, you should simply set the encoder input embeddings by calling `set_input_embeddings` with the appropriate embeddings.)r†   r2  r+   r6  r  r<  s     r.   Úset_decoder_input_embeddingsz(MarianModel.set_decoder_input_embeddings   s0   € Ø�;‰;×7Ò7Üðróð ð
 %*ˆ�‰Õ!r0   Únew_num_tokensr6   c                 ó  — | j                   j                  rt        d«      ‚| j                  «       }| j	                  ||«      }| j                  |«       | j                  «       }|€|S || j                   _        | j                  «        |S ©Nzœ`resize_decoder_token_embeddings` should not be called if `config.share_encoder_decoder_embeddings` is `True`. Please use `resize_token_embeddings` instead.)r†   r2  r+   r@  Ú_get_resized_embeddingsrB  r   Útie_weights)r;   rC  Úold_embeddingsÚnew_embeddingsÚmodel_embedss        r.   Úresize_decoder_token_embeddingsz+MarianModel.resize_decoder_token_embeddings©  sŽ   € Ø�;‰;×7Ò7ÜðKóð ð
 ×:Ñ:Ó<ˆØ×5Ñ5°nÀnÓUˆØ×)Ñ)¨.Ô9à×8Ñ8Ó:ˆàÐ!ØÐð *8ˆ�‰Ô&ð 	×ÑÔàÐr0   Nr#   rl   rê   Údecoder_attention_maskÚencoder_outputsr”   r  Údecoder_inputs_embedsr×   ro   c
                 óÂ  — |€ | j                   d	|||dœ|
¤Ž}nGt        |t        «      s7t        |d   t        |«      dkD  r|d   ndt        |«      dkD  r|d   nd¬«      } | j                  d	|||d   ||||	dœ|
¤Ž}t        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  ¬«      S )
aÞ  
        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)

            Marian 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`).
        decoder_attention_mask (`torch.LongTensor` 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, MarianModel

        >>> tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-de")
        >>> model = MarianModel.from_pretrained("Helsinki-NLP/opus-mt-en-de")

        >>> inputs = tokenizer("Studies have been shown that owning a dog is good for you", return_tensors="pt")
        >>> decoder_inputs = tokenizer(
        ...     "<pad> Studien haben gezeigt dass es hilfreich ist einen Hund zu besitzen",
        ...     return_tensors="pt",
        ...     add_special_tokens=False,
        ... )
        >>> outputs = model(input_ids=inputs.input_ids, decoder_input_ids=decoder_inputs.input_ids)

        >>> last_hidden_states = outputs.last_hidden_state
        >>> list(last_hidden_states.shape)
        [1, 26, 512]
        ```N)r#   rl   r  r   r!   r>   )r  r’   rù   ©r#   rl   rÕ   rÖ   r”   r  r×   )r  r”   Údecoder_hidden_statesÚdecoder_attentionsr  Úencoder_last_hidden_staterÕ   Úencoder_attentions© )r5  r˜   r   Úlenr6  r   r  r”   r’   rù   r  )r;   r#   rl   rê   rL  rM  r”   r  rN  r×   ro   Údecoder_outputss               r.   rZ   zMarianModel.forwardÁ  s  € ðh Ð"Ø*˜dŸl™lð Ø#Ø-Ø+ñð ñ	‰Oô ˜O¬_Ô=Ü-Ø"1°!Ñ"4Ü47¸Ó4HÈ1Ò4L˜o¨aÒ0ÐRVÜ14°_Ó1EÈÒ1I˜?¨1Ò-ÈtôˆOð '˜$Ÿ,™,ð 	
Ø'Ø1Ø"1°!Ñ"4Ø#1Ø+Ø/Øñ	
ð ñ	
ˆô "Ø-×?Ñ?Ø+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ô	
ð 		
r0   )	NNNNNNNNN)r^   r_   r`   Ú_keys_to_ignore_on_load_missingr"   r:   r9  r=  r@  rB  rb   r   r  rK  r   r   rF   r  re   r±   r   r	   rH   r°   r   r   r   rZ   rf   rg   s   @r.   r.  r.  p  s[  ø„ ð 	/Ø.ð'Ð#ð
˜|õ ò*9ò.ò9ò*ð¸cð ÀbÇlÁló ð0 Øð .2Ø.2Ø59Ø6:ØHLØ(,Ø26Ø:>Ø!%ñV
à×#Ñ# dÑ*ðV
ð Ÿ™ tÑ+ðV
ð !×+Ñ+¨dÑ2ð	V
ð
 !&§¡¨tÑ 3ðV
ð ˜uŸ|™|Ñ,¨Ñ>ÀÑEðV
ð  ™ðV
ð ×(Ñ(¨4Ñ/ðV
ð  %×0Ñ0°4Ñ7ðV
ð ˜$‘;ðV
ð Ð+Ñ,ðV
ð 
òV
ó ó ôV
r0   r.  zX
    The Marian Model with a language modeling head. Can be used for summarization.
    )Úcustom_introc                   óF  ‡ — e Zd ZdZg d¢ZddgZddiZdefˆ fd„Z	 d!d
e	de	d	z  de
dej                  fˆ fd„Zd"d
e	dej                  fd„Zd„ Zd
e	dd	fd„Zdej                  fd„Ze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,                     ez  d	z  ded	z  dej4                  d	z  dej4                  d	z  dej*                  d	z  de
d	z  dee   defd„«       «       Zdej,                  fd „Zˆ xZ S )$rà   rÛ   )râ   r/  r0  r/  r0  úlm_head.weightú!model.decoder.embed_tokens.weightr†   c                 óŠ  •— t         ‰| �  |«       t        |«      | _        | j                  j
                  rddddœ| _        |j
                  r|j                  n|j                  }| j                  dt        j                  d|f«      «       t        j                  |j                  |d¬«      | _        | j!                  «        y )Nzmodel.shared.weight)r[  r\  z!model.encoder.embed_tokens.weightrâ   r!   Fr‰   )r9   r:   r.  rÛ   r†   r2  r4  r  r   Úregister_bufferrF   Úzerosr   r�   rµ   Úlm_headr  )r;   r†   Útarget_vocab_sizer<   s      €r.   r:   zMarianMTModel.__init__+  s    ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ø�;‰;×7Ò7à"7Ø5JØ5Jñ'ˆDÔ#ð 28×1XÒ1X˜F×-Ò-Ð^d×^wÑ^wÐØ×ÑÐ0´%·+±+¸qÐBSÐ>TÓ2UÔVÜ—y‘y §¡Ð1BÈÔOˆŒð 	�‰Õr0   NrC  Úpad_to_multiple_ofÚmean_resizingr6   c                 óx   •— t         ‰| �  |||«      }| j                  j                  r| j	                  |«       |S r]   )r9   Úresize_token_embeddingsr†   r2  Ú_resize_final_logits_bias)r;   rC  rb  rc  rI  r<   s        €r.   re  z%MarianMTModel.resize_token_embeddings<  s;   ø€ ô ™Ñ8¸ÐI[Ð]jÓkˆØ�;‰;×7Ò7Ø×*Ñ*¨>Ô:ØÐr0   c                 óè  — | j                  «       }| j                  |||«      }| j                  |«       |j                  j                  d   }| j
                  j                  r|| j
                  _        | j
                  j                  rY| j                  «       �I| j
                  j                  s3| j                  «       }| j                  ||«      }| j                  |«       | j                  «       S )Nr   )r9  rF  r=  rA   r)   r†   r2  r   Úget_output_embeddingsÚtie_word_embeddingsÚ_get_resized_lm_headÚset_output_embeddings)r;   rC  rb  ÚargsrH  rI  Úold_lm_headÚnew_lm_heads           r.   Ú_resize_token_embeddingsz&MarianMTModel._resize_token_embeddingsE  sÊ   € Ø×2Ñ2Ó4ˆØ×5Ñ5°nÀnÐVhÓiˆØ×!Ñ! .Ô1à'×.Ñ.×4Ñ4°QÑ7ˆà�;‰;×7Ò7Ø-;ˆD�K‰KÔ*ð �K‰K×8Ò8Ø×*Ñ*Ó,Ð8Ø—K‘K×3Ò3à×4Ñ4Ó6ˆKØ×3Ñ3°KÀÓPˆKØ×&Ñ& {Ô3à×(Ñ(Ó*Ð*r0   c                 ó(  — | j                   j                  rt        d«      ‚| j                  j	                  «       }| j                  ||«      }| j                  j                  |«       | j                  «       �I| j                   j                  s3| j                  «       }| j                  ||«      }| j                  |«       | j                  j	                  «       }|€|S || j                   _        | j                  «        | j                  |«       |S rE  )r†   r2  r+   rÛ   r@  rF  rB  rh  ri  rj  rk  r   rG  rf  )r;   rC  rH  rI  rm  rn  rJ  s          r.   rK  z-MarianMTModel.resize_decoder_token_embeddings[  só   € Ø�;‰;×7Ò7ÜðKóð ð
 Ÿ™×@Ñ@ÓBˆØ×5Ñ5°nÀnÓUˆØ�
‰
×/Ñ/°Ô?ð ×%Ñ%Ó'Ð3¸D¿K¹K×<[Ò<[Ø×4Ñ4Ó6ˆKØ×3Ñ3°KÀÓPˆKØ×&Ñ& {Ô3à—z‘z×>Ñ>Ó@ˆàÐ!ØÐð *8ˆ�‰Ô&ð 	×ÑÔà×&Ñ& ~Ô6àÐr0   c                 ó6  — | j                   j                  d   }||k  r| j                   d d …d |…f   }nSt        j                  d||z
  f| j                   j                  ¬«      }t        j
                  | j                   |gd¬«      }| j                  d|«       y )Nr'   r!   ré   rr   râ   )râ   r)   rF   r_  rW   Úcatr^  )r;   rC  Úold_num_tokensÚnew_biasÚ
extra_biass        r.   rf  z'MarianMTModel._resize_final_logits_bias{  sŒ   € Ø×/Ñ/×5Ñ5°bÑ9ˆØ˜^Ò+Ø×-Ñ-ªa°°.°Ð.@ÑA‰HäŸ™ a¨¸.Ñ)HÐ%IÐRV×RhÑRh×RoÑRoÔpˆJÜ—y‘y $×"8Ñ"8¸*Ð!EÈ1ÔMˆHØ×ÑÐ0°(Õ;r0   rI  c                 ó   — || _         y r]   )r`  )r;   rI  s     r.   rk  z#MarianMTModel.set_output_embeddings„  s	   € Ø%ˆ�r0   r#   rl   rê   rL  rM  r”   r  rN  Úlabelsr×   ro   c                 ól  — |	�R|
rt         j                  d«       d}
|€7|€5t        |	| j                  j                  | j                  j
                  «      } | j                  |f||||||||
dœ|¤Ž}| j                  |d   «      | j                  z   }d}|	�Ft        «       } ||j                  d| j                  j                  «      |	j                  d«      «      }t        |||j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  ¬«	      S )uç  
        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)

            Marian 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`).
        decoder_attention_mask (`torch.LongTensor` 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, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

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

        >>> src = "fr"  # source language
        >>> trg = "en"  # target language

        >>> model_name = f"Helsinki-NLP/opus-mt-{src}-{trg}"
        >>> model = MarianMTModel.from_pretrained(model_name)
        >>> tokenizer = AutoTokenizer.from_pretrained(model_name)

        >>> sample_text = "oÃ¹ est l'arrÃªt de bus ?"
        >>> batch = tokenizer([sample_text], return_tensors="pt")

        >>> generated_ids = model.generate(**batch)
        >>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
        "Where's the bus stop?"
        ```
        NzJThe `use_cache` argument is changed to `False` since `labels` is provided.F)rl   rê   rM  rL  r”   r  rN  r×   r   r'   )	ÚlossÚlogitsr”   rQ  rR  r  rS  rÕ   rT  )r‹   Úwarningr/   r†   r$   r%   rÛ   r`  râ   r   r—   r   r   r”   rQ  rR  r  rS  rÕ   rT  )r;   r#   rl   rê   rL  rM  r”   r  rN  rw  r×   ro   ÚoutputsÚ	lm_logitsÚmasked_lm_lossÚloss_fcts                   r.   rZ   zMarianMTModel.forward‡  s@  € ðp ÐÙÜ—‘ÐkÔlØˆIØ Ð(Ð-BÐ-JÜ$6Ø˜DŸK™K×4Ñ4°d·k±k×6XÑ6Xó%Ð!ð '1 d§j¡jØð'
à)Ø/Ø+Ø#9Ø+Ø'Ø"7Øñ'
ð ñ'
ˆð —L‘L ¨¡Ó,¨t×/EÑ/EÑEˆ	àˆØÐÜ'Ó)ˆHÙ% i§n¡n°R¸¿¹×9WÑ9WÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNäØØØ#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô

ð 
	
r0   c                 ól   — t        || j                  j                  | j                  j                  «      S r]   )r/   r†   r$   r%   )r;   rw  s     r.   Ú%prepare_decoder_input_ids_from_labelsz3MarianMTModel.prepare_decoder_input_ids_from_labelsè  s%   € Ü! &¨$¯+©+×*BÑ*BÀDÇKÁK×DfÑDfÓgÐgr0   )NTr]   )
NNNNNNNNNN)!r^   r_   r`   rð   rX  Ú_keys_to_ignore_on_saver4  r"   r:   rb   r°   r   r  re  ro  rK  rf  rk  r   r   rF   r  re   r±   r   r	   rH   r   r   r   rZ   r�  rf   rg   s   @r.   rà   rà     sî  ø„ ð  Ðò'Ð#ð
  FÐGmÐnÐØ*Ð,OÐPÐð˜|õ ð$ aeñØ!ðØ7:¸T±zðØY]ðà	�‰õñ+°sð +Ð_a×_kÑ_kó +ò,ð@<¸ð <Àó <ð&°B·L±Ló &ð Øð .2Ø.2Ø59Ø6:ØHLØ(,Ø26Ø:>Ø*.Ø!%ñ]
à×#Ñ# dÑ*ð]
ð Ÿ™ tÑ+ð]
ð !×+Ñ+¨dÑ2ð	]
ð
 !&§¡¨tÑ 3ð]
ð ˜uŸ|™|Ñ,¨Ñ>ÀÑEð]
ð  ™ð]
ð ×(Ñ(¨4Ñ/ð]
ð  %×0Ñ0°4Ñ7ð]
ð × Ñ  4Ñ'ð]
ð ˜$‘;ð]
ð Ð+Ñ,ð]
ð 
ò]
ó ó ð]
ð~h¸E¿L¹L÷ hr0   rà   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚMarianDecoderWrapperz½
    This wrapper class is a helper class to correctly load pretrained checkpoints when the causal language model is
    used in combination with the [`EncoderDecoderModel`] framework.
    c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y r]   )r9   r:   r  r6  r  ©r;   r†   r<   s     €r.   r:   zMarianDecoderWrapper.__init__ó  s&   ø€ Ü‰Ñ˜Ô Ü$ VÓ,ˆŒØ�‰Õr0   c                 ó&   —  | j                   |i |¤ŽS r]   )r6  )r;   rl  ro   s      r.   rZ   zMarianDecoderWrapper.forwardø  s   € Øˆt�|‰|˜TÐ, VÑ,Ð,r0   )r^   r_   r`   ra   r:   rZ   rf   rg   s   @r.   r„  r„  í  s   ø„ ñô
ö
-r0   r„  c                   ó\  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Ze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	j                  dz  de	j                  dz  dedz  dee	j                  z  dee   deez  fd„«       «       Zˆ xZS )ÚMarianForCausalLMr[  r\  c                 óâ   •— d|_         d|_        t        ‰| �  |«       t	        |«      | _        t        j                  |j                  |j                  d¬«      | _
        | j                  «        y )NTFr‰   )rƒ   r$  r9   r:   r„  rÛ   r   r�   Úhidden_sizer  r`  r  r†  s     €r.   r:   zMarianForCausalLM.__init__  sX   ø€ Ø ˆÔØ$)ˆÔ!Ü‰Ñ˜Ô Ü)¨&Ó1ˆŒ
ä—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒð 	�‰Õr0   c                 óB   — | j                   j                  j                  S r]   ©rÛ   r6  r  r:  s    r.   r9  z&MarianForCausalLM.get_input_embeddings  s   € Ø�z‰z×!Ñ!×.Ñ.Ð.r0   c                 ó:   — || j                   j                  _        y r]   r�  r<  s     r.   r=  z&MarianForCausalLM.set_input_embeddings  s   € Ø*/ˆ�
‰
×ÑÕ'r0   Nr#   rl   rÕ   rÖ   r”   r  rw  r×   Úlogits_to_keepro   r6   c
                 ó  —  | j                   j                  d|||||||dœ|
¤Ž}|d   }t        |	t        «      rt	        |	 d«      n|	}| j                  |dd…|dd…f   «      }d}|�a|j                  |j                  «      }t        «       } ||j                  d| j                  j                  «      |j                  d«      «      }t        |||j                  |j                  |j                  |j                   ¬«      S )aT  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-fr-en")
        >>> model = MarianForCausalLM.from_pretrained("Helsinki-NLP/opus-mt-fr-en")
        >>> assert model.config.is_decoder, f"{model.__class__} has to be configured as a decoder."
        >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
        >>> outputs = model(**inputs)

        >>> logits = outputs.logits
        >>> expected_shape = [1, inputs.input_ids.shape[-1], model.config.vocab_size]
        >>> list(logits.shape) == expected_shape
        True
        ```rP  r   Nr'   )ry  rz  r”   r’   rù   r  rU  )rÛ   r6  r˜   rb   Úslicer`  ÚtorW   r   r—   r†   r  r   r”   r’   rù   r  )r;   r#   rl   rÕ   rÖ   r”   r  rw  r×   r�  ro   r|  r’   Úslice_indicesrz  ry  r  s                    r.   rZ   zMarianForCausalLM.forward  s  € ðL >P¸T¿Z¹Z×=OÑ=Oð 	>
ØØ)Ø"7Ø#9Ø+Ø'Øñ	>
ð ñ	>
ˆð   ™
ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ—Y‘Y˜vŸ}™}Ó-ˆFÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯K©K×,BÑ,BÓCÀVÇ[Á[ÐQSÃ_ÓUˆDä0ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
r0   )	NNNNNNNNr   )r^   r_   r`   r4  r:   r9  r=  r   r   rF   r  re   rH   r	   r°   rb   r   r   r±   r   rZ   rf   rg   s   @r.   r‰  r‰  ý  s/  ø„ àÐ=ðÐô	ò/ò0ð Øð .2Ø.2Ø:>Ø;?Ø(,Ø26Ø*.Ø!%Ø-.ñA
à×#Ñ# dÑ*ðA
ð Ÿ™ tÑ+ðA
ð  %×0Ñ0°4Ñ7ð	A
ð
 !&× 1Ñ 1°DÑ 8ðA
ð  ™ðA
ð ×(Ñ(¨4Ñ/ðA
ð × Ñ  4Ñ'ðA
ð ˜$‘;ðA
ð ˜eŸl™lÑ*ðA
ð Ð+Ñ,ðA
ð 
Ð2Ñ	2òA
ó ó ôA
r0   r‰  )r‰  r.  rà   rÚ   )Nr–   )Jra   r  Úcollections.abcr   ÚnumpyrB   rF   r   Útorch.nnr   Ú r   rÞ   Úactivationsr   Úcache_utilsr	   r
   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   r    Úconfiguration_marianr"   Ú
get_loggerr^   r‹   re   rb   r/   r  r2   ÚModuler¯   r~   r€   r³   rÏ   rÚ   rø   r  r.  rà   r„  r‰  Ú__all__rU  r0   r.   ú<module>r¨     sÿ  ðñ Dã Ý $ã Û Ý Ý %å &Ý !ß CÑ CÝ )ß JÝ BÝ 9÷õ ÷ GÝ &÷õ õ 8ß EÝ .ð 
ˆ×	Ñ	˜HÓ	%€ð %§,¡,ð ¸cð Ð[^ó ô -¨"¯,©,ô -ðR !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(ó%ô:r)�b—i‘iô r)ôl0Ð3ô 0ôhOÐ3ô Oðd ô˜Oó ó ðô<P
Ð)ô P
ôfw
Ð)ô w
ðt ôh
Ð'ó h
ó ðh
ñV ðôô
HhÐ)¨?ó Hhóð
HhôX-Ð0ô -ô Y
Ð-¨ô Y
òx Y�r0   