B
    .(bJ                 @   s   d dl mZ d dlZ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mZmZmZmZ d dlmZ ejdd	d
Zejdd Zg ddddddfddZdd Zdd Zdd Zdd Zdd ZdS )    )unicode_literalsN)Path)Errors)DocSpan)POSTAGHEADDEPLEMMA)path2strrc             c   s   t j| d}|V  |  d S )N)mode)tempfileTemporaryFileclose)r   f r   ?/home/dcms/DCMS/lib/python3.7/site-packages/spacy/tests/util.pymake_tempfile   s    r   c              c   s$   t t } | V  tt|  d S )N)r   r   mkdtempshutilrmtreer   )dr   r   r   make_tempdir   s    r   c                s  |r|sdgt | }g }g }	|||||g}
tttttg}xVt|
D ]J\}}|dk	rDt |t |krnttj	|
||  ||k	rD|	| qDW x|	D ]}| j| qW t| |d |r |}d}x|
D ]}|r||kr&xtt |D ].}|jdkr|| ||< q|| |||f< qW nRxPtt |D ]@}|jdkrZ jj||  ||< n jj||  |||f< q4W |d7 }qW  || |r fdd|D  _ S )z:Create Doc object from given vocab, words and annotations.r   N)words   c                s*   g | ]"\}}}t  || jj| d qS ))label)r   vocabstrings).0startendr   )docr   r   
<listcomp>N   s   zget_doc.<locals>.<listcomp>)lenr   r	   r
   r   r   	enumerate
ValueErrorr   ZE189appendextendr   addr   Zto_arrayrangendimr   Z
from_arrayents)r   r   posZheadsdepstagsr-   ZlemmasZheadingsvaluesannotationsZpossible_headingsaZannotvalueattrsjir   )r#   r   get_doc   sH    






r8   c          	   C   s`   x,|D ]$}d|kr| d\}}| | qW | |}x|D ]}|| q@W W dQ R X dS )zXPerform a series of pre-specified transitions, to put the parser in a
    desired state.-N)splitZ	add_labelZstep_through
transition)parserr#   sequenceaction_namemover   Zstepwiser;   r   r   r   apply_transition_sequenceT   s    

r@   c             C   s@   t |d d }| j|d x|D ]\}}| j||d q"W | S )zuAdd list of vector tuples to given vocab. All vectors need to have the
    same length. Format: [("text", [1, 2, 3])]r   r   )width)Zvector)r%   Zreset_vectorsZ
set_vector)r   ZvectorslengthwordZvecr   r   r   add_vecs_to_vocab`   s
    rD   c             C   s$   t | |t j| t j|  S )z Get cosine for two given vectors)numpydotZlinalgZnorm)Zvec1Zvec2r   r   r   
get_cosinej   s    rG   c             C   sl  dd | D dd |D ks t dd | D dd |D ks@t dd | D dd |D ks`t dd | D dd |D kst dd | D dd |D kst dd | D dd |D kst dd | D dd |D kst d	d | D d	d |D kst xdt| j|jD ]R\}}|j|jks,t |j|jks>t |j|jksPt |j|jkst qW d
S )zmCompare two Doc objects and assert that they're equal. Tests for tokens,
    tags, dependencies and entities.c             S   s   g | ]
}|j qS r   )Zorth)r    tr   r   r   r$   r   s    z%assert_docs_equal.<locals>.<listcomp>c             S   s   g | ]
}|j qS r   )r.   )r    rH   r   r   r   r$   t   s    c             S   s   g | ]
}|j qS r   )tag)r    rH   r   r   r   r$   u   s    c             S   s   g | ]}|j jqS r   )headr7   )r    rH   r   r   r   r$   w   s    c             S   s   g | ]
}|j qS r   )dep)r    rH   r   r   r   r$   x   s    c             S   s   g | ]
}|j qS r   )Zis_sent_start)r    rH   r   r   r   r$   y   s    c             S   s   g | ]
}|j qS r   )Zent_type)r    rH   r   r   r   r$   {   s    c             S   s   g | ]
}|j qS r   )Zent_iob)r    rH   r   r   r   r$   |   s    N)AssertionErrorzipr-   r!   r"   r   Zkb_id)Zdoc1Zdoc2Zent1Zent2r   r   r   assert_docs_equalo   s           "rN   c             C   s|   t | }t |}t| t| ks0txFtt| t| D ](\\}}\}}||ksht||ksLtqLW dS )z2Assert that two packed msgpack messages are equal.N)srslyZmsgpack_loadssortedkeysrL   rM   items)Zb1Zb2Zmsg1Zmsg2Zk1Zv1Zk2Zv2r   r   r   assert_packed_msg_equal   s    

,rS   )r   )
__future__r   rE   r   r   
contextlibrO   pathlibr   Zspacyr   Zspacy.tokensr   r   Zspacy.attrsr   r   r	   r
   r   Zspacy.compatr   contextmanagerr   r   r8   r@   rD   rG   rN   rS   r   r   r   r   <module>   s&   4
