U
    Ã9%e4  ã                   @   s,  d dl Z d dl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 d dl	T d dl
Zd dlmZ d dlmZ d dlmZmZmZmZmZmZ d dlZdZe ej d¡ e¡Zej ej e ¡¡Z!dd	„ Z"eG d
d„ deƒƒZ#G dd„ deƒZ$eG dd„ de$ƒƒZ%eG dd„ deƒƒZ&e'dkr(e (¡  dS )é    N)Úskip)Ú*)Úutils)ÚTestCaseÚtagÚimport_dynamicÚtemp_directoryÚhas_blasÚneeds_setuptoolszwindows onlyÚwinc                   C   s   dt jkrt jd= dS )zVUnset MACOSX_DEPLOYMENT_TARGET because we are not building portable
    libraries
    ÚMACOSX_DEPLOYMENT_TARGETN)ÚosÚenviron© r   r   úT/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_pycc.pyÚunset_macosx_deployment_target   s    
r   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestCompilerChecksc                 C   sD   ddl m} tj dd ¡d k	}|r@tj dd ¡d k	r@|  |ƒ ¡ d S )Nr   )Úexternal_compiler_worksZCONDA_BUILDZVSINSTALLDIR)Únumba.pycc.platformr   r   r   ÚgetÚ
assertTrue)Úselfr   Zis_running_conda_buildr   r   r   Útest_windows_compiler_validity*   s
    z1TestCompilerChecks.test_windows_compiler_validityN)Ú__name__Ú
__module__Ú__qualname__Ú_windows_onlyr   r   r   r   r   r   &   s   r   c                   @   s*   e Zd Zdd„ Zdd„ Zejdd„ ƒZdS )ÚBasePYCCTestc                 C   s   t ƒ  tdƒ| _| jt_d S )NZ	test_pycc)r   r   ÚtmpdirÚtempfileÚtempdir©r   r   r   r   ÚsetUp;   s    
zBasePYCCTest.setUpc                 C   s   d t _ddlm} |ƒ  d S )Nr   )Úclear_export_registry)r   r    Znumba.pycc.decoratorsr#   )r   r#   r   r   r   ÚtearDownC   s    zBasePYCCTest.tearDownc              
   c   s@   t j |¡ zt|ƒ}|V  W 5 t j |¡ t j |d ¡ X d S ©N)ÚsysÚpathÚappendÚremoveÚmodulesÚpopr   )r   ZextdirÚnameÚlibr   r   r   Úcheck_c_extN   s    
zBasePYCCTest.check_c_extN)r   r   r   r"   r$   Ú
contextlibÚcontextmanagerr.   r   r   r   r   r   9   s   r   c                       s–   e Zd Z‡ fdd„Zejdd„ ƒZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Ze ejdkohejdkd¡dd„ ƒZdd„ Zdd„ Zdd„ Z‡  ZS )ÚTestCCc                    s8   t t| ƒ ¡  |  ¡  ddlm} || _t | j¡ d S )Nr   )Úcompile_with_pycc)	Úsuperr1   r"   Úskip_if_no_external_compilerZnumba.testsr2   Ú_test_moduleÚ	importlibÚreload)r   r2   ©Ú	__class__r   r   r"   \   s
    zTestCC.setUpc              	   c   s6   | j |_| ¡  |  | j |j¡}|V  W 5 Q R X d S r%   )r   Ú
output_dirÚcompiler.   r,   )r   Úccr-   r   r   r   Úcheck_cc_compiledc   s    zTestCC.check_cc_compiledc                 C   s>   d|j tj |j¡dœ }| d¡| }t tj	d|g¡ d S )Naµ  if 1:
            import sys
            import types
            # to disable numba package
            sys.modules['numba'] = types.ModuleType('numba')
            try:
                from numba import njit
            except ImportError:
                pass
            else:
                raise RuntimeError('cannot disable numba package')

            sys.path.insert(0, %(path)r)
            import %(name)s as lib
            )r,   r'   ú ú-c)
r   r   r'   ÚdirnameÚ__file__ÚstripÚ
subprocessÚ
check_callr&   Ú
executable)r   r-   ÚcodeÚprologr   r   r   Úcheck_cc_compiled_in_subprocessl   s    ÿòz&TestCC.check_cc_compiled_in_subprocessc                 C   s¨   | j j}|  |jd¡ | j jj}|  tj |¡|¡ | j jj	}|  
tj |¡|¡ |  tj |¡ d¡|¡ tj d¡r¤|  | d¡|¡ ddlm} |  |ƒ |¡ d S )NÚpycc_test_simplezpycc_test_simple.Úlinuxz.sor   )Úfind_pyext_ending)r5   r<   ÚassertEqualr,   r:   r   r   r'   ÚisdirZoutput_fileZassertFalseÚexistsÚbasenameÚ
startswithr&   ÚplatformÚendswithr   rK   ZassertIn)r   r<   ÚdÚfrK   r   r   r   Útest_cc_properties€   s    

zTestCC.test_cc_propertiesc              
   C   s–   |   | jj¡~}| dd¡}|  |d¡ | dd¡}|  |d¡ | d¡}|  |d¡ |  | ¡ d ¡ |  	t
¡ | dd	¡ W 5 Q R X W 5 Q R X d S )
Né{   éA  é;š  iÛ  g    lVAé   é   é   r   )r=   r5   r<   ÚmultiÚassertPreciseEqualZmultfZsquareZassertIsZget_noneÚassertRaisesÚZeroDivisionErrorÚdiv)r   r-   Úresr   r   r   Útest_compile“   s    
zTestCC.test_compilec              	   C   sP   | j j}||_|  |¡.}| dd¡}|  |d¡ |  |jjd¡ W 5 Q R X d S )NrV   rW   rX   rI   )r5   r<   Z
target_cpur=   r\   r]   rL   r   )r   Zcpu_namer<   r-   ra   r   r   r   Úcheck_compile_for_cpuŸ   s    zTestCC.check_compile_for_cpuc                 C   s   |   t ¡ ¡ d S r%   )rc   ÚllZget_host_cpu_namer!   r   r   r   Útest_compile_for_cpu¨   s    zTestCC.test_compile_for_cpuc                 C   s   |   d¡ d S )NÚhost)rc   r!   r   r   r   Útest_compile_for_cpu_host¬   s    z TestCC.test_compile_for_cpu_hostÚdarwin)é   é   z4distutils incorrectly using gcc on python 3.8 buildsc              	   C   s  |   | jj¡}| dd¡}|  |d¡ ddt d¡fD ]}| |¡}|  |d¡ q:ddt d¡fD ]}| 	|¡}|  |d	¡ qf| 
d
¡}|  |d¡ |  | d¡| d¡¡ | d¡}tj d¡ ¡ }|  ||¡ | t dgd ¡¡}|  |d¡ dd|i }|  ||¡ W 5 Q R X d S )Né   é   é€   éÿÿÿÿy      ð¿        y              ð?é   ç      @ç       @ç      ð?g      °<é*   r   ri   aR  if 1:
                from numpy.testing import assert_equal, assert_allclose
                res = lib.power(2, 7)
                assert res == 128
                res = lib.random(42)
                assert_allclose(res, %(expected)s)
                res = lib.spacing(1.0)
                assert_allclose(res, 2**-52)
                Úexpected)r=   r5   Zcc_helperlibÚpowerr]   ÚnpZ
complex128ÚsqrtÚfloat64Znp_sqrtÚspacingZassertNotEqualÚrandomZRandomStateZrandom_sampleÚsizerH   ©r   r-   ra   Úvalrt   rF   r   r   r   Útest_compile_helperlib°   s*    



ø	zTestCC.test_compile_helperlibc              	   C   s¸   |   | jj¡ }|  | d¡d¡ | d¡}|  t|ƒdddg¡ tr\| 	d¡}|  |d¡ t
 ddd	d
dg¡}| |¡}t
 |¡}|  ||¡ dttd }|  ||¡ W 5 Q R X d S )Nr[   g        ri   r   ro   g      >@rq   g      @rr   g      @rp   aB  if 1:
                from numpy.testing import assert_equal
                from numpy import float64, argsort
                res = lib.zero_scalar(1)
                assert res == 0.0
                res = lib.zeros(3)
                assert list(res) == [0, 0, 0]
                if %(has_blas)s:
                    res = lib.vector_dot(4)
                    assert res == 30.0
                val = float64([2., 5., 1., 3., 4.])
                res = lib.np_argsort(val)
                expected = argsort(val)
                assert_equal(res, expected)
                )r	   )r=   r5   Úcc_nrtr]   Zzero_scalarZzerosrL   Úlistr	   Z
vector_dotrv   rx   Z
np_argsortZargsortÚdictrH   r|   r   r   r   Útest_compile_nrtÓ   s    



òzTestCC.test_compile_nrtc              	   C   s`   |   | jj¡H}| ¡ }|  |tdƒ¡ | d¡}|  |tdƒ¡ d}|  ||¡ W 5 Q R X d S )NÚAzþif 1:
                from numpy.testing import assert_equal
                res = lib.hash_literal_str_A()
                assert_equal(res, hash("A"))
                res = lib.hash_str("A")
                assert_equal(res, hash("A"))
                )r=   r5   r   Zhash_literal_str_Ar]   ÚhashZhash_strrH   )r   r-   ra   rF   r   r   r   Útest_hashingó   s    
zTestCC.test_hashingc              	   C   sL   |   | jj¡4}tjdtjd}| |¡}|| }|  ||¡ W 5 Q R X d S )Nrm   )Zdtype)r=   r5   r   rv   ZarangeZintpZdict_usecaser]   )r   r-   ZarrÚgotÚexpectr   r   r   Útest_c_extension_usecase  s
    
zTestCC.test_c_extension_usecase)r   r   r   r"   r/   r0   r=   rH   rU   rb   rc   re   rg   ÚunittestÚskipIfr&   rQ   r   Z	PYVERSIONr~   r‚   r…   rˆ   Ú__classcell__r   r   r8   r   r1   Y   s"   
	þ
  r1   c                       sL   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )ÚTestDistutilsSupportc                    sT   t ƒ  ¡  |  ¡  tƒ  tdƒ| _tj t	d¡}tj | jd¡| _
t || j
¡ d S )NZtest_pycc_distutilsZpycc_distutils_usecaseZwork)r3   r"   r4   r   r   r   r   r'   ÚjoinÚ	base_pathÚusecase_dirÚshutilÚcopytree)r   Ú
source_dirr8   r   r   r"     s    

zTestDistutilsSupport.setUpc                    sŒ   dd l }tj tj tj |j¡¡¡}ttjƒ‰ ˆ  dd¡rT|tj	 ˆ d  ˆ d< n|ˆ d< ‡ ‡fdd„}||ddgƒ d}|d	|gƒ d S )
Nr   Ú
PYTHONPATHÚ c                    sX   t jtjg|  ˆjt jt jˆ d}| ¡ \}}| ¡ }|dkrTˆ 	d| 
dd¡ ¡ d S ©N)ÚcwdÚstdoutÚstderrÚenvr   z+python failed with the following output:
%szutf-8Úignore©rC   ÚPopenr&   rE   r   ÚPIPEÚSTDOUTÚcommunicateÚwaitZfailÚdecode©ÚargsÚpÚoutÚ_Úrc©r™   r   r   r   Ú
run_python'  s    ü
ÿz7TestDistutilsSupport.check_setup_py.<locals>.run_pythonÚ	build_extú	--inplacez¸if 1:
            import pycc_compiled_module as lib
            assert lib.get_const() == 42
            res = lib.ones(3)
            assert list(res) == [1.0, 1.0, 1.0]
            r?   ©
Únumbar   r'   Úabspathr@   rA   r   r   r   Úpathsep©r   Zsetup_py_filer­   Z
numba_pathr©   rF   r   r¨   r   Úcheck_setup_py  s    ÿ
z#TestDistutilsSupport.check_setup_pyc                    sŒ   dd l }tj tj tj |j¡¡¡}ttjƒ‰ ˆ  dd¡rT|tj	 ˆ d  ˆ d< n|ˆ d< ‡ ‡fdd„}||ddgƒ d}|d	|gƒ d S )
Nr   r“   r”   c                    sX   t jtjg|  ˆjt jt jˆ d}| ¡ \}}| ¡ }|dkrTˆ 	d| 
dd¡ ¡ d S r•   r›   r¢   r¨   r   r   r©   G  s    ü
ÿz>TestDistutilsSupport.check_setup_nested_py.<locals>.run_pythonrª   r«   z¿if 1:
            import nested.pycc_compiled_module as lib
            assert lib.get_const() == 42
            res = lib.ones(3)
            assert list(res) == [1.0, 1.0, 1.0]
            r?   r¬   r°   r   r¨   r   Úcheck_setup_nested_py<  s    ÿ
z*TestDistutilsSupport.check_setup_nested_pyc                 C   s   |   d¡ d S )Nzsetup_distutils.py©r±   r!   r   r   r   Útest_setup_py_distutils\  s    z,TestDistutilsSupport.test_setup_py_distutilsc                 C   s   |   d¡ d S )Nzsetup_distutils_nested.py©r²   r!   r   r   r   Útest_setup_py_distutils_nested_  s    z3TestDistutilsSupport.test_setup_py_distutils_nestedc                 C   s   |   d¡ d S )Nzsetup_setuptools.pyr³   r!   r   r   r   Útest_setup_py_setuptoolsb  s    z-TestDistutilsSupport.test_setup_py_setuptoolsc                 C   s   |   d¡ d S )Nzsetup_setuptools_nested.pyrµ   r!   r   r   r   Útest_setup_py_setuptools_nestede  s    z4TestDistutilsSupport.test_setup_py_setuptools_nested)r   r   r   r"   r±   r²   r´   r¶   r·   r¸   r‹   r   r   r8   r   rŒ     s     rŒ   Ú__main__))r/   r6   r   r   rC   r&   r   r‰   r   ÚctypesÚnumpyrv   Zllvmlite.bindingZbindingrd   Z
numba.corer   Znumba.tests.supportr   r   r   r   r	   r
   Z_skip_reasonrŠ   rQ   rP   r   r'   r@   r®   rA   rŽ   r   r   r   r1   rŒ   r   Úmainr   r   r   r   Ú<module>   s:    ÿ  3\
