U
    iâËd’  ã                   @   sd   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	 eG dd„ de	ƒƒZ
eG dd„ de	ƒƒZdS )	é    N)Úskip_parfors_unsupportedé   )ÚDispatcherCacheUsecasesTestc                   @   sL   e Zd Zej e¡Zej ed¡Z	dZ
ddd„Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestParforsCacheúparfors_cache_usecases.pyÚparfors_caching_test_fodderr   c                 C   s†   |   ¡ }|  d¡ t||ƒ}t d¡}tj ||ƒ| |¡¡ dd„ |j 	¡ D ƒ}|j 	¡ \}|  
|dg¡ |  |d ¡ |  ¡  d S )Nr   é
   c                 S   s   g | ]}|j j‘qS © )ZlibraryZhas_dynamic_globals)Ú.0Úcresr	   r	   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_parfors_caching.pyÚ
<listcomp>   s   ÿz-TestParforsCache.run_test.<locals>.<listcomp>Fé   )Úimport_moduleÚcheck_pycacheÚgetattrÚnpZonesÚtestingZassert_allcloseZpy_funcZ	overloadsÚvaluesÚassertEqualÚrun_in_separate_process)ÚselfÚfnameÚ	num_funcsÚmodÚfZaryZdynamic_globalsr   r	   r	   r   Úrun_test   s    


ÿzTestParforsCache.run_testc                 C   s   d}|   |¡ d S )NZarrayexprs_case©r   ©r   r   r	   r	   r   Útest_arrayexprs#   s    z TestParforsCache.test_arrayexprsc                 C   s   d}|   |¡ d S )NZprange_caser   r   r	   r	   r   Útest_prange'   s    zTestParforsCache.test_prangec                 C   s   d}| j |dd� d S )NZcaller_caseé   )r   r   r   r	   r	   r   Útest_caller+   s    zTestParforsCache.test_callerN)r   )Ú__name__Ú
__module__Ú__qualname__ÚosÚpathÚdirnameÚ__file__ÚhereÚjoinÚusecases_fileÚmodnamer   r   r    r"   r	   r	   r	   r   r      s   
r   c                   @   s:   e Zd Zej e¡Zej ed¡Z	dZ
dd„ Zdd„ ZdS )ÚTestParforsCacheChangingThreadsr   r   c                 C   sz   dt | j| jd� }tjdt|ƒi–}tjtj	d|gtj
tj
|d�}| ¡ \}}|jdkrvtd|j› d| ¡ › d	�ƒ‚d S )
Nz›if 1:
            import sys

            sys.path.insert(0, %(tempdir)r)
            mod = __import__(%(modname)r)
            mod.self_run()
            )Útempdirr-   ZNUMBA_NUM_THREADSz-c)ÚstdoutÚstderrÚenvr   zprocess failed with code z:stderr follows
Ú
)Údictr/   r-   r&   ÚenvironÚstrÚ
subprocessÚPopenÚsysÚ
executableÚPIPEÚcommunicateÚ
returncodeÚAssertionErrorÚdecode)r   Zthread_countÚcodeZnew_envÚpopenÚoutÚerrr	   r	   r   r   ;   s    ú þ
z7TestParforsCacheChangingThreads.run_in_separate_processc                 C   s6   |   d¡ |  d¡ |   d¡ |  d¡ |   d¡ d S )Nr   r   é   r   )r   r   )r   r	   r	   r   Útest_cachingN   s
    



z,TestParforsCacheChangingThreads.test_cachingN)r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r   rE   r	   r	   r	   r   r.   2   s
   r.   )Úos.pathr&   r7   r9   Únumpyr   Znumba.tests.supportr   rE   r   r   r.   r	   r	   r	   r   Ú<module>   s   &