
\K]c           @` s  d  d l  m Z m Z m 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 m Z d  d l Z d  d l m Z d  d l Z d  d l m Z d  d l Z d  d l m Z d d	 l m Z m Z m Z d  d
 l m Z m Z m Z m  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' d  d l m( Z( d  d l) m* Z* d  d l+ m, Z, m- Z- m. Z. m/ Z/ m0 Z0 m1 Z1 m2 Z2 d  d l m3 Z3 d  d l4 m5 Z6 d  d l7 m8 Z8 m9 Z9 d  d l: m; Z; d d l m< Z< m= Z= m> Z> d d l? m@ Z@ d d lA mB ZB e j	 jC d  o`e jD d  d d f k ZE e jF d d k ZG e> ZH e jI eJ d  ZK d ZL e jI e j	 jC d  eL  ZM e jI e	 jN   d  d! f k d"  ZO d# e f d$     YZP d%   ZQ d&   ZR d'   ZS d(   ZT d)   ZU d*   ZV d+   ZW d,   ZX d-   ZY d.   ZZ e[ d/  Z\ d0   Z] d1 e^ f d2     YZ_ d3 eP f d4     YZ` d5 e eP f d6     YZa d7 eP f d8     YZb d9 eb f d:     YZc e> eO d; eb f d<     Y  Zd d= eP f d>     YZe d? eP f d@     YZf dA eP f dB     YZg dC eP f dD     YZh eH dE eP f dF     Y Zi ej dG k r|e jk   n  d S(H   i    (   t   print_functiont   divisiont   absolute_import(   t   sqrtN(   t   reduce(   t   randn(   t   defaultdict(   t   unittest_supporti   (   t   TestCaset   captured_stdoutt   MemoryLeakMixin(   t   njitt   pranget   stencilt   inline_closurecall(   t   compilert   typingt   errors(   t   cpu(   t   types(   t
   cpu_target(   t   config(   t   type_annotations(   t   find_callnamet   guardt   build_definitionst   get_definitiont
   is_getitemt
   is_setitemt   index_var_of_get_setitem(   t   ir(   t   empty_inferred(   t   compile_isolatedt   Flags(   t   ByteCodeIter(   t   tagt   override_env_configt   skip_parfors_unsupported(   t
   needs_blas(   t   needs_lapackt   win32i   i   i    s   Test disableds   linux only testt   linuxt   i386t   x86_64s   x86 only testt   TestParforsBasec           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 d	  Z d d
  Z d   Z d   Z d   Z d   Z RS(   s   
    Base class for testing parfors.
    Provides functions for compilation and three way comparison between
    python functions, njit'd functions and parfor njit'd functions.
    c         G` s   t    |  _ |  j j d  t    |  _ |  j j d t j t   |  j j d  t    |  _ |  j j d t j t   |  j j d  |  j j d t j t   t	 t
 |   j |   d  S(   Nt   nrtt   auto_parallelt   fastmath(   R!   t   cflagst   sett   pflagsR   t   ParallelOptionst   Truet   fast_pflagst   FastMathOptionst   superR,   t   __init__(   t   selft   args(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR8   ?   s    c         C` s   t  | | d | S(   Nt   flags(   R    (   R9   t   funct   sigR;   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   _compile_thisP   s    c         C` s   |  j  | | d |  j S(   NR;   (   R>   R2   (   R9   R<   R=   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   compile_parallelS   s    c         C` s   |  j  | | d |  j S(   NR;   (   R>   R5   (   R9   R<   R=   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   compile_parallel_fastmathV   s    c         C` s   |  j  | | d |  j S(   NR;   (   R>   R0   (   R9   R<   R=   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   compile_njitY   s    c         O` sV   t  g  | D] } t j |  ^ q
  } |  j | |  } |  j | |  } | | f S(   N(   t   tuplet   numbat   typeofR?   RA   (   R9   t   pyfuncR:   t   kwargst   xR=   t   cpfunct   cfunc(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   compile_all\   s    (c         O` s,  | j  d d  } | j  d d  } | j  d d  } | j  d t  }	 d   }
 | |
 |     } | j |
 |     } | j |
 |     } t j j | | |  t j j | | |  |  j t |  t |   |	 r |  j	 | |  n  | d k	 r(| j |
 |     } t j j | | |  n  d S(   s  
        Checks python, njit and parfor impls produce the same result.

        Arguments:
            pyfunc - the python function to test
            cfunc - CompilerResult from njit of pyfunc
            cpfunc - CompilerResult from njit(parallel=True) of pyfunc
            args - arguments for the function being tested
        Keyword Arguments:
            scheduler_type - 'signed', 'unsigned' or None, default is None.
                           Supply in cases where the presence of a specific
                           scheduler is to be asserted.
            fastmath_pcres - a fastmath parallel compile result, if supplied
                             will be run to make sure the result is correct
            Remaining kwargs are passed to np.testing.assert_almost_equal
        t   scheduler_typet   check_fastmatht   fastmath_pcrest   check_schedulingc          W` s   |  s t    Sg  } x |  D] } t | t j  rK | j | j d   q t | t j  rs | j | j    q t | t j  r | j |  q t	 d   q Wt  |  S(   Nt   ks%   Unsupported argument type encountered(
   RB   t
   isinstancet   npt   ndarrayt   appendt   copyt   numbert   numberst   Numbert
   ValueError(   R:   t   new_argsRG   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt	   copy_args}   s    N(
   t   popt   NoneR4   t   entry_pointRQ   t   testingt   assert_almost_equalt   assertEqualt   typeRN   (   R9   RE   RI   RH   R:   RF   RK   RL   RM   RN   RZ   t   py_expectedt   njit_outputt   parfor_outputt   parfor_fastmath_output(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   check_parfors_vs_othersg   s"    	c         C` se   d } | d  k	 rH | d k r/ | d | 7} qH d } t | |   n  |  j | | j j    d  S(   Ns   @do_schedulingt   signedt   unsignedt   _s$   Unknown scheduler_type specified: %s(   Rg   Rh   (   R\   RX   t   assertInt   libraryt   get_llvm_str(   R9   t   cresRK   t   scheduler_strt   msg(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRN      s    c         C` sd   g  | D] } | | j  k r | ^ q } | d k	 r` x) | D] } | t |  k s; t  q; Wn  | S(   s.    helper function to filter out modules by nameN(   t   nameR\   t   strt   AssertionError(   R9   t   modt   magicstrt   checkstrRG   t   filt(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   _filter_mod   s
    (c         C` s>   g  | j  j j j j D] } | ^ q } |  j | | d | S(   s    gets the gufunc LLVM ModulesRu   (   Rk   t   _codegent   _enginet   _eet   _modulesRw   (   R9   Rm   Rt   Ru   RG   R{   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   _get_gufunc_modules   s    (c         C` sI   d } |  j  | |  } t   } x! | D] } | |  | | j <q( W| S(   s$    helper for gufunc IR/asm generationt   __numba_parfor_gufunc(   R|   t   dictRp   (   R9   Rm   t   fnRt   t   gufunc_modsRG   Rs   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   _get_gufunc_info   s    	c         C` s   |  j  | t  S(   s   
        Returns the IR of the gufuncs used as parfor kernels
        as a dict mapping the gufunc name to its IR.

        Arguments:
         cres - a CompileResult from `njit(parallel=True, ...)`
        (   R   Rq   (   R9   Rm   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   _get_gufunc_ir   s    c         ` s.   | j  j j     f d   } |  j | |  S(   s   
        Returns the assembly of the gufuncs used as parfor kernels
        as a dict mapping the gufunc name to its assembly.

        Arguments:
         cres - a CompileResult from `njit(parallel=True, ...)`
        c         ` s   t    j |    S(   N(   Rq   t   emit_assembly(   Rs   (   t   tm(    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   emit_asm   s    (   Rk   Rx   t   _tmR   (   R9   Rm   R   (    (   R   s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   _get_gufunc_asm   s    c   
      ` sp     j  | |  }   j |  } d   }   f d   } x0 | j   D]" \ } } | |  }	 | |	  qF Wd S(   s  
        Asserts that the fastmath flag has some effect in that suitable
        instructions are now labelled as `fast`. Whether LLVM can actually do
        anything to optimise better now the derestrictions are supplied is
        another matter!

        Arguments:
         pyfunc - a function that contains operations with parallel semantics
         sig - the type signature of pyfunc
        c         S` sU   |  j    } g  } x< | D]4 } t j d |  } | d  k	 r | j |  q q W| S(   Ns   \bfast\b(   t
   splitlinest   ret   searchR\   RS   (   R   t   splittedt	   fast_instRG   t   m(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   _get_fast_instructions   s    c         ` sh   d
 } x[ |  D]S } d } x1 | D]) } | d } | | k r  | d	 7} q  q  W  j  | d k  q Wd  S(   Nt   faddt   fsubt   fmult   fdivt   fremt   fcmpi    s    fasti   (   R   R   R   R   R   R   (   t
   assertTrue(   t   instrst   opst   instt   countt   opt   match(   R9   (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   _assert_fast   s    
N(   R@   R   t   items(
   R9   RE   R=   Rm   t   _irR   R   Rp   t   guirR   (    (   R9   s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   assert_fastmath   s    		
N(   t   __name__t
   __module__t   __doc__t   Falset   _numba_parallel_test_R8   R>   R?   R@   RA   RJ   Rf   RN   R\   Rw   R|   R   R   R   R   (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,   6   s    							=		
	
	c         C` s   t  j |  |  } d | | } | t  j |  } | | | | | } | | }	 d d | }
 d d |	 } | t  j | |  } | | } |  |
 | } | | |  } | S(   Ng      ?g       @g      ?g      ?(   RQ   t   logR   t   exp(   t   sptpricet   striket   ratet
   volatilityt   timevt   logtermt   powtermt   dent   d1t   d2t   NofXd1t   NofXd2t   futureValuet   c1t   callt   put(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   blackscholes_impl  s    

c      
   C` s[   xT t  |  D]F } | t j d d t j |  t j | |   d |  |  8} q W| S(   Ng      ?(   t   rangeRQ   t   dotR   (   t   Yt   Xt   wt
   iterationst   i(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   lr_impl  s    Dc         C` sS  | } |  j  \ } } x7t |  D])} t j g  t |  D]\ } g  t |  D]C }	 t t j |  | d  d   f | |	 d  d   f d   ^ qN ^ q;  }
 t j g  t |  D]" } |
 | d  d   f j   ^ q  } t j g  t |  D]Q } g  t |  D]8 }	 t j |  | | k |	 f  t j | | k  ^ q^ q  } q" W| S(   Ni   (   t   shapeR   RQ   t   arrayR   t   sumt   argmin(   t   At	   numCentert   numItert   init_centroidst	   centroidst   Nt   Dt   lR   t   jt   distt   labels(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_kmeans_example  s    	o>	hc         K` s&  t  j   } t j |  } t j |   } | rB t j |  } n t j t  } t | | | |  } t	 j
 | |  | j   | j   t j | j | d t } | j   t j j j d | | j  t j | j | j | j d   \ | _ | _ | _ t j d | j d | j d | j d d d d  d | j d	 | j d
 t j  t j j    }	 t j j! | j | j | j | j | d |	 j" }
 |
 j   t j j j d | | j  t j#   } t j j$ | j | j | j | j | j | | d |	 } | j   t% | j&  | _' Wd  QX| | f S(   Nt   typeds   before-inferencet   func_irt   typemapt	   calltypest   liftedt   lifted_fromR:   t   return_typet   html_outputt   swappeds   after-inferencet   diagnostics(    ((   R   t   ContextR   t
   CPUContextR   t   run_frontendR3   R4   t   TestPipelineR   t   nested_contextt   refreshR   t   InlineClosureCallPassR   t   runRC   t   rewritest   rewrite_registryt   applyt   type_inference_staget	   typingctxR:   R\   R   R   R   R   t   TypeAnnotationR   t   HTMLt   parfort   ParforDiagnosticst   PreParforPasst   replaced_fnsR!   t
   ParforPassR   t   blockst   _definitions(   t	   test_funcR:   t   kwsR   t	   targetctxt   test_irt   optionst   tpt   inline_passR   t   preparfor_passR;   t   parfor_pass(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   get_optimized_numba_ir)  sR    

	
-						
	
	
c   
      K` s   t  |  | |  \ } } d } x_ | j j   D]N \ } } x? t | j  D]. \ } }	 t |	 t j j  rJ | d 7} qJ qJ Wq. W| S(   Ni    i   (	   R   R   R   t	   enumeratet   bodyRP   RC   R   t   Parfor(
   R   R:   R   R   R   t	   ret_countt   labelt   blockR   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   countParfors`  s    c         K` s+   t  |  | |  \ } } t | j | j  S(   N(   R   t   _count_arrays_innerR   R   (   R   R:   R   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   countArraysl  s    c   	      C` s   d } t    } x |  j   D] \ } } x t | j  D] \ } } t | t j j  r | j j	   } | j
 | d <| t | |  7} n  t | t j  r8 t | | j j t j  r8 | j | j j  q8 q8 Wq W| t |  7} | S(   Ni    (   R1   R   R   R   RP   RC   R   R   t	   loop_bodyRT   t
   init_blockR  R   t   Assignt   targetRp   R   t   ArrayCompatiblet   addt   len(	   R   R   R   t   arr_setR   R   R   R   t   parfor_blocks(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR  p  s    	c         K` sO   t  |  | |  \ } } d } x* | j j   D] } | t | |  7} q. W| S(   Ni    (   R   R   t   valuest   _count_array_allocs_inner(   R   R:   R   R   R   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   countArrayAllocs  s
    c         C` s   d } x | j  D] } t | t j j  rq | t |  | j  7} x- | j j   D] } | t |  |  7} qQ Wn  t | t	 j
  r t | j t	 j  r | j j d k r t t |  | j  d k s t t |  | j  d	 k r | d 7} q q W| S(
   Ni    R   t   emptyt   numpyR   s   numba.unsafe.ndarrayi   (   R  R  (   R   s   numba.unsafe.ndarray(   R   RP   RC   R   R   R  R  R  R  R   R  t   valuet   ExprR   R   R   (   R   R   R   R   t   b(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR    s    '	c         K` s.   t  |  | |  \ } } t | | j | j  S(   N(   R   t&   _count_non_parfor_array_accesses_innerR   R   (   R   R:   R   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   countNonParforArrayAccesses  s    c   	      C` sR  d } | d  k r t   } n  x-| j   D]\ } } x| j D]} t | t j j  r | j | j	 j
  | j j   } | j | d <| t |  | | |  7} n  t |  r t | | j j j
 t j  r t |  t |  |  r | d 7} n  t |  rA t | | j j
 t j  rA t |  t |  |  rA | d 7} qA qA Wq+ W| S(   Ni    i   (   R\   R1   R   R   RP   RC   R   R   R	  t	   index_varRp   R  RT   R  R  R   R  R   R  t   _uses_indicesR   R   R  (	   t   f_irR   R   t   parfor_indicesR   R   R   t   stmtR  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR    s(    c         C` sw   | j  | k r t St t |  |  } t | t j  rs | j d k rs t d   | j	 D  } t
 | | @ d k St S(   Nt   build_tuplec         s` s   |  ] } | j  Vq d  S(   N(   Rp   (   t   .0t   v(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pys	   <genexpr>  s    i    (   Rp   R4   R   R   RP   R   R  R   R1   R   R
  R   (   R  t   indext	   index_sett   ind_deft   varnames(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR    s    !R   c           B` s   e  Z d    Z RS(   c         C` sC   | |  _  | |  _ | |  _ | |  _ d  |  _ d  |  _ d  |  _ d  S(   N(   R   R   R:   R   R\   R   R   R   (   R9   R   R   R:   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR8     s    						(   R   R   R8   (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR     s   t   TestParforsc           B` sI  e  Z d    Z d   Z e e d  d     Z e e e d  d      Z e e d  d     Z	 e e d  d     Z
 e e d  d     Z e e d  d     Z e e d  d	     Z e e e d  d
      Z e e d  d     Z e j e p&e d  e d     Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z  e d    Z! e d    Z" e d    Z# e e$ d     Z% e e d     Z& e e d     Z' e e d      Z( e d!    Z) e d"    Z* e d#    Z+ e, d$    Z- e, d%    Z. e, d&    Z/ e d'    Z0 e d(    Z1 e d)    Z2 e d*    Z3 e d+    Z4 e d,    Z5 e d-    Z6 e d.    Z7 e d/    Z8 e d0    Z9 e d1    Z: e d2    Z; e d3    Z< e d4    Z= e d5    Z> e d6    Z? e d7    Z@ e d8    ZA e d9    ZB e d:    ZC e e d;     ZD e d<    ZE e d=    ZF e e, d>     ZG e e d?     ZH e d@    ZI e dA    ZJ e dB    ZK e dC    ZL e dD    ZM e dE    ZN e dF    ZO e dG    ZP e dH    ZQ e dI    ZR e dJ    ZS e dK    ZT e dL    ZU e dM    ZV e dN    ZW e dO    ZX RS(P   c         G` sY   t  j |  |  t j t j d  d  } t j d  t j d  | | j g |  _ d  S(   Ng      (@i   i   g      @g      @(   i   i   (   R,   R8   RQ   t   reshapet   aranget   Tt   simple_args(   R9   R:   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR8     s    c         O` s5   |  j  | |  \ } } |  j | | | | |  d  S(   N(   RJ   Rf   (   R9   RE   R:   RF   RI   RH   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   check  s    t	   importantc         C` sb   d   } t  j d d d  } t  j d d d  } t  j d d d  } |  j | | | |  d  S(   Nc         S` s   |  | | S(   N(    (   t   aRG   t   y(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt	   test_impl  s    i    i   i
   i   (   RQ   t   linspaceR(  (   R9   R,  R   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_arraymap  s
    	c         C` sV   d   } t  j d d d  j d d  } t  j d d d  } |  j | | |  d  S(   Nc         S` s   t  j |  |  S(   N(   RQ   R   (   R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i    i   i   i   i
   (   RQ   R-  R$  R(  (   R9   R,  R   R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt
   test_mvdot  s    	!c         C` s6   d   } |  j  |  |  j t | d  d k  d  S(   Nc          S` s/   t  j d  }  t  j d  } t  j |  |  S(   Ni   i
   i   (   i
   i   (   RQ   R   t   onesR   (   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   (    (   R(  R   R  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_0d_broadcast  s    	c         C` s6   d   } |  j  |  |  j t | d  d k  d  S(   Nc          S` s/   t  j d  }  t  j d  } t  j |  |  S(   Ni
   i   (   i
   i   (   i
   i   (   RQ   R0  t   zerosR   (   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   (    (   R(  R   R  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_2d_parfor  s    	c         C` sg   d   } |  j  | d d d |  j t | t j f  d k  |  j t | t j f  d k  d  S(   Nc         S` s[   d t  j j |   d } d t  j j |   d } d t  j | d | d d k   |  S(   Ni   i   i   (   RQ   t   randomt   ranfR   (   t   nRG   R+  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i t   decimali   i    (   R(  R   R  R   t   int64R  t   intp(   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_pi  s    	"c         ` s   x t  j t  j t  j t  j g D]i     f d   } |  j | d  |  j t | t j	 f  d k  |  j t
 | t j f  d k  q Wd  S(   Nc         ` s/   t  j |   }   |  } | j   } | | S(   N(   RQ   R0  R   (   R6  R   t   Ct   B(   R   (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   i   i    (   RQ   R   t   argmaxt   mint   maxR(  R   R  R   R8  R  R9  (   R9   R,  (    (   R   s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_fuse_argmin_argmax_max_min  s
    %"c         C` s1   t  j f d } |  j t t |  d k  d  S(   Ni   i   (   RC   t   float64R   R  R   (   R9   R:   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_blackscholes$  s    c         C` sr   t  j t  j d  d   d  d   f t  j t  j f } |  j t t |  d k  |  j t t |  d k  d  S(   Ni   (   RC   RA  R8  R   R  R   R  (   R9   R:   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_logistic_regression+  s    *c         C` s   t  j j d  d } d } d } t  j j | | f  } t  j j | | f  } |  j t | | d | d d t j t j d d  t j	 t j	 t j t j d d  f } |  j
 t t |  d k  d  S(	   Ni    i   i
   i   R7  i   i   R;  (   RQ   R4  t   seedR5  R(  R   R   t   ArrayRA  R9  R   R  (   R9   R   R   t   centersR   R   t   arg_typs(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_kmeans4  s    !s6   Only impacts Windows with Python 2.7 / 32 bit hardwarec         C` s   |  j  t j  b } t d t  d    } t j d d d  j d d  } t j d d d  } | | |  Wd QXd	 } |  j | t	 | j
   d S(
   s   
        This test is in place until issues with the 'parallel'
        target on Windows with Python 2.7 / 32 bit hardware are fixed.
        t   parallelc         S` s   t  j |  |  S(   N(   RQ   R   (   R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   ddotO  s    i    i   i   i   i
   Nsz   The 'parallel' target is not currently supported on Windows operating systems when using Python 2.7, or on 32 bit hardware(   t   assertRaisesR   t   UnsupportedParforsErrorR   R4   RQ   R-  R$  Rj   Rq   t	   exception(   R9   t   raisedRJ  R   R  Ro   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt#   test_unsupported_combination_raisesF  s    !c         C` sK   d   } |  j  t   } |  j |  Wd  QX|  j d t | j   d  S(   Nc           S` s   t  j d  S(   N(    (   RQ   R0  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  ^  s    s   '@do_scheduling' not found(   RK  Rr   R(  Rj   Rq   RM  (   R9   R,  t   raises(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple01\  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d  S(   Ni   (   i   (   RQ   R0  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  f  s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple02d  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d  S(   Ni   i   (   i   i   (   RQ   R0  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  l  s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple03j  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d  S(   Ni   (   RQ   R0  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  r  s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple04p  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d d t  j S(   Ni   i   t   dtype(   i   i   (   RQ   R0  t
   complex128(    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  x  s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple07v  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d  t  j d  S(   Ni   i   (   i   i   (   i   i   (   RQ   R0  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  ~  s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple08|  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d  S(   Ni   (   i   i   (   RQ   R0  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple09  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d  S(   Ni    (   i    i    (   RQ   R0  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple10  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d  d S(   Ni
   g      ?(   i
   i
   (   RQ   R0  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple11  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d  t  j d  S(   Ni
   g      ?(   i
   i
   (   RQ   R0  RV  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple12  s    	c         C` sK   d   } |  j  t   } |  j |  Wd  QX|  j d t | j   d  S(   Nc           S` s   t  j d  S(   Ng      ?(   RQ   RV  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    s   '@do_scheduling' not found(   RK  Rr   R(  Rj   Rq   RM  (   R9   R,  RP  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple13  s    	c         C` s   d   } |  j  |  d  S(   Nc           S` s   t  j d  d d  d  S(   Ni
   i    i   (   i
   i
   (   RQ   R0  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple14  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s   |  |  S(   N(    (   t   v1t   v2t   m1t   m2(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple15  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s   | | S(   N(    (   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple16  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s   | |  S(   N(    (   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple17  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s   | j  t j j |  d S(   Ni   (   R&  RQ   t   linalgt   svd(   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple18  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s   t  j | |  S(   N(   RQ   R   (   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple19  s    	c         C` sQ   d   } |  j  t   } |  j | |  j  Wd  QX|  j d t | j   d  S(   Nc         S` s   t  j | |  S(   N(   RQ   R   (   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    s   '@do_scheduling' not found(   RK  Rr   R(  R'  Rj   Rq   RM  (   R9   R,  RP  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple20  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s   t  j |  |   S(   N(   RQ   R   (   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple21  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s   t  j |  |   S(   N(   RQ   R   (   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple22  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s;   d |  } d |  } d t  j | d | d d k   d S(   Ni   i   i   i
   (   RQ   R   (   R_  R`  Ra  Rb  RG   R+  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    

(   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple23  s    	c         C` s   d   } |  j  |  d  S(   Nc          S` sG   d }  t  j |  |  f  } t  j |   } t  j | d  d   | f  S(   Ni   (   RQ   R0  R%  R   (   R6  R   R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple24  s    	c         C` s    d   } |  j  | |  j  d S(   sA   same as corresponding test_simple_<n> case but using operator.addc         S` s   t  j |  |   S(   N(   t   operatorR	  (   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    N(   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple_operator_15  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s   t  j | |  S(   N(   Ro  R	  (   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple_operator_16  s    	c         C` s    d   } |  j  | |  j  d  S(   Nc         S` s   t  j | |   S(   N(   Ro  R	  (   R_  R`  Ra  Rb  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    (   R(  R'  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_simple_operator_17  s    	c         ` s9   d d l  m     f d   } d } |  j | |  d  S(   Ni    (   R0  c         ` s     |   } | d S(   Ni    (    (   R6  R   (   R0  (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    io   (   R  R0  R(  (   R9   R,  R6  (    (   R0  s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_np_func_direct_import  s    c         C` s/   d   } |  j  t | t j f  d k  d  S(   Nc         S` s   t  |   } | d S(   Ni    (   R   (   R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   (   R   R  R   R8  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt!   test_np_random_func_direct_import  s    	c         C` s   d   } d   } d   } xh d d d t  d d  t  d d  g D]? } |  j | |  |  j | d	 |  |  j | d	 | d	  qC Wd  S(
   Nc         S` s   t  j |   S(   N(   RQ   R%  (   R6  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt
   test_impl1  s    c         S` s   t  j |  S(   N(   RQ   R%  (   t   sR6  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt
   test_impl2  s    c         S` s   t  j |  | |  S(   N(   RQ   R%  (   Rv  R6  t   t(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt
   test_impl3  s    i   i   g      >@i   i   i   (   t   complexR(  (   R9   Ru  Rw  Ry  t   arg(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_arange  s    			.c         C` sq   d   } d   } xX d d d t  d d  t  d d  g D]/ } |  j | d |  |  j | d | d	  q: Wd  S(
   Nc         S` s   t  j |  |  S(   N(   RQ   R-  (   t   startt   stop(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRu  *  s    c         S` s   t  j |  | |  S(   N(   RQ   R-  (   R}  R~  t   num(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRw  -  s    i   i   g      >@i   i   i   i   (   Rz  R(  (   R9   Ru  Rw  R{  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_linspace'  s
    		.c         C` sy   d   } |  j  | d d  |  j t  ) } t d t  |  } | d d  Wd  QXd } |  j | t | j   d  S(   Nc         S` s/   t  j |   } t  j |  } t  j | |  S(   N(   RQ   R0  R   (   R   R6  R   R<  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  6  s    i
   RI  i	   s   Sizes of A, B do not match(   R(  RK  Rr   R   R4   Rj   Rq   RM  (   R9   R,  RP  RI   Ro   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_size_assertion4  s    	c         C` s   d   } d } t  j j |  } t  j j d d | d f } |  j | |  |  j | |  |  j t | t j t j	 d d  f  d k  |  j t | t j t j	 d d  f  d k  d  S(	   Nc         S` s
   |  j    S(   N(   t   mean(   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  D  s    id   i
   t   sizei   i   R;  i   (
   RQ   R4  R5  t   randintR(  R   R  R   RE  RA  (   R9   R,  R   R   R<  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt	   test_meanB  s    	1c         C` s   d   } d } t  j j |  } t  j j d d | d f } | d | } |  j | |  |  j | |  |  j | |  |  j t | t j t j	 d d  f  d	 k  |  j t | t j t j	 d	 d  f  d	 k  d  S(
   Nc         S` s
   |  j    S(   N(   t   var(   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  P  s    id   i
   R  i   y              ?i   R;  i   (
   RQ   R4  R5  R  R(  R   R  R   RE  RA  (   R9   R,  R   R   R<  R;  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_varN  s    	1c         C` s   d   } d } t  j j |  } t  j j d d | d f } | d | } |  j | |  |  j | |  |  j | |  |  j t | t j t j	 d d  f  d	 k  |  j t | t j t j	 d	 d  f  d	 k  d  S(
   Nc         S` s
   |  j    S(   N(   t   std(   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  ^  s    id   i
   R  i   y              ?i   R;  i   (
   RQ   R4  R5  R  R(  R   R  R   RE  RA  (   R9   R,  R   R   R<  R;  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_std\  s    	1c         C` s/   d   } |  j  t | t j f  d k  d S(   s   
        Test function with only a random call to make sure a random function
        like ranf is actually translated to a parfor.
        c         S` s   t  j j |  |  f  } | S(   N(   RQ   R4  R5  (   R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  p  s    i   N(   R   R  R   R8  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_random_parforj  s    	c         C` s   d   } d } |  j  | t j |  f  } | j |  } | |  } t j j | | d d |  j t | t	 j
 f  d k  d  S(   Nc         S` s   t  j j d |  |  f  } t  j j |  |   } t  j j d d |  |  f  } t  j j d |  |  f  } t  j j d d d d |  |  f } t  j j d d d |  |  f  } t  j | | | | | |  S(   NR  g        g      ?i   t   highi   i   (	   RQ   R4  t   standard_normalR   t   normalt	   chisquareR  t
   triangularR   (   R6  R   R<  R;  R   t   Et   F(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  w  s    $!i   t   rtolg?i   (   R?   RC   RD   R]   RQ   R^   t   assert_allcloseR   R  R   R8  (   R9   R,  R6  RH   Rd   t	   py_output(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_randomsu  s    		c         C` s~   d   } d } |  j  | t j |  f  } | j |  } | |  } |  j | |  |  j t | t j f  d k  d  S(   Nc         S` s   t  j j d |  |  f  } t  j j |  |   } t  j j d d |  |  f  } t  j j d |  |  f  } t  j j d d d d |  |  f } t  j j d d d |  |  f  } d S(   NR  g        g      ?i   R  i   i   (   RQ   R4  R  R   R  R  R  R  (   R6  R   R<  R;  R   R  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    $!i   i    (	   R?   RC   RD   R]   R`   R   R  R   R8  (   R9   R,  R6  RH   Rd   R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_dead_randoms  s    		c         C` sJ   d   } d } t  j j |  } t  j |  } |  j | | | |  d  S(   Nc         S` ss   xl t  j d  D][ } xR t | | d | d | d  D]- } d | | <|  | d k r: d | | <q: q: Wq W| S(   Ni   i   i    (   RC   R   R   (   RG   t   is_positiveR   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    *
id   (   RQ   R4  t   randR2  R(  (   R9   R,  R   RG   R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_cfg  s
    		c         C` sQ  d   } d } t  j j |  } |  j | |  t  j j d d | j t  j  } |  j | |  d   } |  j    |  j |  Wd  QXd } t  j j d d | j t  j  } d   } |  j | |  d   } |  j | | j d   d
   } |  j | | j d   |  j	 t
 | t j d  d   d  d   f f  d k  d  S(   Nc         S` s   d } t  d   |  |  S(   Ni
   c         S` s   t  |  |  S(   N(   R>  (   R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   <lambda>  t    (   R   (   R   t   init_val(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   i
   R  c          S` s1   d   }  t  |  t j d d d d d g  d  S(   Nc         S` s   |  d S(   Ni   (    (   RG   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR    R  i   i   i   i   i   (   R   RQ   R   (   t   g(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    	i   c         S` s   t  j |  |  d k  S(   Ni   (   RQ   R   (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    c         S` s3   |  d  d   d f } t  j |  | d k d f  S(   Ni    i   i   (   RQ   R   (   R   R<  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   c         S` s9   |  d  d   d f } t  j |  | d k d d  f  S(   Ni    i   i   i   (   RQ   R   (   R   R<  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   (   i   i
   (   i   i
   (   RQ   R4  R5  R(  R  t   astypet   int32t   assertTypingErrorR$  R   R  RC   RA  (   R9   R,  R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_reduce  s$    	$	$			c      
   C` sP  d   } d   } d } t  j j |  } t  j j d d | j t  j  } t  j j | | f  } |  j | |  |  j | |  |  j | |  |  j | |  |  j | |  |  j | |  d } x} | | f D]o } |  j | t j	 f  }	 |  j
 t  & }
 |	 j t  j g  d t  j	  Wd  QX|  j | t |
 j   q Wd  S(   Nc         S` s
   |  j    S(   N(   R>  (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRu    s    c         S` s   t  j |   S(   N(   RQ   R>  (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRw    s    i   i
   R  sD   zero-size array to reduction operation minimum which has no identityRU  (   RQ   R4  R5  R  R  R  R(  R?   R   R8  RK  RX   R]   R   Rj   Rq   RM  (   R9   Ru  Rw  R6  R   R<  R;  Ro   t   implt   pcfunct   e(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_min  s$    		$%c      
   C` sP  d   } d   } d } t  j j |  } t  j j d d | j t  j  } t  j j | | f  } |  j | |  |  j | |  |  j | |  |  j | |  |  j | |  |  j | |  d } x} | | f D]o } |  j | t j	 f  }	 |  j
 t  & }
 |	 j t  j g  d t  j	  Wd  QX|  j | t |
 j   q Wd  S(   Nc         S` s
   |  j    S(   N(   R?  (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRu    s    c         S` s   t  j |   S(   N(   RQ   R?  (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRw    s    i   i
   R  sD   zero-size array to reduction operation maximum which has no identityRU  (   RQ   R4  R5  R  R  R  R(  R?   R   R8  RK  RX   R]   R   Rj   Rq   RM  (   R9   Ru  Rw  R6  R   R<  R;  Ro   R  R  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_max  s$    		$%c      
   C` s\  d   } d   } d } t  j d d d d d g  } t  j j d d	 | j t  j  } t  j j | | f  } |  j | |  |  j | |  |  j | |  |  j | |  |  j | |  |  j | |  d
 } x} | | f D]o } |  j | t	 j
 f  }	 |  j t  & }
 |	 j t  j g  d t  j
  Wd  QX|  j | t |
 j   q Wd  S(   Nc         S` s
   |  j    S(   N(   R   (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRu    s    c         S` s   t  j |   S(   N(   RQ   R   (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRw    s    i   g      ?g        g       @g      @i
   R  s*   attempt to get argmin of an empty sequenceRU  (   RQ   R   R4  R  R  R  R5  R(  R?   R   R8  RK  RX   R]   Rj   Rq   RM  (   R9   Ru  Rw  R6  R   R<  R;  Ro   R  R  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_argmin  s$    		$%c      
   C` s\  d   } d   } d } t  j d d d d d g  } t  j j d d	 | j t  j  } t  j j | | f  } |  j | |  |  j | |  |  j | |  |  j | |  |  j | |  |  j | |  d
 } x} | | f D]o } |  j | t	 j
 f  }	 |  j t  & }
 |	 j t  j g  d t  j
  Wd  QX|  j | t |
 j   q Wd  S(   Nc         S` s
   |  j    S(   N(   R=  (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRu  *  s    c         S` s   t  j |   S(   N(   RQ   R=  (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRw  -  s    i   g      ?g        g      @g       @i
   R  s*   attempt to get argmax of an empty sequenceRU  (   RQ   R   R4  R  R  R  R5  R(  R?   R   R8  RK  RX   R]   Rj   Rq   RM  (   R9   Ru  Rw  R6  R   R<  R;  Ro   R  R  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_argmax(  s$    		$%c         C` sB   d   } d } |  j  | |  |  j t | t j f  d  d  S(   Nc         S` s   t  j |   } | j   S(   N(   RQ   R0  R   (   R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  G  s    i   i    (   R(  R`   R  R   R9  (   R9   R,  R6  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_array_access1C  s    	c         C` sB   d   } d } |  j  | |  |  j t | t j f  d  d  S(   Nc         S` s   t  j |   } d } d }  x+ t j t |   D] } | | | 7} q1 Wx: t j t |   D]# } | |  k r_ |  | | 7}  q_ q_ W| |  S(   Ni    (   RQ   R0  RC   R   R
  (   R6  R   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  S  s    i   i    (   R(  R`   R  R   R9  (   R9   R,  R6  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_array_access2O  s    	c         C` sT   d   } d } |  j  t   } |  j | |  Wd  QX|  j d t | j   d  S(   Nc         S` sb   t  j |  t  j  } d } x@ t j t |   D]) } | | | 7} | d k r1 | } q1 q1 Wd  S(   Ni    i   (   RQ   R0  R8  RC   R   R
  (   R6  R   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  f  s    i   s    Overwrite of parallel loop index(   RK  RX   R(  Rj   Rq   RM  (   R9   R,  R6  RP  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_array_access3d  s
    	c         C` s  d   } d } d } t  j j | | f  } t  j j |  } |  j | | |  t | t j t j d d  t j t j d d  f  \ } } |  j t	 | j
  d k o d | j
 k  | j
 d } t }	 d  }
 x5 | j D]* } t | t j j  r t }	 | }
 q q W|  j |	  t } x |
 j j   D]x } xo | j D]d } t | t j  r@t | j t j  r@| j j d k r@t } |  j |
 j | j j k  q@q@Wq0W|  j |  d  S(	   Nc         S` s   t  j |  |  S(   N(   RQ   R   (   R   R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  x  s    i   i   i   R;  i   i    R  (   RQ   R4  R5  R(  R   R   RE  RA  R   R
  R   R   R\   R   RP   RC   R   R   R4   R  R  R   R  R  R  R   R  R   (   R9   R,  R6  t   dR   R  R   R   R   t   parfor_foundR   R  t   build_tuple_foundt   bl(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_array_access4s  s6    	$+'c         C` s,   d   } t  j d  } |  j | |  d  S(   Nc         S` s>   x3 t  j t |    D] } |  j j d  |  | <q W|  d S(   Ni    i   (   RC   R   R
  RU  Ra   (   R*  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i
   (   RQ   R0  R(  (   R9   R,  R*  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_dtype_type  s    	c         C` sB   d   } d } |  j  | |  |  j t | t j f  d  d  S(   Nc         S` sY   t  j |  d f  } d } x7 t j |   D]& } | | | d  d   f j   7} q+ W| S(   Ni   i    (   RQ   R0  RC   R   R   (   R6  R   R+  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s
    $i   i    (   R(  R`   R  R   R9  (   R9   R,  R6  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_array_access5  s    	c         C` s,   d   } t  j d  } |  j | |  d  S(   Nc         S` s1   x& t  d  D] } d |  d |  d <q W|  d S(   Ni
   i   i    (   R   (   t   outR   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   (   RQ   R0  R(  (   R9   R,  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_hoist_setitem  s    	c         C` sv   d   } d } d } |  j  | | |  |  j t | t j t j f  d  |  j t | t j t j f  d  d  S(   Nc         S` se   t  j |  } t  j |  | f  } t  j |   } x+ t d  D] } | t  j | |  } q@ W| S(   Ni   (   RQ   R0  R   R   (   R   R   R   R   R   R   R<  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   i   i   (   R(  R`   R  R   R9  R  (   R9   R,  R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_generate_fuse  s    		%c         C` sT   d   } t  j d t  j  } t  j d t  j  } d | d <|  j | | |  d  S(   Nc         S` s   t  j |  |  S(   N(   RQ   t   bitwise_and(   R   R<  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   i    i   (   RQ   R0  t   uint8R(  (   R9   R,  R   R<  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_ufunc_expr  s
    	
c         C` s,   d   } |  j  t | t j f  d  d  S(   Nc         S` s8   t  |  f  } x" t |   D] } | d | | <q W| S(   Ng       @(   t   unsafe_emptyR   (   R6  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   (   R`   R  R   R9  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_find_callname_intrinsic  s    	c         C` s   d   } |  j  | d  d  S(   Nc         S` sL   d } x t  |   D] } | d 7} q Wx t  |   D] } | d 7} q4 W| S(   Ni    i   i   (   R   (   R6  t   accR   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_reduction_var_reuse  s    		c         C` s   d   } |  j  | d  d  S(   Nc         S` s   d } | d | d } t  j | t  j  } t  j |  j |  } x! t j |   D] } | | 7} qU Wx! t j |   D] } | | 7} qy W| S(   Ni   i   i    i   (   i   i   (   RQ   R2  t   int_R%  R$  RC   R   (   R6  t   shpR  t   result1t   tmpR   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    id   (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt    test_two_d_array_reduction_reuse  s    	c         C` s   d   } |  j  | d  d  S(   Nc         S` sO   t  j d t  j  } x3 t j |   D]" } | t  j | g t  j  7} q% W| S(   Ni   (   RQ   R2  R  RC   R   R   (   R6  t   resultR   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s     id   (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_one_d_array_reduction
  s    	c         C` s   d   } |  j  | d  d  S(   Nc         S` sm   d } | d | d } t  j | t  j  } t  j |  j |  } x! t j |   D] } | | 7} qU W| S(   Ni   i   i    i   (   i   i   (   RQ   R2  R  R%  R$  RC   R   (   R6  R  R  R  R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    id   (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_two_d_array_reduction  s    	c         C` s   d   } |  j  | d  d  S(   Nc         S` sm   d	 } t  j | t  j  } t  j d d d d d d g  j |  } x! t j |   D] } | | 7} qU W| S(
   Ni   i   g      ?g       @g      @g      @g      @g      @(   i   i   (   RQ   R2  t   float32R   R$  RC   R   (   R6  R  R  R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  )  s    *id   (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt+   test_two_d_array_reduction_with_float_sizes%  s    	
c         C` s   d   } |  j  | d  d  S(   Nc         S` sZ   d } d t  j | t  j  } d t  j |  } x! t j |   D] } | | 9} qB W| S(   Ni   i   i   (   i   i   (   RQ   R0  R  t	   ones_likeRC   R   (   R6  R  R  R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  7  s    id   (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_two_d_array_reduction_prod5  s    	
c         C` s   d   } |  j  | d  d  S(   Nc         S` sR   d } t  j | t  j  } x0 t j |   D] } | t  j | t  j  7} q+ W| S(   Ni   i   i   (   i   i   i   (   RQ   R2  R  RC   R   R0  (   R6  R  R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  E  s
    id   (   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_three_d_array_reductionC  s    		c         C` s2   d   } d } t  j |  } |  j | |  d  S(   Nc         S` s   |  j    d S(   Ni   (   t   argsort(   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  S  s    i   (   RQ   R%  R(  (   R9   R,  R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_preparfor_canonicalize_kwsP  s    	c         C` se   d   } t  j d t  j d   } |  j | t j |  f  } |  j | j |  | |   d  S(   Nc         S` s   |  j  S(   N(   RU  (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  ]  s    i   s   datetime64[ns](   RQ   R  RU  R?   RC   RD   R`   R]   (   R9   R,  R   RH   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_preparfor_datetime64Z  s    	c         C` s)   d   } |  j  | t j j d   d  S(   Nc         S` su   |  j  d } d } x[ t |  D]M } d d d h } | j |  d } x | D] } | | 7} qO W| | 7} q  W| S(   Ni    i   i   i   (   R   R   R	  (   R   R6  R  R   t   RR  RG   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  f  s    i   (   R(  RQ   R4  R5  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt*   test_no_hoisting_with_member_function_calld  s    	c         C` s   d   } |  j  |  d S(   s    issue3671: X != 0 becomes an arrayexpr with operator.ne.
            That is turned into a parfor by devectorizing.  Make sure
            the return type of the devectorized operator.ne
            on integer types works properly.
        c          S` s"   t  j d d t  j }  |  d k S(   Ni
   RU  i    (   RQ   R2  R  (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  {  s    N(   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_array_compare_scalart  s    	c         C` sY   d   } t  j d d d d d d d d	 d
 d d d g  } d } |  j | | |  d  S(   Nc         S` s   t  j | | d f d t  j } |  d | !} | j }  |  d } | j d d  } | | } | | d  d   d  d   d f <| S(   Ni   RU  i    i(   RQ   R2  RA  R  R$  (   R*  R  t   result_matrixt   sub_at   zt   result_data(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    !	

g      ?g       @g      @g      @g      @g      @g      @g       @g      "@g      $@g      &@g      (@i   (   RQ   R   R(  (   R9   R,  R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_reshape_with_neg_one  s
    	
c         C` sY   d   } t  j d d d d d d d d	 d
 d d d g  } d } |  j | | |  d  S(   Nc         S` s   t  j | | d f d t  j } |  d | !} | j }  |  d } | j d d  } | | } | | d  d   d  d   d f <| S(   Ni   RU  i    i(   RQ   R2  RA  R  R$  (   R*  R  R  R  R  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    !	

g      ?g       @g      @g      @g      @g      @g      @g       @g      "@g      $@g      &@g      (@i   (   RQ   R   R(  (   R9   R,  R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_reshape_with_large_neg  s
    	
c         C` s   |  j  t  e } t d t  d    } t j d d d d d d d	 d
 d d d d g  } d } | | |  Wd  QXd } |  j | t | j   d  S(   NRI  c         S` s   t  j | | d f d t  j } |  d | !} | j }  |  d } | j d d  } | | } | | d  d   d  d   d f <| S(   Ni   RU  i    i(   RQ   R2  RA  R  R$  (   R*  R  t   rmR  R  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    !	

g      ?g       @g      @g      @g      @g      @g      @g       @g      "@g      $@g      &@g      (@i   s7   The reshape API may only include one negative argument.(	   RK  RX   R   R4   RQ   R   Rj   Rq   RM  (   R9   RN  R,  R*  R  Ro   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt"   test_reshape_with_too_many_neg_one  s    (Y   R   R   R8   R(  t   skip_unsupportedR#   R.  R&   R/  R1  R3  R:  R@  RB  RC  RH  t   unittestt   skipIft   _windows_py27t   _32bitRO  RQ  RR  RS  RT  RW  RX  RY  RZ  R[  R\  R]  R^  Rc  Rd  Re  R'   Rh  Ri  Rj  Rk  Rl  Rm  Rn  t   test_disabledRp  Rq  Rr  Rs  Rt  R|  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR#    s   		
					*'

t   TestParforsLeaksc           B` s/   e  Z d    Z e d    Z e d    Z RS(   c         O` s5   |  j  | |  \ } } |  j | | | | |  d  S(   N(   RJ   Rf   (   R9   RE   R:   RF   RI   RH   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR(    s    c         C` sG   t  d t  d    } t j d  j t j  } |  j | |  d  S(   NRI  c         S` s
   |  j    S(   N(   R   (   t   arr(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i
   (   R   R4   RQ   R%  R  RA  R(  (   R9   R,  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_reduction  s    c         C` sG   t  d t  d    } t j d  j t j  } |  j | |  d  S(   NRI  c         S` sR   d } d } x; t  |  j  D]* } | |  | 7} | d |  | d 7} q W| | S(   Ng        g      ?i   (   R   R  (   R  R*  R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i
   (   R   R4   RQ   R%  R  RA  R(  (   R9   R,  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_multiple_reduction_vars  s    (   R   R   R(  R  R  R  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR    s   	
t   TestPrangeBasec           B` s#   e  Z d    Z d   Z d   Z RS(   c         G` s   t  j |  |  d  S(   N(   R,   R8   (   R9   R:   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR8     s    c         C` s  | j  } t | j  } | d k r d | j k s9 t  t g  | j D] } | d k r^ | n d ^ qF  } t | j  } n | j j d  } g  } xR t	 |  D]D \ }	 }
 |
 j
 d k r |
 j | k r | j |
 j d  q q q W| j d  t |  } t |  d } t | j  } t |  t |  k sBt  x" | D] } | | } | | | <qIWt |  } | j g } t j d k r| j | j  n  | j | j | j | j | | j | | j | j | j | j | j | j | j g  t  j! |   } t  j" | t#    } | S(	   s   
        This function does the actual code augmentation to enable the explicit
        testing of `prange` calls in place of `range`.
        R   R   t   LOAD_GLOBALi   i   i    N(   i   i    ($   t   __code__t   listt   co_namesR\   Rr   RB   t   bytest   co_codeR  R"   t   opnameR{  RS   t   offsetR
  t	   bytearrayt   co_argcountt   syst   version_infot   co_kwonlyargcountt   extendt
   co_nlocalst   co_stacksizet   co_flagst	   co_constst   co_varnamest   co_filenamet   co_namet   co_firstlinenot	   co_lnotabt   co_freevarst   co_cellvarst   pytypest   CodeTypet   FunctionTypet   globals(   R9   RE   t   patch_instancet   pyfunc_codet   prange_namesRG   t   new_codet	   range_idxt   range_locationsRi   t   instrt
   prange_idxR   t   idxt   co_argst   prange_codet   pfunc(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   generate_prange_func  sR    	.
c         O` s#  | j  d d  } | j  d t  } | j  d t  } |  j | |  } t g  | D] } t j |  ^ qR  }	 |  j | |	  }
 t j	 d t
  & } t j d  |  j | |	  } Wd QX| r |  j | |	  n  | r|  j | |	  } t i | d 6|  } n  |  j | |
 | | |  | S(   s
  
        The `prange` tester
        This is a hack. It basically switches out range calls for prange.
        It does this by copying the live code object of a function
        containing 'range' then copying the .co_names and mutating it so
        that 'range' is replaced with 'prange'. It then creates a new code
        object containing the mutation and instantiates a function to contain
        it. At this point three results are created:
        1. The result of calling the original python function.
        2. The result of calling a njit compiled version of the original
            python function.
        3. The result of calling a njit(parallel=True) version of the mutated
           function containing `prange`.
        The three results are then compared and the `prange` based function's
        llvm_ir is inspected to ensure the scheduler code is present.

        Arguments:
         pyfunc - the python function to test
         args - data arguments to pass to the pyfunc under test

        Keyword Arguments:
         patch_instance - iterable containing which instances of `range` to
                          replace. If not present all instance of `range` are
                          replaced.
         scheduler_type - 'signed', 'unsigned' or None, default is None.
                           Supply in cases where the presence of a specific
                           scheduler is to be asserted.
         check_fastmath - if True then a check will be performed to ensure the
                          IR contains instructions labelled with 'fast'
         check_fastmath_result - if True then a check will be performed to
                                 ensure the result of running with fastmath
                                 on matches that of the pyfunc
         Remaining kwargs are passed to np.testing.assert_almost_equal


        Example:
            def foo():
                acc = 0
                for x in range(5):
                    for y in range(10):
                        acc +=1
                return acc

            # calling as
            prange_tester(foo)
            # will test code equivalent to
            # def foo():
            #     acc = 0
            #     for x in prange(5): # <- changed
            #         for y in prange(10): # <- changed
            #             acc +=1
            #     return acc

            # calling as
            prange_tester(foo, patch_instance=[1])
            # will test code equivalent to
            # def foo():
            #     acc = 0
            #     for x in range(5): # <- outer loop (0) unchanged
            #         for y in prange(10): # <- inner loop (1) changed
            #             acc +=1
            #     return acc

        R   RL   t   check_fastmath_resultt   recordt   alwaysNRM   (   R[   R\   R   R  RB   RC   RD   RA   t   warningst   catch_warningsR4   t   simplefilterR?   R   R@   R~   Rf   (   R9   RE   R:   RF   R   RL   R  R  RG   R=   RI   t   raised_warningsRH   t
   fastcpfunc(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   prange_tester"  s     A((   R   R   R8   R  R  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR    s   		At
   TestPrangec           B` sf  e  Z d  Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z	 e d    Z
 e d    Z e d	    Z e d
    Z e d    Z e e j d  d     Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e  d    Z! e d    Z" e d    Z# e d    Z$ e d     Z% e d!    Z& e d"    Z' e d#    Z( e d$    Z) e d%    Z* e d&    Z+ e d'    Z, e d(    Z- RS()   s    Tests Prange c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` s>   d }  t  j |   } x" t |   D] } d | | | <q" W| S(   Ni   g       @(   RQ   R2  R   (   R6  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s
    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange01  s    	c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` sI   d }  t  j |  d  } x) t d |   D] } d | | | d <q) W| S(   Ni   i   g       @(   RQ   R2  R   (   R6  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s
    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange02  s    	c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` s+   d }  x t  d  D] } |  d 7}  q W|  S(   Ni    i
   i   (   R   (   Rv  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange03  s    	c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` sY   d }  d } t  j d  } x7 t d  D]) } | |  k rG | | | <q( d | | <q( W| S(   Ni   i   i   i    (   RQ   R  R   (   R*  R  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange04  s    	
c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` sW   d }  t  j |  d t  j } d } x, t d |  d d  D] } | | | 7} q; W| S(   Ni   RU  i    i   (   RQ   R0  RA  R   (   R6  R   Rv  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange05  s    	c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` sS   d }  t  j |  d t  j } d } x( t d d d  D] } | | | 7} q7 W| S(   Ni   RU  i    i   (   RQ   R0  RA  R   (   R6  R   Rv  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange06  s    	c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` sP   d }  t  j |  d t  j } d } x% t |  d  D] } | | | 7} q4 W| S(   Ni   RU  i    i   (   RQ   R0  RA  R   (   R6  R   Rv  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange07  s    	c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` sg   d }  t  j |   } d } xE t t |   D]1 } x( t t |   D] } | | | 7} qG Wq. W| S(   Ni   i    (   RQ   R0  R   R
  (   R6  R   R  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange08  s    	c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` s[   d }  t  j |   } d } x9 t d  D]+ } x" t d  D] } | | | 7} q; Wq( W| S(   Ni   i    (   RQ   R0  R   (   R6  R   R  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange08_1  s    	c         C` s/   d   } |  j  | d d g d d d t d  S(   Nc          S` sH   d }  d } x5 t  |   D]' } x t  |   D] } | d 7} q, Wq W| S(   Ni   i    i   (   R   (   R6  R  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    R   i   RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange09  s    	c         C` s/   d   } |  j  | d d g d d d t d  S(   Nc          S` sX   d }  d } xE t  |   D]7 } d } x t  |   D] } | d 7} q2 W| | 7} q W| S(   Ni   i    i   (   R   (   R6  t   acc2R   t   acc1R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    R   i    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange10  s    	
s1   list append is not thread-safe yet (#2391, #2408)c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` s,   d }  g  t  |   D] } t j |  ^ q S(   Ni   (   R   RQ   t   sin(   R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange11  s    	c         C` s&   d   } |  j  | d d d t d  S(   Nc          S` sK   d }  d } t  j |  } x) t t |   D] } |  | | 7}  q/ W|  S(   Ni    i   (   RQ   R0  R   R
  (   R  R6  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange12  s    	c         C` s2   d   } |  j  | t j d  d d d t d  S(   Nc         S` s+   d } x t  |   D] } | d 7} q W| S(   Ni    i   (   R   (   R6  R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  &  s    i   RK   Rh   RL   (   R  RQ   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange13$  s    	c         C` s5   d   } |  j  | t j j d  d d d t d  S(   Nc         S` s9   d } x, t  t |    D] } | |  | d 7} q W| S(   Ni   i   (   R   R
  (   R   Rv  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  0  s    i   RK   Rh   RL   (   R  RQ   R4  R5  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange14.  s    	c         C` s)   d   } |  j  | d d d d t d  S(   Nc         S` s>   d } x1 t  |   D]# } t j d  } | | d 7} q W| S(   Ni    i   (   i   i   (   i    i    (   R   RQ   R0  (   R   R  R   RG   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  @  s
    i   RK   Rh   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange15<  s    	c         C` s)   d   } |  j  | d d d d t d  S(   Nc         S` s/   d } x" t  |  |   D] } | d 7} q W| S(   Ni    i   (   R   (   R   R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  L  s    i   RK   Rg   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange16J  s    	c         C` s)   d   } |  j  | d d d d t d  S(   Nc         S` sB   d } t  j |   } x& t |  |   D] } | | | 7} q& W| S(   Ni    (   RQ   R0  R   (   R   R  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  V  s
    i	   RK   Rg   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange17T  s    	c         C` s)   d   } |  j  | d d d d t d  S(   Nc         S` sj   d } t  j |   } xN t |  d  D]< } | | | 8} x% t d |   D] } | | | 7} qJ Wq& W| S(   Ni    i   i(   RQ   R0  R   (   R   R  R   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  a  s    i	   RK   Rg   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange18_  s    	c         C` s)   d   } |  j  | d d d d t d  S(   Nc         S` ss   d } |  d } t  j |  | f  } xG t |  |   D]5 } x, t | |  D] } | | | | f 7} qM Wq6 W| S(   Ni    i   (   RQ   R0  R   (   R   R  t   MR   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  n  s    
i	   RK   Rg   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange19l  s    	c         C` s)   d   } |  j  | d d d d t d  S(   Nc         S` sA   d } t  j |   } x% t d |   D] } | | | 7} q% W| S(   Ni    i(   RQ   R0  R   (   R   R  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  {  s
    i	   RK   Rg   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange20y  s    	c         C` s)   d   } |  j  | d d d d t d  S(   Nc         S` s.   d } x! t  d d  D] } | d 7} q W| S(   Ni    iii   (   R   (   R   R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i	   RK   Rg   RL   (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange21  s    	c         C` s,   d   } |  j  | d d d t d t d  S(   Nc          S` su   d }  d } t  j d  } xS t d d  D]B } | |  k rJ | | | <q+ | d k  rc d | | <q+ d | | <q+ W| S(	   Ni    i   i   ii   i   ii   (   RQ   R  R   (   R*  R  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    RK   Rg   RL   R  (   R  R4   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange22  s    	c      	   C` sK   d   } t  j d  d  d  d  } |  j | | d d d t d t d  S(   Nc         S` s+   x$ t  t |    D] } | |  | <q W|  S(   N(   R   R
  (   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i    i   RK   Rh   RL   R  (   RQ   R2  R  R4   (   R9   R,  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange23  s    	c      	   C` sK   d   } t  j d  d  d  d  } |  j | | d d d t d t d  S(   Nc         S` s/   x( t  t |   d  D] } | |  | <q W|  S(   Ni    (   R   R
  (   R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i    i   RK   Rg   RL   R  (   RQ   R2  R  R4   (   R9   R,  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange24  s    	c      	   C` sK   d   } t  j d  d  d  d  } |  j | | d d d t d t d  S(   Nc         S` s>   |  d  d  d  } x$ t  t |   D] } | | | <q& W|  S(   Ni   (   R   R
  (   R   R<  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i    i   RK   Rh   RL   R  (   RQ   R2  R  R4   (   R9   R,  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prange25  s    	c         C` s   d   } |  j  t   } |   Wd  QX|  j | d   } |  j | d  } |  j | d  } |  j  t   } | j   Wd  QX| j   } |  j | d t j	  d  S(   Nc          S` s>   d }  t  j |   } x" t |   D] } d | | | <q" W| S(   Ni    i   (   RQ   R2  R   (   R6  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s
    i    (    (    (
   RK  t   ZeroDivisionErrorR  R\   R?   R@   R]   R`   RQ   t   inf(   R9   R,  RP  R  t   pcrest   pfcresR  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_check_error_model  s    	c   
   	   C` s   d   } t  j d  j d d  } |  j | | d d d t d t |  j | d   } t t j	 |  g  } |  j
 | |  } |  j |  } xf | j   D]X \ } } xI | j   D]; }	 d	 |	 k r | |	 k r |  j |	 j d
  d  Pq q Wq Wd  S(   Nc         S` s2   x+ t  t |    D] } |  | } d | (q W|  S(   Ni   (   R   R
  (   R   R   R<  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    
i    i   i   RK   Rh   RL   R  t   definet   noaliasi   (   RQ   R2  R$  R  R4   R  R\   RB   RC   RD   R@   R   R   R   R`   R   (
   R9   R,  R   R  R=   Rm   R   RO   R  t   line(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_check_alias_analysis  s    	c         C` sT   d   } |  j  t   } |  j | d  Wd  QXd } |  j | t | j   d  S(   Nc         S` s1   d } x$ t  d |  d  D] } | d 7} q W| S(   Ni    i   (   R   (   R   R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i   s4   Only constant step size of 1 is supported for prange(   RK  t   NotImplementedErrorR  Rj   Rq   RM  (   R9   R,  RP  Ro   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt$   test_prange_raises_invalid_step_size  s
    	c         C` s  d   } |  j  | d d d t |  j | d   } |  j | d	  } |  j |  } d } d } t j | | | f  } t j d | | | f  } xt | j   D]f \ }	 }
 |
 j	   } x- t
 |  D] \ } } | j |  r Pq q W|  j | j | | d   q Wd  S(
   Nc          S` s5   d }  d } x" t  |   D] } | | d 7} q W| S(   Ni   i    g       @(   R   (   R6  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s
    RK   Rh   RL   s   %[A-Z]?.[0-9]+[.]?[i]?s)   \s+%s = fmul fast double %s, 5.000000e-01s   \s+%s = fadd fast double %s, %si   (    (   R  R4   R  R\   R@   R   R   t   compileR   R   R   R   R   (   R9   R,  R  Rm   R   t   _idt
   recipr_strt   reciprocal_instt	   fadd_instRp   t   kernelR   R   RG   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt    test_prange_fastmath_check_works  s"    		c         C` s5   d   } d } t  j j |  } |  j | |  d  S(   Nc   
      S` s   d } t  j d d d g  } | j d } |  j d } d } x t |  D]x } |  | } | | d d | d } t  j |  }	 | |	 t  j | |  t  j t  j t  j | |	    7} qK W| S(   Ng      ?g      g       @g      @i    i   (   RQ   R   R   R   R>  R   R   R   (
   R   R  t   pointsR   R6  t   expsR   t   pR  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  #  s    
Bi   (   RQ   R4  R5  R  (   R9   R,  R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_kde_example!  s    	c         C` s   d   } |  j  | d  d  S(   Nc         S` sN   t  j |  |  f  } | d } x" t |   D] } | d | | <q, W| j   S(   Ni    i   (   RQ   R2  R   R   (   R6  R  R*  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  7  s
    
i   (   R  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_alias15  s    	c         C` s   d   } |  j  | d  d  S(   Nc         S` se   t  j |  |  f  } xC t |   D]5 } | | } x" t |   D] } | | | | <q? Wq" W| j   S(   N(   RQ   R2  R   R   (   R6  R  R   R*  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  A  s    
i   (   R  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_alias2?  s    	c         C` s   d   } |  j  | d  d  S(   Nc         S` s   t  j |  |  |  f  } xh t |   D]Z } | | } xG t |   D]9 } | | } x& t |   D] } | | | | | <q_ WqB Wq% W| j   S(   N(   RQ   R2  R   R   (   R6  R  R   R*  R   t   cRO   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  L  s    

i   (   R  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_alias3J  s    		c         C` sK   d   } |  j  | d d  } | d } d } |  j | t | j   d  S(   Nc         S` s!   x t  |  D] } |  } q W| S(   N(   R   (   RG   R+  R   RO   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  Y  s    
i
   i   i    s   Variable k used in parallel loop may be written to simultaneously by multiple workers and may result in non-deterministic or unintended results.(   R  Rj   Rq   t   message(   R9   R,  R  t   warning_objt   expected_msg(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_race_1W  s
    	
c         C` s   d   } |  j  |  d S(   s   issue 3686: if a prange has something inside it that causes
            a nested parfor to be generated and both the inner and outer
            parfor use the same call variable defined outside the parfors
            then ensure that when that call variable is pushed into the
            parfor that the call variable isn't duplicated with the same
            name resulting in a redundant type lock.
        c          S` s   d }  t  j } x= t d  D]/ } | d  } |  | t  j d   d 7}  q Wx= t d  D]/ } | d  } |  | t  j d   d 7}  q\ W|  S(   Ni    i   g      ?i   (   RQ   t   negativeR   R2  (   R<  t   fR   t   this_matters(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  m  s    	!!N(   R  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt!   test_nested_parfor_push_call_varsd  s    		c         C` s   d   } |  j  | d  d  S(   Nc         S` sF   d } t  j } x0 t d  D]" } | d  } | | |   7} q W| S(   Ni    i   g      ?(   RQ   RS  R   (   R6  R<  RT  R   RU  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  |  s    	g      ?(   R  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt!   test_multiple_call_getattr_objectz  s    	c         C` s&  d   } t  j d d d t f d t f g } t  j d d d t f d t f g } t  j d d d t f d t f g } | j t  j  } | j t  j  } | j t  j  } t | |   } t t |  |   }	 t | d t }
 t |
 |   } |  j	 | |	  |  j	 | |  d  S(   Nc         S` s.   x' t  t |    D] } d |  j | <q W|  S(   Ng      @(   R   R
  RG   (   R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    i
   RU  RG   R+  RI  (
   RQ   R2  t   floatt   intt   viewt   recarrayR  R   R4   R`   (   R9   R,  t   X1t   X2t   X3R_  R`  t   v3t
   python_rest   njit_rest   pa_funct   pa_res(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt"   test_argument_alias_recarray_field  s    	'''c         ` s~   t  d        f d   } | d  } t  |  d  } t  | d t } | d  } |  j | |  |  j | |  d S(   s    issue3699: test that mutable variable to call in loop
            is not hoisted.  The call in test_impl forces a manual
            check here rather than using prange_tester.
        c         S` s)   |  d } |  d d } |  j  |  | S(   s    If the variable X is hoisted in the test_impl prange
                then subsequent list_check calls would return increasing
                values.
            ii   (   RS   (   R   t   retR*  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt
   list_check  s    
c         ` s0   x) t  |   D] } d g }   |  } q W| S(   Nid   (   R   (   R6  R   R   R*  (   Rf  (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    	i
   RI  N(   R   R4   R`   (   R9   R,  R`  Ra  Rb  Rc  (    (   Rf  s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_mutable_list_param  s    
(.   R   R   R   R  R  R  R  R  R  R  R  R  R  R   R#  R  t   skipR%  R&  R'  R(  R)  R*  R+  R,  R.  R/  R0  R1  R2  R3  R4  R  R9  R=  R?  RF  RJ  RK  RL  RN  RR  RV  RW  Rd  Rg  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR    sR   




t   TestParforsVectorizerc           B` sY   e  Z e Z d    Z e j d  Z e d    Z	 e d    Z
 e e d     Z RS(   c         O` s  | j  d t  } | j  d d  } | j  d d  } | j  d t  } i | d 6d d	 6t |  d
 6}	 g  }
 x0 |	 j   D]" \ } } |
 j t | |   q| W|
 d |
 d  |
 d  t g  | D] } t j	 |  ^ q  } |  j
 | d   } | t k r|  j | |  } n |  j | |  } |  j |  } | rt j d  } | j | j j    } |  j t |  d  |  j | d |  |  j | i  k  n  Wd  QXWd  QXWd  QX| S(   NR/   t   nthreadsi   t   cpu_names   skylake-avx512t
   assertionst   NUMBA_CPU_NAMER  t   NUMBA_CPU_FEATURESt   NUMBA_NUM_THREADSi    i   s%   call\s+\w+\*\s+@do_scheduling_(\w+)\((   R[   R   R4   Rq   R   RS   R$   RB   RC   RD   R  R\   R@   R?   R   R   R@  t   findallRk   Rl   t   assertGreaterEqualR
  R`   R   (   R9   R<   t   schedule_typeR:   RF   R/   Rj  Rk  Rl  t   env_optst	   overridesRO   R  RG   R=   t   pfunc_vectorizableRm   t   asmt   schedtyt   matches(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   get_gufunc_asm  s4    
  ((s   
\s+vsqrtpd\s+.*zmm.*
c         C` s=  d   } t  j d  } |  j | d | d t } |  j | d | d t } xr | j   D]d } |  j d | k  |  j d | k  |  j d | k  |  j t |  j j	 |   d k  q[ Wxs | j   D]e } |  j d | k  |  j d | k  |  j d	 | k  |  j d
 | k  |  j d | k  q Wd S(   s    This checks that if fastmath is set and the underlying hardware
        is suitable, and the function supplied is amenable to fastmath based
        vectorization, that the vectorizer actually runs.
        c         S` s@   t  |   } d } x' t |  D] } | t j |  7} q W| S(   Ni    (   R
  R   RQ   R   (   R   R6  R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   will_vectorize  s
    i
   Rh   R/   t   vaddpdt   vsqrtpdt   zmmi   t   vsqrtsdt   vaddsdN(
   RQ   R2  Ry  R4   R   R  R   R
  t   match_vsqrtpd_on_zmmRp  (   R9   Rz  R{  t   fast_asmt   slow_asmR  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_vectorizer_fastmath_asm  s"    
			)c         C` s   d   } d   } t  j d  } |  j | d | d t } |  j | d | d t } xM | j   D]? } |  j d | k  |  j d | k  |  j d	 | k  qd Wxr | j   D]d } |  j d | k  |  j d
 | k  |  j d	 | k  |  j t |  j j |   d k  q Wd S(   s    This checks that if fastmath is set and the underlying hardware
        is suitable, and the function supplied is amenable to fastmath based
        vectorization, that the vectorizer actually runs.
        c         S` sB   t  |   } x/ t | d  D] } t j |  |  |  | <q W|  S(   Ni    (   R
  R   RQ   R   (   R   R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   will_not_vectorize	  s    c         S` s>   t  |   } x+ t |  D] } t j |  |  |  | <q W|  S(   N(   R
  R   RQ   R   (   R   R6  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRz  "	  s    i
   Rg   R/   Rh   R|  R~  R}  t   vmovupdi   N(	   RQ   R2  Ry  R4   R  R   R
  R  Rp  (   R9   R  Rz  R{  t	   novec_asmt   vec_asmR  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt"   test_unsigned_refusal_to_vectorize	  s     				c         C` se  d   } d   } |  j  | d d t } |  j  | d d t } d   } x' | j   D] \ } } | |  } PqX Wx' | j   D] \ } } | |  }	 Pq Wd d l m }
 |  j t |  t |	   x t | |	  D] \ } } | | k r q q |
 d	   | |  } | j   } x@ | D]8 } | d d
 k r!|  j | | d | d !d  q!q!Wq Wd S(   s    This checks vectorization for signed vs unsigned variants of a
        trivial accumulator, the only meaningful difference should be the
        presence of signed vs. unsigned unpack instructions (for the
        induction var).
        c          S` s5   d }  d } x" t  |  d  D] } | | 7} q W| S(   Ni   g        i    (   R   (   R6  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   signed_variantK	  s
    c          S` s1   d }  d } x t  |   D] } | | 7} q W| S(   Ni   g        (   R   (   R6  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   unsigned_variantR	  s
    Rg   R/   Rh   c         S` s   g  } x |  j    D]w } | j   } | d k r | j d  pg | j d  pg | j d  pg d | k r | j t j d d |   q q W| S(   NR  t   .Ri   t   "R}   s   [	](   R   t   stript
   startswithRS   R   t   sub(   Rv  R  RG   t   spd(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   strip_instrs^	  s    #i    (   t   SequenceMatcherc         S` s
   |  d k S(   Ns   	(    (   RG   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR  |	  R  t   insertiit   uN(	   Ry  R4   R   t   difflibR  R`   R
  t   zipt   get_opcodes(   R9   R  R  t
   signed_asmt   unsigned_asmR  RO   R  t   signed_instrt   unsigned_instrt   smR*  R  Rv  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_signed_vs_unsigned_vec_asmA	  s.    
					(   R   R   R   R   Ry  R   R@  R  t
   linux_onlyR  R  R  R  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRi    s   	'+,t   TestParforsSlicec           B` sL  e  Z d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z	 e d    Z
 e d    Z e d	    Z e d
    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z RS(   c         O` s5   |  j  | |  \ } } |  j | | | | |  d  S(   N(   RJ   Rf   (   R9   RE   R:   RF   RI   RH   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR(  	  s    c         C` s&   d   } |  j  | t j d   d  S(   Nc         S` s0   |  j  \ } |  d | d !|  d | d !} | S(   Ni    i   i   (   R   (   R*  R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s     i
   (   R(  RQ   R0  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice1	  s    	c         C` s   d   } |  j  | t j d  d  |  j t  , } t d t  |  t j d  d  Wd  QX|  j d t | j	   d  S(   Nc         S` s,   |  j  \ } |  d | d !|  d | !} | S(   Ni    i   i   (   R   (   R*  R   R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    i
   i	   RI  s   do not match(
   R(  RQ   R0  RK  Rr   R   R4   Rj   Rq   RM  (   R9   R,  RP  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice2	  s
    	+c         C` s&   d   } |  j  | t j d   d  S(   Nc         S` sQ   |  j  \ } } |  d | d  d | d  f |  d |  d |  f } | S(   Ni    i   (   R   (   R*  R   R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    >i   i   (   i   i   (   R(  RQ   R0  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice3	  s    	c         C` s&   d   } |  j  | t j d   d  S(   Nc         S` sM   |  j  \ } } |  d  d   d | d  f |  d  d   d |  f } | S(   Ni    i   (   R   (   R*  R   R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    :i   i   (   i   i   (   R(  RQ   R0  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice4	  s    	c         C` s&   d   } |  j  | t j d   d  S(   Nc         S` sM   |  j  \ } } |  d | d  d  d   f |  d |  d  d   f } | S(   Ni    i   (   R   (   R*  R   R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    :i   i   (   i   i   (   R(  RQ   R0  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice5	  s    	c         C` s&   d   } |  j  | t j d   d  S(   Nc         S` s:   |  j    } |  d d  d   f | d  d   d f } | S(   Ni   (   t	   transpose(   R*  R  RM  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    *i   i   (   i   i   (   R(  RQ   R0  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice6	  s    	c         C` sy   d   } |  j  | t j d   |  j t  ) } t d t  |  t j d   Wd  QX|  j d t | j	   d  S(   Nc         S` s:   |  j    } |  d d  d   f | d d  d   f } | S(   Ni   (   R  (   R*  R  RM  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    *i   RI  i   s   do not match(   i   i   (   i   i   (
   R(  RQ   R0  RK  Rr   R   R4   Rj   Rq   RM  (   R9   R,  RP  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice7	  s
    	(c         C` s/   d   } |  j  | t j d  j d   d  S(   Nc         S` sQ   |  j  \ } } |  j   } |  d |  d |  f | d |  d |  f <| S(   Ni   (   R   R  (   R*  R   R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    2i	   i   (   i   i   (   R(  RQ   R%  R$  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice8	  s    	c         C` s/   d   } |  j  | t j d  j d   d  S(   Nc         S` sQ   |  j  \ } } |  j   } |  d  d   d |  f | d |  d |  f <| S(   Ni   (   R   R  (   R*  R   R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    2i   i   i   (   i   i   (   R(  RQ   R%  R$  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice9	  s    	c         C` s/   d   } |  j  | t j d  j d   d  S(   Nc         S` sE   |  j  \ } } |  j   } |  d d |  f | d d |  f <| S(   Ni   i   (   R   R  (   R*  R   R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    &i	   i   (   i   i   (   R(  RQ   R%  R$  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice10	  s    	c         C` s/   d   } |  j  | t j d  j d   d  S(   Nc         S` sZ   |  j  \ } } } |  j   } |  d  d   d d |  f | d  d   d d |  f <| S(   Ni   i   (   R   RT   (   R*  R   R6  R   R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    8i   i   (   i   i   i   (   R(  RQ   R%  R$  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice11	  s    	c         C` s/   d   } |  j  | t j d  j d   d  S(   Nc         S` sE   |  j  \ } } |  j   } |  d d  d  f | d d d  f <| S(   Ni    ii   i(   R   RT   (   R*  R   R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	  s    &i   i   i   (   i   i   (   R(  RQ   R%  R$  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice12	  s    	c         C` s/   d   } |  j  | t j d  j d   d  S(   Nc         S` sP   |  j  \ } } |  j   } d } |  d | | d  f | d d |  f <| S(   Nii    i   (   R   RT   (   R*  R   R6  R  RM  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  	
  s
    +i   i   i   (   i   i   (   R(  RQ   R%  R$  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice13
  s    	c         C` s/   d   } |  j  | t j d  j d   d  S(   Nc         S` sK   |  j  \ } } |  j   } d } |  d d d  f | d d  d  f <| S(   Nii    ii   i   (   R   RT   (   R*  R   R6  R  RM  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  
  s
    &i   i   i   (   i   i   (   R(  RQ   R%  R$  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice14
  s    	c         C` s/   d   } |  j  | t j d  j d   d  S(   Nc         S` sP   |  j  \ } } |  j   } d } |  d d d  f | d | d d   f <| S(   Nii    ii   i   (   R   RT   (   R*  R   R6  R  RM  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  
  s
    +i   i   i   (   i   i   (   R(  RQ   R%  R$  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice15
  s    	c         C` sh   d   } |  j  | t j d  t j d  d  t j t j t j f } |  j t | |  d  d  S(   Nc         S` s>   |  j  | j  k s t  d |  d | +d | d | d +|  | S(   Ni
   i   i    (   R   Rr   (   R*  R  R6  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  *
  s    i
   i   i   (	   R(  RQ   R0  R2  RC   RA  R8  R`   R  (   R9   R,  R:   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice16(
  s    	(c         C` s)   d   } |  j  | d t j d   d  S(   Nc         S` s*   t  j |   } t |  } | | | )| S(   N(   RQ   R2  R
  (   R   R   R<  R6  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  6
  s    i
   (   R(  RQ   R0  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice174
  s    	c         C` s   d   } |  j  |  d  S(   Nc          S` s6   t  j d  }  t  j d d  |  d d +|  d } | S(   Ni
   i    i   i   i   i   (   RQ   R2  R%  (   R*  R+  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  A
  s    
(   R(  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice18>
  s    	c         C` s&   d   } |  j  | t j d   d  S(   Nc         S` s   |  d c  d 7*|  S(   Ni    i   (    (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  L
  s    i
   (   R(  RQ   R0  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice19I
  s    	c         C` s    d   } |  j  | d t d  S(   Nc          S` s)   t  j d  }  |  d } t |  } | S(   Ni
   i   (   RQ   R0  R
  (   R*  RM  Rv  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  U
  s    
RN   (   R(  R   (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice20R
  s    	c         C` sD   d   } t  j j d  } t  j j d  } |  j | | |  d  S(   Nc         S` sJ   |  j  |  j d  }  | j  | j d  } |  | d  d  d  d   f k S(   Ni   i(   R$  R  (   t   x1t   x2(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  _
  s    i   i   (   RQ   R4  R  R(  (   R9   R,  R  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_slice21]
  s    	(   R   R   R(  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR  	  s,   						



	t   TestParforsOptionsc           B` s    e  Z d    Z e d    Z RS(   c         O` s5   |  j  | |  \ } } |  j | | | | |  d  S(   N(   RJ   Rf   (   R9   RE   R:   RF   RI   RH   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR(  j
  s    c         C` s`  d   } |  j  | t j d   t j f } |  j t | |  d  |  j t | | d t d  |  j t | | d t d t d  |  j t | | d t d t d t d	  |  j t | | d t d t d t d
 t d  |  j t | | d t d t d t d
 t d t d  |  j t | | d t d t d t d
 t d t d t d  d  S(   Nc         S` s   |  j  d } t j |  } t j g  t |  D] } | ^ q/  } |  | | | | *x* t |  D] } | | |  | | | <qc Wt d   | d  S(   Ni    c         S` s   |  | S(   N(    (   RG   R+  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR  w
  R  (   R   RQ   R0  R   R   R   R   (   R*  R6  R  R   RM  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  p
  s    (i
   i   t   fusioni   t   comprehensioni   t   setitemi   R   i   t	   reductioni   R  i    (   R(  RQ   R0  RC   RA  R`   R  R   (   R9   R,  R:   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_optionsn
  s"    		(   R   R   R(  R  R  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR  h
  s   	t   TestParforsBitMaskc           B` sk   e  Z d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z	 RS(   c         O` s5   |  j  | |  \ } } |  j | | | | |  d  S(   N(   RJ   Rf   (   R9   RE   R:   RF   RI   RH   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR(  
  s    c         C` s)   d   } |  j  | t j d  d  d  S(   Nc         S` s   |  | k } d |  | <|  S(   Ni    (    (   R*  R6  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  
  s    
i
   i   (   R(  RQ   R%  (   R9   R,  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_bitmask1
  s    	c         C` s;   d   } t  j d  } | d k } |  j | | |  d  S(   Nc         S` s   d |  | <|  S(   Ni    (    (   R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  
  s    
i
   i   (   RQ   R%  R(  (   R9   R,  R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_bitmask2
  s    	c         C` s;   d   } t  j d  } | d k } |  j | | |  d  S(   Nc         S` s   |  | |  | <|  S(   N(    (   R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  
  s    i
   i   (   RQ   R%  R(  (   R9   R,  R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_bitmask3
  s    	c         C` s;   d   } t  j d  } | d k } |  j | | |  d  S(   Nc         S` s   d |  | |  | <|  S(   Ni   (    (   R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  
  s    i
   i   (   RQ   R%  R(  (   R9   R,  R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_bitmask4
  s    	c         C` s;   d   } t  j d  } | d k } |  j | | |  d  S(   Nc         S` s   |  | |  | |  | <|  S(   N(    (   R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  
  s    i
   i   (   RQ   R%  R(  (   R9   R,  R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_bitmask5
  s    	c      	   C` s   d   } t  j d  } | d k } t  j t |   } |  j t   } |  j | | | |  Wd  QX|  j d t | j	   d  S(   Nc         S` s   | |  | <|  S(   N(    (   R*  R  RM  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  
  s    
i
   i   s   '@do_scheduling' not found(
   RQ   R%  R2  R   RK  Rr   R(  Rj   Rq   RM  (   R9   R,  R*  R  RM  RP  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_bitmask6
  s    	(
   R   R   R(  R  R  R  R  R  R  R  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR  
  s   		



t   TestParforsMiscc           B` sA   e  Z d  Z e Z e d    Z e d    Z e d    Z RS(   s?   
    Tests miscellaneous parts of ParallelAccelerator use.
    c         C` s   d   } t  d t d t  |  } t j d t   } t j d  |   Wd  QX|  j t |  d  g  | j j   D] } | j	 j
 ^ qy } |  j | t g  d  S(   Nc          S` s=   t  j d  }  x' t |  j  D] } |  | c | 7<q W|  S(   Nid   (   RQ   R0  R   R  (   R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyRE   
  s    RI  t   cacheR  R  i    (   R   R4   R  R  R  R`   R
  t	   overloadsR  Rk   t   has_dynamic_globalsR   (   R9   RE   RI   R  Rm   R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_no_warn_if_cache_set
  s    	%c         C` sh   d   } |  j  | d  } t    } | j   Wd  QXx* | j   j   D] } |  j d |  qJ Wd  S(   Nc          S` sN   t  j d  }  t  j d d  |  d d +t d |  d  t d |  d  |  S(   Ni
   i    i   i   i   s   a[3]:i   (   RQ   R2  R%  t   print(   R*  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR  
  s
    s	   a[3]: 2.0(    (   R?   R	   R]   t   getvalueR   R`   (   R9   R  Rm   t   stdoutR<  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt+   test_statement_reordering_respects_aliasing
  s    	c         C` s   d   } t  j t  j d g  } t d t  |  } t j j } z/ t t j _ t  j j	 | |  | |   Wd  | t j _ Xd  S(   Nc         S` s   t  j |   S(   N(   RQ   t   isinf(   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    g        RI  (
   RQ   R   R6  R   R4   RC   R   t   sequential_parfor_loweringR^   t   assert_array_equal(   R9   R,  R   RI   t   old_seq_flag(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_parfor_ufunc_typing  s    	#(	   R   R   R   R   R   R  R  R  R  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR  
  s
   t   TestParforsDiagnosticsc           B` sz   e  Z d    Z d   Z d   Z d d d d d d  Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z RS(   c         O` s5   |  j  | |  \ } } |  j | | | | |  d  S(   N(   RJ   Rf   (   R9   RE   R:   RF   RI   RH   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR(    s    c         C` s2   |  j  |  } |  j  |  } |  j | |  d  S(   N(   t   _fusion_equivalentR`   (   R9   t   gott   expectedR*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   assert_fusion_equivalence  s    c         C` sh   t  t  } t | j    } xC t | j    D]/ } g  | | D] } | | ^ qB | | | <q1 W| S(   N(   R   R  R>  t   keyst   sorted(   R9   t   thingt   newt   min_keyRO   RG   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR     s
    -c         C` sE  | d  k	 r% |  j | | j    n  | d  k	 rG |  j | | j  n  | d  k	 ri |  j | | j  n  | d  k	 r | j j   } xR | D]G } x> | D] }	 |	 d | k r Pq q Wd | | f }
 t |
   q Wn  | d  k	 r
| j	   } |  j | t
 |   n  t   , x$ t d d  D] } | j |  q$WWd  QXd  S(   Ni    s(   Replacement for %s was not found. Had %si   i   (   R\   R`   t   count_parforsR  t   fusion_infot   nested_fusion_infoR   R  Rr   t   hoisted_allocationsR
  R	   R   t   dump(   R9   R   t   parfors_countR  R  R   R  t   replRG   t   replacedRo   t   hoisted_allocs(    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   assert_diagnostics.  s*    	
c         C` s_   d   } |  j  |  |  j | d	  } | j d } |  j | d d d i d d g d 6d  S(
   Nc          S` s,   d }  t  j |   } t  j |   } | | S(   Ni
   (   RQ   R0  R2  (   R6  R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  L  s    t   parfor_diagnosticsR  i   R  i   i   i   (    (   R(  R?   t   metadataR  (   R9   R,  RH   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_array_exprK  s    	c         C` sL   d   } |  j  |  |  j | d  } | j d } |  j | d d d  S(   Nc          S` s>   d }  t  j |   } x" t |   D] } | d | | <q" W| S(   Ni
   (   RQ   R  R   (   R6  R*  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  Y  s
    R  R  i   (    (   R(  R?   R  R  (   R9   R,  RH   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_prangeX  s
    	c         C` s\   d   } |  j  |  |  j | d  } | j d } |  j | d d d i d g d 6d  S(   Nc          S` se   d }  t  j |  |  f  } xC t |   D]5 } x, t |   D] } | d | | | | f <q; Wq( W| S(   Ni
   (   RQ   R  R   (   R6  R*  R   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  f  s     R  R  i   R  i   (    (   R(  R?   R  R  (   R9   R,  RH   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_nested_prangee  s    	c      	   C` se   d   } |  j  |  |  j | d  } | j d } |  j | d d d i d g d 6d d g d  S(   Nc          S` s(   d }  t  j |   } t  j |  } | S(   Ni
   (   RQ   R0  R   (   R6  R*  R  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,  u  s    R  R  i   R  i   i   R   R   R  (    (   R   R  (   R(  R?   R  R  (   R9   R,  RH   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_function_replacementt  s    	c         C` sL   d   } |  j  |  |  j | d  } | j d } |  j | d d d  S(   Nc          S` sH   d }  t  j |  d  } d } x" t |   D] } | | | 7} q, W| S(   Ni
   i   i    (   RQ   R0  R   (   R6  R*  R  R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    R  R  i   (    (   R(  R?   R  R  (   R9   R,  RH   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR    s
    	c         C` sL   d   } |  j  |  |  j | d  } | j d } |  j | d d d  S(   Nc          S` s    d }  t  j |   } d | (| S(   Ni
   i   (   RQ   R0  (   R6  R*  (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    R  R  i   (    (   R(  R?   R  R  (   R9   R,  RH   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_setitem  s
    	c         C` sL   d   } |  j  |  |  j | d  } | j d } |  j | d d d  S(   Nc          S` sn   d }  d } d } xU t  |   D]G } t j | f  } x t |  D] } | | | <qD W| | d 7} q W| S(   Ni
   i   i    i(   R   RQ   R2  R   (   R6  R   R  R   t   tempR   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR,    s    R  R  i   (    (   R(  R?   R  R  (   R9   R,  RH   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   test_allocation_hoisting  s
    	N(   R   R   R(  R  R  R\   R  R  R  R  R  R  R  R  (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyR    s   									t   __main__(l   t
   __future__R    R   R   t   mathR   RV   R   R  t   platformR   R  R  t	   functoolsR   R  RQ   t   numpy.randomR   Ro  t   collectionsR   RC   R   R  t   supportR   R	   R
   R   R   R   R   R   R   R   t   numba.targetsR   t   numba.targets.registryR   R   t   numba.annotationsR   t   numba.ir_utilsR   R   R   R   R   R   R   R   t   numba.unsafe.ndarrayR   R  t   numba.compilerR    R!   t   numba.bytecodeR"   R#   R$   R%   t   matmul_usecaseR&   t   test_linalgR'   R  R  R  t   maxsizeR  R  R  R4   R  t   _lnx_reasonR  t   machinet   x86_onlyR,   R   R   R   R   R  R  R  R  R  R  R\   R  R  t   objectR   R#  R  R  R  Ri  R  R  R  R  R  R   t   main(    (    (    s7   lib/python2.7/site-packages/numba/tests/test_parfors.pyt   <module>   s   "4$				7								     ;*F<