ó
\K]c           @  sM  d  d l  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 Z d  d l Z d  d l	 m
 Z
 d  d l Td  d l Z y d  d l Z Wn e k
 r³ d Z n Xd  d l j Z d  d l m Z	 d  d l m Z d  d l m Z d  d l m Z m Z d  d	 l m Z d
 Z e	 j e e ƒ Z  d Z e	 j e j! j" d ƒ e ƒ Z# d d l$ m% Z% d d l& m' Z' m( Z( m) Z) m* Z* e j+ j, e j+ j- e. ƒ ƒ Z/ d „  Z0 d e' f d „  ƒ  YZ1 d e' f d „  ƒ  YZ2 e  d e2 f d „  ƒ  Yƒ Z3 e  d e2 f d „  ƒ  Yƒ Z4 e  d e' f d „  ƒ  Yƒ Z5 e6 d k rIe	 j ƒ  n  d S(   iÿÿÿÿ(   t   print_functionN(   t   skip(   t   *(   t   unittest_support(   t   main(   t   clear_export_registry(   t   find_shared_endingt   find_pyext_ending(   t   _external_compiler_oks    AOT compatible compilers missings   windows onlyt   wini   (   t   has_blas(   t   TestCaset   tagt   import_dynamict   temp_directoryc           C  s    d t  j k r t  j d =n  d S(   sV   Unset MACOSX_DEPLOYMENT_TARGET because we are not building portable
    libraries
    t   MACOSX_DEPLOYMENT_TARGETN(   t   ost   environ(    (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   unset_macosx_deployment_target*   s    t   TestCompilerChecksc           B  s   e  Z e d  „  ƒ Z RS(   c         C  sS   t  j j d d  ƒ d  k	 } | rO t  j j d d  ƒ d  k	 rO |  j t ƒ qO n  d  S(   Nt   CONDA_BUILDt   VSINSTALLDIR(   R   R   t   gett   Nonet
   assertTrueR   (   t   selft   is_running_conda_build(    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_windows_compiler_validity4   s    (   t   __name__t
   __module__t   _windows_onlyR   (    (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyR   1   s   t   BasePYCCTestc           B  s,   e  Z d  „  Z d „  Z e j d „  ƒ Z RS(   c         C  s&   t  ƒ  t d ƒ |  _ |  j t _ d  S(   Nt	   test_pycc(   R   R   t   tmpdirt   tempfilet   tempdir(   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   setUpA   s    c         C  s   d  t _ t ƒ  d  S(   N(   R   R"   R#   R   (   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   tearDownI   s    	c         c  sP   t  j j | ƒ z t | ƒ } | VWd  t  j j | ƒ t  j j | d  ƒ Xd  S(   N(   t   syst   patht   appendR   t   removet   modulest   popR   (   R   t   extdirt   namet   lib(    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   check_c_extP   s    	(   R   R   R$   R%   t
   contextlibt   contextmanagerR/   (    (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyR   ?   s   		t   TestLegacyAPIc           B  s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C  sI  t  j j t d ƒ } d t ƒ  } t  j j |  j | ƒ } t  j j | ƒ r\ t  j | ƒ n  t d d d | | g ƒ t	 | ƒ } t
 t ƒ t t t g | j _ t | j _ t
 t ƒ t t t g | j _ t | j _ t ƒ  } | j t | ƒ d	 d d ƒ |  j | j d
 ƒ t ƒ  } | j t | ƒ d	 d d ƒ |  j | j d ƒ d	 S(   sE   
        Test creating a C shared library object using pycc.
        s   compile_with_pycc.pyt   test_dll_legacyt   argss   --debugs   -oi{   iA  iÛ  Ni;š  i›Õ (   R   R'   t   joint	   base_pathR   R!   t   existst   unlinkR   t   CDLLt   POINTERt   c_doublet   c_void_pt   multt   argtypest   c_intt   restypet   c_floatt   multft   byrefR   t   assertEqualt   value(   R   t   sourcet   cdll_modulenamet	   cdll_pathR.   t   res(    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_pycc_ctypes_lib^   s&    		c         C  së   |  j  d ƒ t j j t d ƒ } d } t j j |  j | t ƒ  ƒ } t j j | ƒ ri t j | ƒ n  t	 d d d d | | g ƒ |  j
 |  j | ƒ K } | j d d	 ƒ } |  j | d ƒ | j d
 d	 ƒ } |  j | d ƒ Wd QXd S(   sF   
        Test creating a CPython extension module using pycc.
        s0   lack of environment can make the extension crashs   compile_with_pycc.pyt   test_pyext_legacyR4   s   --debugs   --pythons   -oi{   iA  iÛ  g     ØŽ@g     t@Ni;š  g    lVA(   t   skipTestR   R'   R5   R6   R!   R   R7   R8   R   R/   t   multit   assertPreciseEqualRB   (   R   RF   t
   modulenamet   out_modulenameR.   RI   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_pycc_pymodulez   s    c         C  sÂ   t  j j t d ƒ } t  j j |  j d ƒ } t  j j | ƒ rO t  j | ƒ n  t d d d d | | d g ƒ t | d ƒ  } | j	 ƒ  } Wd	 QXd
 } d } |  j
 | j | | f ƒ | ƒ d	 S(   s?   
        Test creating a LLVM bitcode file using pycc.
        t   compile_with_pyccs   test_bitcode_legacy.bcR4   s   --debugs   --llvms   -os   .pyt   rbNs   ÞÀs   BCÀÞ(   R   R'   R5   R6   R!   R7   R8   R   t   opent   readR   t
   startswith(   R   RO   t   bitcode_modulenamet   ft   bct   bitcode_wrapper_magict   bitcode_magic(    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_pycc_bitcode   s    (   R   R   RJ   RQ   R\   (    (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyR2   [   s   		t   TestCCc           B  sƒ   e  Z d  „  Z e j d „  ƒ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z e d ƒ d	 „  ƒ Z e d ƒ d
 „  ƒ Z RS(   c         C  s@   t  t |  ƒ j ƒ  d d l m } | |  _ t j |  j ƒ d  S(   Ni   (   RR   (   t   superR]   R$   t    RR   t   _test_modulet   impt   reload(   R   RR   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyR$   §   s    	c         c  s@   |  j  | _ | j ƒ  |  j |  j  | j ƒ  } | VWd  QXd  S(   N(   R!   t
   output_dirt   compileR/   R-   (   R   t   ccR.   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   check_cc_compiled­   s    
c         C  sZ   d i | j  d 6t j j | j ƒ d 6} | j d ƒ | } t j t j	 d | g ƒ d  S(   Nsu   if 1:
            import sys
            sys.path.insert(0, %(path)r)
            import %(name)s as lib
            R-   R'   t    s   -c(
   R   R   R'   t   dirnamet   __file__t   stript
   subprocesst
   check_callR&   t
   executable(   R   R.   t   codet   prolog(    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   check_cc_compiled_in_subprocess¶   s    c         C  sî   |  j  j } |  j | j d ƒ |  j  j j } |  j t j j | ƒ | ƒ |  j  j j	 } |  j
 t j j | ƒ | ƒ |  j t j j | ƒ j d ƒ | ƒ t j j d ƒ rê |  j | j d ƒ | ƒ t j d k rê |  j d | ƒ qê n  d  S(   Nt   pycc_test_simples   pycc_test_simple.t   linuxs   .soi   s   .cpython(   i   (   R`   Re   RD   R-   Rc   R   R   R'   t   isdirt   output_filet   assertFalseR7   t   basenameRV   R&   t   platformt   endswitht   version_infot   assertIn(   R   Re   t   dRX   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_cc_propertiesÀ   s    %c         C  sÁ   |  j  |  j j ƒ ¦ } | j d d ƒ } |  j | d
 ƒ | j d d ƒ } |  j | d ƒ | j d ƒ } |  j | d ƒ |  j | j ƒ  d  ƒ |  j
 t ƒ  | j d d	 ƒ Wd  QXWd  QXd  S(   Ni{   iA  iÛ  g     ØŽ@g     t@i   i   i   i    i;š  g    lVA(   Rf   R`   Re   RM   RN   RB   t   squaret   assertIst   get_noneR   t   assertRaisest   ZeroDivisionErrort   div(   R   R.   RI   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_compileÑ   s    c         C  si   |  j  j } | | _ |  j | ƒ ? } | j d d ƒ } |  j | d ƒ |  j | j j d ƒ Wd  QXd  S(   Ni{   iA  Rq   i;š  (   R`   Re   t
   target_cpuRf   RM   RN   RD   R   (   R   t   cpu_nameRe   R.   RI   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   check_compile_for_cpuÝ   s    	c         C  s   |  j  t j ƒ  ƒ d  S(   N(   R†   t   llt   get_host_cpu_name(   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_compile_for_cpuæ   s    c         C  s   |  j  d ƒ d  S(   Nt   host(   R†   (   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_compile_for_cpu_hostê   s    t	   importantc         C  s  |  j  |  j j ƒ u} | j d d ƒ } |  j | d ƒ x? d d t j d ƒ f D]% } | j | ƒ } |  j | d ƒ qS Wx? d d t j d ƒ f D]% } | j	 | ƒ } |  j | d	 ƒ q• W| j
 d
 ƒ } |  j | d ƒ |  j | j d ƒ | j d ƒ ƒ | j d ƒ } t j j d ƒ j ƒ  } |  j | | ƒ | j t j d g d ƒ ƒ } |  j | d ƒ d i | d 6} |  j | | ƒ Wd  QXd  S(   Ni   i   i€   iÿÿÿÿy                y              ð?i   g      @g       @g      ð?iÌÿÿÿi*   i    i   sR  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)
                t   expectedy      ð¿        g      °<(   Rf   R`   t   cc_helperlibt   powerRN   t   npt
   complex128t   sqrtt   float64t   np_sqrtt   spacingt   assertNotEqualt   randomt   RandomStatet   random_samplet   sizeRp   (   R   R.   RI   t   valR   Rn   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_compile_helperlibî   s&    "
c      
   C  s   |  j  |  j j ƒ å } |  j | j d ƒ d ƒ | j d ƒ } |  j t | ƒ d d d g ƒ t r‡ | j	 d ƒ } |  j | d ƒ n  t
 j d d d	 d
 d g ƒ } | j | ƒ } t
 j | ƒ } |  j | | ƒ d t d t ƒ } |  j | | ƒ Wd  QXd  S(   Ni   g        i   i    i   g      >@g       @g      @g      ð?g      @g      @sB  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
   (   Rf   R`   t   cc_nrtRN   t   zero_scalart   zerosRD   t   listR
   t
   vector_dotR   R“   t
   np_argsortt   argsortt   dictRp   (   R   R.   RI   R›   R   Rn   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_compile_nrt  s    (   R   R   R$   R0   R1   Rf   Rp   R|   Rƒ   R†   R‰   R‹   R   Rœ   R¥   (    (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyR]   ¤   s   			
						!t   TestDistutilsSupportc           B  sD   e  Z d  „  Z d „  Z d „  Z e j e d k d ƒ d „  ƒ Z	 RS(   c         C  s]   t  ƒ  t d ƒ |  _ t j j t d ƒ } t j j |  j d ƒ |  _ t j	 | |  j ƒ d  S(   Nt   test_pycc_distutilst   pycc_distutils_usecaset   work(
   R   R   R!   R   R'   R5   R6   t   usecase_dirt   shutilt   copytree(   R   t
   source_dir(    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyR$   4  s
    c           s¿   d d  l  } t j j t j j t j j | j ƒ ƒ ƒ } t t j ƒ ‰  ˆ  j d d ƒ rv | t j	 ˆ  d ˆ  d <n
 | ˆ  d <‡  ‡ f d †  } | | d d g ƒ d } | d | g ƒ d  S(	   Niÿÿÿÿt
   PYTHONPATHR_   c      
     sˆ   t  j t j g |  d ˆ j d t  j d t  j d ˆ  ƒ} | j ƒ  \ } } | j ƒ  } | d k r„ ˆ j	 d | j
 d d ƒ ƒ n  d  S(	   Nt   cwdt   stdoutt   stderrt   envi    s+   python failed with the following output:
%ss   utf-8t   ignore(   Rk   t   PopenR&   Rm   Rª   t   PIPEt   STDOUTt   communicatet   waitt   failt   decode(   R4   t   pt   outt   _t   rc(   R²   R   (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt
   run_pythonI  s    					t	   build_exts	   --inplaces¸   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]
            s   -c(
   t   numbaR   R'   t   abspathRh   Ri   R¤   R   R   t   pathsep(   R   t   setup_py_fileRÁ   t
   numba_pathR¿   Rn   (    (   R²   R   s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   check_setup_py>  s    
c         C  s?   t  j d k  r. t  j d k r. |  j d ƒ n  |  j d ƒ d  S(   Ni   t   win32s4   must use setuptools to build extensions for Python 2s   setup_distutils.py(   i   (   R&   Ry   Rw   RL   RÆ   (   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_setup_py_distutils^  s    s   test needs setuptoolsc         C  s   |  j  d ƒ d  S(   Ns   setup_setuptools.py(   RÆ   (   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   test_setup_py_setuptoolsd  s    N(
   R   R   R$   RÆ   RÈ   t   unittestt   skipIft
   setuptoolsR   RÉ   (    (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyR¦   1  s   	
	 	t   __main__(7   t
   __future__R    R0   Ra   R   R«   Rk   R&   R"   RÊ   R   t   ctypest   numpyR   RÌ   t   ImportErrorR   t   llvmlite.bindingt   bindingR‡   RÁ   R   t
   numba.pyccR   t   numba.pycc.decoratorsR   t   numba.pycc.platformR   R   R   t   _skip_reasonRË   t   _skip_missing_compilersRw   RV   R   t   matmul_usecaseR
   t   supportR   R   R   R   R'   Rh   RÂ   Ri   R6   R   R   R   R2   R]   R¦   R   (    (    (    s4   lib/python2.7/site-packages/numba/tests/test_pycc.pyt   <module>   sP   


		"	HŒ7