U
    d                     @   s   d dl Zd dlmZ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mZmZmZ d dlmZ dd Zdd Zd	d
 Zdd Zdd ZdddZdd Zdd Zdd ZG dd de	jZdS )    N)core	workspace)AnyCallableTupleType)TracebackTypec                  G   s   t t jj|  d t jS )Ng      ?)nparrayrandomrandastypefloat32)dims r   ;/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/test_util.py
rand_array   s    r   c                 O   s6   d|kr|d nd}t | tjj| ||  d S )Noffsetg        )r   ZFeedBlobr	   r   r   r   )nametyper   kwargsr   r   r   r   randBlob   s    r   c                 O   s   t | tjf|| d S N)r   r	   r   )r   r   r   r   r   r   randBlobFloat32   s    r   c                 O   s   | D ]}t |f|| qd S r   )r   )namesr   r   r   r   r   r   randBlobsFloat32"   s    r   c                 C   s   t |  jS r   )lenZProtoop)netr   r   r   numOps'   s    r   utf8c                 C   s0   t | tr| |} t |tr(||}| |kS r   )
isinstancebytesdecode)abencodingr   r   r   str_compare+   s
    



r'   c                   C   s   ddddgS )NZcaffe2z--caffe2_log_level=0z%--caffe2_cpu_allocator_do_zero_fill=0z%--caffe2_cpu_allocator_do_junk_fill=1r   r   r   r   r   get_default_test_flags3   s
    r(   c                 C   s
   d| _ | S )NT)__caffe2_flaky__)test_methodr   r   r   caffe2_flaky<   s    r+   c                   C   s   t dddkS )NZCAFFE2_RUN_FLAKY_TESTS01)osgetenvr   r   r   r   is_flaky_test_modeH   s    r0   c                   @   sJ   e Zd Zedd Zdd Zdd Zejddd	Z	ejd
dddZ
d
S )TestCasec                 C   s   t t  ti i  d S r   )r   Z
GlobalInitr(   r   ZSetEnginePref)clsr   r   r   
setUpClassM   s    zTestCase.setUpClassc                 C   sZ   t | | j}t |dd}t r.|s.tdnt sB|rBtdtj | _t	  d S )Nr)   Fz.Non-flaky tests are skipped in flaky test modez,Flaky tests are skipped in regular test mode)
getattrZ_testMethodNamer0   unittestZSkipTestr   CZ	WorkspacewsResetWorkspace)selfr*   Zis_flaky_testr   r   r   setUpT   s    


zTestCase.setUpc                 C   s   t   d S r   )r   r8   )r9   r   r   r   tearDowna   s    zTestCase.tearDown)returnc                 C   s$   t tjdd}| | j| |S )Nzcaffe2_test.)prefix)pathlibPathtempfilemkdtempZ
addCleanup_remove_tempdir)r9   Z
tmp_folderr   r   r   make_tempdird   s    zTestCase.make_tempdirN)pathr<   c                 C   s@   t dtf tttt ttf d ddd}tjt||d d S )N.)fnrD   exc_infor<   c                 S   s$   t |d ts |d |d d S )N      )r!   FileNotFoundErrorwith_traceback)rE   rD   rF   r   r   r   _onerrorj   s    z*TestCase._remove_tempdir.<locals>._onerror)onerror)	r   r   strr   r   BaseExceptionr   shutilrmtree)r9   rD   rK   r   r   r   rB   i   s    
	zTestCase._remove_tempdir)__name__
__module____qualname__classmethodr3   r:   r;   r>   r?   rC   rB   r   r   r   r   r1   L   s   
r1   )r    )Znumpyr	   Zcaffe2.pythonr   r   r.   r>   rO   r@   r5   typingr   r   r   r   typesr   r   r   r   r   r   r'   r(   r+   r0   r1   r   r   r   r   <module>   s$   
	