Ë
    i›¾j"  ã                  óæ  — d dl mZ d dlZd dlmZ d dlmZ 	 d dlZd dl	Z	d dl
mZm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ej2                  d
z  «      e_        dd„ZdZej:                  ej<                  j>                  k(  r	e� e«       Z G d„ d«      Z  G d„ de «      Z! G d„ de «      Z" G d„ de «      Z#dZ$dZ%dZ&dZ'dd„Z(	 d	 	 	 	 	 d d„Z)d!d„Z*d"d„Z+	 d	 	 	 	 	 d#d„Z,y# e$ r dZY ŒÓw xY w)$é    )ÚannotationsN)ÚSequenceMatcher)ÚList)ÚSBDetectÚmodels)ÚpackageÚsettings)Úcache_spacy)ÚPackage)ÚinfoÚwarningÚminisbdc                ó^   — 	 ||    j                  d«      rdS dS # t        t        f$ r Y yw xY w)zFGet appropriate processors for a language, including MWT if available.Úmwtztokenize,mwtÚtokenize)ÚgetÚKeyErrorÚ	TypeError)Ú	lang_codeÚ	resourcess     ú\/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/argostranslate/sbd.pyÚget_stanza_processorsr      s;   € ðØ!*¨9Ñ!5×!9Ñ!9¸%Ô!@ˆ~ÐPÀjÐPøÜ”iÐ ò Ùðús   ‚ ˜ š,«,c                  ó    — e Zd ZU ded<   dd„Zy)ÚISentenceBoundaryDetectionModelr   Úpkgc                ó   — t         ‚©N)ÚNotImplementedError©ÚselfÚtexts     r   Úsplit_sentencesz/ISentenceBoundaryDetectionModel.split_sentences(   s   € Ü!Ð!ó    N©r!   ÚstrÚreturnz	List[str])Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r"   © r#   r   r   r   $   s   … à	ƒLô"r#   r   c                  ó"   — e Zd Zdd„Zdd„Zd„ Zy)ÚSpacySentencizerSmallc                ód  — || _         t        €t        d«      ‚|j                  �?dt	        |j                  «      v r(t        j
                  |j                  dg¬«      | _        n2t        €t        d«      ‚t        j
                  t        dg¬«      | _        | j                  j                  d«       y)z¿
        Packaging specific spacy when "xx_sent_ud_sm" doesn't cover the language improves performances over stanza.
        Please use small models ".._core/web_sm" for consistency.
        NzBSpaCy is not installed. Install spacy or change ChunkType settingsÚspacyÚparser)ÚexcludezSpaCy cache not initializedÚsentencizer)	r   r/   ÚRuntimeErrorÚpackaged_sbd_pathr%   ÚloadÚnlpÚ_cached_spacy_pathÚadd_pipe©r    r   s     r   Ú__init__zSpacySentencizerSmall.__init__2   s�   € ð
 ˆŒÜˆ=ÜÐcÓdÐdà× Ñ Ð,°¼CÀ×@UÑ@UÓ<VÑ1VÜ—z‘z #×"7Ñ"7À(ÀÔLˆD�Hô "Ð)Ü"Ð#@ÓAÐAÜ—z‘zÔ"4¸x¸jÔIˆDŒHØ�‰×Ñ˜-Õ(r#   c                óÒ   — t        d| j                  j                  › dt        | «      › �«       | j	                  |«      }|j
                  D �cg c]  }|j                  ‘Œ c}S c c}w ©Nz&Splitting sentences using SBD Model: (z) )r   r   Ú	from_coder%   r6   Úsentsr!   ©r    r!   ÚdocÚsents       r   r"   z%SpacySentencizerSmall.split_sentencesD   sQ   € ÜÐ5°d·h±h×6HÑ6HÐ5IÈÌCÐPTËIÈ;ÐWÔXØ�h‰h�t‹nˆØ&)§i¡iÖ0˜d�—	“	Ò0Ð0ùÒ0s   ÁA$c                 ó   — y)NzUsing Spacy model.r+   ©r    s    r   Ú__str__zSpacySentencizerSmall.__str__I   ó   € Ø#r#   N©r   r   r$   )r'   r(   r)   r:   r"   rD   r+   r#   r   r-   r-   1   s   „ ó)ó$1ó
$r#   r-   c            	      ó>   — e Zd ZdddddddddœZdd„Zd	„ Zdd
„Zd„ Zy)ÚMiniSBDSentencizerúzh-hantzzh-hansÚptÚtrÚhiÚen)ÚztÚzhÚpbÚazÚbnÚeoÚmsÚtlc                óæ  — || _         |j                  dz  }d }|j                  «       rGt        j                  |«      D �cg c]  }|j                  d«      sŒ|‘Œ }}|rt        ||d   z  «      }|�|}nj| j                  j                  |j                  |j                  «      }|t        j                  «       vr$t        | j                   j                  › d�«       d}|| _        d | _        y c c}w )Nr   z.onnxr   z0 is not available in MiniSBD, falling back to enrM   )r   Úpackage_pathÚexistsÚosÚlistdirÚendswithr%   ÚLANGUAGE_CODE_MAPPINGr   r=   Úminisbd_modelsÚlist_modelsr   ÚlangÚdetector)r    r   Úsbd_pathÚ
model_fileÚfÚmodel_filesr_   s          r   r:   zMiniSBDSentencizer.__init__\   sÜ   € ØˆŒà×#Ñ# iÑ/ˆØˆ
à�?‰?ÔÜ&(§j¡j°Ó&:ÖR ¸a¿j¹jÈÕ>Qš1ÐRˆKÐRÙÜ  ¨K¸©NÑ!:Ó;�
àÐ!à‰Dð ×-Ñ-×1Ñ1Ø—‘˜sŸ}™}óˆDð
 œ>×5Ñ5Ó7Ñ7Ü˜4Ÿ8™8×-Ñ-Ð.Ð.^Ð_Ô`Ø�àˆŒ	Øˆ�ùò' Ss   Á C.ÁC.c                óŒ   — | j                   €-t        | j                  t        j                  dk(  ¬«      | _         | j                   S )NÚcuda)Úuse_gpu)r`   r   r_   r	   ÚdevicerC   s    r   Úlazy_detectorz MiniSBDSentencizer.lazy_detectorx   s1   € Ø�=‰=Ð Ü$ T§Y¡Y¼¿¹È6Ñ8QÔRˆDŒMØ�}‰}Ðr#   c                óœ   — t        d| j                  j                  › dt        | «      › �«       | j	                  «       j                  |«      S r<   )r   r   r=   r%   ri   Ú	sentencesr   s     r   r"   z"MiniSBDSentencizer.split_sentences}   sB   € ÜÐ5°d·h±h×6HÑ6HÐ5IÈÌCÐPTËIÈ;ÐWÔXØ×!Ñ!Ó#×-Ñ-¨dÓ3Ð3r#   c                 ó   — y)NrH   r+   rC   s    r   rD   zMiniSBDSentencizer.__str__�   rE   r#   NrF   r$   )r'   r(   r)   r\   r:   ri   r"   rD   r+   r#   r   rH   rH   M   s8   „ àØØð ØØØØñÐóò8ó
4ó$r#   rH   c                  ó2   — e Zd ZdddœZd	d„Zd„ Zd
d„Zd„ Zy)ÚStanzaSentencizerrI   rJ   )rN   rP   c                óŠ   — || _         | j                  j                  |j                  |j                  «      | _        d | _        y r   )r   r\   r   r=   Ústanza_lang_codeÚstanza_pipeliner9   s     r   r:   zStanzaSentencizer.__init__‹   s9   € ØˆŒØ $× :Ñ :× >Ñ >Ø�M‰M˜3Ÿ=™=ó!
ˆÔð  $ˆÕr#   c                óæ   — | j                   €Zt        j                  | j                  t	        | j
                  j                  dz  «      dt        j                  dk(  d¬«      | _         | j                   S )NÚstanzar   rf   ÚWARNING)r_   ÚdirÚ
processorsrg   Úlogging_level)	rq   rs   ÚPipelinerp   r%   r   rW   r	   rh   rC   s    r   Úlazy_pipelinezStanzaSentencizer.lazy_pipeline“   s_   € Ø×ÑÐ'Ü#)§?¡?Ø×*Ñ*Ü˜Ÿ™×-Ñ-°Ñ8Ó9Ø%Ü Ÿ™¨6Ñ1Ø'ô$ˆDÔ ð ×#Ñ#Ð#r#   c                óÜ   — t        d| j                  j                  › dt        | «      › �«        | j	                  «       |«      }|j
                  D �cg c]  }|j                  ‘Œ c}S c c}w r<   )r   r   r=   r%   ry   rk   r!   r?   s       r   r"   z!StanzaSentencizer.split_sentencesž   sY   € ÜÐ5°d·h±h×6HÑ6HÐ5IÈÌCÐPTËIÈ;ÐWÔXØ"ˆd× Ñ Ó" 4Ó(ˆØ&)§m¡mÖ4˜d�—	“	Ò4Ð4ùÒ4s   ÁA)c                 ó   — y)Nrn   r+   rC   s    r   rD   zStanzaSentencizer.__str__£   s   € Ø"r#   NrF   r$   )r'   r(   r)   r\   r:   ry   r"   rD   r+   r#   r   rn   rn   …   s$   „ àØñÐó
$ò	$ó5ó
#r#   rn   aé  <detect-sentence-boundaries> I walked down to the river. Then I went to the
I walked down to the river. <sentence-boundary>
----------
<detect-sentence-boundaries> Argos Translate is machine translation software. It is also
Argos Translate is machine translation software. <sentence-boundary>
----------
<detect-sentence-boundaries> Argos Translate is written in Python and uses OpenAI. It also supports
Argos Translate is written in Python and uses OpenAI. <sentence-boundary>
----------
z<detect-sentence-boundaries>z<sentence-boundary>z
----------c                 ó`   — t        j                  «       } | D ]  }|j                  dk(  sŒ|c S  y )NÚsbd)r   Úget_installed_packagesÚtype)Úpackagesr   s     r   Úget_sbd_packager�   ½   s5   € Ü×-Ñ-Ó/€HØò ˆØ�8‰8�uÓØŠJðð r#   c                ó@   — | d | }t         dz   |z   }t        d|«       |S )Nz<detect-sentence-boundaries> Úgenerate_fewshot_sbd_prompt)Úfewshot_promptr   )Ú
input_textÚsentence_guess_lengthÚsentence_guessÚ	to_returns       r   rƒ   rƒ   Å   s3   € ð  Ð 6Ð!6Ð7€NÜÐ!@Ñ@À>ÑQ€IÜÐ	&¨	Ô2ØÐr#   c                ó²   — | j                  t        «      }t        d|«       t        |«      dk  ry |d   j                  d«      }t        |«      dk  ry |d   S )NÚparse_fewshot_responseé   éþÿÿÿú
éÿÿÿÿ)ÚsplitÚFEWSHOT_BOUNDARY_TOKENr   Úlen)Úresponse_textÚresponses     r   rŠ   rŠ   Î   sZ   € Ø×"Ñ"Ô#9Ó:€HÜÐ	! 8Ô,Ü
ˆ8ƒ}�qÒØØ˜‰|×!Ñ! $Ó'€HÜ
ˆ8ƒ}�qÒØØ�B‰<Ðr#   c                ó  — |j                  t        «      }|dk7  rp|d | }t        d|«       d}d}t        t	        | «      «      D ]B  }| d | }t        «       }|j                  ||«       |j                  «       }|dk(  s||kD  sŒ?|}|}ŒD |S y)NrŽ   zsbd_translated_guess:r   g        )ÚfindÚSENTENCE_BOUNDARY_TOKENr   Úranger‘   r   Úset_seqsÚratio)	r…   Úsbd_translated_guessÚsbd_translated_guess_indexÚ
best_indexÚ
best_ratioÚiÚcandidate_sentenceÚsmr™   s	            r   Úprocess_seq2seq_sbdr¡   Ù   s«   € Ø!5×!:Ñ!:Ô;RÓ!SÐØ! RÒ'Ø3Ð4OÐ5OÐPÐÜÐ$Ð&:Ô;Øˆ
Øˆ
Ü”s˜:“Ó'ò 	#ˆAØ!+¨B¨Q ÐÜ Ó"ˆBØ�K‰KÐ*Ð,@ÔAØ—H‘H“JˆEØ�AŠv˜ Ó+Ø�
Ø"‘
ð	#ð Ðàr#   c                ól   — | d| }t        d|«       |j                  t        |z   «      }t        | |«      S )a˜  Given input text, return the index after the end of the first sentence.

    Args:
        input_text: The text to detect the first sentence of.
        sbd_translation: An ITranslation for detecting sentences.
        sentence_guess_length: Estimated number of chars > than most sentences.

    Returns:
        The index of the character after the end of the sentence.
                -1 if not found.
    Nzsentence_guess:)r   Ú	translateÚ DETECT_SENTENCE_BOUNDARIES_TOKENr¡   )r…   Úsbd_translationr†   r‡   rš   s        r   Údetect_sentencer¦   í   sF   € ð  Ð 6Ð!6Ð7€NÜÐ	˜NÔ+Ø*×4Ñ4Ü(¨>Ñ9óÐô ˜zÐ+?Ó@Ð@r#   )r   r%   r   Údictr&   r%   )r&   zPackage | None)é–   )r…   r%   r†   Úintr&   r%   )r’   r%   r&   z
str | None)r…   r%   rš   r%   r&   r©   )r…   r%   r†   r©   r&   r©   )-Ú
__future__r   rY   Údifflibr   Útypingr   r/   ÚImportErrorrs   r   r   r   r]   Úargostranslater   r	   Úargostranslate.networkingr
   Úargostranslate.packager   Úargostranslate.utilsr   r   r%   Údata_dirÚ	cache_dirr   r7   Ú
chunk_typeÚ	ChunkTypeÚSPACYr   r-   rH   rn   r„   r¤   r–   r�   r�   rƒ   rŠ   r¡   r¦   r+   r#   r   ú<module>r·      s8  ðÝ "ã 	Ý #Ý ðÛó ß 6ç ,Ý 1Ý *ß .á˜x×0Ñ0°9Ñ<Ó=€Ô óð Ð Ø×Ñ˜(×,Ñ,×2Ñ2Ò2°uÐ7HÙ$›Ð÷"ñ "ô$Ð;ô $ô85$Ð8ô 5$ôp#Ð7ô #ðP	€ð $BÐ  Ø/Ð Ø!Ð óð 36ðØðØ,/ðàóóóð* DGðAØðAØ=@ðAàôAøðI ò Ø‚Eðús   ˜C& Ã&C0Ã/C0