Ë
    èÍ:j»0  ã                   ó²  — 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        ús/home/mcse/projects/srt_converter/srt-converter-venv/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                   ó^   — 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   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_dirc                 óf   — || _         || _        || _        || _        || _        || _        || _        y)aº  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.
        N)Ú_model_pathÚ	_data_dirÚ_fixed_dictionaryÚ_source_langÚ_target_langÚ_no_default_special_tokensÚ	_user_dir)ÚselfrE   rF   rG   rH   rI   rJ   rK   s           r;   Ú__init__zFairseqConverter.__init__k   s:   € ð, &ˆÔØ!ˆŒØ!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«      d¬«      }|d   xs |d	   d
   }| j                  |_        | j                  �| j                  |_        t!        |d«      rb|j"                  rVt$        j&                  j)                  | j                  t$        j&                  j+                  |j"                  «      «      |_        | j,                  �| j,                  |_        | j0                  �| j0                  |_        t5        |«      }|j6                  j9                  |«      }|j:                  j=                  ||«      }	|	j?                  «        |	jA                  |d
   «       tC        |tD        jF                  «      rytI        |jJ                  |	jJ                  d¬«       |jM                  tO        |jP                  «      «       |jR                  �s|jT                  jV                  |jT                  _,        nÜt[        |j\                  |	j\                  «       tI        |jJ                  |	jJ                  «       |j_                  tO        |j`                  «      «       |jc                  tO        |jd                  «      «       | jf                  rd |jT                  _4        n6|jT                  jV                  |jT                  _4        d|jT                  _5        |cd d d «       S # 1 sw Y   y xY w)Nr   )Úcheckpoint_utils)Úimport_user_module)rK   ÚcpuF)Úmap_locationÚweights_onlyr8   ÚcfgÚmodelÚ	lang_dict©Úwith_encoder_attentionT)6r   ÚtorchrW   rS   Úfairseq.utilsrX   ÚargparseÚ	NamespaceÚno_gradÚloadrM   ÚdevicerN   ÚdatarO   rI   Úhasattrr^   ÚosÚpathr&   ÚbasenamerP   rG   rQ   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_dictionaryrR   Údecoder_start_tokenÚadd_source_eos)
rT   r   ra   rW   rX   Ú
checkpointr8   ÚspecÚtaskr]   s
             r;   Ú_loadzFairseqConverter._load‰   so  € ÛÛå,à�>Š>Ý8áœx×1Ñ1¸4¿>¹>ÔJÔKà�]‰]‹_ñ 2	ØŸ™Ø× Ñ ¨u¯|©|¸EÓ/BÐQVð $ó ˆ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Ô.à÷e2	÷ 2	ò 2	ús   ÁK)M
Í
M)NNNFN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   ÚboolrU   r…   © r=   r;   rD   rD   h   st   „ Ù/ð &*Ø%)Ø*.Ø*/Ø"&ñ"àð"ð ð"ð ˜c‘]ð	"ð
 ˜c‘]ð"ð # 3™-ð"ð $(ð"ð ˜3‘-ó"ó<=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;   rz   rz   É   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 )Nr_   )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–   r`   r—   r‘   s        r;   rs   rs   Ó   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_embeddingsrr   Ú
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–   r`   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À   )	ra   rr   ÚnnÚ	EmbeddingrÍ   ÚweightsrÎ   Úpadding_idxÚ	encodings)rƒ   r–   ra   rÍ   s       r;   r¢   r¢   #  sG   € Ûä(¨°·±×1CÑ1CÔDˆV�]Š]È&Ï.É.€FØ—\‘\“^ F×$6Ñ$6¸Ñ$:Ð$<Ð=€D…Nr=   c            	      óx  — 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¬«       t	        j
                  | «       | j                  «       }t        |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Ý   )rG   rH   rI   rJ   rK   )rc   ÚArgumentParserÚArgumentDefaultsHelpFormatterÚadd_argumentr   Údeclare_argumentsÚ
parse_argsrD   rE   rF   rG   rH   rI   rJ   rK   Úconvert_from_args)Úparserr8   Ú	converters      r;   Úmainrè   *  sK  € Ü×$Ñ$Ü ×>Ñ>ô€Fð ×Ñ˜°¸MÐÔJØ
×ÑØØØLð ô ð
 ×ÑØØ6ð ô ð ×ÑØØ8ð ô ð ×ÑØØ^ð ô ð ×ÑØØ^ð ô ð ×ÑØ%Øð1ð	 ô ô ×Ñ Ô'Ø×ÑÓ€DÜ Ø�‰Ø�‰Ø×$Ñ$Ø×$Ñ$Ø×.Ñ.Ø"&×"@Ñ"@Ø—‘ô€Ið ×Ñ Õ%r=   Ú__main__)T)F)"rc   rj   Útypingr   Úctranslate2.convertersr   Ú ctranslate2.converters.converterr   Úctranslate2.specsr   r   r%   Ú
ActivationÚGELUÚGELUTanhÚRELUÚSWISHr(   r<   rB   rD   rz   rs   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ô^�yô ^òBMó=ò&/òPóRò*ó1ò $ò
(ò(ò>ò-&ð` ˆzÒÙ…Fð r=   