§
    ‚Štjb¶  ã                   óp  — 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,j4        e5¦  «        Z6dej7        de8de8fd„Z9 G d„ dej:        ¦  «        Z;	 	 d=dej<        dej7        dej7        d ej7        d!ej7        dz  d"e=dz  d#e=d$e&e(         fd%„Z> G d&„ d'ej<        ¦  «        Z? G d(„ d)e¦  «        Z@ G d*„ d+e¦  «        ZAe) G d,„ d-e$¦  «        ¦   «         ZB G d.„ d/eB¦  «        ZC G d0„ d1eB¦  «        ZDe) G d2„ d3eB¦  «        ¦   «         ZE e)d4¬5¦  «         G d6„ d7eBe¦  «        ¦   «         ZF G d8„ d9eB¦  «        ZG G d:„ d;eBe¦  «        ZHg d<¢ZIdS )>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        ¦  «        }| dd…dd…f                              ¦   «         |dd…dd…f<   ||dd…df<   |€t          d¦  «        ‚|                     |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       úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/marian/modeling_marian.pyÚshift_tokens_rightr/   8   s˜   € ð "×+Ò+¨I¬OÑ<Ô<ÐØ(¨¨¨¨C¨R¨C¨Ô0×6Ò6Ñ8Ô8Ð�a�a�a˜˜˜�eÑØ4Ð�a�a�a˜�dÑàÐÝÐLÑMÔMÐMà×"Ò"Ð#4¸Ò#<¸lÑKÔKÐ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                 óP   •— t          ¦   «                              ||d¬¦  «         d S )NT)Ú_freeze)ÚsuperÚ__init__)Úselfr3   r4   r5   Ú	__class__s       €r.   r:   z,MarianSinusoidalPositionalEmbedding.__init__K   s(   ø€ Ý‰Œ×Ò˜¨¸tÐÑDÔDÐDÐDÐDr0   c           	      óà  ‡— | j         j        \  }Št          j        ˆfd„t	          |¦  «        D ¦   «         ¦  «        }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 )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:]
        c                 óJ   •‡— g | ]Šˆˆfd „t          ‰¦  «        D ¦   «         ‘ŒS )c           	      óR   •— g | ]#}‰t          j        d d|dz  z  ‰z  ¦  «        z  ‘Œ$S )i'  é   )ÚnpÚpower)Ú.0ÚjÚdimÚposs     €€r.   ú
<listcomp>zPMarianSinusoidalPositionalEmbedding.create_weight.<locals>.<listcomp>.<listcomp>U   s7   ø€ ÐLÐLÐL¸Aˆc•B”H˜U A¨¨a©¡L°3Ñ$6Ñ7Ô7Ñ7ÐLÐLÐLr0   )Úrange)rC   rF   rE   s    @€r.   rG   zEMarianSinusoidalPositionalEmbedding.create_weight.<locals>.<listcomp>U   s9   øø€ ÐeÐeÐeÐQTÐLÐLÐLÐLÐLÅÀsÁÄÐLÑLÔLÐeÐeÐer0   F)ÚdtypeÚrequires_gradr@   r   r!   N)Úweightr)   rA   ÚarrayrH   ÚtorchÚemptyrI   ÚFloatTensorÚsinÚcos)r;   Ún_posÚposition_encÚoutÚsentinelrE   s        @r.   Úcreate_weightz1MarianSinusoidalPositionalEmbedding.create_weightN   s  ø€ ð
 ”[Ô&‰
ˆˆsÝ”xØeÐeÐeÐeÕX]Ð^cÑXdÔXdÐeÑeÔeñ
ô 
ˆõ Œk˜% ¨D¬KÔ,=ÈUÐSÑSÔSˆØ" Q™w¨!š|˜|�3˜!‘8�8°#¸±(¸a±ˆÝ"Ô.­r¬v°lÀ1À1À1ÀaÀdÈÀdÀ7Ô6KÑ/LÔ/LÑMÔMˆˆAˆAˆAˆq�ˆzˆMÑÝ!Ô-­b¬f°\À!À!À!ÀQÀTÈÀTÀ'Ô5JÑ.KÔ.KÑLÔLˆˆAˆAˆAˆxˆyˆyˆLÑØˆ
r0   r   Úinput_ids_shapeÚpast_key_values_lengthÚposition_idsc                 óÂ   •— |€<|dd…         \  }}t          j        |||z   t           j        | j        j        ¬¦  «        }t          ¦   «                              |¦  «        S )z3`input_ids_shape` is expected to be [bsz x seqlen].Nr@   )rI   Údevice)rM   ÚarangeÚlongrK   r[   r9   Úforward)r;   rW   rX   rY   ÚbszÚseq_lenr<   s         €r.   r^   z+MarianSinusoidalPositionalEmbedding.forward]   se   ø€ ð
 ÐØ*¨2¨A¨2Ô.‰LˆC�Ý œ<Ø&Ð(>ÀÑ(HÕPUÔPZÐcgÔcnÔcuðñ ô ˆLõ ‰wŒw�Š˜|Ñ,Ô,Ð,r0   ©N)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr:   rV   rM   Úno_gradÚSizeÚTensorr^   Ú__classcell__©r<   s   @r.   r2   r2   H   së   ø€ € € € € ØNÐNðEð E cð E¸#ð EÈCÐRVÉJð EÐbfð Eð Eð Eð Eð Eð Eðð ð ð €U„]�_„_àptð	-ð 	-Ø$œzð	-ØCFð	-ØZ_ÔZfÐimÑZmð	-à	Œð	-ð 	-ð 	-ð 	-ð 	-ñ „_ð	-ð 	-ð 	-ð 	-ð 	-r0   r2   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr'   ç      à¿r@   r   ©rE   ©ÚpÚtrainingr!   )
ÚsizerM   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxrs   rz   Ú
contiguous)
rm   rn   ro   rp   rq   rr   rs   rt   Ú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Ô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' paperrl   FTNÚ	embed_dimÚ	num_headsrs   Ú
is_decoderÚbiasÚ	is_causalÚconfigÚ	layer_idxc	                 óz  •— t          ¦   «                              ¦   «          || _        || _        || _        ||z  | _        || _        | j        |z  | j        k    rt          d| j        › d|› d�¦  «        ‚| j        dz  | _        || _	        || _
        || _        |€/| j	        r(t                               d| j        j        › d�¦  «         t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).rv   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‡   rs   Úhead_dimr‹   r+   rr   rˆ   rŠ   rŒ   ÚloggerÚwarning_oncer<   rb   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)
r;   r†   r‡   rs   rˆ   r‰   rŠ   r‹   rŒ   r<   s
            €r.   r:   zMarianAttention.__init__‹   sY  ø€ õ 	‰Œ×ÒÑÔÐØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒàŒM˜IÑ%¨$¬.Ò8Ð8Ýð3ÈdÌnð 3ð 3Ø%.ð3ð 3ð 3ñô ð ð ”} dÑ*ˆŒØ$ˆŒØ"ˆŒØ"ˆŒØÐ ¤ÐÝ×Òð,¨4¬>Ô+Bð ,ð ,ð ,ñô ð õ ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝœ	 )¨Y¸TÐBÑBÔBˆŒˆˆr0   Úhidden_statesÚkey_value_statesÚpast_key_valuesrq   rt   r6   c                 óŽ  — |du}|j         dd…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }	d}
|�Ht          |t          ¦  «        r1|j                             | j	        ¦  «        }
|r|j
        }n
|j        }n|}|r|n|}|r3|�1|
r/|j        | j	                 j        }|j        | j	                 j        }nÞ|                      |¦  «        }|                      |¦  «        }g |j         dd…         ¢d‘| j        ‘R }|                     |¦  «                             dd¦  «        }|                     |¦  «                             dd¦  «        }|�E|                     ||| j	        ¦  «        \  }}|r$t          |t          ¦  «        rd|j        | j	        <   t%          j        | j        j        t,          ¦  «        } || |	|||f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )	z#Input shape: Batch x Time x ChannelNr'   r!   r@   FTrl   )rs   rr   )r)   r�   r•   Úviewr}   Ú
isinstancer   Ú
is_updatedÚgetrŒ   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesr“   r”   Úupdater   Úget_interfacer‹   Ú_attn_implementationrƒ   rz   rs   rr   Úreshaper€   r–   )r;   r—   r˜   r™   rq   rt   Ú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.   r^   zMarianAttention.forward²   s¨  € ð .°TÐ9Ðð $Ô)¨#¨2¨#Ô.ˆà8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆð —{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆàˆ
ØÐ&Ý˜/Õ+>Ñ?Ô?ð 7Ø,Ô7×;Ò;¸D¼NÑKÔK�
Ø%ð Pà+:Ô+PÐ(Ð(à+:Ô+OÐ(Ð(à'6Ð$à-?ÐRÐ)Ð)À]ˆØð 	F /Ð"=À*Ð"=à-Ô4°T´^ÔDÔIˆJØ/Ô6°t´~ÔFÔMˆLˆLàŸš ^Ñ4Ô4ˆJØŸ;š; ~Ñ6Ô6ˆLØF˜Ô-¨c¨r¨cÔ2ÐF°BÐF¸¼ÐFÐFˆHØ#Ÿš¨Ñ2Ô2×<Ò<¸QÀÑBÔBˆJØ'×,Ò,¨XÑ6Ô6×@Ò@ÀÀAÑFÔFˆLàÐ*Ø+?×+FÒ+FÀzÐS_ÐaeÔaoÑ+pÔ+pÑ(�
˜Là%ð F­*°_ÕFYÑ*ZÔ*Zð FØAE�OÔ.¨t¬~Ñ>å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð>�C�C°$´,Ø”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r0   )rl   FTFNN©NNN)rb   rc   rd   re   rf   ÚfloatÚboolr"   r:   rM   ri   r	   r   r   Útupler^   rj   rk   s   @r.   r…   r…   ˆ   s]  ø€ € € € € ØGÐGð Ø ØØØ&*Ø $ð%Cð %Càð%Cð ð%Cð ð	%Cð
 ð%Cð ð%Cð ð%Cð ˜tÑ#ð%Cð ˜‘:ð%Cð %Cð %Cð %Cð %Cð %CðT 15Ø(,Ø.2ðH)ð H)à”|ðH)ð  œ,¨Ñ-ðH)ð  ™ð	H)ð
 œ tÑ+ðH)ð Ð-Ô.ðH)ð 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ðH)ð H)ð H)ð H)ð H)ð H)ð H)ð H)r0   r…   c                   ór   ‡ — 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                 ó  •— t          ¦   «                              ¦   «          |j        | _        t	          | j        |j        |j        ||¬¦  «        | _        t          j	        | j        ¦  «        | _
        |j        | _        t          |j                 | _        |j        | _        t          j        | j        |j        ¦  «        | _        t          j        |j        | j        ¦  «        | _        t          j	        | j        ¦  «        | _        d S )N)r†   r‡   rs   r‹   rŒ   )r9   r:   Úd_modelr†   r…   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normrs   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ØÔ4ØÔ,ØØð
ñ 
ô 
ˆŒõ %'¤L°´Ñ$@Ô$@ˆÔ!Ø”~ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔÝ”9˜Tœ^¨VÔ-CÑDÔDˆŒÝ”9˜VÔ3°T´^ÑDÔDˆŒÝ "¤¨T¬^Ñ <Ô <ˆÔÐÐr0   r—   rq   rt   r6   c                 ó  — |} | j         |fd|i|¤Ž\  }}t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|}|                      |                      |¦  «        ¦  «        }t          j                             || j        | j        ¬¦  «        }|  	                    |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|  
                    |¦  «        }|j        t          j        k    r_t          j        |¦  «                             ¦   «         s9t          j        |j        ¦  «        j        dz
  }t          j        || |¬¦  «        }|S )Nrq   rx   iè  )ÚminÚmax)r¼   r   r~   rs   rz   r¾   rÀ   rÃ   rÁ   rÄ   rÅ   rI   rM   Úfloat16ÚisfiniteÚallÚfinforÉ   Úclamp)r;   r—   rq   rt   ÚresidualÚ_Úclamp_values          r.   r^   zMarianEncoderLayer.forward  sv  € ð !ˆØ)˜4œ>Øð
ð 
à)ð
ð ð
ð 
Ñˆ�qõ
 œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×1Ò1°-Ñ@Ô@ˆà ˆØ×*Ò*¨4¯8ª8°MÑ+BÔ+BÑCÔCˆÝœ×-Ò-¨m¸tÔ?VÐaeÔanÐ-ÑoÔoˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×-Ò-¨mÑ<Ô<ˆàÔ¥%¤-Ò/Ð/½¼À}Ñ8UÔ8U×8YÒ8YÑ8[Ô8[Ð/Ýœ+ mÔ&9Ñ:Ô:Ô>ÀÑEˆKÝ!œK¨¸K¸<È[ÐYÑYÔYˆMàÐr0   ra   )rb   rc   rd   r"   rf   r:   rM   rO   r   r   ri   r^   rj   rk   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        ¦  «        | _        d S )NT)r†   r‡   rs   rˆ   rŠ   r‹   rŒ   )rs   rˆ   r‹   rŒ   )r9   r:   r¹   r†   r…   Údecoder_attention_headsr»   r¼   rs   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ØÔ4ØÔ,ØØØØð
ñ 
ô 
ˆŒð ”~ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔå$&¤L°´Ñ$@Ô$@ˆÔ!Ý+ØŒNØÔ*ØÔ,ØØØð
ñ 
ô 
ˆÔõ (*¤|°D´NÑ'CÔ'CˆÔ$Ý”9˜Tœ^¨VÔ-CÑDÔDˆŒÝ”9˜VÔ3°T´^ÑDÔDˆŒÝ "¤¨T¬^Ñ <Ô <ˆÔÐÐr0   Tr—   rq   Úencoder_hidden_statesÚencoder_attention_maskr™   Ú	use_cachert   r6   c                 óÞ  — |} | j         |f||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|�]|} | j        |f|||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|}|                      |  	                    |¦  «        ¦  «        }t          j                             || j
        | j        ¬¦  «        }|                      |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|S )N)r™   rq   rx   )r˜   rq   r™   )r¼   r   r~   rs   rz   r¾   rÖ   r×   rÀ   rÃ   rÁ   rÄ   rÅ   )
r;   r—   rq   rÙ   rÚ   r™   rÛ   rt   rÏ   rÐ   s
             r.   r^   zMarianDecoderLayer.forwardR  s§  € ð !ˆð *˜4œ>Øð
à+Ø)ð
ð 
ð ð	
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×1Ò1°-Ñ@Ô@ˆð !Ð,Ø$ˆHà0˜tÔ0Øð à!6Ø5Ø /ð	 ð  ð
 ð ð  ÑˆM˜1õ œM×1Ò1°-À4Ä<ÐZ^ÔZgÐ1ÑhÔhˆMØ$ }Ñ4ˆMØ ×8Ò8¸ÑGÔGˆMð !ˆØ×*Ò*¨4¯8ª8°MÑ+BÔ+BÑCÔCˆÝœ×-Ò-¨m¸tÔ?VÐaeÔanÐ-ÑoÔoˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×-Ò-¨mÑ<Ô<ˆàÐr0   ra   )NNNNT)rb   rc   rd   r"   rf   r:   rM   ri   r	   r´   r   r   r^   rj   rk   s   @r.   rÓ   rÓ   2  sô   ø€ € € € € ð=ð =˜|ð =¸¸d¹
ð =ð =ð =ð =ð =ð =ðD /3Ø59Ø6:Ø(,Ø!%ð/ð /à”|ð/ð œ tÑ+ð/ð  %œ|¨dÑ2ð	/ð
 !&¤¨tÑ 3ð/ð  ™ð/ð ˜$‘;ð/ð Ð+Ô,ð/ð 
Œð/ð /ð /ð /ð /ð /ð /ð /r0   rÓ   c                   ó‚   ‡ — 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                 ó0  •— t          ¦   «                              |¦  «         t          |t          ¦  «        r.t	          j        |j        |                     ¦   «         ¦  «         d S t          |t          ¦  «        rt	          j	        |j
        ¦  «         d S d S ra   )r9   Ú_init_weightsrœ   r2   ÚinitÚcopy_rK   rV   ÚMarianMTModelÚzeros_Úfinal_logits_bias)r;   rm   r<   s     €r.   rá   z#MarianPreTrainedModel._init_weights�  s‰   ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕAÑBÔBð 	2ÝŒJ�v”} f×&:Ò&:Ñ&<Ô&<Ñ=Ô=Ð=Ð=Ð=Ý˜¥Ñ.Ô.ð 	2ÝŒK˜Ô0Ñ1Ô1Ð1Ð1Ð1ð	2ð 	2r0   c                 ó˜   — | j         j        }t          j        g d¢dddd|gg| j        ¬¦  «        }|                     |¦  «        ||dœ}|S )N)r   é   é
   é   r@   r   é   é   r@   ©r[   )rq   r#   Údecoder_input_ids)r‹   r$   rM   Útensorr[   Úne)r;   Ú	pad_tokenr#   Údummy_inputss       r.   rò   z"MarianPreTrainedModel.dummy_inputs—  sd   € à”KÔ,ˆ	Ý”LÐ"2Ð"2Ð"2°Q¸¸2¸qÀ)Ð4LÐ!MÐVZÔVaÐbÑbÔbˆ	à'Ÿlšl¨9Ñ5Ô5Ø"Ø!*ð
ð 
ˆð
 Ðr0   )rb   rc   rd   r"   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphrM   rg   rá   Úpropertyrò   rj   rk   s   @r.   rÞ   rÞ   „  s–   ø€ € € € € € àÐÐÑØÐØ&*Ð#ØÐØ€NØÐà!Ðà€U„]�_„_ð2ð 2ð 2ð 2ñ „_ð2ð ðð ñ „Xðð ð ð ð 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        ˆfd„t+          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        |                      ¦   «          d S )Nç      ð?c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS © )r·   )rC   rÐ   r‹   s     €r.   rG   z*MarianEncoder.__init__.<locals>.<listcomp>Â  s"   ø€ Ð$fÐ$fÐ$fÀAÕ%7¸Ñ%?Ô%?Ð$fÐ$fÐ$fr0   F)r9   r:   rs   Úencoder_layerdropÚ	layerdropr¹   r$   r5   Úmax_position_embeddingsÚmax_source_positionsÚscale_embeddingÚmathÚsqrtÚembed_scaler   Ú	EmbeddingÚ
vocab_sizeÚembed_tokensr2   Úembed_positionsÚ
ModuleListrH   Úencoder_layersr¡   Úgradient_checkpointingÚ	post_init)r;   r‹   r†   r<   s    ` €r.   r:   zMarianEncoder.__init__²  s÷   øø€ Ý‰Œ×Ò˜Ñ Ô Ð à”~ˆŒØÔ1ˆŒà”Nˆ	Ø!Ô.ˆÔØ$*Ô$BˆÔ!Ø39Ô3IÐR�4œ9 YÑ/Ô/Ð/ÈsˆÔåœL¨Ô):¸IÀtÔGWÑXÔXˆÔåBØÔ*¨I°tÔ7Gñ 
ô  
ˆÔõ ”mÐ$fÐ$fÐ$fÐ$fÍÈvÔOdÑIeÔIeÐ$fÑ$fÔ$fÑgÔgˆŒà&+ˆÔ#à�ŠÑÔÐÐÐr0   Nr#   rq   Úinputs_embedsrt   r6   c                 ó  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        | j        z  }|                      |j        d d…         ¦  «        }||z   }t
          j                             || j        | j        ¬¦  «        }t          | j
        ||¬¦  «        }t          | j        ¦  «        D ];\  }}d}	| j        r!t          j        g ¦  «        }
|
| j        k     rd}	|	s
 |||fi |¤Ž}Œ<t!          |¬¦  «        S )Nz:You must specify exactly one of input_ids or inputs_embedsr'   rx   )r‹   r  rq   FT)Úlast_hidden_state)r+   r  r	  r  r)   r   r~   rs   rz   r   r‹   Ú	enumerater¡   rM   Úrandr  r   )r;   r#   rq   r  rt   Ú	embed_posr—   ÚidxÚencoder_layerÚto_dropÚdropout_probabilitys              r.   r^   zMarianEncoder.forwardÈ  sP  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ×-Ò-¨iÑ8Ô8¸4Ô;KÑKˆMà×(Ò(¨Ô)<¸S¸b¸SÔ)AÑBÔBˆ	à%¨	Ñ1ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆå2Ø”;Ø'Ø)ð
ñ 
ô 
ˆõ #,¨D¬KÑ"8Ô"8ð 	ð 	ÑˆC�àˆGØŒ}ð #Ý&+¤j°¡n¤nÐ#Ø&¨¬Ò7Ð7Ø"�Gàð Ø - Ø!Ø"ð!ð !ð ð!ð !�øõ
 Ø+ð
ñ 
ô 
ð 	
r0   r²   )rb   rc   rd   re   r·   r…   Ú_can_record_outputsr"   r:   r   r    r   rM   Ú
LongTensorrO   r   r   r   r^   rj   rk   s   @r.   rü   rü   £  sö   ø€ € € € € ðð ð ,Ø%ðð Ðð
˜|ð ð ð ð ð ð ð,  ØØð .2Ø26Ø26ð	(
ð (
àÔ# dÑ*ð(
ð Ô(¨4Ñ/ð(
ð Ô(¨4Ñ/ð	(
ð
 Ð+Ô,ð(
ð 
ð(
ð (
ð (
ñ „^ñ „_ñ  Ôð(
ð (
ð (
ð (
ð (
r0   rü   c                   ó8  ‡ — 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        ˆfd„t+          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        |                      ¦   «          d S )Nrÿ   c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))rŒ   )rÓ   )rC   Úir‹   s     €r.   rG   z*MarianDecoder.__init__.<locals>.<listcomp>  s(   ø€ Ð$sÐ$sÐ$sÐQRÕ%7¸È!Ð%LÑ%LÔ%LÐ$sÐ$sÐ$sr0   F)r9   r:   rs   Údecoder_layerdropr  r$   r5   r  Úmax_target_positionsr  r  r  r¹   r	  r   r
  Údecoder_vocab_sizer  r2   r  r  rH   Údecoder_layersr¡   r  r  ©r;   r‹   r<   s    `€r.   r:   zMarianDecoder.__init__  sú   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø”~ˆŒØÔ1ˆŒØ!Ô.ˆÔØ$*Ô$BˆÔ!Ø8>Ô8NÐW�4œ9 V¤^Ñ4Ô4Ð4ÐTWˆÔåœL¨Ô)BÀFÄNÐTXÔTdÑeÔeˆÔåBØÔ*¨F¬N¸DÔ<Lñ 
ô  
ˆÔõ ”mÐ$sÐ$sÐ$sÐ$sÕV[Ð\bÔ\qÑVrÔVrÐ$sÑ$sÔ$sÑtÔtˆŒà&+ˆÔ#à�ŠÑÔÐÐÐr0   Nr#   rq   rÙ   rÚ   r™   r  rÛ   rt   r6   c                 ó.  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|| j        z  }|r[|€Y|€| j        j        r6t          t          | j        ¬¦  «        t          | j        ¬¦  «        ¦  «        nt          | j        ¬¦  «        }|                     ¦   «         d d…         \  }	}
|�|                     ¦   «         nd}t          j
        |
|j        ¬¦  «        |z   }|€/t          ¦   «         s!||
z   }t          j        |	||j        ¬¦  «        }t          |t
          ¦  «        r|j        n|}t!          | j        |||¬¦  «        }t#          | j        |||¬¦  «        }|                      |	|
f||¬¦  «        }||z   }t&          j                             || j        | j        ¬	¦  «        }t/          | j        ¦  «        D ];\  }}| j        r t          j        g ¦  «        }|| j        k     rŒ, ||||f|||d
œ|¤Ž}Œ<t7          ||¬¦  «        S )NzTYou cannot specify both decoder_input_ids and decoder_inputs_embeds at the same time)r‹   r'   r   rí   )r‹   r  rq   r™   )r‹   r  rq   rÙ   )rY   rx   )rÚ   r™   rÛ   )r  r™   )r+   r  r	  r‹   Úis_encoder_decoderr   r
   r{   Úget_seq_lengthrM   r\   r[   r   Úonesrœ   r    r   r   r  r   r~   rs   rz   r  r¡   r  r  r   )r;   r#   rq   rÙ   rÚ   r™   r  rÛ   rt   Ú
batch_sizeÚ
seq_lengthrX   rY   Úmask_seq_lengthÚself_attn_cacheÚcausal_maskr—   r  Údecoder_layerr  s                       r.   r^   zMarianDecoder.forward  s¬  € ð ˜Ð -°tÐ";Ñ<ð 	uÝÐsÑtÔtÐtàÐ Ø ×-Ò-¨iÑ8Ô8ˆMð &¨Ô(8Ñ8ˆð ð 	˜Ð0ð )Ð4¸¼Ô8VÐ4õ $¥L¸¼Ð$DÑ$DÔ$DÅlÐZ^ÔZeÐFfÑFfÔFfÑgÔgÐgå!¨¬Ð5Ñ5Ô5ð ð "/×!3Ò!3Ñ!5Ô!5°c°r°cÔ!:Ñˆ
�JØETÐE` ×!?Ò!?Ñ!AÔ!AÐ!AÐfgÐÝ”| J°}Ô7KÐLÑLÔLÐOeÑeˆàÐ!Õ*BÑ*DÔ*DÐ!à4°zÑAˆOÝ"œZ¨
°OÈMÔL`ÐaÑaÔaˆNõ ˜/Õ+>Ñ?Ô?ð!ˆOÔ0Ð0à ð 	õ )Ø”;Ø'Ø)Ø+ð	
ñ 
ô 
ˆõ ";Ø”;Ø'Ø1Ø"7ð	"
ñ "
ô "
Ðð ×+Ò+Ø˜Ð$Ð&<È<ð ,ñ 
ô 
ˆð &¨Ñ4ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆå"+¨D¬KÑ"8Ô"8ð 	ð 	ÑˆC�àŒ}ð Ý&+¤j°¡n¤nÐ#Ø&¨¬Ò7Ð7Øà)˜MØØØ%ðð (>Ø /Ø#ðð ð ðð ˆMˆMõ 9Ø+Ø+ð
ñ 
ô 
ð 	
r0   )NNNNNNN)rb   rc   rd   re   rÓ   r   r…   r  r"   r:   r   r    r   rM   r  ri   rO   r	   r´   r   r   r   r^   rj   rk   s   @r.   r  r  ö  sy  ø€ € € € € ðð ð ,Ø$�n _¸AÈ+ÐVÑVÔVØ*˜N¨?À!ÐP^Ð_Ñ_Ô_ðð Ðð˜|ð ð ð ð ð ð ð&  ØØð .2Ø.2Ø:>Ø:>Ø(,Ø26Ø!%ðR
ð R
àÔ# dÑ*ðR
ð œ tÑ+ðR
ð  %Ô0°4Ñ7ð	R
ð
 !&Ô 0°4Ñ 7ðR
ð  ™ðR
ð Ô(¨4Ñ/ðR
ð ˜$‘;ðR
ð Ð+Ô,ðR
ð 
3ðR
ð R
ð R
ñ „^ñ „_ñ  ÔðR
ð R
ð R
ð 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                 óZ  •— t          ¦   «                              |¦  «         |j        |j        }}| j        j        r+t          j        ||j        |¦  «        | _	        dddœ| _
        nd | _
        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S )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°vÔ7H�Zˆð Œ;Ô7ð 	+Ýœ, z°6´>À;ÑOÔOˆDŒKà/>Ø/>ð'ð 'ˆDÔ#Ð#ð
 '+ˆDÔ#å$ VÑ,Ô,ˆŒÝ$ VÑ,Ô,ˆŒð 	�ŠÑÔÐÐÐr0   c                 óN   — |                       ¦   «                              ¦   «         S ra   )Úget_encoderÚget_input_embeddings©r;   s    r.   rA  z MarianModel.get_input_embeddingsŒ  s    € à×ÒÑ!Ô!×6Ò6Ñ8Ô8Ð8r0   c                 óŒ   — | j         j        r+|| _        | j        | j        _        | j        | j        _        d S || j        _        d S ra   )r‹   r:  r;  r=  r  r>  ©r;   rp   s     r.   Úset_input_embeddingsz MarianModel.set_input_embeddings�  sD   € ØŒ;Ô7ð 	.ØˆDŒKØ(,¬ˆDŒLÔ%Ø(,¬ˆDŒLÔ%Ð%Ð%à(-ˆDŒLÔ%Ð%Ð%r0   c                 ó„   — | j         j        rt          d¦  «        ‚|                      ¦   «                              ¦   «         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‹   r:  r+   Úget_decoderrA  rB  s    r.   Úget_decoder_input_embeddingsz(MarianModel.get_decoder_input_embeddings˜  sG   € ØŒ;Ô7ð 	ÝðHñô ð ð ×ÒÑ!Ô!×6Ò6Ñ8Ô8Ð8r0   c                 óT   — | j         j        rt          d¦  «        ‚|| j        _        d S )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‹   r:  r+   r>  r  rD  s     r.   Úset_decoder_input_embeddingsz(MarianModel.set_decoder_input_embeddings   s9   € ØŒ;Ô7ð 	Ýðrñô ð ð
 %*ˆŒÔ!Ð!Ð!r0   Únew_num_tokensr6   c                 ó*  — | j         j        rt          d¦  «        ‚|                      ¦   «         }|                      ||¦  «        }|                      |¦  «         |                      ¦   «         }|€|S || 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‹   r:  r+   rH  Ú_get_resized_embeddingsrJ  r(  Útie_weights)r;   rK  Úold_embeddingsÚnew_embeddingsÚmodel_embedss        r.   Úresize_decoder_token_embeddingsz+MarianModel.resize_decoder_token_embeddings©  s¦   € ØŒ;Ô7ð 	ÝðKñô ð ð
 ×:Ò:Ñ<Ô<ˆØ×5Ò5°nÀnÑUÔUˆØ×)Ò)¨.Ñ9Ô9Ð9à×8Ò8Ñ:Ô:ˆàÐ!ØÐð *8ˆŒÔ&ð 	×ÒÑÔÐàÐr0   Nr#   rq   rî   Údecoder_attention_maskÚencoder_outputsr™   r  Údecoder_inputs_embedsrÛ   rt   c
                 ó¤  — |€ | j         d	|||dœ|
¤Ž}nct          |t          ¦  «        sNt          |d         t          |¦  «        dk    r|d         ndt          |¦  «        dk    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#   rq   r  r   r!   r@   )r  r—   rý   ©r#   rq   rÙ   rÚ   r™   r  rÛ   )r  r™   Údecoder_hidden_statesÚdecoder_attentionsr"  Úencoder_last_hidden_staterÙ   Úencoder_attentionsr  )r=  rœ   r   Úlenr>  r   r  r™   r—   rý   r"  )r;   r#   rq   rî   rT  rU  r™   r  rV  rÛ   rt   Údecoder_outputss               r.   r^   zMarianModel.forwardÁ  s8  € ðh Ð"Ø*˜dœlð Ø#Ø-Ø+ðð ð ð	ð ˆOˆOõ ˜O­_Ñ=Ô=ð 	Ý-Ø"1°!Ô"4Ý47¸Ñ4HÔ4HÈ1Ò4LÐ4L˜o¨aÔ0Ð0ÐRVÝ14°_Ñ1EÔ1EÈÒ1IÐ1I˜?¨1Ô-Ð-Ètðñ ô ˆOð '˜$œ,ð 	
Ø'Ø1Ø"1°!Ô"4Ø#1Ø+Ø/Øð	
ð 	
ð ð	
ð 	
ˆõ "Ø-Ô?Ø+Ô;Ø"1Ô"?Ø.Ô9Ø,Ô=Ø&5Ô&GØ"1Ô"?Ø.Ô9ð	
ñ 	
ô 	
ð 		
r0   )	NNNNNNNNN)rb   rc   rd   Ú_keys_to_ignore_on_load_missingr"   r:   rA  rE  rH  rJ  rf   r   r
  rS  r   r   rM   r  ri   rµ   r   r	   rO   r´   r   r   r   r^   rj   rk   s   @r.   r6  r6  p  sÎ  ø€ € € € € ð 	/Ø.ð'Ð#ð
˜|ð ð ð ð ð ð ð*9ð 9ð 9ð.ð .ð .ð9ð 9ð 9ð*ð *ð *ð¸cð ÀbÄlð ð ð ð ð0 Øð .2Ø.2Ø59Ø6:ØHLØ(,Ø26Ø:>Ø!%ðV
ð V
àÔ# dÑ*ðV
ð œ tÑ+ðV
ð !Ô+¨dÑ2ð	V
ð
 !&¤¨tÑ 3ðV
ð ˜uœ|Ô,¨Ñ>ÀÑEðV
ð  ™ðV
ð Ô(¨4Ñ/ðV
ð  %Ô0°4Ñ7ðV
ð ˜$‘;ðV
ð Ð+Ô,ðV
ð 
ðV
ð V
ð V
ñ „^ñ ÔðV
ð V
ð V
ð V
ð V
r0   r6  zX
    The Marian Model with a language modeling head. Can be used for summarization.
    )Úcustom_introc                   óæ  ‡ — 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j        d	z  dej        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æ   r7  r8  r7  r8  úlm_head.weightú!model.decoder.embed_tokens.weightr‹   c                 óˆ  •— t          ¦   «                              |¦  «         t          |¦  «        | _        | j        j        rddddœ| _        |j        r|j        n|j        }|  	                    dt          j        d|f¦  «        ¦  «         t          j        |j        |d¬¦  «        | _        |                      ¦   «          d S )Nzmodel.shared.weight)rb  rc  z!model.encoder.embed_tokens.weightræ   r!   FrŽ   )r9   r:   r6  rß   r‹   r:  r<  r  r(  Úregister_bufferrM   Úzerosr   r’   r¹   Úlm_headr  )r;   r‹   Útarget_vocab_sizer<   s      €r.   r:   zMarianMTModel.__init__+  sÅ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý  Ñ(Ô(ˆŒ
ØŒ;Ô7ð 	à"7Ø5JØ5Jð'ð 'ˆDÔ#ð 28Ô1XÐw˜FÔ-Ð-Ð^dÔ^wÐØ×ÒÐ0µ%´+¸qÐBSÐ>TÑ2UÔ2UÑVÔVÐVÝ”y ¤Ð1BÈÐOÑOÔOˆŒð 	�ŠÑÔÐÐÐr0   NTrK  Úpad_to_multiple_ofÚmean_resizingr6   c                 ó�   •— t          ¦   «                              |||¦  «        }| j        j        r|                      |¦  «         |S ra   )r9   Úresize_token_embeddingsr‹   r:  Ú_resize_final_logits_bias)r;   rK  ri  rj  rQ  r<   s        €r.   rl  z%MarianMTModel.resize_token_embeddings<  sI   ø€ õ ™œ×8Ò8¸ÐI[Ð]jÑkÔkˆØŒ;Ô7ð 	;Ø×*Ò*¨>Ñ:Ô:Ð:ØÐr0   c                 óÔ  — |                       ¦   «         }|                      |||¦  «        }|                      |¦  «         |j        j        d         }| j        j        r|| j        _        | j        j        r_|                      ¦   «         �K| j        j	        s?|                      ¦   «         }|  
                    ||¦  «        }|                      |¦  «         |                       ¦   «         S )Nr   )rA  rN  rE  rK   r)   r‹   r:  r(  Úget_output_embeddingsÚtie_word_embeddingsÚ_get_resized_lm_headÚset_output_embeddings)r;   rK  ri  ÚargsrP  rQ  Úold_lm_headÚnew_lm_heads           r.   Ú_resize_token_embeddingsz&MarianMTModel._resize_token_embeddingsE  sâ   € Ø×2Ò2Ñ4Ô4ˆØ×5Ò5°nÀnÐVhÑiÔiˆØ×!Ò! .Ñ1Ô1Ð1à'Ô.Ô4°QÔ7ˆàŒ;Ô7ð 	<Ø-;ˆDŒKÔ*ð ŒKÔ8ð	4à×*Ò*Ñ,Ô,Ð8Ø”KÔ3ð 9ð ×4Ò4Ñ6Ô6ˆKØ×3Ò3°KÀÑPÔPˆKØ×&Ò& {Ñ3Ô3Ð3à×(Ò(Ñ*Ô*Ð*r0   c                 ó0  — | j         j        rt          d¦  «        ‚| j                             ¦   «         }|                      ||¦  «        }| j                             |¦  «         |                      ¦   «         �K| j         j        s?|                      ¦   «         }|  	                    ||¦  «        }|  
                    |¦  «         | j                             ¦   «         }|€|S || j         _        |                      ¦   «          |                      |¦  «         |S rM  )r‹   r:  r+   rß   rH  rN  rJ  ro  rp  rq  rr  r(  rO  rm  )r;   rK  rP  rQ  rt  ru  rR  s          r.   rS  z-MarianMTModel.resize_decoder_token_embeddings[  s  € ØŒ;Ô7ð 	ÝðKñô ð ð
 œ×@Ò@ÑBÔBˆØ×5Ò5°nÀnÑUÔUˆØŒ
×/Ò/°Ñ?Ô?Ð?ð ×%Ò%Ñ'Ô'Ð3¸D¼KÔ<[Ð3Ø×4Ò4Ñ6Ô6ˆKØ×3Ò3°KÀÑPÔPˆKØ×&Ò& {Ñ3Ô3Ð3à”z×>Ò>Ñ@Ô@ˆàÐ!ØÐð *8ˆŒÔ&ð 	×ÒÑÔÐà×&Ò& ~Ñ6Ô6Ð6àÐr0   c                 ó  — | j         j        d         }||k    r| j         d d …d |…f         }nBt          j        d||z
  f| j         j        ¬¦  «        }t          j        | j         |gd¬¦  «        }|                      d|¦  «         d S )Nr'   r!   rí   rw   ræ   )ræ   r)   rM   rf  r[   Úcatre  )r;   rK  Úold_num_tokensÚnew_biasÚ
extra_biass        r.   rm  z'MarianMTModel._resize_final_logits_bias{  s—   € ØÔ/Ô5°bÔ9ˆØ˜^Ò+Ð+ØÔ-¨a¨a¨a°°.°Ð.@ÔAˆHˆHåœ a¨¸.Ñ)HÐ%IÐRVÔRhÔRoÐpÑpÔpˆJÝ”y $Ô"8¸*Ð!EÈ1ÐMÑMÔMˆHØ×ÒÐ0°(Ñ;Ô;Ð;Ð;Ð;r0   rQ  c                 ó   — || _         d S ra   )rg  )r;   rQ  s     r.   rr  z#MarianMTModel.set_output_embeddings„  s   € Ø%ˆŒˆˆr0   r#   rq   rî   rT  rU  r™   r  rV  ÚlabelsrÛ   rt   c                 ó  — |	�G|
rt                                d¦  «         d}
|€'|€%t          |	| j        j        | j        j        ¦  «        } | j        |f||||||||
dœ|¤Ž}|                      |d         ¦  «        | j        z   }d}|	�Kt          ¦   «         } || 
                    d| 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)rq   rî   rU  rT  r™   r  rV  rÛ   r   r'   )	ÚlossÚlogitsr™   rY  rZ  r"  r[  rÙ   r\  )r�   Úwarningr/   r‹   r$   r%   rß   rg  ræ   r   r›   r(  r   r™   rY  rZ  r"  r[  rÙ   r\  )r;   r#   rq   rî   rT  rU  r™   r  rV  r~  rÛ   rt   ÚoutputsÚ	lm_logitsÚmasked_lm_lossÚloss_fcts                   r.   r^   zMarianMTModel.forward‡  sM  € ðp ÐØð mÝ—’ÐkÑlÔlÐlØˆIØ Ð(Ð-BÐ-JÝ$6Ø˜DœKÔ4°d´kÔ6Xñ%ô %Ð!ð '1 d¤jØð'
à)Ø/Ø+Ø#9Ø+Ø'Ø"7Øð'
ð '
ð ð'
ð '
ˆð —L’L ¨¤Ñ,Ô,¨tÔ/EÑEˆ	àˆØÐÝ'Ñ)Ô)ˆHØ%˜X i§n¢n°R¸¼Ô9WÑ&XÔ&XÐZ`×ZeÒZeÐfhÑZiÔZiÑjÔjˆNåØØØ#Ô3Ø")Ô"?Ø&Ô9Ø$Ô5Ø&-Ô&GØ")Ô"?Ø&Ô9ð

ñ 

ô 

ð 
	
r0   c                 óL   — t          || j        j        | j        j        ¦  «        S ra   )r/   r‹   r$   r%   )r;   r~  s     r.   Ú%prepare_decoder_input_ids_from_labelsz3MarianMTModel.prepare_decoder_input_ids_from_labelsè  s   € Ý! &¨$¬+Ô*BÀDÄKÔDfÑgÔgÐgr0   )NTra   )
NNNNNNNNNN)!rb   rc   rd   rô   r_  Ú_keys_to_ignore_on_saver<  r"   r:   rf   r´   r   r
  rl  rv  rS  rm  rr  r   r   rM   r  ri   rµ   r   r	   rO   r   r   r   r^   rˆ  rj   rk   s   @r.   rä   rä     s–  ø€ € € € € ð  Ðð'ð 'ð 'Ð#ð
  FÐGmÐnÐØ*Ð,OÐPÐð˜|ð ð ð ð ð ð ð$ aeðð Ø!ðØ7:¸T±zðØY]ðà	Œðð ð ð ð ð ð+ð +°sð +Ð_aÔ_kð +ð +ð +ð +ð,ð ð ð@<¸ð <Àð <ð <ð <ð <ð&°B´Lð &ð &ð &ð &ð Øð .2Ø.2Ø59Ø6:ØHLØ(,Ø26Ø:>Ø*.Ø!%ð]
ð ]
àÔ# dÑ*ð]
ð œ tÑ+ð]
ð !Ô+¨dÑ2ð	]
ð
 !&¤¨tÑ 3ð]
ð ˜uœ|Ô,¨Ñ>ÀÑEð]
ð  ™ð]
ð Ô(¨4Ñ/ð]
ð  %Ô0°4Ñ7ð]
ð Ô  4Ñ'ð]
ð ˜$‘;ð]
ð Ð+Ô,ð]
ð 
ð]
ð ]
ð ]
ñ „^ñ Ôð]
ð~h¸E¼Lð hð hð hð hð hð hð hð 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                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S ra   )r9   r:   r  r>  r  r*  s     €r.   r:   zMarianDecoderWrapper.__init__ó  s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý$ VÑ,Ô,ˆŒØ�ŠÑÔÐÐÐr0   c                 ó   —  | j         |i |¤ŽS ra   )r>  )r;   rs  rt   s      r.   r^   zMarianDecoderWrapper.forwardø  s   € ØˆtŒ|˜TÐ, VÐ,Ð,Ð,r0   )rb   rc   rd   re   r:   r^   rj   rk   s   @r.   r‹  r‹  í  sQ   ø€ € € € € ðð ð
ð ð ð ð ð
-ð -ð -ð -ð -ð -ð -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 )ÚMarianForCausalLMrb  rc  c                 ó  •— d|_         d|_        t          ¦   «                              |¦  «         t	          |¦  «        | _        t          j        |j        |j	        d¬¦  «        | _
        |                      ¦   «          d S )NTFrŽ   )rˆ   r,  r9   r:   r‹  rß   r   r’   Úhidden_sizer  rg  r  r*  s     €r.   r:   zMarianForCausalLM.__init__  sp   ø€ Ø ˆÔØ$)ˆÔ!Ý‰Œ×Ò˜Ñ Ô Ð Ý)¨&Ñ1Ô1ˆŒ
å”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr0   c                 ó$   — | j         j        j        S ra   ©rß   r>  r  rB  s    r.   rA  z&MarianForCausalLM.get_input_embeddings  s   € ØŒzÔ!Ô.Ð.r0   c                 ó(   — || j         j        _        d S ra   r“  rD  s     r.   rE  z&MarianForCausalLM.set_input_embeddings  s   € Ø*/ˆŒ
ÔÔ'Ð'Ð'r0   Nr   r#   rq   rÙ   rÚ   r™   r  r~  rÛ   Úlogits_to_keeprt   r6   c
                 óþ  —  | j         j        d|||||||dœ|
¤Ž}|d         }t          |	t          ¦  «        rt	          |	 d¦  «        n|	}|                      |dd…|dd…f         ¦  «        }d}|�e|                     |j        ¦  «        }t          ¦   «         } || 	                    d| 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
        ```rX  r   Nr'   )r€  r�  r™   r—   rý   r"  r  )rß   r>  rœ   rf   Úslicerg  Útor[   r   r›   r‹   r  r   r™   r—   rý   r"  )r;   r#   rq   rÙ   rÚ   r™   r  r~  rÛ   r•  rt   rƒ  r—   Úslice_indicesr�  r€  r†  s                    r.   r^   zMarianForCausalLM.forward  s)  € ðL >P¸T¼ZÔ=Oð 	>
ØØ)Ø"7Ø#9Ø+Ø'Øð	>
ð 	>
ð ð	>
ð 	>
ˆð   œ
ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ—Y’Y˜vœ}Ñ-Ô-ˆFÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬KÔ,BÑCÔCÀVÇ[Â[ÐQSÁ_Ä_ÑUÔUˆDå0ØØØ#Ô3Ø!Ô/ØÔ)Ø$Ô5ð
ñ 
ô 
ð 	
r0   )	NNNNNNNNr   )rb   rc   rd   r<  r:   rA  rE  r   r   rM   r  ri   rO   r	   r´   rf   r   r   rµ   r   r^   rj   rk   s   @r.   r�  r�  ý  s{  ø€ € € € € àÐ=ðÐð	ð 	ð 	ð 	ð 	ð/ð /ð /ð0ð 0ð 0ð Øð .2Ø.2Ø:>Ø;?Ø(,Ø26Ø*.Ø!%Ø-.ðA
ð A
àÔ# dÑ*ðA
ð œ tÑ+ðA
ð  %Ô0°4Ñ7ð	A
ð
 !&Ô 1°DÑ 8ðA
ð  ™ðA
ð Ô(¨4Ñ/ðA
ð Ô  4Ñ'ðA
ð ˜$‘;ðA
ð ˜eœlÑ*ðA
ð Ð+Ô,ðA
ð 
Ð2Ñ	2ðA
ð A
ð A
ñ „^ñ ÔðA
ð A
ð A
ð A
ð A
r0   r�  )r�  r6  rä   rÞ   )Nrl   )Jre   r  Úcollections.abcr   ÚnumpyrA   rM   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_loggerrb   r�   ri   rf   r/   r
  r2   ÚModuler³   rƒ   r…   r·   rÓ   rÞ   rü   r  r6  rä   r‹  r�  Ú__all__r  r0   r.   ú<module>r®     s%  ðð DÐ Cà €€€Ø $Ð $Ð $Ð $Ð $Ð $à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ )Ð )Ð )Ð )Ð )Ð )Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ .Ð .Ð .Ð .Ð .Ð .ð 
ˆÔ	˜HÑ	%Ô	%€ð %¤,ð ¸cð Ð[^ð ð ð ð ð -ð -ð -ð -ð -¨"¬,ñ -ô -ð -ðR !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð:r)ð r)ð r)ð r)ð r)�b”iñ r)ô r)ð r)ðl0ð 0ð 0ð 0ð 0Ð3ñ 0ô 0ð 0ðhOð Oð Oð Oð OÐ3ñ Oô Oð Oðd ðð ð ð ð ˜Oñ ô ñ „ðð<P
ð P
ð P
ð P
ð P
Ð)ñ P
ô P
ð P
ðfw
ð w
ð w
ð w
ð w
Ð)ñ w
ô w
ð w
ðt ðh
ð h
ð h
ð h
ð h
Ð'ñ h
ô h
ñ „ðh
ðV €ððñ ô ð
Hhð Hhð Hhð Hhð HhÐ)¨?ñ Hhô Hhñô ð
HhðX-ð -ð -ð -ð -Ð0ñ -ô -ð -ð Y
ð Y
ð Y
ð Y
ð Y
Ð-¨ñ Y
ô Y
ð Y
ðx YÐ
XÐ
X€€€r0   