ó
\K]c        !   @` s~
  d  Z  d d l m Z m Z m 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 m Z m Z d d l m Z m Z m Z d d l m Z d d l m Z m Z m Z e ƒ  Z e j Z e j d	 ƒ Z e j d
 ƒ Z d „  Z e j ƒ  Z  d Z! e j" e e! ƒ Z# e j$ e e j% e e! ƒ e e  e g ƒ Z& e j' e& ƒ Z( d „  Z) d „  Z* d „  Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 d „  Z2 d „  Z3 d „  Z4 e d e j5 ƒ d „  ƒ Z6 e d e j5 ƒ d „  ƒ Z6 d „  Z7 e d ƒ d „  ƒ Z8 e d  ƒ e d! ƒ e d" ƒ e d# ƒ d$ „  ƒ ƒ ƒ ƒ Z8 e d% e j9 e j9 ƒ e d& e j9 e j9 ƒ d' „  ƒ ƒ Z: e d( ƒ e d) ƒ e d) e j9 ƒ e d) e j9 e j9 ƒ d* „  ƒ ƒ ƒ ƒ Z; d+ „  Z< d, „  Z= e d- e j> ƒ d. „  ƒ Z? d/ „  Z@ e d0 e j> ƒ d1 „  ƒ ZA e d0 e j> e j> ƒ d2 „  ƒ ZB e d0 e j> e j> e j> ƒ d3 „  ƒ ZC e d4 e j> e j> ƒ d5 „  ƒ ZD e d6 e j> ƒ d7 „  ƒ ZE e d6 e j> e j> ƒ d8 „  ƒ ZB e d9 e j9 e j9 ƒ d: „  ƒ ZF e d; e j9 e j9 ƒ d< „  ƒ ZF d= „  ZF e d> e j9 e j9 ƒ d? „  ƒ ZG e d> e j9 e j9 e j9 ƒ d@ „  ƒ ZH e dA e j9 e j9 e j9 ƒ dB „  ƒ ZH dC „  ZI e dD e j9 e j9 ƒ dE „  ƒ ZJ e dF e j9 ƒ e dG e j9 ƒ e dG e j9 e j9 ƒ dH „  ƒ ƒ ƒ ZJ dI „  ZK e dJ e j9 e j9 ƒ dK „  ƒ ZL e dL e j9 e j9 ƒ dM „  ƒ ZL dN „  ZM e dO e j9 ƒ dP „  ƒ ZN e dQ e j9 ƒ dR „  ƒ ZO e dS ƒ e dQ ƒ dT „  ƒ ƒ ZO e dU ƒ e dU e j9 ƒ e dU e j9 e j9 ƒ dV „  ƒ ƒ ƒ ZP e dW e j9 e j9 ƒ dX „  ƒ ZQ dY „  ZR e dZ e j9 ƒ d[ „  ƒ ZS e d\ e j9 ƒ d] „  ƒ ZT e d^ e j9 e j9 ƒ d_ „  ƒ ZU e d` e j9 ƒ da „  ƒ ZV e db e j9 e j9 ƒ dc „  ƒ ZW e dd e j9 e j9 ƒ de „  ƒ ZW df „  ZX e dg e j> e j9 ƒ dh „  ƒ ZY e di e j9 ƒ dj „  ƒ ZZ e dk e j9 e j9 ƒ dl „  ƒ Z[ e dm e j9 ƒ dn „  ƒ Z\ e do e j9 e j9 ƒ dp „  ƒ Z] e dq e j> e j> e j> ƒ dr „  ƒ Z^ e ds ƒ e ds e j9 ƒ e ds e j9 e j9 ƒ dt „  ƒ ƒ ƒ Z_ e du ƒ e du e j9 ƒ e du e j9 e j9 ƒ dv „  ƒ ƒ ƒ Z` e dw e j9 ƒ dx „  ƒ Za e dy e jb e j9 ƒ dz „  ƒ Zc e d{ ƒ e d{ e j9 ƒ d| „  ƒ ƒ Zd e d} e j9 ƒ d~ „  ƒ Ze e d ƒ e d e j9 ƒ d€ „  ƒ ƒ Zf e d ƒ d‚ „  ƒ Zg e dƒ e j9 ƒ d„ „  ƒ Zh e d… e j9 e j9 ƒ d† „  ƒ Zi e d‡ e j9 ƒ dˆ „  ƒ Zj d‰ „  Zk e e jl ƒ dŠ „  ƒ Zm e e	 j jl ƒ d‹ „  ƒ Zm e e	 j jn ƒ dŒ „  ƒ Zo x™ d– d— d˜ d™ dš d› dœ d dž dŸ d  d¡ d¢ d£ d¤ d¥ d¦ d§ d¨ d© dª d« d¬ d­ d® d¯ d° d± d² d³ d´ dµ g  D]1 \ Zp Zq e ep e jr f eq Œ ep d‘ „ ƒ Zs qÐ	We e	 j jt ƒ d’ „  ƒ Zt e e	 j ju ƒ d“ „  ƒ Zu e e	 j jv ƒ d ex d” „ ƒ Zv e e	 j jy ƒ d d• „ ƒ Zy d S(¶   s6   
Implement the random and np.random module functions.
i    (   t   print_functiont   absolute_importt   divisionN(   t   ir(   t   overloadt   register_jitable(   t   Registryt   impl_ret_untrackedt   impl_ret_new_ref(   t	   signature(   t
   _helperlibt   cgutilst   typesi    i@   c         C` s   t  j t |  ƒ S(   N(   R   t   Constantt   int32_t(   t   x(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt	   const_int   s    ip  c         C` ss   | d k s t  ‚ d | } t j t d ƒ } | j j | | ƒ } | j j d ƒ | j j d ƒ | j | d ƒ S(	   s½   
    Get a pointer to the given thread-local random state
    (depending on *name*: "py" or "np").
    If the state isn't initialized, it is lazily initialized with
    system entropy.
    t   pyt   nps   numba_get_%s_random_statet   readnonet   nounwind(   R   R   (    (    (	   t   AssertionErrorR   t   FunctionTypet   rnd_state_ptr_tt   modulet   get_or_insert_functiont
   attributest   addt   call(   t   contextt   buildert   namet	   func_namet   fntyt   fn(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_state_ptr2   s    
c         C` s   t  |  | d ƒ S(   s@   
    Get a pointer to the thread-local Python random state.
    R   (   R#   (   R   R   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_py_state_ptrC   s    c         C` s   t  |  | d ƒ S(   s?   
    Get a pointer to the thread-local Numpy random state.
    R   (   R#   (   R   R   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_np_state_ptrI   s    c         C` s   t  j |  | d d ƒ S(   Ni    (   R   t   gep_inbounds(   R   t	   state_ptr(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_index_ptrQ   s    c         C` s   t  j |  | d d ƒ S(   Ni    i   (   R   R&   (   R   R'   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_array_ptrT   s    c         C` s   t  j |  | d d ƒ S(   Ni    i   (   R   R&   (   R   R'   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_has_gauss_ptrW   s    c         C` s   t  j |  | d d ƒ S(   Ni    i   (   R   R&   (   R   R'   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_gauss_ptrZ   s    c         C` sK   t  j t  j ƒ  t f ƒ } |  j j j | d ƒ } | j d j d ƒ | S(   s<   
    Get the internal function to shuffle the MT taste.
    t   numba_rnd_shufflei    t	   nocapture(	   R   R   t   VoidTypeR   t   functionR   R   t   argst   add_attribute(   R   R!   R"   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_rnd_shuffle]   s    c   	      C` s   t  | | ƒ } | j | ƒ } | j d | t ƒ } t j | | ƒ : t | ƒ } | j | | f ƒ | j t	 d ƒ | ƒ Wd QX| j | ƒ } t
 | | ƒ } | j t j | | d | ƒ ƒ } | j | t	 d ƒ ƒ } | j | | ƒ | j | | j | t	 d ƒ ƒ ƒ } | j | | j | j | t	 d ƒ ƒ t	 d ƒ ƒ ƒ } | j | | j | j | t	 d ƒ ƒ t	 d	 ƒ ƒ ƒ } | j | | j | t	 d
 ƒ ƒ ƒ } | S(   sB   
    Get the next int32 generated by the PRNG at *state_ptr*.
    s   >=i    Ni   i   i   I€V,    i   I  Æï    i   (   R(   t   loadt   icmp_unsignedt   N_constR   t   if_unlikelyR2   R   t   storeR   R)   R&   R   t   xort   lshrt   and_t   shl(	   R   R   R'   t   idxptrt   idxt   need_reshuffleR"   t	   array_ptrt   y(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_next_int32g   s&    !$$$$c         C` s¬   | j  t |  | | ƒ t d ƒ ƒ } | j  t |  | | ƒ t d ƒ ƒ } | j | t ƒ } | j | t ƒ } | j | j | | j | t j	 t d ƒ ƒ ƒ t j	 t d ƒ ƒ S(   sC   
    Get the next double generated by the PRNG at *state_ptr*.
    i   i   g      Ag      @C(
   R9   RA   R   t   uitofpt   doublet   fdivt   faddt   fmulR   R   (   R   R   R'   t   at   b(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_next_double€   s    $$'c         ` sv  t  j | j d ƒ ‰ ‡  ‡ ‡ ‡ ‡ f d †  } t j ˆ  t  j t d ƒ ƒ } ˆ  j d | ˆ ƒ } ˆ  j | ƒ õ \ } }	 | - | | ƒ }
 ˆ  j ˆ  j	 |
 t ƒ | ƒ Wd QX|	 « ˆ rØ | ˆ  j
 | ˆ ƒ ƒ } n  t ˆ ˆ  ˆ ƒ }
 ˆ s| ˆ  j
 | ˆ ƒ ƒ } n  ˆ  j ˆ  j	 |
 t ƒ ˆ  j ˆ  j	 | t ƒ t  j t d ƒ ƒ ƒ } ˆ  j | | ƒ Wd QXWd QXˆ  j | ƒ S(   s2   
    Get the next integer with width *nbits*.
    i    c         ` sœ   ˆ  j  ˆ |  ƒ } t ˆ ˆ  ˆ ƒ } ˆ ry ˆ  j t j | j d ƒ ƒ } ˆ  j | ˆ  j | | j ƒ ƒ } ˆ  j | | ƒ Sˆ  j | ˆ  j | | j ƒ ƒ Sd  S(   Ni    (	   t   subRA   t   not_R   R   t   typeR9   t   zextR:   (   t   nbitst   shiftR@   t   mask(   R   t   c32R   t   is_numpyR'   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_shifted_int”   s    !i    s   <=N(   R   R   RL   R   t   alloca_once_valuet   int64_tR4   t   if_elseR7   RM   RJ   RA   R   R;   R3   (   R   R   R'   RN   RR   RS   t   rett   is_32bt   ifsmallt   iflarget   lowt   hight   total(    (   R   RQ   R   RR   R'   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_next_int   s&    "-c         ` so   | j  } |  j | ƒ ‰  t | ƒ t ‡  f d †  | t | ƒ Dƒ ƒ } t | f t | ƒ d Œ  } | | f S(   sŽ   
    Assuming a homogeneous signature (same type for result and all arguments),
    fill in the *defaults* if missing from the arguments.
    c         3` s!   |  ] } t  j ˆ  | ƒ Vq d  S(   N(   R   R   (   t   .0t   d(   t   llty(    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pys	   <genexpr>¿   s    i   (   t   return_typet   get_data_typet   tuplet   lenR	   (   R   R   t   sigR0   t   defaultst   ty(    (   Ra   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   _fill_defaults¸   s
    	0s   random.seedc      	   C` s:   t  |  | | | t |  | d ƒ ƒ } t |  | | j | ƒ S(   NR   (   t
   _seed_implR#   R   Rb   (   R   R   Rf   R0   t   res(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt	   seed_implÄ   s    s   np.random.seedc      	   C` s:   t  |  | | | t |  | d ƒ ƒ } t |  | | j | ƒ S(   NR   (   Rj   R#   R   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRl   Ê   s    c         C` sh   | \ } t  j t  j ƒ  t t f ƒ } | j j j | d ƒ } | j | | | f ƒ |  j	 t
 j d  ƒ S(   Nt   numba_rnd_init(   R   R   R.   R   R   R/   R   R   R   t   get_constantR   t   nonet   None(   R   R   Rf   R0   R'   t
   seed_valueR!   R"   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRj   Ð   s
    	s   random.randomc         C` s:   t  |  | d ƒ } t |  | | ƒ } t |  | | j | ƒ S(   NR   (   R#   RI   R   Rb   (   R   R   Rf   R0   R'   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   random_impl×   s    s   np.random.randoms   np.random.random_samples   np.random.samples   np.random.ranfc         C` s:   t  |  | d ƒ } t |  | | ƒ } t |  | | j | ƒ S(   NR   (   R#   RI   R   Rb   (   R   R   Rf   R0   R'   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRr   Ý   s    s   random.gausss   random.normalvariatec         C` s.   t  |  | | | d ƒ } t |  | | j | ƒ S(   NR   (   t   _gauss_implR   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt
   gauss_implç   s    s   np.random.standard_normals   np.random.normalc         C` sL   t  |  | | | d ƒ \ } } t |  | | | d ƒ } t |  | | j | ƒ S(   Ng        g      ð?R   (   g        g      ð?(   Ri   Rs   R   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   np_gauss_implî   s    c         ` s   ‡  f d †  } | S(   Nc          ` s   xZ t  r\ d ˆ  ƒ  d }  d ˆ  ƒ  d } |  |  | | } | d k  r | d k r Pq q Wt j d t j | ƒ | ƒ } | |  | | f S(   sG   
        Compute a pair of numbers on the normal distribution.
        g       @g      ð?g        g       À(   t   Truet   matht   sqrtt   log(   t   x1t   x2t   r2t   f(   t   _random(    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   compute_gauss_pairù   s    	 (    (   R~   R   (    (   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   _gauss_pair_implø   s    c         C` sµ  | j  } |  j | ƒ } t |  | | ƒ } i t j d 6t j j d 6| } t j | | d d ƒ}	 t | | ƒ }
 t | | ƒ } t j	 | | j
 | ƒ ƒ } | j | ƒ × \ } } | 4 | j | j
 |
 ƒ |	 ƒ | j t d ƒ | ƒ Wd  QX| † |  j | t | ƒ t t j | d ƒ ƒ d ƒ } t j | | d ƒ \ } } | j | |
 ƒ | j | |	 ƒ | j t d ƒ | ƒ Wd  QXWd  QX| \ } } | j | | j | | j
 |	 ƒ ƒ ƒ S(	   NR   R   R   t   resulti    i   i   (    (   Rb   Rc   R#   t   randomR   R   t   alloca_onceR+   R*   t   is_trueR3   RV   R7   R   t   compile_internalR€   R	   R   t   UniTuplet   unpack_tupleRE   RF   (   R   R   Rf   R0   t   stateRh   Ra   R'   R~   RW   t	   gauss_ptrt   has_gauss_ptrt	   has_gausst   thent	   otherwiset   pairt   firstt   secondt   mut   sigma(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRs   	  s2    				"	s   random.getrandbitsc   
      C` sÃ   | \ } | j  d | t d ƒ ƒ } | j  d | t d ƒ ƒ } t j | | j | | ƒ ƒ $ d } |  j j | t | f ƒ Wd  QXt |  | d ƒ } t	 |  | | | t
 ƒ }	 t |  | | j |	 ƒ S(   Ns   >=iA   s   ==i    s    getrandbits() limited to 64 bitsR   (   R4   R   R   R6   t   or_t	   call_convt   return_user_exct   OverflowErrorR#   R^   t   FalseR   Rb   (
   R   R   Rf   R0   RN   t	   too_larget	   too_smallt   msgR'   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   getrandbits_impl-  s    	c         ` s   t  ˆ ˆ  ˆ ƒ ‰ | j ‰ t j ˆ d ƒ } t j ˆ d ƒ } t j ˆ  ˆ d d ƒ} ˆ  j ˆ  j | | ƒ | ƒ ˆ  j ˆ  j	 d | | ƒ ƒ N ˆ  j
 ˆ  j
 ˆ  j | ƒ | ƒ | ƒ }	 ˆ  j |	 | ƒ ‰ ˆ  j ˆ | ƒ Wd  QXˆ  j ˆ  j	 d | | ƒ ƒ N ˆ  j ˆ  j
 ˆ  j | ƒ | ƒ | ƒ }	 ˆ  j |	 | ƒ ‰ ˆ  j ˆ | ƒ Wd  QXˆ  j | ƒ ‰ t j ˆ  ˆ  j	 d ˆ | ƒ ƒ $ d }
 ˆ j j ˆ  t |
 f ƒ Wd  QXt j ˆ ˆ t j j g ƒ } ˆ  j j j | d	 ˆ ƒ } ˆ d
 k rýˆ  j ˆ | ƒ n ˆ } ˆ  j ˆ  j | | t j g ƒ t ƒ ‰ ˆ  j t j t ˆ j ƒ ˆ ƒ ‰ t j ˆ  ˆ d d ƒ‰ ‡  ‡ ‡ ‡ ‡ ‡ ‡ ‡ f d †  } ˆ d
 k rôˆ  j ˆ  j	 d ˆ | ƒ ƒ > \ } } |  ˆ  j | ˆ ƒ Wd  QX|  | ƒ  Wd  QXWd  QXn | ƒ  ˆ  j
 | ˆ  j ˆ  j ˆ ƒ | ƒ ƒ S(   Ni    i   R   t   nt   <t   >s   <=s   empty range for randrange()s   llvm.ctlz.%sR   t   rc          ` s±   ˆ  j  d ƒ }  ˆ  j  d ƒ } ˆ  j |  ƒ ˆ  j |  ƒ t ˆ ˆ  ˆ ˆ ˆ d k ƒ } ˆ  j | ˆ ƒ } ˆ  j d | ˆ ƒ } ˆ  j | |  | ƒ ˆ  j | ƒ ˆ  j | ˆ ƒ d  S(   Nt   whiles	   while.endR   s   >=(   t   append_basic_blockt   brancht   position_at_endR^   t   trunct   icmp_signedt   cbranchR7   (   t   bbwhilet   bbendRŸ   R˜   (   R   R   Rœ   RN   t   rptrRˆ   R'   Rh   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_numd  s    s   ==(   R#   RL   R   R   R   Rƒ   R7   RJ   t   if_thenR¥   R   R3   t   sdivR6   R”   R•   t
   ValueErrorR   t   true_bitR/   R   R   R¤   R   R   t   widthRV   t   mul(   R   R   t   startt   stopt   stepRˆ   t   zerot   onet   nptrt   wRš   R!   R"   t   nm1Rª   t   is_onet
   is_not_one(    (   R   R   Rœ   RN   R©   Rˆ   R'   Rh   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   _randrange_impl:  sB    	''"	$'!$'s   random.randrangec         C` sd   | \ } t  j | j d ƒ } t  j | j d ƒ } t |  | | | | d ƒ } t |  | | j | ƒ S(   Ni    i   R   (   R   R   RL   R»   R   Rb   (   R   R   Rf   R0   R²   R±   R³   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   randrange_impl_1  s
    	c         C` sR   | \ } } t  j | j d ƒ } t |  | | | | d ƒ } t |  | | j | ƒ S(   Ni   R   (   R   R   RL   R»   R   Rb   (   R   R   Rf   R0   R±   R²   R³   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   randrange_impl_2‡  s    c         C` s@   | \ } } } t  |  | | | | d ƒ } t |  | | j | ƒ S(   NR   (   R»   R   Rb   (   R   R   Rf   R0   R±   R²   R³   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   randrange_impl_3Ž  s    s   random.randintc         C` sd   | \ } } t  j | j d ƒ } | j | | ƒ } t |  | | | | d ƒ } t |  | | j | ƒ S(   Ni   R   (   R   R   RL   R   R»   R   Rb   (   R   R   Rf   R0   R±   R²   R³   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   randint_impl_1•  s
    s   np.random.randintc         C` sd   | \ } t  j | j d ƒ } t  j | j d ƒ } t |  | | | | d ƒ } t |  | | j | ƒ S(   Ni    i   R   (   R   R   RL   R»   R   Rb   (   R   R   Rf   R0   R²   R±   R³   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   randint_impl_2  s
    	c         C` sR   | \ } } t  j | j d ƒ } t |  | | | | d ƒ } t |  | | j | ƒ S(   Ni   R   (   R   R   RL   R»   R   Rb   (   R   R   Rf   R0   R±   R²   R³   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR½   ¥  s    s   random.uniformc         C` s.   t  |  | | | d ƒ } t |  | | j | ƒ S(   NR   (   t   uniform_implR   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRÁ   ¬  s    s   np.random.uniformc         C` s.   t  |  | | | d ƒ } t |  | | j | ƒ S(   NR   (   RÁ   R   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRÁ   ±  s    c   
      C` s^   t  |  | | ƒ } | \ } } | j | | ƒ } t |  | | ƒ }	 | j | | j | |	 ƒ ƒ S(   N(   R#   t   fsubRI   RE   RF   (
   R   R   Rf   R0   Rˆ   R'   RG   RH   R¯   RŸ   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRÁ   ¶  s
    s   random.triangularc         C` s†   | j  } | \ } } t |  | d ƒ } t |  | | ƒ } d „  }	 |  j | |	 t | f d Œ  | | | f ƒ }
 t |  | | j  |
 ƒ S(   NR   c         S` sO   |  } d } | | k r2 d | } | | } } n  | | | t  j | | ƒ S(   Ng      à?g      ð?(   Rw   Rx   (   t   randvalR[   R\   t   ut   c(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   triangular_impl_2Ä  s    
i   (   Rb   R#   RI   R…   R	   R   (   R   R   Rf   R0   t   flttyR[   R\   R'   RÃ   RÆ   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRÆ   ½  s    		c         C` sC   | \ } } } t  |  | | | | | d ƒ } t |  | | j | ƒ S(   NR   (   t   _triangular_impl_3R   Rb   (   R   R   Rf   R0   R[   R\   t   modeRk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   triangular_impl_3Ñ  s    s   np.random.triangularc         C` sC   | \ } } } t  |  | | | | | d ƒ } t |  | | j | ƒ S(   NR   (   RÈ   R   Rb   (   R   R   Rf   R0   R[   RÉ   R\   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRÊ   Ø  s    c         C` se   | j  } t |  | | ƒ } t |  | | ƒ }	 d „  }
 |  j | |
 t | f d Œ  |	 | | | f ƒ S(   Nc         S` su   | | k r | S|  } | | | | } | | k rX d | } d | } | | } } n  | | | t  j | | ƒ S(   Ng      ð?(   Rw   Rx   (   RÃ   R[   R\   RÉ   RÄ   RÅ   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRÊ   ä  s    

i   (   Rb   R#   RI   R…   R	   (   R   R   Rf   R[   R\   RÉ   Rˆ   RÇ   R'   RÃ   RÊ   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRÈ   ß  s    		s   random.gammavariatec         C` s1   t  |  | | | t j ƒ } t |  | | j | ƒ S(   N(   t   _gammavariate_implR‚   R   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   gammavariate_implô  s    s   np.random.standard_gammas   np.random.gammac         C` sR   t  |  | | | d ƒ \ } } t |  | | | t j j ƒ } t |  | | j | ƒ S(   Ng      ð?(   Ng      ð?(   Ri   Rp   RË   R   R‚   R   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRÌ   ú  s    c         ` s„   t  j ‰ t  j ‰ t  j ‰ t  j ‰ d t  j } ˆ d ƒ ‰  d ˆ d ƒ ‰ ‡  ‡ ‡ ‡ ‡ ‡ ‡ f d †  } |  j | | | | ƒ S(   Ng       @g      @g      ð?g      @c         ` s  |  d k s | d k r' t  d ƒ ‚ n  |  d k rˆ d |  d ƒ } |  ˆ  } |  | } x¢ˆ ƒ  } d | k  o~ d k  n s‰ q^ n  d ˆ ƒ  } ˆ | d | ƒ | } |  ˆ | ƒ } | | | }	 | | | | }
 |
 ˆ d |	 d k s|
 ˆ |	 ƒ k r^ | | Sq^ Wné |  d k rWˆ ƒ  } x | d k rGˆ ƒ  } q/Wˆ | ƒ | Sxž ˆ ƒ  } ˆ |  ˆ } | | } | d k r˜| d |  } n ˆ | | |  ƒ } ˆ ƒ  } | d k rÝ| | |  d k rôPqôqZ| ˆ | ƒ k rZPqZqZW| | Sd S(	   s1   Gamma distribution.  Taken from CPython.
        g        s*   gammavariate: alpha and beta must be > 0.0g      ð?g       @gH¯¼šò×z>gËPÊÿÿï?g      @N(   R­   (   t   alphat   betat   ainvt   bbbt   ccct   u1t   u2t   vR   t   zRŸ   RÄ   RH   t   p(   t   LOG4t   SG_MAGICCONSTt   _et   _expt   _logR~   t   _sqrt(    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRÌ     sH    

	*		
	(   Rw   t   expRy   Rx   t   et   piR…   (   R   R   Rf   R0   R~   t   TWOPIRÌ   (    (   R×   RØ   RÙ   RÚ   RÛ   R~   RÜ   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRË     s    				!7s   random.betavariatec         C` s1   t  |  | | | t j ƒ } t |  | | j | ƒ S(   N(   t   _betavariate_implR‚   t   gammavariateR   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   betavariate_implG  s    s   np.random.betac         C` s4   t  |  | | | t j j ƒ } t |  | | j | ƒ S(   N(   Rá   R   R‚   t   gammaR   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRã   N  s    c         ` s%   ‡  f d †  } |  j  | | | | ƒ S(   Nc         ` s8   ˆ  |  d ƒ } | d k r d S| | ˆ  | d ƒ Sd S(   s0   Beta distribution.  Taken from CPython.
        g      ð?g        N(    (   RÍ   RÎ   R@   (   Rä   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRã   W  s    (   R…   (   R   R   Rf   R0   Rä   Rã   (    (   Rä   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRá   U  s    s   random.expovariatec         ` sR   t  j  ‰ t j ‰  ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s   ˆ  d ˆ ƒ  ƒ |  S(   s7   Exponential distribution.  Taken from CPython.
        g      ð?(    (   t   lambd(   RÛ   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   expovariate_impll  s    (   R‚   Rw   Ry   R…   R   Rb   (   R   R   Rf   R0   Ræ   Rk   (    (   RÛ   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRæ   f  s    		
s   np.random.exponentialc         ` sU   t  j j ‰ t j ‰  ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s   ˆ  d ˆ ƒ  ƒ |  S(   Ng      ð?(    (   t   scale(   RÛ   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   exponential_impl  s    (   R   R‚   Rw   Ry   R…   R   Rb   (   R   R   Rf   R0   Rè   Rk   (    (   RÛ   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRè   z  s    	s   np.random.standard_exponentialc         ` sU   t  j j ‰ t j ‰  ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc           ` s   ˆ  d ˆ ƒ  ƒ S(   Ng      ð?(    (    (   RÛ   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRè   Œ  s    (   R   R‚   Rw   Ry   R…   R   Rb   (   R   R   Rf   R0   Rè   Rk   (    (   RÛ   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRè   †  s    	s   np.random.lognormalc         C` sR   t  |  | | | d ƒ \ } } t |  | | | t j j ƒ } t |  | | j | ƒ S(   Ng        g      ð?(   g        g      ð?(   Ri   t   _lognormvariate_implR   R‚   t   normalR   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   np_lognormal_impl“  s    s   random.lognormvariatec         C` s1   t  |  | | | t j ƒ } t |  | | j | ƒ S(   N(   Ré   R‚   t   gaussR   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   lognormvariate_implœ  s    c         ` s1   t  j ‰  ‡  ‡ f d †  } |  j | | | | ƒ S(   Nc         ` s   ˆ  ˆ |  | ƒ ƒ S(   N(    (   R‘   R’   (   RÚ   t   _gauss(    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRí   ¥  s    (   Rw   RÝ   R…   (   R   R   Rf   R0   Rî   Rí   (    (   RÚ   Rî   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRé   ¢  s    	s   random.paretovariatec         ` sF   t  j  ‰  ‡  f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s   d ˆ  ƒ  } d | d |  S(   s)   Pareto distribution.  Taken from CPython.g      ð?(    (   RÍ   RÄ   (   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   paretovariate_impl°  s    (   R‚   R…   R   Rb   (   R   R   Rf   R0   Rï   Rk   (    (   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRï   ¬  s
    	s   np.random.paretoc         ` sI   t  j j ‰  ‡  f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s!   d ˆ  ƒ  } d | d |  d S(   Ng      ð?i   (    (   RÍ   RÄ   (   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   pareto_impl¾  s    (   R   R‚   R…   R   Rb   (   R   R   Rf   R0   Rð   Rk   (    (   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRð   º  s    s   random.weibullvariatec         ` sR   t  j  ‰ t j ‰  ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s$   d ˆ ƒ  } |  ˆ  | ƒ d | S(   s*   Weibull distribution.  Taken from CPython.g      ð?(    (   RÍ   RÎ   RÄ   (   RÛ   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   weibullvariate_implÌ  s    (   R‚   Rw   Ry   R…   R   Rb   (   R   R   Rf   R0   Rñ   Rk   (    (   RÛ   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRñ   Æ  s    		s   np.random.weibullc         ` sU   t  j j ‰ t j ‰  ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s    d ˆ ƒ  } ˆ  | ƒ d |  S(   Ng      ð?(    (   RÎ   RÄ   (   RÛ   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   weibull_implÛ  s    (   R   R‚   Rw   Ry   R…   R   Rb   (   R   R   Rf   R0   Rò   Rk   (    (   RÛ   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRò   Ö  s
    	s   random.vonmisesvariatec         C` s1   t  |  | | | t j ƒ } t |  | | j | ƒ S(   N(   t   _vonmisesvariate_implR‚   R   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   vonmisesvariate_implã  s    s   np.random.vonmisesc         C` s4   t  |  | | | t j j ƒ } t |  | | j | ƒ S(   N(   Ró   R   R‚   R   Rb   (   R   R   Rf   R0   Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRô   é  s    c         ` sn   t  j ‰ t  j ‰ t  j ‰ t  j ‰ t  j ‰ d ˆ ‰  ‡  ‡ ‡ ‡ ‡ ‡ ‡ f d †  } |  j | | | | ƒ S(   Ng       @c         ` s  | d k r ˆ  ˆ ƒ  Sd | } | ˆ d | | ƒ } xf ˆ ƒ  } ˆ ˆ | ƒ } | | | } ˆ ƒ  } | d | | k  sš | d | ˆ | ƒ k r< Pq< q< Wd | } | | d | | }	 ˆ ƒ  }
 |
 d k rî |  ˆ |	 ƒ ˆ  } n |  ˆ |	 ƒ ˆ  } | S(   s¤   Circular data distribution.  Taken from CPython.
        Note the algorithm in Python 2.6 and Numpy is different:
        http://bugs.python.org/issue17141
        gíµ ÷Æ°>g      à?g      ð?(    (   R‘   t   kappat   sRŸ   RÒ   RÕ   R`   RÓ   t   qR}   t   u3t   theta(   Rà   t   _acost   _cosRÚ   t   _piR~   RÜ   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRô   ÷  s$    
		.
	(   Rw   RÝ   Rx   t   cost   acosRß   R…   (   R   R   Rf   R0   R~   Rô   (    (   Rà   Rú   Rû   RÚ   Rü   R~   RÜ   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRó   ï  s    					
!(s   np.random.binomialc         ` sR   | j  } t j j ‰  ‡  f d †  } |  j | | | | ƒ } t |  | | j  | ƒ S(   Nc         ` sÅ  |  d k  r t  d ƒ ‚ n  d | k o2 d k n sF t  d ƒ ‚ n  | d k rV d S| d k rf |  S| d k } | r… d | } n  d | } d } | |  } x@ | d k rá | d	 K} |  d	 L}  | |  } |  d k s¢ t ‚ q¢ W|  | } t |  | d
 t j | | d ƒ ƒ } t } d }	 xž | d k rÀd }
 ˆ  ƒ  } | } xv |
 | k r¼| | k r‡|	 | rr|  |
 n |
 7}	 | d 8} Pn  | | 8} |
 d 7}
 |  |
 d | | |
 | } qGWq#W|	 S(   s   
        Binomial distribution.  Numpy's variant of the BINV algorithm
        is used.
        (Numpy uses BTPE for n*p >= 30, though)
        i    s   binomial(): n <= 0g        g      ð?s   binomial(): p outside of [0, 1]g      à?i   gÒèxÖ0 i   g      $@(   R­   R   t   minRw   Rx   R—   (   Rœ   RÖ   t   flippedR÷   t   niterst   qnR   t   boundt   finishedR]   t   Xt   Ut   px(   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   binomial_impl(  sH    





(	


&(   Rb   R   R‚   R…   R   (   R   R   Rf   R0   t   inttyR  Rk   (    (   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR  #  s
    	2s   np.random.chisquarec         C` s7   d „  } |  j  | | | | ƒ } t |  | | j | ƒ S(   Nc         S` s   d t  j j |  d ƒ S(   Ng       @(   R   R‚   t   standard_gamma(   t   df(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   chisquare_impla  s    (   R…   R   Rb   (   R   R   Rf   R0   R  Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR  ^  s    	s   np.random.fc         C` s7   d „  } |  j  | | | | ƒ } t |  | | j | ƒ S(   Nc         S` s(   t  j j |  ƒ | t  j j | ƒ |  S(   N(   R   R‚   t	   chisquare(   t   numt   denom(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   f_implk  s    (   R…   R   Rb   (   R   R   Rf   R0   R  Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR  h  s    	s   np.random.geometricc         ` sU   t  j j ‰  | j ‰ ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s¿   |  d k s |  d k r' t  d ƒ ‚ n  d |  } |  d k r‘ ˆ d ƒ } |  } } ˆ  ƒ  } x. | | k rŒ | | 9} | | 7} | d 7} q_ W| St j t j d ˆ  ƒ  ƒ t j | ƒ ƒ Sd  S(   Ng        g      ð?s    geometric(): p outside of (0, 1]gUUUUUUÕ?i   (   R­   Rw   t   ceilRy   (   RÖ   R÷   R  t   sumt   prodR  (   R~   R	  (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   geometric_implx  s    

	

(   R   R‚   Rb   R…   R   (   R   R   Rf   R0   R  Rk   (    (   R~   R	  s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR  s  s
    	s   np.random.gumbelc         ` sU   t  j j ‰ t j ‰  ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s&   d ˆ ƒ  } |  | ˆ  ˆ  | ƒ ƒ S(   Ng      ð?(    (   t   locRç   R  (   RÛ   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   gumbel_impl’  s    (   R   R‚   Rw   Ry   R…   R   Rb   (   R   R   Rf   R0   R  Rk   (    (   RÛ   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR    s
    	s   np.random.hypergeometricc         ` sU   t  j j ‰ t j ‰  ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s£   | |  | } t  t | |  ƒ ƒ } | } | } xE | d k rv | d k rv | ˆ  ˆ ƒ  | | | ƒ 8} | d 8} q2 Wt | | ƒ } |  | k r› | | S| Sd S(   s'   Numpy's algorithm for hypergeometric().g        i    i   N(   t   floatRÿ   t   int(   t   ngoodt   nbadt   nsamplest   d1t   d2t   Yt   Kt   Z(   t   _floorR~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   hypergeometric_impl   s    (   R   R‚   Rw   t   floorR…   R   Rb   (   R   R   Rf   R0   R"  Rk   (    (   R!  R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR"  š  s
    	s   np.random.laplacec         ` ss   t  j j ‰ t j ‰  ‡  ‡ f d †  } t |  | | | d ƒ \ } } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` sI   ˆ ƒ  } | d k  r+ |  | ˆ  | | ƒ S|  | ˆ  d | | ƒ Sd  S(   Ng      à?g       @(    (   R  Rç   R  (   RÛ   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   laplace_impl»  s    	g        g      ð?(   g        g      ð?(   R   R‚   Rw   Ry   Ri   R…   R   Rb   (   R   R   Rf   R0   R$  Rk   (    (   RÛ   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR$  ´  s    	s   np.random.logisticc         ` ss   t  j j ‰ t j ‰  ‡  ‡ f d †  } t |  | | | d ƒ \ } } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s#   ˆ ƒ  } |  | ˆ  | d | ƒ S(   Ng      ð?(    (   R  Rç   R  (   RÛ   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   logistic_implÎ  s    	g        g      ð?(   g        g      ð?(   R   R‚   Rw   Ry   Ri   R…   R   Rb   (   R   R   Rf   R0   R%  Rk   (    (   RÛ   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR%  Ç  s    	s   np.random.logseriesc         ` sm   | j  ‰ t j j ‰ t j ‰ t j ‰  ‡  ‡ ‡ ‡ f d †  } |  j | | | | ƒ } t |  | | j  | ƒ S(   Nc         ` sº   |  d k s |  d k r' t  d ƒ ‚ n  ˆ d |  ƒ } x| ˆ ƒ  } | |  k rS d Sˆ ƒ  } d ˆ  | | ƒ } | | | k rž ˆ d ˆ | ƒ ˆ | ƒ ƒ S| | k r® d Sd Sq: Wd S(   s"   Numpy's algorithm for logseries().g        g      ð?s    logseries(): p outside of (0, 1]i   i   N(   R­   (   RÖ   RŸ   t   VR  R÷   (   RÚ   RÛ   R~   R	  (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   logseries_implÝ  s    		(   Rb   R   R‚   Rw   Ry   RÝ   R…   R   (   R   R   Rf   R0   R'  Rk   (    (   RÚ   RÛ   R~   R	  s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR'  Ö  s    			s   np.random.negative_binomialc         ` sX   t  j j ‰  t  j j ‰ ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` sc   |  d k r t  d ƒ ‚ n  | d k  s3 | d k rB t  d ƒ ‚ n  ˆ  |  d | | ƒ } ˆ | ƒ S(   Ni    s   negative_binomial(): n <= 0g        g      ð?s(   negative_binomial(): p outside of [0, 1](   R­   (   Rœ   RÖ   R  (   t   _gammat   _poisson(    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   negative_binomial_implú  s    (   R   R‚   Rä   t   poissonR…   R   Rb   (   R   R   Rf   R0   R*  Rk   (    (   R(  R)  s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR*  õ  s
    s   np.random.poissonc         ` sæ  t  |  | ƒ } t j | t d d ƒ} | j d ƒ } | j d ƒ } t | ƒ d k rÿ | \ } | j d | t j t	 d ƒ ƒ }	 | j
 |	 ƒ j t j t t t	 f ƒ }
 | j j j |
 d ƒ } | j | | | f ƒ } | j | | ƒ | j | ƒ Wd  QXn  | j | ƒ | j | ƒ t j j ‰ t j ‰  ‡  ‡ f d	 †  } t | ƒ d
 k rt | j t j ƒ } t j t	 d ƒ f } n  |  j | | | | ƒ } | j | | ƒ | j | ƒ | j | ƒ | j | ƒ } t |  | | j | ƒ S(   NR   RW   t   bbcontR¨   i   s   >=g      $@t   numba_poisson_ptrsc         ` s|   |  d k  r t  d ƒ ‚ n  |  d k r+ d Sˆ  |  ƒ } d } d } x1 ˆ ƒ  } | | 9} | | k rj | S| d 7} qG Wd S(   s+  Numpy's algorithm for poisson() on small *lam*.

        This method is invoked only if the parameter lambda of the
        distribution is small ( < 10 ). The algorithm used is described
        in "Knuth, D. 1969. 'Seminumerical Algorithms. The Art of
        Computer Programming' vol 2.
        g        s   poisson(): lambda < 0i    g      ð?i   N(   R­   (   t   lamt   enlamR  R  R  (   RÚ   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   poisson_impl"  s    	
i    g      ð?(   R%   R   Rƒ   RU   R¡   Re   t   fcmp_orderedR   R   RC   R«   R   R   R/   R   R   R   R7   R¢   R£   R   R‚   Rw   RÝ   R	   Rb   R   t   float64R…   R3   R   (   R   R   Rf   R0   R'   t   retptrR,  R¨   R.  t   big_lamR!   R"   RW   R0  Rk   (    (   RÚ   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR0    s8    	!		s   np.random.powerc         C` s7   d „  } |  j  | | | | ƒ } t |  | | j | ƒ S(   Nc         S` sF   |  d k r t  d ƒ ‚ n  t j d t j t j j ƒ  ƒ d |  ƒ S(   Ng        s   power(): a <= 0i   g      ð?(   R­   Rw   t   powRÝ   R   R‚   t   standard_exponential(   RG   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt
   power_implG  s     (   R…   R   Rb   (   R   R   Rf   R0   R7  Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR7  D  s    	s   np.random.rayleighc         ` sg   t  j j ‰  ‡  f d †  } t |  | | | d ƒ \ } } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s@   |  d k r t  d ƒ ‚ n  |  t j d t j d ˆ  ƒ  ƒ ƒ S(   Ng        s   rayleigh(): mode <= 0g       Àg      ð?(   R­   Rw   Rx   Ry   (   RÉ   (   R~   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   rayleigh_implV  s    g      ð?(   g      ð?(   R   R‚   Ri   R…   R   Rb   (   R   R   Rf   R0   R8  Rk   (    (   R~   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR8  Q  s
    s   np.random.standard_cauchyc         ` sI   t  j j ‰  ‡  f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc           ` s   ˆ  ƒ  ˆ  ƒ  S(   N(    (    (   Rî   (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   cauchy_impld  s    (   R   R‚   t   standard_normalR…   R   Rb   (   R   R   Rf   R0   R9  Rk   (    (   Rî   s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR9  `  s    s   np.random.standard_tc         C` s7   d „  } |  j  | | | | ƒ } t |  | | j | ƒ S(   Nc         S` sM   t  j j ƒ  } t  j j |  d ƒ } t j |  d ƒ | t j | ƒ } | S(   Ng       @(   R   R‚   R:  R
  Rw   Rx   (   R  t   Nt   GR  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   standard_t_impln  s    $(   R…   R   Rb   (   R   R   Rf   R0   R=  Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR=  k  s    	s   np.random.waldc         C` s7   d „  } |  j  | | | | ƒ } t |  | | j | ƒ S(   Nc         S` sÃ   |  d k r t  d ƒ ‚ n  | d k r6 t  d ƒ ‚ n  |  d | } t j j ƒ  } |  | | } |  | | t j d | | | | ƒ } t j j ƒ  } | |  |  | k r³ | S|  |  | Sd  S(   Ng        s   wald(): mean <= 0s   wald(): scale <= 0g       @i   (   R­   R   R‚   R:  Rw   Rx   (   t   meanRç   t   mu_2lR  R  R  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt	   wald_impl{  s    +(   R…   R   Rb   (   R   R   Rf   R0   R@  Rk   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR@  x  s    	s   np.random.zipfc         ` sU   t  j j ‰  | j ‰ ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | j | ƒ S(   Nc         ` s³   |  d k r t  d ƒ ‚ n  |  d } d | } x} d ˆ  ƒ  } ˆ  ƒ  } ˆ t j | d | ƒ ƒ } d d | | } | d k r2 | | | d | d | | k r2 | Sq2 Wd  S(   Ng      ð?s   zipf(): a <= 1g       @g      ð¿i   (   R­   Rw   R#  (   RG   t   am1RH   R  R&  R  t   T(   R~   R	  (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt	   zipf_impl“  s    

	0(   R   R‚   Rb   R…   R   (   R   R   Rf   R0   RC  Rk   (    (   R~   R	  s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRC  Ž  s
    	c         ` sˆ   t  |  t j ƒ s! t d ƒ ‚ n  | d k r< t j j ‰  n | d k rT t j ‰  n  |  j d k ru ‡  f d †  } n ‡  f d †  } | S(   Ns1   The argument to shuffle() should be a buffer typeR   R   i   c         ` s_   |  j  d d } xG | d k rZ ˆ  | d ƒ } |  | |  | |  | <|  | <| d 8} q Wd  S(   Ni    i   (   t   shape(   t   arrt   it   j(   t   rand(    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   impl®  s
    c         ` sq   |  j  d d } xY | d k rl ˆ  | d ƒ } t j |  | ƒ t j |  | ƒ |  | <|  | <| d 8} q Wd  S(   Ni    i   (   RD  R   t   copy(   RE  RF  RG  (   RH  (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRI  µ  s
    /(	   t
   isinstanceR   t   Buffert	   TypeErrorR   R‚   t   randintt	   randranget   ndim(   RE  t   rngRI  (    (   RH  s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   do_shuffle_impl£  s    c         C` s   t  |  d ƒ S(   NR   (   RR  (   RE  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   shuffle_impl¾  s    c         C` s   t  |  d ƒ S(   NR   (   RR  (   RE  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRS  Â  s    c         C` sF   t  |  t j ƒ r d „  } n$ t  |  t j ƒ r< d „  } n d  } | S(   Nc         S` s#   t  j |  ƒ } t  j j | ƒ | S(   N(   R   t   arangeR‚   t   shuffle(   R   R@   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   permutation_implÉ  s    c         S` s    |  j  ƒ  } t j j | ƒ | S(   N(   RJ  R   R‚   RU  (   R   t   arr_copy(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRV  Î  s    (   RK  R   t   Integert   ArrayRp   (   R   RV  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRV  Æ  s    i   i   i   i   c      
   C` s  d d l  m } | j } | j } t | | j d  Œ } | d  }	 | j |  | | j d | d ƒ }
 | j |  | | |
 ƒ } |  j | | ƒ } t	 j
 | | j ƒ J } | | |	 ƒ } t	 j | | j | j ƒ } | j |  | | | | ƒ Wd  QXt |  | | j | j ƒ  ƒ S(   Ni   (   t   arrayobjiÿÿÿÿ(   t    RZ  Rb   t   dtypeR	   R0   t   _parse_shapet   _empty_nd_implt   get_functionR   t	   for_ranget   nitemst   gept   datat   indext
   store_itemR   t	   _getvalue(   R   R   Rf   R0   t
   typing_keyRZ  t   arrtyR\  t
   scalar_sigt   scalar_argst   shapesRE  t   scalar_implt   loopt   valt   ptr(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt
   random_arrý  s    		
#c          G` s+   t  |  ƒ d k r d „  } n	 d „  } | S(   Ni    c          W` s   t  j j ƒ  S(   N(   R   R‚   (   t   size(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt	   rand_impl  s    c          W` s   t  j j |  ƒ S(   N(   R   R‚   (   Rq  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRr     s    (   Re   (   Rq  Rr  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRH    s    	c          G` s+   t  |  ƒ d k r d „  } n	 d „  } | S(   Ni    c          W` s   t  j j ƒ  S(   N(   R   R‚   R:  (   Rq  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt
   randn_impl)  s    c          W` s   t  j j |  ƒ S(   N(   R   R‚   R:  (   Rq  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRs  .  s    (   Re   (   Rq  Rs  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   randn%  s    	c         ` s  t  |  t j ƒ r` |  j d k s' t ‚ |  j ‰ t d „  ƒ ‰ t d „  ƒ ‰  t d „  ƒ ‰ n^ t  |  t j ƒ r« t j	 ‰ t d „  ƒ ‰ t d „  ƒ ‰  t d „  ƒ ‰ n t
 d |  f ƒ ‚ | d  t j f k rî d  t ‡ ‡ f d	 † } n d  t ‡  ‡ ‡ ‡ f d
 † } | S(   Ni   c         S` s
   t  |  ƒ S(   N(   Re   (   RG   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   get_source_size?  s    c         S` s
   |  j  ƒ  S(   N(   RJ  (   RG   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   copy_sourceC  s    c         S` s   |  | S(   N(    (   RG   t   a_i(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   getitemG  s    c         S` s   |  S(   N(    (   RG   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRu  O  s    c         S` s   t  j |  ƒ S(   N(   R   RT  (   RG   (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRv  S  s    c         S` s   | S(   N(    (   RG   Rw  (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRx  W  s    s@   np.random.choice() first argument should be int or array, got %sc         ` s.   ˆ  |  ƒ } t  j j d | ƒ } ˆ |  | ƒ S(   ss   
            choice() implementation returning a single sample
            (note *replace* is ignored)
            i    (   R   R‚   RN  (   RG   Rq  t   replaceRœ   RF  (   Ru  Rx  (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   choice_impl`  s    c   	      ` s  ˆ |  ƒ } | rv t  j | ˆ ƒ } | j } xB t t | ƒ ƒ D]. } t  j j d | ƒ } ˆ |  | ƒ | | <q@ W| St  j | ˆ ƒ } | j | k r¦ t d ƒ ‚ n  ˆ  |  ƒ } | j } xK t t | ƒ ƒ D]7 } t  j j | | ƒ } | | | | <| | | | <qÎ W| Sd S(   sO   
            choice() implementation returning an array of samples
            i    s@   Cannot take a larger sample than population when 'replace=False'N(	   R   t   emptyt   flatt   rangeRe   R‚   RN  Rq  R­   (	   RG   Rq  Ry  Rœ   t   outt   flRF  RG  t   src(   Rv  R\  Ru  Rx  (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyRz  j  s$    		(   RK  R   RY  RP  R   R\  R   RX  R   t   intpRM  Rp   Ro   Rv   (   RG   Rq  Ry  Rz  (    (   Rv  R\  Ru  Rx  s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   choice7  s"    		
c         ` s	  t  j ‰  t d „  ƒ ‰ t |  t j ƒ s@ t d |  f ƒ ‚ n  t | t j t j f ƒ sq t d | f ƒ ‚ n  | d  t j
 f k rž d  ‡  ‡ f d † } ng t | t j ƒ rÈ d  ‡  ‡ f d † } n= t | t j ƒ rò d  ‡  ‡ f d † } n t d | f ƒ ‚ | S(   Nc         S` sÝ   | j  } | j } t | ƒ } x¸ t d | | ƒ D]¤ } d } |  } xn t d | d ƒ D]Y }	 | |	 }
 t j j | |
 | ƒ } | | |	 <| | 8} | d k r¦ Pn  | |
 8} qW W| d k r1 | | | | d <q1 q1 Wd  S(   Ni    g      ð?i   (   R|  Rq  Re   R}  R   R‚   t   binomial(   Rœ   t   pvalsR~  R  t   szt   plenRF  t   p_sumt   n_experimentsRG  t   p_jt   n_j(    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   multinomial_inner’  s    		
%
s7   np.random.multinomial(): n should be an integer, got %ssE   np.random.multinomial(): pvals should be an array or sequence, got %sc         ` s,   t  j t | ƒ ˆ  ƒ } ˆ |  | | ƒ | S(   s5   
            multinomial(..., size=None)
            (   R   t   zerosRe   (   Rœ   R„  Rq  R~  (   R\  R‹  (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   multinomial_implº  s    c         ` s2   t  j | t | ƒ f ˆ  ƒ } ˆ |  | | ƒ | S(   s4   
            multinomial(..., size=int)
            (   R   RŒ  Re   (   Rœ   R„  Rq  R~  (   R\  R‹  (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR  Ã  s    c         ` s3   t  j | t | ƒ f ˆ  ƒ } ˆ |  | | ƒ | S(   s6   
            multinomial(..., size=tuple)
            (   R   RŒ  Re   (   Rœ   R„  Rq  R~  (   R\  R‹  (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyR  Ì  s    sD   np.random.multinomial(): size should be int or tuple or None, got %s(   R   R  R   RK  R   RX  RM  t   SequenceRY  Rp   Ro   t	   BaseTuple(   Rœ   R„  Rq  R  (    (   R\  R‹  s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   multinomial  s"    		(   s   np.random.betai   (   s   np.random.binomiali   (   s   np.random.chisquarei   (   s   np.random.exponentiali   (   s   np.random.fi   (   s   np.random.gammai   (   s   np.random.geometrici   (   s   np.random.gumbeli   (   s   np.random.hypergeometrici   (   s   np.random.laplacei   (   s   np.random.logistici   (   s   np.random.lognormali   (   s   np.random.logseriesi   (   s   np.random.negative_binomiali   (   s   np.random.normali   (   s   np.random.paretoi   (   s   np.random.poissoni   (   s   np.random.poweri   (   s   np.random.randomi   (   s   np.random.randinti   (   s   np.random.rayleighi   (   s   np.random.standard_cauchyi   (   s   np.random.standard_exponentiali   (   s   np.random.standard_gammai   (   s   np.random.standard_normali   (   s   np.random.standard_ti   (   s   np.random.triangulari   (   s   np.random.uniformi   (   s   np.random.vonmisesi   (   s   np.random.waldi   (   s   np.random.weibulli   (   s   np.random.zipfi   (z   t   __doc__t
   __future__R    R   R   Rw   t   osR‚   t   numpyR   t   llvmliteR   t   numba.extendingR   R   t   numba.targets.imputilsR   R   R   t   numba.typingR	   t   numbaR
   R   R   t   registryt   lowert   IntTypeR   RU   R   t
   DoubleTypeRC   R;  R   R5   t   LiteralStructTypet	   ArrayTypet   rnd_state_tt   PointerTypeR   R#   R$   R%   R(   R)   R*   R+   R2   RA   RI   R^   Ri   t   uint32Rl   Rj   Rr   t   FloatRt   Ru   R€   Rs   RX  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'  t   int64R*  R0  R7  R8  R9  R=  R@  RC  RR  RU  RS  t   permutationRV  Rg  t   arityt   AnyRp  RH  Rt  R‚  Rp   Rv   R  (    (    (    s7   lib/python2.7/site-packages/numba/targets/randomimpl.pyt   <module>   sX  											
			)					$		*		$	E!!!!!	!	'	E			'	
	4!;
!!	'	'!	=	!	U