+
    ÖÇÜhÏx  ã                   óT   € R t ^ RIt^ RIHt ^ RIHt  ! R R]P                  4      tR# )z
Unit tests for nltk.tgrep.
N)Útgrep)ÚParentedTreec                   óÒ   a € ] tR t^t o RtR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!Rt"V t#R # )!ÚTestSequenceFunctionsz-
Class containing unit tests for nltk.tgrep.
c                óZ   € \         P                  ! R4      pV P                  V. RO4       R# )z
Simple test of tokenization.
ú%A .. (B !< C . D) | ![<< (E , F) $ G]N)ÚAú..Ú(ÚBÚ!Ú<ÚCÚ.ÚDÚ)Ú|r   Ú[ú<<r
   ÚEÚ,ÚFr   Ú$ÚGÚ])r   Útgrep_tokenizeÚassertEqual)ÚselfÚtokenss   & Ú;/usr/lib/python3/dist-packages/nltk/test/unit/test_tgrep.pyÚtest_tokenize_simpleÚ*TestSequenceFunctions.test_tokenize_simple   s+   € ô ×%Ò%Ð&MÓNˆØ×ÑØòö	
ó    c                óz   € V P                  \        P                  ! R4      \        P                  ! R4      4       R# )z=
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_encodingÚ,TestSequenceFunctions.test_tokenize_encoding;   s0   € ð 	×ÑÜ× Ò Ð!IÓJÜ× Ò Ð!HÓIö	
r"   c                óf  € V P                  \        P                  ! R4      . R@O4       V P                  \        P                  ! R4      . RAO4       V P                  \        P                  ! R4      . RBO4       V P                  \        P                  ! R4      . RCO4       V P                  \        P                  ! R4      . RDO4       V P                  \        P                  ! R4      . REO4       V P                  \        P                  ! R4      . RFO4       V P                  \        P                  ! R4      . RGO4       V P                  \        P                  ! R	4      . RHO4       V P                  \        P                  ! R
4      . RIO4       V P                  \        P                  ! R4      . RJO4       V P                  \        P                  ! R4      . RKO4       V P                  \        P                  ! R4      . RLO4       V P                  \        P                  ! R4      . RMO4       V P                  \        P                  ! R4      . RNO4       V P                  \        P                  ! R4      . ROO4       V P                  \        P                  ! R4      . RPO4       V P                  \        P                  ! R4      . RQO4       V P                  \        P                  ! R4      . RRO4       V P                  \        P                  ! R4      . RSO4       V P                  \        P                  ! R4      . RTO4       V P                  \        P                  ! R4      . RUO4       V P                  \        P                  ! R4      . RVO4       V P                  \        P                  ! R4      . RWO4       V P                  \        P                  ! R4      . RXO4       V P                  \        P                  ! R4      . RYO4       V P                  \        P                  ! R4      . RZO4       V P                  \        P                  ! R4      . R[O4       V P                  \        P                  ! R4      . R\O4       V P                  \        P                  ! R4      . R]O4       V P                  \        P                  ! R4      . R^O4       V P                  \        P                  ! R 4      . R_O4       V P                  \        P                  ! R!4      . R`O4       V P                  \        P                  ! R"4      . RaO4       V P                  \        P                  ! R#4      . RbO4       V P                  \        P                  ! R$4      . RcO4       V P                  \        P                  ! R%4      . RdO4       V P                  \        P                  ! R&4      . ReO4       V P                  \        P                  ! R'4      . RfO4       V P                  \        P                  ! R(4      . RgO4       V P                  \        P                  ! R)4      . RhO4       V P                  \        P                  ! R*4      . RiO4       V P                  \        P                  ! R+4      . RjO4       V P                  \        P                  ! R,4      . RkO4       V P                  \        P                  ! R-4      . RlO4       V P                  \        P                  ! R.4      . RmO4       V P                  \        P                  ! R/4      . RnO4       V P                  \        P                  ! R04      . RoO4       V P                  \        P                  ! R14      . RpO4       V P                  \        P                  ! R24      . RqO4       V P                  \        P                  ! R34      . RrO4       V P                  \        P                  ! R44      . RsO4       V P                  \        P                  ! R54      . RtO4       V P                  \        P                  ! R64      . RuO4       V P                  \        P                  ! R74      . RvO4       V P                  \        P                  ! R84      . RwO4       V P                  \        P                  ! R94      . RxO4       V P                  \        P                  ! R:4      . RyO4       V P                  \        P                  ! R;4      . RzO4       V P                  \        P                  ! R<4      . R{O4       V P                  \        P                  ! R=4      . R|O4       V P                  \        P                  ! R>4      . R}O4       R?# )~z(
Test tokenization of basic link types.
zA<BzA>BzA<3BzA>3BzA<,BzA>,BzA<-3BzA>-3BzA<-BzA>-BzA<'BzA>'BzA<:BzA>:BzA<<BzA>>BzA<<,BzA>>,BzA<<'BzA>>'BzA<<:BzA>>:BzA.BzA,BzA..BzA,,BzA$BzA$.BzA$,BzA$..BzA$,,BzA!<BzA!>BzA!<3BzA!>3BzA!<,BzA!>,BzA!<-3BzA!>-3BzA!<-BzA!>-BzA!<'BzA!>'BzA!<:BzA!>:BzA!<<BzA!>>BzA!<<,BzA!>>,BzA!<<'BzA!>>'BzA!<<:BzA!>>:BzA!.BzA!,BzA!..BzA!,,BzA!$BzA!$.BzA!$,BzA!$..BzA!$,,BN)r   r   r   )r   Ú>r   )r   ú<3r   )r   ú>3r   )r   ú<,r   )r   ú>,r   )r   ú<-3r   )r   ú>-3r   )r   ú<-r   )r   ú>-r   )r   ú<'r   )r   ú>'r   )r   ú<:r   )r   ú>:r   )r   r   r   )r   ú>>r   )r   ú<<,r   )r   ú>>,r   )r   ú<<'r   )r   ú>>'r   )r   ú<<:r   )r   ú>>:r   )r   r   r   )r   r   r   )r   r	   r   )r   ú,,r   )r   r   r   )r   ú$.r   )r   ú$,r   )r   ú$..r   )r   ú$,,r   )r   r   r   r   )r   r   r)   r   )r   r   r*   r   )r   r   r+   r   )r   r   r,   r   )r   r   r-   r   )r   r   r.   r   )r   r   r/   r   )r   r   r0   r   )r   r   r1   r   )r   r   r2   r   )r   r   r3   r   )r   r   r4   r   )r   r   r5   r   )r   r   r   r   )r   r   r6   r   )r   r   r7   r   )r   r   r8   r   )r   r   r9   r   )r   r   r:   r   )r   r   r;   r   )r   r   r<   r   )r   r   r   r   )r   r   r   r   )r   r   r	   r   )r   r   r=   r   )r   r   r   r   )r   r   r>   r   )r   r   r?   r   )r   r   r@   r   )r   r   rA   r   r$   r%   s   &r   Útest_tokenize_link_typesÚ.TestSequenceFunctions.test_tokenize_link_typesD   sÇ  € ð 	×Ñœ×-Ò-¨eÓ4²oÔFØ×Ñœ×-Ò-¨eÓ4²oÔFØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨eÓ4²oÔFØ×Ñœ×-Ò-¨eÓ4²oÔFØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨eÓ4²oÔFØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨fÓ5Ò7GÔHØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨gÓ6Ò8IÔJØ×Ñœ×-Ò-¨fÓ5Ò7KÔLØ×Ñœ×-Ò-¨fÓ5Ò7KÔLØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨hÓ7Ò9OÔPØ×Ñœ×-Ò-¨hÓ7Ò9OÔPØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨hÓ7Ò9OÔPØ×Ñœ×-Ò-¨hÓ7Ò9OÔPØ×Ñœ×-Ò-¨hÓ7Ò9OÔPØ×Ñœ×-Ò-¨hÓ7Ò9OÔPØ×Ñœ×-Ò-¨hÓ7Ò9OÔPØ×Ñœ×-Ò-¨hÓ7Ò9OÔPØ×Ñœ×-Ò-¨fÓ5Ò7KÔLØ×Ñœ×-Ò-¨fÓ5Ò7KÔLØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨fÓ5Ò7KÔLØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨hÓ7Ò9OÔPØ×Ñœ×-Ò-¨hÓ7Ò9OÖPr"   c                ót  € V P                  \        P                  ! R4      . RO4       V P                  \        P                  ! R4      R.4       V P                  \        P                  ! R4      . RO4       V P                  \        P                  ! R4      . RO4       V P                  \        P                  ! R4      . RO4       V P                  \        P                  ! R4      . RO4       V P                  \        P                  ! R4      . RO4       V P                  \        P                  ! R4      . RO4       V P                  \        P                  ! R	4      . RO4       V P                  \        P                  ! R
4      . RO4       V P                  \        P                  ! R4      . RO4       R# )z:
Test tokenization of the TGrep2 manual example patterns.
úNP < PPú/^NP/úNP << PP . VPúNP << PP | . VPúNP !<< PP [> NP | >> VP]úNP << (PP . VP)úNP <' (PP <, (IN < on))úS < (A < B) < CúS < ((A < B) < C)úS < (A < B < C)zA<B&.CN)ÚNPr   ÚPP)rO   r   rP   r   ÚVP)rO   r   rP   r   r   rQ   )rO   r   r   rP   r   r)   rO   r   r6   rQ   r   )rO   r   r
   rP   r   rQ   r   )rO   r2   r
   rP   r,   r
   ÚINr   Úonr   r   )	ÚSr   r
   r   r   r   r   r   r   )rT   r   r
   r
   r   r   r   r   r   r   r   )	rT   r   r
   r   r   r   r   r   r   )r   r   r   Ú&r   r   r$   r%   s   &r   Útest_tokenize_examplesÚ,TestSequenceFunctions.test_tokenize_examples‡   sh  € ð 	×Ñœ×-Ò-¨iÓ8Ò:KÔLØ×Ñœ×-Ò-¨gÓ6¸¸	ÔBØ×ÑÜ× Ò  Ó1Ò3Pô	
ð 	×ÑÜ× Ò Ð!2Ó3Ò5Wô	
ð 	×ÑÜ× Ò Ð!;Ó<ÚIô	
ð 	×ÑÜ× Ò Ð!2Ó3Ú3ô	
ð 	×ÑÜ× Ò Ð!:Ó;ÚIô	
ð 	×ÑÜ× Ò Ð!2Ó3Ú9ô	
ð 	×ÑÜ× Ò Ð!4Ó5ÚCô	
ð 	×ÑÜ× Ò Ð!2Ó3Ú9ô	
ð 	×Ñœ×-Ò-¨hÓ7Ò9WÖXr"   c                óV   € V P                  \        P                  ! R4      . RO4       R# )z
Test tokenization of quoting.
z"A<<:B"<<:"A $.. B"<"A>3B"<CN)z"A<<:B"r;   z	"A $.. B"r   z"A>3B"r   r   r$   r%   s   &r   Útest_tokenize_quotingÚ+TestSequenceFunctions.test_tokenize_quoting­   s$   € ð 	×ÑÜ× Ò Ð!?Ó@ÚDö	
r"   c                ó~  € V P                  \        P                  ! R4      R.4       V P                  \        P                  ! R4      R.4       V P                  \        P                  ! R4      R.4       V P                  \        P                  ! R4      R.4       V P                  \        P                  ! R4      RR.4       V P                  \        P                  ! R4      . RO4       V P                  \        P                  ! R	4      . RO4       V P                  \        P                  ! R
4      . RO4       R# )z"
Test tokenization of node names.
ÚRobertz	/^[Bb]ob/Ú*Ú__zN()úN(r   zN(0,)zN(0,0)zN(0,0,)N)r_   Ú0r   r   )r_   r`   r   r`   r   )r_   r`   r   r`   r   r   r$   r%   s   &r   Útest_tokenize_nodenamesÚ-TestSequenceFunctions.test_tokenize_nodenames¶   sî   € ð 	×Ñœ×-Ò-¨hÓ7¸(¸ÔDØ×Ñœ×-Ò-¨kÓ:¸[¸MÔJØ×Ñœ×-Ò-¨cÓ2°S°EÔ:Ø×Ñœ×-Ò-¨dÓ3°d°VÔ<à×Ñœ×-Ò-¨eÓ4°t¸S°kÔBØ×Ñœ×-Ò-¨gÓ6Ò8MÔNØ×Ñœ×-Ò-¨hÓ7Ò9SÔTØ×ÑÜ× Ò  Ó+Ò-Lö	
r"   c                óV   € V P                  \        P                  ! R4      . RO4       R# )z)
Test tokenization of macro definitions.
z4@ NP /^NP/;
@ NN /^NN/;
@NP [!< NP | < @NN] !$.. @NNN)Ú@rO   rF   Ú;rd   ÚNNz/^NN/re   z@NPr   r   r   rO   r   r   ú@NNr   r   r@   rg   r$   r%   s   &r   Útest_tokenize_macrosÚ*TestSequenceFunctions.test_tokenize_macrosÆ   s(   € ð 	×ÑÜ× Ò ØHóòö		
r"   c                ó†  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P                  ! RV.4      4      VR,          VR,          ..4       V P                  \        \        P
                  ! RV.4      4      . RO.4       R# )zH
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)))rf   úNN|JJN©é    é   ©ro   é   )©rn   rq   rm   rp   ©r   Ú
fromstringr   Úlistr   Útgrep_positionsÚtgrep_nodes©r   Útrees   & r   Útest_node_simpleÚ&TestSequenceFunctions.test_node_simpleæ   s©   € ô
 ×&Ò&ØRó
ˆð 	×Ñœœe×3Ò3°D¸4¸&ÓAÓBÀfÈfÐEUÐDVÔWØ×ÑÜ”×"Ò" 4¨$¨Ó0Ó1°T¸$µZÀÀdÅÐ4LÐ3Mô	
ð 	×ÑÜ”×&Ò& w°°Ó7Ó8Ò;SÐ:Tö	
r"   c           	     ór  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      \        \        P
                  ! RV.4      4      4       V P                  \        \        P
                  ! RV.4      4      \        \        P
                  ! RV.4      4      4       R# )z9Test that the tgrep print operator ' is properly ignored.ú(S (n x) (N x))ÚNz'Nz/[Nn]/z'/[Nn]/N©r   rt   r   ru   r   rv   rx   s   & r   Útest_node_printingÚ(TestSequenceFunctions.test_node_printingö   s�   € ä×&Ò&Ð'8Ó9ˆØ×ÑÜ”×&Ò& s¨T¨FÓ3Ó4Ü”×&Ò& t¨d¨VÓ4Ó5ô	
ð 	×ÑÜ”×&Ò& x°$°Ó8Ó9Ü”×&Ò& y°4°&Ó9Ó:ö	
r"   c           	     ó  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      \        \        P
                  ! RV.4      4      4       V P                  \        \        P                  ! RV.4      4      \        \        P                  ! RV.4      4      4       V P                  \        \        P
                  ! RV.4      4      \        \        P
                  ! RV.4      4      4       R# )zE
Test that tgrep search strings handles bytes and strs the same
way.
rk   s   NNrf   s   NN|JJrl   Nrs   rx   s   & r   Útest_node_encodingÚ(TestSequenceFunctions.test_node_encoding  sÑ   € ô
 ×&Ò&ØRó
ˆð 	×ÑÜ”×&Ò& u¨t¨fÓ5Ó6Ü”×&Ò& u¨t¨fÓ5Ó6ô	
ð 	×ÑÜ”×"Ò" 5¨4¨&Ó1Ó2Ü”×"Ò" 4¨$¨Ó0Ó1ô	
ð 	×ÑÜ”×&Ò& x°$°Ó8Ó9Ü”×&Ò& w°°Ó7Ó8ö	
r"   c                ó   € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      RR..4       R# )z9
Test selecting nodes using case insensitive node names.
r}   ú"N"zi@"N"N©rq   ©rn   r   rx   s   & r   Útest_node_nocaseÚ&TestSequenceFunctions.test_node_nocase  sg   € ô ×&Ò&Ð'8Ó9ˆØ×Ñœœe×3Ò3°E¸D¸6ÓBÓCÀtÀfÀXÔNØ×Ñœœe×3Ò3°G¸d¸VÓDÓEÈÈtÈÀ~ÖVr"   c                óÊ  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R	..4       V P                  \        \        P
                  ! RV.4      4      R
..4       R# )z/
Test selecting nodes using quoted node names.
z(N ("N" x) (N" x) ("\" x))r†   z"\"N\""z"N\""z"\"\\\""N© rˆ   r‡   ©ro   r   rx   s   & r   Útest_node_quotedÚ&TestSequenceFunctions.test_node_quoted  s¶   € ô ×&Ò&Ð'DÓEˆØ×Ñœœe×3Ò3°E¸D¸6ÓBÓCÀrÀdÀVÔLØ×Ñœœe×3Ò3°KÀ$ÀÓHÓIÈTÈFÈ8ÔTØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°NÀTÀFÓKÓLÐPTÈvÈhÖWr"   c                óš   € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      RR..4       R# )ú
Test regex matching on nodes.
ú$(S (NP-SBJ x) (NP x) (NNP x) (VP x))rF   Nrˆ   r‡   r   rx   s   & r   Útest_node_regexÚ%TestSequenceFunctions.test_node_regex)  sA   € ô ×&Ò&Ð'MÓNˆð 	×Ñœœe×3Ò3°G¸d¸VÓDÓEÈÈtÈÀ~ÖVr"   c                ó  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P
                  ! RV.4      4      . RO.4       R# )r‘   z(S (SBJ x) (SBJ1 x) (NP-SBJ x))z/^SBJ/z/SBJ/Nrˆ   r‡   )rˆ   r‡   r�   r   rx   s   & r   Útest_node_regex_2Ú'TestSequenceFunctions.test_node_regex_22  sm   € ô ×&Ò&Ð'HÓIˆØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÐPTÈÈÔWð 	×ÑÜ”×&Ò& w°°Ó7Ó8Ò;MÐ:Nö	
r"   c                óò  € \         P                  ! R4      p\        \        VP	                  4       4      4       Uu0 uF  q!P                  V4      kK  	  ppVP                  4        Uu. uF  q"V9  g   K  VNK  	  ppV Fj  pRV 2p\        \        P                  ! Wa.4      4      pV P                  \        V^ ,          4      ^4       V P                  V^ ,          ^ ,          V4       Kl  	  R# u upi u upi )z5
Test matching on nodes based on NLTK tree position.
r’   r~   N)r   rt   ÚrangeÚlenÚleavesÚleaf_treepositionÚtreepositionsru   r   rv   r   )r   ry   ÚxÚleaf_positionsÚtree_positionsÚpositionÚnode_idrv   s   &       r   Útest_node_tree_positionÚ-TestSequenceFunctions.test_node_tree_position>  sÓ   € ô ×&Ò&Ð'MÓNˆä=BÄ3ÀtÇ{Á{Ã}ÓCUÔ=VÓWÑ=V¸×0Ñ0°Ö3Ñ=VˆÐWØ%)×%7Ñ%7Ô%9ÓUÑ%9 ÀnÑ=TŸ!˜!Ñ%9ˆÐUÛ&ˆHØ˜(˜�nˆGÜ"¤5×#8Ò#8¸À&Ó#IÓJˆOØ×ÑœS °Õ!3Ó4°aÔ8Ø×Ñ˜_¨QÕ/°Õ2°HÖ=ó	 'ùò XùÚUs   »C/Á(C4Á5C4c           	     ó   € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P
                  ! RV.R4      4      . .4       R# )zC
Test node name matching with the search_leaves flag set to False.
ú(S (A (T x)) (B (N x)))rž   FN©rn   rn   rn   ©rq   rn   rn   r   rx   s   & r   Útest_node_noleavesÚ(TestSequenceFunctions.test_node_noleavesL  sn   € ô ×&Ò&Ð'@ÓAˆØ×ÑÜ”×&Ò& s¨T¨FÓ3Ó4¸	À9Ð7MÐ6Nô	
ð 	×Ñœœe×3Ò3°C¸$¸ÀÓGÓHÈ2È$ÖOr"   c                óú	  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      . R!O.4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R ..4       V P                  \        \        P
                  ! RV.4      4      . R"O.4       V P                  \        \        P
                  ! R	V.4      4      . R#O.4       V P                  \        \        P
                  ! R
V.4      4      . R$O.4       V P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P
                  ! RV.4      4      RR ..4       V P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      . R%O.4       \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P
                  ! RV.4      4      . R&O.4       V P                  \        \        P
                  ! RV.4      4      R..4       \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R ..4       V P                  \        \        P
                  ! RV.4      4      . R'O.4       \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      . R(O.4       V P                  \        \        P
                  ! RV.4      4      . R)O.4       R# )*z3
Test matching nodes based on dominance relations.
r¦   z* < Tz	* < T > Sz* !< Tz
* !< T > Sz* > Az* > Bz* !> Bz* !> B >> Sz* >> Sz* >>, Sz* >>' Sz* << Tz* <<' Tz* <<1 Nz* !<< Tz(S (A (T x)) (B (T x) (N x )))z* <: Tz* !<: Tz* !<: T > Sz(S (T (A x) (B x)) (T (C x)))z* >: Tz* !>: Tz=(S (A (B (C (D (E (T x)))))) (A (B (C (D (E (T x))) (N x)))))z* <<: Tz* >>: ANrˆ   rŒ   ©rn   rn   r‡   ©rq   rn   )rŒ   r¬   r§   r‡   r­   r¨   )rŒ   rˆ   r¬   r§   r‡   r¨   )rˆ   r¬   r‡   )rˆ   r¬   r‡   r­   )r¬   r§   r‡   r­   r¨   )rŒ   r¬   r§   r‡   r­   r¨   )rq   rq   )rq   rq   rn   )rŒ   rˆ   r¬   r§   rr   ©rn   rq   rn   r‡   r¨   )rˆ   r¬   r§   ©rn   rn   rn   rn   ©rn   rn   rn   rn   rn   ©rq   rn   rn   rn   )rq   rn   rn   rn   rn   )r¬   r§   r¯   r°   )rn   rn   rn   rn   rn   rn   r­   r¨   r   rx   s   & r   Útests_rel_dominanceÚ)TestSequenceFunctions.tests_rel_dominanceV  s+  € ô ×&Ò&Ð'@ÓAˆØ×Ñœœe×3Ò3°G¸d¸VÓDÓEÈÈÀxÔPØ×Ñœœe×3Ò3°KÀ$ÀÓHÓIÈTÈFÈ8ÔTØ×ÑÜ”×&Ò& x°$°Ó8Ó9Ú=Ð>ô	
ð 	×Ñœœe×3Ò3°LÀ4À&ÓIÓJÈdÈVÈHÔUØ×Ñœœe×3Ò3°G¸d¸VÓDÓEÈÈÀzÔRØ×Ñœœe×3Ò3°G¸d¸VÓDÓEÈÈÀzÔRØ×ÑÜ”×&Ò& x°$°Ó8Ó9Ú;Ð<ô	
ð 	×ÑÜ”×&Ò& }°t°fÓ=Ó>ÒAUÐ@Vô	
ð 	×ÑÜ”×&Ò& x°$°Ó8Ó9Ú)Ð*ô	
ð 	×ÑÜ”×&Ò& y°4°&Ó9Ó:¸dÀF¸^Ð<Lô	
ð 	×ÑÜ”×&Ò& y°4°&Ó9Ó:¸dÀF¸^Ð<Lô	
ð 	×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ"ÈdÈÈÔUØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRØ×ÑÜ”×&Ò& y°4°&Ó9Ó:Ú9Ð:ô	
ô ×&Ò&Ð'GÓHˆØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°G¸d¸VÓDÓEÈÈtÈÀ~ÔVØ×ÑÜ”×&Ò& y°4°&Ó9Ó:ÚPÐQô	
ð 	×Ñœœe×3Ò3°MÀDÀ6ÓJÓKÈtÈfÈXÔVÜ×&Ò&Ð'FÓGˆØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ&ÈÈ
ÔSØ×ÑÜ”×&Ò& y°4°&Ó9Ó:ÚNÐOô	
ô ×&Ò&ØNó
ˆð 	×ÑÜ”×&Ò& y°4°&Ó9Ó:òð
ô	
ð 	×ÑÜ”×&Ò& y°4°&Ó9Ó:òð
ö	
r"   c                ó¨   € \         P                  ! R4      pV P                  \        P                  \
        \        P                  ! RV.4      4       R# )z3
Test error handling of undefined tgrep operators.
r¦   z* >>> SN)r   rt   ÚassertRaisesr   ÚTgrepExceptionru   rv   rx   s   & r   Útest_bad_operatorÚ'TestSequenceFunctions.test_bad_operator­  s?   € ô ×&Ò&Ð'@ÓAˆØ×ÑÜ× Ñ ¤$¬×(=Ò(=¸iÈ$ÈÓ(Pö	
r"   c                ó  € \         P                  ! R4      pRpV P                  \        \        P
                  ! W!.4      4      RR..4       RpV P                  \        \        P
                  ! W1.4      4      RR..4       R# )zH
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
        zg
        # macros
        @ NP /^NP/;
        @ NN /^NN/;

        # search string
        @NN
        Nrˆ   r�   r   )r   ry   Úsearch1Úsearch2s   &   r   Útest_commentsÚ#TestSequenceFunctions.test_comments¶  sw   € ô
 ×&Ò&Ð'AÓBˆðˆð
 	×Ñœœe×3Ò3°G¸VÓDÓEÈÈtÈÀ~ÔVðˆð 	×Ñœœe×3Ò3°G¸VÓDÓEÈÈtÈÀ~ÖVr"   c                ó2  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R	..4       V P                  \        \        P
                  ! RV.4      4      R	..4       V P                  \        \        P
                  ! RV.4      4      RR	..4       R# )
z'
Test matching sister nodes in a tree.
ú(S (A x) (B x) (C x))z* $. Bz* $.. Bz* $, Bz* $,, Bz* $ BNrˆ   r�   r   rx   s   & r   Útest_rel_sister_nodesÚ+TestSequenceFunctions.test_rel_sister_nodesÌ  sß   € ô ×&Ò&Ð'>Ó?ˆØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRØ×Ñœœe×3Ò3°G¸d¸VÓDÓEÈÈtÈÀ~ÖVr"   c                ó¾  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! R	V.4      4      R..4       \         P                  ! R
4      pV P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       R# )z@
Test matching nodes based on their index in their parent node.
r¿   z* >, Sz* >1 Sz* >2 Sz* >3 Sz* >' 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 ANrˆ   r‡   r�   r   rx   s   & r   Útests_rel_indexed_childrenÚ0TestSequenceFunctions.tests_rel_indexed_children×  sª  € ô ×&Ò&Ð'>Ó?ˆØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRÜ×&Ò&ØVó
ˆð 	×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°H¸t¸fÓEÓFÈ$ÈÈÔQØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRØ×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÖRr"   c                ór  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      . RO.4       V P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P
                  ! RV.4      4      . RO.4       V P                  \        \        P
                  ! RV.4      4      . RO.4       V P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P
                  ! RV.4      4      . RO.4       V P                  \        \        P
                  ! RV.4      4      . RO.4       V P                  \        \        P
                  ! R	V.4      4      . RO.4       R
# )z4
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* . Xz* . Yz* .. Xz* .. Yz* , Xz* , Yz* ,, Xz* ,, YN)rˆ   rr   r®   r¨   r±   )rˆ   r¬   r§   rr   r®   )rˆ   r¬   r§   rr   r®   r¨   r±   ©rq   rn   rq   ©rq   rn   rq   rn   )r�   ©ro   rn   ©ro   rn   rn   ©ro   rn   rn   rn   )rÆ   rÇ   r�   rÈ   rÉ   rÊ   r   rx   s   & r   Útest_rel_precedenceÚ)TestSequenceFunctions.test_rel_precedenceð  s‰  € ô ×&Ò&ð&ó
ˆð
 	×ÑÜ”×&Ò& w°°Ó7Ó8Ò;TÐ:Uô	
ð 	×ÑÜ”×&Ò& w°°Ó7Ó8¸IÀ|Ð;TÐ:Uô	
ð 	×ÑÜ”×&Ò& x°$°Ó8Ó9Ú9Ð:ô	
ð 	×ÑÜ”×&Ò& x°$°Ó8Ó9ÚRÐSô	
ð 	×ÑÜ”×&Ò& w°°Ó7Ó8¸IÀ|Ð;TÐ:Uô	
ð 	×ÑÜ”×&Ò& w°°Ó7Ó8Ú4Ð5ô	
ð 	×ÑÜ”×&Ò& x°$°Ó8Ó9ÚMÐNô	
ð 	×ÑÜ”×&Ò& x°$°Ó8Ó9Ú4Ð5ö	
r"   c                ó   € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      RR..4       \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      RR..4       \         P                  ! R	4      pV P                  \        \        P
                  ! R
V.4      4      R..4       \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      R..4       R# )z1
Test the Basic Examples from the TGrep2 manual.
z(S (NP (AP x)) (NP (PP x)))rE   z$(S (NP x) (VP x) (NP (PP x)) (VP x))rG   z6(S (NP (AP x)) (NP (PP x)) (NP (DET x) (NN x)) (VP x))rH   zX(S (NP (NP (PP x)) (NP (AP x))) (VP (AP (NP (PP x)) (NP (AP x)))) (NP (RC (NP (AP x)))))rI   z:(S (NP (AP (PP x) (VP x))) (NP (AP (PP x) (NP x))) (NP x))rJ   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))rK   z;(S (S (C x) (A (B x))) (S (C x) (A x)) (S (D x) (A (B x))))rL   z/(S (S (A (B x) (C x))) (S (S (C x) (A (B x)))))rM   rN   Nr‡   r�   rr   rÆ   rˆ   r   rx   s   & r   Útest_examplesÚ#TestSequenceFunctions.test_examples  sC  € ô ×&Ò&Ð'DÓEˆà×Ñœœe×3Ò3°IÀ¸vÓFÓGÈ4È&ÈÔRä×&Ò&Ð'MÓNˆð 	×Ñœœe×3Ò3°OÀdÀVÓLÓMÐQUÐPVÈxÔXä×&Ò&ØGó
ˆð
 	×ÑÜ”×&Ò&Ð'8¸4¸&ÓAÓBÀdÈDÀ\ÀNô	
ô ×&Ò&ð&ó
ˆð 	×ÑÜ”×&Ò&Ð'AÀDÀ6ÓJÓKØ�iÐ Ð!ô	
ô
 ×&Ò&ØKó
ˆð 	×ÑÜ”×&Ò&Ð'8¸4¸&ÓAÓBÀdÀVÀHô	
ô ×&Ò&ðó
ˆð 	×ÑÜ”×&Ò&Ð'@À4À&ÓIÓJÈdÈVÈHô	
ô ×&Ò&ØLó
ˆð
 	×ÑÜ”×&Ò&Ð'8¸4¸&ÓAÓBÀdÀVÀHô	
ô ×&Ò&Ø=ó
ˆð
 	×ÑÜ”×&Ò&Ð':¸T¸FÓCÓDÈÀvÀhô	
ð
 	×ÑÜ”×&Ò&Ð'8¸4¸&ÓAÓBÀdÀVÀHö	
r"   c                ó  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        P                  \        \        P
                  ! RV.4      4       R# )z(
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 !$.. @NNz,@ NP /^NP/;
@ NN /^NN/;
@CNP !< @NP !$.. @NNNr‡   )ro   ro   )r   rt   r   ru   r   rv   rµ   r¶   rx   s   & r   Útest_use_macrosÚ%TestSequenceFunctions.test_use_macrosf  sƒ   € ô ×&Ò&ð6ó
ˆð
 	×ÑÜÜ×%Ò%ØCÀdÀVóóð
 �Fˆ^Ðô	
ð 	×ÑÜ× Ñ ÜÜ×!Ò!Ø@À4À&óö	
r"   c                ó¦   € V P                  \        P                  ! R4      . RO4       V P                  \        P                  ! R4      . RO4       R# )z#Test tokenization of labeled nodes.ú!S < @SBJ < (@VP < (@VB $.. @OBJ))z%S < @SBJ=s < (@VP=v < (@VB $.. @OBJ))N)rT   r   ú@SBJr   r
   ú@VPr   r
   ú@VBr@   ú@OBJr   r   )rT   r   rÕ   Ú=Úsr   r
   rÖ   rÙ   Úvr   r
   r×   r@   rØ   r   r   r$   r%   s   &r   Útest_tokenize_node_labelsÚ/TestSequenceFunctions.test_tokenize_node_labels€  sH   € à×ÑÜ× Ò Ð!DÓEòô	
ð$ 	×ÑÜ× Ò Ð!HÓIòö	
r"   c                óV   € V P                  \        P                  ! R4      . RO4       R# )z(Test tokenization of segmented patterns.z0S < @SBJ=s < (@VP=v < (@VB $.. @OBJ)) : =s .. =vN)rT   r   rÕ   rÙ   rÚ   r   r
   rÖ   rÙ   rÛ   r   r
   r×   r@   rØ   r   r   Ú:z=sr	   z=vr$   r%   s   &r   Ú test_tokenize_segmented_patternsÚ6TestSequenceFunctions.test_tokenize_segmented_patterns«  s$   € à×ÑÜ× Ò Ð!SÓTòö	
r"   c           	     ód  € Rp\         P                  ! R4      p\         P                  ! R4      pVP                  R4      ^ ,          R,           pRpV P                  \	        \
        P                  ! WB.4      4      ^ ,          4       V P                  \	        \
        P                  ! W.4      4      ^ ,          4       V P                  \	        \
        P                  ! WR.4      4      ^ ,          4       V P                  \	        \
        P                  ! W.4      4      \	        \
        P                  ! WR.4      4      4       V P                  \	        \
        P                  ! WC.4      4      ^ ,          4       V P                  \	        \
        P                  ! W.4      4      ^ ,          4       V P                  \	        \
        P                  ! WS.4      4      ^ ,          4       V P                  \	        \
        P                  ! W.4      4      \	        \
        P                  ! WS.4      4      4       R# )z6
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Ô   z-S < (/.*SBJ/ $.. (/VP/ < (/VB/ $.. /.*OBJ/)))N)	r   rt   ÚsplitÚ
assertTrueru   r   rv   r   ÚassertFalse)r   ÚsearchÚsent1Úsent2Úsearch_firsthalfÚsearch_rewrites   &     r   Útest_labeled_nodesÚ(TestSequenceFunctions.test_labeled_nodesÈ  sŸ  € ð	@ˆô ×'Ò'Ø@ó
ˆô ×'Ò'Ø@ó
ˆð "Ÿ<™<¨Ó/°Õ2Ð5XÕXÐØHˆà�‰œœU×2Ò2Ð3CÀWÓMÓNÈqÕQÔRØ�‰œœU×2Ò2°6¸7ÓCÓDÀQÕGÔHØ�‰œœU×2Ò2°>À7ÓKÓLÈQÕOÔPØ×ÑÜ”×&Ò& v¨wÓ7Ó8Ü”×&Ò& ~°wÓ?Ó@ô	
ð 	�‰œœU×2Ò2Ð3CÀWÓMÓNÈqÕQÔRØ×Ñœœe×3Ò3°F¸GÓDÓEÀaÕHÔIØ×Ñœœe×3Ò3°NÀGÓLÓMÈaÕPÔQØ×ÑÜ”×&Ò& v¨wÓ7Ó8Ü”×&Ò& ~°wÓ?Ó@ö	
r"   c                ó   € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      R..4       V P                  \        \        P
                  ! RV.4      4      RR..4       R# )zU
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)z(A < B < C)Nr‡   rˆ   r   )r   Úsents   & r   Útest_multiple_conjsÚ)TestSequenceFunctions.test_multiple_conjsð  sr   € ô
 ×&Ò&Ð'PÓQˆð 	×ÑÜ”×&Ò&Ð'8¸4¸&ÓAÓBÀdÀVÀHô	
ð 	×ÑÜ”×&Ò& }°t°fÓ=Ó>À$ÈÀÀö	
r"   c                ój  € \         P                  ! R4      pV P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P
                  ! RV.4      4      RR..4       V P                  \        \        P
                  ! RV.4      4      RR..4       R# )zX
Test that semicolons at the end of a tgrep2 search string won't
cause a parse failure.
rk   rf   zNN;zNN;;Nrm   rp   r   rx   s   & r   Útest_trailing_semicolonÚ-TestSequenceFunctions.test_trailing_semicolonÿ  s    € ô
 ×&Ò&ØRó
ˆð 	×Ñœœe×3Ò3°D¸4¸&ÓAÓBÀfÈfÐEUÐDVÔWØ×Ñœœe×3Ò3°E¸D¸6ÓBÓCÀvÈvÐFVÐEWÔXØ×ÑÜ”×&Ò& v°¨vÓ6Ó7¸6À6Ð:JÐ9Kö	
r"   rŒ   N)$Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r    r&   rB   rV   rY   ra   rh   rz   r€   rƒ   r‰   rŽ   r“   r–   r£   r©   r²   r·   r¼   rÀ   rÃ   rË   rÎ   rÑ   rÜ   rà   rë   rï   rò   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @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"   