
    i-j              	       l   d dl Z d dlZd dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZ d dlmZ d	d
id
ddgZd
ddd	d
igZd	d
id	d
igZd	did
ddd	digZdddd
ddd	digZdZdZdZdZdZdZdZdZ dZ!dZ"ejF                  d        Z$ejF                  d        Z%ejL                  jO                  d      ejL                  jQ                  dddigddiddiggddiddigddiggg      d               Z)ejL                  jO                  d      ejL                  jQ                  dddigddiddiggddiddigddiggg      d               Z*ejL                  jO                  d       d!        Z+ejL                  jO                  d"      d#        Z,ejL                  jO                  d$      d%        Z-ejL                  jO                  d&      d'        Z.ejL                  jO                  d(      d)        Z/ejL                  jO                  d*      d+        Z0ejL                  jO                  d*      d,        Z1ejL                  jO                  d-      d.        Z2ejL                  jQ                  d/g d0      ejL                  jO                  d1      d2               Z3ejL                  jO                  d3      d4        Z4ejL                  jO                  d5      d6        Z5ejL                  jO                  d5      d7        Z6ejL                  jO                  d5      d8        Z7ejL                  jO                  d5      d9        Z8ejL                  jO                  d:      d;        Z9ejL                  jO                  d<      d=        Z:ejL                  jO                  d>      d?        Z;ejL                  jO                  d@      dA        Z<ejL                  jO                  dB      dC        Z=ejL                  jO                  dD      dE        Z>ejL                  j                  dF      ejL                  jO                  dG      dH               Z@ejL                  jO                  dI      dJ        ZAejL                  jO                  dK      dL        ZBejL                  jO                  dM      dN        ZCejL                  jO                  dO      dP        ZDejL                  jQ                  dQeefeefeefeefeefg      dR        ZEejL                  jQ                  dSeefeefee fee!fee"fg      dT        ZFdU ZGdV ZHejL                  jQ                  dQeefeefeefeefeefg      dW        ZIdX ZJejL                  jO                  d1      dY        ZKdZ ZLejL                  j                  d[      d\        ZNd] ZOd^ ZPy)_    N)IS_PUNCTLOWERORTH)MatchPatternError)English)	LEX_ATTRS)Matcher)DocSpanToken)Vocabr   A*r   OPBzAA*zA*AAAzBA*BzB*A*Bz	A A A A AzA AzB A A A A A BzB B A A A A A Bc                       y)Nz(BBAAAAAB). r       w/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/spacy/tests/matcher/test_matcher_logic.pytextr       s    r   c                 4     | dj                  |            }|S )N )join)en_tokenizerr   docs      r   r   r   %   s    
sxx~
&CJr   v   patternsr   celticsbostonc                     d} | |      }|j                   j                  d   }t        |j                         }|j                  d|       t	        t        |j                              dk(  sJ  ||      D cg c]  \  }}}|||f }	}}}|	|ddf|ddfgk(  sJ |	dd	 |_        t        |j                        }
t	        |
      d	k(  sJ |
d   j                  |k(  sJ |
d   j                  dk(  sJ |
d   j                  dk(  sJ yc c}}}w )
5Test a bug that arose from having overlapping matchesLhow many points did lebron james score against the boston celtics last nightORGBostonCelticsr   	      
   N   )
vocabstringsr	   addlenlistentslabelstartendr   r   r   r   r%   matcher_r2   r3   matchesr0   s              r   test_issue118r8   +   s    	W 	 t
C
))

E
"Ccii GKK*tCHH~!###6=clCC]QsUC CGCQ|c2r]3333r{CH>Dt9>>7==C7==A7;;" Ds   :D	c                 <   d} | |      }|j                   j                  d   }t        |j                         }|j                  d|       t	        t        |j                              dk(  sJ  ||      D cg c]  \  }}}|||f }	}}}|xj                  t        |	      dd z  c_        |	|ddf|dd	fgk(  sJ |j                  }
t	        |
      dk(  sJ |
d   j                  |k(  sJ |
d   j                  dk(  sJ |
d   j                  d	k(  sJ yc c}}}w )
r#   r$   r%   r&   r   r*   Nr'   r)   r(   )r+   r,   r	   r-   r.   r/   r0   tupler1   r2   r3   r4   s              r   test_issue118_prefix_reorderr;   G   s$    	W 	 t
C
))

E
"Ccii GKK*tCHH~!###6=clCC]QsUC CGCHHgqr""HQ|c1b\222288Dt9>>7==C7==A7;;" Ds   :D   c                    d}ddiddigddiddigg} | |      }t        |j                        }|j                  d|        ||      D cg c]  \  }}}|||f }}}}|\  }	}
|	d   dk(  sJ |	d	   d
k(  sJ |
d   dk(  sJ |
d	   dk(  sJ t        j                  t
              5  |xj                  t        |      z  c_        ddd       yc c}}}w # 1 sw Y   yxY w)z$Test overlapping multi-word phrases.zAThere are different food safety standards in different countries.r   foodsafety	standardsFOODr*                  N)r	   r+   r-   pytestraises
ValueErrorr0   r:   )r   r   r   r   r5   ent_typer2   r3   r7   match1match2s              r   test_issue242rM   c   s    OD
6	Wh/0
8	w45H t
Ccii GKK!BI#,OO*>(E3%%OGONFF!9>>!9>>!9>>!9>>	z	" # 	E'N"# # P# #s   C(CC iK  c                     | d      }t        |j                        }|j                  dt        dit        digg        ||      }t	        |      dk(  sJ |j                  dt        dit        dit
        dit        digg        ||      }t	        |      d	k(  sJ |j                  d
t        dit        dit
        dit        digg        ||      }t	        |      d	k(  sJ y)z6Test that Matcher doesn't segfault on particular inputza b; cTEST1abr*   TEST2TcrC   TEST3dN)r	   r+   r-   r   r.   r   )r   r   r5   r7   s       r   test_issue587rV   z   s     x
 Ccii GKKD#;s456clGw<1KKD#;sh5Ec{STUclGw<1KKD#;sh5Ec{STUclGw<1r   iL  c                     t        |       }t        j                  t              5  |j	                  dg g       ddd       y# 1 sw Y   yxY w)z=Test if empty specs still cause an error when adding patternsTESTN)r	   rG   rH   rI   r-   )en_vocabr5   s     r   test_issue588rZ      s?     hG	z	" "FRD!" " "s   AAiN  c                     t        | g d      }t        |       }|j                  dddiddiddidd	igg       |j                  dddidd
iddigg        ||      }t        |      dk(  sJ y)zTest overlapping matches)n=1;rP   :5%wordsabIS_ALPHATr   r`   LIKE_NUMrb   r]   rC   N)r
   r	   r-   r.   rY   r   r5   r7   s       r   test_issue590ri      s     hF
GChGKKT"VSMJ3EPS}UV KKT*VSMJ;MNOPclGw<1r   ig  c                     d }d}ddiddig}d} | |      }t        |j                        }|j                  ||g|        ||       t        |j                        }|g k7  sJ |d   j
                  dk7  sJ y )	Nc                    |t        |      dz
  k7  ry|D cg c]  \  }}}t        ||||       }}}}|j                         5 }|D ]]  }	|	j                  rdn|	j                  j
                  }
|
|	j                  d}|j                  |	|       |j                  |	fz   |_        _ 	 ddd       yc c}}}w # 1 sw Y   yxY w)zMerge a phrase. We have to be careful here because we'll change the
        token indices. To avoid problems, merge all the phrases once we're called
        on the last match.r*   Nr1   NNP)taglemma)attrs)	r.   r   
retokenizelabel_roottag_r   merger0   )r5   r   ir7   r1   r2   r3   spansretokenizerspanrn   rp   s               r   merge_phrasesz$test_issue615.<locals>.merge_phrases   s     Gq  MTUU8Iucc5#U3UU^^ 	. .#{{e		 #dii8!!$e!488tg-	.	. 	. V	. 	.s   B4A#B;;CzThe golf club is brokenr   golfclubSport_Equipment)on_matchr   )r	   r+   r-   r/   r0   r1   )r   rz   r   patternr1   r   r5   entitiess           r   test_issue615r      s    . %D&&!12GE
t
Ccii GKKy=K9CLCHH~Hr>>A;!!!r   iR  c                     t        t        d i      } t        |       }ddiddiddig}|j                  d|g       t	        |j
                  g d	
      } ||      }t        |      dk(  sJ |d   \  }}}|dk(  sJ |dk(  sJ y)zfThe variable-length pattern matches the succeeding token. Check we
    handle the ambiguity correctly.c                 "    | j                         S Nlowerstrings    r   <lambda>ztest_issue850.<locals>.<lambda>       &,,. r   lex_attr_gettersr   bobr   r   frankFarAwayr   andr   r   rc   r*   r   rE   Nr   r   r	   r-   r
   r+   r.   r+   r5   r   r   matchent_idr2   r3   s           r   test_issue850r      s     E+H#IJEenG$w.@AGKK	G9%
gmm#A
BCCLEu:??qFE3A::!8O8r   c                     t        t        d i      } t        |       }ddidddddig}|j                  d	|g       t	        |j
                  g d
      } ||      }t        |      dk(  sJ |d   \  }}}|dk(  sJ |dk(  sJ y)z7Test Matcher matches with '*' operator and Boolean flagc                 "    | j                         S r   r   r   s    r   r   z%test_issue850_basic.<locals>.<lambda>   r   r   r   r   r   r   r   )r   r   r   r   r   rc   r*   r   rE   Nr   r   s           r   test_issue850_basicr      s     E+H#IJEenGe!<w>PQGKK	G9%
gmm#A
BCCLEu:??qFE3A::!8O8r   i  c                      ddidddg} t        t              }t        |ddg      }t        |dg      }t        |      }|j	                  d	| g        ||      }|sJ  ||      }|sJ y
)z=Test matches occur when optional element at end of short doc.r   HelloT?)rf   r   r   Worldrc   	MyMatcherN)r   r   r
   r	   r-   )r   r+   hello_worldhellor5   r7   s         r   test_issue1434r      s{      t3"?@G9-EeGW#56KgY'EenGKKgY'k"GN7enGN7r   zstring,start,end))rP   r   r*   )a br   rC   )a cr   r*   )a b cr   rC   )a b b cr   rB   )a b br   rB   i  c                    ddidddg}t        t                     }|j                  d|g       t        t               | j	                               } ||      }|||g k(  sJ |d	   d
   |k(  sJ |d	   d   |k(  sJ y)z5Test matcher works when patterns end with * operator.r   rP   rQ   r   r   TSTENDrc   Nr*   rC   )r	   r   r-   r
   split)r   r2   r3   r   r5   r   r7   s          r   test_issue1450r      s     }s#67GegGKK7)$
egV\\^
,CclG}"}}2;q>U"""2;q>S   r   i  c                      t        t                     } | j                  dddiddigg       t        | j                  g d      } | |      }t        |      dk(  sJ |d   dd	 d
k(  sJ |d   dd	 dk(  sJ y	)z0Test regression in Matcher introduced in v2.0.6.MWEorthrP   )rP   rP   rP   rc   rC   r   r*   N)r   rC   )r*   rB   )r	   r   r-   r
   r+   r.   )r5   r   r7   s      r   test_issue1945r     s     egGKK&#678
gmm?
3CclGw<11:ab>V###1:ab>V###r   i  c           
      .   t        |       }ddidddddidddddg}t        j                  dd	
       |j                  d|g       t	        | g d      } ||      }t        |D cg c]  \  }}}|| j                  v  c}}}      sJ y c c}}}w )Nr   Doe!r   r   optionalT)r6   r   FdefaultrX   )r   Johnr   r   rc   )r	   r   set_extensionr-   r
   allr,   )rY   r5   r   r   r7   match_idr2   r3   s           r   test_issue1971r     s     hG	C 4 ,C 	G 

E2KK	"
h;
<C clGQQ1E5#H,,,QRRRQs   +Bc                     t        |       }dddgidddig}ddiddig}t        | g d	      }|j                  d
||g        ||      }t        |      dk(  sJ y )NEURINeur)r   r   rg   Tr   )r   10isr   r   rc   rO   rC   r	   r
   r-   r.   )rY   r5   pattern1pattern2r   r7   s         r   test_issue_1971_2r   "  st    hG$9J;MNHT"VUO4H
h>
?CKK(H-.clGw<1r   c                 r    t        j                  ddd       t        j                  ddd       t         ddg	      }t               }|j	                  d
dddiigg       |j	                  ddddiigg       t         fd ||      D              }t        |      dk(  sJ |t        g d      k(  sJ y)zFTest that pattern matches correctly for multiple extension attributes.rP   r*   Tr   forcerQ   rC   r   worldrc   r   r6   r   c              3   J   K   | ]  \  }}}j                   |   ||f  y wr   )r,   ).0m_idserY   s       r   	<genexpr>z$test_issue_1971_3.<locals>.<genexpr>6  s)     S
ah&&t,a3Ss    #rE   ))r   r   r*   )r   r*   rC   )r   r   r*   )r   r*   rC   N)r   r   r
   r	   r-   sortedr.   rh   s   `   r   test_issue_1971_3r   -  s     
Qd3	Qd3
hw0
1ChGKKc1X'()KKc1X'()SgclSSGw<1fQRRRRr   c                 8   t        j                  ddd       t        j                  ddd       t        |       }t        | g d      }d	ddd
igdz  }|j	                  d|g        ||      }t        |      dk(  sJ |d   | j                  d   ddfk(  sJ y)zhTest that pattern matches correctly with multiple extension attribute
    values on a single token.
    ext_astr_aTr   ext_bstr_b)thisr   r   rc   r6   )r   r   rB   rX   r*   r   N)r   r   r	   r
   r-   r.   r,   )rY   r5   r   r   r7   s        r   test_issue_1971_4r   ;  s    
 
=	=hG
h4
5Cw9:;a?GKK	"clGw<11:(**62Aq9999r   i	  c                     t        |       }t        | ddg      }|j                  dddiddigg        ||      }t        |      dk(  sJ y)	zITest problem with successive ?. This is the same bug, so putting it here.rP   rQ   rc   4r   r   rB   Nr   )rY   r5   r   r7   s       r   test_issue2464r   L  sW     hG
hsCj
)CKKc{T3K012clGw<1r   i	
  c                     | d      }t        |dd|j                  j                  d         g|_        t	        |j                        }|j                  ddddgg        ||      D cg c]  \  }}}|||  }}}}t        |t        d	
      }t        |      dk(  sJ t        |d         dk(  sJ |d   j                  dk(  sJ yc c}}}w )zTest that operator + is greedy.zIt is May 15, 1993.rC   rF   DATErl   RULE+)ENT_TYPEr   T)keyreverser)   r   rE   zMay 15, 1993N)	r   r+   r,   r0   r	   r-   r   r.   r   )r   r   r5   r6   r2   r3   matcheds          r   test_issue2569r   V  s     ,
-CS!Qcii&7&7&?@ACHcii GKKvS9:;<3:3<@@-!UCs5~@G@W#t4Gw<2wqz?a1:??n,,,	 As   -Cio
  c                  h   t               } t        | j                        }d}ddidddddig}|j                  ||g        | d      } | d	      } ||      }|D ]$  \  }}}	| j                  j                  |   |k(  r$J   ||      }
|
D ]$  \  }}}	| j                  j                  |   |k(  r$J  y
)z^Ensure the correct entity ID is returned for matches with quantifiers.
    See also #2675
    test_patternr   highTr   )r   r   
adrenalinez$This is a high-adrenaline situation.z$This is a high adrenaline situation.N)r   r	   r+   r-   r,   )nlpr5   
pattern_idr   doc1doc2matches1r   r2   r3   matches2s              r   test_issue2671r   d  s    
 )Ccii GJ	&%	,G
 KK
WI&56D56Dt}H ( 9%yy  *j8889t}H ( 9%yy  *j8889r   i  c                 ,   ddiddiddiddigddidd	d
dddiddiddigddidd	ddddiddiddigg}g d}g d}g d}t        | |||      }t        |       }t        |      D ]-  \  }}|j                  t	        |      |g        ||      }	|	r-J  y)z%Test problem with matcher quantifiersr   hasr   todoTAGr   TFr   )IS_ASCIIr   r   r   )alsor   r   r   with)RBVBZTOVBr   )ADVVERBADPr   r   )rd   tagsposN)r
   r	   	enumerater-   str)
rY   r   rd   r   r   r   r5   rv   r   r7   s
             r   test_issue3009r  |  s     %7D/GT?UDMJUO5<dOdODM	
 UO5<dOdODM	
H" 0E*D
/C
he$C
8ChG) 
7CFWI&#,wr   i   c                    t        | g d      }t        |       }ddddgiigddddgiigg}|j                  d	|        ||      }t        |      d
k(  sJ |D cg c]  \  }}}||| j                   }}}}|g dk(  sJ y c c}}}w )N)r   ,howareyoudoingr   rc   r   r   r   r  r  r  rX   rE   )r   r  r  r  )r
   r	   r-   r.   r   )	rY   r   r5   r   r7   r6   r2   r3   matched_textss	            r   test_issue3328r
    s    
hO
PChG
D7E*+	,-
D5'*+	,-H KK!clGw<1>EFF]QsSs^((FMF<<<< Gs   Bi  c                     t        | d      }ddiddig}|j                  d|g       t        j                  t              5  |j                  ddd	igg       d
d
d
       y
# 1 sw Y   y
xY w)zATest that match pattern validation doesn't raise on empty errors.T)validater   r   r   GOODBADXYN)r	   r-   rG   rH   r   )rY   r5   r   s      r   test_issue3549r    sl     h.G!GW#56GKK	"	(	) +Ec3ZL>*+ + +s   A""A+z5Matching currently only works on strings and integersi  c                     t        j                  dd       t        |       }ddidddiig}|j                  d|g       t	        | dd	g
      } ||       y)zBTest that custom extensions with default None don't break matcher.	issue3555Nr   r   haver6   TrX   applerc   )r   r   r	   r-   r
   )rY   r5   r   r   s       r   test_issue3555r    s_     
T2hG#T':!;<GKK	"
hvw/
0CCLr   i  c                 X   t        | g d      }t        |       }d}ddiddiddig}ddiddiddiddig}|j                  ||g        ||      }|d	   d	   | j                  |   k(  sJ t        |       }|j                  ||g        ||      }|d	   d	   | j                  |   k(  sJ y
)zJTest that match IDs returned by the matcher are correct, are in the string)terrificgroupofpeoplerc   PATTERNr   r  r   r   r  r   N)r
   r	   r-   r,   )rY   r   r5   r   r   r   r7   s          r   test_issue3839r    s     hC
DChGH*%c{Wg4FGH*%c{T3K'7ASTHKK8*%clG1:a=H,,X6666hGKK8*%clG1:a=H,,X6666r   i'  c                     t        | g d      }t        |      dk(  sJ dddddidd	ig}t        |       }|j                  d
|g       t         ||            dk(  sJ y )N)Thisr   rP   test.rc   rD   r  r   r   r   r   r   rX   rC   )r
   r.   r	   r-   )rY   r   r   r5   s       r   test_issue3879r"    sj    
h>
?Cs8q==c*T3K&&9IJGhGKK	"ws|!!!r   io  c                     t        |       }ddidddddiddig}|j                  d|g       t        | g d	
      } ||      }t        |      dk(  sJ y)z?Test that combinations of optional rules are matched correctly.r   r   r   r   )r   r   r   r   rX   )r   mynewr   rc   r   Nr	   r-   r
   r.   )rY   r5   r   r   r7   s        r   test_issue3951r'    sn     hG	'$	s	'	G KK	"
h=
>CclGw<1r   i  c                    t        |       }|j                  dddiddigg       t        | dg      }t         ||            dk(  sJ t        | g d      }t         ||            d	k(  sJ t        |       }|j                  dddiddidd
igg       t        | g d      }t         ||            d	k(  sJ t        |       }|j                  dddiddid
ddgg       t        | g d      }t         ||            dk(  sJ y)z=Test that matches without a final {OP: ?} token are returned.rX   r   rP   r   r   rc   r*   )rP   rQ   rS   rC   rQ   )rP   rQ   rQ   rS   r   rB   Nr&  )rY   r5   r   r   doc3doc4s         r   test_issue4120r+    s    hGKK63-$567xu%Dwt}"""x/Dwt}"""hGKK63-$vsmDEFx34Dwt}"""hGKK63-$s#6NOPQx34Dwt}"""r   zpattern,re_patternc                 L   t        | j                        }|j                  ||gd        ||       }t        j                  ||      D cg c]  }|j                          }}t        ||      D ]-  \  \  }}	}
\  }}| |	|
 j                  | || j                  k(  r-J  yc c}w )z_Test that the greedy matching behavior "FIRST" is consistent with
    other re implementations.FIRSTgreedyN)r	   r+   r-   refinditerry   zipr   )r   r   r   
re_patternr5   r7   m
re_matchesr   m_sm_ere_sre_es                r   test_greedy_matching_firstr:    s     cii GKK
WIgK6clG$&KK
D$ABq!&&(BJB),Wj)A 8%c3$3s|  CTN$7$77778 Cs   B!zpattern,longestc                     t        | j                        }|j                  d|gd        ||       }|D ]  \  }}}| || j                  |k(  rJ  y)z+Test the "LONGEST" greedy matching behaviorr   LONGESTr.  N)r	   r+   r-   r   )	r   r   r   longestr5   r7   r   r   r   s	            r   test_greedy_matching_longestr>    s\     cii GKK	)K4clG (	Q1Qx}}'''(r   c                      | dj                  d            }t        |j                        }ddiddig}|j                  d|gd        ||      }t	        |      dk(  sJ |d	   d   d	k(  sJ |d	   d
   d
k(  sJ y)zJTest that "LONGEST" matching prefers the first of two equally long matchesr   CCCr   Cr   r<  r.  r*   r   rC   N)r   r	   r+   r-   r.   )r   r   r5   r   r7   s        r   "test_greedy_matching_longest_firstrB  '  s    
sxx
'Ccii G}vsm,GKK	)K4clGw<11:a=A1:a=Ar   c                     t        | j                        }t        j                  t              5  |j                  dt        gd       d d d        y # 1 sw Y   y xY w)Nr   GREEDYr.  )r	   r+   rG   rH   rI   r-   r   )r   r   r5   s      r   test_invalid_greedinessrE  4  sE    cii G	z	" 9FXJx89 9 9s   AAc                    t        | j                        }|j                  ||gd        ||       }t        j                  ||      D cg c]  }|j                          }}t        |      t        |      k(  sJ yc c}w )zPTest that matcher.__call__ consumes tokens on a match similar to
    re.findall.r-  r.  N)r	   r+   r-   r0  r1  ry   r.   )r   r   r   r3  r5   r7   r4  r5  s           r   test_match_consumingrG  :  so     cii GKK
WIgK6clG$&KK
D$ABq!&&(BJBw<3z?*** Cs   A>c                    g d}|D ]  \  }}}t        |       }t        |j                  t        |            }g }|j	                         D ]>  }|j                  d      r|j                  |d   dd       ,|j                  d|i       @ |j                  d|g        ||      }	|r|	rJ ||f       |	sJ ||f        y )N))aaaba a a bT)rI  a+ bT)rI  a+ a+ bT)rI  	a+ a+ a bT)rI  
a+ a+ a+ bT)rI  a+ a a bTrI  a+ a aTrI  za+T)aaarK  F)rS  rL  F)rS  rN  F)rS  a+ a bF)rS  rO  FrP  rR  )rI  rT  Trc   r   r   r   r   r  )r	   r
   r+   r/   r   endswithappendr-   )
rY   casesr   pattern_strresultr5   r   r   partr7   s
             r   test_operator_combosr[  N  s    E$ (- 6#V(#'--tF|4%%' 	/D}}S!Qs;<~.		/
 	Iy)#,1V[1175 55;6r   c                    t        |       ddidddg}j                  d|g       fd}t          |d                  dk(  sJ t          |d	                  d
k(  sJ t          |d                  dk(  sJ t          |d                  d
k(  sJ t          |d                  dk(  sJ t          |d                  dk(  sJ y)zBTest matcher works when patterns end with * operator. (issue 1450)r   rP   rQ   r   r   r   c                 N    t        j                  | j                               S )Nrc   )r
   r+   r   )r   r5   s    r   r   z,test_matcher_end_zero_plus.<locals>.<lambda>x  s    W]]&,,.A r   r*   r   rC   r   r   r   rB   r   N)r	   r-   r.   )rY   r   r   r5   s      @r   test_matcher_end_zero_plusr^  r  s     hG}s#67GKK7)$
ACws3x !Q&&&ws5z"#q(((ws5z"#q(((ws7|$%***ws9~&'1,,,ws7|$%***r   c                 .   t        |       }dddgiigdddgiigdddgiigg}|j                  d|       t        | dj                               } ||      }|D cg c]  \  }}}t	        ||||	      j
                  ! }}}}|g d
k(  sJ y c c}}}w )Nr   r   zeroonetworX   zzero one two threerc   rl   )r`  ra  rb  )r	   r-   r
   r   r   r   )	rY   r5   r   r   r7   Lr   r   textss	            r   'test_matcher_sets_return_correct_tokensre    s    hG
D6(#	$%
D5'?	#$
D5'?	#$H
 KK!
h288:
;CclG:ABBwq!QT#q!1%**BEB**** Cs   $Bzignore:\[W036c                     t               } t        | j                        }d}ddiddig}t        |      dk(  sJ |j	                  d|g       d|v sJ  | | |            }t        |      dk(  sJ |j                  d        | | |            }t        |      dk(  sJ t        j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)	NzThis is a test case.r   r   r   r   r   RulerC   )	r   r	   r+   r.   r-   removerG   rH   rI   )r   r5   r   r   results1results2s         r   test_matcher_removerk    s    
)Ccii G!D$-Gw<1KK	"W s4y!Hx=A NN6 s4y!Hx=A 
z	" v  s   9CCc                    ddg dfddg dfddg dfdd	g dfd
dg dfddg dfd
dg dfddg dfddg dfddg dfddg dfddg dfddg dfddg dfddg dfddg dfddg dfddg dfdd g dfdd!g dfdd"g d#fdd$g dfg}|D ]H  \  }}}t        |       }t        |j                  t        |      %      }g }|j	                         D ]  }|j                  d&      r|j                  |d'   d&d(       ,|j                  d)      r|j                  |d'   d)d(       U|j                  d*      r|j                  |d'   d*d(       ~|j                  d+      r|j                  |d'   |d,d  d(       |j                  d-|i        |j                  d.|gd/0        ||d12      }	t        |	      }
|	d'   \  }}}}||k(  r?J |||||
f        y )3NrI  a* br   r   r   r*   baabb a* br   r*   r*   rC   rJ  r   r*   rC   rB   rK  aabaa+ b a+r   r   r*   rC   aabaar   r   r*   rC   rC   a+ b a*aaaaa*r   r   r   r   	b a* b b*aabba* b* a*r   r   r*   r*   rM  rN  rO  rQ  r   r*   rC   a+ a a?
a a a a a?rT  rL  a{2,} bza{,3} ba{2} br   r   r*   a{2,3} brc   r   r   r   r   r   }r*   r   r  r<  r.  Twith_alignments	r	   r
   r+   r/   r   rU  rV  r-   r.   )rY   rW  r   rX  rY  r5   r   r   rZ  r7   	n_matchesr6   r   r   expecteds                  r   +test_matcher_with_alignments_greedy_longestr    s/   	&	<(	L)	&	L)	)_-	L)	|$	l+	\*	l+	|,	\*	9%	I&	|,	<(	L)	L)	L)	9%	\*-E0 (- J#V(#'--tF|4%%' 
	/D}}S!Qs;<s#Qs;<s#Qs;<s#QtABx@A~.
	/ 	Iy;#t4L	#AJ1a6!IFKAy#II!+Jr   c                    dddddgg dg ddggfdddg d	gfd
ddg dgfdddddgg dg dgfdddg dg dgfdddg dg dg dg dgfdddddgg dg dg dgfddddgddgg dg dgfddd g d	gfd!d"d#dgd
gd
d
gddgg dg d$g d%ddggfd&dd'g dgfd(dd)g dgfd*dd+g dgfd,dd-g dgfd.dd/ddgg dgfd0dd1g dgfd2dd3g dg dgfd4dd5g dg dgfd6dd7g dg dgfd8dd9g dgfd:dd;g dgfd<dd=g dg dgfg}|D ]\  \  }}}}t        |       }t        |j                  t        |      >      }g }|j	                         D ]  }	|	j                  d?      r|j                  |	d   d?d@       ,|	j                  dA      r|j                  |	d   dAd@       U|	j                  dB      r|j                  |	d   dBd@       ~|	j                  dC      r|j                  |	d   |	dd  d@       |j                  dD|	i        |j                  dE|g        ||dFG      }
t        |
      }|
D ]+  \  }}}}||v sJ ||||||f       t        |      ||z
  k(  r+J  _ y )HNr   rI  rm  r*   r  rn  ro  rp  rq  rC   rJ  rr  rB   rK  rE   rs  rt  r  ru  rD   rv  rw  )r   r*   rC   rC   rF   rx     ry  rz  )r   r   r   r{     r|  r'   r}  r~  r  )r   r*   r*   r)   rM  r(   rN     rO     rQ     r     r     rT     rL     r     za{3} b   r     r  rc   r   r   r   r   r  r   r  Tr  r  )rY   rW  case_idr   rX  resultsr5   r   r   rZ  r7   r  r6   r   r   r  s                   r   'test_matcher_with_alignments_non_greedyr    s   	
FFaVYqcBC	
FH|n-	
FI~.	
FFaVY=>	
FI	<89o|D		
 
FIA	<KL	
FDA3A	<@A	
FK,0S1#1v1vy,	Aq6R		
 
V[<.1	V\L>2	VZ,0	VX	{+	VY!Q 34	V\L>2	VX	<89	VYL 9:	VYL 9:	VX~.	VX	{+	VZ)\!:;A!ED 27 *-g(#'--tF|4%%' 
	/D}}S!Qs;<s#Qs;<s#Qs;<s#QtABx@A~.
	/ 	Iy)#t4L	!( 	*Aq!Xw&W&+q!Y(WW&x=AE)))	*)*r   )Qr0  rG   spacy.attrsr   r   r   spacy.errorsr   spacy.lang.enr   spacy.lang.lex_attrsr   spacy.matcherr	   spacy.tokensr
   r   r   spacy.vocabr   r   r   pattern3pattern4pattern5re_pattern1re_pattern2re_pattern3re_pattern4re_pattern5longest1longest2longest3longest4longest5fixturer   r   markissueparametrizer8   r;   rM   rV   rZ   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  skipr  r  r"  r'  r+  r:  r>  rB  rE  rG  r[  r^  re  filterwarningsrk  r  r  r   r   r   <module>r     s   	  - - * ! * ! ) ) SMCs34$vsm4SMFC=)SMCs3fc]C$s#&>N    
 3I
	7H"57K!LMH
3	47K6LM ( 3H
	'8!4w	6J KLH
3	47J6KL ( 3# #, 3  3" " 3	 	 3" "6 3  3  4  
 4
! 

! 4$ $ 4S S& 4  4
S 
S 4: :  4  4
- 
- 49 9. 4 < 4= = 4+ + IJ4  K 47 7  4" " 4  4# #$ 	;	;	;	;	;		8		8 	8	8	8	8	8	(	(
9 	;	;	;	;	;	+	+!6H 4+ ++ ,- .4.Jb9*r   