o
    i:                     @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 ddlmZ ejdd Zejd	d
 Zejdd Zdd Zdd Zdd Zdd Zejdg ddd Zejdg ddd Zdd Zejdd d! Zejd"d#d$ Zejd"d%d& ZdS )'    N)Mock)DependencyMatcher)DocToken   )clean_underscorec                 C   s(   g d}g d}g d}t | |||dS )N)	Thequickbrownfoxjumpedoverthelazyr   )	   r   r      r   r      r      )	detamodr   nsubjROOTpreppobjr   r   wordsheadsdeps)r   )en_vocabr   r   r    r   _/home/ubuntu/.local/lib/python3.10/site-packages/spacy/tests/matcher/test_dependency_matcher.pydoc   s   r!   c                 C   s   dd }|  |}dddidddddd	d
dddd|didg}dddiddddddiddddddidg}dddiddddddiddddddidg}dddiddddddidg}dddiddddddidg}|||||gS )Nc                 S   s   t td| S )Nzbrown|yellow)boolrecompilematch)textr   r   r    is_brown_yellow   s   z!patterns.<locals>.is_brown_yellowr   ORTHRIGHT_IDRIGHT_ATTRS>qr	   r   r(   DEPLEFT_IDREL_OPr*   r+   rTr   fox1.r   >>r
   )add_flag)r   r'   IS_BROWN_YELLOWpattern1pattern2pattern3pattern4pattern5r   r   r    patterns   sj   

r>   c                 C   sh   t | }t }tdt|d D ]!}|dkr"|jd|d g|d q|dt| ||d  g q|S )N   r9   r   on_matchpattern)r   r   rangelenaddstr)r   r>   r!   matchermockir   r   r    dependency_matcherd   s    rJ   c                 C   s  t | dksJ d| v sJ | dd |d gfksJ | |}t |dks(J |d d g dks4J |d d g dks@J |d d g d	ksLJ |d
 d dd
gksXJ |d d dd
gksdJ |d d ddgkspJ |dd }| |}t |dksJ |d d g dksJ |d d g dksJ |d d g d	ksJ |d
 d dd
gksJ |d d dd
gksJ d S )Nr   r;   r      r   r?   r   r?   r   r   r   r   r   r   r   r   r   r   )rD   get)rJ   r!   r>   matchesspanr   r   r    test_dependency_matcherq   s&   rR   c                 C   s  t | }tdt|d D ]}|dt| ||d  g q||}|d d g dks/J |d d g dks;J |d d g dksGJ |d d d	dgksSJ |d	 d d	dgks_J |d
 d d	dgkskJ t|}t|}t|t|ksJ ||}|d d g dksJ |d d g dksJ |d d g dksJ |d d d	dgksJ |d	 d d	dgksJ |d
 d d	dgksJ d S )Nr?   rB   r   rL   rM   r   rN   r   r   r   r   )r   rC   rD   rE   rF   pickledumpsloads)r   r>   r!   rG   rI   rP   b	matcher_rr   r   r    test_dependency_matcher_pickle   s(    

rX   c                 C   s2  dddidddddddd	ddd
ddid	g}t | }|d|g tt |d| W d    n1 s:w   Y  tt |d|dd  g W d    n1 sZw   Y  tt t|}|d d= |d|g W d    n1 sw   Y  tt t|}|d d= |d|g W d    n1 sw   Y  tt t|}|d d= |d|g W d    n1 sw   Y  tt t|}|d d= |d|g W d    n1 sw   Y  tt t|}|d d= |d|g W d    n	1 sw   Y  tt t|}d|d d< |d|g W d    n	1 sAw   Y  tt t|}d|d d< |d|g W d    n	1 siw   Y  tt t|}d|d d< |d|g W d    d S 1 sw   Y  d S )Nr   r(   r)   r,   r-   r	   r   r.   r0   r3   r
   FOUNDEDr?   r   r*   r+   r1   r2   z!!!BARFOO)	r   rE   pytestraises
ValueErrorcopydeepcopywarnsUserWarning)r   rB   rG   r:   r   r   r    *test_dependency_matcher_pattern_validation   sx   












$rc   c           	      C   s   dddidg}dddidg}t | }t }|jd|g|d |jd|g|d ||}t|dks5J |||d	| t | }|d|g ||}||ksRJ d S )
Nr	   r(   r)   NOMATCHrB   r@   nomatch_patternr?   r   )r   r   rE   rD   assert_called_once_with)	r   r!   rB   re   rG   rH   rP   matcher2matches2r   r   r     test_dependency_matcher_callback   s   ri   zop,num_matches))r5   r   ).*   );r   );*rk   c                 C   s6  t | g dd g ddgd d}d}dD ]}}dd	|id
d|di dg}t| }|d|g ||}|t|7 }|D ]U}	|	\}
}|dkrS|d |d d ksRJ n.|dkrd|d |d d kscJ n|dkrs|d |d k srJ n|dkr|d |d ksJ ||d  j||d  jksJ q<q||ksJ d S )N)arV   cder   )
r   r   r   r   r   r   r   r   r   r   dep
   r   r   1r(   r)   2r0   Ar5   r?   rl   rj   rm   )r   r   rE   rD   sent)r   opnum_matchesr!   match_countr&   rB   rG   rP   r%   match_id	token_idsr   r   r    &test_dependency_matcher_precedence_ops   s8   
"r}   zleft,right,op,num_matches)E)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   r6   r   )r   r   r6   r?   )r   r   r6   r   )r   r   r5   r?   )r   r   r5   r?   )r   r   r5   r   )r   r   r5   r   )r   r   rl   r   )r   r   rl   r   )r   r   rl   r   )r   r   rl   r   )r	   r   rj   r   )r   r   rj   r   )r   r   rj   r?   )r   r   rm   r?   )r	   r   rm   r   )r   r   rm   r?   )r   r   rm   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   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   c           
      C   sf   |}||kr
|d }|d|id|||d|idg}t | }|d|g ||}	t|	|ks1J d S )Nru   LOWERr)   r0   rB   )r   rE   rD   )
r   r!   leftrightrx   ry   right_idrB   rG   rP   r   r   r    test_dependency_matcher_ops  s   K
r   c                 C   sX   dddddg}t | }tt |d|g W d    d S 1 s%w   Y  d S )Nr	   r   +)r/   OPr)   rB   )r   r\   r]   r^   rE   )r   r!   rB   rG   r   r   r    $test_dependency_matcher_long_matchesz  s   "r   r   c                 C   s   | d}|D ]
}|d |_ d|_qtjddd d|d j_d	d
ddiidg}t| j}|d|g ||}d}|||d  }t	t
|t
|D ]$\}}	|d |	d ksYJ t	|d |	d D ]\}
}|
|| ksnJ qbqKd S )Nz	a b c d er   rn   is_cF)defaultTr   ro   _r)   Cr?   )headdep_r   set_extensionr   r   r   vocabrE   zipsorted)en_tokenizerr!   tokenrB   rG   doc_matchesoffsetspan_matches	doc_match
span_matchdoc_t_ispan_t_ir   r   r    &test_dependency_matcher_span_user_data  s&   

r   i/$  c                 C   s   | d}|d |d _ dddiddddd	id
dg}dddidddddiddg}t| j}|d||g ||}|g ksBJ t| j}|d|g |d|g ||}|g ks_J d S )NzI like textr?   r   rootr(   liker)   r3   r&   r~   r1   r*   r+   r2   fishr,   check)r   r   r   rE   )r   r!   r9   r:   rG   rP   r   r   r    #test_dependency_matcher_order_issue  s2   


r   c                 C   s   | d}|d |d _ dddiddddd	id
dg}t| j}|d|g |d dddidddddid
dg}|d|g ||}|g ksMJ d S )NzThe red bookr   r?   r   r(   bookr)   r3   redr,   r   r   flagblue)r   r   r   rE   remove)r   r!   r9   rG   r:   rP   r   r   r    test_dependency_matcher_remove  s,   

r   )r_   rS   r#   r\   rH   r   spacy.matcherr   spacy.tokensr   r   doc.test_underscorer   fixturer!   r>   rJ   rR   rX   rc   ri   markparametrizer}   r   r   usefixturesr   issuer   r   r   r   r   r    <module>   s@    

M
@
"
J





-