Ë
    ›¾j'3  ã                   ó²  — 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	m
Z
 h d£Ze	j                  j                  e	j                  j                  e	j                  j                  e	j                  j                  e	j                  j                   dœZd„ Zd	„ Z G d
„ de«      Zd„ Zdd„Zd„ Zd„ Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z e!dk(  r e «        yy)é    N)ÚOptional)Úutils)Ú	Converter)Úcommon_specÚtransformer_spec>   ÚbartÚtransformerÚtransformer_lmÚtransformer_alignÚmultilingual_transformer)ÚgeluÚgelu_accurateÚ	gelu_fastÚreluÚswishc                 óØ  — dd l }t        | dd«      }|j                  j                  | j                     }t        j                  «       } ||t        v d|›d| j                  ›ddj                  t        «      ›d�«       |j                  «         ||t        v d	|›d
dj                  t        j                  «       «      ›d�«        |t        | dd«       d«        |t        | dd«       d«       |dk(  r¯ || j                   d«        || j                   d«       |j                  «        t        j                  j!                  | j"                  | j$                  | j&                  t        |   t        | dd«      | j(                  | j*                  | j,                  k7  ¬«      S  || j.                  | j&                  k(  d«        || j0                  | j$                  k(  d«       |j                  «        t        j2                  j!                  | j4                  | j"                  f| j0                  | j.                  t        |   t        | dd«      t        | dd«      t        | dd«      ¬«      S )Nr   Úactivation_fnr   zModel 'z' used by architecture 'z*' is not supported (supported models are: z, ú)zOption --activation-fn z. is not supported (supported activations are: Úno_token_positional_embeddingsFz8Option --no-token-positional-embeddings is not supportedÚlang_tok_replacing_bos_eosz4Option --lang-tok-replacing-bos-eos is not supportedr
   z.Option --character-embeddings is not supportedz(Option --adaptive-input is not supportedÚlayernorm_embedding)Úpre_normÚ
activationr   Úno_final_normÚproject_in_outzZOptions --encoder-normalize-before and --decoder-normalize-before must have the same valuezXOptions --encoder-attention-heads and --decoder-attention-heads must have the same valueÚalignment_layeréÿÿÿÿÚalignment_heads)r   r   r   r   r   )ÚfairseqÚgetattrÚmodelsÚARCH_MODEL_NAME_REGISTRYÚarchr   ÚConfigurationCheckerÚ_SUPPORTED_MODELSÚjoinÚvalidateÚ_SUPPORTED_ACTIVATIONSÚkeysÚcharacter_embeddingsÚadaptive_inputr   ÚTransformerDecoderModelSpecÚfrom_configÚdecoder_layersÚdecoder_attention_headsÚdecoder_normalize_beforeÚno_decoder_final_normÚdecoder_input_dimÚdecoder_embed_dimÚencoder_normalize_beforeÚencoder_attention_headsÚTransformerSpecÚencoder_layers)Úargsr   r   Ú
model_nameÚchecks        úh/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/ctranslate2/converters/fairseq.pyÚ_get_model_specr<      sR  € Ûä˜D /°6Ó:€MØ—‘×8Ñ8¸¿¹ÑC€Jä×&Ñ&Ó(€EÙ	ØÔ'Ñ'â�t—y“y $§)¡)Ô,=Õ">ð	@ôð
 
‡N�NÔÙ	ØÔ/Ñ/â˜$Ÿ)™)Ô$:×$?Ñ$?Ó$AÕBð	Dôñ
 
Ü�DÐ:¸EÓBÐBØBôñ 
Ü�DÐ6¸Ó>Ð>Ø>ôð
 Ð%Ò%ÙØ×)Ñ)Ð)Ø<ô	
ñ 	Ø×#Ñ#Ð#Ø6ô	
ð 	�‰Ôä×;Ñ;×GÑGØ×ÑØ×(Ñ(Ø×2Ñ2Ü-¨mÑ<Ü '¨Ð.CÀUÓ KØ×4Ñ4Ø×1Ñ1°T×5KÑ5KÑKð Hó 
ð 	
ñ 	Ø×)Ñ)¨T×-JÑ-JÑJð'ô	
ñ
 	Ø×(Ñ(¨D×,HÑ,HÑHð'ô	
ð
 	�‰Ôä×/Ñ/×;Ñ;Ø× Ñ  $×"5Ñ"5Ð6Ø×(Ñ(Ø×2Ñ2Ü-¨mÑ<Ü# DÐ*;¸RÓ@Ü# DÐ*;¸QÓ?Ü '¨Ð.CÀUÓ Kð <ó 
ð 	
ó    c                 óN   — | j                   D �cg c]  }|dk(  rdn|‘Œ c}S c c}w )Nz<pad>z<blank>)Úsymbols)Ú
dictionaryÚtokens     r;   Ú
_get_vocabrB   d   s(   € ØBL×BTÑBTÖU¸˜ 'Ò)‰I¨uÑ4ÒUÐUùÒUs   �"c                   ód   — e Zd ZdZ	 	 	 	 	 	 ddededee   dee   dee   ded	ee   d
efd„Zd„ Zy)ÚFairseqConverterz%Converts models trained with Fairseq.NÚ
model_pathÚdata_dirÚsource_langÚtarget_langÚfixed_dictionaryÚno_default_special_tokensÚuser_dirÚunsafe_deserializationc	                 ót   — || _         || _        || _        || _        || _        || _        || _        || _        y)a5  Initializes the Fairseq converter.

        Arguments:
          model_path: Path to the Fairseq PyTorch model (.pt file).
          data_dir: Path to the Fairseq data directory containing vocabulary files.
          source_lang: Source language (may be required if not declared in the model).
          target_lang: Target language (may be required if not declared in the model).
          fixed_dictionary: Path to the fixed dictionary for multilingual models.
          no_default_special_tokens: Require all special tokens to be provided by the user
            (e.g. encoder end token, decoder start token).
          user_dir: Path to the user directory containing custom extensions.
          unsafe_deserialization: Allow unsafe pickle deserialization when loading
            trusted legacy checkpoints.
        N)Ú_model_pathÚ	_data_dirÚ_fixed_dictionaryÚ_source_langÚ_target_langÚ_no_default_special_tokensÚ	_user_dirÚ_unsafe_deserialization)	ÚselfrE   rF   rG   rH   rI   rJ   rK   rL   s	            r;   Ú__init__zFairseqConverter.__init__k   sB   € ð2 &ˆÔØ!ˆŒØ!1ˆÔØ'ˆÔØ'ˆÔØ*CˆÔ'Ø!ˆŒØ'=ˆÕ$r=   c                 óÂ  — dd l }dd l}ddl m} | j                  r,ddlm}  |t        j                  | j                  ¬«      «       |j                  «       5  |j                  | j                  |j                  d«      | j                   ¬«      }|d   xs |d   d	   }| j                  |_        | j                  �| j                  |_        t#        |d
«      rb|j$                  rVt&        j(                  j+                  | j                  t&        j(                  j-                  |j$                  «      «      |_        | j.                  �| j.                  |_        | j2                  �| j2                  |_        t7        |«      }|j8                  j;                  |«      }|j<                  j?                  ||«      }	|	jA                  «        |	jC                  |d	   «       tE        |tF        jH                  «      rytK        |jL                  |	jL                  d¬«       |jO                  tQ        |jR                  «      «       |jT                  �s|jV                  jX                  |jV                  _-        nÜt]        |j^                  |	j^                  «       tK        |jL                  |	jL                  «       |ja                  tQ        |jb                  «      «       |je                  tQ        |jf                  «      «       | jh                  rd |jV                  _5        n6|jV                  jX                  |jV                  _5        d|jV                  _6        |cd d d «       S # 1 sw Y   y xY w)Nr   )Úcheckpoint_utils)Úimport_user_module)rK   Úcpu)Úmap_locationÚweights_onlyr8   ÚcfgÚmodelÚ	lang_dictF©Úwith_encoder_attentionT)7r   ÚtorchrY   rT   Úfairseq.utilsrZ   ÚargparseÚ	NamespaceÚno_gradÚloadrN   ÚdevicerU   rO   ÚdatarP   rI   Úhasattrr`   ÚosÚpathr&   ÚbasenamerQ   rG   rR   rH   r<   ÚtasksÚ
setup_taskr!   Úbuild_modelÚevalÚload_state_dictÚ
isinstancer   r,   Úset_transformer_decoderÚdecoderÚregister_vocabularyrB   r@   Úadd_bos_tokenÚconfigÚ	eos_tokenÚ	bos_tokenÚset_transformer_encoderÚencoderÚregister_source_vocabularyÚsource_dictionaryÚregister_target_vocabularyÚtarget_dictionaryrS   Údecoder_start_tokenÚadd_source_eos)
rV   r   rc   rY   rZ   Ú
checkpointr8   ÚspecÚtaskr_   s
             r;   Ú_loadzFairseqConverter._load�   sy  € ÛÛå,à�>Š>Ý8áœx×1Ñ1¸4¿>¹>ÔJÔKà�]‰]‹_ñ 4	ØŸ™Ø× Ñ Ø"Ÿ\™\¨%Ó0Ø!%×!=Ñ!=Ð=ð $ó ˆJð
 ˜fÑ%ÒC¨°EÑ):¸7Ñ)CˆDàŸ™ˆDŒIØ×%Ñ%Ð1Ø(,×(>Ñ(>�Ô%Ü�t˜[Ô)¨d¯nªnÜ!#§¡§¡Ø—N‘N¤B§G¡G×$4Ñ$4°T·^±^Ó$Dó"�”ð × Ñ Ð,Ø#'×#4Ñ#4�Ô à× Ñ Ð,Ø#'×#4Ñ#4�Ô ä" 4Ó(ˆDà—=‘=×+Ñ+¨DÓ1ˆDØ—N‘N×.Ñ.¨t°TÓ:ˆEØ�J‰JŒLØ×!Ñ! *¨WÑ"5Ô6ä˜$Ô 0× LÑ LÔMÜ'Ø—L‘LØ—M‘MØ+0õð ×(Ñ(¬°D·O±OÓ)DÔEØ×)Ó)Ø,0¯K©K×,AÑ,A�D—K‘KÕ)ô (¨¯©°e·m±mÔDÜ'¨¯©°e·m±mÔDà×/Ñ/´
¸4×;QÑ;QÓ0RÔSØ×/Ñ/´
¸4×;QÑ;QÓ0RÔSØ×2Ò2Ø6:�D—K‘KÕ3à6:·k±k×6KÑ6K�D—K‘KÔ3Ø15�D—K‘KÔ.à÷i4	÷ 4	ò 4	ús   ÁK4MÍM)NNNFNF)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   ÚboolrW   r‡   © r=   r;   rD   rD   h   s‚   „ Ù/ð &*Ø%)Ø*.Ø*/Ø"&Ø',ñ >àð >ð ð >ð ˜c‘]ð	 >ð
 ˜c‘]ð >ð # 3™-ð >ð $(ð >ð ˜3‘-ð >ð !%ó >óD?r=   rD   c                 ó6  — t        | |«       t        | j                  |j                  «      D ]  \  }}t	        ||«       Œ |j
                  � t        | j
                  |j
                  «       |j                  �!t        | j                  |j                  «       y y ©N)Úset_input_layersÚzipÚlayerÚlayersÚset_transformer_encoder_layerÚ
layer_normÚset_layer_normr   )r…   ÚmoduleÚ
layer_specr“   s       r;   r|   r|   Ï   s€   € Ü�T˜6Ô"Ü  §¡¨V¯]©]Ó;ò 9Ñˆ
�EÜ% j°%Õ8ð9à×ÑÐ$Ü�t—‘¨×(9Ñ(9Ô:Ø×!Ñ!Ð-Ü�t×/Ñ/°×1KÑ1KÕLð .r=   c                 ó*  — t        | |«       t        | j                  |j                  «       t	        | j
                  |j                  «      D ]  \  }}t        |||¬«       Œ |j                  � t        | j                  |j                  «       |j                  � t        | j                  |j                  «       |j                  � t        | j                  |j                  «       |j                  �!t        | j                  |j                  «       y y )Nra   )r‘   Ú
set_linearÚ
projectionÚoutput_projectionr’   r“   r”   Úset_transformer_decoder_layerr–   r—   r   Úproject_in_dimÚ
project_inÚproject_out_dimÚproject_out)r…   r˜   rb   r™   r“   s        r;   ru   ru   Ù   sß   € Ü�T˜6Ô"Üˆt�‰ × 8Ñ 8Ô9Ü  §¡¨V¯]©]Ó;ò 
Ñˆ
�EÜ%ØØØ#9ö	
ð
ð ×ÑÐ$Ü�t—‘¨×(9Ñ(9Ô:Ø×!Ñ!Ð-Ü�t×/Ñ/°×1KÑ1KÔLØ×ÑÐ(Ü�4—?‘? F×$9Ñ$9Ô:Ø×ÑÐ)Ü�4×#Ñ# V×%;Ñ%;Õ<ð *r=   c                 óø   — t        | j                  |j                  «       t        t	        | j
                  t        «      r| j
                  d   n| j
                  |j                  «       |j                  | _	        y )Nr   )
Úset_position_encodingsÚposition_encodingsÚembed_positionsÚset_embeddingsrt   Ú
embeddingsÚlistÚembed_tokensÚembed_scaleÚscale_embeddings©r…   r˜   s     r;   r‘   r‘   ì   sX   € Ü˜4×2Ñ2°F×4JÑ4JÔKÜÜ(¨¯©¼$Ô?ˆ�‰˜ÒÀTÇ_Á_Ø×Ñôð #×.Ñ.€DÕr=   c                 óÈ   — t        | j                  |«       t        | j                  |j                  d¬«       t        | j                  j                  |j                  «       y ©NT)Úself_attention)Úset_ffnÚffnÚset_multi_head_attentionr°   Ú	self_attnr—   r–   Úself_attn_layer_normr­   s     r;   r•   r•   õ   sE   € ÜˆD�H‰H�fÔÜ˜T×0Ñ0°&×2BÑ2BÐSWÕXÜ�4×&Ñ&×1Ñ1°6×3NÑ3NÕOr=   c                 ób  — t        | j                  |«       t        | j                  |j                  d¬«       t        | j                  j                  |j                  «       |rKt        | j                  |j                  «       t        | j                  j                  |j                  «       y y r¯   )r±   r²   r³   r°   r´   r—   r–   rµ   Ú	attentionÚencoder_attnÚencoder_attn_layer_norm)r…   r˜   rb   s      r;   rž   rž   û   s{   € ÜˆD�H‰H�fÔÜ˜T×0Ñ0°&×2BÑ2BÐSWÕXÜ�4×&Ñ&×1Ñ1°6×3NÑ3NÔOÙÜ  §¡°×1DÑ1DÔEÜ�t—~‘~×0Ñ0°&×2PÑ2PÕQð r=   c                 óÄ   — t        | j                  |j                  «       t        | j                  |j
                  «       t        | j                  |j                  «       y r�   )r—   r–   Úfinal_layer_normr›   Úlinear_0Úfc1Úlinear_1Úfc2r­   s     r;   r±   r±     s:   € Ü�4—?‘? F×$;Ñ$;Ô<Üˆt�}‰}˜fŸj™jÔ)Üˆt�}‰}˜fŸj™jÕ)r=   c                 óØ  — |r™t        d«      D �cg c]  }t        j                  «       ‘Œ }}t        |d   |j                  «       t        |d   |j
                  «       t        |d   |j                  «       t        j                  | j                  d   |«       n¢t        | j                  d   |j                  «       t        d«      D �cg c]  }t        j                  «       ‘Œ }}t        |d   |j
                  «       t        |d   |j                  «       t        j                  | j                  d   |«       t        | j                  d   |j                  «       y c c}w c c}w )Né   r   é   é   r   )Úranger   Ú
LinearSpecr›   Úq_projÚk_projÚv_projr   Úfuse_linearÚlinearÚout_proj)r…   r˜   r°   Ú_Úsplit_layerss        r;   r³   r³   
  s  € ÙÜ:?À»(ÖC°Qœ×.Ñ.Õ0ÐCˆÐCÜ�< ‘? F§M¡MÔ2Ü�< ‘? F§M¡MÔ2Ü�< ‘? F§M¡MÔ2Ü×Ñ˜$Ÿ+™+ a™.¨,Õ7ä�4—;‘;˜q‘> 6§=¡=Ô1Ü:?À»(ÖC°Qœ×.Ñ.Õ0ÐCˆÐCÜ�< ‘? F§M¡MÔ2Ü�< ‘? F§M¡MÔ2Ü×Ñ˜$Ÿ+™+ a™.¨,Ô7Üˆt�{‰{˜2‰ §¡Õ0ùò Dùò Ds   �E"ÃE'c                 ó€   — |j                   j                  «       | _        |j                  j                  «       | _        y r�   )ÚweightÚnumpyÚgammaÚbiasÚbetar­   s     r;   r—   r—     s*   € Ø—‘×$Ñ$Ó&€D„JØ—‘×!Ñ!Ó#€D…Ir=   c                 óš   — |j                   j                  «       | _         |j                  � |j                  j                  «       | _        y y r�   )rÏ   rÐ   rÒ   r­   s     r;   r›   r›     s9   € Ø—-‘-×%Ñ%Ó'€D„KØ‡{�{ÐØ—K‘K×%Ñ%Ó'ˆ�	ð r=   c                 óB   — |j                   j                  «       | _         y r�   )rÏ   rÐ   r­   s     r;   r§   r§   %  s   € Ø—-‘-×%Ñ%Ó'€D…Kr=   c                 óÆ   — dd l }t        ||j                  j                  «      r|j                  n|j
                  }|j                  «       |j                  dz   d  | _        y )Nr   rÂ   )	rc   rt   ÚnnÚ	EmbeddingrÏ   ÚweightsrÐ   Úpadding_idxÚ	encodings)r…   r˜   rc   rÏ   s       r;   r¤   r¤   )  sG   € Ûä(¨°·±×1CÑ1CÔDˆV�]Š]È&Ï.É.€FØ—\‘\“^ F×$6Ñ$6¸Ñ$:Ð$<Ð=€D…Nr=   c            
      ó¶  — t        j                  t         j                  ¬«      } | j                  ddd¬«       | j                  ddd¬«       | j                  dd	¬
«       | j                  dd¬
«       | j                  dd¬
«       | j                  dd¬
«       | j                  ddd¬«       | j                  ddd¬«       t	        j
                  | «       | j                  «       }t        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  ¬«      }|j!                  |«       y )N)Úformatter_classz--model_pathTzModel path.)ÚrequiredÚhelpz
--data_dirz=Data directory containing the source and target vocabularies.z
--user_dirz'Directory containing custom extensions.)rß   z--fixed_dictionaryz)Fixed dictionary for multilingual models.z--source_langzOSource language. This argument is used to find dictionary file from `data_dir`.z--target_langzOTarget language. This argument is used to find dictionary file from `data_dir`.z--no_default_special_tokensÚ
store_truezjRequire all special tokens to be provided by the user during inference, including the decoder start token.)Úactionrß   z--unsafe_deserializationzuAllow loading legacy checkpoints with unsafe pickle deserialization. Only enable this option for trusted checkpoints.)rG   rH   rI   rJ   rK   rL   )re   ÚArgumentParserÚArgumentDefaultsHelpFormatterÚadd_argumentr   Údeclare_argumentsÚ
parse_argsrD   rE   rF   rG   rH   rI   rJ   rK   rL   Úconvert_from_args)Úparserr8   Ú	converters      r;   Úmainrê   0  st  € Ü×$Ñ$Ü ×>Ñ>ô€Fð ×Ñ˜°¸MÐÔJØ
×ÑØØØLð ô ð
 ×ÑØØ6ð ô ð ×ÑØØ8ð ô ð ×ÑØØ^ð ô ð ×ÑØØ^ð ô ð ×ÑØ%Øð1ð	 ô ð ×ÑØ"Øð?ð	 ô ô ×Ñ Ô'Ø×ÑÓ€DÜ Ø�‰Ø�‰Ø×$Ñ$Ø×$Ñ$Ø×.Ñ.Ø"&×"@Ñ"@Ø—‘Ø#×:Ñ:ô	€Ið ×Ñ Õ%r=   Ú__main__)T)F)"re   rl   Útypingr   Úctranslate2.convertersr   Ú ctranslate2.converters.converterr   Úctranslate2.specsr   r   r%   Ú
ActivationÚGELUÚGELUTanhÚRELUÚSWISHr(   r<   rB   rD   r|   ru   r‘   r•   rž   r±   r³   r—   r›   r§   r¤   rê   rˆ   rŽ   r=   r;   ú<module>rõ      sä   ðÛ Û 	å å (Ý 6ß ;òÐ ð ×"Ñ"×'Ñ'Ø ×+Ñ+×4Ñ4Ø×'Ñ'×0Ñ0Ø×"Ñ"×'Ñ'Ø×#Ñ#×)Ñ)ñÐ òE
òPVôd�yô dòNMó=ò&/òPóRò*ó1ò $ò
(ò(ò>ò6&ðr ˆzÒÙ…Fð r=   