ó
\K]c           @` sÁ   d  d l  m Z m Z m Z d  d l Z d  d l m Z m Z d  d l	 m
 Z
 m Z m Z m Z m Z d d l m Z m Z m Z d  d l m Z d a d	 „  Z d
 e e e f d „  ƒ  YZ d S(   i    (   t   print_functiont   absolute_importt   divisionN(   t   compile_isolatedt   run_frontend(   t   typest   rewritest   irt   jitt   ir_utilsi   (   t   TestCaset   MemoryLeakMixint   SerialMixin(   t   dead_branch_prunei{   c         C` sB   t  |  ƒ } d t f d „  ƒ  Y} t j j d | | ƒ | ƒ | S(   Nt   MockPipelinec           B` s   e  Z d  „  Z RS(   c         S` sC   d  |  _ d  |  _ d  |  _ | |  _ d  |  _ d  |  _ d  |  _ d  S(   N(   t   Nonet	   typingctxt	   targetctxt   argst   func_irt   typemapt   return_typet	   calltypes(   t   selfR   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   __init__   s    						(   t   __name__t
   __module__R   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyR      s   s   before-inference(   R   t   objectR   t   rewrite_registryt   apply(   t   funcR   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   compile_to_ir   s
    
t   TestBranchPrunec           B` sÑ   e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s   
    Tests branch pruning
    c         C` sY   g  } xL | j  j ƒ  D]; } g  | j d t j ƒ D] } | ^ q2 } | j | ƒ q W| S(   Nt   cls(   t   blockst   valuest
   find_instsR   t   Brancht   extend(   R   t   the_irt   branchest   blkt   _t   tmp(    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   find_branches(   s
    (c         G` s`  t  | ƒ } | j ƒ  } |  j rF t d d ƒ t d ƒ | j ƒ  n  t | | ƒ | } |  j ry t d ƒ | j ƒ  n  |  j | ƒ } |  j t | ƒ t | ƒ ƒ g  }	 x² t	 | ƒ D]¤ \ }
 } | |
 } | t
 k rì |	 j | j ƒ q· | t k r|	 j | j ƒ q· | d  k rq· | d k rI|	 j | j ƒ |	 j | j ƒ q· d s· t d ƒ ‚ q· Wt g  | j j ƒ  D] } | ^ qrƒ } t g  | j j ƒ  D] } | ^ qšƒ } y |  j | | t |	 ƒ ƒ WnR t k
 r!} t d t | ƒ ƒ t d	 t | ƒ ƒ t d
 t |	 ƒ ƒ | ‚ n Xt | | ƒ } | j | Œ  } | | Œ  } |  j | | ƒ d  S(   Nt   =iP   s   before prunes   after prunet   bothi    t   unreachablet
   new_labelst   original_labelst   expect_removed(   R   t   copyt   _DEBUGt   printt   dumpR   R,   t   assertEqualt   lent	   enumeratet   Truet   appendt   truebrt   Falset   falsebrR   t   AssertionErrort   setR"   t   keyst   sortedR   t   entry_point(   R   R   t   args_tyst   pruneR   R   t   beforet   aftert   before_branchesR2   t   idxt   branchR*   R1   R0   t   et   crest   rest   expected(    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   assert_prune/   sN    	
	

((
c         C` sY  d „  } |  j  | t j d ƒ f t g d  ƒ d „  } |  j  | t j d ƒ f t g d  ƒ d „  } |  j  | t j d ƒ f t g d  ƒ |  j  | t j d ƒ f t g d ƒ d „  } |  j  | t j d ƒ f t g d  ƒ |  j  | t j d ƒ f d  g d ƒ d „  } |  j  | t j d ƒ f t g d  ƒ |  j  | t j d ƒ f d  g d ƒ d  S(   Nc         S` s   d d k r d Sd  S(   Ni   i    gn†ðù!	@(    (   t   x(    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   implp   s    t   nonec         S` s   d d k r d Sd  S(   Ni   gn†ðù!	@(    (   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   v   s    c         S` s   |  d  k r d Sd  S(   Ngn†ðù!	@(   R   (   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   |   s    i
   c         S` s   |  d k r d Sd  S(   Ni
   gn†ðù!	@(    (   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   ƒ   s    c         S` s   |  d k r d } n  d  S(   Ni
   gn†ðù!	@(    (   RP   t   z(    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   Š   s    (   RO   R   t   NoneTypeR:   R   R=   t   IntegerLiteral(   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_single_ifn   s    	%	%	%%	%%	%c         C` sW   d „  } |  j  | t j d ƒ f t g d  ƒ |  j  | t j d ƒ f t g d ƒ d  S(   Nc         S` s   |  d  k r d Sd Sd  S(   Ngn†ðù!	@gl&ßlsãù?(   R   (   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ      s    RR   i
   (   RO   R   RT   R=   R   RU   R:   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_single_if_else›   s    	%c         C` sª   d „  } |  j  | t j d ƒ f t g d  ƒ |  j  | t j d ƒ f d  g d ƒ d „  } |  j  | t j d ƒ f t g d  ƒ |  j  | t j d ƒ f d  g d ƒ d  S(   Nc         S` s   |  d k r d Sd  S(   Nid   gn†ðù!	@(    (   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   ¨   s    RR   id   c         S` s   d |  k r d Sd  S(   Nid   gn†ðù!	@(    (   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   ¯   s    (   RO   R   RT   R:   R   RU   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_single_if_const_val¦   s    	%%	%c         C` sÍ   d „  } |  j  | t j d ƒ f d d  g d d ƒ |  j  | t j d ƒ f d t g d  d  ƒ |  j  | t j d ƒ t j d ƒ f t g d d  ƒ |  j  | t j d ƒ t j d ƒ f d  g d d ƒ d  S(   Nc         S` s   |  | k r d Sd Sd  S(   Ngn†ðù!	@gl&ßlsãù?(    (   RP   t   y(    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   ¹   s    id   i   RR   iè  (   RO   R   RU   R   RT   R=   R:   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt!   test_single_if_else_two_const_val·   s    	%%c         C` s¶   d „  } |  j  | t j d ƒ f t d  g d  ƒ |  j  | t j d ƒ f t d  g d ƒ d „  } |  j  | t j d ƒ f d  d  g d  ƒ |  j  | t j d ƒ f t d  g d ƒ d  S(   Nc         S` s:   t  } |  d  k r t } n d } | r0 d } n d } | S(   Ni   i
   iýÿÿÿ(   R=   R   R:   (   RP   t   x_is_none_workt   deadRY   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   Ê   s    		RR   i
   c         S` s4   t  } |  d  k r t } n  | r* d } n d } | S(   Ni
   iýÿÿÿ(   R=   R   R:   (   RP   R[   RY   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   Ú   s    		(   RO   R   RT   R=   R   RU   R:   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt,   test_single_if_else_w_following_undeterminedÈ   s    	((	(c         C` s]   d „  } |  j  | t j d ƒ f t d  g d  ƒ |  j  | t j d ƒ f t d  g d ƒ d  S(   Nc         S` sL   d } d } |  d  k r! d } n d } | | k r< d } n d } | | f S(   Nid   i   i   i
   iýÿÿÿ(   R   (   RP   t   one_hundredR[   R\   RY   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   ì   s    		RR   i
   (   RO   R   RT   R=   R   RU   R:   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_double_if_else_rt_constê   s    	(c         C` sW   d „  } |  j  | t j d ƒ f d  g d ƒ |  j  | t j d ƒ f d  g d ƒ d  S(   Nc         S` s%   d } |  | k r d } n d } | S(   Nid   gn†ðù!	@gl&ßlsãù?(    (   RP   R^   RY   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ      s
    	i
   id   (   RO   R   RU   R   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt%   test_double_if_else_non_literal_constþ   s    		%c         C` s]   d „  } |  j  | t j d ƒ f t t g d  ƒ |  j  | t j d ƒ f t t g d ƒ d  S(   Nc         S` s@   |  d  k r d } n d } |  d  k	 r0 d } n d } | | f S(   Ni
   i(   id   i  (   R   (   RP   RY   RS   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ     s    		RR   i
   (   RO   R   RT   R=   R:   R   RU   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt"   test_single_two_branches_same_cond  s    	(c         C` sˆ   d  d „ } |  j | t j d  ƒ f t t g d  ƒ |  j | t j d ƒ f t t g d  ƒ |  j | t j d ƒ f t t g d ƒ d  S(   Nc         S` s@   |  d  k r d } n d } |  d  k	 r0 d } n d } | | f S(   Ni
   i(   id   i  (   R   (   RP   RY   RS   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ      s    		RR   i
   (   R   RO   R   t   OmittedR=   R:   RT   RU   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_cond_is_kwarg_none  s
    (c         C` s°   d d „ } |  j  | t j d ƒ f d  d  g d ƒ |  j  | t j d ƒ f d  d  g d ƒ |  j  | t j d ƒ f d  d  g d ƒ |  j  | t j d ƒ f t t g d  ƒ d  S(   Niè  c         S` s@   |  d k r d } n d } |  d k r0 d } n d } | | f S(   Niè  i
   i(   id   i  (    (   RP   RY   RS   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   4  s    		i    RR   (   RO   R   Rb   R   RU   RT   R:   R=   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_cond_is_kwarg_value2  s    (!(c         ` sT   d „  } ‡  f d †  } | | t  j d ƒ f d ƒ | | t  j d ƒ f d ƒ d  S(   Nc         S` s   |  d  k r d Sd S(   Ni
   i   (   R   (   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   fnJ  s    c         ` s  t  |  ƒ } ˆ  j | ƒ } ˆ  j t | ƒ d ƒ | d j } t j | | ƒ } ˆ  j | j d ƒ ˆ  j r‘ t	 d d ƒ t	 d ƒ | j
 ƒ  n  t | | ƒ ˆ  j rÌ t	 d d ƒ t	 d ƒ | j
 ƒ  n  t j | | ƒ } ˆ  j t | t j ƒ ƒ ˆ  j | j | ƒ d  S(   Ni   i    t   binopR-   iP   s   before prunes   after prune(   R   R,   R7   R8   t   condR	   t   get_definitiont   opR4   R5   R6   R   t
   assertTruet
   isinstanceR   t   Constt   value(   R   t   arg_tyst   bit_valR   RH   t   condition_vart   condition_defnt   new_condition_defn(   R   (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   checkO  s$    	
	
RR   i   i
   i    (   R   RT   RU   (   R   Re   Rs   (    (   R   s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_cond_rewrite_is_correctG  s    	c         C` s½   t  d „  ƒ } |  j | t j d ƒ d ƒ d ƒ |  j | t j d ƒ d  ƒ d ƒ |  j | t j d ƒ j d ƒ d ƒ g  ƒ |  j | t j d ƒ j d ƒ d  ƒ g  ƒ |  j | j ƒ d  S(	   Nc         S` s'   |  j  d k r# | d  k r d Sd Sg  S(   Ni   i
   i   (   t   ndimR   (   t   at   b(    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   bugs  s
    i
   i   i   i   i   (   i   i   (   i   i   (   R   R7   t   npt   arangeR   t   reshapet   assertFalset   nopython_signatures(   R   Rx   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_obj_mode_fallbacko  s    ""++c         C` sz   d „  } |  j  | t j d ƒ f t g d ƒ t } z8 d a d „  } |  j  | t j d ƒ f t g d ƒ Wd  | a Xd  S(   Nc         S` s   t  d k r |  S|  d Sd  S(   Ni{   i
   (   t   _GLOBAL(   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   ƒ  s    i   i   c         S` s   t  d k r |  S|  d Sd  S(   Ni{   i
   (   R   (   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   ‘  s    (   RO   R   RU   R=   R   R:   (   R   RQ   R+   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_global_bake_in  s    	%	)c         ` sx   d ‰  ‡  f d †  } |  j  | t j d ƒ f t g d ƒ d ‰  ‡  f d †  } |  j  | t j d ƒ f t g d ƒ d  S(   Ni{   c         ` s   ˆ  d k r |  S|  d Sd  S(   Ni{   i
   (    (   RP   (   t   _FREEVAR(    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   Ÿ  s    i   i   c         ` s   ˆ  d k r |  S|  d Sd  S(   Ni{   i
   (    (   RP   (   R   (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   ©  s    (   RO   R   RU   R=   R:   (   R   RQ   (    (   R   s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_freevar_bake_in›  s    %c         C` sY   d  d „ } |  j | t j t j d d ƒ t j d ƒ f d  d  g t j d ƒ d  ƒ d  S(   Nc         S` s)   | d  k r d } n  | d k  r% d Sd S(   Ni    i
   i   (   R   (   t   arrayRv   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   µ  s
    	i   t   CRR   i   (   i   i   (   R   RO   R   t   Arrayt   float64RT   Ry   t   zeros(   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt4   test_redefined_variables_are_not_considered_in_prune±  s    		c         C` sœ   d  d „ } |  j | t j t j d d ƒ t j d ƒ f t d g t j d ƒ d  ƒ |  j | t j t j d d ƒ t j f d  d  g t j d	 ƒ d ƒ d  S(
   Nc         S` s*   d } | d  k r d S| d k  r& d S| S(   Ni    i
   i   (   R   (   Rƒ   Rv   RP   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   Ç  s    i   R„   RR   R.   i   g      (@(   i   i   (   i   i   (	   R   RO   R   R…   R†   RT   R=   Ry   R‡   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   test_comparison_operatorsÂ  s    
					c         C` se   d  d „ } |  j | t j t j d d ƒ t j t j d ƒ f d  d  d  g t j d ƒ d d  ƒ d  S(   Nc         S` sR   d } | d k  r d } n  | d  k r0 d } n d } | d k  rF d Sd | | S(   Ni    i   i   i
   i   (   R   (   Rƒ   RP   Rv   Rw   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   á  s    		i   R„   RR   i   g      ð?(   i   i   (   R   RO   R   R…   R†   RT   Ry   R‡   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt%   test_redefinition_analysis_same_blockÝ  s    	c         C` sh   d  d „ } |  j | t j t j d d ƒ t j t j d ƒ f d  d  d  d  g t j d ƒ d d  ƒ d  S(   Nc         S` sk   d } | d k r d } n  | d k  r0 d } n  | d  k rI | d 7} n | d 7} | d k  rc d Sd | S(	   Ni    i   i   i   i   i   i
   i   (   R   (   Rƒ   RP   Rv   Rw   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ   ÷  s    		
i   R„   RR   i   g      ð?(   i   i   (   R   RO   R   R…   R†   RT   Ry   R‡   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt3   test_redefinition_analysis_different_block_can_execó  s    	c         C` s  d  d  d „ } |  j | t j t j d d ƒ t j d ƒ t j d ƒ f t d  g t j d ƒ d  d  ƒ |  j | t j t j d d ƒ t j d ƒ t j f t d  g t j d ƒ d  d ƒ |  j | t j t j d d ƒ t j t j d ƒ f d  d  g t j d	 ƒ d d  ƒ d  S(
   Nc         S` sF   d } | d  k	 r d } n  | d  k r4 | d 7} n
 | d 7} d | S(   Ni    i   i   i   i   (   R   (   Rƒ   RP   Rv   Rw   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyRQ     s    	
i   R„   RR   i   g333333ó?(   i   i   (   i   i   (   i   i   (	   R   RO   R   R…   R†   RT   R:   Ry   R‡   (   R   RQ   (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt6   test_redefinition_analysis_different_block_cannot_exec  s     
						(   R   R   t   __doc__R=   R4   R,   RO   RV   RW   RX   RZ   R]   R_   R`   Ra   Rc   Rd   Rt   R~   R€   R‚   Rˆ   R‰   RŠ   R‹   RŒ   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyR    !   s.   		?	-				"						(							(   t
   __future__R    R   R   t   numpyRy   t   numba.compilerR   R   t   numbaR   R   R   R   R	   t   supportR
   R   R   t   numba.analysisR   R   R   R    (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_analysis.pyt   <module>   s   (	