B
    .(b                 @   s  d dl m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ddd	dgZdd	ddddgZddddddgZd
dddd	dd
ddgZd
d	ddd	dd
ddgZdZdZdZdZdZejdd Zejdd Zejdejeeej dejeeej dejeeej deefejeeej dgdd Zejjejdeefeefeefeefeefgdd Zdd Zdd Zdd Z d d! Z!dS )"    )unicode_literalsN)English)Matcher)DocSpanA1)ORTHOP*BzAA*zA*AZAAzBA*BzB*A*Bc               C   s   dS )Nz(ABBAAAAAB). r   r   r   U/home/dcms/DCMS/lib/python3.7/site-packages/spacy/tests/matcher/test_matcher_logic.pytext!   s    r   c             C   s   | d |}|S )N )join)Zen_tokenizerr   docr   r   r   r   &   s    r   zpattern,re_pattern)Zmarksc       	      C   sf   t | j}|||g || }dd t||D }x*t||D ]\}}|dd |ksBtqBW dS )zcTest that the greedy matching behavior of the * op is consistant with
    other re implementations.c             S   s   g | ]}|  qS r   )span).0mr   r   r   
<listcomp><   s    z(test_greedy_matching.<locals>.<listcomp>   N)r   vocabaddrefinditerzipAssertionError)	r   r   pattern
re_patternmatchermatches
re_matchesmatchre_matchr   r   r   test_greedy_matching,   s    
r%   c             C   sN   t | j}|||g || }dd t||D }t|t|ksJtdS )zPTest that matcher.__call__ consumes tokens on a match similar to
    re.findall.c             S   s   g | ]}|  qS r   )r   )r   r   r   r   r   r   R   s    z(test_match_consuming.<locals>.<listcomp>N)r   r   r   r   r   lenr   )r   r   r   r   r    r!   r"   r   r   r   test_match_consumingA   s
    
r'   c       
      C   s   ddddddddd	d
ddddddg}x|D ]\}}}t | }t|jt|d}g }x>| D ]2}|dr||d dd q\|d|i q\W |d|g ||}	|r|	st||fq*|	r*t||fq*W d S )N)aaabza a a bT)r(   za+ bT)r(   za+ a+ bT)r(   z	a+ a+ a bT)r(   z
a+ a+ a+ bT)r(   za+ a a bT)r(   za+ a aT)r(   za+T)aaaza+ bF)r)   za+ a+ bF)r)   z
a+ a+ a+ bF)r)   za+ a bF)r)   za+ a a bF)r(   za+ a bT)words+r   )r	   r
   r	   ZPATTERN)	r   r   r   listsplitendswithappendr   r   )
en_vocabZcasesstringZpattern_strresultr    r   r   partr!   r   r   r   test_operator_combosV   s:    
r4   c                s   t |  ddidddg} d|g  fdd}t |dd	ksLtt |d
dksdtt |dd	ks|tt |ddkstt |ddkstt |ddkstdS )zBTest matcher works when patterns end with * operator. (issue 1450)r	   abr   )r	   r
   ZTSTENDc                s   t  j|  dS )N)r*   )r   r   r-   )r1   )r    r   r   <lambda>       z,test_matcher_end_zero_plus.<locals>.<lambda>r   za b   za cza b cza b b c   za b bN)r   r   r&   r   )r0   r   nlpr   )r    r   test_matcher_end_zero_plusz   s    r<   c                s   t | }dddgiigdddgiigdddgiigg}|d| t| d d | } fd	d
|D }|dddgks~td S )NZLOWERINZzeroZoneZtwoZTESTzzero one two three)r*   c                s$   g | ]\}}}t  |||d jqS ))label)r   r   )r   Lse)r   r   r   r      s    z;test_matcher_sets_return_correct_tokens.<locals>.<listcomp>)r   r   r   r-   r   )r0   r    patternsr!   Ztextsr   )r   r   'test_matcher_sets_return_correct_tokens   s    rC   c           	   C   s   t  } t| j}d}ddiddig}t|dks4t|d|g d|ksNt|| |}t|dksjt|d || |}t|dksttt	 |d W d Q R X d S )	NzThis is a test case.r	   testr
   ?r   ZRuler9   )
r   r   r   r&   r   r   removepytestZraises
ValueError)r;   r    r   r   Zresults1Zresults2r   r   r   test_matcher_remove   s    

rI   )"
__future__r   rG   r   Zspacy.lang.enr   Zspacy.matcherr   Zspacy.tokensr   r   Zpattern1Zpattern2Zpattern3Zpattern4Zpattern5Zre_pattern1Zre_pattern2Zre_pattern3Zre_pattern4Zre_pattern5Zfixturer   r   markZparametrizeparamZxfailr%   r'   r4   r<   rC   rI   r   r   r   r   <module>   sP   "$