ó
Û³Y]c           @` sÉ   d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l m Z d  d l m Z	 d  d l
 m Z m Z d d l m Z m Z d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ e d k rÅ e	 j ƒ  n  d S(   i    (   t   print_functiont   divisiont   absolute_importN(   t   jit(   t   unittest_support(   t   TypingErrort   NumbaWarningi   (   t   TestCaset   tagt   TestSelfRecursionc           B` sq   e  Z d  „  Z d „  Z e d ƒ d „  ƒ Z d „  Z e d ƒ d „  ƒ Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   c         C` s   d d l  m } | |  _ d  S(   Ni   (   t   recursion_usecases(   t    R
   t   mod(   t   selfR
   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   setUp   s    c         C` s   |  j  | d ƒ d ƒ d  S(   Ni
   i7   (   t   assertPreciseEqual(   R   t   cfunc(    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt	   check_fib   s    t	   importantc         C` s   |  j  |  j j ƒ d  S(   N(   R   R   t   fib1(   R   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_global_explicit_sig   s    c         C` s   |  j  |  j j ƒ d  S(   N(   R   R   t   fib2(   R   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_inner_explicit_sig   s    c         C` s   |  j  |  j j ƒ d  S(   N(   R   R   t   fib3(   R   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_global_implicit_sig   s    c         C` sE   |  j  t ƒ  } |  j j d ƒ Wd  QX|  j d t | j ƒ ƒ d  S(   Ni{   s#   cannot type infer runaway recursion(   t   assertRaisesR   R   t   runaway_selft   assertInt   strt	   exception(   R   t   raises(    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_runaway"   s    	c         C` sP   |  j  j ƒ  } |  j  j t d t ƒ ƒ } d } |  j | | Œ  | | Œ  ƒ d  S(   Nt   nopythoni   g      À?(   i   g      À?(   R   t   make_type_change_selfR   t   TrueR   (   R   t   pfuncR   t   args(    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_type_change(   s    c         C` sE   |  j  t ƒ  } |  j j d ƒ Wd  QX|  j t | j ƒ d ƒ d  S(   Ni   t
   raise_self(   R   t
   ValueErrorR   R&   t   assertEqualR   R   (   R   R   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt
   test_raise.   s    c         C` s[   |  j  j ƒ  } |  j  j t d t ƒ ƒ } x* d D]" } |  j | | ƒ | | ƒ ƒ q1 Wd  S(   NR    i    i   i
   i   (   i    i   i
   i   (   R   t   make_optional_return_caseR   R"   R(   (   R   R#   R   t   arg(    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_optional_return4   s    (   t   __name__t
   __module__R   R   R   R   R   R   R   R%   R)   R,   (    (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyR	      s   						t   TestMutualRecursionc           B` s\   e  Z d  „  Z d „  Z d „  Z d „  Z e d ƒ d „  ƒ Z d „  Z d „  Z	 d „  Z
 RS(	   c         C` s   d d l  m } | |  _ d  S(   Ni   (   R
   (   R   R
   R   (   R   R
   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyR   =   s    c         C` s/   t  j d ƒ } |  j |  j j d ƒ | ƒ d  S(   Ni
   (   t   matht	   factorialR   R   t	   outer_fac(   R   t   expect(    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_mutual_1A   s    c         C` s§   |  j  j ƒ  \ } } |  j  j t d t ƒ ƒ \ } } xj d d d d g D]V } |  j | d | ƒ | d | ƒ ƒ |  j | d | d d ƒ | d | d d ƒ ƒ qI Wd  S(	   NR    iÿÿÿÿi    i   i   t   xt   yt   z(   R   t   make_mutual2R   R"   R   (   R   t   pfoot   pbart   cfoot   cbarR5   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_mutual_2E   s
    !"c         C` sE   |  j  t ƒ  } |  j j d ƒ Wd  QX|  j d t | j ƒ ƒ d  S(   Ni{   s#   cannot type infer runaway recursion(   R   R   R   t   runaway_mutualR   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyR   L   s    	R   c         C` sP   |  j  j ƒ  } |  j  j t d t ƒ ƒ } d } |  j | | Œ  | | Œ  ƒ d  S(   NR    i   g      À?(   i   g      À?(   R   t   make_type_change_mutualR   R"   R   (   R   R#   R   R$   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyR%   R   s    c         C` sP   |  j  j ƒ  } |  j  j t d t ƒ ƒ } d } |  j | | ƒ | | ƒ ƒ d  S(   NR    i   (   R   t   make_four_levelR   R"   R   (   R   R#   R   R+   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_four_levelY   s    c      	   C` sÉ   |  j  j t d t ƒ ƒ } |  j t ƒ  } | d ƒ Wd  QXd } |  j | t | j ƒ ƒ |  j  j t ƒ } |  j  j ƒ  } t	 j
 ƒ  $ t	 j d d t ƒ| d ƒ } Wd  QX|  j | | d ƒ ƒ d  S(   NR    i   s   Unknown attribute 'ndim't   ignoret   categoryi   (   R   t   make_inner_errorR   R"   R   R   R   R   R   t   warningst   catch_warningst   filterwarningsR   R(   (   R   R   R   t   errmsgR#   t   got(    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   test_inner_error_   s    c         C` sN   |  j  j ƒ  } |  j t ƒ  } | d ƒ Wd  QX|  j t | j ƒ d ƒ d  S(   Ni   t   raise_mutual(   R   t   make_raise_mutualR   R'   R(   R   R   (   R   R   R   (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyR)   o   s    (   R-   R.   R   R4   R=   R   R   R%   RA   RJ   R)   (    (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyR/   ;   s   						t   __main__(   t
   __future__R    R   R   R0   RE   t   numbaR   R   t   unittestt   numba.errorsR   R   t   supportR   R   R	   R/   R-   t   main(    (    (    s9   lib/python2.7/site-packages/numba/tests/test_recursion.pyt   <module>   s   /<