o
    hf#                     @   s  d Z ddlZddlZddlm  mZ ddlmZ ddlm	Z	 ddl
mZ ddlT ejjejjgZddd	d
dddddd	dddddddddd	ddddddddddd
ddddd dd!d"d#ggZddd	d
dddddd	dddddddddd	dddddddddd	ddddd dd!d"d#gddd	d
ddddd$d	ddddddddd%d	ddddddddd&d	ddddd dd!d'd#ggZeed(Zeed)ZdCd*d+Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@  Z!dAdB Z"dS )Dz
Test the semgrex interface
    N)Document)SemgrexRequest)CoNLL)*   UnbanunbanVERBVBzMood=Imp|VerbForm=Finrootzstart_char=0|end_char=5)	idtextlemmauposxposfeatsheaddeprelmisc   MoxPROPNNNPzNumber=Sing   compoundzstart_char=6|end_char=9Opalobjzstart_char=10|end_char=14GEM)
r   r   r   r   r   r   r   r   r   ner   !PUNCT.punctzstart_char=14|end_char=15)r   r   r   r   r   r   r   r   zstart_char=16|end_char=21zstart_char=22|end_char=25zstart_char=26|end_char=30zstart_char=30|end_char=31zUnban Mox Opal!zUnban Mox Opal! Unban Mox Opal!c                 C   s  t | j|ks	J t | jd j|ksJ | jd jD ]i}t |jdks&J |jd j|ks0J |jD ]P}t |jdks>J |jd jdksHJ |jd j|ksRJ |jd jdks\J |jd j|ksfJ t |jdksoJ |jd jdksyJ |jd j|ksJ q3qd S )Nr   r   r   sourcetargetzzz)lenresultmatch
matchIndexnodenamereln)responseresponse_lensemgrex_lensource_indextarget_indexr-   semgrex_resultr)    r4   [/var/www/html/env_mimamsha/lib/python3.10/site-packages/stanza/tests/server/test_semgrex.pycheck_response   s    
r6   c                  C   sn   t  )} | td}t| | td}t| | td}t|dd W d    d S 1 s0w   Y  d S N{}=source >obj=zzz {}=targetr   )r/   )semgrexSemgrexprocessONE_SENTENCE_DOCr6   TWO_SENTENCE_DOC)semr.   r4   r4   r5   
test_multi   s   
"r?   c                  C   s   t td} t|  d S )Nr8   r9   process_docr<   r6   r.   r4   r4   r5   test_single_sentence   s   rC   c                  C   s   t tdd} t| dd d S )Nr8   r   )r0   r@   rB   r4   r4   r5   test_two_semgrex   s   rD   c                  C   s   t td} t| dd d S r7   )r9   rA   r=   r6   rB   r4   r4   r5   test_two_sentences   s   rE   c                  C       t td} t| dddd d S )Nz*{word:Mox}=source <=zzz {word:Opal}=targetr   r   r   r/   r1   r-   r@   rB   r4   r4   r5   test_word_attribute      rH   c                  C   rF   )Nz,{lemma:Mox}=source <=zzz {lemma:Opal}=targetr   r   r   rG   r@   rB   r4   r4   r5   test_lemma_attribute   rI   rJ   c                  C   s<   t td} t| dddd t td} t| dddd d S )Nz){tag:NNP}=source <=zzz {word:Opal}=targetr   r   r   rG   z){pos:NNP}=source <=zzz {word:Opal}=targetr@   rB   r4   r4   r5   test_xpos_attribute   s   rK   c                  C   rF   )Nz,{cpos:PROPN}=source <=zzz {word:Opal}=targetr   r   r   rG   r@   rB   r4   r4   r5   test_upos_attribute   rI   rL   c                  C   rF   )Nz*{cpos:PROPN}=source <=zzz {ner:GEM}=targetr   r   r   rG   r@   rB   r4   r4   r5   test_ner_attribute   rI   rM   c                  C   s   t  } | jd | j }tg dD ]\}}|j }||_||_|j	j
 }d|_|d |_q|j	j }d|_d|_d|_|j	j }d|_d|_d|_t| }t| dS )	z}
    Essentially a test program: the result should be a response with
    one match, two named nodes, one named relation
    r8   )r   r   r   r   r   r   r   r   N)r   r9   appendqueryadd	enumeratetokenwordvaluegraphr+   sentenceIndexindexedger$   r%   depsend_semgrex_requestr6   )requestrO   idxrS   rR   r+   rX   r.   r4   r4   r5   test_hand_built_request   s(   


r]   a  
# sent_id = weblog-juancole.com_juancole_20051126063000_ENG_20051126_063000-0007
# text = You wonder if he was manipulating the market with his bombing targets.
1	You	you	PRON	PRP	Case=Nom|Person=2|PronType=Prs	2	nsubj	_	_
2	wonder	wonder	VERB	VBP	Mood=Ind|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin	1	_	_	_
3	if	if	SCONJ	IN	_	6	mark	_	_
4	he	he	PRON	PRP	Case=Nom|Gender=Masc|Number=Sing|Person=3|PronType=Prs	6	nsubj	_	_
5	was	be	AUX	VBD	Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin	6	aux	_	_
6	manipulating	manipulate	VERB	VBG	Tense=Pres|VerbForm=Part	2	ccomp	_	_
7	the	the	DET	DT	Definite=Def|PronType=Art	8	det	_	_
8	market	market	NOUN	NN	Number=Sing	6	obj	_	_
9	with	with	ADP	IN	_	12	case	_	_
10	his	his	PRON	PRP$	Case=Gen|Gender=Masc|Number=Sing|Person=3|Poss=Yes|PronType=Prs	12	nmod:poss	_	_
11	bombing	bombing	NOUN	NN	Number=Sing	12	compound	_	_
12	targets	target	NOUN	NNS	Number=Plur	6	obl	_	SpaceAfter=No
13	.	.	PUNCT	.	_	2	punct	_	_
c                  C   st  t jtd} t| d}t|}t|jdksJ t|jd jdks&J t|jd jd jdks5J t|jd jd jd j	dksGJ |jd jd jd j	d j
dksZJ |jd jd jd j	d jdksmJ t|jd jd jd jdksJ |jd jd jd jd jdksJ |jd jd jd jd jdksJ |jd jd jd jd jdksJ dS )	zg
    A user / contributor sent a dependency file with blank dependency labels and twisted up roots
    )	input_strz{}=root <_=edge {}r   r   r   r   _N)r   	conll2docBLANK_DEPENDENCY_SENTENCEr9   build_requestrZ   r'   r(   r)   r+   r,   r*   rX   r$   r%   r-   )blank_dep_docblank_dep_requestr.   r4   r4   r5   test_blank_dependency  s   
$&&$&&*re   )r   r   r   r   r   )#__doc__pyteststanzastanza.server.semgrexserverr9   stanza.models.common.docr   stanza.protobufr   stanza.utils.conllr   stanza.testsmarktravisclient
pytestmarkTEST_ONE_SENTENCETEST_TWO_SENTENCESr<   r=   r6   r?   rC   rD   rE   rH   rJ   rK   rL   rM   r]   lstripra   re   r4   r4   r4   r5   <module>   s(   0-
X

	