Ë
    èÍ:j‰a  ã                   óà  — d Z ddlZddlZddlZddlZddlZddlZddlmZm	Z	m
Z
 ddlZ	 ddlZdZdZdZdZd	Zd
„ Zd„ Zd„ Zd+d„Zd„ Z G d„ de«      Z G d„ d«      Z G d„ dee¬«      Zd„ Z G d„ dee¬«      Z G d„ de«      Zd„ Z  G d„ de«      Z! G d„ de«      Z" G d „ d!e«      Z# G d"„ d#e«      Z$d$„ Z% G d%„ d&ejL                  «      Z' G d'„ d(e'«      Z( G d)„ d*e'«      Z)y# e$ r dZY Œ¼w xY w),zÏSpecifications declare the expected variables layout of CTranslate2 models
that do not load a computation graph. The model converter should make sure that
each required variable of the specification is set.
é    N)ÚDictÚListÚOptionalTFÚ
__optionalé   )Úint8Úint8_float32Úint8_float16Úint8_bfloat16Úint16Úfloat16Úbfloat16Úfloat32)Úrotary_scaling_long_factorÚrotary_scaling_short_factorc                 ó   — | s|S | ›d|›�S ©Nú/© )ÚscopeÚnames     úq/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/ctranslate2/specs/model_spec.pyÚ_join_scoper   )   s   € ÙØˆÚ™TÐ"Ð"ó    c                 ó$   — | j                  d«      S r   )Úsplit©r   s    r   Ú_split_scoper   /   s   € Ø�;‰;�sÓÐr   c                 óR   — t        | «      }|d d |d   }} dj                  | «      |fS )Néÿÿÿÿr   )r   Újoin)r   ÚkeysÚattrs      r   Ú_parent_scoper$   3   s2   € Ü˜Ó€DØ�s˜�)˜T "™Xˆ4€EØ�8‰8�E‹?˜DÐ Ð r   c                 óz  — t        | j                  j                  «       «      D ]•  \  }}|j                  d«      rŒt	        |t         «      r1t        |«      D ]"  \  }}t        ||t        |d||fz  «      ¬«       Œ$ ŒYt	        |t        «      rt        ||t        ||«      ¬«       Œ‚ || t        ||«      |«       Œ— y)z Recursively visits a layer spec.Ú_ú%s_%dr   N)	ÚlistÚ__dict__ÚitemsÚ
startswithÚ
isinstanceÚ	enumerateÚ
visit_specr   Ú	LayerSpec)ÚspecÚfnr   r   ÚvalueÚiÚelems          r   r.   r.   9   s¦   € ä˜DŸM™M×/Ñ/Ó1Ó2ò 	6‰ˆˆeØ�?‰?˜3ÔØÜ�eœTÔ"Ü$ UÓ+ò T‘��4Ü˜4 ¬;°u¸gÈÈqÈ	Ñ>QÓ+RÖSñTä˜œyÔ)Ü�u˜b¬°E¸4Ó(@ÖAáˆt”[ ¨Ó-¨uÕ5ñ	6r   c                 óÄ   — |s| S t        |«      }|D ]  }	 t        | |«      } Œ | S # t        $ r0 |j                  dd«      \  }}t        | |«      t	        |«         } Y ŒLw xY w)Nr&   é   )r   ÚgetattrÚAttributeErrorÚrsplitÚint)r0   Úindexr"   Úkeyr#   s        r   Ú
index_specr=   G   su   € ÙØˆÜ˜Ó€DØò 3ˆð	3Ü˜4 Ó%‰Dð3ð €Køô ò 	3ØŸ*™* S¨!Ó,‰KˆD�%Ü˜4 Ó&¤s¨5£zÑ2ŠDð	3ús   –&¦6AÁAc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú
FrozenMetac                 ó4   •— t        ‰| �  |i |¤Ž}d|_        |S )NT)ÚsuperÚ__call__Ú_frozen)ÚselfÚargsÚkwargsÚinstanceÚ	__class__s       €r   rB   zFrozenMeta.__call__U   s$   ø€ Ü‘7Ñ# TÐ4¨VÑ4ˆØˆÔØˆr   )Ú__name__Ú
__module__Ú__qualname__rB   Ú__classcell__©rH   s   @r   r?   r?   T   s   ø„ ÷ð r   r?   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú
FrozenAttrc                 ór   •— t        | d«      rt        | |«      st        d|z  «      ‚t        ‰| �  ||«       y )NrC   zAttribute %s does not exist)Úhasattrr8   rA   Ú__setattr__)rD   r<   r2   rH   s      €r   rR   zFrozenAttr.__setattr__\   s6   ø€ Ü�4˜Ô#¬G°D¸#Ô,>Ü Ð!>ÀÑ!DÓEÐEÜ‰Ñ˜C Õ'r   )rI   rJ   rK   rR   rL   rM   s   @r   rO   rO   [   s   ø„ ÷(ð (r   rO   c            	       óz   — e Zd ZdZdd„Z	 	 ddededeeej                  f   fd„Z
d„ Zd	„ Zdd
ee   ddfd„Zd„ Zy)r/   zPA layer specification declares the weights that should be set by the converters.ÚreturnNc                 ót   ‡— g Šˆfd„}| j                  |«       ‰rt        ddj                  ‰«      z  «      ‚y)z�Verify that the required weights are set.

        Raises:
          ValueError: If a required weight is not set in the specification.
        c                 óV  •— |€‰j                  |«       y t        |t        j                  «      r=|j                  t        j
                  k(  r×|j                  t        j                  «      }n·t        |t        «      r%t        j                  d«      j                  |«      }n‚t        |t        «      r%t        j                  d«      j                  |«      }nMt        |t        «      r=|t        k7  r4t        j                  |j                  d«      t        j                  ¬«      }t        |t        j                  «      st        |t        j                   «      rt#        |«      }n+t$        r%t        |t&        j(                  «      rt+        |«      }t-        |«      d   }t/        | ||«       y )Nr   r   úutf-8)Údtyper    )Úappendr,   ÚnpÚndarrayrX   Úfloat64Úastyper   ÚfloatÚtypeÚboolÚstrÚOPTIONALÚ
frombufferÚencoder   ÚgenericÚNumpyVariableÚtorch_is_availableÚtorchÚTensorÚPyTorchVariabler   Úsetattr)r0   r   r2   Ú	attr_nameÚunset_attributess       €r   Ú_checkz"LayerSpec.validate.<locals>._checkm   s  ø€ Øˆ}Ø ×'Ñ'¨Ô-Øä˜%¤§¡Ô,à—;‘;¤"§*¡*Ò,Ø!ŸL™L¬¯©Ó4‘EÜ˜E¤5Ô)ÜŸ™ Ó+×0Ñ0°Ó7‘Ü˜E¤4Ô(äŸ™ Ó(×-Ñ-¨eÓ4‘Ü˜E¤3Ô'ØœHÒ$ÜŸM™M¨%¯,©,°wÓ*?ÄrÇwÁwÔO�Eä˜%¤§¡Ô,´
¸5Ä"Ç*Á*Ô0MÜ% eÓ,‘Ý#¬
°5¼%¿,¹,Ô(GÜ'¨Ó.�ä$ TÓ*¨2Ñ.ˆIÜ�D˜) UÕ+r   z/Some required model attributes are not set:

%sú
N)Ú_visitÚ
ValueErrorr!   )rD   rn   rm   s     @r   ÚvalidatezLayerSpec.validatee   sH   ø€ ð Ðô	,ð4 	�‰�FÔáÜØCØ—)‘)Ð,Ó-ñ.óð ð r   ÚprefixÚorderedc                 óŠ   ‡‡— i Šˆˆfd„}| j                  |«       |r%t        t        ‰j                  «       d„ ¬«      «      S ‰S )a!  Recursively returns the weights from this layer and its children.

        Arguments:
          prefix: Prefix to prepend to all variable names.
          ordered: If set, an ordered list is returned instead.

        Returns:
          Dictionary mapping variables name to value.
        c                 óX   •— t        |t        «      r
|t        k(  ry |‰t        ‰|«      <   y ©N)r,   ra   rb   r   )r0   r   r2   rs   Úvars      €€r   Ú_register_varz*LayerSpec.variables.<locals>._register_varŸ   s(   ø€ Ü˜%¤Ô%¨%´8Ò*;ØØ-2ˆC”˜F DÓ)Ò*r   c                 ó   — | d   S ©Nr   r   )Úxs    r   ú<lambda>z%LayerSpec.variables.<locals>.<lambda>¦   s
   € ¸!¸A¹$€ r   )r<   )rp   r(   Úsortedr*   )rD   rs   rt   ry   rx   s    `  @r   Ú	variableszLayerSpec.variables�   s=   ù€ ð ˆõ	3ð
 	�‰�MÔ"ÙÜœ˜sŸy™y›{±Ô?Ó@Ð@Øˆ
r   c                 ó  — | j                  d¬«      }t        |«      D ]j  \  }}|D ]`  \  }}||k(  r Œt        |«      \  }}|j                  «       rŒ,|j	                  |«      sŒ>|t
        vsŒGt        | |«      }t        |||«        Œj Œl y)z4Find duplicate variables in spec and create aliases.T©rt   N)r   Úreversedr$   Ú	is_scalarÚequalÚSKIP_CREATING_ALIASr=   rk   )	rD   r   r   r2   Ú
other_nameÚother_valuer   rl   r0   s	            r   Ú_alias_variableszLayerSpec._alias_variables©   s˜   € ð —N‘N¨4�NÓ0ˆ	Ü# IÓ.ò 	‰KˆD�%Ø+4ò Ñ'�
˜KØ˜:Ò%Ùô $1°Ó#6Ñ ��yàŸ™Õ)ØŸ™ KÕ0Ø!Ô)<Ò<ô & d¨EÓ2�DÜ˜D )¨ZÔ8Ùññ	r   c                 óŒ   ‡— ‰�+‰t         vr#t        ‰›ddj                  t         «      ›�«      ‚ˆfd„}| j                  |«       y)z-Possibly quantizes the variable of the layer.Nz7 is not a valid quantization type. Accepted types are: ú, c                 ó
  •— t        |t        «      r|j                  «       ry t        |«      d   }d }t	        | d|z  «      }|j
                  dv }|�rN‰	dk(  �r|j                  d«      j                  «       }t        j                  dt        j                  t        j                  |«      «      z  «      }||z  }t        j                  |«      }t        j                  |t        j                  t        j                  «      j                   t        j                  t        j                  «      j"                  «      }|j%                  t        j                  «      }t'        |«      }t'        |«      }�np‰	dv �r|j                  d«      j                  «       }d }t)        |j*                  «      dk(  r+|j*                  }|j-                  |j*                  d	   d«      }t        j                  t        j                  |«      d
¬«      }d||d	k(  <   d|z  }|t        j.                  |d
«      z  }t        j                  |«      }|j%                  t        j0                  «      }|r|j-                  |«      }t'        |«      }t'        |«      }nY‰	dv rU|j                  ‰	«      }nC|rA‰	dv r|j                  d«      }n+‰	dv r|j                  d«      }n‰	dv r|j                  d«      }t3        | ||«       |�t3        | d|z  |«       y y )Nr    z%s_scale)r   r   r   r   r   i   )r   r	   r
   r   é   r   r6   )Úaxisg     À_@)r   r   r   )r   r
   r   )r   r   r   )r   r   r	   )r,   ÚVariablerƒ   r   rQ   rX   ÚtoÚnumpyrZ   r   ÚamaxÚabsoluteÚrintÚclipÚiinfor   ÚminÚmaxr]   rf   ÚlenÚshapeÚreshapeÚexpand_dimsr   rk   )
r0   r   r2   r<   ÚscaleÚis_quantizableÚis_convertibleÚ	old_shaper‘   Úquantizations
            €r   Ú	_quantizez&LayerSpec._quantize.<locals>._quantizeÇ   s{  ø€ Ü˜e¤XÔ.°%·/±/Ô2CØä˜tÓ$ RÑ(ˆCØˆEÜ$ T¨:¸Ñ+;Ó<ˆNØ"Ÿ[™[Ð,NÐNˆNâØ 7Ó*Ø!ŸH™H YÓ/×5Ñ5Ó7�Eô ŸJ™J u¬r¯w©w´r·{±{À5Ó7IÓ/JÑ'JÓK�EØ˜U‘N�EÜŸG™G E›N�EÜŸG™GØœrŸx™x¬¯©Ó1×5Ñ5´r·x±xÄÇÁÓ7I×7MÑ7Mó�Eð "ŸL™L¬¯©Ó2�EÜ)¨%Ó0�EÜ)¨%Ó0’EØ!ð &ò ð "ŸH™H YÓ/×5Ñ5Ó7�Eà $�IÜ˜5Ÿ;™;Ó'¨1Ò,Ø$)§K¡K˜	Ø %§¡¨e¯k©k¸!©n¸bÓ A˜ÜŸ7™7¤2§;¡;¨uÓ#5¸AÔ>�DØ&+�D˜ ™‘OØ! D™L�EØœRŸ^™^¨E°1Ó5Ñ5�EÜŸG™G E›N�EØ!ŸL™L¬¯©Ó1�Eá Ø %§¡¨iÓ 8˜Ü)¨%Ó0�EÜ)¨%Ó0‘EØ!Ð%GÑGØ!ŸH™H \Ó2‘EáØÐ#>Ñ>Ø!ŸH™H YÓ/‘EØ!Ð%BÑBØ!ŸH™H ZÓ0‘EØ!Ð%IÑIØ!ŸH™H YÓ/�Eä�D˜#˜uÔ%ØÐ Ü˜˜j¨3Ñ.°Õ6ð !r   )ÚACCEPTED_MODEL_TYPESrq   r!   rp   )rD   r    r¡   s    ` r   r¡   zLayerSpec._quantize¿   sG   ø€ àÐ#¨Ô<PÑ(PÜâ §¡Ô+?Ô!@ðBóð ô
;	7ðz 	�‰�IÕr   r    c                 óF   — | j                  «        | j                  |«       y)aR  Recursively applies some optimizations to this layer:

        * Alias variables with the same shape and value.
        * Quantize weights.

        Arguments:
          quantization: Weight quantization scheme (possible values are: int8, int8_float32,
            int8_float16, int8_bfloat16, int16, float16, bfloat16, float32).
        N)rˆ   r¡   )rD   r    s     r   ÚoptimizezLayerSpec.optimize  s   € ð 	×ÑÔØ�‰�|Õ$r   c                 ó   — t        | |«       y)z/Recursively visits this layer and its children.N)r.   )rD   r1   s     r   rp   zLayerSpec._visit  s   € ä�4˜Õr   ©rT   N)Ú Frw   )rI   rJ   rK   Ú__doc__rr   ra   r`   r   rZ   r[   r   rˆ   r¡   r   r¤   rp   r   r   r   r/   r/   b   si   „ ÙZó(ðX Øñàðð ðð 
ˆc�2—:‘:ˆoÑ	ó	ò4ò,EñN% X¨c¡]ð %¸dó %ór   r/   )Ú	metaclassc                 ó‚   — d}	 |j                  | «      S # t        $ r  t        | ›ddj                  |«      ›�«      ‚w xY w)N)r   r   r   Úint32r   r   z% is not in list of supported dtypes: rŠ   )r;   rq   r!   )Úobject_dtypeÚdtypess     r   Ú_dtype_to_type_idr®     sJ   € àI€Fð
Ø�|‰|˜LÓ)Ð)øÜò 
Üâ˜TŸY™Y vÔ.ð0ó
ð 	
ð
ús   „ •)>c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚModelConfigz$Base class for model configurations.c                 óN   — |j                  «       D ]  \  }}t        | ||«       Œ y)z7Initializes the configuration with a set of parameters.N)r*   rk   )rD   rF   r<   r2   s       r   Ú__init__zModelConfig.__init__'  s'   € à Ÿ,™,›.ò 	&‰JˆC�Ü�D˜#˜uÕ%ñ	&r   c                 óŒ   — | j                   j                  «       D ��ci c]  \  }}|j                  d«      s||“Œ c}}S c c}}w )z*Returns the configuration as a dictionary.r&   )r)   r*   r+   ©rD   r<   r2   s      r   Úto_dictzModelConfig.to_dict,  sE   € ð #Ÿm™m×1Ñ1Ó3÷
á��UØ—>‘> #Ô&ð �‰Jó
ð 	
ùó 
s   žA c                 ó"   — || j                   |<   y rw   )r)   r´   s      r   Úadd_attributezModelConfig.add_attribute4  s   € Ø"ˆ�‰�cÒr   c                 óº   — t        |dd¬«      5 }t        j                  | j                  «       |dd¬«       |j	                  d«       ddd«       y# 1 sw Y   yxY w)	z'Saves the configuration as a JSON file.ÚwrW   ©Úencodingé   T)ÚindentÚ	sort_keysro   N)ÚopenÚjsonÚdumprµ   Úwrite)rD   ÚpathÚconfig_files      r   Úsave_as_jsonzModelConfig.save_as_json7  sS   € ä�$˜ gÔ.ð 	$°+Ü�I‰IØ—‘“ØØØõ	ð ×Ñ˜dÔ#÷	$÷ 	$ñ 	$ús   �9AÁAN)rI   rJ   rK   r¨   r²   rµ   r·   rÅ   r   r   r   r°   r°   $  s   „ Ù.ò&ò

ò#ó	$r   r°   c                   ó~   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Zd„ Z	dde
d	ee
   d
dfd„Zde
d
dfd„Zd„ Zy)Ú	ModelSpecz"The top level layer specification.c                 ó<   — | j                  «       | _        i | _        y)z$Initializes the model specification.N)Úget_default_configÚ_configÚ_files©rD   s    r   r²   zModelSpec.__init__F  s   € à×.Ñ.Ó0ˆŒØˆ�r   c                 ó   — t        «       ‚)z$The name of the model specification.©ÚNotImplementedErrorrÌ   s    r   r   zModelSpec.nameK  ó   € ô "Ó#Ð#r   c                  ó   — y)z¦The model specification revision.

        This value is incremented each time the weights layout of the model is
        changed (e.g. a weight is renamed).
        r6   r   rÌ   s    r   ÚrevisionzModelSpec.revisionP  s   € ð r   c                 ó   — | j                   S )zThe model configuration.)rÊ   rÌ   s    r   ÚconfigzModelSpec.configY  s   € ð �|‰|Ðr   c                  ó   — y)z5Returns the default configuration used by this model.Nr   rÌ   s    r   rÉ   zModelSpec.get_default_config^  s   € àr   NrÃ   ÚfilenamerT   c                 óö   — t         j                  j                  |«      st        d|z  «      ‚|€t         j                  j	                  |«      }|| j
                  v rt        d|z  «      ‚|| j
                  |<   y)z4Registers a file to be saved in the model directory.zFile %s does not existNz*A file with name %s was already registered)ÚosrÃ   Úisfilerq   ÚbasenamerË   )rD   rÃ   rÖ   s      r   Úregister_filezModelSpec.register_fileb  sh   € ä�w‰w�~‰~˜dÔ#ÜÐ5¸Ñ<Ó=Ð=ØÐÜ—w‘w×'Ñ'¨Ó-ˆHØ�t—{‘{Ñ"ÜÐIÈHÑTÓUÐUØ $ˆ�‰�HÒr   Ú
output_dirc                 óö  — | j                  t        j                  j                  |d«      «       | j                  �9| j                  j                  t        j                  j                  |d«      «       | j                  j                  «       D ]h  \  }}t        j                  j                  ||«      }t        j                  j                  |«      rt        d|z  «      ‚t        j                  ||«       Œj y)zwSaves this model on disk.

        Arguments:
          output_dir: Output directory where the model is saved.
        z	model.binNzconfig.jsonz-File %s already exists in the model directory)Ú
_serializerØ   rÃ   r!   rÊ   rÅ   rË   r*   ÚexistsÚRuntimeErrorÚshutilÚcopy)rD   rÜ   rÖ   rÃ   Údestinations        r   ÚsavezModelSpec.savel  s³   € ð 	�‰œŸ™Ÿ™ Z°Ó=Ô>Ø�<‰<Ð#Ø�L‰L×%Ñ%¤b§g¡g§l¡l°:¸}Ó&MÔNà"Ÿk™k×/Ñ/Ó1ò 	+‰NˆH�dÜŸ'™'Ÿ,™, z°8Ó<ˆKÜ�w‰w�~‰~˜kÔ*Ü"ØCÀkÑQóð ô �K‰K˜˜kÕ*ñ	+r   c           
      óÎ  ‡— g }g }| j                  d¬«      D ]8  }t        |d   t        «      r|j                  |«       Œ(|j                  |«       Œ: t	        |d«      5 Šˆfd„}‰j                  t        j                  dt        «      «        || j                  «       ‰j                  t        j                  d| j                  «      «       ‰j                  t        j                  dt        |«      «      «       |D �]  \  }} ||«       ‰j                  t        j                  dt        |j                  «      «      «       |j                  D ]'  }‰j                  t        j                  d|«      «       Œ) ‰j                  t        j                  dt        |j                  «      «      «       ‰j                  t        j                  d|j                  «       «      «       ‰j                  |j!                  «       «       �Œ	 ‰j                  t        j                  dt        |«      «      «       |D ]  \  }	}
 ||	«        ||
«       Œ 	 ddd«       y# 1 sw Y   yxY w)	zSerializes the model variables.Tr�   r6   Úwbc                 óò   •— ‰j                  t        j                  dt        | «      dz   «      «       ‰j                  | j	                  d«      «       ‰j                  t        j                  dd«      «       y )NÚHr6   rW   ÚBr   )rÂ   ÚstructÚpackr˜   rd   )ÚstringÚmodels    €r   Ú_write_stringz+ModelSpec._serialize.<locals>._write_stringŠ  sN   ø€ Ø—‘œFŸK™K¨¬S°«[¸1©_Ó=Ô>Ø—‘˜FŸM™M¨'Ó2Ô3Ø—‘œFŸK™K¨¨QÓ/Õ0r   ÚIré   N)r   r,   ra   rY   r¿   rÂ   rê   rë   ÚCURRENT_BINARY_VERSIONr   rÒ   r˜   r™   r®   rX   Ú	num_bytesÚto_bytes)rD   rÃ   r   ÚaliasesÚvariablerî   r   r2   ÚdimÚaliasÚvariable_namerí   s              @r   rÞ   zModelSpec._serialize~  sË  ø€ àˆ	ØˆØŸ™¨t˜Ó4ò 	+ˆHÜ˜( 1™+¤sÔ+Ø—‘˜xÕ(à× Ñ  Õ*ð		+ô �$˜Óð 	- ô1ð
 �K‰KœŸ™ CÔ)?Ó@ÔAÙ˜$Ÿ)™)Ô$Ø�K‰KœŸ™ C¨¯©Ó7Ô8Ø�K‰KœŸ™ C¬¨Y«Ó8Ô9Ø(ó .‘��eÙ˜dÔ#Ø—‘œFŸK™K¨¬S°·±Ó-=Ó>Ô?Ø Ÿ;™;ò 7�CØ—K‘K¤§¡¨C°Ó 5Õ6ð7à—‘œFŸK™K¨Ô->¸u¿{¹{Ó-KÓLÔMØ—‘œFŸK™K¨¨U¯_©_Ó->Ó?Ô@Ø—‘˜EŸN™NÓ,Ö-ð.ð �K‰KœŸ™ C¬¨W«Ó6Ô7Ø(/ò -Ñ$��}Ù˜eÔ$Ù˜mÕ,ñ-÷)	-÷ 	-ñ 	-ús   ÁG2IÉI$rw   )rI   rJ   rK   r¨   r²   Úpropertyr   rÒ   rÔ   rÉ   ra   r   rÛ   rä   rÞ   r   r   r   rÇ   rÇ   C  s�   „ Ù,òð
 ñ$ó ð$ð ñó ðð ñó ðòñ% #ð %°¸#±ð %È$ó %ð+˜sð + tó +ó$ -r   rÇ   c              #   ó®   K  — | j                  «       D ]>  \  }}t        |«      dk(  r
||d   f–— Œt        |«      D ]  \  }}d||dz   fz  |f–— Œ Œ@ y ­w)Nr6   r   r'   )r*   r˜   r-   )Úvocabulariesr   Ú
vocabularyr3   Úvocabs        r   Ú_flatten_vocabulariesrý   ¡  sn   è ø€ Ø(×.Ñ.Ó0ò 5ÑˆˆjÜˆz‹?˜aÒØ˜
 1™Ð%Ó%ä% jÓ1ò 5‘��5Ø  q¨1¡u Ñ-¨uÐ4Ó4ñ5ñ	5ùs   ‚AAc                   óP   ‡ — e Zd ZdZ	 	 	 	 	 	 d	dedededee   dedefˆ fd„Zˆ xZS )
ÚSequenceToSequenceModelConfigz.Configuration for sequence-to-sequence models.Ú	unk_tokenÚ	bos_tokenÚ	eos_tokenÚdecoder_start_tokenÚadd_source_bosÚadd_source_eosc           
      ó2   •— t        ‰| �  d||||||dœ|¤Ž y)a€  Initializes the configuration for sequence-to-sequence models.

        Args:
          unk_token: The unknown token.
          bos_token: The start of sentence token.
          eos_token: The end of sentence token.
          decoder_start_token: The decoder start token. If ``None``, the token should
            be passed by the user in the target prefix.
          add_source_bos: If ``True``, ``bos_token`` will be automatically added to
            the source input.
          add_source_eos: If ``True``, ``eos_token`` will be automatically added to
            the source input.
          **kwargs: Additional configuration.
        )r   r  r  r  r  r  Nr   ©rA   r²   )	rD   r   r  r  r  r  r  rF   rH   s	           €r   r²   z&SequenceToSequenceModelConfig.__init__­  s3   ø€ ô0 	‰Ñð 	
ØØØØ 3Ø)Ø)ñ	
ð ó	
r   )ú<unk>ú<s>ú</s>r	  FF)	rI   rJ   rK   r¨   ra   r   r`   r²   rL   rM   s   @r   rÿ   rÿ   ª  sb   ø„ Ù8ð !ØØØ-2Ø$Ø$ñ 
àð 
ð ð 
ð ð	 
ð
 & c™]ð 
ð ð 
ð ÷ 
ñ  
r   rÿ   c                   óÌ   ‡ — e Zd ZdZˆ fd„Zd„ Zej                  d„ «       Zej                  d„ «       Z	de
e   ddfd	„Zde
e   ddfd
„Zdeddfd„Zdˆ fd„Zdeddfˆ fd„Zˆ xZS )ÚSequenceToSequenceModelSpecz3Base specification for sequence to sequence models.c                 ó6   •— t         ‰| �  «        g g dœ| _        y)z7Initializes a sequence to sequence model specification.©ÚsourceÚtargetN)rA   r²   Ú_vocabularies©rD   rH   s    €r   r²   z$SequenceToSequenceModelSpec.__init__Ó  s   ø€ ä‰ÑÔàØñ
ˆÕr   c                 ó   — t        «       S rw   )rÿ   rÌ   s    r   rÉ   z.SequenceToSequenceModelSpec.get_default_configÛ  s   € Ü,Ó.Ð.r   c                 ó   — t        «       ‚)z9Returns the source vocabulary size expected by the model.rÎ   rÌ   s    r   Úget_source_vocabulary_sizez6SequenceToSequenceModelSpec.get_source_vocabulary_sizeÞ  rÐ   r   c                 ó   — t        «       ‚)z9Returns the target vocabulary size expected by the model.rÎ   rÌ   s    r   Úget_target_vocabulary_sizez6SequenceToSequenceModelSpec.get_target_vocabulary_sizeã  rÐ   r   ÚtokensrT   Nc                 ó@   — | j                   d   j                  |«       y)znRegisters a source vocabulary of tokens.

        Arguments:
          tokens: List of source tokens.
        r  N©r  rY   ©rD   r  s     r   Úregister_source_vocabularyz6SequenceToSequenceModelSpec.register_source_vocabularyè  ó   € ð 	×Ñ˜8Ñ$×+Ñ+¨FÕ3r   c                 ó@   — | j                   d   j                  |«       y)znRegisters a target vocabulary of tokens.

        Arguments:
          tokens: List of target tokens.
        r  Nr  r  s     r   Úregister_target_vocabularyz6SequenceToSequenceModelSpec.register_target_vocabularyð  r  r   rÃ   c                 ó(   — | j                  |d«       y)zvRegisters a vocabulary mapping file.

        Arguments:
          path: Path to the vocabulary mapping file.
        zvmap.txtN)rÛ   )rD   rÃ   s     r   Úregister_vocabulary_mappingz7SequenceToSequenceModelSpec.register_vocabulary_mappingø  s   € ð 	×Ñ˜4 Õ,r   c           
      óú  •— t         ‰| �  «        | j                  «       | j                  «       dœ}|j	                  «       D ]¸  \  }}t        |t        «      s|g}| j                  |   }t        |«      t        |«      k7  r#t        d|t        |«      t        |«      fz  «      ‚t        t        ||«      «      D ]?  \  }\  }}t        |«      |k7  sŒt        d|j                  «       |t        |«      |fz  «      ‚ Œº y )Nr  zCIncorrect number of %s vocabularies: %d registered, but expected %dzK%s vocabulary %d has size %d but the model expected a vocabulary of size %d)rA   rr   r  r  r*   r,   r(   r  r˜   rq   r-   ÚzipÚ
capitalize)	rD   Úvocabulary_sizesr   Úsizesrú   r3   rû   Úexpected_sizerH   s	           €r   rr   z$SequenceToSequenceModelSpec.validate   s
  ø€ Ü‰ÑÔð ×5Ñ5Ó7Ø×5Ñ5Ó7ñ
Ðð
 ,×1Ñ1Ó3ò 	‰KˆD�%Ü˜e¤TÔ*Ø˜�Ø×-Ñ-¨dÑ3ˆLÜ�<Ó ¤C¨£JÒ.Ü ØYØœS Ó.´°E³
Ð;ñ<óð ô 3<¼CÀÈeÓ<TÓ2Uò Ñ.�Ñ.�J Ü�z“? mÓ3Ü$ð%àŸ?™?Ó,¨a´°Z³À-ÐPñQóð ññ	r   rÜ   c                 ó  •‡— t        t        | j                  «      «      }t        |j	                  «       «      Št        ˆfd„‰D «       «      rd‰d   i}|j                  «       D ]  \  }}t        |d|z  |«       Œ t        ‰| �%  |«       y )Nc              3   ó.   •K  — | ]  }|‰d    k(  –— Œ y­w)r   Nr   )Ú.0rû   Úall_vocabulariess     €r   ú	<genexpr>z3SequenceToSequenceModelSpec.save.<locals>.<genexpr>  s   øè ø€ ÒT°ZˆzÐ-¨aÑ0Õ0ÑTùs   ƒÚsharedr   z%s_vocabulary)
Údictrý   r  r(   ÚvaluesÚallr*   Ú_save_vocabularyrA   rä   )rD   rÜ   rú   r   r  r+  rH   s        @€r   rä   z SequenceToSequenceModelSpec.save  s‰   ù€ äÔ1°$×2DÑ2DÓEÓFˆÜ × 3Ñ 3Ó 5Ó6ÐÜÓTÐCSÔTÔTØ$Ð&6°qÑ&9Ð:ˆLà(×.Ñ.Ó0ò 	I‰LˆD�&Ü˜Z¨¸4Ñ)?ÀÕHð	Iô 	‰‰�ZÕ r   r¦   )rI   rJ   rK   r¨   r²   rÉ   ÚabcÚabstractmethodr  r  r   ra   r  r  r!  rr   rä   rL   rM   s   @r   r  r  Ð  s¢   ø„ Ù=ô
ò/ð 	×Ññ$ó ð$ð 	×Ññ$ó ð$ð4°°c±ð 4¸tó 4ð4°°c±ð 4¸tó 4ð-°ð -¸ó -õð4!˜sð ! t÷ !ñ !r   r  c                   ó8   ‡ — e Zd ZdZ	 	 	 ddededefˆ fd„Zˆ xZS )ÚLanguageModelConfigz"Configuration for language models.r   r  r  c                 ó,   •— t        ‰| �  d|||dœ|¤Ž y)a  Initializes the configuration for language models.

        Args:
          unk_token: The unknown token.
          bos_token: The start of sentence token.
          eos_token: The end of sentence token.
          **kwargs: Additional configuration.
        )r   r  r  Nr   r  )rD   r   r  r  rF   rH   s        €r   r²   zLanguageModelConfig.__init__+  s*   ø€ ô 	‰Ñð 	
ØØØñ	
ð ó		
r   )r  r	  r
  )rI   rJ   rK   r¨   ra   r²   rL   rM   s   @r   r5  r5  (  s7   ø„ Ù,ð !ØØñ	
àð
ð ð
ð ÷	
ñ 
r   r5  c                   ó‚   ‡ — e Zd ZdZˆ fd„Zd„ Zej                  d„ «       Zde	e
   ddfd„Zdˆ fd	„Zd
e
ddfˆ fd„Zˆ xZS )ÚLanguageModelSpecz'Base specification for language models.c                 ó0   •— t         ‰| �  «        g | _        y)z+Initializes a language model specification.N)rA   r²   Ú_vocabularyr  s    €r   r²   zLanguageModelSpec.__init__E  s   ø€ ä‰ÑÔØˆÕr   c                 ó   — t        «       S rw   )r5  rÌ   s    r   rÉ   z$LanguageModelSpec.get_default_configJ  s   € Ü"Ó$Ð$r   c                 ó   — t        «       ‚)z2Returns the vocabulary size expected by the model.rÎ   rÌ   s    r   Úget_vocabulary_sizez%LanguageModelSpec.get_vocabulary_sizeM  rÐ   r   r  rT   Nc                 ó$   — t        |«      | _        y)zbRegisters the vocabulary of tokens.

        Arguments:
          tokens: List of tokens.
        N)r(   r:  r  s     r   Úregister_vocabularyz%LanguageModelSpec.register_vocabularyR  s   € ô   ›<ˆÕr   c                 ó¸   •— t         ‰| �  «        | j                  «       }t        | j                  «      |k7  r#t        dt        | j                  «      |fz  «      ‚y )NzEVocabulary has size %d but the model expected a vocabulary of size %d)rA   rr   r=  r˜   r:  rq   )rD   Úexpected_vocabulary_sizerH   s     €r   rr   zLanguageModelSpec.validateZ  s`   ø€ Ü‰ÑÔà#'×#;Ñ#;Ó#=Ð Üˆt×ÑÓ Ð$<Ò<ÜØWÜ�t×'Ñ'Ó(Ð*BÐCñDóð ð =r   rÜ   c                 óR   •— t        |d| j                  «       t        ‰| �  |«       y )Nrû   )r1  r:  rA   rä   )rD   rÜ   rH   s     €r   rä   zLanguageModelSpec.saved  s#   ø€ ä˜ \°4×3CÑ3CÔDô 	‰‰�ZÕ r   r¦   )rI   rJ   rK   r¨   r²   rÉ   r2  r3  r=  r   ra   r?  rr   rä   rL   rM   s   @r   r8  r8  B  s^   ø„ Ù1ôò
%ð 	×Ññ$ó ð$ð(¨$¨s©)ð (¸ó (õð!˜sð ! t÷ !ñ !r   r8  c                 óÀ   — t         j                  j                  | d|z  «      }t        |dd¬«      5 }t	        j
                  ||d¬«       d d d «       y # 1 sw Y   y xY w)Nz%s.jsonr¹   rW   rº   r¼   )r½   )rØ   rÃ   r!   r¿   rÀ   rÁ   )rÜ   r   r  Úvocabulary_pathÚvocabulary_files        r   r1  r1  l  sN   € Ü—g‘g—l‘l :¨y¸4Ñ/?Ó@€Oä	ˆo˜s¨WÔ	5ð 5¸Ü�	‰	�&˜/°!Õ4÷5÷ 5ñ 5ús   ²AÁAc                   ó�  — e Zd ZdZeej                  dee   fd„«       «       Z	de
fd„Zeej                  defd„«       «       Zdedd fd„Zej                  dej                   fd„«       Zde
fd	„Zej                  defd
„«       Zej                  defd„«       Zej                  dedd fd„«       Zej                  de
fd„«       Zy)rŽ   z(Abstract base class for model variables.rT   c                 ó   — t        «       ‚rw   rÎ   rÌ   s    r   r™   zVariable.shapev  rÐ   r   c                 ó2   — t        | j                  «      dk(  S r{   )r˜   r™   rÌ   s    r   rƒ   zVariable.is_scalar{  s   € Ü�4—:‘:‹ !Ñ#Ð#r   c                 ó   — t        «       ‚rw   rÎ   rÌ   s    r   rX   zVariable.dtype~  rÐ   r   rX   c                 óF   — || j                   k(  r| S | j                  |«      S rw   )rX   Ú_to©rD   rX   s     r   r�   zVariable.toƒ  s!   € Ø�D—J‘JÒØˆKØ�x‰x˜‹Ðr   c                 ó   — t        «       ‚rw   rÎ   rÌ   s    r   r�   zVariable.numpyˆ  ó   € ä!Ó#Ð#r   c                 óT   — t        | «      t        |«      u xr | j                  |«      S rw   )r_   Ú_equal©rD   Úothers     r   r„   zVariable.equalŒ  s#   € Ü�D‹zœT %›[Ð(Ò?¨T¯[©[¸Ó-?Ð?r   c                 ó   — t        «       ‚rw   rÎ   rÌ   s    r   rñ   zVariable.num_bytes�  rN  r   c                 ó   — t        «       ‚rw   rÎ   rÌ   s    r   rò   zVariable.to_bytes“  rN  r   c                 ó   — t        «       ‚rw   rÎ   rL  s     r   rK  zVariable._to—  rN  r   c                 ó   — t        «       ‚rw   rÎ   rQ  s     r   rP  zVariable._equal›  rN  r   N)rI   rJ   rK   r¨   rø   r2  r3  r   r:   r™   r`   rƒ   ra   rX   r�   rZ   r[   r�   r„   rñ   Úbytesrò   rK  rP  r   r   r   rŽ   rŽ   s  s6  „ Ù2àØ×Ñð$�t˜C‘yò $ó ó ð$ð$˜4ó $ð Ø×Ñð$�sò $ó ó ð$ð˜ð  
ó ð
 	×Ñð$�r—z‘zò $ó ð$ð@˜dó @ð 	×Ñð$˜3ò $ó ð$ð 	×Ñð$˜%ò $ó ð$ð 	×Ñð$˜ð $ ò $ó ð$ð 	×Ñð$˜tò $ó ñ$r   rŽ   c                   óœ   — e Zd ZdZd„ Zedee   fd„«       Zede	fd„«       Z
dej                  fd„Zdefd„Zdefd„Zd	e	defd
„Zdefd„Zy)rf   z Model variable as a Numpy array.c                 ó   — || _         y rw   ©Úarray)rD   r[  s     r   r²   zNumpyVariable.__init__£  s	   € Øˆ�
r   rT   c                 ó.   — | j                   j                  S rw   )r[  r™   rÌ   s    r   r™   zNumpyVariable.shape¦  s   € à�z‰z×ÑÐr   c                 óB   — | j                   j                  j                  S rw   )r[  rX   r   rÌ   s    r   rX   zNumpyVariable.dtypeª  s   € à�z‰z×Ñ×$Ñ$Ð$r   c                 ó   — | j                   S rw   rZ  rÌ   s    r   r�   zNumpyVariable.numpy®  s   € Ø�z‰zÐr   c                 ó.   — | j                   j                  S rw   )r[  ÚnbytesrÌ   s    r   rñ   zNumpyVariable.num_bytes±  s   € Ø�z‰z× Ñ Ð r   c                 ó6   — | j                   j                  «       S rw   )r[  ÚtobytesrÌ   s    r   rò   zNumpyVariable.to_bytes´  s   € Ø�z‰z×!Ñ!Ó#Ð#r   rX   c                 óø   — |dk(  r?t         st        d«      ‚t        j                  | j                  «      j                  |«      S t        j                  |«      }| j                  j                  |«      | _        | S )Nr   z5Converting to bfloat16 requires torch to be installed)	rg   rà   rj   Ú
from_numpyr[  r�   rZ   rX   r]   rL  s     r   rK  zNumpyVariable._to·  sg   € Ø�JÒÝ%Ü"ØKóð ô #×-Ñ-¨d¯j©jÓ9×<Ñ<¸UÓCÐCä—‘˜“ˆØ—Z‘Z×&Ñ& uÓ-ˆŒ
Øˆr   c                 ó  — | j                   }|j                   }||u xsm |j                  |j                  k(  xrR |j                  |j                  k(  xr7 |j                  d   |j                  d   k(  xr t	        j
                  ||«      S r{   )r[  rX   r™   ÚflatrZ   Úarray_equal©rD   rR  ÚaÚbs       r   rP  zNumpyVariable._equalÃ  s|   € Ø�J‰JˆØ�K‰KˆØ�Aˆvò 
Ø�G‰G�q—w‘wÑò %Ø—‘˜1Ÿ7™7Ñ"ò%à—‘�q‘	˜QŸV™V A™YÑ&ò%ô —‘˜q !Ó$ð		
r   N)rI   rJ   rK   r¨   r²   rø   r   r:   r™   ra   rX   rZ   r[   r�   rñ   rW  rò   rŽ   rK  r`   rP  r   r   r   rf   rf      s‹   „ Ù*òð ð �t˜C‘yò  ó ð ð ð%�sò %ó ð%ð�r—z‘zó ð!˜3ó !ð$˜%ó $ð
˜ð 
 ó 
ð
˜tô 
r   rf   c                   ó¬   — e Zd ZdZd„ Zed„ «       Zedee	   fd„«       Z
edefd„«       Zdej                  fd„Zde	fd„Zdefd	„Zd
edefd„Zdefd„Zy)rj   z#Model variable as a PyTorch tensor.c                 óŽ   — t        |t        j                  j                  «      r|j                  }|j                  «       | _        y rw   )r,   rh   ÚnnÚ	ParameterÚdataÚ
contiguousÚtensor)rD   rq  s     r   r²   zPyTorchVariable.__init__Ñ  s/   € Ü�fœeŸh™h×0Ñ0Ô1Ø—[‘[ˆFà×'Ñ'Ó)ˆ�r   c                 ó<   — t        j                  |«      } | |«      S rw   )rh   rd  )Úclsr[  rq  s      r   rd  zPyTorchVariable.from_numpy×  s   € ä×!Ñ! %Ó(ˆÙ�6‹{Ðr   rT   c                 ó@   — t        | j                  j                  «      S rw   )r(   rq  r™   rÌ   s    r   r™   zPyTorchVariable.shapeÜ  s   € ä�D—K‘K×%Ñ%Ó&Ð&r   c                 ó`   — t        | j                  j                  «      j                  dd«      S )Nztorch.r§   )ra   rq  rX   ÚreplacerÌ   s    r   rX   zPyTorchVariable.dtypeà  s$   € ä�4—;‘;×$Ñ$Ó%×-Ñ-¨h¸Ó;Ð;r   c                 óR   — | j                   j                  «       j                  «       S rw   )rq  Údetachr�   rÌ   s    r   r�   zPyTorchVariable.numpyä  s   € Ø�{‰{×!Ñ!Ó#×)Ñ)Ó+Ð+r   c                 ól   — | j                   j                  «       | j                   j                  «       z  S rw   )rq  ÚnumelÚelement_sizerÌ   s    r   rñ   zPyTorchVariable.num_bytesç  s'   € Ø�{‰{× Ñ Ó" T§[¡[×%=Ñ%=Ó%?Ñ?Ð?r   c                 óÚ   — d}| j                  «       }d}d}|dkD  rO||kD  r|n|}t        j                  | j                  j	                  «       |z   |«      }||z  }||z  }||z  }|dkD  rŒO|S )Niÿÿÿr   r   )rñ   ÚctypesÚ	string_atrq  Údata_ptr)rD   Úmax_sizerñ   ÚoutputÚoffsetÚ
chunk_sizeÚchunks          r   rò   zPyTorchVariable.to_bytesê  sƒ   € ØˆØ—N‘NÓ$ˆ	ØˆØˆØ˜!ŠmØ%.°Ò%9™¸yˆJÜ×$Ñ$ T§[¡[×%9Ñ%9Ó%;¸fÑ%DÀjÓQˆEØ�e‰OˆFØ�jÑ ˆFØ˜Ñ#ˆIð ˜!‹mð ˆr   rX   c                 óf   — t        t        |«      }| j                  j                  |«      | _        | S rw   )r7   rh   rq  r�   rL  s     r   rK  zPyTorchVariable._to÷  s'   € Üœ˜uÓ%ˆØ—k‘k—n‘n UÓ+ˆŒØˆr   c                 ó    — | j                   }|j                   }||u xs1 |j                  |j                  k(  xr t        j                  ||«      S rw   )rq  rX   rh   r„   rh  s       r   rP  zPyTorchVariable._equalü  s@   € Ø�K‰KˆØ�L‰LˆØ�AˆvÒC˜!Ÿ'™' Q§W¡WÑ,ÒB´·±¸QÀÓ1BÐCr   N)rI   rJ   rK   r¨   r²   Úclassmethodrd  rø   r   r:   r™   ra   rX   rZ   r[   r�   rñ   rW  rò   rŽ   rK  r`   rP  r   r   r   rj   rj   Î  s£   „ Ù-ò*ð ñó ðð ð'�t˜C‘yò 'ó ð'ð ð<�sò <ó ð<ð,�r—z‘zó ,ð@˜3ó @ð˜%ó ð˜ð  ó ð
D˜tô Dr   rj   )r§   )*r¨   r2  r}  rÀ   rØ   rá   rê   Útypingr   r   r   r�   rZ   rh   rg   ÚImportErrorrb   rð   r¢   r…   r   r   r$   r.   r=   r_   r?   rO   r/   r®   r°   rÇ   rý   rÿ   r  r5  r8  r1  ÚABCrŽ   rf   rj   r   r   r   ú<module>r‹     s8  ðñó
 Û Û Û 	Û Û ç 'Ñ 'ã ðÛàÐð €ØÐ ð	Ð ð TÐ ò#òò!ó6ò
ô�ô ÷(ñ (ôs�
 jõ sòl	
ô$�*¨
õ $ô>[-�	ô [-ò|5ô#
 Kô #
ôLU! )ô U!ôp
˜+ô 
ô4'!˜	ô '!òT5ô*$ˆs�w‰wô *$ôZ+
�Hô +
ô\1D�hõ 1Døðs ò ØÒðús   ªC# Ã#C-Ã,C-