ó
    Î’ŒjÉJ  ã                   ó
  • S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJrJrJrJr  S S	KJr  \R,                  R/                  S
5      S 5       r\R,                  R/                  S5      \R,                  R3                  SS9\R,                  R5                  SS/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4/5      S 5       5       5       r\R,                  R/                  S5      S  5       r\R,                  R/                  S!5      S" 5       r\R,                  R3                  S#S9\R,                  R/                  S$5      S% 5       5       r\R,                  R/                  S&5      S' 5       r\R,                  R/                  S(5      S) 5       r \R,                  R/                  S*5      S+ 5       r!\R,                  R/                  S,5      S- 5       r"\R,                  R/                  S.5      S/ 5       r#\R,                  R3                  S0S9\R,                  R/                  S15      S2 5       5       r$\R,                  R/                  S35      S4 5       r%\R,                  R5                  S5S6S7/5      \R,                  R/                  S85      S9 5       5       r&\R,                  R/                  S:5      S; 5       r'\R,                  R/                  S<5      S= 5       r(\R,                  R/                  S>5      S? 5       r)\R,                  R3                  S@S9\R,                  R/                  SA5      SB 5       5       r*\R,                  R5                  SCSD/ SEQ4SFSF/4/5      SG 5       r+SH r,\R,                  R5                  S5SI/5      SJ 5       r-SK r.SL r/SM r0\R,                  R5                  S5/ SNQ5      SO 5       r1\R,                  R5                  S5SP/5      SQ 5       r2\R,                  R5                  S5/ SRQ5      SS 5       r3ST r4\R,                  R5                  SUSV/5      SW 5       r5SX r6\R,                  R5                  SSISYSZ0SYS[0/4/5      S\ 5       r7\R,                  R5                  SSISYSZ0SYS]0/4SISZS^S_.SYS[0/4/5      S` 5       r8\R,                  R5                  SSISZSaSb.SYS[0/4/5      Sc 5       r9Sd r:Se r;Sf r<Sg r=Sh r>Si r?Sj r@Sk rASl rB\R,                  R/                  Sm5      Sn 5       rCSo rDg)pé    N)ÚGerman)ÚEnglish)ÚORTH)Ú	Tokenizer)ÚDoc)ÚExample)Úcompile_infix_regexÚcompile_prefix_regexÚcompile_suffix_regexÚensure_path)ÚVocabiç  c                  ó|   • [        [        5       SS/5      n U S   n[        U/5      n[        U5      nUS   UL d   eg )NÚhelloÚworldr   )r   r   ÚsetÚlist)ÚdocÚtokenÚsÚitemss       Ú²C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\spacy/tests/tokenizer/test_tokenizer.pyÚtest_issue743r      sD   € ä
Œe‹g˜ Ð)Ó
*€CØ�‰F€EÜˆUˆG‹€AÜ�‹G€EØ�‰8�uÒÐÑó    i!  zECan not be fixed unless with variable-width lookbehinds, cf. PR #3218)Úreasonztext,tokensz"deserve,"--and)Ú"Údeservez,"--Úandzexception;--exclusive)Ú	exceptionz;--Ú	exclusivezday.--Is)Údayz.--ÚIszrefinement:--just)Ú
refinementz:--Újustzmemories?--To)Úmemoriesz?--ÚTozUseful.=--Therefore)ÚUsefulú.=--Ú	Thereforez=Hope.=--Pandora)Ú=ÚHoper'   ÚPandorac                 ó–   • U " U5      n[        U5      [        U5      :X  d   eU Vs/ s H  oDR                  PM     snU:X  d   egs  snf )z;Test that special characters + hyphens are split correctly.N©ÚlenÚtext)Úen_tokenizerr/   Útokensr   Úts        r   Útest_issue801r3      sF   € ñ$ �tÓ
€CÜˆs‹8”s˜6“{Ó"Ð"Ð"ÙÓ šC�q�FŒF™CÑ  FÓ*Ð*Ñ*ùÒ s   §Ai%  c                  óÀ  • Sn [        5       R                  nU" U 5      nSU Vs/ s H  o3R                  PM     sn;   d   eSU Vs/ s H  o3R                  PM     sn;  d   eUR                  S[        S0/5        U" U 5      nSU Vs/ s H  o3R                  PM     sn;   d   eSU Vs/ s H  o3R                  PM     sn;  d   e[        5       R                  nUR                  S[        S0/5        U" U 5      nSU Vs/ s H  o3R                  PM     sn;   d   eSU Vs/ s H  o3R                  PM     sn;  d   egs  snf s  snf s  snf s  snf s  snf s  snf )z>Test special-case works after tokenizing. Was caching problem.zTI like _MATH_ even _MATH_ when _MATH_, except when _MATH_ is _MATH_! but not _MATH_.ÚMATHÚ_MATH_N)r   Ú	tokenizerr/   Úadd_special_caser   )r/   r7   r   Úws       r   Útest_issue1061r:   5   sC  € ð b€DÜ“	×#Ñ#€IÙ
�D‹/€CØ¡cÓ*¢c —f”f¡cÑ*Ó*Ð*Ð*Ø©CÓ0ªC qŸFœF©CÑ0Ó0Ð0Ð0à×Ñ˜x¬4°Ð*:Ð);Ô<Ù
�D‹/€CØ©Ó,ª 1Ÿœ©Ñ,Ó,Ð,Ð,Ø©#Ó.ª# QŸ&œ&©#Ñ.Ó.Ð.Ð.ô “	×#Ñ#€IØ×Ñ˜x¬4°Ð*:Ð);Ô<Ù
�D‹/€CØ©Ó,ª 1Ÿœ©Ñ,Ó,Ð,Ð,Ø©#Ó.ª# QŸ&œ&©#Ñ.Ó.Ð.Ñ.ùò +ùÚ0ùò -ùÚ.ùò -ùÚ.s#   ¤EÁEÂ	EÂ+EÄEÄ$Ei«  c                 ó4  • U " S5      n[         R                  " [        U5      S4SS9Ul        UR	                  5        nUR                  USS 5        SSS5        [        U5      S:X  d   eUR                  R                  S	:X  d   eg! , (       d  f       N<= f)
z(Test that doc.merge() resizes doc.tensorza b c dé€   Úf)Údtyper   é   Né   )r@   r<   )ÚnumpyÚonesr.   ÚtensorÚ
retokenizeÚmergeÚshape)r0   r   Úretokenizers      r   Útest_issue1963rH   K   s~   € ñ �yÓ
!€CÜ—’œS ›X s˜O°3Ñ7€C„JØ	�‰Ô	˜[Ø×Ñ˜#˜a ˜(Ô#÷ 
äˆs‹8�q‹=Ðˆ=Ø�:‰:×Ñ˜xÓ'Ð'Ñ'÷ 
Õ	ús   ¾B	Â	
BzICan not be fixed without variable-width look-behind (which we don't want)iÓ  c                  ó   • [        5       n SnU " U5      n[        U5      S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS	   R                  S
:X  d   eUS   R                  S:X  d   eg)z@Test that g is not split of if preceded by a number and a letterz
e2g 2g 52gé   r   Úe2gé   Ú2r?   Úgr@   Ú52é   N)r   r.   r/   )ÚnlpÚ	testwordsr   s      r   Útest_issue1235rS   V   s—   € ô ‹)€CØ€IÙ
ˆi‹.€CÜˆs‹8�q‹=Ðˆ=Øˆq‰6�;‰;˜%ÓÐÐØˆq‰6�;‰;˜#ÓÐÐØˆq‰6�;‰;˜#ÓÐÐØˆq‰6�;‰;˜$ÓÐÐØˆq‰6�;‰;˜#ÓÐÑr   iÚ  c                  óÒ   • [        5       n U " S5      n[        U5      S:X  d   e[        U R                  SS/5      5      n[        US   5      S:X  d   e[        US   5      S:X  d   eg )NÚ r   r   rL   )r   r.   r   Úpipe)rQ   r   Údocss      r   Útest_issue1242rX   g   se   € ä
‹)€CÙ
ˆb‹'€CÜˆs‹8�q‹=Ðˆ=Ü�—‘˜"˜g˜Ó'Ó(€DÜˆt�A‰w‹<˜1ÓÐÐÜˆt�A‰w‹<˜1ÓÐÑr   ié  c                  óŒ   • [        [        5       / SQS9n [        [        5       / SQS9nU S   US   :w  d   eU S   US   :X  a   eg)z#Test that tokens compare correctly.©ÚaÚbÚc©Úwords)r[   r]   Úer   N)r   r   )Údoc1Údoc2s     r   Útest_issue1257rc   q   sO   € ô Œu‹wšoÑ.€DÜŒu‹wšoÑ.€DØ�‰7�d˜1‘gÓÐÐØ�A‰w˜$˜q™'Ó!Ð!Ð!Ð!r   i_  c                  óü  • [        [        5       / SQS9n [        R                  " [        5         U S   R                  S5      (       d   e SSS5        U S   R                  S5      R                  S:X  d   e[        R                  " [        5         U S   R                  S5      (       d   e SSS5        U S   R                  S5      R                  S	:X  d   eg! , (       d  f       N–= f! , (       d  f       ND= f)
zBTest that token.nbor() raises IndexError for out-of-bounds access.)Ú0Ú1rM   r^   r   éÿÿÿÿNrL   re   r?   rM   )r   r   ÚpytestÚraisesÚ
IndexErrorÚnborr/   )r   s    r   Útest_issue1375rl   z   s²   € ô Œe‹gš_Ñ
-€CÜ	�Š”zÕ	"Ø�1‰v�{‰{˜2�‰Ð‰÷ 
#àˆq‰6�;‰;�r‹?×Ñ 3Ó&Ð&Ð&Ü	�Š”zÕ	"Ø�1‰v�{‰{˜1�~‰~Ð‰~÷ 
#àˆq‰6�;‰;�q‹>×Ñ #Ó%Ð%Ñ%÷ 
#Õ	"ú÷ 
#Õ	"ús   ¯CÂC-Ã
C*Ã-
C;iÐ  c                  óD  ^^^^• [         R                  " S5      m[         R                  " S5      m[         R                  " S5      m[         R                  " S5      mUUUU4S jn [        5       nU " U5      Ul        U" S5      nU H  nUR                  (       a  M   e   g)zBTest that tokenizer can parse DOT inside non-whitespace separatorsz[\[\("']z[\]\)"']z[-~\.]z
^https?://c           	      ó„   >• [        U R                  0 TR                  TR                  TR                  TR                  S9$ )N)Úprefix_searchÚsuffix_searchÚinfix_finditerÚtoken_match)r   ÚvocabÚsearchÚfinditerÚmatch)rQ   Úinfix_reÚ	prefix_reÚsimple_url_reÚ	suffix_res    €€€€r   Úmy_tokenizerÚ$test_issue1488.<locals>.my_tokenizerŽ   s>   ø€ ÜØ�I‰IØØ#×*Ñ*Ø#×*Ñ*Ø#×,Ñ,Ø%×+Ñ+ñ
ð 	
r   zThis is a test.N©ÚreÚcompiler   r7   r/   )r{   rQ   r   r   rw   rx   ry   rz   s       @@@@r   Útest_issue1488r€   †   s€   û€ ô —
’
˜?Ó+€IÜ—
’
˜?Ó+€IÜ�zŠz˜-Ó(€HÜ—J’JÐ0Ó1€M÷
ð 
ô ‹)€CÙ  Ó%€C„MÙ
ÐÓ
 €CÛˆØ�z�z‰zÐˆzò r   iÖ  c                  óþ   ^• [         R                  " S5      mS/ SQ4SSS/4S/ SQ4/n U4S	 jn[        5       nU" U5      Ul        U  H-  u  p4U" U5       Vs/ s H  oUR                  PM     snU:X  a  M-   e   g
s  snf )z&Test if infix_finditer works correctlyz[^a-z]ztoken 123test)r   rf   rM   Ú3Útestztoken 1testr   Ú1testzhello...test)r   Ú.r…   r…   rƒ   c                 óB   >• [        U R                  0 TR                  S9$ )N)rq   )r   rs   ru   )rQ   rw   s    €r   Únew_tokenizerÚ%test_issue1494.<locals>.new_tokenizer©   s   ø€ Ü˜Ÿ™ B°x×7HÑ7HÑIÐIr   Nr}   )Ú
test_casesr‡   rQ   r/   Úexpectedr   rw   s         @r   Útest_issue1494r‹   Ÿ   s†   ø€ ô �zŠz˜-Ó(€Hà	Ò:Ð;Ø	˜ 'Ð*Ð+Ø	Ò9Ð:ð€JõJô ‹)€CÙ! #Ó&€C„MÛ$‰ˆÙ(+¨D¬	Ó2ª	˜u—
”
©	Ñ2°hÕ>Ð>Ð>ò %ùÚ2s   ÁA:zJCan not be fixed without iterative looping between prefix/suffix and infixi  c                  óJ   • [        5       n U " S5      n[        U5      S:X  d   eg)zJTest that checks that a dot followed by a quote is handled
appropriately.
z.First sentence."A quoted sentence" he said ...é   N)r   r.   ©rQ   r   s     r   Útest_issue2070r�   ²   s&   € ô ‹)€CÙ
Ð>Ó
?€CÜˆs‹8�r‹>Ð‰>r   in  c                 ó†  • U " S5      n[        U5      S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS	   R                  S
:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eg)z\Test that the tokenizer correctly splits tokens separated by a slash (/)
ending in a digit.
z"Learn html5/css3/javascript/jqueryé   r   ÚLearnrL   Úhtml5r?   Ú/r@   Úcss3rP   rJ   Ú
javascripté   é   ÚjqueryNr-   )Úfr_tokenizerr   s     r   Útest_issue2926r›   Â   sÏ   € ñ
 Ð;Ó
<€CÜˆs‹8�q‹=Ðˆ=Øˆq‰6�;‰;˜'Ó!Ð!Ð!Øˆq‰6�;‰;˜'Ó!Ð!Ð!Øˆq‰6�;‰;˜#ÓÐÐØˆq‰6�;‰;˜&Ó Ð Ð Øˆq‰6�;‰;˜#ÓÐÐØˆq‰6�;‰;˜,Ó&Ð&Ð&Øˆq‰6�;‰;˜#ÓÐÐØˆq‰6�;‰;˜(Ó"Ð"Ñ"r   r/   u   ABLEItemColumn IAcceptance Limits of ErrorIn-Service Limits of ErrorColumn IIColumn IIIColumn IVColumn VComputed VolumeUnder Registration ofÂ VolumeOver Registration ofÂ VolumeUnder Registration ofÂ VolumeOver Registration ofÂ VolumeCubic FeetCubic FeetCubic FeetCubic FeetCubic Feet1Up to 10.0100.0050.0100.005220.0200.0100.0200.010350.0360.0180.0360.0184100.0500.0250.0500.0255Over 100.5% of computed volume0.25% of computed volume0.5% of computed volume0.25% of computed volume TABLE ItemColumn IAcceptance Limits of ErrorIn-Service Limits of ErrorColumn IIColumn IIIColumn IVColumn VComputed VolumeUnder Registration ofÂ VolumeOver Registration ofÂ VolumeUnder Registration ofÂ VolumeOver Registration ofÂ VolumeCubic FeetCubic FeetCubic FeetCubic FeetCubic Feet1Up to 10.0100.0050.0100.005220.0200.0100.0200.010350.0360.0180.0360.0184100.0500.0250.0500.0255Over 100.5% of computed volume0.25% of computed volume0.5% of computed volume0.25% of computed volume ItemColumn IAcceptance Limits of ErrorIn-Service Limits of ErrorColumn IIColumn IIIColumn IVColumn VComputed VolumeUnder Registration ofÂ VolumeOver Registration ofÂ VolumeUnder Registration ofÂ VolumeOver Registration ofÂ VolumeCubic FeetCubic FeetCubic FeetCubic FeetCubic Feet1Up to 10.0100.0050.0100.005220.0200.0100.0200.010350.0360.0180.0360.0184100.0500.0250.0500.0255Over 100.5% of computed volume0.25% of computed volume0.5% of computed volume0.25% of computed volumezØoow.jspsearch.eventoracleopenworldsearch.technologyoraclesolarissearch.technologystoragesearch.technologylinuxsearch.technologyserverssearch.technologyvirtualizationsearch.technologyengineeredsystemspcodewwmkmppscem:iB
  c                 ó&   • U " U5      nU(       d   eg)zDCheck that sentence doesn't cause an infinite loop in the tokenizer.N© )r0   r/   r   s      r   Útest_issue2626_2835rž   Ó   s   € ñ �tÓ
€CÞ€J‰3r   i`
  c                 ó  • U " S5      n[        U5      S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS	   R                  S
:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eg)zXTest that tokenizer correctly splits off punctuation after numbers with
decimal points.
z&I went for 40.3, and got home by 10.0.r�   r   ÚIrL   Úwentr?   Úforr@   z40.3rP   Ú,rJ   r   r—   Úgotr˜   Úhomer‘   Úbyé	   z10.0é
   r…   Nr-   )r0   r   s     r   Útest_issue2656r©   á   s  € ñ
 Ð?Ó
@€CÜˆs‹8�r‹>Ðˆ>Øˆq‰6�;‰;˜#ÓÐÐØˆq‰6�;‰;˜&Ó Ð Ð Øˆq‰6�;‰;˜%ÓÐÐØˆq‰6�;‰;˜&Ó Ð Ð Øˆq‰6�;‰;˜#ÓÐÐØˆq‰6�;‰;˜%ÓÐÐØˆq‰6�;‰;˜%ÓÐÐØˆq‰6�;‰;˜&Ó Ð Ð Øˆq‰6�;‰;˜$ÓÐÐØˆq‰6�;‰;˜&Ó Ð Ð Øˆr‰7�<‰<˜3ÓÐÑr   iÂ
  c                 óx   • U " S5      nUS   R                   S:X  d   eU " S5      nUS   R                   S:X  d   eg)zFTest that words like 'a' and 'a.m.' don't get exceptional norm values.r[   r   ÚamN)Únorm_)r0   r[   r«   s      r   Útest_issue2754r­   õ   sD   € ñ 	�SÓ€AØˆQ‰4�:‰:˜ÓÐÐÙ	�dÓ	€BØˆa‰5�;‰;˜$ÓÐÑr   iº  c                  óJ   • [        5       n U " S5      n[        U5      S:X  d   eg)z;Test that the tokenizer doesn't hang on a long list of dotszW880.794.982.218.444.893.023.439.794.626.120.190.780.624.990.275.671 ist eine lange ZahlrJ   N)r   r.   rŽ   s     r   Útest_issue3002r¯   þ   s*   € ô ‹(€CÙ
Øaó€Cô ˆs‹8�q‹=Ð‰=r   z;default suffix rules avoid one upper-case letter before dotiy  c                  óô   • [        5       n U R                  S5        SnSnSnU " U5      nU " U5      nU " U5      nUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eg )NÚsentencizerz>He gave the ball to I. Do you want to go to the movies with I?z?He gave the ball to I.  Do you want to go to the movies with I?z>He gave the ball to I.
Do you want to go to the movies with I?rJ   r    )r   Úadd_piper/   )rQ   Útext1Útext2Útext3Út1Út2Út3s          r   Útest_issue3449r¹     sƒ   € ô ‹)€CØ‡L�L�ÔØL€EØM€EØM€EÙ	ˆU‹€BÙ	ˆU‹€BÙ	ˆU‹€BØˆa‰5�:‰:˜ÓÐÐØˆa‰5�:‰:˜ÓÐÐØˆa‰5�:‰:˜ÓÐÑr   z
text,wordszA'B C)ÚAÚ'ÚBÚCzA-Bc                 óF   • U " U5      n[         R                  " USU05        g )Nr_   )r   Ú	from_dict)r0   r/   r_   r   s       r   Útest_gold_misalignedrÀ     s#   € ñ �tÓ
€CÜ×Ò�c˜G UÐ+Õ,r   c                 ó6   • U " S5      n[        U5      S:X  d   eg )NrU   r   ©r.   )r7   r1   s     r   Útest_tokenizer_handles_no_wordrÃ      s   € Ù�r‹]€FÜˆv‹;˜!ÓÐÑr   Úloremc                 ó>   • U " U5      nUS   R                   U:X  d   eg )Nr   ©r/   ©r7   r/   r1   s      r   Ú"test_tokenizer_handles_single_wordrÈ   %  s!   € á�t‹_€FØ�!‰9�>‰>˜TÓ!Ð!Ñ!r   c                 óâ   • SnU " U5      n[        U5      S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eUS   R                  S:w  d   eg )	NzLorem, ipsum.rP   r   ÚLoremrL   r£   r?   Úipsumr-   rÇ   s      r   Útest_tokenizer_handles_punctrÌ   +  sz   € Ø€DÙ�t‹_€FÜˆv‹;˜!ÓÐÐØ�!‰9�>‰>˜WÓ$Ð$Ð$Ø�!‰9�>‰>˜SÓ Ð Ð Ø�!‰9�>‰>˜WÓ$Ð$Ð$Ø�!‰9�>‰>˜WÓ$Ð$Ñ$r   c                 ó:   • SnU " U5      n[        U5      S:X  d   eg )NzLorem, (ipsum).r—   rÂ   rÇ   s      r   Ú#test_tokenizer_handles_punct_bracesrÎ   5  s"   € Ø€DÙ�t‹_€FÜˆv‹;˜!ÓÐÑr   c                 ó¾   • SS/nSnU " U5      nUS   R                   U;  a<  [        U5      S:X  d   eUS   R                  S:X  d   eUS   R                  S:X  d   eg g )	NÚhuÚbnzLorem ipsum: 1984.r   rJ   rÊ   r@   Ú1984)Úlang_r.   r/   )r7   Ú
exceptionsr/   r1   s       r   Útest_tokenizer_handles_digitsrÕ   ;  sl   € Ø˜�€JØ€DÙ�t‹_€Fàˆa�y‡�˜jÓ(Ü�6‹{˜aÓÐÐØ�a‰y�~‰~ Ó(Ð(Ð(Ø�a‰y�~‰~ Ó'Ð'Ñ'ð )r   )z
google.comz
python.orgzspacy.iozexplosion.aizhttp://www.google.comc                 ó6   • U " U5      n[        U5      S:X  d   eg ©NrL   rÂ   rÇ   s      r   Útest_tokenizer_keep_urlsrØ   F  s   € ñ
 �t‹_€FÜˆv‹;˜!ÓÐÑr   zNASDAQ:GOOGc                 ó6   • U " U5      n[        U5      S:X  d   eg )Nr@   rÂ   rÇ   s      r   Útest_tokenizer_colonsrÚ   O  s   € á�t‹_€FÜˆv‹;˜!ÓÐÑr   )zhello123@example.comzhi+there@gmail.itzmatt@explosion.aic                 ó6   • U " U5      n[        U5      S:X  d   eg r×   rÂ   rÇ   s      r   Útest_tokenizer_keeps_emailrÜ   U  s   € ñ �t‹_€FÜˆv‹;˜!ÓÐÑr   c                 ó:   • SnU " U5      n[        U5      S:”  d   eg )NaÓ  Lorem ipsum dolor sit amet, consectetur adipiscing elit

Cras egestas orci non porttitor maximus.
Maecenas quis odio id dolor rhoncus dignissim. Curabitur sed velit at orci ultrices sagittis. Nulla commodo euismod arcu eget vulputate.

Phasellus tincidunt, augue quis porta finibus, massa sapien consectetur augue, non lacinia enim nibh eget ipsum. Vestibulum in bibendum mauris.

"Nullam porta fringilla enim, a dictum orci consequat in." Mauris nec malesuada justo.rJ   rÂ   rÇ   s      r   Ú test_tokenizer_handles_long_textrÞ   ]  s%   € ðZ€Dñ �t‹_€FÜˆv‹;˜‹?Ð‰?r   Ú	file_namezsun.txtc                 ó  • [        [        5      R                  U-  nUR                  SSS9 nUR	                  5       nS S S 5        [        W5      S:w  d   eU " U5      n[        U5      S:”  d   eg ! , (       d  f       N9= f)NÚrÚutf8)Úencodingr   éd   )r   Ú__file__ÚparentÚopenÚreadr.   )r7   rß   ÚlocÚinfiler/   r1   s         r   Ú$test_tokenizer_handle_text_from_filerë   k  sm   € ä
”hÓ
×
&Ñ
&¨Ñ
2€CØ	�‰�# ˆÑ	'¨6Ø�{‰{‹}ˆ÷ 
(äˆt‹9˜‹>Ðˆ>Ù�t‹_€FÜˆv‹;˜ÓÐÑ÷	 
(Õ	'ús   ­A1Á1
A?c                 ó€   • SnSnU " U5      nU " U5      nUS   R                   S:X  d   eUS   R                   S:X  d   eg )Nz2Lorem dolor sit amet, consectetur adipiscing elit.z8Lorem ipsum dolor sit amet, consectetur adipiscing elit.r   rÊ   rÆ   )r7   r³   r´   Útokens1Útokens2s        r   Ú(test_tokenizer_suspected_freeing_stringsrï   u  sL   € Ø@€EØF€EÙ˜Ó€GÙ˜Ó€GØ�1‰:�?‰?˜gÓ%Ð%Ð%Ø�1‰:�?‰?˜gÓ%Ð%Ñ%r   ÚorthÚloÚremc                 ó¢   • U R                  X5        U " U5      nUS   R                  US   S   :X  d   eUS   R                  US   S   :X  d   eg )Nr   rð   rL   ©r8   r/   )r7   r/   r1   r   s       r   Útest_tokenizer_add_special_caserõ   ~  sW   € à×Ñ˜tÔ,Ù
�D‹/€CØˆq‰6�;‰;˜& ™) FÑ+Ó+Ð+Ð+Øˆq‰6�;‰;˜& ™) FÑ+Ó+Ð+Ñ+r   r~   rº   )rð   Útagc                 óŽ   • [         R                  " [        5         U R                  X5        S S S 5        g ! , (       d  f       g = f)N)rh   ri   Ú
ValueErrorr8   rÇ   s      r   Ú$test_tokenizer_validate_special_caserù   †  s*   € ô 
�Š”zÕ	"Ø×"Ñ" 4Ô0÷ 
#×	"Ö	"ús	   ›6¶
AÚLO)rð   Únormc                 ó
  • [        5       n[        U0 S S S 5      nUR                  X5        U" U 5      nUS   R                  US   S   :X  d   eUS   R                  US   S   :X  d   eUS   R                  US   S   :X  d   eg )Nr   rð   rû   rL   )r   r   r8   r/   r¬   )r/   r1   rs   r7   r   s        r   Ú#test_tokenizer_add_special_case_tagrý   ’  s‘   € ô ‹G€EÜ˜%  T¨4°Ó6€IØ×Ñ˜tÔ,Ù
�D‹/€CØˆq‰6�;‰;˜& ™) FÑ+Ó+Ð+Ð+Øˆq‰6�<‰<˜6 !™9 VÑ,Ó,Ð,Ð,Øˆq‰6�;‰;˜& ™) FÑ+Ó+Ð+Ñ+r   c                 ó¾   • SnU R                  SSS0/5        U R                  SSS0/5        U " U5      nU Vs/ s H  o3R                  PM     sn/ SQ:X  d   eg s  snf )Nz(((_SPECIAL_ A/B, A/B-A/B")Ú	_SPECIAL_rð   úA/B)Ú(r  r  rÿ   r   r£   r   Ú-r   r   Ú)rô   ©r7   r/   r   r   s       r   Ú)test_tokenizer_special_cases_with_affixesr  Ÿ  sj   € Ø(€DØ×Ñ˜{¨f°kÐ-BÐ,CÔDØ×Ñ˜u¨° Ð&7Ô8Ù
�D‹/€CÙ$'Ó(¢C˜5�JŒJ¡CÑ(ò -ó ð ñ ùÒ(s   ¹Ac                  óü   • [        5       R                  n 0 U l        SnU R                  SSS0/5        U " U5      R                  U:X  d   eU R                  SSS0SS0/5        SnU " U5      R                  U:X  d   eg )Nz''a'' z''r   Úabr[   r\   zab ab ab ''ab ab'' ab'' ''ab)r   r7   Úrulesr8   r/   )r7   r/   s     r   Ú8test_tokenizer_special_cases_with_affixes_preserve_spacyr	  ³  sˆ   € Ü“	×#Ñ#€Ià€I„Oð €DØ×Ñ˜t v¨t nÐ%5Ô6Ù�T‹?×Ñ 4Ó'Ð'Ð'ð ×Ñ˜t v¨s m°f¸c°]Ð%CÔDØ)€DÙ�T‹?×Ñ 4Ó'Ð'Ñ'r   c                 ó”   • SnU R                  SSS0/5        U " U5      nU Vs/ s H  o3R                  PM     snSS/:X  d   eg s  snf )Nz
_SPECIAL_.rÿ   rð   r…   rô   r  s       r   Ú(test_tokenizer_special_cases_with_periodr  Ã  sO   € Ø€DØ×Ñ˜{¨f°kÐ-BÐ,CÔDÙ
�D‹/€CÙ$'Ó(¢C˜5�JŒJ¡CÑ(¨[¸#Ð,>Ó>Ð>Ñ>ùÒ(s   ¤Ac                 óœ   • SnU R                  SSS0SS0/5        U " U5      nUS   R                  S:X  d   eUS   R                  S	:X  d   eg )
Nz
the _ID'X_z_ID'X_rð   Ú_IDz'X_rL   rP   r?   r˜   )r8   Úidx)r7   r/   r   s      r   Ú test_tokenizer_special_cases_idxr  Ê  sU   € Ø€DØ×Ñ˜x¨6°5¨/¸FÀE¸?Ð)KÔLÙ
�D‹/€CØˆq‰6�:‰:˜‹?Ðˆ?Øˆq‰6�:‰:˜‹?Ð‰?r   c                 óè   • U " S5       Vs/ s H  oR                   PM     sn/ SQ:X  d   eU R                  SSS0/5        U " S5       Vs/ s H  oR                   PM     snS/:X  d   eg s  snf s  snf )Nza b crZ   r   )r/   r8   )r7   r2   s     r   Ú#test_tokenizer_special_cases_spacesr  Ò  sp   € Ù% gÔ.Ó/Ò.�q�FŒFÑ.Ñ/²?ÓBÐBÐBØ×Ñ˜w¨&°'Ð):Ð(;Ô<Ù% gÔ.Ó/Ò.�q�FŒFÑ.Ñ/°G°9Ó<Ð<Ñ<ùò 0ùâ/s   ‹A*Á
A/c                 ó   • [         R                  " S5      n[        U UR                  S9nU" S5       Vs/ s H  o3R                  PM     snSS/:X  d   eS Ul        U" S5       Vs/ s H  o3R                  PM     snS/:X  d   eg s  snf s  snf )Nú[\.]$)rp   za.r[   r…   )r~   r   r   rt   r/   rp   )Úen_vocabrz   r7   r2   s       r   Útest_tokenizer_flush_cacher  Ø  s„   € Ü—
’
˜8Ó$€IÜØØ×&Ñ&ñ€Iñ & dœOÓ,šO�q�FŒF™OÑ,°°c°
Ó:Ð:Ð:Ø"€IÔÙ% dœOÓ,šO�q�FŒF™OÑ,°°Ó6Ð6Ñ6ùò -ùâ,s   µBÁ&Bc                 ó2  • [         R                  " S5      nSSS0/0n[        U UR                  US9nU" S5       Vs/ s H  oDR                  PM     snSS/:X  d   e0 Ul        U" S5       Vs/ s H  oDR                  PM     sn/ SQ:X  d   eg s  snf s  snf )Nr  za ar   )rp   r  za a.r…   )r[   r[   r…   )r~   r   r   rt   r/   r  )r  rz   r  Ú
tokenizer1r2   s        r   Útest_tokenizer_flush_specialsr  ã  sœ   € Ü—
’
˜8Ó$€IØ�f˜e�_Ð%Ð&€EÜØØ×&Ñ&Øñ€Jñ
 ' vÔ.Ó/Ò.�q�FŒFÑ.Ñ/°E¸3°<Ó?Ð?Ð?Ø€JÔÙ& vÔ.Ó/Ò.�q�FŒFÑ.Ñ/²?ÓBÐBÑBùò 0ùâ/s   ½BÁ.Bc                 ó:  • S/nSS/n[        U5      n[        U5      n[        U UR                  UR                  S9nU" S5       Vs/ s H  ofR                  PM     nnU/ SQ:X  d   eUR                  S5       Vs/ s H  ofS   PM	     nnXx:X  d   eg s  snf s  snf )Nza(?=.)z	(?<=\w)\.z(?<=a)\d+\.)ro   rp   za10.)r[   Ú10r…   rL   )r
   r   r   rt   r/   Úexplain)	r  ÚprefixesÚsuffixesrx   rz   r7   r2   r1   Úexplain_tokenss	            r   Ú/test_tokenizer_prefix_suffix_overlap_lookbehindr  ð  s«   € àˆz€HØ˜nÐ-€HÜ$ XÓ.€IÜ$ XÓ.€IÜØØ×&Ñ&Ø×&Ñ&ñ€Iñ
 (¨Ô/Ó0Ò/˜�fŒfÑ/€FÐ0ØÒ%Ó%Ð%Ð%Ø$-×$5Ñ$5°fÔ$=Ó>Ò$=˜q˜”dÑ$=€NÐ>ØÓ#Ð#Ñ#ùò 1ùâ>s   ÁBÁ;Bc                 ó8  • S/nS/n[        U5      n[        U5      n[        U UR                  UR                  S9nU" S5       Vs/ s H  ofR
                  PM     nnUSS/:X  d   eUR                  S5       Vs/ s H  ofS   PM	     nnXx:X  d   eg s  snf s  snf )Nô   Â±Ú%)rq   rp   u   Â±10%u   Â±10rL   )r	   r   r   ru   rt   r/   r  )	r  Úinfixesr  rw   rz   r7   r2   r1   r  s	            r   Útest_tokenizer_infix_prefixr$    s«   € àˆf€GØˆu€HÜ" 7Ó+€HÜ$ XÓ.€IÜØØ×(Ñ(Ø×&Ñ&ñ€Iñ
 (¨Ô0Ó1Ò0˜�fŒfÑ0€FÐ1Ø�f˜c�]Ó"Ð"Ð"Ø$-×$5Ñ$5°gÔ$>Ó?Ò$>˜q˜”dÑ$>€NÐ?ØÓ#Ð#Ñ#ùò 2ùâ?s   ÁBÁ:Bif'  c                 ó.  • SnSU l         U " U5      nSU Vs/ s H  o3R                  PM     sn;   d   eSU Vs/ s H  o3R                  PM     sn;   d   eSU l         U " U5      nSU Vs/ s H  o3R                  PM     sn;   d   egs  snf s  snf s  snf )z5Test special case works when part of infix substring.zNo--don't seeFzn'tÚdoTzdon'tN)Úfaster_heuristicsr/   )r0   r/   r   r9   s       r   Útest_issue10086r(    s›   € ð €Dð &+€LÔ"Ù
�tÓ
€CØ¡SÓ)¢S —V”V¡SÑ)Ó)Ð)Ð)Ø¡CÓ(¢C˜q—F”F¡CÑ(Ó(Ð(Ð(ð &*€LÔ"Ù
�tÓ
€CØ¡sÓ+¢s !—v”v¡sÑ+Ó+Ð+Ñ+ùò *ùÚ(ùò
 ,s   —B¹BÁ*Bc                 ó  • [        U [        R                  " S5      R                  SSS0SS0/0S9nU" S5       Vs/ s H  o"R                  PM     nnUR                  S5       Vs/ s H  o"S   PM	     nnX4:X  d   eg s  snf s  snf )Nz^id$Úidr   ÚiÚd)rr   r  rL   )r   r~   r   rv   r/   r  )r  r7   r2   r1   r  s        r   Ú+test_tokenizer_initial_special_case_explainr-  #  s‹   € ÜØÜ—J’J˜vÓ&×,Ñ,à�F˜C�= 6¨3 -Ð0ð
ñ€Iñ (¨œoÓ.šo˜�fŒf™o€FÐ.Ø$-×$5Ñ$5°dÔ$;Ó<Ò$;˜q˜”dÑ$;€NÐ<ØÓ#Ð#Ñ#ùò /ùÚ<s   ¼A>Á&B)Er~   rA   rh   Úspacy.lang.der   Úspacy.lang.enr   Úspacy.symbolsr   Úspacy.tokenizerr   Úspacy.tokensr   Úspacy.trainingr   Ú
spacy.utilr	   r
   r   r   Úspacy.vocabr   ÚmarkÚissuer   ÚskipÚparametrizer3   r:   rH   rS   rX   rc   rl   r€   r‹   r�   r›   rž   r©   r­   r¯   r¹   rÀ   rÃ   rÈ   rÌ   rÎ   rÕ   rØ   rÚ   rÜ   rÞ   rë   rï   rõ   rù   rý   r  r	  r  r  r  r  r  r  r$  r(  r-  r�   r   r   Ú<module>r:     sÐ  ðÛ 	ã Û å  Ý !Ý Ý %Ý Ý "÷ó õ ð ‡�×Ñ�3Óñó ðð ‡�×Ñ�3ÓØ‡�×ÑØRð ð ð ‡�×ÑØà	Ò;Ð<Ø	 Ò"CÐDØ	Ò)Ð*Ø	Ò;Ð<Ø	Ò3Ð4Ø	Ò ?Ð@Ø	Ò=Ð>ðóñ+óóó ð +ð ‡�×Ñ�4Óñ/ó ð/ð* ‡�×Ñ�4Óñ(ó ð(ð ‡�×ÑØVð ð ð ‡�×Ñ�4Óñ
ó óð
ð ‡�×Ñ�4Óñó ðð ‡�×Ñ�4Óñ"ó ð"ð ‡�×Ñ�4Óñ&ó ð&ð ‡�×Ñ�4Óñó ðð0 ‡�×Ñ�4Óñ?ó ð?ð$ ‡�×ÑØWð ð ð ‡�×Ñ�4Óñ	ó óð	ð ‡�×Ñ�4Óñ#ó ð#ð  ‡�×ÑØ
ð 	Cð 	cðóð ‡�×Ñ�4Óñó óðð ‡�×Ñ�4Óñó ðð& ‡�×Ñ�4Óñó ðð ‡�×Ñ�4Óñó ðð ‡�×ÑÐVÐÐWØ‡�×Ñ�4Óñó ó Xðð ‡�×ÑØ�GÒ1Ð2°U¸U¸GÐ4DÐEóñ-óð-ò
ð
 ‡�×Ñ˜ ' Ó+ñ"ó ,ð"ò
%òò(ð ‡�×ÑØ
ÚUóñó	ðð
 ‡�×Ñ˜ - Ó1ñó 2ðð
 ‡�×ÑØ
ÒNóñóðò
ð ‡�×Ñ˜ y kÓ2ñó 3ðò&ð ‡�×Ñ˜¨'°V¸T°NÀVÈUÀOÐ3TÐ)UÐ(VÓWñ,ó Xð,ð ‡�×ÑØà	�F˜D�> F¨D >Ð2Ð3Ø	˜D¨Ñ-°¸¨Ð?Ð@ðóñ1óð1ð
 ‡�×ÑØ�W¨°dÑ;¸fÀe¸_ÐMÐNÐOóñ,óð,òò((ò ?òò=ò7ò
Cò$ò"$ð" ‡�×Ñ�5Óñ,ó ð,ó 
$r   