U
    d  ć                   @   sN   d dl mZmZmZ d dlZd dlZd dlZd add ZG dd dej	Z
dS )é    )ŚscopeŚcoreŚ	workspaceNc              
   C   sź   |  t ” d” |  t ” d ” d | ”}t tj| ”}t 	|”v t 
|”` |  t ” |d ” |  t ” |” t d| d  ” |  t ” |d ” |  t ” |” W 5 Q R X W 5 Q R X |  t ” d” |  t ” d ” td7 ad S )NŚ znamescope_{}ś/g{®Gįz?é   )ŚassertEqualsr   ŚCurrentNameScopeŚCurrentDeviceScopeŚformatr   ŚDeviceOptionr   ŚGpuDeviceTypeŚDeviceScopeŚ	NameScopeŚtimeŚsleepŚSUCCESS_COUNT)ŚidxZtestobjZ	namescopeŚdsc© r   ś</tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/scope_test.pyŚthread_runner   s    
$r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )Ś	TestScopec              	   C   sJ   |   t ” d” t d” |   t ” d” W 5 Q R X |   t ” d” d S ©Nr   Z
test_scopeztest_scope/)r   r   r	   r   ©Śselfr   r   r   ŚtestNamescopeBasic%   s    zTestScope.testNamescopeBasicc              	   C   sj   |   t ” d” z0t d” |   t ” d” t W 5 Q R X W n tk
rT   Y nX |   t ” d” d S r   )r   r   r	   r   Ś	Exceptionr   r   r   r   ŚtestNamescopeAssertion-   s    z TestScope.testNamescopeAssertionc              
   C   s^   |   t ” d” t d”: t ”  |   t ” d” W 5 Q R X |   t ” d” W 5 Q R X d S r   )r   r   r	   r   ZEmptyNameScoper   r   r   r   ŚtestEmptyNamescopeBasic9   s
    
z!TestScope.testEmptyNamescopeBasicc              	   C   sX   |   t ” d ” t tjd”}t |” |   t ” |” W 5 Q R X |   t ” d ” d S ©Né	   )r   r   r
   r   r   r   r   r   ©r   r   r   r   r   ŚtestDevicescopeBasicA   s
    zTestScope.testDevicescopeBasicc              
   C   s   |   t ” d ” t tjd”}t |”J |   t ” |” t ”  |   t ” d ” W 5 Q R X |   t ” |” W 5 Q R X |   t ” d ” d S r    )	r   r   r
   r   r   r   r   r   ZEmptyDeviceScoper"   r   r   r   ŚtestEmptyDevicescopeBasicJ   s    
z#TestScope.testEmptyDevicescopeBasicc              	   C   sx   |   t ” d ” t tjd”}z0t |” |   t ” |” t W 5 Q R X W n tk
rb   Y nX |   t ” d ” d S r    )	r   r   r
   r   r   r   r   r   r   r"   r   r   r   ŚtestDevicescopeAssertionU   s    z"TestScope.testDevicescopeAssertionc                 C   s  |   t ” d ” dg}dg}dg}ddg}dddg}t tjd|d”  |   t ” j|” t tjd|d”\ |   t ” j|” t tjd|d” |   t ” j|” W 5 Q R X |   t ” j|” W 5 Q R X |   t ” j|” W 5 Q R X |   t ” d ” d S )Nzkey1:value1zkey2:value2zkey3:value3r   )Ś
extra_info)r   r   r
   r   r   r   r&   )r   Zextra_info1Zextra_info2Zextra_info3Zextra_info_1_2Zextra_info_1_2_3r   r   r   ŚtestTagsc   s$    
 ’zTestScope.testTagsc              	   C   sŌ   |   t ” d” |   t ” d” g }tdD ]}| tjt|| fd” q,|D ]}| 	”  qNt 
d”X |   t ” d” |   t ” d” |D ]}| ”  q|   t ” d” |   t ” d” W 5 Q R X |   td” dS )zj
        Test that name/device scope are properly local to the thread
        and don't interfere
        r   Né   )ŚtargetŚargsZmasterzmaster/)r   r   r	   r
   ŚrangeŚappendŚ	threadingŚThreadr   Śstartr   Śjoinr   )r   ŚthreadsŚiŚtr   r   r   ŚtestMultiThreaded|   s$    ž


zTestScope.testMultiThreadedN)Ś__name__Ś
__module__Ś__qualname__r   r   r   r#   r$   r%   r'   r4   r   r   r   r   r   #   s   	r   )Zcaffe2.pythonr   r   r   Zunittestr-   r   r   r   ZTestCaser   r   r   r   r   Ś<module>   s   