
    Ngx                     P    d Z ddlZddlmZ ddlmZ  G d dej                  ZdS )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 dS ) TestSequenceFunctionsz5
    Class containing unit tests for nltk.tgrep.
    c                 ^    t          j        d          }|                     |g d           dS )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     U/var/www/html/ai-engine/env/lib/python3.11/site-packages/nltk/test/unit/test_tgrep.pytest_tokenize_simplez*TestSequenceFunctions.test_tokenize_simple   sI     %&MNN  	
 	
 	
 	
 	
    c                 z    |                      t          j        d          t          j        d                     dS )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;   sD     	 !IJJ !HII	
 	
 	
 	
 	
r"   c                 ^   |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d	          g d
           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d            |                      t          j        d!          g d"           |                      t          j        d#          g d$           |                      t          j        d%          g d&           |                      t          j        d'          g d(           |                      t          j        d)          g d*           |                      t          j        d+          g d,           |                      t          j        d-          g d.           |                      t          j        d/          g d0           |                      t          j        d1          g d2           |                      t          j        d3          g d4           |                      t          j        d5          g d6           |                      t          j        d7          g d8           |                      t          j        d9          g d:           |                      t          j        d;          g d<           |                      t          j        d=          g d>           |                      t          j        d?          g d@           |                      t          j        dA          g dB           |                      t          j        dC          g dD           |                      t          j        dE          g dF           |                      t          j        dG          g dH           |                      t          j        dI          g dJ           |                      t          j        dK          g dL           |                      t          j        dM          g dN           |                      t          j        dO          g dP           |                      t          j        dQ          g dR           |                      t          j        dS          g dT           |                      t          j        dU          g dV           |                      t          j        dW          g dX           |                      t          j        dY          g dZ           |                      t          j        d[          g d\           |                      t          j        d]          g d^           |                      t          j        d_          g d`           |                      t          j        da          g db           |                      t          j        dc          g dd           |                      t          j        de          g df           |                      t          j        dg          g dh           |                      t          j        di          g dj           |                      t          j        dk          g dl           |                      t          j        dm          g dn           |                      t          j        do          g dp           |                      t          j        dq          g dr           |                      t          j        ds          g dt           |                      t          j        du          g dv           |                      t          j        dw          g dx           |                      t          j        dy          g dz           |                      t          j        d{          g d|           d}S )~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44oooFFF-e44oooFFF-f557G7G7GHHH-f557G7G7GHHH-f557G7G7GHHH-f557G7G7GHHH-g668I8I8IJJJ-g668I8I8IJJJ-f557G7G7GHHH-f557G7G7GHHH-f557G7G7GHHH-f557G7G7GHHH-f557G7G7GHHH-f557G7G7GHHH-f557G7G7GHHH-f557G7G7GHHH-g668I8I8IJJJ-g668I8I8IJJJ-g668I8I8IJJJ-g668I8I8IJJJ-g668I8I8IJJJ-g668I8I8IJJJ-e44oooFFF-e44oooFFF-f557G7G7GHHH-f557G7G7GHHH-e44oooFFF-f557G7G7GHHH-f557G7G7GHHH-g668I8I8IJJJ-g668I8I8IJJJ-f557K7K7KLLL-f557K7K7KLLL-g668M8M8MNNN-g668M8M8MNNN-g668M8M8MNNN-g668M8M8MNNN-h779O9O9OPPP-h779O9O9OPPP-g668M8M8MNNN-g668M8M8MNNN-g668M8M8MNNN-g668M8M8MNNN-g668M8M8MNNN-g668M8M8MNNN-g668M8M8MNNN-g668M8M8MNNN-h779O9O9OPPP-h779O9O9OPPP-h779O9O9OPPP-h779O9O9OPPP-h779O9O9OPPP-h779O9O9OPPP-f557K7K7KLLL-f557K7K7KLLL-g668M8M8MNNN-g668M8M8MNNN-f557K7K7KLLL-g668M8M8MNNN-g668M8M8MNNN-h779O9O9OPPP-h779O9O9OPPPPPr"   c                    |                      t          j        d          g d           |                      t          j        d          dg           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d	           |                      t          j        d
          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           |                      t          j        d          g d           dS )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   s    	-i88:K:K:KLLL-g66	BBB 113P3P3P	
 	
 	
 	 !2335W5W5W	
 	
 	
 	 !;<<III	
 	
 	
 	 !233333	
 	
 	
 	 !:;;III	
 	
 	
 	 !233999	
 	
 	
 	 !455CCC	
 	
 	
 	 !233999	
 	
 	
 	-h779W9W9WXXXXXr"   c                 Z    |                      t          j        d          g d           dS )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DD	
 	
 	
 	
 	
r"   c                    |                      t          j        d          dg           |                      t          j        d          dg           |                      t          j        d          dg           |                      t          j        d          dg           |                      t          j        d          ddg           |                      t          j        d          g d	           |                      t          j        d
          g d           |                      t          j        d          g d           dS )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7(DDD-k::[MJJJ-c22SE:::-d33dV<<<-e44tSkBBB-g668M8M8MNNN-h779S9S9STTT ++-L-L-L	
 	
 	
 	
 	
r"   c                 Z    |                      t          j        d          g d           dS )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   sH     	 H   		
 	
 	
 	
 	
r"   c                    t          j        d          }|                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|g                    |d         |d         gg           |                     t          t	          j        d|g                    g dg           dS )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3D4&AABBffEUDVWWW"4$0011T$Zd4L3M	
 	
 	
 	&w7788;S;S;S:T	
 	
 	
 	
 	
r"   c           	         t          j        d          }|                     t          t	          j        d|g                    t          t	          j        d|g                               |                     t          t	          j        d|g                    t          t	          j        d|g                               dS )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9&sTF3344&tdV4455	
 	
 	
 	&x$8899&y4&99::	
 	
 	
 	
 	
r"   c           	      >   t          j        d          }|                     t          t	          j        d|g                    t          t	          j        d|g                               |                     t          t	          j        d|g                    t          t	          j        d|g                               |                     t          t	          j        d|g                    t          t	          j        d|g                               dS )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566&utf5566	
 	
 	
 	"54&1122"4$0011	
 	
 	
 	&x$8899&w7788	
 	
 	
 	
 	
r"   c                    t          j        d          }|                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    ddgg           dS )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  s     &'899e3ED6BBCCtfXNNNe3GdVDDEEt~VVVVVr"   c                    t          j        d          }|                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    d	gg           d
S )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e3ED6BBCCrdVLLLe3K$HHIITF8TTTe3HtfEEFF$QQQe3NTFKKLLPTvhWWWWWr"   c                     t          j        d          }|                     t          t	          j        d|g                    ddgg           dS )/
        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)  sP     &'MNN 	e3GdVDDEEt~VVVVVr"   c                    t          j        d          }|                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|g                    g dg           dS )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  s     &'HIIe3HtfEEFF$PTWWW 	&w7788;M;M;M:N	
 	
 	
 	
 	
r"   c                    t          j        d          fdt          t                                                              D             fd                                D             }|D ]u}d| }t          t          j        |g                    }| 	                    t          |d                   d           | 	                    |d         d         |           vdS )zE
        Test matching on nodes based on NLTK tree position.
        r   c                 :    h | ]}                     |          S r   )leaf_treeposition).0xrr   s     r    	<setcomp>z@TestSequenceFunctions.test_node_tree_position.<locals>.<setcomp>D  s'    WWW$0033WWWr"   c                     g | ]}|v|	S r   r   )r   r   leaf_positionss     r    
<listcomp>zATestSequenceFunctions.test_node_tree_position.<locals>.<listcomp>E  s#    UUUQn=T=T!=T=T=Tr"   rv   r   ri   N)
r   rm   rangelenleavestreepositionsrn   r   ro   r   )r   tree_positionspositionnode_idro   r   rr   s        @@r    test_node_tree_positionz-TestSequenceFunctions.test_node_tree_position>  s     &'MNNWWWWU3t{{}}CUCU=V=VWWWUUUUT%7%7%9%9UUU& 	> 	>H$(nnG"5#84&#I#IJJOS!344a888_Q/2H====		> 	>r"   c           	         t          j        d          }|                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|gd                    g g           dS )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  s     &'@AA&sTF3344	97M6N	
 	
 	
 	e3C$GGHH2$OOOOOr"   c                 
   t          j        d          }|                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    g dg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d	|g                    d
gg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    g dg           |                     t          t	          j        d|g                    g dg           |                     t          t	          j        d|g                    g dg           |                     t          t	          j        d|g                    dd
gg           |                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    g dg           t          j        d          }|                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|g                    g dg           |                     t          t	          j        d|g                    dgg           t          j        d           }|                     t          t	          j        d!|g                    dgg           |                     t          t	          j        d"|g                    g d#g           t          j        d$          }|                     t          t	          j        d%|g                    g d&g           |                     t          t	          j        d'|g                    g d(g           d)S )*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  sp    &'@AAe3GdVDDEExPPPe3K$HHIITF8TTT&x$8899===>	
 	
 	
 	e3L4&IIJJdVHUUUe3GdVDDEEzRRRe3GdVDDEEzRRR&x$8899;;;<	
 	
 	
 	&}tf==>>AUAUAU@V	
 	
 	
 	&x$8899)))*	
 	
 	
 	&y4&99::dF^<L	
 	
 	
 	&y4&99::dF^<L	
 	
 	
 	e3HtfEEFF"dUUUe3IvFFGG4&RRRe3IvFFGG4&RRR&y4&99::999:	
 	
 	
 &'GHHe3HtfEEFF$QQQe3GdVDDEEt~VVV&y4&99::PPPQ	
 	
 	
 	e3MD6JJKKtfXVVV&'FGGe3HtfEEFF&
SSS&y4&99::NNNO	
 	
 	
 &N
 
 	&y4&99::  
	
 	
 	
 	&y4&99::  
	
 	
 	
 	
 	
r"   c                     t          j        d          }|                     t          j        t
          t          j        d|g                     dS )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  sP     &'@AA $(=i$(P(P	
 	
 	
 	
 	
r"   c                    t          j        d          }d}|                     t          t	          j        ||g                    ddgg           d}|                     t          t	          j        ||g                    ddgg           dS )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B
 	e3GdVDDEEt~VVV 	e3GdVDDEEt~VVVVVr"   c                 j   t          j        d          }|                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    ddgg           d	S )
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3HtfEEFF$QQQe3IvFFGG4&RRRe3HtfEEFF$QQQe3IvFFGG4&RRRe3GdVDDEEt~VVVVVr"   c                 v   t          j        d          }|                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d	|g                    dgg           |                     t          t	          j        d
|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           t          j        d          }|                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           dS )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  sB    &'>??e3HtfEEFF$QQQe3HtfEEFF$QQQe3HtfEEFF$QQQe3HtfEEFF$QQQe3HtfEEFF$QQQe3IvFFGG4&RRRe3IvFFGG4&RRRe3IvFFGG4&RRR&V
 
 	e3HtfEEFF$QQQe3HtfEEFF$QQQe3HtfEEFF$QQQe3HtfEEFF$QQQe3HtfEEFF$QQQe3IvFFGG4&RRRe3IvFFGG4&RRRe3IvFFGG4&RRRRRr"   c                    t          j        d          }|                     t          t	          j        d|g                    g dg           |                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|g                    g dg           |                     t          t	          j        d	|g                    g d
g           |                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|g                    g dg           |                     t          t	          j        d|g                    g dg           |                     t          t	          j        d|g                    g dg           dS )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788;T;T;T:U	
 	
 	
 	&w7788I|;T:U	
 	
 	
 	&x$8899999:	
 	
 	
 	&x$8899RRRS	
 	
 	
 	&w7788I|;T:U	
 	
 	
 	&w77884445	
 	
 	
 	&x$8899MMMN	
 	
 	
 	&x$88994445	
 	
 	
 	
 	
r"   c                 L   t          j        d          }|                     t          t	          j        d|g                    dgg           t          j        d          }|                     t          t	          j        d|g                    dgg           t          j        d          }|                     t          t	          j        d|g                    ddgg           t          j        d	          }|                     t          t	          j        d
|g                    ddgg           t          j        d          }|                     t          t	          j        d|g                    dgg           t          j        d          }|                     t          t	          j        d|g                    dgg           t          j        d          }|                     t          t	          j        d|g                    dgg           t          j        d          }|                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    dgg           dS )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  s    &'DEEe3IvFFGG4&RRR&'MNN 	e3OdVLLMMQUPVxXXX&G
 

 	&'84&AABBdD\N	
 	
 	
 &&
 
 	&'AD6JJKKi !	
 	
 	

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

 	&'84&AABBdVH	
 	
 	
 	
 	
r"   c                    t          j        d          }|                     t          t	          j        d|g                    ddgg           |                     t          j        t          t	          j        d|g                     dS )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                     |                      t          j        d          g d           |                      t          j        d          g d           dS )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  sz     !DEE  	
 	
 	
$ 	 !HII  	
 	
 	
 	
 	
r"   c                 Z    |                      t          j        d          g d           dS )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  sB     !STT  	
 	
 	
 	
 	
r"   c           	         d}t          j        d          }t          j        d          }|                    d          d         dz   }d}|                     t	          t          j        ||g                    d                    |                     t	          t          j        ||g                    d                    |                     t	          t          j        ||g                    d                    |                     t	          t          j        ||g                    t	          t          j        ||g                               |                     t	          t          j        ||g                    d                    |                     t	          t          j        ||g                    d                    |                     t	          t          j        ||g                    d                    |                     t	          t          j        ||g                    t	          t          j        ||g                               dS )	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23CeWMMNNqQRRRU26E7CCDDQGHHHU2>E7KKLLQOPPP&vw7788&~w??@@	
 	
 	
 	U23CeWMMNNqQRRRe3FUGDDEEaHIIIe3NUGLLMMaPQQQ&vw7788&~w??@@	
 	
 	
 	
 	
r"   c                    t          j        d          }|                     t          t	          j        d|g                    dgg           |                     t          t	          j        d|g                    ddgg           dS )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  s    
 &'PQQ 	&'84&AABBdVH	
 	
 	
 	&}tf==>>$	
 	
 	
 	
 	
r"   c                    t          j        d          }|                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|g                    ddgg           |                     t          t	          j        d|g                    ddgg           dS )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3D4&AABBffEUDVWWWe3ED6BBCCvvFVEWXXX&vv667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 AQ AQF$Y $Y $YL
 
 

 
 
 
 
 
@
 
 
 

 

 


 
 
*W W WX X XW W W

 

 

> > >P P PU
 U
 U
n
 
 
W W W,	W 	W 	WS S S2%
 %
 %
NM
 M
 M
^
 
 
4)
 )
 )
V
 
 
:&
 &
 &
P
 
 

 
 
 
 
r"   r   )r   unittestnltkr   	nltk.treer   TestCaser   r   r"   r    <module>r      s    
        " " " " " "v
 v
 v
 v
 v
H- v
 v
 v
 v
 v
r"   