
    xKgJ                       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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Zd dlZd dlmZmZmZ d dlmZ d dlmZmZmZ d dlmZ dZd Zd	 Zd
 Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d  Z4 e3d!      Z5 e1d"      Z6 e2d#      Z7 e3d$      Z8 e1d%      Z9 e2d&      Z:d' Z;d( Z<d) Z=d* Z>d+ Z? G d, d-e      Z@ G d. d/e@      ZA G d0 d1e@      ZB G d2 d3e@      ZC G d4 d5e@      ZD G d6 d7e@      ZE G d8 d9e@      ZF G d: d;e@      ZG ed<d<=      d>        ZHd?ZI ed<d<=      d@        ZJ G dA dBe      ZK G dC dDeK      ZL ej                  ej                  dEk(  dF       G dG dHeK             ZO G dI dJe      ZPeQdKk(  r ej                          yy)L    N)dedent)jit
_helperlibnjit)types)TestCasecompile_functiontag)TypingErrorp  c                  *    t        j                         S N)r   rnd_get_py_state_ptr     [/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_random.pyget_py_state_ptrr          **,,r   c                  *    t        j                         S r   )r   rnd_get_np_state_ptrr   r   r   get_np_state_ptrr      r   r   c                 @    t         j                  j                  |       S r   nprandomrandintas    r   numpy_randint1r   #   s    99Qr   c                 B    t         j                  j                  | |      S r   r   r   bs     r   numpy_randint2r#   &   s    99Q""r   c                 .    t        j                  | |      S r   )r   r   r!   s     r   random_randintr%   )   s    >>!Qr   c                 ,    t        j                  |       S r   r   	randranger   s    r   random_randrange1r)   ,   s    Ar   c                 .    t        j                  | |      S r   r'   r!   s     r   random_randrange2r+   /   s    Aq!!r   c                 0    t        j                  | ||      S r   r'   )r   r"   cs      r   random_randrange3r.   2   s    Aq!$$r   c                 @    t         j                  j                  |       S r   r   r   choicer   s    r   numpy_choice1r2   5   s    99Ar   c                 D    t         j                  j                  | |      S Nsizer0   r   r6   s     r   numpy_choice2r8   8   s    99AD))r   c                 F    t         j                  j                  | ||      S )N)r6   replacer0   )r   r6   r:   s      r   numpy_choice3r;   ;   s    99AD'::r   c                 B    t         j                  j                  | |      S r   r   r   multinomial)npvalss     r   numpy_multinomial2rA   >   s    99  E**r   c                 F    t         j                  j                  | ||      S )N)r@   r6   r=   r?   r@   r6   s      r   numpy_multinomial3rD   A   s    99  %d ;;r   c                 D    t         j                  j                  | |      S r4   r   r   	dirichletalphar6   s     r   numpy_dirichletrJ   D   s    99u400r   c                 @    t         j                  j                  |       S r   rF   )rI   s    r   numpy_dirichlet_defaultrL   G   s    99u%%r   c                 F    t         j                  j                  | ||      S r4   r   r   noncentral_chisquaredfnoncr6   s      r   numpy_noncentral_chisquarerS   J   s    99))"d)>>r   c                 B    t         j                  j                  | |      S r   rN   )rQ   rR   s     r   "numpy_noncentral_chisquare_defaultrU   M   s    99))"d33r   c                    t         j                  j                  |        t         j                  j                  ||f      }t         j                  j                  |        t         j                  j                  ||      }||fS r   )r   r   seedrandrW   r   r"   expectedgots        r   numpy_check_randr\   P   sX    IINN4yyA'HIINN4
))..A
CS=r   c                    t         j                  j                  |        t         j                  j                  ||f      }t         j                  j                  |        t         j                  j	                  ||      }||fS r   )r   r   rW   standard_normalrandnrY   s        r   numpy_check_randnr`   W   sX    IINN4yy((!Q0HIINN4
))//!Q
CS=r   c                 j    dt               z  }t        d|t                     } t        d      |      S )Nz@def func(%(argstring)s):
        return %(name)s(%(argstring)s)
funcTnopython)localsr	   globalsr   )name	argstringcodepyfuncs       r   jit_with_argsrk   ^   s7    hD fdGI6F3f%%r   c                     dj                  |D cg c]	  }| d|  c}      }dj                  |      }d| d|  d| d}t        d|t                     } t        d	      |      S c c}w )
N,=z	def func(z):
        return (z)
rb   Trc   )joinr	   rf   r   )rg   
kwarg_listkwcall_args_with_kwargs	signatureri   rj   s          r   jit_with_kwargsru   e   s    HHZ%HZrAbTlZ%HI$I $vQ,- .D fdGI6F3f%% &Is   A)c                     t        | d      S )N rk   rg   s    r   jit_nullaryrz   o   s    r""r   c                     t        | d      S )Nr   rx   ry   s    r   	jit_unaryr|   r   s    s##r   c                     t        | d      S )Nza, brx   ry   s    r   
jit_binaryr~   u   s    v&&r   c                     t        | d      S )Nza, b, crx   ry   s    r   jit_ternaryr   x   s    y))r   random.gausszrandom.randomzrandom.seednp.random.normalnp.random.randomnp.random.seedc                     | j                         d   }|dd |d   }}t        j                  ||t        |      f       ||fS )z?
    Copy state of Python random *r* to Numba state *ptr*.
       N)getstater   rnd_set_statelist)rptrmtintsindexs        r   _copy_py_stater      sI     
aBSb'2b6%DS5$t*"56;r   c           
          | j                         dd \  }}t        j                  |||D cg c]  }t        |       c}f       ||fS c c}w )z>
    Copy state of Numpy random *r* to Numba state *ptr*.
    r      )	get_stater   r   int)r   r   r   r   xs        r   _copy_np_stater      sR     ++-!$KD%S54*@4a3q64*@"AB; +As   A
c                     | j                         \  }}}|d   }|d d }t        |      dk(  sJ dt        j                  |d      |f}||dz  }n|d|fz  }t        j                  j                  |       y )Nr   r   MT19937uint32dtype)r           r   )r   lenr   arrayr   	set_state)r   _vermt_st_gauss_nextmt_posmt_intsnp_sts          r   sync_to_numpyr      s     zz|D%2YFCRjGw<396BE![!!IIr   c                 2    d| j                  |dz  d      z  S )N       @      ?)gammavariate)r   rQ   s     r   py_chisquarer      s    S#...r   c                 @    t        | |      |z  t        | |      |z  z  S r   )r   )r   numdenoms      r   py_fr      s*    !S!E)!U#c)+ ,r   c                       e Zd ZddZddZy)BaseTestc                 H    t        j                  |      }t        ||       |S r   )r   Randomr   selfr   rW   r   s       r   _follow_cpythonzBaseTest._follow_cpython   s    MM$q#r   c                 \    t         j                  j                  |      }t        ||       |S r   )r   r   RandomStater   r   s       r   _follow_numpyzBaseTest._follow_numpy   s%    II!!$'q#r   N   )__name__
__module____qualname__r   r   r   r   r   r   r      s    
r   r   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestInternalsz9
    Test low-level internals of the implementation.
    c                    t        j                  |      }|\  }}| j                  |t               | j                  |t               | j                  t        |      t               |dz  t        z  }t        t              D cg c]  }|dz  	 }}t        j                  |||f       | j                  t        j                  |      ||f       y c c}w )Ni r   )
r   rnd_get_stateassertIsInstancer   r   assertEqualr   Nranger   )r   r   stateir   js         r   _check_get_set_statez"TestInternals._check_get_set_state   s    ((-4a%dD)TA&Z1$Qx(x!Ax(  q$i011#6D	B )s   Cc                 b   t        j                         }t        ||      \  }}t        |t        dz   d      D ]  }|j                           t        j                  |       |j                         d   }|d d |d   }}| j                  t        j                  |      d   t        |             y )Nr   r   r   )r   r   r   r   r   r   rnd_shuffler   r   r   r   )r   r   r   r   r   r   r   s          r   _check_shufflezTestInternals._check_shuffle   s    MMO$Q,eua!eQ'AHHJ (s#ZZ\!_"gr"ve11#6q94:Fr   c                 l   t         j                  j                         }dD ]  }|j                  t        j                  |             |j                         }t        |d         }|d   }|t        k(  sJ t        j                  ||       | j                  t        j                  |      ||f        y )N)r   r   }   l    r   r   )r   r   r   rW   r   r   r   r   r   rnd_seedr   r   )r   r   r   r   str   r   s          r   _check_initzTestInternals._check_init   s     II!!#'AFF299Q< B1;DqEEA::Q'Z55c:UDMJ (r   c                 `   g }t        d      D ]q  }t        j                  |d       t        j                  |t        j                  d             |j                  t        t        j                  |      d                s | j                  t        t        |            t        |             y )N
   r   i   r   )r   r   r   osurandomappendtupler   r   r   set)r   r   statesr   s       r   _check_perturbzTestInternals._check_perturb   s}    rAQ'RZZ_5MM%
 8 8 =a @AB  	S[)3v;7r   c                 6    | j                  t                      y r   )r   r   r   s    r   test_get_set_statez TestInternals.test_get_set_state   s    !!"2"45r   c                 6    | j                  t                      y r   )r   r   r   s    r   test_shufflezTestInternals.test_shuffle       ,./r   c                 6    | j                  t                      y r   )r   r   r   s    r   	test_initzTestInternals.test_init   s    )+,r   c                 6    | j                  t                      y r   )r   r   r   s    r   test_perturbzTestInternals.test_perturb   r   r   N)r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r      s2    
CGK	860-0r   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
	 	 dRd
Z	 	 dRdZd Zd Zd Zd Zd Zd Zd Zd Zd ZdSdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:d: Z;d; Z<d< Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFdF ZGdG ZHdH ZIdI ZJdJ ZKdK ZLdL ZMdM ZNdN ZOdO ZPdP ZQdQ ZRy	)T
TestRandomc           	      "   t         j                  j                         }dD ]l  }|j                  t        j                  |              ||       t        t        dz         D ])  }| j                   |       |j                  dd             + n y)z<
        Check seed()- and random()-like functions.
        r   r   r   l    r   r   r   N)	r   r   r   rW   r   r   r   assertPreciseEqualuniform)r   seedfunc
randomfuncr   r   r   s         r   _check_random_seedzTestRandom._check_random_seed  sj    
 II!!#'AFF299Q< QK1r6]''
aiiS6IJ # (r   c                 8    | j                  t        t               y r   )r   random_seedrandom_randomr   s    r   test_random_randomzTestRandom.test_random_random  s    ];r   c                 0   | j                  t        t               | j                  t        t        d             | j                  t        t        d             | j                  t        t        d             | j                  t        t        d             y Nnp.random.random_samplenp.random.ranfnp.random.sampleznp.random.rand)r   
numpy_seednumpy_randomrz   r   s    r   test_numpy_randomzTestRandom.test_numpy_random  sj    
L9
K8Q,RS
K8H,IJ
K8J,KL
K8H,IJr   c           
         t         j                  j                         }dD ]g  }|j                  t        j                  |              ||       t        d      D ]+  }| j                   ||      |j                  dd|             - i y )Nr   r   r   r   )r   r   r   rW   r   r   r   r   )r   r   r   r   r   r?   s         r   _check_random_sizedzTestRandom._check_random_sized   sh    II!!#'AFF299Q< QK2Y''
1qyyc17MN 	 (r   c                     | j                  t        t        d             | j                  t        t        d             | j                  t        t        d             | j                  t        t        d             y r   )r   r   r|   r   s    r   test_numpy_random_sizedz"TestRandom.test_numpy_random_sized*  sZ      Y7P-QR  Y7G-HI  Y7I-JK  Y7G-HIr   c                    d}t        d       t        |      D cg c]  }t                }}t        d       t        |      D cg c]  }t	                }}t        d       t        d       t        |      D cg c]  }t               t	               f }}| j                  |D cg c]  }|d   	 c}|       | j                  |D cg c]  }|d   	 c}|       y c c}w c c}w c c}w c c}w c c}w )Nr   r   r   r   )r   r   r   r   r   r   )r   r   r   
py_numbers
np_numberspairsps          r   test_independent_generatorsz&TestRandom.test_independent_generators0  s    A/4Qx8x!mox
81.3Ah7hlnh
7A1<A!HEHq-/<>2HEu 5u!1u 5zBu 5u!1u 5zB 97 F 5 5s   C C%<C*(C/C4c                 (   | j                  |      }t        dd      D ]-  }|j                  |      } ||      }| j                  ||       / | j	                  t
        |d       | j	                  t
        |d       | j	                  t
        |d       y)z6
        Check a getrandbits()-like function.
        r   A   i r   N)r   r   getrandbitsr   assertRaisesOverflowError)r   rb   r   r   nbitsrZ   r[   s          r   _check_getrandbitszTestRandom._check_getrandbits=  s    
   %1b\E}}U+Hu+C##Hc2 " 	-r2-w7-r2r   c                 J    | j                  t        d      t                      y )Nzrandom.getrandbits)r  r|   r   r   s    r   test_random_getrandbitsz"TestRandom.test_random_getrandbitsK      	*> ?AQASTr   Nc           	          t        |      sJ |D ][  }t        |      D 	cg c]  }	 || 	 }
}	t        |      D 	cg c]  }	|r ||d|in ||  }}	| j                  |
|||d|       ] y c c}	w c c}	w )Nr   for arguments preculpsmsgr   r   r   )r   rb   rj   argslistnitersr  r  pydtypeargsr   results	pyresultss               r   _check_distzTestRandom._check_distS  s    8}}D,1&M:MqtT{MG:"'-1"/Q ;B&$6g6vt}T"/  1##GYT>B(D $ F	 :1s
   A/A4c           
         t        |      sJ |D ]e  }t        |      D 	cg c]
  }	 |di | }
}	t        |      D 	cg c]  }	|r |di |d|in |di | }}	| j                  |
|||d|       g y c c}	w c c}	w )Nr   r  r  r   r  )r   rb   rj   
kwargslistr  r  r  r  kwargsr   r  r  s               r   _check_dist_kwargszTestRandom._check_dist_kwargs]  s    : F/4V}=}!t~f~}G="'-1"/Q >E&9699&JZSYJZZ"/  1##GYT>D(F $ H	 !=1s
   A9A>c                    | j                  |      }|+| j                  ||j                  g dt        dz  dz          || j                  ||j                  dg       || j                  ||j                  dg       yy)z0
        Check a gauss()-like function.
        Nr   r   )r         ?)g       r%  r   r   r  r%  r   )r   r  normalr   r   func2func1func0r   r   s         r   _check_gausszTestRandom._check_gaussg  s    
 s#UAHHB$%FRK  1 UAHHvh7UAHHrd3 r   c                 N    | j                  t        d      d d t                      y )Nr   r-  r~   r   r   s    r   test_random_gausszTestRandom.test_random_gaussv  s    *^4dDBRBTUr   c                 N    | j                  t        d      d d t                      y )Nzrandom.normalvariater/  r   s    r   test_random_normalvariatez$TestRandom.test_random_normalvariatey  s$     	*%;<dD*,	.r   c                 r    | j                  t        d      t        d      t        d      t	                      y )Nr   )r-  r~   r|   rz   r   r   s    r   test_numpy_normalzTestRandom.test_numpy_normal  s0    *%78#$67%&89*,	.r   c                 N    | j                  d d t        d      t                      y )Nnp.random.standard_normalr-  rz   r   r   s    r   test_numpy_standard_normalz%TestRandom.test_numpy_standard_normal  s"    $k2M&N*,	.r   c                 N    | j                  d d t        d      t                      y )Nznp.random.randnr7  r   s    r   test_numpy_randnzTestRandom.test_numpy_randn  s"    $k2C&D*,	.r   c                    | j                  |      }|+| j                  ||j                  g dt        dz  dz          || j                  ||j                  dg       || j                  ||j                  dg       yy)z9
        Check a lognormvariate()-like function.
        Nr#  r   r   r&  r'  r   )r   r  	lognormalr   r)  s         r   _check_lognormvariatez TestRandom._check_lognormvariate  s    
 s#UAKKB$%FRK  1 UAKK&:UAKK"6 r   c                 N    | j                  t        d      d d t                      y )Nzrandom.lognormvariate)r=  r~   r   r   s    r   test_random_lognormvariatez%TestRandom.test_random_lognormvariate  s$    "":.E#F#'/?/A	Cr   c                 r    | j                  t        d      t        d      t        d      t	                      y )Nnp.random.lognormal)r=  r~   r|   rz   r   r   s    r   test_numpy_lognormalzTestRandom.test_numpy_lognormal  s0    "":.C#D#,-B#C#./D#E#3#5	7r   c           	         g }t        d      D ]M  }	|j                   |d             |j                   |dd             |5|j                   |ddd             O |r| j                  |      j                  }
n| j	                  |      j
                  }
dD cg c]
  }||k  s	| }}|r|nd}|D ]  }| j                  ||
|fgd|       | j                  ||
dd	|z   fgd|       |:| j                   |dd	|z   d
       |
dd	|z   d
             | j                   |d	|z   d	d       |
d	|z   d	d              | j                  t        |d       | j                  t        |d       | j                  t        |dd       | j                  t        |dd	       |3| j                  t        |ddd       | j                  t        |ddd       yyc c}w )z4
        Check a randrange()-like function.
        r    e   Nr   )r   rE       l                    )r  r  r      r      r   r   )
r   r   r   r   r   r(   r  r   r	  
ValueError)r   r+  r*  func3r   	max_widthis_numpytpr   r   rrwwidthsr  widths                  r   _check_randrangezTestRandom._check_randrange  s   
 rAKKi()KKa+, E!Y23	 
 ##C(00B%%c*44BBTBa)m!BT "dEUB%
2$+  -UB"ah(8$+  - ''b!e)Q(?(*2q5y!(<>''a%iB(?(*1u9a(<>  	*eQ/*eR0*eQ2*eQ2j%Ar:j%Aq9 # Us   
G&Gc           	      "   t         j                  dft         j                  dffD ]h  \  }} t        |f      t              } t        ||f      t
              } t        |||f      t              }| j                  |||t               |d       j y )N                    F)	r   int64int32r   r)   r+   r.   rW  r   )r   rR  rP  cf1cf2cf3s         r   test_random_randrangez TestRandom.test_random_randrange  s    ${{E2U[[%4HIMB	$u+/0C"$By"#45C%$B}%&78C!!#sC1A1C"+U4	 Jr   c           
      2   t         j                  t        j                  dft         j                  t        j                  dffD ]R  \  }}} t	        |f      t
              } t	        ||f      t              }| j                  ||d t               |d|       T y )NrY  rZ  T)	r   r[  r   r\  r   r   r#   rW  r   )r   rR  np_tprP  r]  r^  s         r   test_numpy_randintzTestRandom.test_numpy_randint  s    &+kk288U%C&+kk288U%C%E By$u+n-C!$By/.1C!!#sD2B2Di"&/	%Er   c                    g }t        d      D ]  }|j                   |dd              | j                  t        |      t        t	        |            |       | j                  |      }dD ]+  }|d   |kD  r| j                  ||j                  |gd       - | j                  t        |dd       | j                  t        |dd       y	)
z2
        Check a randint()-like function.
        r   rE  rD  )r   rE  )   rG  )   rH  r   r&     r   N)
r   r   r   r   r   r   r  r   r	  rN  )r   rb   r   rP  r   r   r   r  s           r   _check_randintzTestRandom._check_randint  s    
 rAKKQ	*+ TCD	ND9  %=DAw"T199tfR@ >
 	*dAq1*dAq1r   c                     t         j                  dft         j                  dffD ]7  \  }} t        ||f      t              }| j                  |t               |       9 y )NrY  rZ  )r   r[  r\  r   r%   ri  r   )r   rR  rP  cfs       r   test_random_randintzTestRandom.test_random_randint  sR    ${{E2U[[%4HIMB	 r2i0B$4$6	B Jr   c                 d    | j                  |      }| j                  ||j                  g d       y)z2
        Check a uniform()-like function.
        ))      ?    .A)           @@)rn  rp  N)r   r  r   r   rb   r   r   s       r   _check_uniformzTestRandom._check_uniform  s.    
   %qyy?	Ar   c                 d    | j                  |      }t        ||      }| j                  |||       y)z
        Check any numpy distribution function. Does Numba use the same keyword
        argument names as Numpy?
        And given a fixed seed, do they both return the same samples?
        N)r   getattrr!  )r   rb   r   distrib	paramlistr   distrib_method_of_numpys          r   _check_any_distrib_kwargsz$TestRandom._check_any_distrib_kwargs  s4     s#")!W"5&=yIr   c                 J    | j                  t        d      t                      y )Nzrandom.uniform)rs  r~   r   r   s    r   test_random_uniformzTestRandom.test_random_uniform  s    J'78:J:LMr   c                 J    | j                  t        d      t                      y )Nnp.random.uniform)rs  r~   r   r   s    r   test_numpy_uniformzTestRandom.test_numpy_uniform
  s    J':;=M=OPr   c           
      n    | j                  t        dddg      t               dddddd	ddddg
       y )Nr}  lowhighr   rn  ro  )r  r  rp  rq  )rw  ry  ru   r   r   s    r   test_numpy_uniform_kwargsz$TestRandom.test_numpy_uniform_kwargs  sJ    &&/%A"C0#S1"D13	 	' 	4r   c                     | j                  |      }|| j                  ||j                  g d       | j                  ||j                  dg       y)z5
        Check a triangular()-like function.
        N)rn        @)rp  rn  )rn  rn  )rn  r  皙@)r   r  
triangular)r   r*  rO  r   r   s        r   _check_triangularzTestRandom._check_triangular  sM    
   %UALLBD.?@r   c                 ^    | j                  t        d      t        d      t                      y )Nzrandom.triangular)r  r~   r   r   r   s    r   test_random_triangularz!TestRandom.test_random_triangular!  s'    z*=>*+>?/1	3r   c                 \    t        d      fd}| j                  d |t                      y )Nnp.random.triangularc                      | ||      S r   r   )lr   mr  s      r   <lambda>z2TestRandom.test_numpy_triangular.<locals>.<lambda>(  s    :aA+>r   )r   r  r   )r   fixed_triangularr  s     @r   test_numpy_triangularz TestRandom.test_numpy_triangular&  s+     !78
>t%57G7IJr   c                    | j                  |      }|| j                  ||j                  g d       |(| j                   |d      |j                  dd             |`| j	                  t
        |dd       | j	                  t
        |dd       | j	                  t
        |dd       | j	                  t
        |dd       |/| j	                  t
        |d       | j	                  t
        |d       yy)z7
        Check a gammavariate()-like function.
        N)r%        @)r   rn  r  rn  r   r         )r   r  r   r   r	  rN  )r   r*  r+  r   r   s        r   _check_gammavariatezTestRandom._check_gammavariate+  s    
   %UANNAC##E#JsC0HIj%c:j%c:j%s;j%d;j%5j%6 r   c                 L    | j                  t        d      d t                      y )Nzrandom.gammavariate)r  r~   r   r   s    r   test_random_gammavariatez#TestRandom.test_random_gammavariate@  s       ,A!BD!1!3	5r   c                     | j                  t        d      t        d      t                      | j                  d t        d      t                      y )Nnp.random.gammanp.random.standard_gamma)r  r~   r|   r   r   s    r   test_numpy_gammazTestRandom.test_numpy_gammaD  sH      ,=!>!*+<!=!1!3	5 	  !*+E!F!1!3	5r   c                 "   | j                  |      }| j                  ||j                  dg       | j                  t        |dd       | j                  t        |dd       | j                  t        |dd       | j                  t        |dd       y)z6
        Check a betavariate()-like function.
        r  r   r   r  N)r   r  betavariater	  rN  rr  s       r   _check_betavariatezTestRandom._check_betavariateL  s|    
   %q}}zl;*dC5*dC5*dD#6*dC6r   c                 J    | j                  t        d      t                      y )Nzrandom.betavariate)r  r~   r   r   s    r   test_random_betavariatez"TestRandom.test_random_betavariateY  s    
+? @BRBTUr   c                 J    | j                  t        d      t                      y )Nnp.random.beta)r  r~   r   r   s    r   test_numpy_betazTestRandom.test_numpy_beta\  s    
+; <>N>PQr   c                 b    | j                  |      }| j                  ||j                  dg       y)z:
        Check a vonmisesvariate()-like function.
        r  N)r   r  vonmisesvariaterr  s       r   _check_vonmisesvariatez!TestRandom._check_vonmisesvariate_  s.       %q00:,?r   c                 J    | j                  t        d      t                      y )Nzrandom.vonmisesvariate)r  r~   r   r   s    r   test_random_vonmisesvariatez&TestRandom.test_random_vonmisesvariatef  s    ##J/G$H$4$6	8r   c                 J    | j                  t        d      t                      y )Nnp.random.vonmises)r  r~   r   r   s    r   test_numpy_vonmiseszTestRandom.test_numpy_vonmisesj  s    ##J/C$D$4$6	8r   c           	          | j                  |      }dD ]>  }t        d      D ].  }| j                   ||      |j                  d|z        d       0 @ y)z
        Check a expovariate()-like function.  Note the second argument
        is inversed compared to np.random.exponential().
        )g?r%  rn  r   r   double)r  N)r   r   r   exponential)r   rb   r   r   lambdr   s         r   _check_expovariatezTestRandom._check_expovariaten  sW    
 s#$E1X''UQ]]1u95M-5 ( 7  %r   c                 J    | j                  t        d      t                      y )Nzrandom.expovariate)r  r|   r   r   s    r   test_random_expovariatez"TestRandom.test_random_expovariatey  r  r   c                     | j                  |      }|| j                  ||j                  g d       || j                  ||j                  dg       yy)z6
        Check a exponential()-like function.
        N)r'  r   rn  r   )r   r  r  )r   r+  r,  r   r   s        r   _check_exponentialzTestRandom._check_exponential|  sT     s#UAMM3KLUAMMB48 r   c                 ^    | j                  t        d      t        d      t                      y )Nnp.random.exponential)r  r|   rz   r   r   s    r   test_numpy_exponentialz!TestRandom.test_numpy_exponential  s'    	*A B +,C D 0 2	4r   c                 L    | j                  d t        d      t                      y )Nnp.random.standard_exponential)r  rz   r   r   s    r   test_numpy_standard_exponentialz*TestRandom.test_numpy_standard_exponential  s!     +,L M 0 2	4r   c                 d    | j                  |      }| j                  ||j                  ddg       y)z8
        Check a paretovariate()-like function.
        r'  )r  N)r   r  paretovariaterr  s       r   _check_paretovariatezTestRandom._check_paretovariate  s/    
   %q0@Ar   c                 J    | j                  t        d      t                      y )Nzrandom.paretovariate)r  r|   r   r   s    r   test_random_paretovariatez$TestRandom.test_random_paretovariate  s    !!),B"CEUEWXr   c                 Z    t        d      fd}| j                  |t                      y )Nnp.random.paretoc                      |       dz   S )Nr   r   )r   paretos    r   r  z.TestRandom.test_numpy_pareto.<locals>.<lambda>  s    Sr   )r|   r  r   )r   fixed_paretor  s     @r   test_numpy_paretozTestRandom.test_numpy_pareto  s'    -.0!!,0@0BCr   c                     | j                  |      }|| j                  ||j                  dg       |9t        d      D ]*  }| j	                   |d      |j                  dd             , yy)z9
        Check a weibullvariate()-like function.
        Nr  r   r  r   )r   r  weibullvariater   r   )r   r*  r+  r   r   r   s         r   _check_weibullvariatez TestRandom._check_weibullvariate  sr    
   %UA$4$4zlC1X''c
()(8(8c(BD  r   c                 L    | j                  t        d      d t                      y )Nzrandom.weibullvariate)r  r~   r   r   s    r   test_random_weibullvariatez%TestRandom.test_random_weibullvariate  s!    "":.E#F#')9);	=r   c                 L    | j                  d t        d      t                      y )Nnp.random.weibull)r  r|   r   r   s    r   test_numpy_weibullzTestRandom.test_numpy_weibull  s     ""43F)G#3#5	7r   c           	         t        d      }| j                  t               d      }| j                  ||j                  dg       dD ]  }| j                   ||d      d       | j                   ||d      |       dD ]  } |||      }|dkD  r
||z
  }d	|z
  }| j                  |d       | j                  ||       ||z  }d
|z  t        j                  |      z  }| j                  |||z
  |||f       | j                  |||z   |||f         | j                  t        |dd       | j                  t        |dd       | j                  t        |dd       y )Nnp.random.binomialr   )   g      ?)d     '  r   r   )	g-C6?皙?皙?g9?r%  g㈵ ?皙??H.?r%  r   r   r   r   皙皙?)r~   r   r   r  binomialr   assertGreaterEqualassertLessEqualmathsqrtr	  rN  )r   r  r   r?   r  rZ   tols          r   test_numpy_binomialzTestRandom.test_numpy_binomial  sW   23/1151::
|<#AXa-q1Xa-q1PQNs7AAAA''1-$$Q*q5!ediil*''8c>Aq!9E$$Q3Aq	B Q $ 	*hC8*hD9*hC8r   c                     t        d      }| j                  t                     }| j                  |t	        j
                  t        |      ddg       y )Nnp.random.chisquarer  r  )r|   r   r   r  	functoolspartialr   )r   	chisquarer   s      r   test_numpy_chisquarezTestRandom.test_numpy_chisquare  sI    34	  !1!34"**<; &)	+r   c                     t        d      }| j                  t                     }| j                  |t	        j
                  t        |      ddg       y )Nnp.random.fr%  rn  )rn  r  )r~   r   r   r  r  r  r   )r   fr   s      r   test_numpy_fzTestRandom.test_numpy_f  sG    }%  !1!34I--dA6$j1	3r   c                    t        d      }| j                  t        |d       | j                  t        |d       | j                  t        |d       d}t        |      D cg c]
  } |d       }}| j	                  |dg|z         t        |      D cg c]
  } |d       }}|j                  d      }| j                  ||d	z         | j                  ||       | j                  |D cg c]
  }|d
kD  s	| c}       t        |      D cg c]
  } |d       }}| j                  |D cg c]
  }|dkD  s	| c}       t        |      D cg c]
  } |d       }}| j                  |D cg c]
  }|dkD  s	| c}       t        |      D cg c]
  } |d       }}| j                  |D cg c]
  }|dkD  s	| c}       y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Nnp.random.geometricg      r   gjt?   r   r   r  r   r  r  rh  g{Gz?2   gV瞯<        )
r|   r	  rN  r   r   countr  
assertLessassertFalse
assertTrue)r   geomr   r   r   r?   s         r   test_numpy_geometriczTestRandom.test_numpy_geometric  s   ./*dD1*dC0*dE2 %a)1T#Y)A37+ %a)1T#Y)GGAJ16*1Q3Q!d(!Q34 %a)1T#Y)A/AqQA/0!&q*AT$Z*A0AqRA01"'(+(QT%[(+A3AqUA34 *) 4)/*0+3sN    GG,
G7GG/
G :G G%2
G*=G*G/5
G4 G4c                     t        d      }| j                  t                     }| j                  ||j                  ddg       y )Nnp.random.gumbelr   r         r  )r~   r   r   r  gumbel)r   r  r   s      r   test_numpy_gumbelzTestRandom.test_numpy_gumbel  s<    .//12J+DEr   c           	      f    | j                  t        dddg      t               dddddd	dg
       y )Nr  locscaler  r   r   )r  r  r  r  rv  rw  r  r   s    r   test_numpy_gumbel_kwargsz#TestRandom.test_numpy_gumbel_kwargs  sC    &&.0@A"S1#c24	 	' 	5r   c                 `   t        d      }| j                  t                     }| j                  ||j                  ddgd       t        d      D cg c]  } |ddd       }}| j                  t        d |D              |       | j                  t        j                  |      d	       | j                  t        j                  |      d
       t        d      D cg c]  } |ddd       }}| j                  t        d |D              |       | j                  t        j                  |      d       t        d      D cg c]  } |ddd       }}| j                  t        d |D              |       | j                  t        j                  |      d       y c c}w c c}w c c}w )Nnp.random.hypergeometricr  rG  r   )rG  r  r      r&  r  r  c              3   4   K   | ]  }|d k\  xr |dk    ywr   r  Nr   .0r   s     r   	<genexpr>z7TestRandom.test_numpy_hypergeometric.<locals>.<genexpr>  !     ;AAF/qCx/   g      D@g      N@順 c              3   4   K   | ]  }|d k\  xr |dk    ywr  r   r  s     r   r  z7TestRandom.test_numpy_hypergeometric.<locals>.<genexpr>  r  r        $@c              3   4   K   | ]  }|d k\  xr |dk    ywr  r   r  s     r   r  z7TestRandom.test_numpy_hypergeometric.<locals>.<genexpr>  r  r  g     V@)r   r   r   r  hypergeometricr   r  allr  r   meanr  )r   hgr   r   s       r   test_numpy_hypergeometricz$TestRandom.test_numpy_hypergeometric  si   34/12Q--*,<= " 	 	$ +0*5*QRdC *5;;;Q?
D1RWWQZ.,1#J7JqRfc"J7;;;Q?RWWQZ.,1#J7JqRc"J7;;;Q?
D1 6 8 8s   F!F&F+c                 $   | j                  t                     }| j                  t        d      |j                  ddg       | j                  t        d      |j                  ddg       | j                  t        d      |j                  dg       y )Nnp.random.laplacer   r  r   r  r   )r   r   r  r~   laplacer|   rz   r   r   s     r   test_numpy_laplacezTestRandom.test_numpy_laplace  s|    /12$78!))$k2	4#67 '*	,%89199rdKr   c                 $   | j                  t                     }| j                  t        d      |j                  ddg       | j                  t        d      |j                  ddg       | j                  t        d      |j                  dg       y )Nnp.random.logisticr   r  r   r!  r   )r   r   r  r~   logisticr|   rz   r#  s     r   test_numpy_logisticzTestRandom.test_numpy_logistic  s|    /12$891::$k2	4#78!** '*	,%9:AJJMr   c                    | j                  t                     }t        d      }| j                  ||j                  g dd       | j                  t               d      }| j                  t        d      D cg c]
  } |d       c}g d	       | j                  t        |d
       | j                  t        |d       | j                  t        |d       y c c}w )Nnp.random.logseries)r  )gGz?)r  r  r&  r   rW   r   g{?)
ivxi- r  i  in i)l   &ci܀oirH i  r   r  r  )	r   r   r|   r  	logseriesr   r   r	  rN  )r   r   r-  r   s       r   test_numpy_logserieszTestRandom.test_numpy_logseries"  s    /1234	AKK5 " 	 	$
 /1:eBiHi)O4iHC	D 	*i5*i6*i5 Is   9Cc                     | j                  t                     }t        d      }| j                  ||j                  g dd       | j                  t        |d       y )Nnp.random.poisson)r   r'  r   )r  )g     $@r  r&  r  )r   r   r|   r  poissonr	  rN  )r   r   r2  s      r   test_numpy_poissonzTestRandom.test_numpy_poisson2  sV    /12/0!))D " 	 	$ 	*gt4r   c           	         | j                  t               d       t        d      }| j                  t	        d      D cg c]  } |dd       c}g d       | j                  t	        d      D cg c]  } |dd       c}g d       | j                  t	        d      D cg c]  } |dd       c}g d	       t        j                  t	        d
      D cg c]  } |dd       c}      }| j                  |d       | j                  |d       | j                  t        |dd       | j                  t        |dd       | j                  t        |dd       | j                  t        |dd       y c c}w c c}w c c}w c c}w )Nr   np.random.negative_binomialr   r  )
r   r   r   rE  r   r   r   r   r   r   r  )
7   G   8   9   r8  r8  "   r6  e   C   r  )
i#  i!  iy#  iL$  i"  i#  i#  iF"  i"  i#  r  i ʚ;g   | Bg   $s Br%  r   r  r  )r   r   r~   r   r   r   r  assertGreaterr  r	  rN  )r   negbinr   r  s       r   test_numpy_negative_binomialz'TestRandom.test_numpy_negative_binomial;  s]   +-q19:59=9a&S/9=7	959=9a&S/9=B	DU2Y?Y&s+Y?8	9 GG#Bi)' J,') *1j):&*fa5*fb#6*fb$7*fb#6 >=?)s   E40E9"E>Fc                     | j                  t                     }t        d      }| j                  ||j                  g d       | j                  t        |d       | j                  t        |d       y )Nnp.random.power)r+  r'  )r  )g      @r   r  )r   r   r|   r  powerr	  rN  )r   r   rB  s      r   test_numpy_powerzTestRandom.test_numpy_powerN  s^    /12+,9	;*eS1*eT2r   c                 8   | j                  t                     }t        d      }t        d      }| j	                  ||j
                  g d       | j	                  ||j
                  dg       | j                  t        |d       | j                  t        |d       y )Nnp.random.rayleigh)r+  r  )g      9@)rq  r   r   r  )r   r   r|   rz   r  rayleighr	  rN  )r   r   	rayleigh1	rayleigh0s       r   test_numpy_rayleighzTestRandom.test_numpy_rayleighV  s    /1223	 45	AJJ9	;AJJ5*i5*i6r   c                     | j                  t                     }t        d      }| j                  ||j                  dg       y )Nnp.random.standard_cauchyr   )r   r   rz   r  standard_cauchy)r   r   cauchys      r   test_numpy_standard_cauchyz%TestRandom.test_numpy_standard_cauchy`  s;    /1289!2!2RD9r   c                     | j                  t                     }t        d      }t        j                  t        d      D cg c]
  } |d       c}      }| j                  t        |      d       y c c}w )Nnp.random.standard_trG  rE  r%  )r   r   r|   r   r  r   r  abs)r   r   
standard_tr   avgs        r   test_numpy_standard_tz TestRandom.test_numpy_standard_te  s_       !1!3456
ggeDk:kz!}k:;C#& ;s   A3c                 J   | j                  t                     }t        d      }| j                  ||j                  ddg       | j                  t        |dd       | j                  t        |dd       | j                  t        |dd       | j                  t        |dd       y )Nnp.random.waldr$  )r         @r   r   r  )r   r   r~   r  waldr	  rN  )r   r   rY  s      r   test_numpy_waldzTestRandom.test_numpy_waldo  s    /12*+qvv
J'?@*dC5*dD#6*dC5*dC6r   c           	      *   t        dddg      }| j                  |t               dddddddg	       | j                  t        |d
d       | j                  t        |dd       | j                  t        |dd
       | j                  t        |dd       y )NrW  r  r  rY  r   )r  r  r   rX  r  r   r  )ru   ry  r   r	  rN  )r   numba_versions     r   test_numpy_wald_kwargsz!TestRandom.test_numpy_wald_kwargsx  s    '(867:KL&&}'7'9/5;>2M;>2M2O 	' 	P
 	*mS#>*mT3?*mS#>*mS$?r   c                     | j                  t                     }t        d      }| j                  ||j                  ddgd       dD ]  }| j                  t        ||        y )Nnp.random.zipfr  r  r  r&  )r   r%  r   r  )r   r   r|   r  zipfr	  rN  )r   r   r`  vals       r   test_numpy_zipfzTestRandom.test_numpy_zipf  s]    /12)*qvv'7D(Cj$4 )r   c                    t        j                  d      t        j                  d      j                  d      g}|r| j                  |      }n| j	                  |      }|D ]x  }t        d      D ]h  }|j                         }|j                         }	 ||       |st        |j                        dk(  sF|j                  |	       | j                  ||	       j z |d   }|j                         }
 |t        |
             | j                  t        |      t        |
             | j                  t        |      t        |
             | j!                         5   |t        d             ddd       y# 1 sw Y   yxY w)	z=
        Check a shuffle()-like function for arrays.
        rg      )rF  rh  r   r   r   s   xyzN)r   arangereshaper   r   r   copyr   shapeshuffler   
memoryviewassertNotEqualr   r   sortedassertTypingError)r   rb   r   rQ  arrsr   r   r   r[   rZ   r"   s              r   r   zTestRandom._check_shuffle  s&    		"ryy}44V<=""3'A$$S)AA1Xffh668S	s177|q0IIh'++C:   GFFHZ]DGT!W-F1I.##%F#$ &%%s   E55E>c                 L    | j                  t        d      t               d       y )Nzrandom.shuffleF)r   r|   r   r   s    r   test_random_shufflezTestRandom.test_random_shuffle  s    I&679I9KUSr   c                 L    | j                  t        d      t               d       y )Nznp.random.shuffleT)r   r|   r   r   s    r   test_numpy_shufflezTestRandom.test_numpy_shuffle  s    I&9:<L<NPTUr   c                    dt               z  }t               }t        d      D ]  }t        j                  t
        j                  d|gt        j                  t        j                        }|j                         \  }}|j                  dk7  r*t        d|j                  d|j                         d      |j                  t        |j                                       | j                  t!        |      d|       y	)
zI
        Check that the state is properly randomized at startup.
        zif 1:
            from numba.tests import test_random
            func = getattr(test_random, %(func_name)r)
            print(func(*%(func_args)r))
            r   z-c)stdoutstderrr   zprocess failed with code z: stderr follows

N)re   r   r   
subprocessPopensys
executablePIPEcommunicate
returncodeAssertionErrordecodeaddfloatstripr   r   )	r   	func_name	func_argsri   numbersr   popenouterrs	            r   _check_startup_randomnessz$TestRandom._check_startup_randomness  s     8	
 %qA$$cnndD%A,6OOJOOUE((*HC1$$(-(8(8#**,&H I IKKciik*+  	Wq'2r   c                 (    | j                  dd       y )Nr   r   r  r   s    r   test_random_random_startupz%TestRandom.test_random_random_startup  s    &&;r   c                 (    | j                  dd       y )Nrandom_gaussr$  r  r   s    r   test_random_gauss_startupz$TestRandom.test_random_gauss_startup      &&~zBr   c                 (    | j                  dd       y )Nr   r   r  r   s    r   test_numpy_random_startupz$TestRandom.test_numpy_random_startup  s    &&~r:r   c                 (    | j                  dd       y )Nnumpy_normalr$  r  r   s    r   test_numpy_gauss_startupz#TestRandom.test_numpy_gauss_startup  r  r   c                    t        d      }| j                  t                     }dD ]  }t        j                  |      }|j                         }| j                   ||      |j                  |             | j                   ||      |j                  |             | j                  ||        t        j                  d      j                  dd      t        j                  d      j                  ddd      t        j                  d      j                  dddd      g}|D ]K  }|j                         }| j                   ||      |j                  |             | j                  ||       M y )	Nznp.random.permutation)rE  r      rg  r   r   rE     r   $   )	r|   r   r   r   re  rg  r   permutationrf  )r   rb   r   sr   r"   rn  s          r   test_numpy_random_permutationz(TestRandom.test_numpy_random_permutation  s(   01/12 A		!AA##DGQ]]1-=>##DGQ]]1-=>##Aq) ! 		"%%a+		"%%aA.		"%%aAq13 AA##DGQ]]1-=>##Aq) r   )r   r     Nr   )Sr   r   r   r   r   r   r   r   r  r  r  r  r!  r-  r0  r2  r4  r8  r:  r=  r?  rB  rW  r`  rc  ri  rl  rs  ry  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.  r3  r?  rC  rJ  rO  rU  rZ  r]  rb  r   rp  rr  r  r  r  r  r  r  r   r   r   r   r      s   K<KOJC3U :;48F CD;?H4V....7C7":H4/2&C
A	JNQ4	A3
K
7*557VR@88	7U94
4
BYD
D=792+35,F
52&LN6 57&37:
'7
@5%6TV3(<C;C*r   r   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&y%)&TestRandomArrayszA
    Test array-producing variants of np.random.* functions.
    c                 L    d|}dj                  dd |       }t        ||      S )N
np.random., abcd)rp   rk   )r   funcnamenargsqualnamerh   s        r   _compile_array_distz$TestRandomArrays._compile_array_dist  s+    %-/IIfVen-	Xy11r   c                    | j                  |t        |      dz         }| j                  t                     }t	        ||      }dD ]  }||fz   } || } || }	|j
                  t        j
                  d      k(  r=|	j
                  t        j
                  d      k(  r|j                  |	j
                        }| j                  ||	dd        |dz   } || } || }	| j                  ||	dd       y	)
zM
        Check returning an array according to a given distribution.
        r   rF  r   r   r\  r[  r  rE  r  r  r   N)	r  r   r   r   ru  r   r   astyper   )
r   r  scalar_argscfuncr   rj   r6   r  rZ   r[   s
             r   _check_array_distz"TestRandomArrays._check_array_dist  s     ((3{3Ca3GH/12H%D$(Dt}H,C"((7"33II'!22#??3995##Hcq#I   W$4=Tl#H1Er   c                    | j                  |t        |      dz         }| j                  t                     }t	        |d      ||z   fd}|dz   } |       } || }	| j                  ||	dd       dD ]g  }
||
fz   }t        j                  |
      }|j                  }t        |j                        D ]  } |       ||<     || }	| j                  ||	dd       i y	)
z
        Check returning an array according to a given gamma distribution,
        where we use CPython's implementation rather than NumPy's.
        r   r   c                        S r   r   )_argsrj   pyfunc_argss    r   r  z:TestRandomArrays._check_array_dist_gamma.<locals>.<lambda>
  s
    &+"6r   r   r  rE  r  r  N)r  r   r   r   ru  r   r   emptyflatr   r6   )r   r  r  extra_pyfunc_argsr  r   pyrandomr  rZ   r[   r6   expected_flatidxrj   r  s                @@r   _check_array_dist_gammaz(TestRandomArrays._check_array_dist_gamma  s    
 ((3{3Ca3GH  !1!34N+!$556W$:Tl#H1ED$(Dxx~H$MMMX]]+%-Zc" ,,C##Hcq#I  r   c                 4   t         j                  d        }| j                  |t        |      dz         }d|}dj	                  ddt        |             }t        ||      }dD ]  }||fz   }	 |         ||	 }
 |        t        j                  ||
j                        }|j                  }t        |j                        D ]
  } || ||<    | j                  ||
d	d
         |        |dz   }	 || } |         ||	 }
| j                  ||
d	d
       y)a  
        Check function returning an array against its scalar implementation.
        Because we use the CPython gamma distribution rather than the NumPy one,
        distributions which use the gamma distribution vary in ways that are
        difficult to compare. Instead, we compile both the array and scalar
        versions and check that the array is filled with the same values as
        we would expect from the scalar version.
        c                  B    t         j                  j                  d       y )Ni  )r   r   rW   r   r   r   resetz6TestRandomArrays._check_array_dist_self.<locals>.reset"  s    IINN4 r   r   r  r  r  Nr  r   r  rE  r  r   )numbar   r  r   rp   rk   r   r  r   r  r   r6   r   )r   r  r  r  
array_funcr  rh   scalar_funcr6   r  r[   rZ   r  r  s                 r   _check_array_dist_selfz'TestRandomArrays._check_array_dist_self  s)    
	! 
	! --hK8H18LM
%-/IIf%6c+&678	#Hi8D$(DGd#CG xxCII6H==DX]]+'5S	 ,##Hcq#I   	W$,$#H1Er   c                    | j                  dd      }d\  }}d} ||||      }| j                  |t        j                         | j	                  |j
                  |       | j                  |j                  t        j                  d      t        j                  d      f       | j                  t        j                  ||k\               | j                  t        j                  ||k               ||z   dz  }||z
  dz  }| j                  |j                         ||z
         | j                  |j                         ||z          y )	Nr   r   )r  r  r  r  r\  r[  r   rg  )r  r   r   ndarrayr   rh  assertInr   r  r  r  r  r  )r   r  r  r  r6   resr  r  s           r   rc  z#TestRandomArrays.test_numpy_randint@  s   ((A6	TCt$c2::.D)cii"((7"3RXXg5F!GHscz*+sTz*+d
aczR
D3J7SXXZ4r   c                    | j                  dd      }d} ||      }| j                  |t        j                         | j	                  |j
                  |       | j	                  |j                  t        j                  d             | j                  t        j                  |dk\               | j                  t        j                  |dk               | j                  t        j                  |dk               | j                  t        j                  |dk\               |j                         }| j                  |d	       | j                  |d
       y )Nr   r   r  float64r   r   r  r  g?g?)r  r   r   r  r   rh  r   r  r  anyr  r  r  )r   r  r6   r  r  s        r   test_numpy_random_randomz)TestRandomArrays.test_numpy_random_randomP  s    ((15Dkc2::.D)BHHY$78scz*+sSy)*scz*+scz*+xxzd+T4(r   c                 (    | j                  dd       y )Nbetar  r  r   s    r   r  z TestRandomArrays.test_numpy_betad  s    ##FJ7r   c                 (    | j                  dd       y )Nr  )rg  r%  r  r   s    r   r  z$TestRandomArrays.test_numpy_binomialg  s    z95r   c                 (    | j                  dd       y )Nr  r  r  r   s    r   r  z%TestRandomArrays.test_numpy_chisquarej  s    ##K8r   c                 (    | j                  dd       y )Nr  r  r  r   s    r   r  z'TestRandomArrays.test_numpy_exponentialm  s    }f5r   c                 (    | j                  dd       y )Nr  r  r  r   s    r   r  zTestRandomArrays.test_numpy_fp  s    ##C4r   c                 *    | j                  ddd       y )Ngamma)r   r   r   r  r   s    r   r  z!TestRandomArrays.test_numpy_gammas  s    $$Wj"=r   c                 (    | j                  dd       y )N	geometricr  r  r   s    r   r  z%TestRandomArrays.test_numpy_geometricv      {F3r   c                 (    | j                  dd       y )Nr  rn  r%  r  r   s    r   r  z"TestRandomArrays.test_numpy_gumbely      x4r   c                 (    | j                  dd       y )Nr  r  r  r   s    r   r  z*TestRandomArrays.test_numpy_hypergeometric|  s    /1ABr   c                 (    | j                  dd       y )Nr"  r  r  r   s    r   r$  z#TestRandomArrays.test_numpy_laplace      y*5r   c                 (    | j                  dd       y )Nr'  r  r  r   s    r   r(  z$TestRandomArrays.test_numpy_logistic  s    z:6r   c                 (    | j                  dd       y )Nr<  )rn  r   r  r   s    r   rB  z%TestRandomArrays.test_numpy_lognormal  s    {J7r   c                 (    | j                  dd       y )Nr-  rF  r  r   s    r   r.  z%TestRandomArrays.test_numpy_logseries  r  r   c                 (    | j                  dd       y )Nr(  )r%  r   r  r   s    r   r4  z"TestRandomArrays.test_numpy_normal  r  r   c                 (    | j                  dd       y )Nr  r'  r  r   s    r   r  z"TestRandomArrays.test_numpy_pareto  s    x0r   c                 (    | j                  dd       y )Nr2  rF  r  r   s    r   r3  z#TestRandomArrays.test_numpy_poisson  s    y&1r   c                 (    | j                  dd       y )NrB  rF  r  r   s    r   rC  z!TestRandomArrays.test_numpy_power  s    w/r   c                      t        d      t              } |ddd      \  }}| j                  |j                  d       | j	                  ||       y NTrc   *   r   r   r  )r   r\   r   rh  r   r   r  rZ   r[   s       r   test_numpy_randz TestRandomArrays.test_numpy_rand  sI    "T"#34b!Q#F+#.r   c                      t        d      t              } |ddd      \  }}| j                  |j                  d       | j	                  ||       y r  )r   r`   r   rh  r   r  s       r   r:  z!TestRandomArrays.test_numpy_randn  sI    "T"#45b!Q#F+#.r   c                 (    | j                  dd       y )NrG  rF  r  r   s    r   rJ  z$TestRandomArrays.test_numpy_rayleigh  s    z62r   c                 (    | j                  dd       y )NrM  r   r  r   s    r   rO  z+TestRandomArrays.test_numpy_standard_cauchy      0"5r   c                 (    | j                  dd       y )Nstandard_exponentialr   r  r   s    r   r  z0TestRandomArrays.test_numpy_standard_exponential  s    5r:r   c                 *    | j                  ddd       y )Nstandard_gammar1  r  r  r   s    r   test_numpy_standard_gammaz*TestRandomArrays.test_numpy_standard_gamma  s    $$%5vvFr   c                 (    | j                  dd       y )Nr^   r   r  r   s    r   r8  z+TestRandomArrays.test_numpy_standard_normal  r  r   c                 (    | j                  dd       y )Nr  )rn  r  r  r  r   s    r   r  z&TestRandomArrays.test_numpy_triangular  s    |_=r   c                 (    | j                  dd       y )Nr   r  r  r  r   s    r   r~  z#TestRandomArrays.test_numpy_uniform  r  r   c                 (    | j                  dd       y )NrY  r  r  r   s    r   rZ  z TestRandomArrays.test_numpy_wald  s    vz2r   c                 (    | j                  dd       y )Nvonmisesr  r  r   s    r   r  z$TestRandomArrays.test_numpy_vonmises  s    ##J
;r   c                 (    | j                  dd       y )Nr`  r  r  r   s    r   rb  z TestRandomArrays.test_numpy_zipf  s    vv.r   N)'r   r   r   r   r  r  r  r  rc  r  r  r  r  r  r  r  r  r  r  r$  r(  rB  r.  r4  r  r3  rC  r  r:  rJ  rO  r  r  r8  r  r~  rZ  r  rb  r   r   r   r  r    s    2
F*J0%FN5 )(86965>45C67845120//36;G6>63</r   r  c                   h    e Zd ZdZddZd Zd Zd Zd Zd Z	ddZ
d	 Zd
 Zd Zd Zd Zd Zd Zy)TestRandomChoicez 
    Test np.random.choice.
    c                 6   t        |      }t        |      }| j                  ||       | j                  t        |      t	        |             |r&| j                  t        |      t        |      |       y| j                  t        |      t        |      |       y)zD
        Check basic expectations about a batch of samples.
        N)r   r  rk  rl  r   r  r   r   )r   popr  r:   spopsress         r   _check_resultszTestRandomChoice._check_results  su     3x3xT4(F3Kc3OOCIs3x5 SYC#6r   c                    | j                  t        |      t        |      dz         t        |      t        |      z  }t        j                  |      }|D ]1  }||   }| j                  ||dz         | j	                  ||dz         3 y)5
        Check distribution of some samples.
        r  r%  r   N)r  r   collectionsCounterr  )r   r  samplesexpected_frequencyr-   valuer?   s          r   r  zTestRandomChoice._check_dist  s    
 	Gc#hn= \CH4(E%A##A'9C'?@  $6$<= r   c                     g }t        |      |k  r,|t         |       j                        z  }t        |      |k  r,|d| S )zk
        Accumulate array results produced by *func* until they reach
        *nresults* elements.
        N)r   r   r  )r   rb   nresultsr  s       r   _accumulate_array_resultsz*TestRandomChoice._accumulate_array_results  sD    
 #h!4$$C #h!9H~r   c                      t        d      t              }t        |      }t        |      D cg c]
  } ||       }}| j	                  ||       t        |dz        D cg c]
  } ||       }}| j                  ||       yc c}w c c}w )z.
        Check choice(a) against pop.
        Trc   r  N)r   r2   r   r   r  r  )r   r   r  r  r?   r   r  dists           r   _check_choice_1z TestRandomChoice._check_choice_1  s     #T"=1H!&q*AuQx*C%"'C.1.Qa.1d# +1s   B"Bc                 T    d}t        t        |            }| j                  ||       y)z"
        Test choice(int)
        r  N)r   r   r  r   r?   r  s      r   test_choice_scalar_1z%TestRandomChoice.test_choice_scalar_1  s&     58nQ$r   c                 ^    t        j                  d      dz  dz   }| j                  ||       y)z$
        Test choice(array)
        r  r   r  N)r   re  r  r   r  s     r   test_choice_array_1z$TestRandomChoice.test_choice_array_1  +     iima#%S#&r   c                     t        |      }t         |       j                        }| j                  |||       | j	                  ||dz        }| j                  ||       y)zP
        Check array results produced by *func* and their distribution.
        r  N)r   r   r  r  r  r  )r   rb   r  r:   r?   r  r  s          r   _check_array_resultsz%TestRandomChoice._check_array_results
  sU     H46;;Cg.--dAG<d#r   c                 "    t        d      t              t        |      }|dz
  d|dz
  dz  f|dz  g}|D ]S         }t        t              rnf}| j                  |j                  |       | j                  fd|       U y)z4
        Check choice(a, size) against pop.
        Trc   r   r   r   c                              S r   r   r   r  r6   s   r   r  z2TestRandomChoice._check_choice_2.<locals>.<lambda>$  s    eAtnr   N)r   r8   r   
isinstancer   r   rh  r  )	r   r   r  r?   sizesr  expected_shaper  r6   s	    `     @@r   _check_choice_2z TestRandomChoice._check_choice_2  s     #T"=1H R!a!e\*AF3D4.C%/e%<T4'NSYY7%%&<cB r   c                 V    d}t        j                  |      }| j                  ||       y)z(
        Test choice(int, size)
        r  Nr   re  r  r  s      r   test_choice_scalar_2z%TestRandomChoice.test_choice_scalar_2&  &     iilQ$r   c                 ^    t        j                  d      dz  dz   }| j                  ||       y)z*
        Test choice(array, size)
        r  r   r  Nr!  r  s     r   test_choice_array_2z$TestRandomChoice.test_choice_array_2.  r  r   c                   	
  t        d      t              	t        |      }|dz
  d|dz
  dz  fg}ddg}|D ]D  
dD ]=  } 	
|      }t        
t              r
n
f}| j                  |j                  |       ? F |D ]  
| j                  	
fd|        |D ]  
| j                  	
fd	|d        |dz   d|dz  dz   ffD ]*  
| j                  t              5   	
d       d
d
d
       , y
# 1 sw Y   7xY w)z=
        Check choice(a, size, replace) against pop.
        Trc   r   r   r   F)TFc                        d      S )NTr   r  s   r   r  z2TestRandomChoice._check_choice_3.<locals>.<lambda>I  s    eAtT.Br   c                        d      S )NFr   r  s   r   r  z2TestRandomChoice._check_choice_3.<locals>.<lambda>L  s    eAtU.Cr   N)
r   r;   r   r  r   r   rh  r  r	  rN  )r   r   r  r?   r  replacesr:   r  r  r  r6   s    `       @@r   _check_choice_3z TestRandomChoice._check_choice_35  s    #T"=1H R!a!e\*+%= D(AtW-)3D%)@tg  N; )  D%%&BCH  D%%&CS%P  UQQ
O,D"":.au% /. -..s   %C;;D	c                 V    d}t        j                  |      }| j                  ||       y)z1
        Test choice(int, size, replace)
        r  Nr   re  r*  r  s      r   test_choice_scalar_3z%TestRandomChoice.test_choice_scalar_3S  r#  r   c                 ^    t        j                  d      dz  dz   }| j                  ||       y)z3
        Test choice(array, size, replace)
        r  r   r  Nr,  r  s     r   test_choice_array_3z$TestRandomChoice.test_choice_array_3[  r  r   c                    t        d      d        }t        j                  j                  dd      j	                  t        j
                        }|j                         }|j                  d|      }|j                         } |d|      }t        j                  j                  ||       t        j                  j                  ||       t        j                  j                  ||       y )NTrc   c                     t         j                  j                  d       t        j                  | dft         j                        }t        |       D ]&  }t         j                  j                  |dd      ||<   ( |S )Ni9  r   F)r   r   rW   r  r\  r   r1   )n_to_returnchoice_arrayr  r   s       r   numba_randsz>TestRandomChoice.test_choice_follows_seed.<locals>.numba_randse  s[    IINN4 ((K+RXX6C;')),5AA (Jr   i,  r  r5   rE  )
r   r   r   r   r  r\  rg  py_functestingassert_allclose)r   r4  r3  tmp_nprZ   tmp_nbr[   s          r   test_choice_follows_seedz)TestRandomChoice.test_choice_follows_seedb  s     
d		 
	 yy((4(8??I""$&&q&1""$!V$


""8S1


""<8


""<8r   N)T)r   r   r   r   r  r  r  r  r  r  r  r  r"  r%  r*  r-  r/  r:  r   r   r   r  r    sN    7">	$%'$C$%'&<%'9r   r  c                       e Zd ZdZ ej
                  g dej                        Zeej                         z  Zd Z	d Z
d Zd Zy)	TestRandomMultinomialz%
    Test np.random.multinomial.
    )r   r   r   r   r   r   r   c                 8   | j                  |t        j                         | j                  |j                  t        |      f       | j                  |j                  t        j                  d      t        j                  d      f       | j                  |j                         |       t        ||      D ]a  \  }}| j                  |d       | j                  ||       t        |      |z  }| j                  ||dz         | j                  ||dz         c y)r  r\  r[  r   r%  r   N)r   r   r  r   rh  r   r  r   sumzipr  r  r  )r   r?   r@   sampler  nexppexps          r   _check_samplez#TestRandomMultinomial._check_sample  s     	fbjj1E
}5fllRXXg%68I$JKq)5&)GAt##D!,  q);?D##D!c'2  q3w/ *r   c                     t        d      t              }d| j                  }} |||      }| j                  |||       t	        |      } |||      }| j                  |||       d}t        j                  dd|dz  dgt
        j                        }||j                         z  } |||      }| j                  |||       y	)
z,
        Test multinomial(n, pvals)
        Trc   r  i@B r   r   r  r   N)	r   rA   r@   rC  r   r   r   r  r>  )r   r  r?   r@   r  s        r   test_multinomial_2z(TestRandomMultinomial.test_multinomial_2  s     #T"#565Auo1eS)UAuo1eS)!QS!,BJJ?Auo1eS)r   c                      t        d      t              }d| j                  }}d} ||||      }| j                  |j                  d   |       |D ]  }| j                  |||        y)z7
        Test multinomial(n, pvals, size: int)
        Trc   r  r   r   N)r   rD   r@   r   rh  rC  r   r  r?   r@   kr  r@  s          r   test_multinomial_3_intz,TestRandomMultinomial.test_multinomial_3_int  sj     #T"#565Aua 1q)Fq%0 r   c                     t        d      t              }d| j                  }}d} ||||      }| j                  |j                  dd |       |j                  d|j                  d   f      D ]  }| j                  |||        y)z9
        Test multinomial(n, pvals, size: tuple)
        Trc   r  )r   rh  Nr   )r   rD   r@   r   rh  rf  rC  rG  s          r   test_multinomial_3_tuplez.TestRandomMultinomial.test_multinomial_3_tuple  s     #T"#565Aua 3B+kk2syy}"56Fq%0 7r   N)r   r   r   r   r   r   r  r@   r>  rC  rE  rI  rK  r   r   r   r<  r<  x  sD     BHH'rzz:E	UYY[E0 *&
1
1r   r<  c                   d    e Zd Z ej                  g dej
                        Zd Zd Zd Z	d Z
y)TestRandomDirichlet)r   r   r   r   r   c                    | j                  |t        j                         | j                  |j                  t        j
                         |&| j                  |j                  t        |             nbt        |      t        u r(| j                  |j                  |t        |      f       n)| j                  |j                  |t        |      fz          	 t        j                  |      D ]&  }| j                  |d       | j                  |d       ( |#| j                  |j                         dd       yt        j                  |j                  d            D ]  }| j                  |dd        y)zCheck output structureNr   r   rE  )placesr   )axis)r   r   r  r   r   r  r6   r   typer   rh  nditerr  r  assertAlmostEqualr>  )r   rI   r6   r@  ra  totalss         r   rC  z!TestRandomDirichlet._check_sample  s     	fbjj1rzz2<V[[#e*5$Z3V\\D#e*+=>V\\43u:-+?@*99V$C##C+  a( % <""6::<1"=))FJJBJ$78&&vq&; 9r   c                 N    t        d      t              }| j                  t        | j                        t	        j
                  g dt        j                        t	        j
                  g dt        j                        f}|D ]  } ||      }| j                  |d|        y)2
        Test dirichlet(alpha, size=None)
        Trc   r   r   r  r   r   r   r   rn  r   N)r   rL   rI   r   r   r   r  rC  )r   r  alphasrI   r  s        r   test_dirichlet_defaultz*TestRandomDirichlet.test_dirichlet_default  s|     #T"#:;JJ$**HH%RZZ8HH^2::6	
 E,CudC0 r   c                     t        d      t              }d}| j                  t        | j                        t	        j
                  g dt        j                        t	        j
                  g dt        j                        f}t        j                  ||      D ]!  \  }} |||      }| j                  |||       # y)rV  Trc   )Nr   r   r   rW  r   rX  N)
r   rJ   rI   r   r   r   r  	itertoolsproductrC  )r   r  r  rY  rI   r6   r  s          r   test_dirichletz"TestRandomDirichlet.test_dirichlet  s     #T"?3'JJ$**HH%RZZ8HH^2::6	
 %,,VU;KE4t$CudC0 <r   c           
      .    t        d      t              }t        d      }| j                  t              5 } ||d       d d d        | j                  dt        j                               | j                  }ddddd	d
t        j                  d      t        j                  d      ff}|D ]N  }| j                  t              5 } |||       d d d        | j                  dt        |j                               P y # 1 sw Y   xY w# 1 sw Y   =xY w)NTrc   )r   r   r   r   zdirichlet: alpha must be > 0.0              @rn  rn  r   rb  r   rb  rb  r   rM  zGnp.random.dirichlet(): size should be int or tuple of ints or None, got)r   rJ   r   r	  rN  r  str	exceptionrI   r   int8r[  r   )r   r  rI   raisesr  r6   s         r   test_dirichlet_exceptionsz-TestRandomDirichlet.test_dirichlet_exceptions  s    "T"?3i z*f%O +6F<L<L8MN

r3'8bggaj"((ST+=VWD"";/6eT" 0MM-F$$%  +* 0/s   
C?
D?DD	N)r   r   r   r   r   r  rI   rC  rZ  r`  rj  r   r   r   rM  rM    s,    BHH\4E<,11"r   rM  c                   $    e Zd Zd Zd Zd Zd Zy)TestRandomNoncentralChiSquarec                    || j                  |t        j                         | j                  |j                  t        j
                         t        |t              r| j                  |j                  |f       n3| j                  |j                  |       n| j                  |t               t        j                  |      D ]  }| j                  |d        y Nr   )r   r   r  r   r   r  r  r   rh  r  rR  r  )r   r6   r@  ra  s       r   rC  z+TestRandomNoncentralChiSquare._check_sample	  s     !!&"**5V\\2::6$$  w7  t4""651 99V$C##C+ %r   c                      t        d      t              }d}|D ][  \  }} |||      }| j                  d|        ||t        j                        }| j                  t        j                  |             ] y)z@
        Test noncentral_chisquare(df, nonc, size=None)
        Trc   )r%  r   re  )rE  r   )r  r   )r   r  N)r   rU   rC  r   nanr  isnan)r   r  inputsrQ   rR   r  s         r   !test_noncentral_chisquare_defaultz?TestRandomNoncentralChiSquare.test_noncentral_chisquare_default  sl     #T"#EF
 HBD/CtS)BFF#COOBHHSM*	 r   c                 F    t        d      t              }d}d}t        j                  ||      D ]n  \  \  }}} ||||      }| j	                  ||        ||t
        j                  |      }| j                  t        j                  |      j                                p y)z;
        Test noncentral_chisquare(df, nonc, size)
        Trc   )Nr   r\  r]  rp  N)
r   rS   r^  r_  rC  r   rq  r  rr  r  )r   r  r  rs  rQ   rR   r6   r  s           r   test_noncentral_chisquarez7TestRandomNoncentralChiSquare.test_noncentral_chisquare.  s     #T"#=>+
 !* 1 1&% @JRD$'CtS)BFFD)COOBHHSM--/0	 !Ar   c           
          t        d      t              }d\  }}| j                  t              5 } |||d       d d d        | j	                  dt        j                               d\  }}| j                  t              5 } |||d       d d d        | j	                  dt        |j                               d\  }}dd	d
dddt        j                  d      t        j                  d      ff}|D ]O  }| j                  t              5 } ||||       d d d        | j	                  dt        |j                               Q y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   JxY w)NTrc   )r   r   r   zdf <= 0)r   r   znonc < 0)r   r   rb  rn  rc  rd  re  r   rM  zRnp.random.noncentral_chisquare(): size should be int or tuple of ints or None, got)r   rS   r	  rN  r  rf  rg  r   rh  r[  r   )r   r  rQ   rR   ri  r  r6   s          r   $test_noncentral_chisquare_exceptionszBTestRandomNoncentralChiSquare.test_noncentral_chisquare_exceptionsB  s2   "T"#=>Dz*f"dA +iV%5%5!67Dz*f"dA +j#f&6&6"78Dr3'8bggaj"((ST+=VWD"";/6b$% 0MM-F$$%  +*
 +* 0/s#   EEEEEE(	N)r   r   r   rC  rt  rv  rx  r   r   r   rl  rl    s    ,$+&1(r   rl  T)rd   nogilc                     | dk7  rt        j                  |        t        |j                        D ]  }t        j                  d      ||<    y )Nr   rd  )r   rW   r   r6   r  )rW   r  r   s      r   py_extract_randomnessr{  Y  s;    qyD388_##B'A r   r  c                     | dk7  rt         j                  j                  |        d}t        |j                        D ](  }t         j                  j                  t              ||<   * y rn  )r   r   rW   r   r6   r   _randint_limit)rW   r  r  r   s       r   np_extract_randomnessr~  b  sH    qy
		t	A388_"">2A r   c                   (    e Zd ZdZd Zd Zd Zd Zy)ConcurrencyBaseTestr  c                 J    d| j                  d      f}t        |  t        |  y )Nr  r   )_get_outputr{  r~  )r   r  s     r   setUpzConcurrencyBaseTest.setUpt  s'    D$$Q'(t$t$r   c                 L    t        j                  |t         j                        S )Nr   )r   zerosr   )r   r6   s     r   r  zConcurrencyBaseTest._get_outputz  s    xxBII..r   c                     d}dt        j                  d      z  }d}t         j                  j                  |j	                         ||       t         j                  j                  |j                         ||       y)z9
        Check statistical properties of output.
        rZ  r  r  g?)rtolN)r   r  r6  r7  r  std)r   r  expected_avgexpected_stdr  s        r   check_outputz ConcurrencyBaseTest.check_output}  s^    
 2772;.


""388:|$"G


""3779l"Fr   c                    |D ]  }| j                  |        |rd}nt        |      }|D ch c]  }t        |d d        }}|D ch c]  }t        |dd         }}|D ch c]  }|j                          }}| j	                  t        |      ||       | j	                  t        |      ||       | j	                  t        |      ||       y c c}w c c}w c c}w )Nr   rE  rL  )r  r   r   r>  r   )r   r  same_expectedr  expected_distinctheadstailssumss           r   check_several_outputsz)ConcurrencyBaseTest.check_several_outputs  s     Cc" 
  ! #G+237Cs2Aw73,34GSs23xG4%,-Wc	W-U%6>U%6>T$5t< 44-s   CC#CN)r   r   r   _extract_iterationsr  r  r  r  r   r   r   r  r  l  s     !%/	G=r   r  c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
TestThreadsz3
    Check the PRNG behaves well with threads.
    c                 `   t        |dz         D cg c]  }| j                  | j                         c}fd}t        |      D cg c]  }t        j                  ||f       }}|D ]  }|j                            ||       |D ]  }|j                           S c c}w c c}w )zo
        Run *nthreads* threads extracting randomness with the given *seed*
        (no seeding if 0).
        r   c                       |           y )NrW   r  r   )r   extract_randomnessr  rW   s    r   targetz.TestThreads.extract_in_threads.<locals>.target  s    Dgaj9r   )r  r  )r   r  r  	threadingThreadstartrp   )	r   nthreadsr  rW   r   r  threadsthr  s	     ``    @r   extract_in_threadszTestThreads.extract_in_threads  s     "(Q,/1/q ##D$<$<=/1	:
 "(O-+q ##6=+ 	 - BHHJ  	xBGGI  #1-s   "B&B+c                 R    | j                  d|d      }| j                  |d       y)z
        When initializing the PRNG the same way, each thread
        should produce the same sequence of random numbers,
        using independent states, regardless of parallel
        execution.
        r  r  r,  Tr  Nr  r  r   r  r  s      r   check_thread_safetyzTestThreads.check_thread_safety  s1     ))".@r)J 	""7$"?r   c                 R    | j                  d|d      }| j                  |d       y)z
        The PRNG in new threads should be implicitly initialized with
        system entropy, if seed() wasn't called.
        rh  r   r,  Fr  Nr  r  s      r   check_implicit_initializationz)TestThreads.check_implicit_initialization  s1    
 ))!-?a)H 	""7%"@r   c                 .    | j                  t               y r   )r  r{  r   s    r   test_py_thread_safetyz!TestThreads.test_py_thread_safety        !67r   c                 .    | j                  t               y r   )r  r~  r   s    r   test_np_thread_safetyz!TestThreads.test_np_thread_safety  r  r   c                 .    | j                  t               y r   r  r{  r   s    r   test_py_implicit_initializationz+TestThreads.test_py_implicit_initialization      **+@Ar   c                 .    | j                  t               y r   r  r~  r   s    r   test_np_implicit_initializationz+TestThreads.test_np_implicit_initialization  r  r   N)r   r   r   r   r  r  r  r  r  r  r  r   r   r   r  r    s.    0@A88BBr   r  ntz(Windows is not affected by fork() issuesc                   ,    e Zd ZdZdZd Zd Zd Zd Zy)TestProcessesz9
    Check the PRNG behaves well in child processes.
    Fc                 F   
 t        j                         
g } fd
fd}t        t         d      rt        j                  d      }nt         }t	        |      D cg c]  }|j                  |       }}|D ]  }|j                           t	        |      D ]#  }|j                  
j                  d             % |D ]  }|j                           |j                                 |D ]'  }	t        |	t              s j                  d|	       ) |S c c}w )	z`
        Run *nprocs* processes extracting randomness
        without explicit seeding.
        c                  R    j                  j                        }  d|        | S )Nr   r  )r  r  )r  r  r   s    r   target_innerz8TestProcesses.extract_in_processes.<locals>.target_inner  s(    ""4#;#;<CA3/Jr   c                  ~    	         } j                  |        y # t        $ r}j                  |        d }~ww xY wr   )put	Exception)r  eqr  s     r   r  z2TestProcesses.extract_in_processes.<locals>.target  s:    "nc
  a	s    	<7<get_contextfork)r  rE  )timeoutzException in child: )multiprocessingQueuehasattrr  r   Processr  r   getrp   r  r  fail)r   nprocsr  r  r  mpcr   procsr  r  r  r  s   ` `       @@r   extract_in_processesz"TestProcesses.extract_in_processes  s    
 !!#	
	 ?M2!--f5C!C-)'Q F+' 	 )AGGI  vANN1555+, AFFH 
 	|~&C#y)		c;<  %)s    Dc                 N    | j                  d|      }| j                  |d       y)z
        The PRNG in new processes should be implicitly initialized
        with system entropy, to avoid reproducing the same sequences.
        r   Fr  N)r  r  r  s      r   r  z+TestProcesses.check_implicit_initialization  s,    
 ++A/AB 	""7%"@r   c                 .    | j                  t               y r   r  r   s    r   r  z-TestProcesses.test_py_implicit_initialization%  r  r   c                 .    | j                  t               y r   r  r   s    r   r  z-TestProcesses.test_np_implicit_initialization(  r  r   N)	r   r   r   r   _numba_parallel_test_r  r  r  r  r   r   r   r  r    s'     ".`ABBr   r  c                       e Zd Zd Zy)TestNumPyRandomAPIc           
      4   i 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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dd"d#d$ddd%dd&dd'd(dd$d)i d*dddd+d,ddddd-dddd.ddd/d0dddd1dddd2d3d4did5d4did6d4did7dddd8d4did9d:d;id<d4did=d4did>ddd?d@d4didAddddddBddCdddd2ddddDddddEdddddddF}|j                         D ]  \  }}dGj                  |j                         D cg c]  \  }}| dH|  c}}      }t        dI| dJ| dK      }i }t        |dLt        i|       |dM   }	 |	        t        |	      j                  dN        y c c}}w )ONr  r   r   r   )r   r"   r6   r  r   g333333?)r?   r  r6   r  )rQ   r6   znp.random.choicer   r7   znp.random.dirichletr   rH   r  )r  r6   r  )dfnumdfdenr6   r  )rh  r  r6   r  )r  r6   r  r   )r  r  r6   r  )ngoodnbadnsampler6   r  r&  rA  )r  sigmar6   r*  r%  znp.random.multinomial)r   rC   r5  )r?   r  znp.random.noncentral_chisquarerP   r   r  r0  )lamr6   rA  znp.random.randint)r  r  r6   r   r6   r   r   rE  r   r   rW   rh  rL  r  r  )rh  r6   r6  rQ  g      @)leftmoderightr6   )mukappar6   )r  r  r6   )r  r}  r  rW  r  r_  r  rn   z7
                def foo():
                    return ro   z)
                r   foor   )itemsrp   r   execr   r   compile)
r   datafnr  rH  vargstrtemplater  rb   s
             r   test_call_by_namez$TestNumPyRandomAPI.test_call_by_name.  sd   59 Q"? 59$AC&C59%b!'<59 #!Q$759 &q'A	59
 (2q)A59 b!D59 "Qa#H59 &R';59 #BQ$G59 +a891-F59 $R"a%H59 %b2q&I59 &R'K59 &S!'<59  (q4)K!59" .QS/A#59$ 1R;<3>%59( #BQ$G)59* #"a$8+592 $R%;3594 "Q#7559< $Q1%E=59D #VQKE59F *FA;G59H !61+I59J %A&>K59L #VQKM59N !61+O59T ,fa[U59V 161+W59X +b!,DY59Z ,fa[[59\ 'r1(=]59^ 24R"12)4-/Q%G-/"a&H+-A"F+-q%9(*A"6k59n 

HBYYtzz|D|tq!1#Qqc
|DEF #4q ) H AD":q)
 U8DFJr" %Ds   +FN)r   r   r   r  r   r   r   r  r  ,  s    N#r   r  __main__)Sr  r  r  r  r   r   rw  ry  r  r^  textwrapr   numpyr   unittestr  r   r   r   
numba.corer   numba.tests.supportr   r	   r
   numba.core.errorsr   r   r   r   r   r#   r%   r)   r+   r.   r2   r8   r;   rA   rD   rJ   rL   rS   rU   r\   r`   rk   ru   rz   r|   r~   r   r  r   r   r  r   r   r   r   r   r   r   r   r   r   r  r  r<  rM  rl  r{  r}  r~  r  r  skipIfrg   r  r  r   mainr   r   r   <module>r     sO       	   
       ' '  ? ? ) -- # "%*;+<1&?4&&#$'* .)O,&,--.'(
"/,

x 
A0H A0H_* _*D]/x ]/@s9x s9lA1H A1HI( IVPH Pd d$(  ( d$3  3/=( /=d?B% ?BD D"LMHB' HB NHBVP# P#f zHMMO r   