ó
\K]c           @  s  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l j j Z	 d  d l
 Z d  d l j Z d  d l m Z m Z m Z d  d l m Z d  d l m Z d d l m Z e	 j j e j j ƒ Z d „  Z d	 e f d
 „  ƒ  YZ e  d k r	e j! ƒ  n  d S(   iÿÿÿÿ(   t   print_functionN(   t   cgutilst   typest   typing(   t   global_compiler_lock(   t   cpui   (   t   TestCasec         C  s   t  j j t |  ƒ S(   N(   t   lct   Constantt   intt   machine_int(   t   n(    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   machine_const   s    t   StructureTestCasec           B  sn   e  Z d  „  Z e j d „  ƒ Z d „  Z d „  Z e j d d „ ƒ Z e j d „  ƒ Z	 d „  Z
 d „  Z RS(	   c         C  s"   t  j ƒ  } t j | ƒ |  _ d  S(   N(   R   t   ContextR   t
   CPUContextt   context(   t   selft   typing_context(    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   setUp   s    c         #  s×   t  j j t t g | ƒ } t j t j t j f | Œ ‰  ˆ j j d ƒ ‰ ˆ j	 | d ˆ j
 ƒ  ƒ‰ ˆ j sw t ‚ ˆ j d ƒ } t  j | ƒ } t g } t ‡  ‡ ‡ ‡ f d †  ƒ } ˆ j | ˆ j | f Vd  S(   Nt    t   namet   entryc            s]   ˆ j  j ƒ  } | j d ˆ j ƒ  ƒ } | j ˆ ƒ | j ˆ j ƒ } ˆ  | ƒ } | |  Œ  S(   Ns   test_module.%s(   R   t   codegent   create_libraryt   idt   add_ir_modulet   get_pointer_to_functionR   (   t   argsR   t   libraryt   cptrt   cfunc(   t   ctypes_fntyt   functiont   moduleR   (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt	   call_func-   s    (   R   t   TypeR!   R
   t   ctypest	   CFUNCTYPEt   c_size_tR   t   create_modulet   get_or_insert_functionR   t   is_declarationt   AssertionErrort   append_basic_blockt   Buildert   TrueR   R   (   R   t   nargst	   llvm_fntyt   entry_blockt   buildert   firstR#   (    (   R    R!   R"   R   s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   compile_function   s    		c         C  sF   t  | t ƒ s t ‚ t j j } t j g | _ t j | _	 | | ƒ S(   N(
   t
   isinstancet	   bytearrayR+   R%   t	   pythonapit   PyByteArray_AsStringt	   py_objectt   argtypest   c_void_pt   restype(   R   t   bat   ba_as_string(    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   get_bytearray_addr9   s
    c         C  s   |  j  d ƒ : \ } } } } | j | d | d ƒ } | j | ƒ Wd  QX|  j | d d ƒ d ƒ |  j | d d ƒ d ƒ d  S(	   Ni   i    i   i   iþÿÿÿi   i   i   (   R4   t   addt   rett   assertEqual(   R   R   R2   R   t   callt   res(    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   test_compile_function@   s
    i    c   
   	   c  sÉ   |  j  d ƒ ¡ \ } } } } | | | ƒ } | j | d t | ƒ ƒ }	 | j |	 t j j | j ƒ ƒ }	 | | | d |	 ƒ} | | | | f V| j t j	 j
 t d ƒ ƒ Wd  QX| |  j | ƒ ƒ d  S(   Ni   i    t   ref(   R4   R@   R   t   inttoptrR   R$   t   pointert   _typeRA   R   R	   R
   R?   (
   R   t   struct_classt   buft   offsetR   R2   R   RC   t   instt   sptr(    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   run_struct_accessH   s    !"c         c  s   t  d ƒ d } | } d } |  j | | | ƒ ! \ } } }	 }
 | | |
 f VWd  QX|  j | | ƒ t j | | | | Œ |  j | | ƒ d  S(   Nt   !i(   i   (   R6   RO   t   assertNotEqualt   structt	   pack_intoRB   (   R   RJ   t
   struct_fmtt   struct_argsRK   t   expectedRL   R   R2   R   RM   (    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   run_simple_struct_testU   s    c         C  s’   d t  j f d „  ƒ  Y} d } |  j | | d ƒ X \ } } } t j j t j j d ƒ d ƒ | _ t j j t j j d ƒ d ƒ | _ Wd  QXd  S(	   Nt   Sc           B  s&   e  Z d  e j f d e j f g Z RS(   t   at   b(   t   __name__t
   __module__R   t   int32t   uint16t   _fields(    (    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyRX   f   s   s   =iHixV4iÍ«  i    i   (   ixV4iÍ«  (	   R   t	   StructureRW   R   R   R	   R$   RY   RZ   (   R   RX   t   fmtR   R2   RM   (    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   test_int_fieldse   s    $c         C  sŒ   d t  j f d „  ƒ  Y} d } |  j | | d ƒ R \ } } } t j j t j j ƒ  d ƒ | _ t j j t j j	 ƒ  d ƒ | _
 Wd  QXd  S(   NRX   c           B  s&   e  Z d  e j f d e j f g Z RS(   RY   RZ   (   R[   R\   R   t   float64t   float32R_   (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyRX   q   s   s   =dfg®Gáz®ó?g=
×£p=@(   g®Gáz®ó?g=
×£p=@(   R   R`   RW   R   R   t   realR$   t   doubleRY   t   floatRZ   (   R   RX   Ra   R   R2   RM   (    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   test_float_fieldsp   s    !(   R[   R\   R   t
   contextlibt   contextmanagerR4   R?   RE   RO   RW   Rb   Rh   (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyR      s   				t   __main__("   t
   __future__R    Ri   R%   RR   t   syst   llvmlite.llvmpy.coret   llvmpyt   coreR   t   numpyt   npt   numba.unittest_supportt   unittest_supportt   unittestt   numbaR   R   R   t   numba.compiler_lockR   t   numba.targetsR   t   supportR   R$   R	   t   intpt   bitwidthR
   R   R   R[   t   main(    (    (    s7   lib/python2.7/site-packages/numba/tests/test_cgutils.pyt   <module>   s    	d