
    ht                        S SK r S SKJr  S SKJr  S SKJrJrJr  SSK	J
r
  \ R                  S 5       rS rS	 rS
 rS rS rS rS rS rS rS r\ R.                  R1                  SSSSS00SS0//0S/4SSSS00//0S/4SSS00//SSS00SS0//SSS00//S./ SQ4SSS 00//SS!S 00//S".S#/4/5      S$ 5       r\ R.                  R1                  S%S&S'/5      S( 5       rS) r\ R.                  R1                  S*\" S+S,5      5      S- 5       r\ R.                  R1                  S*\" S+S.5      5      S/ 5       r\ R.                  R1                  S0S1S2/5      \ R.                  R1                  S%S&S'/5      S3 5       5       rS4 r S5 r!S6 r"S7 r#S8 r$S9 r%S: r&\ R.                  RO                  S;5      S< 5       r(S= r)S> r*S? r+S@ r,SA r-SB r.SC r/SD r0SE r1SF r2\ R.                  R1                  SGSHSISJ/4SKSL/4SMSI/4SNSJ/4SOSISL/4SPSLSJ/4/5      SQ 5       r3SR r4SS r5ST r6SU r7\ R.                  R1                  SVSWSX0/SI4SYSX0/SI4SZSX0/S[4S\SX0/SI4S]SX0/S^4S_SX0/S`4SaSX0/Sb4ScSX0/Sd4SeSX0/Sf4SgSX0/Sh4SiSX0/Sj4SkSX0/Sl4SmSX0/Sn4SoSX0/Sn4SpSX0/S[4SqSX0/Sr4SsSX0/St4/5      Su 5       r8\ R.                  Rs                  Sv5      Sw 5       r:Sx r;Sy r<Sz r=S{ r>S| r?S} r@S~ rAS rBS rCg)    N)Mock)Matcher)DocSpanToken   )clean_underscorec                     SS0//SS0SS0//SS0//S.n[        U 5      nUR                  5        H  u  p4UR                  X45        M     U$ )NORTH
JavaScriptGoogleNowLOWERjavaJS	GoogleNowJava)r   itemsadd)en_vocabrulesmatcherkeypatternss        ^/home/james-whalen/.local/lib/python3.13/site-packages/spacy/tests/matcher/test_matcher_api.pyr   r   
   sj     &'()FE?;<F#$%E
 hGC" 'N    c                 F   [        U 5      nSS0/n[        U5      S:X  d   eUR                  SU/5        [        U5      S:X  d   eUR                  S5        SU;  d   eUR                  SU/5        SU;   d   eUR	                  S5      u  p4[        US   5      (       d   eg )Nr   testr   Rule   )r   lenr   removeget)r   r   patternon_matchr   s        r   test_matcher_from_api_docsr'      s    hG Gw<1KK	"w<1NN6   KK	"W V,Hx{r   c                    [        U 5      n[        U5      S:X  d   e[        U / SQS9n[        R                  " [
        5         U" U5        S S S 5        [        UR                  5      S:X  d   eg ! , (       d  f       N*= f)Nr   )Thisisquite	somethingwords)r   r"   r   pytestwarnsUserWarningents)r   r   docs      r   !test_matcher_empty_patterns_warnsr4   %   sb    hGw<1
hB
CC	k	" 
#sxx=A 
#	"s   	A00
A>c                    Sn[        XR                  S5      S9n/ SQnU Vs/ s H  nSU0/PM
     nnS n[        U 5      nUR                  SXVS9  U" U5        UR                  S	:w  d   eUS
   R
                  S:X  d   eg s  snf )Nu'   Wow 😀 This is really cool! 😂 😂 r-   )u   😀u   😃u   😂u   🤣u   😊u   😍r   c                 8   X2   u  pEnUR                   R                  U   S:X  a  U=R                  S-  sl        XU nUR                  5        nUR	                  U5        S S S 5        X   n	SU	R                   U	R
                     l        g ! , (       d  f       N1= f)NHAPPYg?happy emoji)vocabstrings	sentiment
retokenizemergetextnorm_)
r   r3   imatchesmatch_idstartendspanretokenizertokens
             r   label_sentiment5test_matcher_from_usage_docs.<locals>.label_sentiment4   s    &z99X&'1MMS M~^^d# 
(5EJJ% s   B
Br8   r&   r   r!   r9   )r   splitr   r   r<   r@   )r   r?   r3   	pos_emojiemojipos_patternsrI   r   s           r   test_matcher_from_usage_docsrP   .   s    4D
hjjo
.C@I3<=9%fe_%9L=6 hGKKK@CL==Aq6<<=(((! >s   Bc                 r    [        U 5      S:X  d   eU R                  SSS0//5        SU ;   d   eSU ;  d   eg )N   TESTr   r   TEST2)r"   r   )r   s    r   test_matcher_len_containsrU   E   sI    w<1KK66*+,-W'!!!r   c                 d   [        U SS/S9nSS0/SS0SS0//n[        U 5      n[        5       n[        U 5      nUR                  SU5        [	        U" U5      5      S:X  d   e[        U 5      n[        5       nUR                  SX$S9  [	        U" U5      5      S:X  d   eUR
                  S:X  d   eg )	Nabr-   TEXTNEW_APIr   NEW_API_CALLBACKrK   )r   r   r   r   r"   
call_count)r   r3   r   r   r&   s        r   test_matcher_add_new_apir]   L   s    
hsCj
)C#63-&#!?@HhGvHhGKK	8$ws|!!!hGvHKK"HK@ws|!!!!###r   c                 L    [        U R                  / SQS9nU " U5      / :X  d   eg )N)Ilikecheese.r-   )r   r:   r   r3   s     r   test_matcher_no_matchrd   [   s%    
gmm#?
@C3<2r   c                     [        U R                  / SQS9nU " U5      U R                  R                  S   SS4/:X  d   eg )N)r   r*   goodr-   r   r   r!   r   r:   r;   rc   s     r   test_matcher_match_startrh   `   s>    
gmm#?
@C3<W]]2248!Q?@@@@r   c                     / SQn[        U R                  US9nU " U5      UR                  R                  S   SS4/:X  d   eg )N)r_   r`   r   r-   r   r   rR   rg   r   r.   r3   s      r   test_matcher_match_endrk   e   sB    !E
gmm5
)C3<SYY..v61=>>>>r   c                     / SQn[        U R                  US9nU " U5      UR                  R                  S   SS4/:X  d   eg )N)r_   r`   r   r   bestr-   r   r      rg   rj   s      r   test_matcher_match_middlero   k   sB    2E
gmm5
)C3<SYY..{;QBCCCCr   c                     / SQn[        U R                  US9nU " U5      UR                  R                  S   SS4UR                  R                  S   SS4/:X  d   eg )	N)r_   r`   r   r   andr   rm   r-   r   r   rn   r         rg   rj   s      r   test_matcher_match_multirt   q   sd    AE
gmm5
)C3<			;	'A.			6	"Aq)   r   zrules,match_locsr   r   FUZZYr   r   r   rn   r   r   r   rr   rs   r   r   )rv   rw      	   JavascriptsFUZZY5)ABrx   c           	          / SQn[        XS9n[        U 5      nUR                  5        H  u  pgUR                  Xg5        M     X%" U5       VV	V
s/ s H	  u  poU
4PM     sn
n	n:X  d   eg s  sn
n	nf )N)	Theyr`   Goggler   rq   Javbutnot	JvvaScrptr-   )r   r   r   r   )r   r   
match_locsr.   r3   r   r   r   m_idrD   rE   s              r   test_matcher_match_fuzzyr   z   sh    F WE
h
$ChGC" 'ws|L|+;4#,|LLLLLs   A*
set_opINNOT_INc                     SSUSS/00SS.//0n[        U 5      nUR                  5        H  u  pEUR                  XESS9  M     / S	Qn[        XS
9n[	        U" U5      5      S:X  d   eg )Nr   ru   r   r   +r   OPLONGESTgreedyr   r`   r   Noor-   r!   )r   r   r   r   r"   )r   r   r   r   r   r   r.   r3   s           r   'test_matcher_match_fuzzy_set_op_longestr      s     	6He3D*E FcRSTE hGC)4 ' .E
h
$Cws|!!!r   c                    SSSS/0S/S.SS.//0n[        U 5      nUR                  5        H  u  p4UR                  X4S	S
9  M     / SQn[        UR                  US9nU" U5      UR                  R
                  S   SS4/:X  d   eg )Nr   r   r   r   r   )ru   r   r   r   r   r   r   r-   rR   rn   r   r   r   r   r:   r;   r   r   r   r   r   r.   r3   s          r   %test_matcher_match_fuzzy_set_multipler      s     (,h->&?H:V
	E hGC)4 ' .E
gmm5
)C3<			;	'A.   r   fuzzynr!   
   c                     [        U 5      nUR                  SSSU 3S00//5        [        SS5       Vs/ s H  nSSU-  -   PM     nn[        X5      n[	        U" U5      5      US-   :X  d   eg s  snf )Nr   r   ru   r   r   rW   r!   )r   r   ranger   r"   )r   r   r   rA   r.   r3   s         r   (test_matcher_match_fuzzyn_all_insertionsr      s~    hGKK5)9;(GHIJK,1!RL9Lq[37"LE9
h
Cws|
*** :s   A/rs   c                     [        U 5      nUR                  SSSU 3S00//5        / SQn[        X5      n[        U" U5      5      US-   :X  d   eg )Nr   r   ru   )r   	GoogleNuw
GoogleNuewGoogleNoweee
GiggleNuw3gouggle5Newr!   r   r   r   r"   )r   r   r   r.   r3   s        r   'test_matcher_match_fuzzyn_various_editsr      s_    hGKK5)9;(GHIJKE h
Cws|
***r   r   FIRSTr   c                 L   SSUSS/00SS.//0n[        U 5      nUR                  5        H  u  pVUR                  XVUS9  M     / SQn[        UR                  US	9nU" US
S9n	[        U	5      S:X  d   eUS:X  a  U	S   R                  S:X  d   eg U	S   R                  S:X  d   eg )Nr   FUZZY2r   r   r   r   r   r   r-   Tas_spansr!   r   r   z
Goggle Nooz	They like)r   r   r   r   r:   r"   r?   )
r   r   r   r   r   r   r   r.   r3   spanss
             r   (test_matcher_match_fuzzyn_set_op_longestr      s     	FXu4E+F GsSTUE hGC&1 ' .E
gmm5
)CC$'Eu:??~Qx}},,,Qx}}+++r   c                    SSSS/0S/S.SS.//0n[        U 5      nUR                  5        H  u  p4UR                  X4S	S
9  M     / SQn[        UR                  US9nU" U5      UR                  R
                  S   SS4/:X  d   eg )Nr   r   r   r   r   )FUZZY1r   r   r   r   r   r   r-   rR   rn   r   r   s          r   &test_matcher_match_fuzzyn_set_multipler      s     )-x.?'@XJW
	E hGC)4 ' .E
gmm5
)C3<			;	'A.   r   c                 8   [        U 5      n[        UR                  / SQS9nUR                  SSS00 SS0//5        U" U5      n[	        U5      S:X  d   eUS   SS	 S
:X  d   e[        U 5      nUR                  SSS00 //5        U" U5      nUS   SS	 S:X  d   eg	)zBTest matcher allows empty token specs, meaning match on any token.rW   rX   cr-   A.Cr   rW   r   r!   r   Nr   rR   zA.)r   r   r   r   r:   r   r"   )r   r   r3   rB   s       r   test_matcher_empty_dictr     s    hG
gmm?
3CKK&#VSM:;<clGw<11:ab>V###hGKKr*+,clG1:ab>V###r   c                     [        U 5      n[        UR                  / SQS9nSS0SSS.SS0/nUR                  S	U/5        U" U5      n[	        U5      S
:X  d   eUS   S
S  S:X  d   eg )Nr   r-   r   rW   Tr   )IS_ALPHAr   r   r   r!   r   r   r   )r   r   r3   r%   rB   s        r   test_matcher_operator_shadowr     sx    hG
gmm?
3C}4s;fc]KGKKy!clGw<11:ab>V###r   c                    SR                  5       nSR                  5       nSS0SSS.SSS.SS0/nSS0SS0SS0SS0SS0/nU R                  S	U/5        [        U R                  US
9n[	        U " U5      5      S:X  d   e[        U R                  US
9n[	        U " U5      5      S:X  d   eU R                  S	U/5        [	        U " U5      5      S:X  d   eg )NHe said , " some words " ...z"He said , " some three words " ...r   "!Tr   IS_PUNCTr   Quoter-   r!   r   )rL   r   r   r:   r"   )r   words1words2pattern1pattern2r3   s         r   test_matcher_match_zeror   '  s    +113F1779F	%%		H 
	T	T	T	H KK($
gmm6
*Cws|!!!
gmm6
*Cws|!!!KK($ws|!!!r   c                     SR                  5       nSS0SSS.SS0/n[        U R                  5      n U R                  SU/5        [	        U R                  US9n[        U " U5      5      S	:X  d   eg )
Nr   r   r   *Fr   r   r-   r!   )rL   r   r:   r   r   r"   )r   r.   r%   r3   s       r   test_matcher_match_zero_plusr   @  sn    *002E}Se<vsmLGgmm$GKK'#
gmm5
)Cws|!!!r   c                 "   [        U R                  5      nUR                  SSS0//5        [        UR                  SS/S9nU" U5      n[	        U5      S:X  d   eSS0SSS./nU R                  SU/5        U " U5      n[	        U5      S	:X  d   eg )
NBasicPhilipper   Philipper-   r   r   r   KleenePhilipper!   )r   r:   r   r   r"   )r   controlr3   mr%   s        r   test_matcher_match_one_plusr   I  s    gmm$GKKFJ#7"8!9:
gmmJ
#;
<CAq6Q;;
#j%DEGKK 7),Aq6Q;;r   c                 *   [        U 5      nUR                  SSS0SS0//5        [        U / SQS9nU" U5       VVVs/ s H  u  p4oRXE R                  PM     nnnn[	        U5      S:X  d   eUS	   S:X  d   eUS
   S:X  d   eUS   S:X  d   egs  snnnf )z;Test that patterns with "any token" {} work with operators.rS   r   r   r   r   )r   helloworldr-   rR   r   r!   z
test hellor   ztest hello worldN)r   r   r   r?   r"   )r   r   r3   _rD   rE   rB   s          r   test_matcher_any_token_operatorr   U  s    hGKK66*T3K89:
h8
9C8?E}q5~""GEw<11:1:%%%1:++++	 Fs   Br	   c                    [        U 5      nS n[        R                  " SUSS9  SS0SSS00/nUR                  SU/5        [	        U SS	/S
9nU" U5      n[        U5      S:X  d   e[	        U SS/S
9nU" U5      n[        U5      S:X  d   eg )Nc                      U R                   S;   $ )N)applebanana)r?   rH   s    r   <lambda>2test_matcher_extension_attribute.<locals>.<lambda>d  s    /B!Br   is_fruitTgetterforcer   anr   HAVING_FRUITr   r-   r!   aardvarkr   r   r   set_extensionr   r   r"   )r   r   get_is_fruitr%   r3   rB   s         r    test_matcher_extension_attributer   a  s    hGBL	
<tD~j$%789GKK	*
htWo
.CclGw<1
htZ0
1CclGw<1r   c                     [        U 5      nSSSS/00/nUR                  SU/5        [        U / SQS9nU" U5      n[        U5      S:X  d   e[        U S	/S9nU" U5      n[        U5      S
:X  d   eg )Nr   r   r   rW   A_OR_AN)r   rW   r   r-   r   r   r   r   r   r   r%   r3   rB   s        r   test_matcher_set_valuer   p  s    hGc{+,-GKK	G9%
h2
3CclGw<1
hzl
+CclGw<1r   c                     [        U 5      nSSS/0SS.SS0/nUR                  SU/5        [        U / S	QS
9nU" U5      n[        U5      S:X  d   e[        U SS/S
9nU" U5      n[        U5      S:X  d   eg )Nr   rW   the?r   r   house	DET_HOUSE)InrW   r   r-   r   myr!   r   r   s        r   test_matcher_set_value_operatorr   |  s    hGU|,C867:KLGKKgY'
h2
3CclGw<1
htWo
.CclGw<1r   c                 T   [        U 5      nSSSS/00/nUR                  SU/5        [        U / SQS9n[        U" U5      5      S:X  d   eUS	   R	                  S5        [        U" U5      5      S:X  d   eUS	   R	                  S
5        [        U" U5      5      S:X  d   eUS	   R	                  S5        [        U" U5      5      S:X  d   eUS	   R	                  S5        [        U" U5      5      S:X  d   e[        U 5      nSSSS/00/nUR                  SU/5        [        U / SQS9nSUS	   l        [        U" U5      5      S:X  d   e[        U 5      nSS/ 00/nUR                  SU/5        [        U / SQS9nSUS	   l        [        U" U5      5      S	:X  d   e[        R                  " S/ S9  [        U 5      nSSSSS/000/nUR                  SU/5        [        U / SQS9nS/US	   R                  l	        SS/US   R                  l	        [        U" U5      5      S:X  d   eg )NMORPH	IS_SUBSETFeat=Val
Feat2=Val2Mr   r-   rR   r   Feat=Val|Feat2=Val2Feat=Val|Feat2=Val2|Feat3=Val3r   )Feat=Val|Feat2=Val2|Feat3=Val3|Feat4=Val4TAGr}   r~   r!   extdefaultr   CD
r   r   r   r"   	set_morphtag_r   r   r   r   r   r   r%   r3   s       r   "test_matcher_subset_value_operatorr    sG   hG+
L'ABCDGKKgY
ho
.Cws|!!!FZ ws|!!!F*+ws|!!!F56ws|!!!F@Aws|!!! hGc3Z012GKKgY
ho
.CCFKws|!!! hGR()*GKKgY
ho
.CCFKws|!!! 
r*hGekC:6789GKKgY
ho
.C5CFHHL:CFHHLws|!!!r   c                 x   [        U 5      nSS/ SQ00/nUR                  SU/5        [        U / SQS9n[        U" U5      5      S:X  d   eUS   R	                  S5        [        U" U5      5      S:X  d   eUS   R	                  S	5        [        U" U5      5      S
:X  d   eUS   R	                  S5        [        U" U5      5      S
:X  d   e[        U 5      nSSSS/00/nUR                  SU/5        [        U / SQS9nSUS   l        [        U" U5      5      S:X  d   e[        U 5      nSSS/00/nUR                  SU/5        [        U / SQS9nSUS   l        [        U" U5      5      S
:X  d   e[        U 5      nSS/ 00/nUR                  SU/5        [        U / SQS9nSUS   l        [        U" U5      5      S:X  d   e[        R                  " S/ S9  [        U 5      nSSSS/000/nUR                  SU/5        [        U / SQS9nSS/US   R                  l	        [        U" U5      5      S
:X  d   eg )Nr   IS_SUPERSETr   r   z
Feat3=Val3r   r   r-   r   r   r   r!   r   r   r}   r~   rR   r   r   r   r  r  s       r   $test_matcher_superset_value_operatorr    se   hG-)QRSTGKKgY
ho
.Cws|!!!F*+ws|!!!F56ws|!!!F@Aws|!!! hGSz234GKKgY
ho
.CCFKws|!!! hGu-./GKKgY
ho
.CCFKws|!!! hGr*+,GKKgY
ho
.CCFKws|!!! 
r*hGemcU3456GKKgY
ho
.C:CFHHLws|!!!r   c                    [        U 5      nSS/ SQ00/nUR                  SU/5        [        U / SQS9n[        U" U5      5      S:X  d   eUS   R	                  S5        [        U" U5      5      S	:X  d   eUS   R	                  S
5        [        U" U5      5      S	:X  d   eUS   R	                  S5        [        U" U5      5      S	:X  d   eUS   R	                  S5        [        U" U5      5      S	:X  d   e[        U 5      nSSSS/00/nUR                  SU/5        [        U / SQS9nSUS   l        [        U" U5      5      S	:X  d   e[        U 5      nSS/ 00/nUR                  SU/5        [        U / SQS9nSUS   l        [        U" U5      5      S:X  d   e[        R                  " S/ S9  [        U 5      nSSSSS/000/nUR                  SU/5        [        U / SQS9nSS/US   R                  l	        [        U" U5      5      S	:X  d   e[        U 5      nSSSSS/000/nUR                  SU/5        [        U / SQS9nS/S/US   R                  l	        [        U" U5      5      S:X  d   eSS/US   R                  l	        [        U" U5      5      S	:X  d   e[        U 5      nSSS/ 000/nUR                  SU/5        [        U / SQS9nSS/US   R                  l	        [        U" U5      5      S:X  d   e[        U 5      nSSSSS/000/nUR                  SU/5        [        U / SQS9n/ US   R                  l	        [        U" U5      5      S:X  d   eg )Nr   
INTERSECTSr
  r   r   r-   r   r   r!   r   r   r   r   r}   r~   r   r   r   r  Abxr  r  s       r   %test_matcher_intersect_value_operatorr    s   hG,(PQRSGKKgY
ho
.Cws|!!!FZ ws|!!!F*+ws|!!!F56ws|!!!F@Aws|!!! hGsCj123GKKgY
ho
.CCFKws|!!! hGb)*+GKKgY
ho
.CCFKws|!!! 
r*hGelS#J789:GKKgY
ho
.C:CFHHLws|!!! hGelUCL9:;<GKKgY
ho
.CGS>CFHHLws|!!!3<CFHHLws|!!! hGelB/012GKKgY
ho
.C:CFHHLws|!!! hGelS#J789:GKKgY
ho
.CCFHHLws|!!!r   c                    [        U 5      nSSS/00/nSSS/00/nUR                  SU/5        UR                  SU/5        [        U / SQS9n[        U" U5      5      S	:X  d   eUS	   R	                  S5        [        U" U5      5      S
:X  d   eUS	   R	                  S5        [        U" U5      5      S
:X  d   e[        U 5      nSSSS/00/nSS/ SQ00/nUR                  SU/5        UR                  SU/5        [        U / SQS9n[        U" U5      5      S	:X  d   eUS	   R	                  S5        [        U" U5      5      S:X  d   eUS	   R	                  S5        [        U" U5      5      S
:X  d   eg )Nr   r   zFeat1=Val1|Feat2=Val2zFeat2=Val2|Feat1=Val1r   Nr   r-   r   r   r	  
Feat1=Val1r   )r  z
Feat1=Val3r   zFeat2=Val2,Val3|Feat1=Val1r!   zFeat1=Val1,Val3|Feat2=Val2)r   r   r   r"   r  )r   r   r   r   r3   s        r   test_matcher_morph_handlingr  $  s   hG4"9!:;<=H4"9!:;<=HKKhZ KKhZ 
ho
.Cws|!!!F,-ws|!!!F,-ws|!!! hG=<*FGHIH=*TUVWHKKhZ KKhZ 
ho
.Cws|!!!F12ws|!!!F12ws|!!!r   c                     [        U 5      nSSS00/nUR                  SU/5        [        U / SQS9nU" U5      n[        U5      S:X  d   e[        U S/S9nU" U5      n[        U5      S	:X  d   eg )
Nr   REGEXz(?:a|an)r   r   rW   hir-   r   byer   r   r   s        r   test_matcher_regexr  B  s    hG+./0GKK	G9%
h/
0CclGw<1
hug
&CclGw<1r   c                     [        U 5      nSSSSS/000/nUR                  SU/5        [        U / SQS9nU" U5      n[        U5      S	:X  d   e[        U S
/S9nU" U5      n[        U5      S:X  d   eg )Nr   r  r   (?:a)(?:an)r   r  r-   r   r  r   r   r   s        r   test_matcher_regex_set_inr  N  s    hG4(I)>"?@ABGKK	G9%
h/
0CclGw<1
hug
&CclGw<1r   c                     [        U 5      nSSSSS/000/nUR                  SU/5        [        U / SQS9nU" U5      n[        U5      S	:X  d   e[        U S
/S9nU" U5      n[        U5      S	:X  d   eg )Nr   r  r   r  r  r   r  r-   r!   r  r   r   s        r   test_matcher_regex_set_not_inr  Z  s    hG8h	-B"CDEFGKK	G9%
h/
0CclGw<1
hug
&CclGw<1r   c                     [        U 5      nSSS00/nUR                  SU/5        [        U / SQS9nU" U5      n[        U5      S:X  d   e[        U S/S9nU" U5      n[        U5      S	:X  d   eg )
NSHAPEr  z^[^x]+$	NON_ALPHA)99problemsr   r-   r   r  r   r   r   s        r   test_matcher_regex_shaper%  f  s    hG':./0GKKgY'
h5
6CclGw<1
hug
&CclGw<1r   zcmp, badz==rW   aaaz!=aaz>=z<=><c                    [        U 5      nSUS00/nUR                  SU/5        [        U / SQS9nU" U5      n[        U5      [        U5      [        U5      -
  :X  d   e[        XS9nU" U5      n[        U5      S:X  d   eg )NLENGTHr   LENGTH_COMPARE)rW   r'  r&  r-   r   r   )r   cmpbadr   r%   r3   rB   s          r   test_matcher_compare_lengthr/  r  s     hG3(#$GKK 7),
h0
1CclGw<3s8c#h....
h
"CclGw<1r   c                    [        U 5      nS n[        R                  " SUSS9  SSSSS/000/nUR                  S	U/5        [	        U / S
QS9nU" U5      n[        U5      S:X  d   e[	        U S/S9nU" U5      n[        U5      S:X  d   eg )Nc                 J    SR                  [        U R                  5      5      $ )N )joinreversedr?   r   s    r   r   7test_matcher_extension_set_membership.<locals>.<lambda>  s    %**)=!>r   r4  Tr   r   r   eybihREVERSED)r  r  r   r-   r   r   r   r   )r   r   get_reversedr%   r3   rB   s         r   %test_matcher_extension_set_membershipr:    s    hG>L	
<tDj4%"789:GKK
WI&
h4
5CclGw<1
hzl
+CclGw<1r   c                    [        U 5      n[        R                  " S/ S9  SSSSS/000/nUR                  SU/5        [	        U / SQS	9nSS
/US   R
                  l        [        U" U5      5      S:X  d   eS/US   R
                  l        [        U" U5      5      S:X  d   eSUS   R
                  l        [        U" U5      5      S:X  d   eg )Nr   r   r   r   r}   r  r   r   r-   r~   r   r!   )r   r   r   r   r   r   r   r"   r  s       r   'test_matcher_extension_in_set_predicater<    s    hG	r*edS#J/012GKKgY
ho
.C :CFHHLws|!!!5CFHHLws|!!!CFHHLws|!!!r   c                     [        U 5      nSS0SS0/n[        R                  " [        5         UR	                  SU5        S S S 5        g ! , (       d  f       g = f)NrY   r   r   rS   )r   r/   raises
ValueErrorr   )r   r   r%   s      r   test_matcher_basic_checkr@    sF    hG 67"34G	z	"FG$ 
#	"	"s   A


Ac                 \   [        U S/S9nSUS   l        [        U S/S9nSUS   l        SUS   l        US   R	                  S5        SUS   l        [        U S/S9n[        U 5      nUR                  S	S
S0//5        U" U5        [        R                  " [        5         U" U5        S S S 5        [        R                  " [        5         U" U5        S S S 5        U" USS9  U" USS9  S H  n[        U 5      nUR                  S	US0//5        U" U5        [        R                  " [        5         U" U5        S S S 5        [        R                  " [        5         U" U5        S S S 5        M     [        U 5      nUR                  S	SS0//5        U" U5        U" U5        U" U5        [        U 5      nUR                  S	SS0//5        U" U5        U" U5        U" U5        g ! , (       d  f       GNC= f! , (       d  f       GN*= f! , (       d  f       N= f! , (       d  f       GM>  = f)NTestr-   ROOTr   r   Xr   LEMMArS   DEPrW   T)allow_missing)r   POSrE  r   rY   )r   dep_r  pos_r  lemma_r   r   r/   r>  r?  )r   doc1doc2doc3r   attrs         r   test_attr_pipeline_checksrP    s   xx(DDGLxx(DDGLDGLGj!DGNxx(DhGKK5#,()DM	z	" 
#	z	" 
# D%D%'(#FtSk]O,]]:&DM ']]:&DM '& ( hGKK63-)*DMDMDMhGKK63-)*DMDMDM5 
#	"	"	" '&&&s0   !	G&	G83	H
	H&
G58
H

H	
H+	zpattern,textr   TIS_ASCIIIS_DIGIT1IS_LOWERIS_UPPERr}   IS_TITLEAaaar   rb   IS_SPACE

IS_BRACKET[IS_QUOTEr   IS_LEFT_PUNCTz``IS_RIGHT_PUNCTz''IS_STOPr   SPACYLIKE_NUMLIKE_URLzhttp://example.com
LIKE_EMAILzmail@example.comc                     [        U 5      n[        XR                  S5      S9nUR                  SU/5        [	        U5      S:X  d   eU" U5      n[	        U5      S:X  d   eg )Nr6   r-   r    r!   )r   r   rL   r   r"   )r   r%   r?   r   r3   rB   s         r   $test_matcher_schema_token_attributesre    s]    . hG
hjjo
.CKK	"w<1clGw<1r   zignore:\[W036c                     [        U 5      n[        R                  " [        5         UR	                  SSS0/// S9  SSS5        U" [        U S/S95        g! , (       d  f       N = f)z0Test that on_match can only be None or callable.rS   rY   r   rK   Nr-   )r   r/   r>  r?  r   r   )r   r   s     r   test_matcher_valid_callbackrg    sV     hG	z	"Fvv./02> 
#C)* 
#	"s   A
A$c                     [        5       n[        U 5      nSS0/nUR                  SU/US9  [        U / SQS9nU" U5      nUR	                  X$SU5        g )Nr   r   r    rK   r)   r*   rW   r   rb   r-   r   r   r   r   r   assert_called_once_withr   mockr   r%   r3   rB   s         r   test_matcher_callbackrn    s\    6DhG GKK	DK1
h>
?CclG  q':r   c                     [        5       n[        U 5      nSS0/nUR                  SU/US9  [        U / SQS9nU" USS9nUR	                  X$S	U5        g )
Nr   r   r    rK   ri  r-   T)with_alignmentsr   rj  rl  s         r   %test_matcher_callback_with_alignmentsrq    s_    6DhG GKK	DK1
h>
?Cc40G  q':r   c                     Sn[        U R                  UR                  5       S9nUS S nUSS  n[        U " U5      5      S:X  d   e[        U " U5      5      S:X  d   e[        U " U5      5      S:X  d   eg )N%JavaScript is good but Java is betterr-   rR   rn   r   r!   )r   r:   rL   r"   )r   r?   r3   span_js	span_javas        r   test_matcher_spanrv    sz    2D
gmm4::<
0C"1gGABIws|!!!ww A%%%wy!"a'''r   c                 J   Sn[        U R                  UR                  5       S9nU " USS9n[        U5      S:X  d   e[	        US   [
        5      (       d   eUS   R                  S:X  d   eUS   R                  S:X  d   e[	        US	   [
        5      (       d   eUS	   R                  S
:X  d   eUS	   R                  S
:X  d   eU " US	S SS9n[        U5      S	:X  d   e[	        US   [
        5      (       d   eUS   R                  S
:X  d   eUS   R                  S
:X  d   eg)zTest the new as_spans=True API.rs  r-   Tr   r   r   r   r   r!   r   N)r   r:   rL   r"   
isinstancer   r?   label_)r   r?   r3   rB   s       r   test_matcher_as_spansrz  "  s.   2D
gmm4::<
0CcD)Gw<1gaj$''''1:??l***1:$$$gaj$''''1:??f$$$1:&&&c!"g-Gw<1gaj$''''1:??f$$$1:&&&r   c                 B   [        U R                  SS/S9n[        R                  " [        5       nU R                  U/5       H  nM     UR                  (       d   eS[        UR                  S   R                  5      ;   d   e S S S 5        g ! , (       d  f       g = f)Nr   r   r-   z
spaCy v3.0r   )	r   r:   r/   r0   DeprecationWarningpipeliststrmessage)r   r3   recordr   s       r   test_matcher_deprecatedr  6  sw    
gmmGW#5
6C	(	)Vse$A %{{{s6;;q>#9#9::::	 
*	)	)s   AB
Bc                     [        U 5      nSS0/nUR                  SU/5        [        U / SQS9nU" U5      n[        U5      S:X  d   eSU;   d   eUR	                  S5        SU;  d   eg )Nr   r   r    ri  r-   r   )r   r   r   r"   r#   r   s        r   !test_matcher_remove_zero_operatorr  ?  sw    hGc{mGKK	"
h>
?CclGw<1WNN6   r   c                     [        U SS/SS/S9n[        U 5      nUR                  SSSS	.//5        [        U" U5      5      S
:X  d   eg )NrW   rX   r}   r~   )r.   tagsrS   r  r   )r   r   r   )r   r   r   r"   )r   r3   r   s      r   test_matcher_no_zero_lengthr  K  sR    
hsCjSz
:ChGKK#S1234ws|!!!r   c                 8   [        U 5      nUR                  SSS0//5        [        U / SQS9n[        USSSS	9[        US
SSS	9/Ul        [        U / SQS9n[        USS
SS	9/Ul        U" U5       VVVs/ s H  u  pEobXV R
                  PM     nnnnU" U5       VVVs/ s H  u  pEocXV R
                  PM     nnnn[        U5      S:X  d   eUS   S:X  d   e[        U5      S:X  d   e[        U 5      nUR                  SSSS.//5        [        U / SQS9n	[        U	SSSS	9/U	l        U" U	5       VVVs/ s H  u  pEoiXV R
                  PM     n
nnn[        U
5      S:X  d   eU
S   S:X  d   eU
S   S:X  d   eU
S   S:X  d   egs  snnnf s  snnnf s  snnnf )z0Test that patterns with ent_iob works correctly.r    ENT_IOBr_   )r_   visitedNewYorkrq   
Californiar-   r   rn   GPE)labelrr   rs   )r_   r  r   friendAliciaPERSONr!   r   r  r   )r  r   )r_   r  r   r  AnnaMaria	Esperanza   rR   r  zMaria Esperanzar  N)r   r   r   r   r2   r?   r"   )r   r   rL  rM  r   rD   rE   matches1matches2r3   rB   s              r   test_matcher_ent_iob_keyr  R  s   hGKK9c*+,-xSTDdAq.T1au0MNDIxIJDdAq12DI:A$-H-3U$$-HH:A$-H-3U$$-HHx=AA;&   x=AhGKKc5678
VC S!Qh/0CH8?E}q5~""GEw<11:   1:****1:$$$! IH Fs   5FF6Fc                 L   [        U / SQS9n[        U 5      nSSS./nUR                  SU/5        U" U5       VVVs/ s H  u  pEoaXV R                  PM     nnnn[	        U5      S:X  d   e[        U 5      nSSS./nUR                  SU/5        U" U5       VVVs/ s H  u  pEoaXV R                  PM     nnnn[	        U5      S	:X  d   e[        U 5      nSS
S./nUR                  SU/5        U" U5       VVVs/ s H  u  pEoaXV R                  PM     n	nnn[	        U	5      S:X  d   e[        U 5      nSSS./nUR                  SU/5        U" U5       VVVs/ s H  u  pEoaXV R                  PM     n
nnn[	        U
5      S	:X  d   eg s  snnnf s  snnnf s  snnnf s  snnnf )N)
foobarr  r  r  r  r  r  r  r  r-   r  z{3}r   rS   r!   z{2,}rn   z{,2}rz   z{2,3})r   r   r   r?   r"   )r   r3   r   r%   r   rD   rE   r  r  matches3matches4s              r   test_matcher_min_max_operatorr  m  s   
TC hGU+,GKK	"9@F#E##HFx=A hGV,-GKK	"9@F#E##HFx=A hGV,-GKK	"9@F#E##HFx=A hGW-.GKK	"9@F#E##HFx=A- G G G Gs   F
F;FF)Dr/   rm  r   spacy.matcherr   spacy.tokensr   r   r   doc.test_underscorer	   fixturer   r'   r4   rP   rU   r]   rd   rh   rk   ro   rt   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   usefixturesr   r   r   r  r  r  r  r  r  r  r%  r/  r:  r<  r@  rP  re  filterwarningsrg  rn  rq  rv  rz  r  r  r  r  r   r   r   <module>r     s     ! ) ) 2 	 	)."$
A
?D  ((;<vuoNO H		
 7Wf$5678 H		
  '<!89:; &((;<vuoNO"Wf$5678
 %	
 - 89:;= 9:;< H	
/!DME!DM D(#34
" 5
", 5B<0+ 1+ 5A;/+ 0+  GY#78D(#34, 5 9,$,$$"2"		, +, -		'"T,"^@"F"<				 	U|	v	u	w	sDk	tUm
	
	"&%'T t
	s#t
	s#t
	s#t
	s#t
	s#t
	v&t
	s#t
	t$
	%t
	s#D
!	"D)T
"	#T*d
	e$D/	E"t
	s#t
	34
	!34#,-, ,-+ .+;;('(;	!"%6 r   