B
    0d                 @   sf   d Z ddlZddlZddlZddgZG dd deZG dd dZdd	 Zd
d Z	dd Z
dd ZdS )z
Generic test utilities.

    NPytestTestercheck_free_memoryc               @   s   e Zd ZdZdS )FPUModeChangeWarningzWarning about FPU mode changeN)__name__
__module____qualname____doc__ r	   r	   G/var/www/html/venv/lib/python3.7/site-packages/scipy/_lib/_testutils.pyr      s   r   c               @   s"   e Zd ZdZdd Zd
dd	ZdS )r   z)
    Pytest test runner entry point.
    c             C   s
   || _ d S )N)module_name)selfr   r	   r	   r
   __init__   s    zPytestTester.__init__fast   NFc          
   C   sN  dd l }tj| j }	tj|	jd }
ddg}|r:td|rJ|t	|7 }|rtt
|dkrt|ddt
|d   g7 }|r|d|
 g7 }|d	kr|d
dg7 }n|dkr|d
|g7 }|d kr| jg}|d k	r|dkrt r|dt|g7 }ndd l}|d |dgt	| 7 }y||}W n* tk
rD } z
|j}W d d }~X Y nX |dkS )Nr   z--showlocalsz
--tb=shortzDoctests not supportedr   -vz--cov=r   z-mznot slowfullz-nzMCould not run tests in parallel because pytest-xdist plugin is not available.z--pyargs)pytestsysmodulesr   ospathabspath__path__
ValueErrorlistint_pytest_has_xdiststrwarningswarnmain
SystemExitcode)r   labelverboseZ
extra_argvZdoctestsZcoveragetestsparallelr   modulemodule_pathZpytest_argsr   r#   excr	   r	   r
   __call__   s:    
zPytestTester.__call__)r   r   NFFNN)r   r   r   r   r   r+   r	   r	   r	   r
   r      s    c              C   s   ddl m}  | ddk	S )zQ
    Check if the pytest-xdist plugin is installed, providing parallel tests
    r   )	find_specZxdistN)importlib.utilr,   )r,   r	   r	   r
   r   J   s    r   c             C   s   ddl }y$ttjd }d| tjd }W n< tk
rh   t }|dkrT|d d| |d }Y nX || d k r|| dS )zJ
    Check *free_mb* of memory is available, otherwise do pytest.skip
    r   NZSCIPY_AVAILABLE_MEMz?{0} MB memory required, but environment SCIPY_AVAILABLE_MEM={1}zlCould not determine available memory; set SCIPY_AVAILABLE_MEM variable to free memory in MB to run the test.z,{0} MB memory required, but {1} MB availableg    .A)r   _parse_sizer   environformatKeyError_get_mem_availableskip)Zfree_mbr   Zmem_freemsgr	   r	   r
   r   S   s    
c             C   sx   dddddddddddddd	d
}t dd| | t j}|rT|d|kr\tdt|d||d  S )Ng    .Ag      ?g     @@g    eAg   mBg      @g      0Ag      Ag      pB) bkMGTkbZMbZGbZTbZkibZMibZGibZTibz^\s*(\d+)\s*({0})\s*$|   zInvalid size stringr   )	rematchr0   joinkeysIgroupr   float)Zsize_strsuffixesmr	   r	   r
   r.   i   s    r.   c           	   C   s   yddl } |  jS  ttfk
r*   Y nX tjdri }tdd>}x6|D ].}|	 }t
|d d ||d d < qNW W dQ R X d	|kr|d	 S |d
 |d  S dS )zD
    Get information about memory available, not counting swap.
    r   Nlinuxz/proc/meminforr   g     @@:ZmemavailableZmemfreecached)psutilZvirtual_memory	availableImportErrorAttributeErrorr   platform
startswithopensplitrD   striplower)rK   infoflinepr	   r	   r
   r2   x   s    

0r2   )r   r   r>   r   __all__RuntimeWarningr   r   r   r   r.   r2   r	   r	   r	   r
   <module>   s   7	