ó
\K]c           @  s+  d  Z  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
 j Z d d l j Z d d l m Z d d l m Z d d l m Z d d l m Z d	 Z d
 Z d Z e j e j e j e j ƒ Z d e f d „  ƒ  YZ e d k r'e j  ƒ  n  d S(   s"   
Tests for numba.targets.codegen.
iÿÿÿÿ(   t   print_functionN(   t   utils(   t   JITCPUCodegen(   t   global_compiler_locki   (   t   TestCasesb   
    define i32 @sum(i32 %.1, i32 %.2) {
      %.3 = add i32 %.1, %.2
      ret i32 %.3
    }
    s›   
    define i32 @"__main__.ising_element_update$1.array(int8,_2d,_C).int64.int64"(i32 %.1, i32 %.2) {
      %.3 = add i32 %.1, %.2
      ret i32 %.3
    }
s  
    declare i32 @"__main__.ising_element_update$1.array(int8,_2d,_C).int64.int64"(i32 %.1, i32 %.2)

    define i32 @sum(i32 %.1, i32 %.2) {
      %.3 = call i32 @"__main__.ising_element_update$1.array(int8,_2d,_C).int64.int64"(i32 %.1, i32 %.2)
      ret i32 %.3
    }
t   JITCPUCodegenTestCasec           B  sž   e  Z d  Z d „  Z d „  Z d d „ Z e d „  ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e j d „  ƒ Z RS(   s'   
    Test the JIT code generation.
    c         C  s   t  j ƒ  t d ƒ |  _ d  S(   Nt   test_codegen(   R   t   acquireR   t   codegen(   t   self(    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   setUp:   s    
c         C  s   |  `  t j ƒ  d  S(   N(   R   R   t   release(   R	   (    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   tearDown>   s    c         C  sŠ   |  j  j d ƒ } t j | ƒ } | j ƒ  | j | ƒ | r† |  j  j d ƒ } t j | ƒ } | j ƒ  | j | ƒ | j | ƒ n  | S(   Nt   compiled_modulet   linking_module(   R   t   create_libraryt   llt   parse_assemblyt   verifyt   add_llvm_modulet   add_linking_library(   R	   t   asmt   linking_asmt   libraryt	   ll_modulet   linking_library(    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   compile_moduleB   s    

c         C  ss   t  d ƒ } | j | ƒ } | j d ƒ } | s< t | ƒ ‚ t | ƒ } | d d ƒ } | d k so t | ƒ ‚ d  S(   Nt   other_codegent   sumi   i   i   (   R   t   unserialize_libraryt   get_pointer_to_functiont   AssertionErrort   ctypes_sum_ty(   t   clst   stateR   R   t   ptrt   cfunct   res(    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   _check_unserialize_sumO   s    c         C  s³   |  j  t ƒ } | j d ƒ } |  j | t j ƒ t | ƒ } |  j | d d ƒ d ƒ |  j  t t	 ƒ } | j d ƒ } |  j | t j ƒ t | ƒ } |  j | d d ƒ d ƒ d  S(   NR   i   i   i   (
   R   t   asm_sumR   t   assertIsInstanceR   t   integer_typesR    t   assertEqualt   asm_sum_outert   asm_sum_inner(   R	   R   R#   R$   t   library2(    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   test_get_pointer_to_functionY   s    c         C  sB   |  j  j ƒ  } t j | ƒ t d ƒ } |  j | j ƒ  | ƒ d  S(   Nt   xxx(   R   t   magic_tuplet   picklet   dumpsR   R*   (   R	   t   tupt   cg2(    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   test_magic_tuplek   s    c         C  s   |  j  | ƒ d  S(   N(   R&   (   R	   R"   (    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   _check_serialize_unserializes   s    c         C  sZ   t  j t j | d ƒ ƒ } d t d |  j j ƒ } t j t	 j
 d | | j ƒ  g ƒ d  S(   Niÿÿÿÿs  if 1:
            import base64
            import pickle
            import sys
            from numba.tests.test_codegen import %(test_class)s

            state = pickle.loads(base64.b64decode(sys.argv[1]))
            %(test_class)s._check_unserialize_sum(state)
            t
   test_classs   -c(   t   base64t	   b64encodeR1   R2   t   dictt	   __class__t   __name__t
   subprocesst
   check_callt   syst
   executablet   decode(   R	   R"   t   argt   code(    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt    _check_unserialize_other_processv   s    	c         C  s/   |  j  t t ƒ } | j ƒ  } |  j | ƒ d  S(   N(   R   R+   R,   t   serialize_using_bitcodeR6   (   R	   R   R"   (    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt"   test_serialize_unserialize_bitcodeƒ   s    c         C  s/   |  j  t t ƒ } | j ƒ  } |  j | ƒ d  S(   N(   R   R+   R,   RE   RD   (   R	   R   R"   (    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt&   test_unserialize_other_process_bitcodeˆ   s    c         C  s9   |  j  t t ƒ } | j ƒ  | j ƒ  } |  j | ƒ d  S(   N(   R   R+   R,   t   enable_object_cachingt   serialize_using_object_codeR6   (   R	   R   R"   (    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt&   test_serialize_unserialize_object_code   s    
c         C  s9   |  j  t t ƒ } | j ƒ  | j ƒ  } |  j | ƒ d  S(   N(   R   R+   R,   RH   RI   RD   (   R	   R   R"   (    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt*   test_unserialize_other_process_object_code“   s    
c         C  s  |  j  t t ƒ } | j ƒ  | j ƒ  } t j d t ƒ , } | j ƒ  } | j	 ƒ  } | j
 d ƒ Wd QX|  j t | ƒ d ƒ t d ƒ } | j | ƒ } t j d t ƒ * } t j d ƒ |  j | | j ƒ  ƒ Wd QX|  j t | ƒ d ƒ |  j d t | d j ƒ ƒ t j d t ƒ * } t j d ƒ |  j | j	 ƒ  | ƒ Wd QX|  j t | ƒ d ƒ |  j d t | d j ƒ ƒ t j d t ƒ 9 } t j d ƒ |  j t ƒ  } | j
 d ƒ Wd QXWd QX|  j t | ƒ d ƒ |  j d t | d j ƒ ƒ |  j d t | j ƒ ƒ d S(	   s	   
        t   recordR   Ni    R   t   alwaysi   s   Inspection disabled(   R   R+   R,   RH   RI   t   warningst   catch_warningst   Truet   get_llvm_strt   get_asm_strt   get_function_cfgR*   t   lenR   R   t   simplefiltert   assertNotEqualt   assertInt   strt   messaget   assertRaisest	   NameErrort	   exception(   R	   R   R"   t   wt   old_llvmt   old_asmR   t   raises(    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   test_cache_disabled_inspection™   s6    
c         C  s~   |  j  t t ƒ } | j ƒ  | j ƒ  | j ƒ  t j | ƒ } t j | j ƒ } ~ |  j	 | ƒ  d  ƒ |  j	 | ƒ  d  ƒ d  S(   N(   R   R+   R,   RH   RE   RI   t   weakreft   reft   _final_modulet   assertIst   None(   R	   R   t   ut   v(    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   test_library_lifetimeÂ   s    


N(   R<   t
   __module__t   __doc__R
   R   Rf   R   t   classmethodR&   R.   R5   R6   RD   RF   RG   RJ   RK   Ra   t   unittestt   expectedFailureRi   (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyR   5   s   		
									)t   __main__(!   Rk   t
   __future__R    RN   R8   t   ctypesR1   R=   R?   Rb   t   llvmlite.bindingt   bindingR   t   numba.unittest_supportt   unittest_supportRm   t   numbaR   t   numba.targets.codegenR   t   numba.compiler_lockR   t   supportR   R'   R,   R+   t	   CFUNCTYPEt   c_intR    R   R<   t   main(    (    (    s7   lib/python2.7/site-packages/numba/tests/test_codegen.pyt   <module>   s*   
	œ