Ë
    i›¾j—:  ã                   ó^  — 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ZddlZ G d„ de	«      Z
dd„Zd„ Z	 dd„Zdd„Zd	„ Zd
„ Zd„ Zedk(  �rÛej&                  j)                  ej&                  j+                   ej,                   ej.                  «       «      «      «      Zej&                  j3                  ed«      Zej&                  j7                  e«      r4 ej8                  d«        ej:                  dj=                  e«      e«       ej@                  dk  rv  ejB                  d«      ejD                  «      e_"          ejB                  d«      ejF                  «      e_#          ejH                  d«      ejJ                  «      e_%        n‰ ejL                  ejJ                  jN                  d¬«      e_%         ejL                  ejD                  jN                  d¬«      e_"         ejL                  ejF                  jN                  ddd¬«      e_#         e«       Z(e(jS                  «       Z* ejV                  e*jX                  jZ                  d¬«      e*_,        e*j\                  jZ                  dk7  r- ejV                  e*j\                  jZ                  d¬«      e*_.        e*j^                  jZ                  dk7  r. ejV                  e*j^                  jZ                  dd¬«      e*_/        e*j`                  r- ejV                  e*j`                  jZ                  d¬«      e*_0        e*j`                  r ee*j`                  e*jb                  «      Z0ndZ0ej@                  dk  rZe*jd                  jg                  d«      e*_2        e*jh                  r.e*jh                  D � cg c]  } | jg                  d«      ‘Œ c} e*_4         e
e*jX                  e*jj                  e*jd                  e0e*jh                  «      Z6e*j\                  D ],  Z7e*j^                  jq                  e6js                  e7«      «       Œ. yyc c} w )a)  
Copyright (c) 2004-2020 Joerg Tiedemann

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
é    Nc                   ó,   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚBPENc           	      óØ  — |j                  d«       d}|j                  «       }|j                  d«      rbt        t	        j
                  dd|j                  «       d   «      j                  d«      D �cg c]  }t        |«      ‘Œ c}«      | _        |dz  }nd| _        |j                  d«       t        |«      D �	�
cg c]8  \  }	}
|	|k  s|dk(  r)t        |
j                  d	«      j                  d
«      «      ‘Œ: c}
}	| _        t        | j                  «      D ]‰  \  }}
t        |
«      dk7  sŒt        j                  j                  dj!                  ||z   d
j#                  |
«      «      «       t        j                  j                  d«       t        j$                  d«       Œ‹ t'        t)        t+        t        | j                  «      «      «      D ��cg c]	  \  }}||f‘Œ c}}«      | _        t'        | j                  j-                  «       D ��cg c]  \  }}|d   |d   z   |f‘Œ c}}«      | _        || _        || _        |r|ng | _        i | _        y c c}w c c}
}	w c c}}w c c}}w )Nr   é   z	#version:z(\.0+)*$Ú éÿÿÿÿú.©r   r   ú
 ú é   z/Error: invalid line {0} in BPE codes file: {1}
zLThe line should exist of exactly two subword units, separated by whitespace
)ÚseekÚreadlineÚ
startswithÚtupleÚreÚsubÚsplitÚintÚversionÚ	enumerateÚstripÚ	bpe_codesÚlenÚsysÚstderrÚwriteÚformatÚjoinÚexitÚdictÚreversedÚlistÚitemsÚbpe_codes_reverseÚ	separatorÚvocabÚ
glossariesÚcache)ÚselfÚcodesÚmergesr&   r'   r(   ÚoffsetÚ	firstlineÚxÚnÚitemÚiÚcodeÚpairs                 úb/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/argostranslate/apply_bpe.pyÚ__init__zBPE.__init__/   s  € à�
‰
�1ŒØˆð —N‘NÓ$ˆ	Ø×Ñ Ô,Ü ô  ŸV™V K°°Y·_±_Ó5FÀrÑ5JÓK×QÑQÐRUÓVöàô ˜•FòóˆDŒLð �a‰K‰Fà!ˆDŒLØ�J‰J�qŒMô ' uÓ-÷
á��DØ�F’
˜f¨šlô �$—*‘*˜WÓ%×+Ñ+¨CÓ0Õ1ó
ˆŒô ! §¡Ó0ò 
	‰GˆAˆtÜ�4‹y˜A‹~Ü—
‘
× Ñ ØF×MÑMØ˜F™
 C§H¡H¨T£Nóôô
 —
‘
× Ñ Øcôô —‘˜•ð
	ô Ü(0´´iÀÇÁÓ6OÓ1PÓ(Q×R™9˜A˜tˆd�AŠYÓRó
ˆŒô "&Ø6:·n±n×6JÑ6JÓ6L×M©7¨4°ˆd�1‰g˜˜Q™Ñ Ò&ÓMó"
ˆÔð #ˆŒàˆŒ
á(2™*¸ˆŒàˆ�
ùòWùó
ùó( Sùó Ns   Á3IÂ==IÇI 
ÈI&
c                 ó  — d}t        |«      t        |j                  d«      «      z
  }|r||d| z  }|| j                  |«      z  }t        |«      t        |j                  d«      «      z
  }|r|t        |«      k7  r	||| d z  }|S )z:segment line, dealing with leading and trailing whitespacer   r   N)r   ÚlstripÚsegmentÚrstrip)r*   ÚlineÚoutÚleading_whitespaceÚtrailing_whitespaces        r5   Úprocess_linezBPE.process_linee   s–   € ð ˆä  ›Y¬¨T¯[©[¸Ó-AÓ)BÑBÐÙØ�4Ð+Ð+Ð,Ñ,ˆCàˆt�|‰|˜DÓ!Ñ!ˆä! $›i¬#¨d¯k©k¸'Ó.BÓ*CÑCÐÙÐ#6¼#¸d»)Ò#CØ�4Ð,Ð,Ð-Ð.Ñ.ˆCàˆ
ó    c                 ó‚   — | j                  |j                  d«      j                  d«      «      }dj                  |«      S )zGsegment single sentence (whitespace-tokenized string) with BPE encodingr   r   )Úsegment_tokensr   r   r   )r*   ÚsentenceÚsegmentss      r5   r9   zBPE.segmentv   s5   € à×&Ñ& x§~¡~°gÓ'>×'DÑ'DÀSÓ'IÓJˆØ�x‰x˜Ó!Ð!r@   c                 óœ  — g }|D ]¾  }|sŒ| j                  |«      D ��cg c]a  }t        || j                  | j                  | j                  | j
                  | j                  | j                  | j                  «      D ]  }|‘Œ Œc }}}|dd D ]   }|j                  || j
                  z   «       Œ" |j                  |d   «       ŒÀ |S c c}}w )z.segment a sequence of tokens with BPE encodingNr   )
Ú_isolate_glossariesÚencoder   r%   r'   r&   r   r)   r(   Úappend)r*   ÚtokensÚoutputÚwordr9   r<   Únew_wordr1   s           r5   rB   zBPE.segment_tokens{   sÞ   € àˆØò 	(ˆDáØð  $×7Ñ7¸Ó=÷àÜ!ØØ—N‘NØ×*Ñ*Ø—J‘JØ—N‘NØ—L‘LØ—J‘JØ—O‘Oó	òð ò ðØðˆHñ ð !  "˜ò 5�Ø—‘˜d T§^¡^Ñ3Õ4ð5à�M‰M˜( 2™,Õ'ð+	(ð. ˆùó's   ŸA&Cc           	      ó~   — |g}| j                   D ]$  }|D ��cg c]  }t        ||«      D ]  }|‘Œ Œ }}}Œ& |S c c}}w ©N)r(   Úisolate_glossary)r*   rK   Úword_segmentsÚglossr9   Úout_segmentss         r5   rF   zBPE._isolate_glossaries—   sd   € Ø˜ˆØ—_‘_ò 	ˆEð  -÷àÜ$4°W¸eÓ$Dòð !ò ðØðˆMò ð	ð Ðùós   ˜9)r   ú@@NN)Ú__name__Ú
__module__Ú__qualname__r6   r?   r9   rB   rF   © r@   r5   r   r   .   s   „ ó4òlò""ò
ó8r@   r   c                 óö  — | r#| j                  dt        j                  d¬«      }n%t        j                  t        j                  d¬«      }|j	                  ddt        j
                  d«      t        j                  dd¬	«       |j	                  d
dt        j
                  d«      ddd¬«       |j	                  ddt        ddd¬	«       |j	                  ddt        j
                  d«      t        j                  dd¬	«       |j	                  ddt        ddd¬	«       |j	                  dt        j
                  d«      d dd¬	«       |j	                  dt        d dd ¬	«       |j	                  d!t        d"d dd#¬$«       |S )%Nz	apply-bpez!learn BPE-based word segmentation)Úformatter_classÚdescriptionz--inputz-iÚrÚPATHz%Input file (default: standard input).)ÚtypeÚdefaultÚmetavarÚhelpz--codesz-cTz.File with BPE codes (created by learn_bpe.py).)r]   r_   Úrequiredr`   z--mergesz-mr   ÚINTzjUse this many BPE operations (<= number of learned symbols)default: Apply all the learned merge operationsz--outputz-oÚwz&Output file (default: standard output)z--separatorz-srS   ÚSTRzCSeparator between non-final subword units (default: '%(default)s'))z--vocabularyzuVocabulary file (built with get_vocab.py). If provided, this script reverts any merge operations that produce an OOV.z--vocabulary-thresholdzkVocabulary threshold. If vocabulary is provided, any word with frequency < threshold will be treated as OOVz--glossariesú+a'  Glossaries. Words matching any of the words/regex provided in glossaries will not be affected by the BPE (i.e. they will neither be broken into subwords, nor concatenated with other subwords. Can be provided as a list of words/regex after the --glossaries argument. Enclose each regex in quotes.)r]   Únargsr^   r_   r`   )Ú
add_parserÚargparseÚRawDescriptionHelpFormatterÚArgumentParserÚadd_argumentÚFileTyper   Ústdinr   ÚstdoutÚstr)Ú
subparsersÚparsers     r5   Úcreate_parserrr   ¢   s¼  € áØ×&Ñ&ØÜ$×@Ñ@Ø;ð 'ó 
‰ô ×(Ñ(Ü$×@Ñ@Ø;ô
ˆð
 ×ÑØØÜ×Ñ˜sÓ#Ü—	‘	ØØ4ð ô ð ×ÑØØÜ×Ñ˜sÓ#ØØØ=ð ô ð ×ÑØØÜØØð<ð ô ð ×ÑØØÜ×Ñ˜sÓ#Ü—
‘
ØØ5ð ô ð ×ÑØØÜØØØRð ô ð ×ÑØÜ×Ñ˜sÓ#ØØð Eð ô ð ×ÑØ ÜØØØzð ô ð ×ÑØÜØØØðtð ô 	ð €Mr@   c                 ób   — t        «       }| d   }| dd D ]  }|j                  ||f«       |}Œ |S )zReturn set of symbol pairs in a word.

    word is represented as tuple of symbols (symbols being variable-length strings)
    r   r   N)ÚsetÚadd)rK   ÚpairsÚ	prev_charÚchars       r5   Ú	get_pairsry   õ   sF   € ô
 ‹E€EØ�Q‘€IØ�Q�R�ò ˆØ�	‰	�9˜dÐ#Ô$Ø‰	ðð €Lr@   c                 óÆ  ‡— | |v r||    S t        j                  dj                  dj                  |«      «      | «      r	| f|| <   | fS |dk(  rt	        | «      dz   }n$|dk(  rt	        | dd «      | d   dz   fz   }nt
        ‚t        |«      }	|	s| S 	 t        |	ˆfd	„¬
«      }
|
‰vrnÎ|
\  }}g }d}|t        |«      k  r�	 |j                  ||«      }|j                  ||| «       |}||   |k(  r6|t        |«      dz
  k  r%||dz      |k(  r|j                  ||z   «       |dz  }n|j                  ||   «       |dz  }|t        |«      k  rŒ�t	        |«      }|}t        |«      dk(  rnt        |«      }	Œã|d   dk(  r|dd }n0|d   j                  d«      r|dd |d   j                  dd«      fz   }|rt        ||||«      }||| <   |S #  |j                  ||d «       Y Œ•xY w)zREncode word based on list of BPE merge operations, which are applied consecutivelyz^({})$ú|r
   )ú</w>)r   r   Nr   r|   c                 ó:   •— ‰j                  | t        d«      «      S )NÚinf)ÚgetÚfloat)r4   r   s    €r5   ú<lambda>zencode.<locals>.<lambda>"  s   ø€ ¨Y¯]©]¸4ÄÀuÃÓ-N€ r@   )Úkeyr   r   r   r   )r   Úmatchr   r   r   ÚNotImplementedErrorry   Úminr   ÚindexÚextendrH   ÚendswithÚreplaceÚcheck_vocab_and_split)Úorigr   r%   r'   r&   r   r)   r(   rK   rv   ÚbigramÚfirstÚsecondrL   r2   Újs    `              r5   rG   rG     s'  ø€ ð ˆu�}Ø�T‰{Ðä	‡x�x�—‘ §¡¨Ó 4Ó5°tÔ<Ø�gˆˆd‰Øˆwˆà�&ÒÜ�T‹{˜YÑ&‰Ø	�FÒ	Ü�T˜#˜2�YÓ 4¨¡8¨fÑ#4Ð"6Ñ6‰ä!Ð!ä�d‹O€EáØˆà
Ü�UÓ NÔOˆØ˜Ñ"ØØ‰ˆˆvØˆØˆØ”#�d“)ŠmðØ—J‘J˜u aÓ(�Ø—‘  Q q 	Ô*Ø�ð
 �A‰w˜%Ò A¬¨D«	°A©Ò$5¸$¸qÀ1¹u¹+ÈÒ:OØ—‘ ¨¡Ô/Ø�Q‘‘à—‘  Q¡Ô(Ø�Q‘�ð ”#�d“)‹mô ˜“?ˆØˆÜˆt‹9˜Š>Øä˜d“OˆEð7 ð< ˆB�x�6ÒØ�C�Rˆy‰Ø	ˆb‰×	Ñ	˜6Ô	"Ø�C�Rˆy˜D ™H×,Ñ,¨V°RÓ8Ð:Ñ:ˆáÜ$ TÐ+<¸eÀYÓOˆà€Eˆ$�KØ€Køð7Ø—‘  Q R Ô)Ùús   Â=(G ÇG c              #   óú   K  — 	 |r|| dz      \  }}|dd }n||    \  }}||z   |v r|–— nt        ||||d«      D ]  }|–— Œ |r||v s	|s||z   |v r|–— yt        |||||«      D ]  }|–— Œ y#  | –— Y yxY w­w)z�Recursively split segment into smaller units (by reversing BPE merges)
    until all units are either in-vocabulary, or cannot be split futher.r|   NéüÿÿÿF)Úrecursive_split)r9   r   r'   r&   ÚfinalÚleftÚrightr1   s           r5   r’   r’   K  s¼   è ø€ ð	ÙØ# G¨fÑ$4Ñ5‰KˆD�%Ø˜#˜2�J‰Eà# GÑ,‰KˆD�%ð ˆiÑ˜5Ñ Ø‹
ä# D¨)°U¸IÀuÓMò 	ˆDØ‹Jð	ñ 	�%˜5‘.©%°E¸IÑ4EÈÑ4NØ‹ä# E¨9°e¸YÈÓNò 	ˆDØ‹Jñ	øðàŠÙüs   ‚A;„A0 ŸAA;Á0A8Á6A;c                 ó  — g }| dd D ]@  }||z   |v r|j                  |«       Œt        ||||d«      D ]  }|j                  |«       Œ ŒB | d   }||v r|j                  |«       |S t        ||||d«      D ]  }|j                  |«       Œ |S )zŒCheck for each segment in word if it is in-vocabulary,
    and segment OOV segments into smaller units by reversing the BPE merge operationsNr   FT)rH   r’   )r‹   r   r'   r&   r<   r9   r1   s          r5   rŠ   rŠ   g  s¸   € ð €Cà˜˜�9ò !ˆØ�YÑ %Ñ'Ø�J‰J�wÕô (¨°¸EÀ9ÈeÓTò !�Ø—
‘
˜4Õ ñ!ð!ð �2‰h€GØ�%ÑØ�
‰
�7Ôð €Jô $ G¨Y¸¸yÈ$ÓOò 	ˆDØ�J‰J�tÕð	ð €Jr@   c                 ó¼   — t        «       }| D ]L  }|j                  d«      j                  d«      \  }}t        |«      }|dk(  s||k\  sŒ<|j	                  |«       ŒN |S )z[read vocabulary file produced by get_vocab.py, and filter according to frequency threshold.r   r   N)rt   r   r   r   ru   )Ú
vocab_fileÚ	thresholdÚ
vocabularyr;   rK   Úfreqs         r5   Úread_vocabularyrœ   €  sc   € ô “€Jàò !ˆØ—Z‘Z Ó(×.Ñ.¨sÓ3‰
ˆˆdÜ�4‹yˆØ˜Ò ¨	Ó 1Ø�N‰N˜4Õ ð	!ð Ðr@   c                 ó,  — t        j                  d|z   dz   | «      st        j                  || «      s| gS t        j                  dj	                  |«      | «      }|dd |d   }}t        t        d|«      «      }|dk7  r||j                  d«      gz   S |S )a  
    Isolate a glossary present inside a word.

    Returns a list of subwords. In which all 'glossary' glossaries are isolated

    For example, if 'USA' is the glossary and '1934USABUSA' the word, the return value is:
        ['1934', 'USA', 'B', 'USA']
    ú^ú$z({})Nr   r   r   )r   rƒ   Úsearchr   r   r#   Úfilterr   )rK   ÚglossaryrD   Úendings       r5   rO   rO   Ž  sŽ   € ô 
‡x�x��h‘ Ñ$ dÔ+´2·9±9¸XÀtÔ3LØˆvˆä—8‘8˜GŸN™N¨8Ó4°dÓ;ˆØ# C R˜=¨(°2©,�&ˆÜœ˜t XÓ.Ó/ˆØ5;¸r²\ˆx˜6Ÿ<™<¨Ó0Ð1Ñ1ÐOÀxÐOr@   Ú__main__Úsubword_nmtr^   z»this script's location has moved to {0}. This symbolic link will be removed in a future version. Please point to the new location, or install the package and use the command 'subword-nmt')é   r   zUTF-8zutf-8)ÚencodingT)r§   Úwrite_throughÚline_bufferingz<stdin>z<stdout>rc   rN   )F):Ú__doc__rh   ÚcodecsÚinspectÚioÚosr   r   ÚwarningsÚobjectr   rr   ry   rG   r’   rŠ   rœ   rO   rT   ÚpathÚdirnameÚabspathÚgetfileÚcurrentframeÚ
currentdirr   ÚnewdirÚisdirÚsimplefilterÚwarnr   ÚDeprecationWarningÚversion_infoÚ	getwriterr   rn   Ú	getreaderrm   ÚTextIOWrapperÚbufferrq   Ú
parse_argsÚargsÚopenr+   ÚnameÚinputrJ   rš   Úvocabulary_thresholdr&   Údecoder(   r,   Úbper;   r   r?   )Úgs   0r5   ú<module>rÊ      sf  ðñ
ð,ó Û Û Û 	Û 	Û 	Û 
Û ôqˆ&ô qóhPòf
ð* óFóRò8ò2òPð& ˆzÓà—‘—‘Ø
�‰�‰˜˜Ÿ™Ð(<¨×(<Ñ(<Ó(>Ó?Ó@ó€Jð �W‰W�\‰\˜* mÓ4€FØ	‡w�w‡}�}�VÔØˆ×Ñ˜iÔ(Øˆ�‰ð J÷  Qñ  QØóð ô		
ð ×Ñ˜&Ò Ø.Ð%�V×%Ñ% gÓ.¨s¯z©zÓ:ˆŒ
Ø.Ð%�V×%Ñ% gÓ.¨s¯z©zÓ:ˆŒ
Ø-Ð$�F×$Ñ$ WÓ-¨c¯i©iÓ8ˆ�	à$�B×$Ñ$ S§Y¡Y×%5Ñ%5ÀÔHˆŒ	Ø%�R×%Ñ% c§j¡j×&7Ñ&7À'ÔJˆŒ
Ø%�R×%Ñ%Ø�J‰J×Ñ¨¸tÐTXô
ˆŒ
ñ ‹_€FØ×ÑÓ€Dð �—‘˜TŸZ™ZŸ_™_°wÔ?€D„JØ‡z�z‡�˜)Ò#Ø �V—[‘[ §¡§¡¸7ÔCˆŒ
Ø‡{�{×Ñ˜:Ò%Ø!�f—k‘k $§+¡+×"2Ñ"2°CÀ'ÔJˆŒØ‡‚Ø%˜&Ÿ+™+ d§o¡o×&:Ñ&:ÀWÔMˆŒà‡‚Ù$ T§_¡_°d×6OÑ6OÓP‰
àˆ
à
×Ñ˜&Ò ØŸ™×.Ñ.¨wÓ7ˆŒØ�?Š?Ø:>¿/¹/ÖJ°Q˜qŸx™x¨Õ0ÒJˆDŒOá
ˆd�j‰j˜$Ÿ+™+ t§~¡~°zÀ4Ç?Á?Ó
S€Cà—
‘
ò 2ˆØ�‰×Ñ˜#×*Ñ*¨4Ó0Õ1ñ2ðg ùò^ Ks   ÎP*