
    sh                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
Jr  S SKrS SKrS SKrS SKJrJrJr  S SKJr  S SKJrJrJr  S SKJr  SrS rS	 rS
 rS rS r S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/S r0S r1S r2S r3S  r4\3" S!5      r5\1" S"5      r6\2" S#5      r7\3" S$5      r8\1" S%5      r9\2" S&5      r:S' r;S( r<S) r=S* r>S+ r? " S, S-\5      r@ " S. S/\@5      rA " S0 S1\@5      rB " S2 S3\@5      rC " S4 S5\@5      rD " S6 S7\@5      rE " S8 S9\@5      rF " S: S;\@5      rG\" S<S<S=9S> 5       rHS?rI\" S<S<S=9S@ 5       rJ " SA SB\5      rK " SC SD\K5      rL\R                  " \R                  SE:H  SF5       " SG SH\K5      5       rO " SI SJ\5      rP\QSK:X  a  \R                  " 5         gg)L    N)dedent)jit
_helperlibnjit)types)TestCasecompile_functiontag)TypingErrorp  c                  ,    [         R                  " 5       $ N)r   rnd_get_py_state_ptr     k/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_random.pyget_py_state_ptrr          **,,r   c                  ,    [         R                  " 5       $ r   )r   rnd_get_np_state_ptrr   r   r   get_np_state_ptrr      r   r   c                 @    [         R                  R                  U 5      $ r   nprandomrandintas    r   numpy_randint1r   #   s    99Qr   c                 @    [         R                  R                  X5      $ r   r   r   bs     r   numpy_randint2r#   &   s    99Q""r   c                 .    [         R                  " X5      $ r   )r   r   r!   s     r   random_randintr%   )   s    >>!r   c                 .    [         R                  " U 5      $ r   r   	randranger   s    r   random_randrange1r)   ,   s    Ar   c                 .    [         R                  " X5      $ r   r'   r!   s     r   random_randrange2r+   /   s    A!!r   c                 0    [         R                  " XU5      $ r   r'   )r   r"   cs      r   random_randrange3r.   2   s    A!$$r   c                 @    [         R                  R                  U 5      $ r   r   r   choicer   s    r   numpy_choice1r2   5   s    99Ar   c                 <    [         R                  R                  XS9$ Nsizer0   r   r6   s     r   numpy_choice2r8   8   s    99A))r   c                 >    [         R                  R                  XUS9$ )N)r6   replacer0   )r   r6   r:   s      r   numpy_choice3r;   ;   s    99A'::r   c                 @    [         R                  R                  X5      $ r   r   r   multinomial)npvalss     r   numpy_multinomial2rA   >   s    99  **r   c                 >    [         R                  R                  XUS9$ )N)r@   r6   r=   r?   r@   r6   s      r   numpy_multinomial3rD   A   s    99  d ;;r   c                 <    [         R                  R                  XS9$ r4   r   r   	dirichletalphar6   s     r   numpy_dirichletrJ   D   s    99u00r   c                 @    [         R                  R                  U 5      $ r   rF   )rI   s    r   numpy_dirichlet_defaultrL   G   s    99u%%r   c                 >    [         R                  R                  XUS9$ r4   r   r   noncentral_chisquaredfnoncr6   s      r   numpy_noncentral_chisquarerS   J   s    99))")>>r   c                 @    [         R                  R                  X5      $ r   rN   )rQ   rR   s     r   "numpy_noncentral_chisquare_defaultrU   M   s    99))"33r   c                    [         R                  R                  U 5        [         R                  R                  X45      n[         R                  R                  U 5        [         R                  R                  X5      nX44$ r   )r   r   seedrandrW   r   r"   expectedgots        r   numpy_check_randr\   P   sR    IINN4yy'HIINN4
))..
C=r   c                    [         R                  R                  U 5        [         R                  R                  X45      n[         R                  R                  U 5        [         R                  R	                  X5      nX44$ r   )r   r   rW   standard_normalrandnrY   s        r   numpy_check_randnr`   W   sR    IINN4yy((!0HIINN4
))//!
C=r   c                 d    S[        5       -  n[        SU[        5       5      n[        SS9" U5      $ )Nz@def func(%(argstring)s):
        return %(name)s(%(argstring)s)
funcTnopython)localsr	   globalsr   )name	argstringcodepyfuncs       r   jit_with_argsrk   ^   s5    hD fdGI6Ff%%r   c                     SR                  U Vs/ s H	  o" SU 3PM     sn5      nSR                  U5      nSU SU  SU S3n[        SU[        5       5      n[        SS	9" U5      $ s  snf )
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f%% &Is   A(c                     [        U S5      $ )N rk   rg   s    r   jit_nullaryrz   o   s    r""r   c                     [        U S5      $ )Nr   rx   ry   s    r   	jit_unaryr|   r   s    s##r   c                     [        U S5      $ )Nza, brx   ry   s    r   
jit_binaryr~   u   s    v&&r   c                     [        U S5      $ )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                     U R                  5       S   nUSS US   pC[        R                  " X[        U5      45        X44$ )z7
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      sC     
aBSb'2b6%S$t*"56;r   c           
          U R                  5       SS u  p#[        R                  " XU Vs/ s H  n[        U5      PM     sn45        X#4$ s  snf )z6
Copy state of Numpy random *r* to Numba state *ptr*.
r      )	get_stater   r   int)r   r   r   r   xs        r   _copy_np_stater      sL     ++-!$KDS4*@4a3q64*@"AB; +As   Ac                     U R                  5       u  pnUS   nUS S n[        U5      S:X  d   eS[        R                  " USS9U4nUc  US-  nOUSU4-  n[        R                  R                  U5        g )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    SU R                  US-  S5      -  $ )N       @      ?)gammavariate)r   rQ   s     r   py_chisquarer      s    S#...r   c                 <    [        X5      U-  [        X5      U-  -  $ r   )r   )r   numdenoms      r   py_fr      s&    !!E)!#c)+ ,r   c                   (    \ rS rSrSS jrSS jrSrg)BaseTest   c                 H    [         R                  " U5      n[        X15        U$ r   )r   Randomr   selfr   rW   r   s       r   _follow_cpythonBaseTest._follow_cpython   s    MM$qr   c                 Z    [         R                  R                  U5      n[        X15        U$ r   )r   r   RandomStater   r   s       r   _follow_numpyBaseTest._follow_numpy   s#    II!!$'qr   r   N   )__name__
__module____qualname____firstlineno__r   r   __static_attributes__r   r   r   r   r      s    
r   r   c                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)TestInternals   z1
Test low-level internals of the implementation.
c                    [         R                  " U5      nUu  p4U R                  U[        5        U R                  U[        5        U R                  [        U5      [        5        US-  [        -  n[        [        5       Vs/ s H  o3S-  PM	     nn[         R                  " XU45        U R                  [         R                  " U5      XT45        g s  snf )Ni r   )
r   rnd_get_stateassertIsInstancer   r   assertEqualr   Nranger   )r   r   stateir   js         r   _check_get_set_state"TestInternals._check_get_set_state   s    ((-a%dD)TA&Z1$Qx(x!Ax(  $i011#6	B )s   Cc                 f   [         R                  " 5       n[        X!5      u  p4[        U[        S-   S5       H  nUR                  5         M     [
        R                  " U5        UR                  5       S   nUS S US   pCU R                  [
        R                  " U5      S   [        U5      5        g )Nr   r   r   )r   r   r   r   r   r   rnd_shuffler   r   r   r   )r   r   r   r   r   r   r   s          r   _check_shuffleTestInternals._check_shuffle   s    MMO$Q,ua!eQ'AHHJ (s#ZZ\!_"gr"ve11#6q94:Fr   c                 t   [         R                  R                  5       nS H  nUR                  [         R                  " U5      5        UR                  5       n[        US   5      nUS   nU[        :X  d   e[        R                  " X5        U R                  [        R                  " U5      Xe45        M     g )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_initTestInternals._check_init   s     II!!#'AFF299Q< B1;DqEEA::'Z55c:UMJ (r   c                 l   / n[        S5       Hv  n[        R                  " US5        [        R                  " U[        R                  " S5      5        UR                  [        [        R                  " U5      S   5      5        Mx     U R                  [        [        U5      5      [        U5      5        g )N
   r   i   r   )r   r   r   osurandomappendtupler   r   r   set)r   r   statesr   s       r   _check_perturbTestInternals._check_perturb   s}    rAQ'RZZ_5MM%
 8 8 =a @AB  	S[)3v;7r   c                 6    U R                  [        5       5        g r   )r   r   r   s    r   test_get_set_state TestInternals.test_get_set_state   s    !!"2"45r   c                 6    U R                  [        5       5        g r   )r   r   r   s    r   test_shuffleTestInternals.test_shuffle       ,./r   c                 6    U R                  [        5       5        g r   )r   r   r   s    r   	test_initTestInternals.test_init   s    )+,r   c                 6    U R                  [        5       5        g r   )r   r   r   s    r   test_perturbTestInternals.test_perturb   r   r   r   N)r   r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r      s2    
CGK	860-0r   r   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 r  SUS jr  SUS jrS rS rS rS rS rS rS rS rS rSVS jrS rS rS rS rS rS rS rS rS r S  r!S! r"S" r#S# r$S$ r%S% r&S& r'S' r(S( r)S) r*S* r+S+ r,S, r-S- r.S. r/S/ r0S0 r1S1 r2S2 r3S3 r4S4 r5S5 r6S6 r7S7 r8S8 r9S9 r:S: r;S; r<S< r=S= r>S> r?S? r@S@ rASA rBSB rCSC rDSD rESE rFSF rGSG rHSH rISI rJSJ rKSK rLSL rMSM rNSN rOSO rPSP rQSQ rRSR rSSS rTSTrUg
)W
TestRandom   c           	      ,   [         R                  R                  5       nS Hp  nUR                  [         R                  " U5      5        U" U5        [        [        S-   5       H*  nU R                  U" 5       UR                  SS5      5        M,     Mr     g)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_seedTestRandom._check_random_seed  sj    
 II!!#'AFF299Q< QK1r6]''
aiiS6IJ # (r   c                 8    U R                  [        [        5        g r   )r   random_seedrandom_randomr   s    r   test_random_randomTestRandom.test_random_random  s    ];r   c                 0   U R                  [        [        5        U R                  [        [        S5      5        U R                  [        [        S5      5        U R                  [        [        S5      5        U R                  [        [        S5      5        g Nnp.random.random_samplenp.random.ranfnp.random.sampleznp.random.rand)r   
numpy_seednumpy_randomrz   r   s    r   test_numpy_randomTestRandom.test_numpy_random  sj    
L9
K8Q,RS
K8H,IJ
K8J,KL
K8H,IJr   c           
      "   [         R                  R                  5       nS Hk  nUR                  [         R                  " U5      5        U" U5        [        S5       H,  nU R                  U" U5      UR                  SSU5      5        M.     Mm     g )Nr   r   r   r   )r   r   r   rW   r   r   r   r   )r   r   r   r   r   r?   s         r   _check_random_sizedTestRandom._check_random_sized   sh    II!!#'AFF299Q< QK2Y''
1qyyc17MN 	 (r   c                     U R                  [        [        S5      5        U R                  [        [        S5      5        U R                  [        [        S5      5        U R                  [        [        S5      5        g r  )r  r
  r|   r   s    r   test_numpy_random_sized"TestRandom.test_numpy_random_sized*  sZ      Y7P-QR  Y7G-HI  Y7I-JK  Y7G-HIr   c                    Sn[        S5        [        U5       Vs/ s H  n[        5       PM     nn[        S5        [        U5       Vs/ s H  n[	        5       PM     nn[        S5        [        S5        [        U5       Vs/ s H  n[        5       [	        5       4PM     nnU R                  U Vs/ s H  ofS   PM	     snU5        U R                  U Vs/ s H  ofS   PM	     snU5        g s  snf s  snf s  snf s  snf s  snf )Nr   r   r   r   )r  r   r  r
  r  r   )r   r   r   
py_numbers
np_numberspairsps          r   test_independent_generators&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-	C2C71C<Dc                 *   U R                  U5      n[        SS5       H-  nUR                  U5      nU" U5      nU R                  XV5        M/     U R	                  [
        US5        U R	                  [
        US5        U R	                  [
        US5        g)z&
Check a getrandbits()-like function.
r   A   i r   N)r   r   getrandbitsr   assertRaisesOverflowError)r   rb   r   r   nbitsrZ   r[   s          r   _check_getrandbitsTestRandom._check_getrandbits=  s    
   %1b\E}}U+Hu+C##H2 " 	-r2-w7-r2r   c                 J    U R                  [        S5      [        5       5        g )Nzrandom.getrandbits)r!  r|   r   r   s    r   test_random_getrandbits"TestRandom.test_random_getrandbitsK      	*> ?AQASTr   Nc           	         [        U5      (       d   eU Hb  n[        U5       V	s/ s H  o" U6 PM	     n
n	[        U5       V	s/ s H  n	U(       a  U" USU06OU" U6 PM     nn	U R                  XXVSU< 3S9  Md     g s  sn	f s  sn	f )Nr   for arguments preculpsmsgr   r   r   )r   rb   rj   argslistnitersr*  r+  pydtypeargsr   results	pyresultss               r   _check_distTestRandom._check_distS  s    8}}}D,1&M:MqtT{MG:"'-1"/Q ;B&$6g6vt}T"/  1##GT>B(D $ F	 :1s   A<Bc           
          [        U5      (       d   eU Hl  n[        U5       V	s/ s H
  o" S0 UD6PM     n
n	[        U5       V	s/ s H  n	U(       a  U" S0 UDSU0D6OU" S0 UD6PM      nn	U R                  XXVSU< 3S9  Mn     g s  sn	f s  sn	f )Nr   r(  r)  r   r-  )r   rb   rj   
kwargslistr/  r*  r+  r0  kwargsr   r2  r3  s               r   _check_dist_kwargsTestRandom._check_dist_kwargs]  s    : F/4V}=}!t~f~}G="'-1"/Q >E&9699&JZSYJZZ"/  1##GT>D(F $ H	 !=1s   B%Bc                     U R                  U5      nUb'  U R                  XR                  / SQ[        S-  S-   S9  Ub  U R                  X%R                  S/5        Ub  U R                  X5R                  S/5        gg)z 
Check a gauss()-like function.
Nr   r   )r         ?)g       r>  r   r   r/  r>  r   )r   r4  normalr   r   func2func1func0r   r   s         r   _check_gaussTestRandom._check_gaussg  s    
 s#UHHB$%FRK  1 UHHvh7UHHrd3 r   c                 N    U R                  [        S5      S S [        5       5        g )Nr   rF  r~   r   r   s    r   test_random_gaussTestRandom.test_random_gaussv  s    *^4dDBRBTUr   c                 N    U R                  [        S5      S S [        5       5        g )Nzrandom.normalvariaterI  r   s    r   test_random_normalvariate$TestRandom.test_random_normalvariatey  s$     	*%;<dD*,	.r   c                 r    U R                  [        S5      [        S5      [        S5      [	        5       5        g )Nr   )rF  r~   r|   rz   r   r   s    r   test_numpy_normalTestRandom.test_numpy_normal  s0    *%78#$67%&89*,	.r   c                 N    U R                  S S [        S5      [        5       5        g )Nnp.random.standard_normalrF  rz   r   r   s    r   test_numpy_standard_normal%TestRandom.test_numpy_standard_normal  s"    $k2M&N*,	.r   c                 N    U R                  S S [        S5      [        5       5        g )Nznp.random.randnrT  r   s    r   test_numpy_randnTestRandom.test_numpy_randn  s"    $k2C&D*,	.r   c                     U R                  U5      nUb'  U R                  XR                  / SQ[        S-  S-   S9  Ub  U R                  X%R                  S/5        Ub  U R                  X5R                  S/5        gg)z)
Check a lognormvariate()-like function.
Nr<  r   r   r?  r@  r   )r   r4  	lognormalr   rB  s         r   _check_lognormvariate TestRandom._check_lognormvariate  s    
 s#UKKB$%FRK  1 UKK&:UKK"6 r   c                 N    U R                  [        S5      S S [        5       5        g )Nzrandom.lognormvariate)r\  r~   r   r   s    r   test_random_lognormvariate%TestRandom.test_random_lognormvariate  s$    "":.E#F#'/?/A	Cr   c                 r    U R                  [        S5      [        S5      [        S5      [	        5       5        g )Nnp.random.lognormal)r\  r~   r|   rz   r   r   s    r   test_numpy_lognormalTestRandom.test_numpy_lognormal  s0    "":.C#D#,-B#C#./D#E#3#5	7r   c           	         / n[        S5       HP  n	UR                  U" S5      5        UR                  U" SS5      5        Uc  M7  UR                  U" SSS5      5        MR     U(       a  U R                  U5      R                  n
OU R	                  U5      R
                  n
S Vs/ s H  oU:  d  M
  UPM     nnU(       a  UOSnU H  nU R                  XU4/SUS9  U R                  X*SS	U-   4/SUS9  Uc  M4  U R                  U" SS	U-   S
5      U
" SS	U-   S
5      5        U R                  U" S	U-   S	S5      U
" S	U-   S	S5      5        M     U R                  [        US5        U R                  [        US5        U R                  [        USS5        U R                  [        USS	5        Ub3  U R                  [        USSS5        U R                  [        USSS5        ggs  snf )z$
Check a randrange()-like function.
r    e   Nr   )r   rg       l                    )r/  r0  r      r      r   r   )
r   r   r   r   r   r(   r4  r   r  
ValueError)r   rD  rC  func3r   	max_widthis_numpytpr   r   rrwwidthsr0  widths                  r   _check_randrangeTestRandom._check_randrange  s   
 rAKKi()KKa+, E!Y23	 
 ##C(00B%%c*44BBTB)m!BT "dEU%
2$+  -U"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#1G#c           	         [         R                  S4[         R                  S44 He  u  p[        U45      " [        5      n[        X45      " [
        5      n[        XU45      " [        5      nU R                  X4U[        5       US5        Mg     g )N                    F)	r   int64int32r   r)   r+   r.   ry  r   )r   rt  rr  cf1cf2cf3s         r   test_random_randrange TestRandom.test_random_randrange  sz    ${{E2U[[%4HIMBu+/0Cy"#45C}%&78C!!#C1A1C"+U4	 Jr   c           
      0   [         R                  [        R                  S4[         R                  [        R                  S44 HP  u  pn[	        U45      " [
        5      n[	        X45      " [        5      nU R                  XES [        5       USU5        MR     g )Nr|  r}  T)	r   r~  r   r  r   r   r#   ry  r   )r   rt  np_tprr  r  r  s         r   test_numpy_randintTestRandom.test_numpy_randint  sx    &+kk288U%C&+kk288U%C%E Byu+n-Cy/.1C!!#D2B2Di"&/	%Er   c                    / n[        S5       H  nUR                  U" SS5      5        M     U R                  [        U5      [        [	        U5      5      U5        U R                  U5      nS H*  nUS   U:  a  M  U R                  XR                  U/SS9  M,     U R                  [        USS5        U R                  [        USS5        g	)
z"
Check a randint()-like function.
r   rg  rf  )r   rg  )   ri  )   rj  r   r?     r   N)
r   r   r   r   r   r   r4  r   r  rp  )r   rb   r   rr  r   r   r   r1  s           r   _check_randintTestRandom._check_randint  s    
 rAKKQ	*+ TCD	ND9  %=DAw"T99tfR@ >
 	*dAq1*dAq1r   c                     [         R                  S4[         R                  S44 H6  u  p[        X45      " [        5      nU R                  U[        5       U5        M8     g )Nr|  r}  )r   r~  r  r   r%   r  r   )r   rt  rr  cfs       r   test_random_randintTestRandom.test_random_randint  sL    ${{E2U[[%4HIMBri0B$4$6	B Jr   c                 b    U R                  U5      nU R                  XR                  / SQ5        g)z"
Check a uniform()-like function.
))      ?    .A)           @@)r  r  N)r   r4  r   r   rb   r   r   s       r   _check_uniformTestRandom._check_uniform  s,    
   %yy?	Ar   c                 `    U R                  U5      n[        XS5      nU R                  XU5        g)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   getattrr9  )r   rb   r   distrib	paramlistr   distrib_method_of_numpys          r   _check_any_distrib_kwargs$TestRandom._check_any_distrib_kwargs  s/     s#")!"5yIr   c                 J    U R                  [        S5      [        5       5        g )Nzrandom.uniform)r  r~   r   r   s    r   test_random_uniformTestRandom.test_random_uniform  s    J'78:J:LMr   c                 J    U R                  [        S5      [        5       5        g )Nnp.random.uniform)r  r~   r   r   s    r   test_numpy_uniformTestRandom.test_numpy_uniform
  s    J':;=M=OPr   c           
      h    U R                  [        SSS/5      [        5       SSSS.SS	S.SSS./S
9  g )Nr  lowhighr   r  r  )r  r  r  r  r  r  ru   r   r   s    r   test_numpy_uniform_kwargs$TestRandom.test_numpy_uniform_kwargs  sJ    &&/%A"C0#S1"D13	 	' 	4r   c                     U R                  [        S/ SQ5      [        5       SSSSS.SSSS.SSSS.SSS S.SSS S.SSS S./S	9  g )
Nr  r  r  r6   r   r  r  r   r  r  r  r  r   s    r   test_numpy_uniform_empty_size(TestRandom.test_numpy_uniform_empty_size  sm    &&/1HI"C<#S"="D"="C>#S$?"D$?B	 	' 		Cr   c                     U R                  U5      nUb  U R                  XR                  / SQ5        U R                  X$R                  S/5        g)z%
Check a triangular()-like function.
N)r        @)r  r  )r  r  )r  r  皙@)r   r4  
triangular)r   rC  rq  r   r   s        r   _check_triangularTestRandom._check_triangular"  sI    
   %ULLBD.?@r   c                 ^    U R                  [        S5      [        S5      [        5       5        g )Nzrandom.triangular)r  r~   r   r   r   s    r   test_random_triangular!TestRandom.test_random_triangular-  s'    z*=>*+>?/1	3r   c                 ^   ^ [        S5      mU4S jnU R                  S U[        5       5        g )Nnp.random.triangularc                    > T" XU5      $ r   r   )lr   mr  s      r   <lambda>2TestRandom.test_numpy_triangular.<locals>.<lambda>4  s    :aA+>r   )r   r  r   )r   fixed_triangularr  s     @r   test_numpy_triangular TestRandom.test_numpy_triangular2  s+     !78
>t%57G7IJr   c                    U R                  U5      nUb  U R                  XR                  / SQ5        Ub(  U R                  U" S5      UR                  SS5      5        Ub`  U R	                  [
        USS5        U R	                  [
        USS5        U R	                  [
        USS5        U R	                  [
        USS5        Ub/  U R	                  [
        US5        U R	                  [
        US5        gg)z'
Check a gammavariate()-like function.
N)r>        @)r   r  r  r  r   r         )r   r4  r   r   r  rp  )r   rC  rD  r   r   s        r   _check_gammavariateTestRandom._check_gammavariate7  s    
   %UNNAC##E#JsC0HIj%c:j%c:j%s;j%d;j%5j%6 r   c                 L    U R                  [        S5      S [        5       5        g )Nzrandom.gammavariate)r  r~   r   r   s    r   test_random_gammavariate#TestRandom.test_random_gammavariateL  s       ,A!BD!1!3	5r   c                     U R                  [        S5      [        S5      [        5       5        U R                  S [        S5      [        5       5        g )Nnp.random.gammanp.random.standard_gamma)r  r~   r|   r   r   s    r   test_numpy_gammaTestRandom.test_numpy_gammaP  sH      ,=!>!*+<!=!1!3	5 	  !*+E!F!1!3	5r   c                     U R                  U5      nU R                  XR                  S/5        U R                  [        USS5        U R                  [        USS5        U R                  [        USS5        U R                  [        USS5        g)z&
Check a betavariate()-like function.
r  r   r   r  N)r   r4  betavariater  rp  r  s       r   _check_betavariateTestRandom._check_betavariateX  sz    
   %}}zl;*dC5*dC5*dD#6*dC6r   c                 J    U R                  [        S5      [        5       5        g )Nzrandom.betavariate)r  r~   r   r   s    r   test_random_betavariate"TestRandom.test_random_betavariatee  s    
+? @BRBTUr   c                 J    U R                  [        S5      [        5       5        g )Nnp.random.beta)r  r~   r   r   s    r   test_numpy_betaTestRandom.test_numpy_betah  s    
+; <>N>PQr   c                 `    U R                  U5      nU R                  XR                  S/5        g)z*
Check a vonmisesvariate()-like function.
r  N)r   r4  vonmisesvariater  s       r   _check_vonmisesvariate!TestRandom._check_vonmisesvariatek  s,       %00:,?r   c                 J    U R                  [        S5      [        5       5        g )Nzrandom.vonmisesvariate)r  r~   r   r   s    r   test_random_vonmisesvariate&TestRandom.test_random_vonmisesvariater  s    ##J/G$H$4$6	8r   c                 J    U R                  [        S5      [        5       5        g )Nnp.random.vonmises)r  r~   r   r   s    r   test_numpy_vonmisesTestRandom.test_numpy_vonmisesv  s    ##J/C$D$4$6	8r   c           	          U R                  U5      nS H>  n[        S5       H,  nU R                  U" U5      UR                  SU-  5      SS9  M.     M@     g)zq
Check a expovariate()-like function.  Note the second argument
is inversed compared to np.random.exponential().
)g?r>  r  r   r   double)r*  N)r   r   r   exponential)r   rb   r   r   lambdr   s         r   _check_expovariateTestRandom._check_expovariatez  sW    
 s#$E1X''UQ]]1u95M-5 ( 7  %r   c                 J    U R                  [        S5      [        5       5        g )Nzrandom.expovariate)r  r|   r   r   s    r   test_random_expovariate"TestRandom.test_random_expovariate  r&  r   c                     U R                  U5      nUb  U R                  XR                  / SQ5        Ub  U R                  X$R                  S/5        gg)z&
Check a exponential()-like function.
N)r@  r   r  r   )r   r4  r  )r   rD  rE  r   r   s        r   _check_exponentialTestRandom._check_exponential  sP     s#UMM3KLUMMB48 r   c                 ^    U R                  [        S5      [        S5      [        5       5        g )Nnp.random.exponential)r  r|   rz   r   r   s    r   test_numpy_exponential!TestRandom.test_numpy_exponential  s'    	*A B +,C D 0 2	4r   c                 L    U R                  S [        S5      [        5       5        g )Nnp.random.standard_exponential)r  rz   r   r   s    r   test_numpy_standard_exponential*TestRandom.test_numpy_standard_exponential  s!     +,L M 0 2	4r   c                 b    U R                  U5      nU R                  XR                  SS/5        g)z(
Check a paretovariate()-like function.
r@  )r  N)r   r4  paretovariater  s       r   _check_paretovariateTestRandom._check_paretovariate  s-    
   %0@Ar   c                 J    U R                  [        S5      [        5       5        g )Nzrandom.paretovariate)r  r|   r   r   s    r   test_random_paretovariate$TestRandom.test_random_paretovariate  s    !!),B"CEUEWXr   c                 \   ^ [        S5      mU4S jnU R                  U[        5       5        g )Nnp.random.paretoc                    > T" U 5      S-   $ )Nr   r   )r   paretos    r   r  .TestRandom.test_numpy_pareto.<locals>.<lambda>  s    Sr   )r|   r  r   )r   fixed_paretor  s     @r   test_numpy_paretoTestRandom.test_numpy_pareto  s'    -.0!!,0@0BCr   c                     U R                  U5      nUb  U R                  XR                  S/5        Ub;  [        S5       H+  nU R	                  U" S5      UR                  SS5      5        M-     gg)z)
Check a weibullvariate()-like function.
Nr  r   r  r   )r   r4  weibullvariater   r   )r   rC  rD  r   r   r   s         r   _check_weibullvariate TestRandom._check_weibullvariate  sp    
   %U$4$4zlC1X''c
()(8(8c(BD  r   c                 L    U R                  [        S5      S [        5       5        g )Nzrandom.weibullvariate)r  r~   r   r   s    r   test_random_weibullvariate%TestRandom.test_random_weibullvariate  s!    "":.E#F#')9);	=r   c                 L    U R                  S [        S5      [        5       5        g )Nnp.random.weibull)r  r|   r   r   s    r   test_numpy_weibullTestRandom.test_numpy_weibull  s     ""43F)G#3#5	7r   c           	         [        S5      nU R                  [        5       S5      nU R                  XR                  S/5        S H  nU R                  U" US5      S5        U R                  U" US5      U5        S H  nU" X45      nUS:  a	  X2-
  nS	U-
  nU R                  US5        U R                  X#5        XC-  nS
U-  [        R                  " U5      -  nU R                  X%U-
  XCU45        U R                  X%U-   XCU45        M     M     U R                  [        USS5        U R                  [        USS5        U R                  [        USS5        g )Nnp.random.binomialr   )   g      ?)d     '  r   r   )	g-C6?皙?皙?g9?r>  g㈵ ?皙??H.?r>  r   r   r   r   皙皙?)r~   r   r   r4  binomialr   assertGreaterEqualassertLessEqualmathsqrtr  rp  )r   r*  r   r?   r  rZ   tols          r   test_numpy_binomialTestRandom.test_numpy_binomial  sE   23/115::
|<#AXa-q1Xa-q1PQNs7AAA''1-$$Q*5!ediil*''c>A!9E$$Q3q	B Q $ 	*hC8*hD9*hC8r   c                     [        S5      nU R                  [        5       5      nU R                  U[        R
                  " [        U5      SS/5        g )Nnp.random.chisquarer  r  )r|   r   r   r4  	functoolspartialr   )r   	chisquarer   s      r   test_numpy_chisquareTestRandom.test_numpy_chisquare  sI    34	  !1!34"**<; &)	+r   c                     [        S5      nU R                  [        5       5      nU R                  U[        R
                  " [        U5      SS/5        g )Nnp.random.fr>  r  )r  r%  )r~   r   r   r4  r5  r6  r   )r   fr   s      r   test_numpy_fTestRandom.test_numpy_f  sG    }%  !1!34I--dA6$j1	3r   c                 "   [        S5      nU R                  [        US5        U R                  [        US5        U R                  [        US5        Sn[        U5       Vs/ s H
  o1" S5      PM     nnU R	                  US/U-  5        [        U5       Vs/ s H
  o1" S5      PM     nnUR                  S5      nU R                  XRS	-  5        U R                  XR5        U R                  U Vs/ s H  o3S
:  d  M
  UPM     sn5        [        U5       Vs/ s H
  o1" S5      PM     nnU R                  U Vs/ s H  o3S:  d  M
  UPM     sn5        [        U5       Vs/ s H
  o1" S5      PM     nnU R                  U Vs/ s H  o3S:  d  M
  UPM     sn5        [        U5       Vs/ s H
  o1" S5      PM     nnU R                  U Vs/ s H  o3S:  d  M
  UPM     sn5        g s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )Nnp.random.geometricg      r   gjt?   r   r   r&  r   r!  r$  r  g{Gz?2   gV瞯<        )
r|   r  rp  r   r   countr+  
assertLessassertFalse
assertTrue)r   geomr   r   r   r?   s         r   test_numpy_geometricTestRandom.test_numpy_geometric  s   ./*dD1*dC0*dE2 %a)1T#Y)A37+ %a)1T#Y)GGAJ6*Q3Qd(!Q34 %a)1T#Y)A/AqQA/0!&q*AT$Z*A0AqRA01"'(+(QT%[(+A3AqUA34 *) 4)/*0+3sN    G$G).	G.;G.G37	G8G8G= 	HH'H		HHc                     [        S5      nU R                  [        5       5      nU R                  XR                  SS/5        g )Nnp.random.gumbelr   r         r  )r~   r   r   r4  gumbel)r   rQ  r   s      r   test_numpy_gumbelTestRandom.test_numpy_gumbel  s:    .//12J+DEr   c           	      `    U R                  [        SSS/5      [        5       SSSS.SS	S./S
9  g )NrM  locscalerQ  r   r   )rU  rV  rP  r  r  r  r  r   s    r   test_numpy_gumbel_kwargs#TestRandom.test_numpy_gumbel_kwargs  sC    &&.0@A"S1#c24	 	' 	5r   c                 l   [        S5      nU R                  [        5       5      nU R                  XR                  SS/SS9  [        S5       Vs/ s H  o1" SSS5      PM     nnU R                  [        S U 5       5      U5        U R                  [        R                  " U5      S	5        U R                  [        R                  " U5      S
5        [        S5       Vs/ s H  o1" SSS5      PM     nnU R                  [        S U 5       5      U5        U R                  [        R                  " U5      S5        [        S5       Vs/ s H  o1" SSS5      PM     nnU R                  [        S U 5       5      U5        U R                  [        R                  " U5      S5        g s  snf s  snf s  snf )Nnp.random.hypergeometricr!  ri  r   )ri  r!  r      r?  r   r!  c              3   B   #    U  H  oS :  =(       a    US:*  v   M     g7fr   r   Nr   .0r   s     r   	<genexpr>7TestRandom.test_numpy_hypergeometric.<locals>.<genexpr>       ;AF/qCx/   g      D@g      N@順 c              3   B   #    U  H  oS :  =(       a    US:*  v   M     g7fr_  r   r`  s     r   rb  rc    rd  re        $@c              3   B   #    U  H  oS :  =(       a    US:*  v   M     g7fr_  r   r`  s     r   rb  rc    rd  re  g     V@)r   r   r   r4  hypergeometricr   rH  allr+  r   meanr,  )r   hgr   r   s       r   test_numpy_hypergeometric$TestRandom.test_numpy_hypergeometric  sg   34/12--*,<= " 	 	$ +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,	F1c                 $   U R                  [        5       5      nU R                  [        S5      UR                  SS/5        U R                  [        S5      UR                  SS/5        U R                  [        S5      UR                  S/5        g )Nnp.random.laplacerN  rO  r   rP  r   )r   r   r4  r~   laplacer|   rz   r   r   s     r   test_numpy_laplaceTestRandom.test_numpy_laplace  s|    /12$78!))$k2	4#67 '*	,%89199rdKr   c                 $   U R                  [        5       5      nU R                  [        S5      UR                  SS/5        U R                  [        S5      UR                  SS/5        U R                  [        S5      UR                  S/5        g )Nnp.random.logisticrN  rO  rr  rs  r   )r   r   r4  r~   logisticr|   rz   ru  s     r   test_numpy_logisticTestRandom.test_numpy_logistic&  s|    /12$891::$k2	4#78!** '*	,%9:AJJMr   c                    U R                  [        5       5      n[        S5      nU R                  X!R                  / SQSS9  U R                  [        5       SS9nU R                  [        S5       Vs/ s H
  o2" S5      PM     sn/ S	Q5        U R                  [        US
5        U R                  [        US5        U R                  [        US5        g s  snf )Nnp.random.logseries)r#  )gGz?)r'  rC  r?  r   rW   r   g{?)
ivxi- r]  i  in i)l   &ci܀oirH i  r   r(  r)  )	r   r   r|   r4  	logseriesr   r   r  rp  )r   r   r  r   s       r   test_numpy_logseriesTestRandom.test_numpy_logseries.  s    /1234	KK5 " 	 	$
 /1:eBiHi)O4iHC	D 	*i5*i6*i5 Is   2Cc                     U R                  [        5       5      n[        S5      nU R                  X!R                  / SQSS9  U R                  [        US5        g )Nnp.random.poisson)rr  r@  r   )rh  )g     $@rC  r?  r(  )r   r   r|   r4  poissonr  rp  )r   r   r  s      r   test_numpy_poissonTestRandom.test_numpy_poisson>  sT    /12/0))D " 	 	$ 	*gt4r   c           	      $   U R                  [        5       S5        [        S5      nU R                  [	        S5       Vs/ s H  o!" SS5      PM     sn/ SQ5        U R                  [	        S5       Vs/ s H  o!" SS5      PM     sn/ SQ5        U R                  [	        S5       Vs/ s H  o!" SS5      PM     sn/ S	Q5        [
        R                  " [	        S
5       Vs/ s H  nU" SS5      PM     sn5      nU R                  US5        U R                  US5        U R                  [        USS5        U R                  [        USS5        U R                  [        USS5        U R                  [        USS5        g s  snf s  snf s  snf s  snf )Nr   np.random.negative_binomialr   r&  )
r   r   r   rg  r   r   r   r   r   r   r#  )
7   G   8   9   r  r  "   r  e   C   r!  )
i#  i!  iy#  iL$  i"  i#  i#  iF"  i"  i#  rC  i ʚ;g   | Bg   $s Br>  r   r(  r)  )r   r   r~   r   r   r   rl  assertGreaterrF  r  rp  )r   negbinr   r  s       r   test_numpy_negative_binomial'TestRandom.test_numpy_negative_binomialG  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   E>2F&FFc                     U R                  [        5       5      n[        S5      nU R                  X!R                  / SQ5        U R                  [        US5        U R                  [        US5        g )Nnp.random.power)r  r@  )r&  )g      @r   r(  )r   r   r|   r4  powerr  rp  )r   r   r  s      r   test_numpy_powerTestRandom.test_numpy_powerZ  s\    /12+,9	;*eS1*eT2r   c                 4   U R                  [        5       5      n[        S5      n[        S5      nU R	                  X!R
                  / SQ5        U R	                  X1R
                  S/5        U R                  [        US5        U R                  [        US5        g )Nnp.random.rayleigh)r  r%  )g      9@)r  r   r   r(  )r   r   r|   rz   r4  rayleighr  rp  )r   r   	rayleigh1	rayleigh0s       r   test_numpy_rayleighTestRandom.test_numpy_rayleighb  s}    /1223	 45	JJ9	;JJ5*i5*i6r   c                     U R                  [        5       5      n[        S5      nU R                  X!R                  S/5        g )Nnp.random.standard_cauchyr   )r   r   rz   r4  standard_cauchy)r   r   cauchys      r   test_numpy_standard_cauchy%TestRandom.test_numpy_standard_cauchyl  s9    /1289!2!2RD9r   c                     U R                  [        5       5      n[        S5      n[        R                  " [        S5       Vs/ s H
  o2" S5      PM     sn5      nU R                  [        U5      S5        g s  snf )Nnp.random.standard_tri  rg  r>  )r   r   r|   r   rl  r   rF  abs)r   r   
standard_tr   avgs        r   test_numpy_standard_t TestRandom.test_numpy_standard_tq  s_       !1!3456
ggeDk:kz!}k:;C#& ;s   A6c                 H   U R                  [        5       5      n[        S5      nU R                  X!R                  SS/5        U R                  [        USS5        U R                  [        USS5        U R                  [        USS5        U R                  [        USS5        g )Nnp.random.waldr=  )r         @r   r   r(  )r   r   r~   r4  waldr  rp  )r   r   r  s      r   test_numpy_waldTestRandom.test_numpy_wald{  s    /12*+vv
J'?@*dC5*dD#6*dC5*dC6r   c           	      $   [        SSS/5      nU R                  U[        5       SSSS.SSS./S	9  U R                  [        US
S5        U R                  [        USS5        U R                  [        USS
5        U R                  [        USS5        g )Nr  rl  rV  r  r   )rl  rV  r   r  rW  r   r(  )ru   r  r   r  rp  )r   numba_versions     r   test_numpy_wald_kwargs!TestRandom.test_numpy_wald_kwargs  s    '(867:KL&&}'7'9/5;>2M;>2M2O 	' 	P
 	*mS#>*mT3?*mS#>*mS$?r   c                     U R                  [        5       5      n[        S5      nU R                  X!R                  SS/SS9  S H  nU R                  [        X#5        M     g )Nnp.random.zipfr  r4  r   r?  )r   r>  r   r(  )r   r   r|   r4  zipfr  rp  )r   r   r  vals       r   test_numpy_zipfTestRandom.test_numpy_zipf  sY    /12)*vv'7D(Cj$4 )r   c                 .   [         R                  " S5      [         R                  " S5      R                  S5      /nU(       a  U R                  U5      nOU R	                  U5      nU H  n[        S5       Ho  nUR                  5       nUR                  5       n	U" U5        U(       d  [        UR                  5      S:X  d  MM  UR                  U	5        U R                  X5        Mq     M     US   nUR                  5       n
U" [        U
5      5        U R                  [        U5      [        U
5      5        U R                  [        U5      [        U
5      5        U R!                  5          U" [        S5      5        SSS5        g! , (       d  f       g= f)	z-
Check a shuffle()-like function for arrays.
r      )rh  r  r   r   r   s   xyzN)r   arangereshaper   r   r   copyr   shapeshuffler   
memoryviewassertNotEqualr   r   sortedassertTypingError)r   rb   r   rs  arrsr   r   r   r[   rZ   r"   s              r   r   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   +F
Fc                 L    U R                  [        S5      [        5       S5        g )Nzrandom.shuffleF)r   r|   r   r   s    r   test_random_shuffleTestRandom.test_random_shuffle  s    I&679I9KUSr   c                 L    U R                  [        S5      [        5       S5        g )Nznp.random.shuffleT)r   r|   r   r   s    r   test_numpy_shuffleTestRandom.test_numpy_shuffle  s    I&9:<L<NPTUr   c                     S[        5       -  n[        5       n[        S5       H  n[        R                  " [
        R                  SU/[        R                  [        R                  S9nUR                  5       u  pxUR                  S:w  a,  [        SUR                  < SUR                  5       < S35      eUR                  [        UR                  5       5      5        M     U R                  [!        U5      SU5        g	)
z9
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_randomness$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                 (    U R                  SS5        g )Nr  r   r  r   s    r   test_random_random_startup%TestRandom.test_random_random_startup  s    &&;r   c                 (    U R                  SS5        g )Nrandom_gaussr=  r  r   s    r   test_random_gauss_startup$TestRandom.test_random_gauss_startup      &&~zBr   c                 (    U R                  SS5        g )Nr  r   r  r   s    r   test_numpy_random_startup$TestRandom.test_numpy_random_startup  s    &&~r:r   c                 (    U R                  SS5        g )Nnumpy_normalr=  r  r   s    r   test_numpy_gauss_startup#TestRandom.test_numpy_gauss_startup  r  r   c                    [        S5      nU R                  [        5       5      nS H  n[        R                  " U5      nUR                  5       nU R                  U" U5      UR                  U5      5        U R                  U" U5      UR                  U5      5        U R                  XE5        M     [        R                  " S5      R                  SS5      [        R                  " S5      R                  SSS5      [        R                  " S5      R                  SSSS5      /nU HK  nUR                  5       nU R                  U" U5      UR                  U5      5        U R                  XE5        MM     g )	Nznp.random.permutation)rg  r      r  r   r   rg     r   $   )	r|   r   r   r   r  r  r   permutationr  )r   rb   r   sr   r"   r  s          r   test_numpy_random_permutation(TestRandom.test_numpy_random_permutation  s$   01/12 A		!AA##DGQ]]1-=>##DGQ]]1-=>##A) ! 		"%%a+		"%%aA.		"%%aAq13 AA##DGQ]]1-=>##A) r   r   )r   r     Nr   )Vr   r   r   r   r   r  r  r  r  r  r!  r$  r4  r9  rF  rJ  rM  rP  rU  rX  r\  r_  rc  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  r0  r8  r>  rJ  rR  rX  rn  rv  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      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
C	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                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S&r(g')(TestRandomArraysi  z9
Test array-producing variants of np.random.* functions.
c                 L    SU< 3nSR                  SS U 5      n[        X45      $ )N
np.random., abcd)rp   rk   )r   funcnamenargsqualnamerh   s        r   _compile_array_dist$TestRandomArrays._compile_array_dist  s)    %-/IIfVen-	X11r   c                    U R                  U[        U5      S-   5      nU R                  [        5       5      n[	        XA5      nS H  nX&4-   nU" U6 nU" U6 n	UR
                  [        R
                  " S5      :X  a?  U	R
                  [        R
                  " S5      :X  a  UR                  U	R
                  5      nU R                  XSSS9  M     US-   nU" U6 nU" U6 n	U R                  XSSS9  g	)
z=
Check returning an array according to a given distribution.
r   rh  r   r   r  r~  r  rg  r*  r+  r   N)	r  r   r   r   r  r   r   astyper   )
r   r  scalar_argscfuncr   rj   r6   r1  rZ   r[   s
             r   _check_array_dist"TestRandomArrays._check_array_dist  s     ((3{3Ca3GH/12%D(Dt}H,C"((7"33II'!22#??3995##Hq#I   W$4=TlH1Er   c                   ^^ U R                  U[        U5      S-   5      nU R                  [        5       5      n[	        US5      mX#-   mUU4S jnUS-   nU" 5       nU" U6 n	U R                  XSSS9  S He  n
X*4-   n[        R                  " U
5      nUR                  n[        UR                  5       H  nU" 5       X'   M     U" U6 n	U R                  XSSS9  Mg     g	)
z~
Check returning an array according to a given gamma distribution,
where we use CPython's implementation rather than NumPy's.
r   r   c                     > T" T6 $ r   r   )_argsrj   pyfunc_argss    r   r  :TestRandomArrays._check_array_dist_gamma.<locals>.<lambda>  s
    &+"6r   r   r  rg  r  r  N)r  r   r   r   r  r   r   emptyflatr   r6   )r   r  r  extra_pyfunc_argsr  r   pyrandomr1  rZ   r[   r6   expected_flatidxrj   r  s                @@r   _check_array_dist_gamma(TestRandomArrays._check_array_dist_gamma  s    
 ((3{3Ca3GH  !1!34N+!56W$:TlH1ED(Dxx~H$MMMX]]+%-Z" ,,C##Hq#I  r   c                 "   [         R                  S 5       nU R                  U[        U5      S-   5      nSU< 3nSR	                  SS[        U5       5      n[        XV5      nS Hy  nX(4-   n	U" 5         U" U	6 n
U" 5         [        R                  " XR                  S9nUR                  n[        UR                  5       H
  nU" U6 X'   M     U R                  XS	S
S9  M{     U" 5         US-   n	U" U6 nU" 5         U" U	6 n
U R                  XS	S
S9  g)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    [         R                  R                  S5        g )Ni  )r   r   rW   r   r   r   reset6TestRandomArrays._check_array_dist_self.<locals>.reset.  s    IINN4 r   r   r  r	  r
  Nr  r   r  rg  r  r   )numbar   r  r   rp   rk   r   r  r   r  r   r6   r   )r   r  r  r(  
array_funcr  rh   scalar_funcr6   r1  r[   rZ   r  r#  s                 r   _check_array_dist_self'TestRandomArrays._check_array_dist_self%  s    
	! 
	! --hK8H18LM
%-/IIf%6c+&678	#H8D(DGd#CG xxII6H==DX]]+'5	 ,##Hq#I   	W$,$H1Er   c                    U R                  SS5      nSu  p#SnU" X#U5      nU R                  U[        R                  5        U R	                  UR
                  U5        U R                  UR                  [        R                  " S5      [        R                  " S5      45        U R                  [        R                  " XR:  5      5        U R                  [        R                  " XS:  5      5        X#-   S-  nX2-
  S-  nU R                  UR                  5       Xg-
  5        U R                  UR                  5       Xg-   5        g )	Nr   r   )r!  r"  r]  r]  r  r~  r   r  )r  r   r   ndarrayr   r  assertInr   rH  rk  r+  rl  r,  )r   r  r  r  r6   resrl  r/  s           r   r  #TestRandomArrays.test_numpy_randintL  s    ((A6	Ct$c2::.D)cii"((7"3RXXg5F!GHsz*+sz*+
azR
DJ7SXXZ4r   c                    U R                  SS5      nSnU" U5      nU R                  U[        R                  5        U R	                  UR
                  U5        U R	                  UR                  [        R                  " S5      5        U R                  [        R                  " US:  5      5        U R                  [        R                  " US:  5      5        U R                  [        R                  " US:*  5      5        U R                  [        R                  " US:  5      5        UR                  5       nU R                  US	5        U R                  US
5        g )Nr   r   r0  float64r   r   r#  r&  g?g?)r  r   r   r1  r   r  r   rH  rk  anyrl  r+  r,  )r   r  r6   r3  rl  s        r   test_numpy_random_random)TestRandomArrays.test_numpy_random_random\  s    ((15Dkc2::.D)BHHY$78scz*+sSy)*scz*+scz*+xxzd+T4(r   c                 (    U R                  SS5        g )Nbetar  r-  r   s    r   r   TestRandomArrays.test_numpy_betap  s    ##FJ7r   c                 (    U R                  SS5        g )Nr*  )r  r>  r  r   s    r   r0  $TestRandomArrays.test_numpy_binomials  s    z95r   c                 (    U R                  SS5        g )Nr7  r  r<  r   s    r   r8  %TestRandomArrays.test_numpy_chisquarev  s    ##K8r   c                 (    U R                  SS5        g )Nr  r  r?  r   s    r   r  'TestRandomArrays.test_numpy_exponentialy  s    }f5r   c                 (    U R                  SS5        g )Nr=  r<  r<  r   s    r   r>  TestRandomArrays.test_numpy_f|  s    ##C4r   c                 *    U R                  SSS5        g )Ngamma)r   r   r   r$  r   s    r   r  !TestRandomArrays.test_numpy_gamma  s    $$Wj"=r   c                 (    U R                  SS5        g )N	geometricr  r?  r   s    r   rJ  %TestRandomArrays.test_numpy_geometric      {F3r   c                 (    U R                  SS5        g )NrQ  r  r>  r?  r   s    r   rR  "TestRandomArrays.test_numpy_gumbel      x4r   c                 (    U R                  SS5        g )Nrj  r\  r?  r   s    r   rn  *TestRandomArrays.test_numpy_hypergeometric  s    /1ABr   c                 (    U R                  SS5        g )Nrt  rP  r?  r   s    r   rv  #TestRandomArrays.test_numpy_laplace      y*5r   c                 (    U R                  SS5        g )Nrz  rP  r?  r   s    r   r{  $TestRandomArrays.test_numpy_logistic  s    z:6r   c                 (    U R                  SS5        g )Nr[  )r  r   r?  r   s    r   rc  %TestRandomArrays.test_numpy_lognormal  s    {J7r   c                 (    U R                  SS5        g )Nr  r  r?  r   s    r   r  %TestRandomArrays.test_numpy_logseries  rN  r   c                 (    U R                  SS5        g )NrA  )r>  r   r?  r   s    r   rP  "TestRandomArrays.test_numpy_normal  rR  r   c                 (    U R                  SS5        g )Nr  r@  r?  r   s    r   r  "TestRandomArrays.test_numpy_pareto  s    x0r   c                 (    U R                  SS5        g )Nr  r  r?  r   s    r   r  #TestRandomArrays.test_numpy_poisson  s    y&1r   c                 (    U R                  SS5        g )Nr  r  r?  r   s    r   r  !TestRandomArrays.test_numpy_power  s    w/r   c                     [        SS9" [        5      nU" SSS5      u  p#U R                  UR                  S5        U R	                  X#5        g NTrc   *   r   r   r  )r   r\   r   r  r   r   r  rZ   r[   s       r   test_numpy_rand TestRandomArrays.test_numpy_rand  sC    T"#34b!QF+.r   c                     [        SS9" [        5      nU" SSS5      u  p#U R                  UR                  S5        U R	                  X#5        g rg  )r   r`   r   r  r   ri  s       r   rX  !TestRandomArrays.test_numpy_randn  sC    T"#45b!QF+.r   c                 (    U R                  SS5        g )Nr  r  r?  r   s    r   r  $TestRandomArrays.test_numpy_rayleigh  s    z62r   c                 (    U R                  SS5        g )Nr  r   r?  r   s    r   r  +TestRandomArrays.test_numpy_standard_cauchy      0"5r   c                 (    U R                  SS5        g )Nstandard_exponentialr   r?  r   s    r   r  0TestRandomArrays.test_numpy_standard_exponential  s    5r:r   c                 *    U R                  SSS5        g )Nstandard_gammar  r  rI  r   s    r   test_numpy_standard_gamma*TestRandomArrays.test_numpy_standard_gamma  s    $$%5vvFr   c                 (    U R                  SS5        g )Nr^   r   r?  r   s    r   rU  +TestRandomArrays.test_numpy_standard_normal  rr  r   c                 (    U R                  SS5        g )Nr  )r  r  r  r?  r   s    r   r  &TestRandomArrays.test_numpy_triangular  s    |_=r   c                 (    U R                  SS5        g )Nr   r#  r$  r?  r   s    r   r  #TestRandomArrays.test_numpy_uniform  rW  r   c                 (    U R                  SS5        g )Nr  r  r?  r   s    r   r   TestRandomArrays.test_numpy_wald  s    vz2r   c                 (    U R                  SS5        g )Nvonmisesr  r<  r   s    r   r  $TestRandomArrays.test_numpy_vonmises  s    ##J
;r   c                 (    U R                  SS5        g )Nr  r4  r?  r   s    r   r   TestRandomArrays.test_numpy_zipf  s    vv.r   r   N))r   r   r   r   r   r  r  r$  r-  r  r8  r  r0  r8  r  r>  r  rJ  rR  rn  rv  r{  rc  r  rP  r  r  r  rj  rX  r  r  r  rx  rU  r  r  r  r  r  r   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                   t    \ rS rSrSrSS jrS rS rS rS r	S r
SS	 jrS
 rS rS rS rS rS rS rSrg)TestRandomChoicei  z
Test np.random.choice.
c                 >   [        U5      n[        U5      nU R                  XT5        U R                  [        U5      [	        U5      5        U(       a&  U R                  [        U5      [        U5      U5        gU R                  [        U5      [        U5      U5        g)z4
Check basic expectations about a batch of samples.
N)r   r,  r  r  r   rF  r   r   )r   popr3  r:   spopsress         r   _check_resultsTestRandomChoice._check_results  ss     3x3xT(F3Kc3OOCIs3x5 SYC#6r   c                    U R                  [        U5      [        U5      S-  5        [        U5      [        U5      -  n[        R                  " U5      nU H/  nXE   nU R                  XcS-  5        U R	                  XcS-  5        M1     g)%
Check distribution of some samples.
r   r>  r   N)r+  r   collectionsCounterr,  )r   r  samplesexpected_frequencyr-   valuer?   s          r   r4  TestRandomChoice._check_dist  sz    
 	Gc#hn= \CH4(EA##AC'?@  $<= r   c                     / n[        U5      U:  a.  U[        U" 5       R                  5      -  n[        U5      U:  a  M.  USU $ )zS
Accumulate array results produced by *func* until they reach
*nresults* elements.
N)r   r   r  )r   rb   nresultsr3  s       r   _accumulate_array_results*TestRandomChoice._accumulate_array_results  sD    
 #h!4$$C #h!9H~r   c                    [        SS9" [        5      n[        U5      n[        U5       Vs/ s H
  oS" U5      PM     nnU R	                  X&5        [        US-  5       Vs/ s H
  oS" U5      PM     nnU R                  X'5        gs  snf s  snf )z
Check choice(a) against pop.
Trc   r   N)r   r2   r   r   r  r4  )r   r   r  r  r?   r   r3  dists           r   _check_choice_1 TestRandomChoice._check_choice_1  s|     T"=1H!&q*AuQx*C%"'C.1.Qa.1# +1s   B B
c                 R    Sn[        [        U5      5      nU R                  X5        g)z
Test choice(int)
rC  N)r   r   r  r   r?   r  s      r   test_choice_scalar_1%TestRandomChoice.test_choice_scalar_1  s$     58nQ$r   c                 ^    [         R                  " S5      S-  S-   nU R                  X5        g)z
Test choice(array)
rC  r   r   N)r   r  r  r   r  s     r   test_choice_array_1$TestRandomChoice.test_choice_array_1  )     iima#%S&r   c                     [        U5      n[        U" 5       R                  5      nU R                  X%U5        U R	                  XS-  5      nU R                  X&5        g)z@
Check array results produced by *func* and their distribution.
r   N)r   r   r  r  r  r4  )r   rb   r  r:   r?   r3  r  s          r   _check_array_results%TestRandomChoice._check_array_results  sO     H46;;Cg.--dG<#r   c                 ,  ^^^ [        SS9" [        5      m[        U5      nUS-
  SUS-
  S-  4US-  /nU HZ  mT" TT5      n[        T[        5      (       a  TOT4nU R                  UR                  U5        U R                  UUU4S jU5        M\     g)z$
Check choice(a, size) against pop.
Trc   r   r   r   c                     > T" T T5      $ r   r   r   r  r6   s   r   r  2TestRandomChoice._check_choice_2.<locals>.<lambda>0  s    eAtnr   N)r   r8   r   
isinstancer   r   r  r  )	r   r   r  r?   sizesr3  expected_shaper  r6   s	    `     @@r   _check_choice_2 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    Sn[         R                  " U5      nU R                  X5        g)z
Test choice(int, size)
rC  Nr   r  r  r  s      r   test_choice_scalar_2%TestRandomChoice.test_choice_scalar_22  $     iilQ$r   c                 ^    [         R                  " S5      S-  S-   nU R                  X5        g)z
Test choice(array, size)
rC  r   r   Nr  r  s     r   test_choice_array_2$TestRandomChoice.test_choice_array_2:  r  r   c                 6  ^^	^
 [        SS9" [        5      m	[        U5      nUS-
  SUS-
  S-  4/nSS/nU HL  m
S HC  nT	" TT
U5      n[        T
[        5      (       a  T
OT
4nU R                  UR                  U5        ME     MN     U H  m
U R                  UU	U
4S jU5        M     U H  m
U R                  UU	U
4S	 jUS5        M     US-   SUS-  S-   44 H+  m
U R                  [        5         T	" TT
S5        S
S
S
5        M-     g
! , (       d  f       M?  = f)z-
Check choice(a, size, replace) against pop.
Trc   r   r   r   F)TFc                     > T" T TS5      $ )NTr   r  s   r   r  2TestRandomChoice._check_choice_3.<locals>.<lambda>U  s    eAtT.Br   c                     > T" T TS5      $ )NFr   r  s   r   r  r  X  s    eAtU.Cr   N)
r   r;   r   r  r   r   r  r  r  rp  )r   r   r  r?   r  replacesr:   r3  r  r  r6   s    `       @@r   _check_choice_3 TestRandomChoice._check_choice_3A  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   1D		
D	c                 V    Sn[         R                  " U5      nU R                  X5        g)z!
Test choice(int, size, replace)
rC  Nr   r  r  r  s      r   test_choice_scalar_3%TestRandomChoice.test_choice_scalar_3_  r  r   c                 ^    [         R                  " S5      S-  S-   nU R                  X5        g)z#
Test choice(array, size, replace)
rC  r   r   Nr  r  s     r   test_choice_array_3$TestRandomChoice.test_choice_array_3g  r  r   c                    [        SS9S 5       n[        R                  R                  SSS9R	                  [        R
                  5      nUR                  5       nUR                  SU5      nUR                  5       nU" SU5      n[        R                  R                  XF5        [        R                  R                  X#5        [        R                  R                  X%5        g )NTrc   c                     [         R                  R                  S5        [         R                  " U S4[         R                  5      n[        U 5       H&  n[         R                  R                  USS5      X#'   M(     U$ )Ni9  r   F)r   r   rW   r  r  r   r1   )n_to_returnchoice_arrayr  r   s       r   numba_rands>TestRandomChoice.test_choice_follows_seed.<locals>.numba_randsq  sY    IINN4 ((K+RXX6C;')),5A (Jr   i,  r!  r5   rg  )
r   r   r   r   r  r  r  py_functestingassert_allclose)r   r  r  tmp_nprZ   tmp_nbr[   s          r   test_choice_follows_seed)TestRandomChoice.test_choice_follows_seedn  s     
d		 
	 yy((4(8??I""$&&q&1""$!V$


""81


""<8


""<8r   r   N)T)r   r   r   r   r   r  r4  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  r    sN    7">	$%'$C$%'&<%'9r   r  c                       \ rS rSrSr\R                  " / SQ\R                  S9r\\R                  5       -  rS r
S rS rS rS	rg
)TestRandomMultinomiali  z
Test np.random.multinomial.
)r   r   r   r   r   r   r   c                 6   U R                  U[        R                  5        U R                  UR                  [        U5      45        U R                  UR                  [        R                  " S5      [        R                  " S5      45        U R                  UR                  5       U5        [        X#5       H^  u  pEU R                  US5        U R                  XQ5        [        U5      U-  nU R                  XdS-  5        U R                  XdS-  5        M`     g)r  r  r~  r   r>  r   N)r   r   r1  r   r  r   r2  r   sumzipr+  r,  r  )r   r?   r@   sampler  nexppexps          r   _check_sample#TestRandomMultinomial._check_sample  s     	fbjj1E
}5fllRXXg%68I$JKq)5)GA##D!,  );?D##Dc'2  3w/ *r   c                 r   [        SS9" [        5      nSU R                  p2U" X#5      nU R                  X#U5        [	        U5      nU" X#5      nU R                  X#U5        Sn[
        R                  " SSUS-  S/[
        R                  S9nX3R                  5       -  nU" X#5      nU R                  X#U5        g	)
z
Test multinomial(n, pvals)
Trc   r!  i@B r   r   r   r   N)	r   rA   r@   r  r   r   r   r6  r  )r   r  r?   r@   r3  s        r   test_multinomial_2(TestRandomMultinomial.test_multinomial_2  s     T"#565Ao1S)UAo1S)!QS!,BJJ?Ao1S)r   c                     [        SS9" [        5      nSU R                  p2SnU" X#U5      nU R                  UR                  S   U5        U H  nU R                  X#U5        M     g)z'
Test multinomial(n, pvals, size: int)
Trc   r!  r   r   N)r   rD   r@   r   r  r  r   r  r?   r@   kr3  r  s          r   test_multinomial_3_int,TestRandomMultinomial.test_multinomial_3_int  sb     T"#565Aa 1q)Fq0 r   c                 
   [        SS9" [        5      nSU R                  p2SnU" X#U5      nU R                  UR                  SS U5        UR                  SUR                  S   45       H  nU R                  X#U5        M     g)z)
Test multinomial(n, pvals, size: tuple)
Trc   r!  )r   r  Nr   )r   rD   r@   r   r  r  r  r  s          r   test_multinomial_3_tuple.TestRandomMultinomial.test_multinomial_3_tuple  sz     T"#565Aa 3B+kk2syy}"56Fq0 7r   r   N)r   r   r   r   r   r   r   r6  r@   r  r  r  r  r  r   r   r   r   r  r    sB     HH'rzz:E	UYY[E0 *&
1
1r   r  c                   f    \ rS rSr\R
                  " / SQ\R                  S9rS rS r	S r
S rSrg	)
TestRandomDirichleti  )r   r   r   r   r   c                    U R                  U[        R                  5        U R                  UR                  [        R
                  5        Uc&  U R                  UR                  [        U5      5        Oc[        U5      [        L a(  U R                  UR                  U[        U5      45        O)U R                  UR                  U[        U5      4-   5         [        R                  " U5       H'  nU R                  US5        U R                  US5        M)     Uc   U R                  UR                  5       SSS9  g[        R                  " UR                  SS95       H  nU R                  USSS9  M     g)zCheck output structureNr   r   rg  )placesr   )axis)r   r   r1  r   r   r6  r6   r   typer   r  nditerr+  r,  assertAlmostEqualr  )r   rI   r6   r  r  totalss         r   r  !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                 D   [        SS9" [        5      nU R                  [        U R                  5      [        R
                  " / SQ[        R                  S9[        R
                  " / SQ[        R                  S94nU H  nU" U5      nU R                  USU5        M      g)"
Test dirichlet(alpha, size=None)
Trc   r   r   r"  r   r   r   r   r  r   N)r   rL   rI   r   r   r   r6  r  )r   r  alphasrI   r3  s        r   test_dirichlet_default*TestRandomDirichlet.test_dirichlet_default  sz     T"#:;JJ$**HH%RZZ8HH^2::6	
 E,CudC0 r   c                 r   [        SS9" [        5      nSnU R                  [        U R                  5      [        R
                  " / SQ[        R                  S9[        R
                  " / SQ[        R                  S94n[        R                  " X25       H  u  pEU" XE5      nU R                  XEU5        M!     g)r  Trc   )Nr   r   r   r  r   r  N)
r   rJ   rI   r   r   r   r6  	itertoolsproductr  )r   r  r  r  rI   r6   r3  s          r   test_dirichlet"TestRandomDirichlet.test_dirichlet  s     T"?3'JJ$**HH%RZZ8HH^2::6	
 %,,V;KE$CuC0 <r   c           
      B   [        SS9" [        5      n[        S5      nU R                  [        5       nU" US5        S S S 5        U R                  S[        WR                  5      5        U R                  nSSSSS	S
[        R                  " S5      [        R                  " S5      44nU HN  nU R                  [        5       nU" X%5        S S S 5        U R                  S[        UR                  5      5        MP     g ! , (       d  f       N= f! , (       d  f       NI= f)NTrc   )r   r   r   r   zdirichlet: alpha must be > 0.0              @r  r  r   r  r   r  r  r   ro  zGnp.random.dirichlet(): size should be int or tuple of ints or None, got)r   rJ   r   r  rp  r2  str	exceptionrI   r   int8r~  r   )r   r  rI   raisesr  r6   s         r   test_dirichlet_exceptions-TestRandomDirichlet.test_dirichlet_exceptions  s    T"?3i z*f%O +6F<L<L8MN

r3'8bggaj"((ST+=VWD"";/6e" 0MM-F$$%  +* 0/s   
C?	D?
D
D	r   N)r   r   r   r   r   r   r6  rI   r  r  r  r  r   r   r   r   r  r    s*    HH\4E<,11"r   r  c                   ,    \ rS rSrS rS rS rS rSrg)TestRandomNoncentralChiSquarei  c                    Ub  U R                  U[        R                  5        U R                  UR                  [        R
                  5        [        U[        5      (       a  U R                  UR                  U45        O3U R                  UR                  U5        OU R                  U[        5        [        R                  " U5       H  nU R                  US5        M     g Nr   )r   r   r1  r   r   r6  r  r   r  r  r  r+  )r   r6   r  r  s       r   r  +TestRandomNoncentralChiSquare._check_sample  s     !!&"**5V\\2::6$$$  w7  t4""651 99V$C##C+ %r   c                     [        SS9" [        5      nSnU H[  u  p4U" X45      nU R                  SU5        U" U[        R                  5      nU R                  [        R                  " U5      5        M]     g)z0
Test noncentral_chisquare(df, nonc, size=None)
Trc   )r>  r   r  )rg  r   )rf  r   )r   r"  N)r   rU   r  r   nanrH  isnan)r   r  inputsrQ   rR   r3  s         r   !test_noncentral_chisquare_default?TestRandomNoncentralChiSquare.test_noncentral_chisquare_default'  sf     T"#EF
 HB/CtS)BFF#COOBHHSM*	 r   c                 @   [        SS9" [        5      nSnSn[        R                  " X25       Hm  u  u  pEnU" XEU5      nU R	                  Xg5        U" U[
        R                  U5      nU R                  [
        R                  " U5      R                  5       5        Mo     g)z+
Test noncentral_chisquare(df, nonc, size)
Trc   )Nr   r  r   r  N)
r   rS   r  r  r  r   r  rH  r  rk  )r   r  r  r  rQ   rR   r6   r3  s           r   test_noncentral_chisquare7TestRandomNoncentralChiSquare.test_noncentral_chisquare:  s     T"#=>+
 !* 1 1& @JR$'Ct)BFFD)COOBHHSM--/0	 !Ar   c           
         [        SS9" [        5      nSu  p#U R                  [        5       nU" X#S5        S S S 5        U R	                  S[        WR                  5      5        Su  p#U R                  [        5       nU" X#S5        S S S 5        U R	                  S[        UR                  5      5        Su  p#SS	S
SSS[        R                  " S5      [        R                  " S5      44nU HO  nU R                  [        5       nU" X#U5        S S S 5        U R	                  S[        UR                  5      5        MQ     g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N[= f)NTrc   )r   r   r   zdf <= 0)r   r   znonc < 0)r   r   r  r  r  r  r	  r   ro  zRnp.random.noncentral_chisquare(): size should be int or tuple of ints or None, got)r   rS   r  rp  r2  r
  r  r   r  r~  r   )r   r  rQ   rR   r  r  r6   s          r   $test_noncentral_chisquare_exceptionsBTestRandomNoncentralChiSquare.test_noncentral_chisquare_exceptionsN  s$   T"#=>z*f"A +iV%5%5!67z*f"A +j#f&6&6"78r3'8bggaj"((ST+=VWD"";/6b% 0MM-F$$%  +*
 +* 0/s#   
E=
E
E$
E
E!$
E2	r   N)	r   r   r   r   r  r  r  r   r   r   r   r   r  r    s    ,$+&1(r   r  T)rd   nogilc                     U S:w  a  [         R                  " U 5        [        UR                  5       H  n[         R                  " S5      X'   M     g )Nr   r  )r   rW   r   r6   r  )rW   r  r   s      r   py_extract_randomnessr$  e  s9    qyD388_##B' r   rD  c                     U S:w  a  [         R                  R                  U 5        Sn[        UR                  5       H(  n[         R                  R                  [        5      X'   M*     g r  )r   r   rW   r   r6   r   _randint_limit)rW   r  r  r   s       r   np_extract_randomnessr'  n  sF    qy
		t	A388_"">2 r   c                   0    \ rS rSrSrS rS rS rS rSr	g)	ConcurrencyBaseTestix  rf  c                 J    SU R                  S5      4n[        U6   [        U6   g )Nrh  r   )_get_outputr$  r'  )r   r1  s     r   setUpConcurrencyBaseTest.setUp  s'    D$$Q'(t$t$r   c                 H    [         R                  " U[         R                  S9$ )Nr   )r   zerosr   )r   r6   s     r   r+  ConcurrencyBaseTest._get_output  s    xxBII..r   c                     SnS[         R                  " S5      -  nSn[         R                  R                  UR	                  5       X$S9  [         R                  R                  UR                  5       X4S9  g)z)
Check statistical properties of output.
r}  rD  r  g?)rtolN)r   r.  r  r  rl  std)r   r  expected_avgexpected_stdr2  s        r   check_output ConcurrencyBaseTest.check_output  sZ    
 2772;.


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


""3779l"Fr   c                    U H  nU R                  U5        M     U(       a  SnO[        U5      nU Vs1 s H  n[        US S 5      iM     nnU Vs1 s H  n[        USS  5      iM     nnU Vs1 s H  o3R                  5       iM     nnU R	                  [        U5      XE5        U R	                  [        U5      XF5        U R	                  [        U5      XG5        g s  snf s  snf s  snf )Nr   rg  rn  )r6  r   r   r  r   )r   r2  same_expectedr  expected_distinctheadstailssumss           r   check_several_outputs)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$5< 44-s   CC"0C'r   N)
r   r   r   r   _extract_iterationsr,  r+  r6  r>  r   r   r   r   r)  r)  x  s     !%/	G=r   r)  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)TestThreadsi  z+
Check the PRNG behaves well with threads.
c                 p  ^^^ [        US-   5       Vs/ s H  nU R                  U R                  5      PM      snmUUU4S jn[        U5       Vs/ s H  n[        R                  " XT4S9PM     nnU H  nUR                  5         M     U" U5        U H  nUR                  5         M     T$ s  snf s  snf )zW
Run *nthreads* threads extracting randomness with the given *seed*
(no seeding if 0).
r   c                    > T" TTU    S9  g )NrW   r  r   )r   extract_randomnessr2  rW   s    r   target.TestThreads.extract_in_threads.<locals>.target  s    Dgaj9r   )rG  r1  )r   r+  r@  	threadingThreadstartrp   )	r   nthreadsrF  rW   r   rG  threadsthr2  s	     ``    @r   extract_in_threadsTestThreads.extract_in_threads  s     "(Q,/1/q ##D$<$<=/1	:
 "(O-+q ##6=+ 	 - BHHJ  	xBGGI  #1-s   %B.B3c                 F    U R                  SUSS9nU R                  USS9  g)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  rh  r  Tr9  NrO  r>  r   rF  r2  s      r   check_thread_safetyTestThreads.check_thread_safety  s1     ))".@r)J 	""7$"?r   c                 F    U R                  SUSS9nU R                  USS9  g)zh
The PRNG in new threads should be implicitly initialized with
system entropy, if seed() wasn't called.
r  r   r  FrR  NrS  rT  s      r   check_implicit_initialization)TestThreads.check_implicit_initialization  s1    
 ))!-?a)H 	""7%"@r   c                 .    U R                  [        5        g r   )rU  r$  r   s    r   test_py_thread_safety!TestThreads.test_py_thread_safety        !67r   c                 .    U R                  [        5        g r   )rU  r'  r   s    r   test_np_thread_safety!TestThreads.test_np_thread_safety  r]  r   c                 .    U R                  [        5        g r   rX  r$  r   s    r   test_py_implicit_initialization+TestThreads.test_py_implicit_initialization      **+@Ar   c                 .    U R                  [        5        g r   rX  r'  r   s    r   test_np_implicit_initialization+TestThreads.test_np_implicit_initialization  re  r   r   N)r   r   r   r   r   rO  rU  rX  r[  r_  rc  rh  r   r   r   r   rB  rB    s.    0@A88BBr   rB  ntz(Windows is not affected by fork() issuesc                   4    \ rS rSrSrSrS rS rS rS r	Sr
g	)
TestProcessesi  z1
Check the PRNG behaves well in child processes.
Fc                 p  ^ ^^
^ [         R                  " 5       m
/ nUU 4S jmU
U4S jn[        [         S5      (       a  [         R                  " S5      nO[         n[	        U5       Vs/ s H  nUR                  US9PM     nnU H  nUR                  5         M     [	        U5       H!  nUR                  T
R                  SS95        M#     U H  nUR                  5         M     UR                  T" 5       5        U H/  n	[        U	[        5      (       d  M  T R                  SU	< 35        M1     U$ s  snf )	zH
Run *nprocs* processes extracting randomness
without explicit seeding.
c                  L   > TR                  TR                  5      n T" SU S9  U $ )Nr   rE  )r+  r@  )r  rF  r   s    r   target_inner8TestProcesses.extract_in_processes.<locals>.target_inner  s(    ""4#;#;<CA3/Jr   c                     >  T" 5       n TR                  U 5        g ! [         a  nTR                  U5        e S nAff = fr   )put	Exception)r  eqro  s     r   rG  2TestProcesses.extract_in_processes.<locals>.target  s:    "nc
  a	s    
=8=get_contextfork)rG  rg  )timeoutzException in child: )multiprocessingQueuehasattrrw  r   ProcessrK  r   getrp   r  rs  fail)r   nprocsrF  r2  rG  mpcr   procsr  r3  ru  ro  s   ` `       @@r   extract_in_processes"TestProcesses.extract_in_processes  s   
 !!#	
	 ?M22!--f5C!C-)'Q F+' 	 )AGGI  vANN1555+, AFFH 
 	|~&C#y))		c;<  %)s   )D3c                 H    U R                  SU5      nU R                  USS9  g)zz
The PRNG in new processes should be implicitly initialized
with system entropy, to avoid reproducing the same sequences.
r   FrR  N)r  r>  rT  s      r   rX  +TestProcesses.check_implicit_initialization'  s,    
 ++A/AB 	""7%"@r   c                 .    U R                  [        5        g r   rb  r   s    r   rc  -TestProcesses.test_py_implicit_initialization1  re  r   c                 .    U R                  [        5        g r   rg  r   s    r   rh  -TestProcesses.test_np_implicit_initialization4  re  r   r   N)r   r   r   r   r   _numba_parallel_test_r  rX  rc  rh  r   r   r   r   rl  rl    s'     ".`ABBr   rl  c            	          \ rS rSr0 SSSSS._SSS	SS
._SSSS._SSSS._SSSS._SSSS._SSSSS._SSSSS._SSSS._SSSSS._SSSSSS._S SSSS._S!SSSS._S"SSSS#._S$S%SS._S&SS'SS(._S)SS%S*._0 S+SSSS,._S-SSSS._S.SSS._S/SSS0._S1SSS._S2SSSS3._S4S5S0_S6S5S0_S7S5S0_S8SSS._S9S5S0_S:S;S<0_S=S5S0_S>S5S0_S?SSS@._SAS5S0_SBSSS._ESSSCSSD.SSSS3.SSSSE.SSSSF.SSS.SSS.SG.ErSH rSI rSJrgK)LTestNumPyRandomAPIi8  r  r   r   r   )r   r"   r6   r  r   g333333?)r?   r  r6   r3  )rQ   r6   znp.random.choicer   r7   znp.random.dirichletr   rH   r  )rV  r6   r;  )dfnumdfdenr6   r  )r  rV  r6   rA  )r  r6   rM  r   )rU  rV  r6   r[  )ngoodnbadnsampler6   rq  ry  rb  )rl  sigmar6   r~  r>  znp.random.multinomial)r   rC   r  )r?   r  znp.random.noncentral_chisquarerP   r   r  r  )lamr6   r  znp.random.randintr  r   r6   r  r  r  r	  r   rW   r  r  r   r  )r  r6   rS  r  g      @)leftmoderightr6   )mukappar6   )rl  rV  r6   )r  r  r  r  r  r  c           
      b   U R                   R                  5        H  u  pSR                  UR                  5        VVs/ s H  u  p4U SU 3PM     snn5      n[        SU SU S35      n0 n[	        US[
        0U5        US   nU" 5         [        U5      R                  S5        M     g s  snnf )	Nr	  rn   7
                def foo():
                    return ro   )
                r   foor   )API_CALL_TESTSitemsrp   r   execr   r   compile)	r   fnr1  r  vargstrtemplater  rb   s	            r   test_call_by_name$TestNumPyRandomAPI.test_call_by_namep  s     ++113HBYYtzz|D|tq1#Qqc
|DEF #4q ) H AD":q)
 U8DFJr" 4Ds   B+c           
      R   U R                   R                  5        GH  u  pSU;  a  M  SUS'   SR                  UR                  5        VVs/ s H  u  p4U SU 3PM     snn5      n[        SU SU S35      n0 n[	        US[
        0U5        US	   nU" 5       n	[        U5      R                  S5      n
U
" 5       n[        U[
        R                  5      (       a(  U R                  UR                  U	R                  5        M  U R                  XR                  5        GM     g s  snnf )
Nr6   r   r	  rn   r  ro   r  r   r  )r  r  rp   r   r  r   r   r  r  r1  r   r  r   	__class__)r   r  r1  r  r  r  r  r  rb   np_valnb_funcnb_vals               r   'test_call_distributions_with_empty_size:TestNumPyRandomAPI.test_call_distributions_with_empty_size  s    ++113HBT!DLYYtzz|D|tq1#Qqc
|DEF #4q ) H AD":q) U8DVF4j((,GYF&"**--  v||<%%f.>.>?5 4
  Es   D#r   N)r   r   r   r   r  r  r  r   r   r   r   r  r  8  s   5?&br1(E 5?*!#q,I5?+B-B5? )1*=5? ,tQ-G	5?
 .Q/G5? $rB%J5? (1sA)N5? ,2q-A5? )"r1*M5? 1Aq>?3L5? *2A+N5? +BQ,O5? ,b2q-Q5? ,3-B5?  .Qq/Q!5?" 4135G#5?$ 7r2AB9D%5?( )"r1*M)5?* )A*>+5?2 *2q+A35?4 (r1)=55?< *1a+K=5?D )61+E5?F 0&!G5?H 'I5?J +b!,DK5?L )61+M5?N 'O5?T 2FA;U5?V 7W5?X 1B2JY5?Z 2FA;[5?\ -R.C]5?^ 8:2PR78/:35r1+M35A,N13b!(L13Q+?.0!(<k5?Nn#4@r   r  __main__)Sr  r5  r-  rz  r   r   r  r  rI  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  r  r  r$  r&  r'  r)  rB  skipIfrg   rl  r  r   mainr   r   r   <module>r     sM       	   
       ' '  ? ? ) -- # "%*;+<1&?4&&#$'* .)O,&,--.'(
"/,

x 
A0H A0Hk* k*\]/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o@ o@h zMMO r   