σ
\K]c           @@ sέ   d  d l  m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z
 d e
 j f d     YZ d e f d	     YZ d
 e f d     YZ d e e f d     YZ d e e f d     YZ e d  Z d S(   i    (   t   print_functiont   absolute_import(   t   ir(   t   binding(   t	   datamodel(   t   unittest_supportt   DataModelTesterc           B@ s/   e  Z d  Z e Z d   Z d   Z d   Z RS(   sE   
    Test the implementation of a DataModel for a frontend type.
    c         C@ s&   t  j   |  _ t j |  j |  _ d  S(   N(   R   t   Modulet   moduleR   t   default_managert   fe_type(   t   self(    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyt   setUp   s    c   
      @ s  t  j t  j   g   } t  j |  j | d d } t  j   } | j | j    t  j |  j	 j
   d  } |  j	 j | |  } |  j | t d  t | t t f  rd   f d    t   | d d    } t   |  j	 j     } |  j | |  n |  j | j |  j	 j    |  j	 j | |  } |  j | j |  j	 j
    | j   t j t |  j   }	 t |	  d S(   si   
        - Is as_arg() and from_arg() implemented?
        - Are they the inverse of each other?
        t   namet   test_as_args(   as_argument returned NotImplementedErrorc         3@ sc   x\ |  D]T } t  | t t f  r< t   | d |  Vq | d  k rP | Vq | |  Vq Wd  S(   Nt   func(   t
   isinstancet   tuplet   listt   None(   t   argsR   t   arg(   t   recur_tuplize(    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyR   $   s    R   c         S@ s   |  j  S(   N(   t   type(   t   x(    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyt   <lambda>.   t    N(   R   t   FunctionTypet   VoidTypet   FunctionR   t	   IRBuildert   position_at_endt   append_basic_blockt   ConstantR   t   get_value_typeR   t   as_argumentt   assertIsNott   NotImplementedR   R   R   t   get_argument_typet   assertEqualR   t   from_argumentt   ret_voidt   llt   parse_assemblyt   str(
   R   t   fntyt   functiont   buildert   undef_valueR   t   argtypest   exptypest	   rev_valuet   materialized(    (   R   s6   lib/python2.7/site-packages/numba/datamodel/testing.pyR      s(    

c         C@ s  t  j t  j   g   } t  j |  j | d d } t  j   } | j | j    t  j |  j	 j
   d  } |  j	 j | |  } |  j | t d  |  j | j |  j	 j    |  j	 j | |  } |  j | j |  j	 j
    | j   t j t |  j   } t |  d S(   so   
        - Is as_return() and from_return() implemented?
        - Are they the inverse of each other?
        R   t   test_as_returns&   as_return returned NotImplementedErrorN(   R   R   R   R   R   R   R   R    R!   R   R"   R   t	   as_returnR$   R%   R'   R   t   get_return_typet   from_returnR)   R*   R+   R,   (   R   R-   R.   R/   R0   t   retR3   R4   (    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyR5   ?   s    
(   t   __name__t
   __module__t   __doc__R%   R
   R   R   R5   (    (    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyR   
   s
   		+t   SupportAsDataMixinc           B@ s   e  Z d  Z d   Z RS(   s#   Test as_data() and from_data()
    c         C@ s  t  j t  j   g   } t  j |  j | d d } t  j   } | j | j    t  j |  j	 j
   d   } |  j	 j | |  } |  j | t d  |  j | j |  j	 j    |  j	 j | |  } |  j | j |  j	 j
    | j   t j t |  j   } t |  d  S(   NR   t   test_as_datas   as_data returned NotImplemented(   R   R   R   R   R   R   R   R    R!   R   R"   R   t   as_dataR$   R%   R'   R   t   get_data_typet	   from_dataR)   R*   R+   R,   (   R   R-   R.   R/   R0   t   dataR3   R4   (    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyR>   _   s    
(   R:   R;   R<   R>   (    (    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyR=   Z   s   t   NotSupportAsDataMixinc           B@ s   e  Z d  Z d   Z RS(   s@   Ensure as_data() and from_data() raise NotImplementedError.
    c         C@ sΗ   t  j t  j   g   } t  j |  j | d d } t  j   } | j | j    t  j |  j	 j
   d   } |  j t   |  j	 j | |  } Wd  QX|  j t   |  j	 j | |  } Wd  QXd  S(   NR   R>   (   R   R   R   R   R   R   R   R    R!   R   R"   R   t   assertRaisest   NotImplementedErrorR?   RA   (   R   R-   R.   R/   R0   RB   t   rev_data(    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyt   test_as_data_not_supported{   s    (   R:   R;   R<   RG   (    (    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyRC   w   s   t"   DataModelTester_SupportAsDataMixinc           B@ s   e  Z RS(    (   R:   R;   (    (    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyRH      s   t%   DataModelTester_NotSupportAsDataMixinc           B@ s   e  Z RS(    (   R:   R;   (    (    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyRI      s   c         C@ s   |  r
 t  St Sd S(   s;   A helper for returning a unittest TestCase for testing
    N(   RH   RI   (   t   support_as_data(    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyt   test_factory   s    N(   t
   __future__R    R   t   llvmliteR   R   R*   t   numbaR   R   t   unittestt   TestCaseR   t   objectR=   RC   RH   RI   t   TrueRK   (    (    (    s6   lib/python2.7/site-packages/numba/datamodel/testing.pyt   <module>   s   P