
    gx                     R    d Z ddlZddlmZ ddlmZ  G d dej                        Zy)z
Unit tests for nltk.tgrep.
    N)tgrep)ParentedTreec                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z y) TestSequenceFunctionsz5
    Class containing unit tests for nltk.tgrep.
    c                 V    t        j                  d      }| j                  |g d       y)z.
        Simple test of tokenization.
        %A .. (B !< C . D) | ![<< (E , F) $ G])A..(B!<C.D)|r   [<<r   E,Fr   $G]N)r   tgrep_tokenizeassertEqual)selftokenss     N/var/www/openai/venv/lib/python3.12/site-packages/nltk/test/unit/test_tgrep.pytest_tokenize_simplez*TestSequenceFunctions.test_tokenize_simple   s+     %%&MN	
    c                 t    | j                  t        j                  d      t        j                  d             y)zM
        Test that tokenization handles bytes and strs the same way.
        s%   A .. (B !< C . D) | ![<< (E , F) $ G]r   Nr   r   r   r   s    r    test_tokenize_encodingz,TestSequenceFunctions.test_tokenize_encoding;   s0     	  !IJ  !HI	
r"   c                    | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d	      g d
       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d        | j                  t        j                  d!      g d"       | j                  t        j                  d#      g d$       | j                  t        j                  d%      g d&       | j                  t        j                  d'      g d(       | j                  t        j                  d)      g d*       | j                  t        j                  d+      g d,       | j                  t        j                  d-      g d.       | j                  t        j                  d/      g d0       | j                  t        j                  d1      g d2       | j                  t        j                  d3      g d4       | j                  t        j                  d5      g d6       | j                  t        j                  d7      g d8       | j                  t        j                  d9      g d:       | j                  t        j                  d;      g d<       | j                  t        j                  d=      g d>       | j                  t        j                  d?      g d@       | j                  t        j                  dA      g dB       | j                  t        j                  dC      g dD       | j                  t        j                  dE      g dF       | j                  t        j                  dG      g dH       | j                  t        j                  dI      g dJ       | j                  t        j                  dK      g dL       | j                  t        j                  dM      g dN       | j                  t        j                  dO      g dP       | j                  t        j                  dQ      g dR       | j                  t        j                  dS      g dT       | j                  t        j                  dU      g dV       | j                  t        j                  dW      g dX       | j                  t        j                  dY      g dZ       | j                  t        j                  d[      g d\       | j                  t        j                  d]      g d^       | j                  t        j                  d_      g d`       | j                  t        j                  da      g db       | j                  t        j                  dc      g dd       | j                  t        j                  de      g df       | j                  t        j                  dg      g dh       | j                  t        j                  di      g dj       | j                  t        j                  dk      g dl       | j                  t        j                  dm      g dn       | j                  t        j                  do      g dp       | j                  t        j                  dq      g dr       | j                  t        j                  ds      g dt       | j                  t        j                  du      g dv       | j                  t        j                  dw      g dx       | j                  t        j                  dy      g dz       | j                  t        j                  d{      g d|       y})~z8
        Test tokenization of basic link types.
        zA<B)r	   r   r   zA>B)r	   >r   zA<3B)r	   <3r   zA>3B)r	   >3r   zA<,B)r	   <,r   zA>,B)r	   >,r   zA<-3B)r	   <-3r   zA>-3B)r	   >-3r   zA<-B)r	   <-r   zA>-B)r	   >-r   zA<'B)r	   <'r   zA>'B)r	   >'r   zA<:B)r	   <:r   zA>:B)r	   >:r   zA<<B)r	   r   r   zA>>B)r	   >>r   zA<<,B)r	   <<,r   zA>>,B)r	   >>,r   zA<<'B)r	   <<'r   zA>>'B)r	   >>'r   zA<<:B)r	   <<:r   zA>>:B)r	   >>:r   zA.B)r	   r   r   zA,B)r	   r   r   zA..B)r	   r
   r   zA,,B)r	   ,,r   zA$B)r	   r   r   zA$.B)r	   $.r   zA$,B)r	   $,r   zA$..B)r	   $..r   zA$,,B)r	   $,,r   zA!<B)r	   r   r   r   zA!>B)r	   r   r(   r   zA!<3B)r	   r   r)   r   zA!>3B)r	   r   r*   r   zA!<,B)r	   r   r+   r   zA!>,B)r	   r   r,   r   zA!<-3B)r	   r   r-   r   zA!>-3B)r	   r   r.   r   zA!<-B)r	   r   r/   r   zA!>-B)r	   r   r0   r   zA!<'B)r	   r   r1   r   zA!>'B)r	   r   r2   r   zA!<:B)r	   r   r3   r   zA!>:B)r	   r   r4   r   zA!<<B)r	   r   r   r   zA!>>B)r	   r   r5   r   zA!<<,B)r	   r   r6   r   zA!>>,B)r	   r   r7   r   zA!<<'B)r	   r   r8   r   zA!>>'B)r	   r   r9   r   zA!<<:B)r	   r   r:   r   zA!>>:B)r	   r   r;   r   zA!.B)r	   r   r   r   zA!,B)r	   r   r   r   zA!..B)r	   r   r
   r   zA!,,B)r	   r   r<   r   zA!$B)r	   r   r   r   zA!$.B)r	   r   r=   r   zA!$,B)r	   r   r>   r   zA!$..B)r	   r   r?   r   zA!$,,B)r	   r   r@   r   Nr$   r%   s    r    test_tokenize_link_typesz.TestSequenceFunctions.test_tokenize_link_typesD   s    	--e4oF--e4oF--f57GH--f57GH--f57GH--f57GH--g68IJ--g68IJ--f57GH--f57GH--f57GH--f57GH--f57GH--f57GH--f57GH--f57GH--g68IJ--g68IJ--g68IJ--g68IJ--g68IJ--g68IJ--e4oF--e4oF--f57GH--f57GH--e4oF--f57GH--f57GH--g68IJ--g68IJ--f57KL--f57KL--g68MN--g68MN--g68MN--g68MN--h79OP--h79OP--g68MN--g68MN--g68MN--g68MN--g68MN--g68MN--g68MN--g68MN--h79OP--h79OP--h79OP--h79OP--h79OP--h79OP--f57KL--f57KL--g68MN--g68MN--f57KL--g68MN--g68MN--h79OP--h79OPr"   c                 \   | j                  t        j                  d      g d       | j                  t        j                  d      dg       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d	       | j                  t        j                  d
      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       | j                  t        j                  d      g d       y)zJ
        Test tokenization of the TGrep2 manual example patterns.
        NP < PP)NPr   PP/^NP/NP << PP . VP)rD   r   rE   r   VPNP << PP | . VP)rD   r   rE   r   r   rH   NP !<< PP [> NP | >> VP])rD   r   r   rE   r   r(   rD   r   r5   rH   r   NP << (PP . VP))rD   r   r   rE   r   rH   r   NP <' (PP <, (IN < on)))rD   r1   r   rE   r+   r   INr   onr   r   S < (A < B) < C)	Sr   r   r	   r   r   r   r   r   S < ((A < B) < C))rP   r   r   r   r	   r   r   r   r   r   r   S < (A < B < C))	rP   r   r   r	   r   r   r   r   r   zA<B&.C)r	   r   r   &r   r   Nr$   r%   s    r    test_tokenize_examplesz,TestSequenceFunctions.test_tokenize_examples   sh    	--i8:KL--g6	B  13P	
 	  !235W	
 	  !;<I	
 	  !233	
 	  !:;I	
 	  !239	
 	  !45C	
 	  !239	
 	--h79WXr"   c                 R    | j                  t        j                  d      g d       y)z/
        Test tokenization of quoting.
        z"A<<:B"<<:"A $.. B"<"A>3B"<C)z"A<<:B"r:   z	"A $.. B"r   z"A>3B"r   r   Nr$   r%   s    r    test_tokenize_quotingz+TestSequenceFunctions.test_tokenize_quoting   s$     	  !?@D	
r"   c                 l   | j                  t        j                  d      dg       | j                  t        j                  d      dg       | j                  t        j                  d      dg       | j                  t        j                  d      dg       | j                  t        j                  d      ddg       | j                  t        j                  d      g d	       | j                  t        j                  d
      g d       | j                  t        j                  d      g d       y)z2
        Test tokenization of node names.
        Robertz	/^[Bb]ob/*__zN()N(r   zN(0,))r[   0r   r   zN(0,0))r[   r\   r   r\   r   zN(0,0,))r[   r\   r   r\   r   r   Nr$   r%   s    r    test_tokenize_nodenamesz-TestSequenceFunctions.test_tokenize_nodenames   s     	--h7(D--k:[MJ--c2SE:--d3dV<--e4tSkB--g68MN--h79ST  +-L	
r"   c                 R    | j                  t        j                  d      g d       y)z9
        Test tokenization of macro definitions.
        z4@ NP /^NP/;
@ NN /^NN/;
@NP [!< NP | < @NN] !$.. @NN)@rD   rF   ;r_   NNz/^NN/r`   z@NPr   r   r   rD   r   r   @NNr   r   r?   rb   Nr$   r%   s    r    test_tokenize_macrosz*TestSequenceFunctions.test_tokenize_macros   s(     	  H		
r"   c                 l   t        j                  d      }| j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j                  d|g            |d   |d   gg       | j                  t        t	        j
                  d|g            g dg       y)z`
        Test a simple use of tgrep for finding nodes matching a given
        pattern.
        A(S (NP (DT the) (JJ big) (NN dog)) (VP bit) (NP (DT a) (NN cat)))ra   r      rg      NN|JJ)r   ri   rf   rh   Nr   
fromstringr   listr   tgrep_positionstgrep_nodesr   trees     r    test_node_simplez&TestSequenceFunctions.test_node_simple   s    
 &&R
 	e33D4&ABffEUDVW""4$01T$Zd4L3M	
 	&&w78;S:T	
r"   c           	      f   t        j                  d      }| j                  t        t	        j
                  d|g            t        t	        j
                  d|g                   | j                  t        t	        j
                  d|g            t        t	        j
                  d|g                   y)z9Test that the tgrep print operator ' is properly ignored.(S (n x) (N x))Nz'Nz/[Nn]/z'/[Nn]/Nr   rm   r   rn   r   ro   rq   s     r    test_node_printingz(TestSequenceFunctions.test_node_printing   s    &&'89&&sTF34&&tdV45	
 	&&x$89&&y4&9:	
r"   c           	         t        j                  d      }| j                  t        t	        j
                  d|g            t        t	        j
                  d|g                   | j                  t        t	        j                  d|g            t        t	        j                  d|g                   | j                  t        t	        j
                  d|g            t        t	        j
                  d|g                   y)z]
        Test that tgrep search strings handles bytes and strs the same
        way.
        re   s   NNra   s   NN|JJrj   Nrl   rq   s     r    test_node_encodingz(TestSequenceFunctions.test_node_encoding  s    
 &&R
 	&&utf56&&utf56	
 	""54&12""4$01	
 	&&x$89&&w78	
r"   c                     t        j                  d      }| j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            ddgg       y)zI
        Test selecting nodes using case insensitive node names.
        ru   "N"ri   zi@"N"r   Nrw   rq   s     r    test_node_nocasez&TestSequenceFunctions.test_node_nocase  sg     &&'89e33ED6BCtfXNe33GdVDEt~Vr"   c                    t        j                  d      }| j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            d	gg       y
)z?
        Test selecting nodes using quoted node names.
        z(N ("N" x) (N" x) ("\" x))r|    z"\"N\""r~   z"N\""r}   z"\"\\\""rg   Nrw   rq   s     r    test_node_quotedz&TestSequenceFunctions.test_node_quoted  s     &&'DEe33ED6BCrdVLe33K$HITF8Te33HtfEF$Qe33NTFKLPTvhWr"   c                     t        j                  d      }| j                  t        t	        j
                  d|g            ddgg       y)/
        Test regex matching on nodes.
        $(S (NP-SBJ x) (NP x) (NNP x) (VP x))rF   r~   r}   Nrw   rq   s     r    test_node_regexz%TestSequenceFunctions.test_node_regex)  sA     &&'MN 	e33GdVDEt~Vr"   c                     t        j                  d      }| j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j
                  d|g            g dg       y)r   z(S (SBJ x) (SBJ1 x) (NP-SBJ x))z/^SBJ/r~   r}   z/SBJ/)r~   r}   r   Nrw   rq   s     r    test_node_regex_2z'TestSequenceFunctions.test_node_regex_22  sm     &&'HIe33HtfEF$PTW 	&&w78;M:N	
r"   c                    t        j                  d      }t        t        |j	                                     D ch c]  }|j                  |       }}|j                         D cg c]	  }||vs| }}|D ]]  }d| }t        t        j                  ||g            }| j                  t        |d         d       | j                  |d   d   |       _ yc c}w c c}w )zE
        Test matching on nodes based on NLTK tree position.
        r   rv   r   ri   N)r   rm   rangelenleavesleaf_treepositiontreepositionsrn   r   ro   r   )r   rr   xleaf_positionstree_positionspositionnode_idro   s           r    test_node_tree_positionz-TestSequenceFunctions.test_node_tree_position>  s     &&'MN=B3t{{}CU=VW=V$003=VW%)%7%7%9U%9Qn=T!%9U&H(nG"5#8#84&#IJOS!34a8_Q/2H=	 ' XUs   C&	C0Cc           	          t        j                  d      }| j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j
                  d|gd            g g       y)zS
        Test node name matching with the search_leaves flag set to False.
        (S (A (T x)) (B (N x)))r   r   r   r   ri   r   r   FNrw   rq   s     r    test_node_noleavesz(TestSequenceFunctions.test_node_noleavesL  sn     &&'@A&&sTF34	97M6N	
 	e33C$GH2$Or"   c                 	   t        j                  d      }| j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            g dg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d	|g            d
gg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            g dg       | j                  t        t	        j
                  d|g            g dg       | j                  t        t	        j
                  d|g            g dg       | j                  t        t	        j
                  d|g            dd
gg       | j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            g dg       t        j                  d      }| j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j
                  d|g            g dg       | j                  t        t	        j
                  d|g            dgg       t        j                  d       }| j                  t        t	        j
                  d!|g            dgg       | j                  t        t	        j
                  d"|g            g d#g       t        j                  d$      }| j                  t        t	        j
                  d%|g            g d&g       | j                  t        t	        j
                  d'|g            g d(g       y))*zC
        Test matching nodes based on dominance relations.
        r   z* < Tr~   z	* < T > Sz* !< T)r   r   r   r   r}   ri   r   r   z
* !< T > Sr}   z* > Ar   z* > Br   z* !> B)r   r~   r   r   r}   r   z* !> B >> S)r~   r   r}   z* >> S)r~   r   r}   r   z* >>, Sz* >>' Sz* << Tr   z* <<' Tz* <<1 Nz* !<< T)r   r   r}   r   r   z(S (A (T x)) (B (T x) (N x )))z* <: Tz* !<: T)r   r   r   r}   r   r   )ri   ri   )ri   ri   r   z* !<: T > Sz(S (T (A x) (B x)) (T (C x)))z* >: Tz* !>: T)r   r~   r   r   rk   r   ri   r   r}   r   z=(S (A (B (C (D (E (T x)))))) (A (B (C (D (E (T x))) (N x)))))z* <<: T)r~   r   r   r   r   r   r   r   r   r   r   r   ri   r   r   r   )ri   r   r   r   r   z* >>: A)r   r   r   r   )r   r   r   r   r   r   r   r   Nrw   rq   s     r    tests_rel_dominancez)TestSequenceFunctions.tests_rel_dominanceV  s+    &&'@Ae33GdVDExPe33K$HITF8T&&x$89=>	
 	e33L4&IJdVHUe33GdVDEzRe33GdVDEzR&&x$89;<	
 	&&}tf=>AU@V	
 	&&x$89)*	
 	&&y4&9:dF^<L	
 	&&y4&9:dF^<L	
 	e33HtfEF"dUe33IvFG4&Re33IvFG4&R&&y4&9:9:	
 &&'GHe33HtfEF$Qe33GdVDEt~V&&y4&9:PQ	
 	e33MD6JKtfXV&&'FGe33HtfEF&
S&&y4&9:NO	
 &&N
 	&&y4&9:
	
 	&&y4&9:
	
r"   c                     t        j                  d      }| j                  t        j                  t
        t        j                  d|g             y)zC
        Test error handling of undefined tgrep operators.
        r   z* >>> SN)r   rm   assertRaisesr   TgrepExceptionrn   ro   rq   s     r    test_bad_operatorz'TestSequenceFunctions.test_bad_operator  s?     &&'@A  $(=(=i$(P	
r"   c                    t        j                  d      }d}| j                  t        t	        j
                  ||g            ddgg       d}| j                  t        t	        j
                  ||g            ddgg       y)z`
        Test that comments are correctly filtered out of tgrep search
        strings.
        z(S (NN x) (NP x) (NN x))z=
        @ NP /^NP/;
        @ NN /^NN/;
        @NN
        r~   r   zg
        # macros
        @ NP /^NP/;
        @ NN /^NN/;

        # search string
        @NN
        Nrw   )r   rr   search1search2s       r    test_commentsz#TestSequenceFunctions.test_comments  s{    
 &&'AB
 	e33GdVDEt~V 	e33GdVDEt~Vr"   c                 $   t        j                  d      }| j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            ddgg       y	)
z7
        Test matching sister nodes in a tree.
        (S (A x) (B x) (C x))z* $. Br~   z* $.. Bz* $, Br   z* $,, Bz* $ BNrw   rq   s     r    test_rel_sister_nodesz+TestSequenceFunctions.test_rel_sister_nodes  s     &&'>?e33HtfEF$Qe33IvFG4&Re33HtfEF$Qe33IvFG4&Re33GdVDEt~Vr"   c                    t        j                  d      }| j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d	|g            dgg       | j                  t        t	        j
                  d
|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       t        j                  d      }| j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       y)zP
        Test matching nodes based on their index in their parent node.
        r   z* >, Sr~   z* >1 Sz* >2 Sr}   z* >3 Sr   z* >' Sz* >-1 Sz* >-2 Sz* >-3 SzE(S (D (A x) (B x) (C x)) (E (B x) (C x) (A x)) (F (C x) (A x) (B x)))z* <, Az* <1 Az* <2 Az* <3 Az* <' Az* <-1 Az* <-2 Az* <-3 ANrw   rq   s     r    tests_rel_indexed_childrenz0TestSequenceFunctions.tests_rel_indexed_children  s    &&'>?e33HtfEF$Qe33HtfEF$Qe33HtfEF$Qe33HtfEF$Qe33HtfEF$Qe33IvFG4&Re33IvFG4&Re33IvFG4&R&&V
 	e33HtfEF$Qe33HtfEF$Qe33HtfEF$Qe33HtfEF$Qe33HtfEF$Qe33IvFG4&Re33IvFG4&Re33IvFG4&Rr"   c                 ^   t        j                  d      }| j                  t        t	        j
                  d|g            g dg       | j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j
                  d|g            g dg       | j                  t        t	        j
                  d	|g            g d
g       | j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j
                  d|g            g dg       | j                  t        t	        j
                  d|g            g dg       | j                  t        t	        j
                  d|g            g dg       y)zD
        Test matching nodes based on precedence relations.
        zV(S (NP (NP (PP x)) (NP (AP x))) (VP (AP (X (PP x)) (Y (AP x)))) (NP (RC (NP (AP x)))))z* . X)r~   rk   r   z* . Yr   r   z* .. X)r~   r   r   rk   r   z* .. Y)r~   r   r   rk   r   r   r   z* , Xri   r   ri   ri   r   ri   r   z* , Y)r   rg   r   rg   r   r   rg   r   r   r   z* ,, X)r   r   r   r   r   r   z* ,, YNrw   rq   s     r    test_rel_precedencez)TestSequenceFunctions.test_rel_precedence  s    &&&

 	&&w78;T:U	
 	&&w78I|;T:U	
 	&&x$899:	
 	&&x$89RS	
 	&&w78I|;T:U	
 	&&w7845	
 	&&x$89MN	
 	&&x$8945	
r"   c                    t        j                  d      }| j                  t        t	        j
                  d|g            dgg       t        j                  d      }| j                  t        t	        j
                  d|g            dgg       t        j                  d      }| j                  t        t	        j
                  d|g            ddgg       t        j                  d	      }| j                  t        t	        j
                  d
|g            ddgg       t        j                  d      }| j                  t        t	        j
                  d|g            dgg       t        j                  d      }| j                  t        t	        j
                  d|g            dgg       t        j                  d      }| j                  t        t	        j
                  d|g            dgg       t        j                  d      }| j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            dgg       y)zA
        Test the Basic Examples from the TGrep2 manual.
        z(S (NP (AP x)) (NP (PP x)))rC   r}   z$(S (NP x) (VP x) (NP (PP x)) (VP x))rG   r   z6(S (NP (AP x)) (NP (PP x)) (NP (DET x) (NN x)) (VP x))rI   zX(S (NP (NP (PP x)) (NP (AP x))) (VP (AP (NP (PP x)) (NP (AP x)))) (NP (RC (NP (AP x)))))rJ   rk   r   z:(S (NP (AP (PP x) (VP x))) (NP (AP (PP x) (NP x))) (NP x))rK   r~   ze(S (NP (DET a) (NN cat) (PP (IN on) (NP x))) (NP (DET a) (NN cat) (PP (IN on) (NP x)) (PP x)) (NP x))rL   z;(S (S (C x) (A (B x))) (S (C x) (A x)) (S (D x) (A (B x))))rO   z/(S (S (A (B x) (C x))) (S (S (C x) (A (B x)))))rQ   rR   Nrw   rq   s     r    test_examplesz#TestSequenceFunctions.test_examples  sC    &&'DEe33IvFG4&R&&'MN 	e33OdVLMQUPVxX&&G

 	&&'84&ABdD\N	
 &&&
 	&&'AD6JKi !	

 &&K
 	&&'84&ABdVH	
 &&
 	&&'@4&IJdVH	
 &&L

 	&&'84&ABdVH	
 &&=

 	&&':TFCDvh	

 	&&'84&ABdVH	
r"   c                    t        j                  d      }| j                  t        t	        j
                  d|g            ddgg       | j                  t        j                  t        t	        j
                  d|g             y)z8
        Test defining and using tgrep2 macros.
        zi(VP (VB sold) (NP (DET the) (NN heiress)) (NP (NN deed) (PREP to) (NP (DET the) (NN school) (NN house))))z+@ NP /^NP/;
@ NN /^NN/;
@NP !< @NP !$.. @NNr}   )rg   rg   z,@ NP /^NP/;
@ NN /^NN/;
@CNP !< @NP !$.. @NNN)r   rm   r   rn   r   ro   r   r   rq   s     r    test_use_macrosz%TestSequenceFunctions.test_use_macrosf  s     &&6

 	%%CdV
 F^	
 	  !!@4&	
r"   c                     | j                  t        j                  d      g d       | j                  t        j                  d      g d       y)z#Test tokenization of labeled nodes.!S < @SBJ < (@VP < (@VB $.. @OBJ)))rP   r   @SBJr   r   @VPr   r   @VBr?   @OBJr   r   z%S < @SBJ=s < (@VP=v < (@VB $.. @OBJ)))rP   r   r   =sr   r   r   r   vr   r   r   r?   r   r   r   Nr$   r%   s    r    test_tokenize_node_labelsz/TestSequenceFunctions.test_tokenize_node_labels  sH      !DE	
$ 	  !HI	
r"   c                 R    | j                  t        j                  d      g d       y)z(Test tokenization of segmented patterns.z0S < @SBJ=s < (@VP=v < (@VB $.. @OBJ)) : =s .. =v)rP   r   r   r   r   r   r   r   r   r   r   r   r   r?   r   r   r   :z=sr
   z=vNr$   r%   s    r     test_tokenize_segmented_patternsz6TestSequenceFunctions.test_tokenize_segmented_patterns  s$      !ST	
r"   c           	         d}t        j                  d      }t        j                  d      }|j                  d      d   dz   }d}| j                  t	        t        j                  ||g            d          | j                  t	        t        j                  ||g            d          | j                  t	        t        j                  ||g            d          | j                  t	        t        j                  ||g            t	        t        j                  ||g                   | j                  t	        t        j                  ||g            d          | j                  t	        t        j                  ||g            d          | j                  t	        t        j                  ||g            d          | j                  t	        t        j                  ||g            t	        t        j                  ||g                   y)	zN
        Test labeled nodes.

        Test case from Emily M. Bender.
        z
            # macros
            @ SBJ /SBJ/;
            @ VP /VP/;
            @ VB /VB/;
            @ VPoB /V[PB]/;
            @ OBJ /OBJ/;

            # 1 svo
            S < @SBJ=s < (@VP=v < (@VB $.. @OBJ)) : =s .. =vz2(S (NP-SBJ I) (VP (VB eat) (NP-OBJ (NNS apples))))z2(S (VP (VB eat) (NP-OBJ (NNS apples))) (NP-SBJ I))z

r   r   z-S < (/.*SBJ/ $.. (/VP/ < (/VB/ $.. /.*OBJ/)))N)	r   rm   split
assertTruern   r   ro   r   assertFalse)r   searchsent1sent2search_firsthalfsearch_rewrites         r    test_labeled_nodesz(TestSequenceFunctions.test_labeled_nodes  s   	@ ''@
 ''@
 "<</25XXHU223CeWMNqQRU226E7CDQGHU22>E7KLQOP&&vw78&&~w?@	
 	U223CeWMNqQRe33FUGDEaHIe33NUGLMaPQ&&vw78&&~w?@	
r"   c                     t        j                  d      }| j                  t        t	        j
                  d|g            dgg       | j                  t        t	        j
                  d|g            ddgg       y)zm
        Test that multiple (3 or more) conjunctions of node relations are
        handled properly.
        z'((A (B b) (C c)) (A (B b) (C c) (D d)))z(A < B < C < D)r}   z(A < B < C)r~   Nrw   )r   sents     r    test_multiple_conjsz)TestSequenceFunctions.test_multiple_conjs  sr    
 &&'PQ 	&&'84&ABdVH	
 	&&}tf=>$	
r"   c                 `   t        j                  d      }| j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j
                  d|g            ddgg       | j                  t        t	        j
                  d|g            ddgg       y)zp
        Test that semicolons at the end of a tgrep2 search string won't
        cause a parse failure.
        re   ra   rf   rh   zNN;zNN;;Nrw   rq   s     r    test_trailing_semicolonz-TestSequenceFunctions.test_trailing_semicolon  s    
 &&R
 	e33D4&ABffEUDVWe33ED6BCvvFVEWX&&vv6766:J9K	
r"   N)!__name__
__module____qualname____doc__r!   r&   rA   rT   rV   r]   rc   rs   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r    r   r      s    
B
AQF$YL

 
@
 


*WXW

>PU
n
W,	WS2%
NM
^
4)
V
:&
P

r"   r   )r   unittestnltkr   	nltk.treer   TestCaser   r   r"   r    <module>r      s)   
   "v
H-- v
r"   