B
    .(b                 @   sV  d dl m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 d dlmZ d dlmZ d	d
l	mZ ejdd Zejdd Zejdddd Zejdd Zejdddgdd Zejddgdd Zejddgdd  Zd3d%d&Z d'd( Z!d)d* Z"d+d, Z#d-d. Z$d/d0 Z%d1d2 Z&dS )4    )unicode_literalsN)Path)util)
prefer_gpurequire_gpu)
symlink_tosymlink_removepath2str
is_windows)PrecomputableAffine)CalledProcessError   )make_tempdirc               C   s   t dS )Nz./foo-target)r    r   r   D/home/dcms/DCMS/lib/python3.7/site-packages/spacy/tests/test_misc.pysymlink_target   s    r   c               C   s   t dS )Nz./foo-symlink)r   r   r   r   r   symlink   s    r   function)Zscopec                s2     stt  fdd}| | d S )Nc                  s"      rt  tt d S )N)existsr   osrmdirr	   r   )r   r   r   r   cleanup"   s    z%symlink_setup_target.<locals>.cleanup)r   r   mkdirr	   Zaddfinalizer)requestr   r   r   r   )r   r   r   symlink_setup_target   s    r   c              C   s:   yt  dk} W n$ tk
r4   tjj dk} Y nX | S )z/Determine if the tests are run as admin or not.r   )r   getuidAttributeErrorctypeswindllshell32ZIsUserAnAdmin)Zadminr   r   r   is_admin+   s
    r    textzhello/worldzhello worldc             C   s   t | }t|tstd S )N)r   Zensure_path
isinstancer   AssertionError)r!   pathr   r   r   test_util_ensure_path_succeeds6   s    
r%   packagenumpyc             C   s   t | stdS )zHTest that an installed package via pip is recognised by util.is_package.N)r   
is_packager#   )r&   r   r   r   test_util_is_package<   s    r)   Zthincc             C   s   t | }t|tstdS )z7Test that a Path object is returned for a package name.N)r   Zget_package_pathr"   r   r#   )r&   r$   r   r   r   test_util_get_package_pathB   s    
r*               c       
      C   sX  t | |||d}|jj|| ||fks(t|jd|f}||\}}|j|jd d || |fksft|jjd|| |fks~t|jd| |f}|jd|f}	d|	d< d|d< |jd d	kst|||	 |jd d
kst|j	d	 |		d	 |	d	 d|	d< d|	d< d|	d< d|d< |jd d	ks4t|||	 |jd dksTtd S )N)nOnInFnP
   r   r      )r   r.   )r   r.   r   r   g        g      ?)r   r   )r   r   g      @)
r   Wshaper#   opsallocateZbegin_updateZd_padZ_backprop_paddingfill)
r/   r0   r1   r2   modelZtensorYZget_dXZdYidsr   r   r   test_PrecomputableAffineI   s.     

r>   c              C   s0   ydd l } W n tk
r*   t r&tY nX d S )Nr   )cupyImportErrorr   r#   )r?   r   r   r   test_prefer_gpuc   s    rA   c              C   sB   ydd l } W n0 tk
r<   tt t  W d Q R X Y nX d S )Nr   )r?   r@   pytestraises
ValueErrorr   )r?   r   r   r   test_require_gpuj   s
    rE   c          
   C   s   |  st|sts^yt|| |  s,tW q tk
rZ } zt| W dd}~X Y qX n,tt t|| W dQ R X |  rtdS )zTest the creation of symlinks on windows. If run as admin or not on windows it should succeed, otherwise a CalledProcessError should be raised.N)r   r#   r
   r   r   rB   ZfailrC   )r   r   r   r    er   r   r   test_create_symlink_windowsr   s    
rG   c              C   sB   t tjj} x0| dD ]"}tdd |jD st|jqW dS )z{Test that all filenames in the project are ASCII.
    See: https://twitter.com/_inesmontani/status/1177941471632211968
    z**/*c             s   s   | ]}t |d k V  qdS )   N)ord).0cr   r   r   	<genexpr>   s    z'test_ascii_filenames.<locals>.<genexpr>N)r   __file__parentgloballnamer#   )rootr$   r   r   r   test_ascii_filenames   s    rS   c           	   C   sJ   t d} | jdkst| jg ks&ttt t d W dQ R X dS )z`Test that using a model name like "blank:en" works as a shortcut for
    spacy.blank("en").
    zblank:enenzblank:fjsfijsdofN)r   
load_modellangr#   ZpipelinerB   rC   r@   )nlpr   r   r   test_load_model_blank_shortcut   s
    
rX   c           
   C   s   t d} | jd dstt }| | t|d }t | d| jd< t	
|| j t | d| jd< t	
|| j tt t | W dQ R X d| jd< t	
|| j tt t | W dQ R X W dQ R X dS )	zTest warnings for various spacy_version specifications in meta. Since
    this is more of a hack for v2, manually specify the current major.minor
    version to simplify test creation.zblank:enZspacy_versionz>=2.3z	meta.jsonz>=2.3.0,<2.4.0z>=2.2.5Nz>@#$%_invalid_version)r   rU   meta
startswithr#   r   Zto_diskr   Zget_model_metasrsly
write_jsonrB   ZwarnsUserWarning)rW   d	meta_pathr   r   r   test_load_model_version_compat   s"    






r`   )r+   r,   r-   r.   )'
__future__r   rB   r   r   r[   pathlibr   Zspacyr   r   r   Zspacy.compatr   r   r	   r
   Z	spacy._mlr   
subprocessr   r   Zfixturer   r   r   r    markZparametrizer%   r)   r*   r>   rA   rE   rG   rS   rX   r`   r   r   r   r   <module>   s2   
	