Ë
    èÍ:jB2  ã                   óÞ  — d dl Z d dlmZ d dlmZ d dlmZmZ ej                  j                  ej                  j                  ej                  j                  ej                  j                  dœZej                  j                  ej                  j                   dœZd„ Zd„ Zd	„ Zd
„ Z G d„ de«      Zd„ 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#d„ Z$e%dk(  r e$«        yy)é    N)Úutils)Ú	Converter)Úcommon_specÚtransformer_spec)ÚgeluÚ	fast_geluÚreluÚsilu)ÚconcatÚsumc           
      óž  — t        | dd«      dkD  }t        | dd«      dk(  }t        | dd«      dk(  }t        | dd«      }t        | dd«      }t        | d	d
«      }t        j                  «       } || j                  | j                  k(  xr | j                  dv d«        ||d
k(  d|z  «        ||t
        v d|›ddj                  t
        j                  «       «      ›d�«        || j                  |xs |xs |k7  d«        ||dk(  xs |t        v d|›ddj                  t        j                  «       «      ›d�«       |j                  «        y )NÚmax_relative_positionsr   éÿÿÿÿéþÿÿÿÚpos_ffn_activation_fnr	   Ú
feat_merger   Úself_attn_typez
scaled-dot>   ÚtransformerÚtransformer_lmzROptions --encoder_type and --decoder_type must be 'transformer' or 'transformer_lmzNOption --self_attn_type %s is not supported (supported values are: scaled-dot)zOption --pos_ffn_activation_fn z. is not supported (supported activations are: z, ú)z`Options --position_encoding and --max_relative_positions cannot be both enabled or both disabledé   zOption --feat_merge z. is not supported (supported merge modes are: ú )Úgetattrr   ÚConfigurationCheckerÚencoder_typeÚdecoder_typeÚ_SUPPORTED_ACTIVATIONSÚjoinÚkeysÚposition_encodingÚ_SUPPORTED_FEATURES_MERGEÚvalidate)	ÚoptÚnum_source_embeddingsÚwith_relative_positionÚwith_rotaryÚ
with_alibiÚactivation_fnr   r   Úchecks	            úv/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/ctranslate2/converters/opennmt_py.pyÚ	check_optr+      sm  € Ü$ SÐ*BÀAÓFÈÑJÐÜ˜#Ð7¸Ó;¸rÑA€KÜ˜Ð6¸Ó:¸bÑ@€JÜ˜CÐ!8¸&ÓA€MÜ˜˜l¨HÓ5€JÜ˜SÐ"2°LÓA€Nä×&Ñ&Ó(€EÙ	Ø×Ñ˜C×,Ñ,Ñ,ò 	BØ×ÑÐ AÐAð	,ôñ 
Ø˜,Ñ&ØXØ
ñ	ôñ
 
ØÔ/Ñ/â˜$Ÿ)™)Ô$:×$?Ñ$?Ó$AÕBð	Dôñ
 
Ø×ÑÐ"8Ò"U¸KÒ"UÈ:ÑVð	ôñ
 
Ø Ñ"ÒM jÔ4MÐ&Møâ�s—x‘xÔ 9× >Ñ >Ó @ÕAð	Côð
 
‡N�NÕó    c                 ó,  — t        | dd«      dkD  }t        | dd«      }t        | dd«      }t        | dd«      dk(  rd}d	}	n| j                  }| j                  }	t        | d
d«      }
t        j                  j                  | j                  | j                  f|
|t        |   ||	|t        |   t        | dd«      ¬«	      }t        | dd«      |j                  _        t        ||«       |D ]  }|j                  |«       Œ |D ]  }|j                  |«       Œ |S )ú5Creates a model specification from the model options.r   r   r   r	   r   r   Úlambda_alignr   r   Úheadsé   Ú
multiqueryF)r%   Ú
activationÚalignment_layerÚalignment_headsr$   Úembeddings_mergeÚmulti_query_attentionÚdecoder_start_tokenz<s>)r   r4   r5   r   ÚTransformerSpecÚfrom_configÚ
enc_layersÚ
dec_layersr   r!   Úconfigr8   Úset_transformer_specÚregister_source_vocabularyÚregister_target_vocabulary)r#   Ú	variablesÚ
src_vocabsÚ
tgt_vocabsr$   r%   r(   r   r4   r5   Ú	num_headsÚ
model_specÚ	src_vocabÚ	tgt_vocabs                 r*   Ú_get_model_spec_seq2seqrH   :   s4  € ô % SÐ*BÀAÓFÈÑJÐÜ˜CÐ!8¸&ÓA€MÜ˜˜l¨HÓ5€Jô ˆs�N AÓ&¨!Ò+ØˆØ‰à×-Ñ-ˆØ×-Ñ-ˆä˜˜W aÓ(€Iä!×1Ñ1×=Ñ=Ø	�‰˜Ÿ™Ð(ØØ5Ü)¨-Ñ8Ø'Ø'Ø3Ü2°:Ñ>Ü% c¨<¸Ó?ð >ó 
€Jô -4°CÐ9NÐPUÓ,V€J×ÑÔ)ä˜ YÔ/Øò 9ˆ	Ø×-Ñ-¨iÕ8ð9àò 9ˆ	Ø×-Ñ-¨iÕ8ð9ð Ðr,   c                 óV  — t        | dd«      dkD  }t        | dd«      dk(  }t        | dd«      dk(  }t        | dd«      }t        | dd«      }	t        | d	d«      }
|
|	k(  s|
dk(  rd
}
|rdnd
}t        | dd«      }|dk(  }t        | dd«      }t        j                  j                  | j                  |	t
        |   |||| j                  dk(  ||t        | dd«      |
|¬«      }t        | dd«      |j                  _        t        |j                  |d¬«       |D ]  }|j                  |«       Œ |S )r.   r   r   r   r   r   r	   r0   r1   Únum_kvNÚrotary_interleaveTr
   Úsliding_windowÚrmsr2   F)
r3   Úffn_glur%   ÚalibiÚrms_normÚ
rotary_dimrK   r7   Únum_heads_kvrL   Únorm_epsg�íµ ÷Æ°>©Úwith_encoder_attention)r   r   ÚTransformerDecoderModelSpecr:   r<   r   Ú
layer_normr=   Úlayer_norm_epsilonÚset_transformer_decoderÚdecoderÚregister_vocabulary)r#   rA   rB   rC   r$   r%   r&   r'   r(   rD   rJ   rQ   rK   rN   rL   rE   rG   s                    r*   Ú_get_model_spec_lmr\   c   sa  € ä$ SÐ*BÀAÓFÈÑJÐÜ˜#Ð7¸Ó;¸rÑA€KÜ˜Ð6¸Ó:¸bÑ@€JÜ˜CÐ!8¸&ÓA€MÜ˜˜W aÓ(€IÜ�S˜( AÓ&€FØ�Ò˜f¨škØˆÙ!‘ t€JÜ Ð%8¸$Ó?ÐØ˜vÑ%€GÜ˜SÐ"2°AÓ6€Nä!×=Ñ=×IÑIØ�‰ØÜ)¨-Ñ8ØØ5ØØ—‘ 5Ñ(ØØ+Ü% c¨<¸Ó?ØØ%ð Jó €Jô ,3°3¸
ÀDÓ+I€J×ÑÔ(äØ×ÑØØ$õð  ò 2ˆ	Ø×&Ñ& yÕ1ð2ð Ðr,   c                 ó  — t        | t        «      rÃd| v r¿t        | d   t        «      rB| d   g}| d   g}| j                  d«      }|�‰|j	                  |j                  «       «       ||fS | d   j                  D �cg c]  }|d   j                  j                  ‘Œ }}| d   j                  D �cg c]  }|d   j                  j                  ‘Œ }}||fS | d   d   j                  g}| d   d   j                  g}||fS c c}w c c}w )NÚsrcÚtgtÚ	src_featsr   r   )	Ú
isinstanceÚdictÚlistÚgetÚextendÚvaluesÚfieldsÚvocabÚitos)rh   rB   rC   r`   Úfields        r*   Ú
get_vocabsrk   �   s  € Ü�%œÔ 5¨E¡>Ü�e˜E‘l¤DÔ)Ø ™,˜ˆJØ ™,˜ˆJàŸ	™	 +Ó.ˆIØÐ$Ø×!Ñ! )×"2Ñ"2Ó"4Ô5ð �zÐ!Ð!ð <AÀ¹<×;NÑ;NÖO°%˜% ™(Ÿ.™.×-Ó-ÐOˆJÐOØ;@À¹<×;NÑ;NÖO°%˜% ™(Ÿ.™.×-Ó-ÐOˆJÐOð �zÐ!Ð!ð ˜A‘h˜q‘k×&Ñ&Ð'ˆ
Ø˜A‘h˜q‘k×&Ñ&Ð'ˆ
à�zÐ!Ð!ùò PùÚOs   Á; C>Â. Dc                   ó"   — e Zd ZdZdefd„Zd„ Zy)ÚOpenNMTPyConverterz(Converts models generated by OpenNMT-py.Ú
model_pathc                 ó   — || _         y)z‰Initializes the OpenNMT-py converter.

        Arguments:
          model_path: Path to the OpenNMT-py PyTorch model (.pt file).
        N)Ú_model_path)Úselfrn   s     r*   Ú__init__zOpenNMTPyConverter.__init__¦   s   € ð &ˆÕr,   c           	      ó¶  — dd l }|j                  | j                  dd¬«      }t        |d   «      \  }}t	        |d   t        |«      ¬«       |d   }|j                  |d	   j                  «       D ��ci c]  \  }}d
|z  |“Œ c}}«       |d   j                  dk(  rt        |d   |||t        |«      ¬«      S t        |d   |||t        |«      ¬«      S c c}}w )Nr   ÚcpuF)Úmap_locationÚweights_onlyrh   r#   )r$   ÚmodelÚ	generatorzgenerator.%sr   )ÚtorchÚloadrp   rk   r+   ÚlenÚupdateÚitemsr   r\   rH   )rq   ry   Ú
checkpointrB   rC   rA   ÚkeyÚvalues           r*   Ú_loadzOpenNMTPyConverter._load®   s  € Ûà—Z‘ZØ×Ñ¨5¸uð  ó 
ˆ
ô ",¨J°wÑ,?Ó!@Ñˆ
�Jä�*˜UÑ#¼3¸z»?ÕKà˜wÑ'ˆ	Ø×Ñð #-¨[Ñ"9×"?Ñ"?Ó"A÷á�C˜ð  Ñ$ eÑ+óô	
ð �eÑ×)Ñ)Ð-=Ò=Ü%Ø˜5Ñ!ØØØÜ&)¨*£oôð ô +Ø˜5Ñ!ØØØÜ&)¨*£oôð ùós   Á3C
N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrrr   r�   © r,   r*   rm   rm   £   s   „ Ù2ð& 3ó &ó"r,   rm   c                 ó\   — t        | j                  |«       t        | j                  |«       y ©N)Úset_transformer_encoderÚencoderrY   rZ   )ÚspecrA   s     r*   r>   r>   Ó   s   € Ü˜DŸL™L¨)Ô4Ü˜DŸL™L¨)Õ4r,   c                 ó¦   — t        | |d«       t        | j                  |d«       t        | j                  «      D ]  \  }}t        ||d|z  «       Œ y )Nr‹   zencoder.layer_normzencoder.transformer.%d)Úset_input_layersÚset_layer_normrW   Ú	enumerateÚlayerÚset_transformer_encoder_layer)rŒ   rA   Úir‘   s       r*   rŠ   rŠ   Ø   sP   € Ü�T˜9 iÔ0Ü�4—?‘? IÐ/CÔDÜ˜dŸj™jÓ)ò V‰ˆˆ5Ü% e¨YÐ8PÐSTÑ8TÕUñVr,   c                 ó&  — t        | |d«       t        | j                  |d«       t        | j                  «      D ]  \  }}t        ||d|z  |¬«       Œ 	 t        | j                  |d«       y # t        $ r t        | j                  |d«       Y y w xY w)NrZ   zdecoder.layer_normzdecoder.transformer_layers.%drT   rx   zgenerator.0)	rŽ   r�   rW   r�   r‘   Úset_transformer_decoder_layerÚ
set_linearÚ
projectionÚKeyError)rŒ   rA   rU   r“   r‘   s        r*   rY   rY   ß   sˆ   € Ü�T˜9 iÔ0Ü�4—?‘? IÐ/CÔDÜ˜dŸj™jÓ)ò 
‰ˆˆ5Ü%ØØØ+¨aÑ/Ø#9ö		
ð
ð>Ü�4—?‘? I¨{Õ;øÜò >ä�4—?‘? I¨}Ö=ð>ús   ÁA- Á- BÂBc                 óè   — t        | d«      rt        | j                  |d|z  «       nd| _        | j                  }t        |t        «      s|g}t        |«      D ]  \  }}t        ||d||fz  «       Œ y )NÚposition_encodingsz%s.embeddings.make_embedding.peFz(%s.embeddings.make_embedding.emb_luts.%d)	ÚhasattrÚset_position_encodingsrš   Úscale_embeddingsÚ
embeddingsra   rc   r�   Úset_embeddings)rŒ   rA   ÚscopeÚembeddings_specsr“   Úembeddings_specs         r*   rŽ   rŽ   ñ   s…   € ÜˆtÐ)Ô*ÜØ×#Ñ#ØØ-°Ñ5õ	
ð !&ˆÔà—‘ÐÜÐ&¬Ô-Ø,Ð-Ðä'Ð(8Ó9ò 
Ñˆˆ?ÜØØØ6¸%À¸ÑCõ	
ñ
r,   c                 ó¸   — t        | j                  |d|z  «       t        | j                  |d|z  d¬«       t	        | j                  j
                  |d|z  «       y )Nú%s.feed_forwardú%s.self_attnT©Úself_attentionú%s.layer_norm)Úset_ffnÚffnÚset_multi_head_attentionr§   r�   rW   ©rŒ   rA   r    s      r*   r’   r’     sW   € ÜˆD�H‰H�iÐ!2°UÑ!:Ô;ÜØ×ÑØØ˜ÑØõ	ô �4×&Ñ&×1Ñ1°9¸oÐPUÑ>UÕVr,   c                 ó:  — t        | j                  |d|z  «       t        | j                  |d|z  d¬«       t	        | j                  j
                  |d|z  «       |r?t        | j                  |d|z  «       t	        | j                  j
                  |d|z  «       y y )Nr¤   r¥   Tr¦   z%s.layer_norm_1z%s.context_attnz%s.layer_norm_2)r©   rª   r«   r§   r�   rW   Ú	attention)rŒ   rA   r    rU   s       r*   r•   r•     s”   € ÜˆD�H‰H�iÐ!2°UÑ!:Ô;ÜØ×ÑØØ˜ÑØõ	ô �4×&Ñ&×1Ñ1°9Ð>OÐRWÑ>WÔXÙÜ  §¡°Ð<MÐPUÑ<UÔVÜ�t—~‘~×0Ñ0°)Ð=NÐQVÑ=VÕWð r,   c                 óî   — t        | j                  |d|z  «       t        | j                  |d|z  «       t        | j                  |d|z  «       t        | d«      rt        | j                  |d|z  «       y y )Nr¨   z%s.w_1z%s.w_2Úlinear_0_noactz%s.w_3)r�   rW   r–   Úlinear_0Úlinear_1r›   r°   r¬   s      r*   r©   r©   !  sh   € Ü�4—?‘? I¨ÀÑ/FÔGÜˆt�}‰}˜i¨°EÑ)9Ô:Üˆt�}‰}˜i¨°EÑ)9Ô:ÜˆtÐ%Ô&Ü�4×&Ñ&¨	°8¸eÑ3CÕDð 'r,   c                 óè  — |r‡t        d«      D �cg c]  }t        j                  «       ‘Œ }}t        |d   |d|z  «       t        |d   |d|z  «       t        |d   |d|z  «       t	        j
                  | j                  d   |«       n�t        | j                  d   |d|z  «       t        d«      D �cg c]  }t        j                  «       ‘Œ }}t        |d   |d|z  «       t        |d   |d|z  «       t	        j
                  | j                  d   |«       t        | j                  d   |d	|z  «       t        | d
«      r&t        |d|z  «      | _	        | j                  | _
        y y c c}w c c}w )Né   r   z%s.linear_queryr   z%s.linear_keysé   z%s.linear_valuesr   z%s.final_linearÚrelative_position_keysz'%s.relative_positions_embeddings.weight)Úranger   Ú
LinearSpecr–   r   Úfuse_linearÚlinearr›   Ú_get_variabler¶   Úrelative_position_values)rŒ   rA   r    r§   Ú_Úsplit_layerss         r*   r«   r«   )  s[  € ÙÜ:?À»(ÖC°Qœ×.Ñ.Õ0ÐCˆÐCÜ�< ‘? IÐ/@À5Ñ/HÔIÜ�< ‘? IÐ/?À%Ñ/GÔHÜ�< ‘? IÐ/AÀEÑ/IÔJÜ×Ñ˜$Ÿ+™+ a™.¨,Õ7ä�4—;‘;˜q‘> 9Ð.?À%Ñ.GÔHÜ:?À»(ÖC°Qœ×.Ñ.Õ0ÐCˆÐCÜ�< ‘? IÐ/?À%Ñ/GÔHÜ�< ‘? IÐ/AÀEÑ/IÔJÜ×Ñ˜$Ÿ+™+ a™.¨,Ô7Üˆt�{‰{˜2‰ 	Ð+<¸uÑ+DÔEÜˆtÐ-Ô.Ü&3ØÐ@À5ÑHó'
ˆÔ#ð )-×(CÑ(CˆÕ%ð	 /ùò Dùò Ds   �E*Â4E/c                 óä   — 	 t        |d|z  «      | _        	 t        |d|z  «      | _        y # t        $ r+ t        |d|z  «      | _        t        |d|z  «      | _        Y ŒIw xY w# t        $ r Y y w xY w)Nú	%s.weightz%s.a_2z%s.b_2ú%s.bias)r»   Úgammar˜   Úbetar¬   s      r*   r�   r�   >  s|   € ð?Ü" 9¨k¸EÑ.AÓBˆŒ
ð
Ü! )¨Y¸Ñ->Ó?ˆ�	øô ò ?ä" 9¨h¸Ñ.>Ó?ˆŒ
Ü! )¨X¸Ñ-=Ó>ˆŽ	ð?ûô ò Ùðús    ‚, —A# ¬1A ÁA Á#	A/Á.A/c                 óh   — t        |d|z  «      | _        |j                  d|z  «      }|�|| _        y y )NrÀ   rÁ   )r»   Úweightrd   Úbias)rŒ   rA   r    rÆ   s       r*   r–   r–   K  s:   € Ü 	¨;¸Ñ+>Ó?€D„KØ�=‰=˜ UÑ*Ó+€DØÐØˆ�	ð r,   c                 ó,   — t        |d|z  «      | _        y )NrÀ   )r»   rÅ   r¬   s      r*   rŸ   rŸ   R  s   € Ü 	¨;¸Ñ+>Ó?€D…Kr,   c                 óH   — t        |d|z  «      j                  «       | _        y )Nz%s.pe)r»   ÚsqueezeÚ	encodingsr¬   s      r*   rœ   rœ   V  s   € Ü" 9¨g¸©oÓ>×FÑFÓH€D…Nr,   c                 ó   — | |   S r‰   r‡   )rA   Únames     r*   r»   r»   Z  s   € Ø�T‰?Ðr,   c                  ó  — t        j                  t         j                  ¬«      } | j                  ddd¬«       t	        j
                  | «       | j                  «       }t        |j                  «      j                  |«       y )N)Úformatter_classz--model_pathTzModel path.)ÚrequiredÚhelp)
ÚargparseÚArgumentParserÚArgumentDefaultsHelpFormatterÚadd_argumentr   Údeclare_argumentsÚ
parse_argsrm   rn   Úconvert_from_args)ÚparserÚargss     r*   ÚmainrÚ   ^  se   € Ü×$Ñ$Ü ×>Ñ>ô€Fð ×Ñ˜°¸MÐÔJÜ×Ñ Ô'Ø×ÑÓ€DÜ�t—‘Ó'×9Ñ9¸$Õ?r,   Ú__main__)T)F)&rÑ   Úctranslate2.convertersr   Ú ctranslate2.converters.converterr   Úctranslate2.specsr   r   Ú
ActivationÚGELUÚGELUTanhÚRELUÚSWISHr   ÚEmbeddingsMergeÚCONCATÚADDr!   r+   rH   r\   rk   rm   r>   rŠ   rY   rŽ   r’   r•   r©   r«   r�   r–   rŸ   rœ   r»   rÚ   r‚   r‡   r,   r*   ú<module>rç      s  ðÛ å (Ý 6ß ;ð ×"Ñ"×'Ñ'Ø×'Ñ'×0Ñ0Ø×"Ñ"×'Ñ'Ø×"Ñ"×(Ñ(ñ	Ð ð ×)Ñ)×0Ñ0Ø×&Ñ&×*Ñ*ñÐ ò#òL&òR)òX"ô(-˜ô -ò`5ò
Vó>ò$
ò.WóXòEóDò*
òò@òIòò@ð ˆzÒÙ…Fð r,   