Ë
    èÍ:j—=  ã                   óF  — d dl Z d dlZd dl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 ej                  j                  ej                  j                  ej                  j                   dœZ G d„ de	«      Z G d	„ d
«      Z G d„ de«      Zd„ Zdd„Zd„ Zedk(  r e«        yy)é    N)ÚOptionalÚUnion)Úutils)Ú	Converter)Úcommon_specÚtransformer_spec)ÚgeluÚreluÚswishc                   ó\   — e Zd ZdZe	 	 	 d
deeef   dede	e   de	e   fd„«       Z
d„ Zd	„ Zy)ÚOpenNMTTFConverterzConverts OpenNMT-tf models.NÚconfigÚauto_configÚcheckpoint_pathÚmodelc                 ód  — ddl m} ddlm} t	        |t
        «      r|j                  |g«      }nt        j                  |«      }|€|j                  |d   «      }nBt        j                  j                  |«      r|j                  |«      }n|j                  |«      }|r |j                  ||j!                  «       «       |j#                  |d   |d   «      }|j%                  |«       |j'                  ||«      }|j)                  |¬«      }|€t+        d«      ‚|j-                  «         | |«      S )aá  Creates the converter from the configuration.

        Arguments:
          config: Path to the YAML configuration, or a dictionary with the loaded configuration.
          auto_config: Whether the model automatic configuration values should be used.
          checkpoint_path: Path to the checkpoint or checkpoint directory to load. If not set,
            the latest checkpoint from the model directory is loaded.
          model: If the model instance cannot be resolved from the model directory, this argument
             can be set to either the name of the model in the catalog or the path to the model
             configuration.

        Returns:
          A :class:`ctranslate2.converters.OpenNMTTFConverter` instance.
        r   )r   )Ú
CheckpointÚ	model_dirÚdata)r   zNo checkpoint was restored)Úopennmtr   Úopennmt.utils.checkpointr   Ú
isinstanceÚstrÚload_configÚcopyÚdeepcopyÚ
load_modelÚosÚpathÚexistsÚload_model_from_fileÚload_model_from_catalogÚmerge_configr   Útry_prefix_pathsÚ
initializeÚfrom_configÚrestoreÚRuntimeErrorÚcreate_variables)	Úclsr   r   r   r   Úconfig_utilr   Údata_configÚ
checkpoints	            úv/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/ctranslate2/converters/opennmt_tf.pyr&   zOpenNMTTFConverter.from_config   s  € õ, 	2Ý7ä�fœcÔ"Ø ×,Ñ,¨f¨XÓ6‰Fä—]‘] 6Ó*ˆFàˆ=Ø×*Ñ*¨6°+Ñ+>Ó?‰EÜ�W‰W�^‰^˜EÔ"Ø×4Ñ4°UÓ;‰Eà×7Ñ7¸Ó>ˆEáØ×$Ñ$ V¨U×->Ñ->Ó-@ÔAà!×2Ñ2°6¸+Ñ3FÈÈvÉÓWˆØ×Ñ˜Ô%à×+Ñ+¨F°EÓ:ˆ
Ø$×,Ñ,¸_Ð,ÓMˆØÐ"ÜÐ;Ó<Ð<à×ÑÔ Ù�5‹zÐó    c                 ó   — || _         y)zŠInitializes the converter.

        Arguments:
          model: An initialized and fully-built ``opennmt.models.Model`` instance.
        N)Ú_model)Úselfr   s     r.   Ú__init__zOpenNMTTFConverter.__init__H   s   € ð ˆ�r/   c                 ó¬   — dd l }t        | j                  |j                  j                  «      rt        «       }n
t        «       } || j                  «      S ©Nr   )r   r   r1   ÚmodelsÚLanguageModelÚTransformerDecoderSpecBuilderÚTransformerSpecBuilder)r2   r   Úspec_builders      r.   Ú_loadzOpenNMTTFConverter._loadP   s<   € Ûä�d—k‘k 7§>¡>×#?Ñ#?Ô@Ü8Ó:‰Lä1Ó3ˆLá˜DŸK™KÓ(Ð(r/   )FNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r   ÚdictÚboolr   r&   r3   r;   © r/   r.   r   r      sd   „ Ù%àð "Ø)-Ø#ñ0à�c˜4�iÑ ð0ð ð0ð " #™ð	0ð
 ˜‰}ò0ó ð0òdó)r/   r   c                   óJ   — e Zd Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)r9   c           
      ó  ‡— dd l Št        j                  «       } |t        |‰j                  j
                  «      d«       |j                  «         |t        |j                  ‰j                  j                  «      d«        |t        |j                  ‰j                  j                  ‰j                  j                  f«      d«       |j                  «        |j                  j                  d   j                  j                   }|j                  j                  d   j"                  j                   }|j$                  d u}|j&                  j(                  j*                  } ||t,        v d|›ddj/                  t,        j1                  «       «      ›d�«        ||t3        |j                  j4                  «      k7  d	«        ||j6                  j8                  ‰j                  j:                  j<                  k7  d
«       t?        |j                  «      }t?        |j@                  «      }tC        |«      }	|	dk(  rtD        jF                  jH                  }
n¸|j                  jJ                  }d }
|�ut        |‰j                  jL                  «      rtD        jF                  jH                  }
n:t        |‰j                  jN                  «      rtD        jF                  jP                  }
 |tS        ˆfd„|D «       «      d«        ||
d ud|z  «       d}d}|j6                  j8                  ‰j                  j:                  jT                  k(  rd}|j                  «        tW        jX                  tC        |j                  j                  «      |j                  j                  d   j                  j                   jZ                  |j                  j\                  d ut,        |   |	|
|¬«      }tW        j^                  tC        |j6                  j                  «      |j6                  j                  d   j                  j                   jZ                  |j6                  j\                  d ut,        |   |||¬«      }tW        j`                  ||«      }t3        |d   jb                  «      |jd                  _3        t3        |d   jh                  «      |jd                  _5        |D ]&  }|jm                  to        |jp                  «      «       Œ( |D ]&  }|js                  to        |jp                  «      «       Œ( | ju                  |j                  |j                  |j                  «       | jw                  |j6                  |j6                  |j@                  «       |S )Nr   z%Only Transformer models are supportedz#Parallel encoders are not supportedz<Source inputter must be a WordEmbedder or a ParallelInputterúActivation ú. is not supported (supported activations are: ú, ú)z^Relative position representation and position encoding cannot be both enabled or both disabledz<Averaging all multi-head attention matrices is not supportedé   c              3   ó^   •K  — | ]$  }t        |‰j                  j                  «      –— Œ& y ­w©N)r   Ú	inputtersÚWordEmbedder)Ú.0Úinputterr   s     €r.   ú	<genexpr>z2TransformerSpecBuilder.__call__.<locals>.<genexpr>—   s,   øè ø€ ò à ô ˜x¨×):Ñ):×)GÑ)G×Hñùs   ƒ*-z'All source inputters must WordEmbeddersz!Unsupported embeddings reducer %séÿÿÿÿ)Úpre_normÚ
activationÚnum_source_embeddingsÚembeddings_mergeÚrelative_position)rS   rT   rW   Úalignment_layerÚalignment_heads)<r   r   ÚConfigurationCheckerr   r6   ÚTransformerÚvalidateÚencoderÚencodersÚSelfAttentionEncoderÚfeatures_inputterrM   rN   ÚParallelInputterÚlayersÚself_attentionÚlayerÚffnÚmaximum_relative_positionÚinnerrT   r<   Ú_SUPPORTED_ACTIVATIONSÚjoinÚkeysrB   Úposition_encoderÚdecoderÚattention_reductionÚMultiHeadAttentionReductionÚAVERAGE_ALL_LAYERSÚ_get_inputtersÚlabels_inputterÚlenr   ÚEmbeddingsMergeÚCONCATÚreducerÚConcatReducerÚ
SumReducerÚADDÚallÚAVERAGE_LAST_LAYERr   ÚTransformerEncoderSpecÚ	num_headsÚ
layer_normÚTransformerDecoderSpecÚTransformerSpecÚ
mark_startr   Úadd_source_bosÚmark_endÚadd_source_eosÚregister_source_vocabularyÚ_load_vocabÚvocabulary_fileÚregister_target_vocabularyÚset_transformer_encoderÚset_transformer_decoder)r2   r   ÚcheckÚmhare   Úwith_relative_positionÚactivation_nameÚsource_inputtersÚtarget_inputtersrU   rV   ru   rX   rY   Úencoder_specÚdecoder_specÚspecrP   r   s                     @r.   Ú__call__zTransformerSpecBuilder.__call__\   sœ  ø€ Ûä×*Ñ*Ó,ˆÙÜ�u˜gŸn™n×8Ñ8Ó9Ø3ô	
ð 	�‰ÔáÜ�u—}‘} g×&6Ñ&6×&KÑ&KÓLØ1ô	
ñ 	ÜØ×'Ñ'Ø×"Ñ"×/Ñ/°×1BÑ1B×1SÑ1SÐTóð Kô	
ð 	�‰Ôà�m‰m×"Ñ" 1Ñ%×4Ñ4×:Ñ:ˆØ�m‰m×"Ñ" 1Ñ%×)Ñ)×/Ñ/ˆØ!$×!>Ñ!>ÀdÐ!JÐØŸ)™)×.Ñ.×7Ñ7ˆáØÔ5Ñ5â §	¡	Ô*@×*EÑ*EÓ*GÕ HðJô	
ñ
 	Ø"¤d¨5¯=©=×+IÑ+IÓ&JÑJðô	
ñ
 	Ø�M‰M×-Ñ-Ø�~‰~×9Ñ9×LÑLñMàJô	
ô *¨%×*AÑ*AÓBÐÜ)¨%×*?Ñ*?Ó@ÐÜ #Ð$4Ó 5ÐØ  AÒ%Ü*×:Ñ:×AÑAÑà×-Ñ-×5Ñ5ˆGØ#ÐØÐ"Ü˜g w§~¡~×'CÑ'CÔDÜ'2×'BÑ'B×'IÑ'IÑ$Ü ¨¯©×)BÑ)BÔCÜ'2×'BÑ'B×'FÑ'FÐ$áÜó à$4ôó ð :ôñ Ø ¨Ð,Ø3°gÑ=ôð
 ˆØˆà�M‰M×-Ñ-Ø�~‰~×9Ñ9×LÑLòMð  ˆOà�‰Ôä'×>Ñ>Ü�—‘×$Ñ$Ó%Ø�M‰M× Ñ  Ñ#×2Ñ2×8Ñ8×BÑBØ—]‘]×-Ñ-°TÐ9Ü-¨oÑ>Ø"7Ø-Ø4ô
ˆô (×>Ñ>Ü�—‘×$Ñ$Ó%Ø�M‰M× Ñ  Ñ#×2Ñ2×8Ñ8×BÑBØ—]‘]×-Ñ-°TÐ9Ü-¨oÑ>Ø4Ø+Ø+ô
ˆô  ×/Ñ/°¸lÓKˆä%)Ð*:¸1Ñ*=×*HÑ*HÓ%Iˆ�‰Ô"Ü%)Ð*:¸1Ñ*=×*FÑ*FÓ%Gˆ�‰Ô"Ø(ò 	SˆHØ×+Ñ+¬K¸×8PÑ8PÓ,QÕRð	Sà(ò 	SˆHØ×+Ñ+¬K¸×8PÑ8PÓ,QÕRð	Sð 	×$Ñ$Ø�L‰LØ�M‰MØ×#Ñ#ô	
ð
 	×$Ñ$Ø�L‰LØ�M‰MØ×!Ñ!ô	
ð ˆr/   c                 ó,  — t        |j                  t        |«      «      D ]  \  }}| j                  ||«       Œ |j                  �&| j                  |j                  |j                  «       t        |j                  |j                  «      D ]S  \  }}| j                  |j                  |j                  d¬«       | j                  |j                  |j                  «       ŒU |j                  �'| j                  |j                  |j                  «       y y )NT©rc   )ÚzipÚ
embeddingsrp   Úset_embeddingsrk   Úset_position_encodingsÚposition_encodingsrd   rb   Úset_multi_head_attentionrc   Úset_ffnre   r}   Úset_layer_norm)r2   r’   ÚmodulerP   Úembedding_specÚ
layer_specrd   s          r.   rˆ   z.TransformerSpecBuilder.set_transformer_encoderÖ   sô   € Ü(+¨D¯O©O¼^ÈHÓ=UÓ(Vò 	:Ñ$ˆN˜HØ×Ñ °Õ9ð	:à×"Ñ"Ð.Ø×'Ñ'Ø×'Ñ'Ø×'Ñ'ôô
 "% T§Z¡Z°·±Ó!?ò 	4ÑˆJ˜Ø×)Ñ)Ø×)Ñ)Ø×$Ñ$Ø#ð *ô ð �L‰L˜Ÿ™¨¯©Õ3ð	4ð ×ÑÐ(Ø×Ñ §¡°×1BÑ1BÕCð )r/   c                 óª  — | j                  |j                  |«       |j                  �&| j                  |j                  |j                  «       t        |j                  |j                  «      D ]Š  \  }}| j                  |j                  |j                  d¬«       |j                  r+| j                  |j                  |j                  d   d¬«       | j                  |j                  |j                  «       ŒŒ |j                  �&| j                  |j                  |j                  «       | j                  |j                   |j"                  «       y )NTr•   r   F)r˜   r—   rk   r™   rš   r–   rd   rb   r›   rc   Ú	attentionrœ   re   r}   r�   Ú
set_linearÚ
projectionÚoutput_layer)r2   r’   rž   rP   r    rd   s         r.   r‰   z.TransformerSpecBuilder.set_transformer_decoderë   s  € Ø×Ñ˜DŸO™O¨XÔ6Ø×"Ñ"Ð.Ø×'Ñ'Ø×'Ñ'Ø×'Ñ'ôô
 "% T§Z¡Z°·±Ó!?ò 	4ÑˆJ˜Ø×)Ñ)Ø×)Ñ)Ø×$Ñ$Ø#ð *ô ð �ŠØ×-Ñ-Ø×(Ñ(Ø—O‘O AÑ&Ø#(ð .ô ð �L‰L˜Ÿ™¨¯©Õ3ð	4ð  ×ÑÐ(Ø×Ñ §¡°×1BÑ1BÔCà�‰˜Ÿ™¨×)<Ñ)<Õ=r/   c                 óü   — | j                  |j                  |j                  j                  «       | j                  |j                  |j                  j
                  «       | j                  |j                  |«       y rL   )r£   Úlinear_0rd   rg   Úlinear_1ÚouterÚset_layer_norm_from_wrapperr}   ©r2   r’   rž   s      r.   rœ   zTransformerSpecBuilder.set_ffn  sN   € Ø�‰˜Ÿ™ v§|¡|×'9Ñ'9Ô:Ø�‰˜Ÿ™ v§|¡|×'9Ñ'9Ô:Ø×(Ñ(¨¯©¸&ÕAr/   c                 óª  — t        d«      D �cg c]  }t        j                  «       ‘Œ }}| j                  |d   |j                  j
                  «       | j                  |d   |j                  j                  «       | j                  |d   |j                  j                  «       |rŒt        j                  |j                  d   |«       |j                  j                  �Ÿ|j                  j                  j                  «       |_        |j                  j                  j                  «       |_        nLt        j                  |j                  d   |d d «       t        j                  |j                  d   |dd  «       | j                  |j                  d   |j                  j                  «       | j!                  |j"                  |«       y c c}w )Né   r   rJ   é   rR   )Úranger   Ú
LinearSpecr£   rd   Úlinear_queriesÚlinear_keysÚlinear_valuesr   Úfuse_linearÚlinearrf   Úrelative_position_keysÚnumpyÚrelative_position_valuesÚlinear_outputrª   r}   )r2   r’   rž   rc   Ú_Úsplit_layerss         r.   r›   z/TransformerSpecBuilder.set_multi_head_attention  sY  € Ü:?À»(ÖC°Qœ×.Ñ.Õ0ÐCˆÐCØ�‰˜ Q™¨¯©×)DÑ)DÔEØ�‰˜ Q™¨¯©×)AÑ)AÔBØ�‰˜ Q™¨¯©×)CÑ)CÔDáÜ×Ñ˜dŸk™k¨!™n¨lÔ;Ø�|‰|×5Ñ5ÐAà—L‘L×7Ñ7×=Ñ=Ó?ð Ô+ð —L‘L×9Ñ9×?Ñ?ÓAð Õ-ô ×Ñ˜dŸk™k¨!™n¨l¸2¸AÐ.>Ô?Ü×Ñ˜dŸk™k¨!™n¨l¸1¸2Ð.>Ô?à�‰˜Ÿ™ B™¨¯©×)CÑ)CÔDØ×(Ñ(¨¯©¸&ÕAùò' Ds   ŽGc                 óv   — | j                  ||j                  €|j                  «       y |j                  «       y rL   )r�   Úinput_layer_normÚoutput_layer_normr«   s      r.   rª   z2TransformerSpecBuilder.set_layer_norm_from_wrapper#  s<   € Ø×ÑØð ×*Ñ*Ð2ð ×(Ñ(õ	
ð
 ×,Ñ,õ	
r/   c                 ó€   — |j                   j                  «       |_         |j                  j                  «       |_        y rL   )Úgammar·   Úbetar«   s      r.   r�   z%TransformerSpecBuilder.set_layer_norm-  s*   € Ø—\‘\×'Ñ'Ó)ˆŒ
Ø—K‘K×%Ñ%Ó'ˆ�	r/   c                 óð   — |j                   j                  «       |_        |j                  s|j                  j                  «       |_        |j                  � |j                  j                  «       |_        y y rL   )Úkernelr·   ÚweightÚ	transposeÚbiasr«   s      r.   r£   z!TransformerSpecBuilder.set_linear1  sV   € Ø—m‘m×)Ñ)Ó+ˆŒØ×ÒØŸ+™+×/Ñ/Ó1ˆDŒKØ�;‰;Ð"ØŸ™×)Ñ)Ó+ˆD�Ið #r/   c                 óB   — |j                   j                  «       |_        y rL   )Ú	embeddingr·   rÄ   r«   s      r.   r˜   z%TransformerSpecBuilder.set_embeddings8  s   € Ø×&Ñ&×,Ñ,Ó.ˆ�r/   c                 ó’   — dd l }t        ||j                  j                  «      r#|j                  j                  «       dd  |_        y y )Nr   rJ   )r   r   rb   ÚPositionEmbedderrÈ   r·   Ú	encodings)r2   r’   rž   r   s       r.   r™   z-TransformerSpecBuilder.set_position_encodings;  s;   € Ûä�f˜gŸn™n×=Ñ=Ô>Ø#×-Ñ-×3Ñ3Ó5°a°bÐ9ˆD�Nð ?r/   N)F)r<   r=   r>   r“   rˆ   r‰   rœ   r›   rª   r�   r£   r˜   r™   rC   r/   r.   r9   r9   [   s9   „ òxòtDò*>ò:Bó
Bò,
ò(ò,ò/ó:r/   r9   c                   ó   — e Zd Zd„ Zy)r8   c           
      óÆ  — dd l }t        j                  «       } |t        |j                  |j
                  j                  «      d«       |j                  «        |j                  j                  d   j                  j                  }|j                  j                  d   j                  j                  }|j                  j                  j                  } ||t        v d|›ddj!                  t        j#                  «       «      ›d�«       |j                  «        t$        j&                  j)                  t+        |j                  j                  «      |j,                  |j                  j.                  d ut        |   ¬«      }|j1                  t3        |j4                  j6                  «      «       | j9                  |j                  |j                  |j4                  «       |S )Nr   z*Only self-attention decoders are supportedrF   rG   rH   rI   )rS   rT   )r   r   rZ   r   rl   ÚdecodersÚSelfAttentionDecoderr\   rb   rc   rd   re   rg   rT   r<   rh   ri   rj   r   ÚTransformerDecoderModelSpecr&   rr   r|   r}   Úregister_vocabularyr…   r`   r†   r‰   )r2   r   r   rŠ   r‹   re   r�   r’   s           r.   r“   z&TransformerDecoderSpecBuilder.__call__C  sp  € Ûä×*Ñ*Ó,ˆÙÜ�u—}‘} g×&6Ñ&6×&KÑ&KÓLØ8ô	
ð 	�‰Ôà�m‰m×"Ñ" 1Ñ%×4Ñ4×:Ñ:ˆØ�m‰m×"Ñ" 1Ñ%×)Ñ)×/Ñ/ˆØŸ)™)×.Ñ.×7Ñ7ˆáØÔ5Ñ5â §	¡	Ô*@×*EÑ*EÓ*GÕ HðJô	
ð
 	�‰Ôä×;Ñ;×GÑGÜ�—‘×$Ñ$Ó%Ø�M‰MØ—]‘]×-Ñ-°TÐ9Ü-¨oÑ>ð	 Hó 
ˆð 	× Ñ ¤¨U×-DÑ-D×-TÑ-TÓ!UÔVØ×$Ñ$Ø�L‰LØ�M‰MØ×#Ñ#ô	
ð ˆr/   N)r<   r=   r>   r“   rC   r/   r.   r8   r8   B  s   „ ó#r/   r8   c                 óh   — dd l }t        | |j                  j                  «      r| j                  S | gS r5   )r   r   rM   ÚMultiInputter)rP   r   s     r.   rp   rp   i  s9   € Ûô �h × 1Ñ 1× ?Ñ ?Ô@ð 	×Ñðð ˆZðr/   c                 ór  — dd l }t        | |j                  j                  «      rt	        | j
                  «      }ngt        | t        «      rt	        | «      }nKt        | t        «      r0|j                  j                  j                  | «      j
                  }nt        d«      ‚||vr|j                  |«       |S )Nr   zInvalid vocabulary type)
r   r   r   ÚVocabÚlistÚwordsr   Ú	from_fileÚ	TypeErrorÚappend)ÚvocabÚ	unk_tokenr   Útokenss       r.   r…   r…   s  s‰   € Ûä�%˜Ÿ™×+Ñ+Ô,Ü�e—k‘kÓ"‰Ü	�Eœ4Ô	 Ü�e“‰Ü	�Eœ3Ô	Ø—‘×#Ñ#×-Ñ-¨eÓ4×:Ñ:‰äÐ1Ó2Ð2à˜ÑØ�‰�iÔ Ø€Mr/   c                  óz  — t        j                  t         j                  ¬«      } | j                  dd¬«       | j                  ddd¬«       | j                  d	d
¬«       | j                  dd¬«       | j                  dd¬«       | j                  dd¬«       t	        j
                  | «       | j                  «       }|j                  }|s©|j                  r|j                  r|j                  st        d«      ‚t        j                  j                  |j                  «      r|j                  n(t        j                  j                  |j                  «      }||j                  |j                  dœdœ}t         j#                  ||j$                  |j                  |j&                  ¬«      }|j)                  |«       y )N)Úformatter_classz--configzPath to the YAML configuration.)Úhelpz--auto_configÚ
store_truez-Use the model automatic configuration values.)Úactionrà   z--model_pathz}Path to the checkpoint or checkpoint directory to load. If not set, the latest checkpoint from the model directory is loaded.z--model_typez²If the model instance cannot be resolved from the model directory, this argument can be set to either the name of the model in the catalog or the path to the model configuration.z--src_vocabzDPath to the source vocabulary (required if no configuration is set).z--tgt_vocabzDPath to the target vocabulary (required if no configuration is set).z[Options --model_path, --src_vocab, --tgt_vocab are required when a configuration is not set)Úsource_vocabularyÚtarget_vocabulary)r   r   )r   r   r   )ÚargparseÚArgumentParserÚArgumentDefaultsHelpFormatterÚadd_argumentr   Údeclare_argumentsÚ
parse_argsr   Ú
model_pathÚ	src_vocabÚ	tgt_vocabÚ
ValueErrorr   r   ÚisdirÚdirnamer   r&   r   Ú
model_typeÚconvert_from_args)ÚparserÚargsr   r   Ú	converters        r.   Úmainrö   „  s¥  € Ü×$Ñ$Ü ×>Ñ>ô€Fð ×Ñ˜
Ð)JÐÔKØ
×ÑØØØ<ð ô ð
 ×ÑØðHð ô ð ×ÑØð6ð ô ð ×ÑØØSð ô ð ×ÑØØSð ô ô ×Ñ Ô'Ø×ÑÓ€Dà�[‰[€FÙØ�Š d§n¢n¸D¿NºNÜð2óð ô �w‰w�}‰}˜TŸ_™_Ô-ð �OŠOä—‘—‘ §¡Ó1ð 	ð #à%)§^¡^Ø%)§^¡^ññ
ˆô #×.Ñ.ØØ×$Ñ$ØŸ™Ø�o‰oð	 /ó €Ið ×Ñ Õ%r/   Ú__main__)z<unk>)rå   r   r   Útypingr   r   Úctranslate2.convertersr   Ú ctranslate2.converters.converterr   Úctranslate2.specsr   r   Ú
ActivationÚGELUTanhÚRELUÚSWISHrh   r   r9   r8   rp   r…   rö   r<   rC   r/   r.   ú<module>r      sŸ   ðÛ Û Û 	ç "å (Ý 6ß ;ð ×"Ñ"×+Ñ+Ø×"Ñ"×'Ñ'Ø×#Ñ#×)Ñ)ñÐ ôF)˜ô F)÷Rd:ñ d:ôN$Ð$:ô $òNóò"?&ðD ˆzÒÙ…Fð r/   