
    J/Ph                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlZd dlZd dlZd dlmZmZmZ d dlmZ d dlmZmZmZ d dlmZ dZd Zd	 Zd
 Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d  Z4 e3d!          Z5 e1d"          Z6 e2d#          Z7 e3d$          Z8 e1d%          Z9 e2d&          Z:d' Z;d( Z<d) Z=d* Z>d+ Z? G d, d-e          Z@ G d. d/e@          ZA G d0 d1e@          ZB G d2 d3e@          ZC G d4 d5e@          ZD G d6 d7e@          ZE G d8 d9e@          ZF G d: d;e@          ZG ed<d<=          d>             ZHd?ZI ed<d<=          d@             ZJ G dA dBe          ZK G dC dDeK          ZL ejM        ejN        dEk    dF           G dG dHeK                      ZO G dI dJe          ZPeQdKk    r ejR                     dS dS )L    N)dedent)jit
_helperlibnjit)types)TestCasecompile_functiontag)TypingErrorp  c                  (    t          j                    S N)r   rnd_get_py_state_ptr     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_random.pyget_py_state_ptrr          *,,,r   c                  (    t          j                    S r   )r   rnd_get_np_state_ptrr   r   r   get_np_state_ptrr      r   r   c                 @    t           j                            |           S r   nprandomrandintas    r   numpy_randint1r   #   s    9Qr   c                 B    t           j                            | |          S r   r   r   bs     r   numpy_randint2r#   &   s    9Q"""r   c                 ,    t          j        | |          S r   )r   r   r!   s     r   random_randintr%   )   s    >!Qr   c                 *    t          j        |           S r   r   	randranger   s    r   random_randrange1r)   ,   s    Ar   c                 ,    t          j        | |          S r   r'   r!   s     r   random_randrange2r+   /   s    Aq!!!r   c                 .    t          j        | ||          S r   r'   )r   r"   cs      r   random_randrange3r.   2   s    Aq!$$$r   c                 @    t           j                            |           S r   r   r   choicer   s    r   numpy_choice1r2   5   s    9Ar   c                 D    t           j                            | |          S Nsizer0   r   r6   s     r   numpy_choice2r8   8   s    9AD)))r   c                 F    t           j                            | ||          S )N)r6   replacer0   )r   r6   r:   s      r   numpy_choice3r;   ;   s    9AD':::r   c                 B    t           j                            | |          S r   r   r   multinomial)npvalss     r   numpy_multinomial2rA   >   s    9  E***r   c                 F    t           j                            | ||          S )N)r@   r6   r=   r?   r@   r6   s      r   numpy_multinomial3rD   A   s    9  %d ;;;r   c                 D    t           j                            | |          S r4   r   r   	dirichletalphar6   s     r   numpy_dirichletrJ   D   s    9u4000r   c                 @    t           j                            |           S r   rF   )rI   s    r   numpy_dirichlet_defaultrL   G   s    9u%%%r   c                 F    t           j                            | ||          S r4   r   r   noncentral_chisquaredfnoncr6   s      r   numpy_noncentral_chisquarerS   J   s    9))"d)>>>r   c                 B    t           j                            | |          S r   rN   )rQ   rR   s     r   "numpy_noncentral_chisquare_defaultrU   M   s    9))"d333r   c                    t           j                            |            t           j                            ||f          }t           j                            |            t           j                            ||          }||fS r   )r   r   seedrandrW   r   r"   expectedgots        r   numpy_check_randr\   P   sb    INN4yA''HINN4
)..A

CS=r   c                    t           j                            |            t           j                            ||f          }t           j                            |            t           j                            ||          }||fS r   )r   r   rW   standard_normalrandnrY   s        r   numpy_check_randnr`   W   sb    INN4y((!Q00HINN4
)//!Q

CS=r   c                     dt                      z  }t          d|t                                } t          d          |          S )Nz@def func(%(argstring)s):
        return %(name)s(%(argstring)s)
funcTnopython)localsr	   globalsr   )name	argstringcodepyfuncs       r   jit_with_argsrk   ^   sG    hhD fdGII66F3f%%%r   c                     d                     d |D                       }d                     |          }d| d|  d| d}t          d|t                                } t          d	          |          S )
N,c                     g | ]	}| d | 
S =r   ).0kws     r   
<listcomp>z#jit_with_kwargs.<locals>.<listcomp>g   s"    %H%H%Hrllbll%H%H%Hr   z	def func(z):
        return (z)
rb   Trc   )joinr	   rf   r   )rg   
kwarg_listcall_args_with_kwargs	signatureri   rj   s         r   jit_with_kwargsry   e   s    HH%H%HZ%H%H%HII$$I   ,  D fdGII66F3f%%%r   c                 "    t          | d          S )N rk   rg   s    r   jit_nullaryr~   o   s    r"""r   c                 "    t          | d          S )Nr   r|   r}   s    r   	jit_unaryr   r   s    s###r   c                 "    t          | d          S )Nza, br|   r}   s    r   
jit_binaryr   u   s    v&&&r   c                 "    t          | d          S )Nza, b, cr|   r}   s    r   jit_ternaryr   x   s    y)))r   random.gausszrandom.randomzrandom.seednp.random.normalnp.random.randomnp.random.seedc                     |                                  d         }|dd         |d         }}t          j        ||t          |          f           ||fS )z?
    Copy state of Python random *r* to Numba state *ptr*.
       N)getstater   rnd_set_statelist)rptrmtintsindexs        r   _copy_py_stater      sR     
aBSbS'2b6%DS5$t**"5666;r   c                     |                                  dd         \  }}t          j        ||d |D             f           ||fS )z>
    Copy state of Numpy random *r* to Numba state *ptr*.
    r      c                 ,    g | ]}t          |          S r   )intrq   xs     r   rs   z"_copy_np_state.<locals>.<listcomp>   s    *@*@*@a3q66*@*@*@r   )	get_stater   r   )r   r   r   r   s       r   _copy_np_stater      sO     ++--!$KD%S5*@*@4*@*@*@"ABBB;r   c                    |                                  \  }}}|d         }|d d         }t          |          dk    sJ dt          j        |d          |f}||dz  }n|d|fz  }t          j                            |           d S )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CRCjGw<<39996BE![!!Ir   c                 :    d|                      |dz  d          z  S )N       @      ?)gammavariate)r   rQ   s     r   py_chisquarer      s    S#....r   c                 P    t          | |          |z  t          | |          |z  z  S r   )r   )r   numdenoms      r   py_fr      s0    !S!!E)!U##c)+ ,r   c                       e Zd ZddZddZdS )BaseTest   c                 N    t          j        |          }t          ||           |S r   )r   Randomr   selfr   rW   r   s       r   _follow_cpythonzBaseTest._follow_cpython   s&    M$q#r   c                 d    t           j                            |          }t          ||           |S r   )r   r   RandomStater   r   s       r   _follow_numpyzBaseTest._follow_numpy   s,    I!!$''q#r   Nr   )__name__
__module____qualname__r   r   r   r   r   r   r      s<           
     r   r   c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestInternalsz9
    Test low-level internals of the implementation.
    c                    t          j        |          }|\  }}|                     |t                     |                     |t                     |                     t          |          t                     |dz  t          z  }d t          t                    D             }t          j	        |||f           |                     t          j        |          ||f           d S )Ni c                     g | ]}|d z  S )r   r   rq   is     r   rs   z6TestInternals._check_get_set_state.<locals>.<listcomp>   s    (((!A(((r   )
r   rnd_get_stateassertIsInstancer   r   assertEqualr   Nranger   )r   r   stater   r   js         r   _check_get_set_statez"TestInternals._check_get_set_state   s    (--4a%%%dD)))TA&&&Z1((uQxx((( q$i0001#66D	BBBBBr   c                    t          j                    }t          ||          \  }}t          |t          dz   d          D ]}|                                  t          j        |           |                                d         }|d d         |d         }}|                     t          j	        |          d         t          |                     d S )Nr   r   r   )r   r   r   r   r   r   rnd_shuffler   r   r   r   )r   r   r   r   r   r   r   s          r   _check_shufflezTestInternals._check_shuffle   s    MOO$Q,,eua!eQ'' 	 	AHHJJJJs###ZZ\\!_"gr"ve1#66q94::FFFFFr   c                    t           j                                        }dD ]}|                    t          j        |                     |                                }t          |d                   }|d         }|t          k    sJ t          j	        ||           | 
                    t          j        |          ||f           d S )N)r   r   }   l    r   r   )r   r   r   rW   r   r   r   r   r   rnd_seedr   r   )r   r   r   r   str   r   s          r   _check_initzTestInternals._check_init   s     I!!##' 	K 	KAFF29Q<<   B1;;DqEEA::::Q'''Z5c::UDMJJJJ	K 	Kr   c                    g }t          d          D ]x}t          j        |d           t          j        |t          j        d                     |                    t          t          j        |          d                              y|                     t          t          |                    t          |                     d S )N
   r   i   r   )r   r   r   osurandomappendtupler   r   r   set)r   r   statesr   s       r   _check_perturbzTestInternals._check_perturb   s    r 	C 	CAQ'''RZ__555MM%
 8 = =a @AABBBBS[[))3v;;77777r   c                 H    |                      t                                 d S r   )r   r   r   s    r   test_get_set_statez TestInternals.test_get_set_state   s#    !!"2"4"455555r   c                 H    |                      t                                 d S r   )r   r   r   s    r   test_shufflezTestInternals.test_shuffle   #    ,../////r   c                 H    |                      t                                 d S r   )r   r   r   s    r   	test_initzTestInternals.test_init   s#    )++,,,,,r   c                 H    |                      t                                 d S r   )r   r   r   s    r   test_perturbzTestInternals.test_perturb   r   r   N)r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r      s         
C 
C 
CG G GK K K	8 	8 	86 6 60 0 0- - -0 0 0 0 0r   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
	 	 dVdZ	 	 dVdZd Zd Zd Zd Zd Zd Zd Zd Zd ZdWdZd Zd Zd Zd Zd Zd Zd Zd  Zd! Zd" Z d# Z!d$ Z"d% Z#d& Z$d' Z%d( Z&d) Z'd* Z(d+ Z)d, Z*d- Z+d. Z,d/ Z-d0 Z.d1 Z/d2 Z0d3 Z1d4 Z2d5 Z3d6 Z4d7 Z5d8 Z6d9 Z7d: Z8d; Z9d< Z:d= Z;d> Z<d? Z=d@ Z>dA Z?dB Z@dC ZAdD ZBdE ZCdF ZDdG ZEdH ZFdI ZGdJ ZHdK ZIdL ZJdM ZKdN ZLdO ZMdP ZNdQ ZOdR ZPdS ZQdT ZRdU ZSdS )X
TestRandomc           	      H   t           j                                        }dD ]}|                    t          j        |                      ||           t          t          dz             D ]4}|                      |            |                    dd                     5dS )z<
        Check seed()- and random()-like functions.
        r   r   r   l    r   r   r   N)	r   r   r   rW   r   r   r   assertPreciseEqualuniform)r   seedfunc
randomfuncr   r   r   s         r   _check_random_seedzTestRandom._check_random_seed  s    
 I!!##' 	K 	KAFF29Q<<   HQKKK1r6]] K K''

aiiS6I6IJJJJK	K 	Kr   c                 F    |                      t          t                     d S r   )r   random_seedrandom_randomr   s    r   test_random_randomzTestRandom.test_random_random  s    ];;;;;r   c                    |                      t          t                     |                      t          t          d                     |                      t          t          d                     |                      t          t          d                     |                      t          t          d                     d S Nnp.random.random_samplenp.random.ranfnp.random.sampleznp.random.rand)r   
numpy_seednumpy_randomr~   r   s    r   test_numpy_randomzTestRandom.test_numpy_random  s    
L999
K8Q,R,RSSS
K8H,I,IJJJ
K8J,K,KLLL
K8H,I,IJJJJJr   c           
      <   t           j                                        }dD ]z}|                    t          j        |                      ||           t          d          D ]6}|                      ||          |                    dd|                     7{d S )Nr   r   r   r   )r   r   r   rW   r   r   r   r   )r   r   r   r   r   r?   s         r   _check_random_sizedzTestRandom._check_random_sized   s    I!!##' 	O 	OAFF29Q<<   HQKKK2YY O O''

1qyyc17M7MNNNNO		O 	Or   c                 F   |                      t          t          d                     |                      t          t          d                     |                      t          t          d                     |                      t          t          d                     d S r   )r  r  r   r   s    r   test_numpy_random_sizedz"TestRandom.test_numpy_random_sized*  s      Y7P-Q-QRRR  Y7G-H-HIII  Y7I-J-JKKK  Y7G-H-HIIIIIr   c                    d}t          d           d t          |          D             }t          d           d t          |          D             }t          d           t          d           d t          |          D             }|                     d |D             |           |                     d |D             |           d S )	Nr   r   c                 *    g | ]}t                      S r   )r   r   s     r   rs   z:TestRandom.test_independent_generators.<locals>.<listcomp>4  s    888!moo888r   r   c                 *    g | ]}t                      S r   )r  r   s     r   rs   z:TestRandom.test_independent_generators.<locals>.<listcomp>6  s    777lnn777r   c                 F    g | ]}t                      t                      fS r   )r   r  r   s     r   rs   z:TestRandom.test_independent_generators.<locals>.<listcomp>9  s%    EEEq-//<>>2EEEr   c                     g | ]
}|d          S )r   r   rq   ps     r   rs   z:TestRandom.test_independent_generators.<locals>.<listcomp>:       5 5 5!1 5 5 5r   c                     g | ]
}|d          S r   r   r  s     r   rs   z:TestRandom.test_independent_generators.<locals>.<listcomp>;  r  r   )r   r   r  r   )r   r   
py_numbers
np_numberspairss        r   test_independent_generatorsz&TestRandom.test_independent_generators0  s    A88uQxx888
177eAhh777
A1EEE!HHEEE 5 5u 5 5 5zBBB 5 5u 5 5 5zBBBBBr   c                 j   |                      |          }t          dd          D ]8}|                    |          } ||          }|                     ||           9|                     t
          |d           |                     t
          |d           |                     t
          |d           dS )z6
        Check a getrandbits()-like function.
        r   A   i r   N)r   r   getrandbitsr   assertRaisesOverflowError)r   rb   r   r   nbitsrZ   r[   s          r   _check_getrandbitszTestRandom._check_getrandbits=  s    
   %%1b\\ 	3 	3E}}U++H$u++C##Hc2222-r222-w777-r22222r   c                 d    |                      t          d          t                                 d S )Nzrandom.getrandbits)r  r   r   r   s    r   test_random_getrandbitsz"TestRandom.test_random_getrandbitsK  .    	*> ? ?AQASASTTTTTr   r   double   Nc           	         
 t          |          sJ |D ]X

fdt          |          D             }
fdt          |          D             }	|                     ||	||d
           Yd S )Nc                     g | ]}  S r   r   )rq   r   argsrb   s     r   rs   z*TestRandom._check_dist.<locals>.<listcomp>W  s    :::qttT{:::r   c                 .    g | ]}r d in  S r   r   )rq   r   r$  pydtyperj   s     r   rs   z*TestRandom._check_dist.<locals>.<listcomp>X  sI     1 1 1 ;BT&&$6g666vvt} 1 1 1r   for arguments preculpsmsgr   r   r   )r   rb   rj   argslistnitersr)  r*  r&  results	pyresultsr$  s    ``    `  @r   _check_distzTestRandom._check_distS  s    8}} 	F 	FD:::::E&MM:::G1 1 1 1 1 1"'--1 1 1I##GYT>Bd(D $ F F F F		F 	Fr   c           	         
 t          |          sJ |D ]X

fdt          |          D             }
fdt          |          D             }	|                     ||	||d
           Yd S )Nc                      g | ]
} d i S )r   r   )rq   r   rb   kwargss     r   rs   z1TestRandom._check_dist_kwargs.<locals>.<listcomp>a  s%    ===!tt~~f~~===r   c                 <    g | ]}r di d in di S )r   r   r   )rq   r   r4  r&  rj   s     r   rs   z1TestRandom._check_dist_kwargs.<locals>.<listcomp>b  s`     1 1 1 >EZ&&996999999&&JZJZSYJZJZ 1 1 1r   r'  r(  r,  )r   rb   rj   
kwargslistr.  r)  r*  r&  r/  r0  r4  s    ``    `  @r   _check_dist_kwargszTestRandom._check_dist_kwargs]  s    :  	H 	HF=====uV}}===G1 1 1 1 1 1"'--1 1 1I##GYT>Df(F $ H H H H		H 	Hr   c                 
   |                      |          }|+|                     ||j        g dt          dz  dz              ||                     ||j        dg           ||                     ||j        dg           dS dS )z0
        Check a gauss()-like function.
        Nr   r   )r         ?)g       r;  r   r   r.  r;  r   )r   r1  normalr   r   func2func1func0r   r   s         r   _check_gausszTestRandom._check_gaussg  s    
 s##UAHBBB$%FRK  1 1 1 UAHvh777UAHrd33333 r   c                 h    |                      t          d          d d t                                 d S )Nr   rC  r   r   r   s    r   test_random_gausszTestRandom.test_random_gaussv  s1    *^44dDBRBTBTUUUUUr   c                 h    |                      t          d          d d t                                 d S )Nzrandom.normalvariaterE  r   s    r   test_random_normalvariatez$TestRandom.test_random_normalvariatey  s>     	*%;<<dD*,,	. 	. 	. 	. 	.r   c                     |                      t          d          t          d          t          d          t	                                 d S )Nr   )rC  r   r   r~   r   r   s    r   test_numpy_normalzTestRandom.test_numpy_normal  sP    *%788#$677%&899*,,	. 	. 	. 	. 	.r   c                 h    |                      d d t          d          t                                 d S )Nnp.random.standard_normalrC  r~   r   r   s    r   test_numpy_standard_normalz%TestRandom.test_numpy_standard_normal  s<    $k2M&N&N*,,	. 	. 	. 	. 	.r   c                 h    |                      d d t          d          t                                 d S )Nznp.random.randnrM  r   s    r   test_numpy_randnzTestRandom.test_numpy_randn  s<    $k2C&D&D*,,	. 	. 	. 	. 	.r   c                 
   |                      |          }|+|                     ||j        g dt          dz  dz              ||                     ||j        dg           ||                     ||j        dg           dS dS )z9
        Check a lognormvariate()-like function.
        Nr9  r   r   r<  r=  r   )r   r1  	lognormalr   r?  s         r   _check_lognormvariatez TestRandom._check_lognormvariate  s    
 s##UAKBBB$%FRK  1 1 1 UAK&:::UAK"66666 r   c                 h    |                      t          d          d d t                                 d S )Nzrandom.lognormvariate)rS  r   r   r   s    r   test_random_lognormvariatez%TestRandom.test_random_lognormvariate  sB    "":.E#F#F#'/?/A/A	C 	C 	C 	C 	Cr   c                     |                      t          d          t          d          t          d          t	                                 d S )Nnp.random.lognormal)rS  r   r   r~   r   r   s    r   test_numpy_lognormalzTestRandom.test_numpy_lognormal  sP    "":.C#D#D#,-B#C#C#./D#E#E#3#5#5	7 	7 	7 	7 	7r   c           	      6   g }t          d          D ]a}	|                     |d                     |                     |dd                     | |                     |ddd                     b|r|                     |          j        }
n|                     |          j        }
fddD             }|r|nd}|D ]}|                     ||
|fgd|           |                     ||
d	d
|z   fgd|           |d|                      |d	d
|z   d           |
d	d
|z   d                     |                      |d
|z   d
d           |
d
|z   d
d                     |                     t          |d           |                     t          |d           |                     t          |dd           |                     t          |dd
           |>|                     t          |ddd           |                     t          |ddd           dS dS )z4
        Check a randrange()-like function.
        r    e   Nr   c                      g | ]
}|k     |S r   r   )rq   w	max_widths     r   rs   z/TestRandom._check_randrange.<locals>.<listcomp>  s    TTTa)mm!mmmr   )r   r[       l                    )r.  r&  r      r      r   r   )
r   r   r   r   r   r(   r1  r   r  
ValueError)r   rA  r@  func3r   r^  is_numpytpr   r   rrwidthsr&  widths        `        r   _check_randrangezTestRandom._check_randrange  s   
 r 	4 	4AKKi(()))KKa++,,, EE!Y22333 	5##C((0BB%%c**4BTTTTBTTT *""d 		> 		>EUB%
2$+  - - -UB"ah(8$+  - - - ''b!e)Q(?(?(*2q5y!(<(<> > >''a%iB(?(?(*1u9a(<(<> > > 	*eQ///*eR000*eQ222*eQ222j%Ar:::j%Aq99999 r   c           	      P   t           j        dft           j        dffD ]\  }} t          |f          t                    } t          ||f          t
                    } t          |||f          t                    }|                     |||t                      |d           d S )N                    F)	r   int64int32r   r)   r+   r.   rn  r   )r   rj  r^  cf1cf2cf3s         r   test_random_randrangez TestRandom.test_random_randrange  s    ${E2U[%4HI 	4 	4MB	$u++/00C"$By""#455C%$B}%%&788C!!#sC1A1C1C"+U4 4 4 4		4 	4r   c           
      @   t           j        t          j        dft           j        t          j        dffD ]j\  }}} t	          |f          t
                    } t	          ||f          t                    }|                     ||d t                      |d|           kd S )Nrp  rq  T)	r   rr  r   rs  r   r   r#   rn  r   )r   rj  np_tpr^  rt  ru  s         r   test_numpy_randintzTestRandom.test_numpy_randint  s    &+k28U%C&+k28U%C%E 	/ 	/ By$u++n--C!$By//.11C!!#sD2B2D2Di"&/ / / /		/ 	/r   c                    g }t          d          D ]!}|                     |dd                     "|                     t          |          t          t	          |                    |           |                     |          }dD ].}|d         |k    r|                     ||j        |gd           /|                     t          |dd           |                     t          |dd           d	S )
z2
        Check a randint()-like function.
        r   r[  rZ  )r   r[  )   r`  )   ra  r   r<     r   N)
r   r   r   r   r   r   r1  r   r  rg  )r   rb   r   r^  r   r   r   r$  s           r   _check_randintzTestRandom._check_randint  s    
 r 	, 	,AKKQ	**++++TCD		NND999  %%= 	A 	ADAw""T19tfR@@@@*dAq111*dAq11111r   c                     t           j        dft           j        dffD ]G\  }} t          ||f          t                    }|                     |t                      |           Hd S )Nrp  rq  )r   rr  rs  r   r%   r  r   )r   rj  r^  cfs       r   test_random_randintzTestRandom.test_random_randint  sq    ${E2U[%4HI 	C 	CMB	 r2i00B$4$6$6	BBBB	C 	Cr   c                 l    |                      |          }|                     ||j        g d           dS )z2
        Check a uniform()-like function.
        ))      ?    .A)           @@)r  r  N)r   r1  r   r   rb   r   r   s       r   _check_uniformzTestRandom._check_uniform  sM    
   %%qy???	A 	A 	A 	A 	Ar   c                 ~    |                      |          }t          ||          }|                     |||           dS )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   getattrr7  )r   rb   r   distrib	paramlistr   distrib_method_of_numpys          r   _check_any_distrib_kwargsz$TestRandom._check_any_distrib_kwargs  sF     s##")!W"5"5&=yIIIIIr   c                 d    |                      t          d          t                                 d S )Nzrandom.uniform)r  r   r   r   s    r   test_random_uniformzTestRandom.test_random_uniform  s.    J'788:J:L:LMMMMMr   c                 d    |                      t          d          t                                 d S )Nnp.random.uniform)r  r   r   r   s    r   test_numpy_uniformzTestRandom.test_numpy_uniform
  s.    J':;;=M=O=OPPPPPr   c           
          |                      t          dddg          t                      dddddd	ddddg
           d S )Nr  lowhighr   r  r  )r  r  r  r  r  r  ry   r   r   s    r   test_numpy_uniform_kwargsz$TestRandom.test_numpy_uniform_kwargs  sm    &&/%AA"C00#S11"D113	 	' 	4 	4 	4 	4 	4r   c                     |                      t          dg d          t                      dddddddddddddddd dddd dddd dg	           d S )
Nr  r  r  r6   r   r  r  r   r  r  r  r  r   s    r   test_numpy_uniform_empty_sizez(TestRandom.test_numpy_uniform_empty_size  s    &&/1H1H1HII"C<<#S"=="D"=="C>>#S$??"D$??B	 	' 		C 		C 		C 		C 		Cr   c                     |                      |          }||                     ||j        g d           |                     ||j        dg           dS )z5
        Check a triangular()-like function.
        N)r        @)r  r  )r  r  )r  r  皙@)r   r1  
triangular)r   r@  rh  r   r   s        r   _check_triangularzTestRandom._check_triangular"  sj    
   %%UALBBBD D D.?@@@@@r   c                     |                      t          d          t          d          t                                 d S )Nzrandom.triangular)r  r   r   r   r   s    r   test_random_triangularz!TestRandom.test_random_triangular-  sD    z*=>>*+>??/11	3 	3 	3 	3 	3r   c                 v    t          d          fd}|                     d |t                                 d S )Nnp.random.triangularc                      | ||          S r   r   )lr   mr  s      r   <lambda>z2TestRandom.test_numpy_triangular.<locals>.<lambda>4  s    ::aA+>+> r   )r   r  r   )r   fixed_triangularr  s     @r   test_numpy_triangularz TestRandom.test_numpy_triangular2  sF     !788
>>>>t%57G7I7IJJJJJr   c                 >   |                      |          }||                     ||j        g d           |3|                      |d          |                    dd                     |t|                     t
          |dd           |                     t
          |dd           |                     t
          |dd           |                     t
          |dd           |:|                     t
          |d           |                     t
          |d           dS dS )z7
        Check a gammavariate()-like function.
        N)r;        @)r   r  r  r  r   r         )r   r1  r   r   r  rg  )r   r@  rA  r   r   s        r   _check_gammavariatezTestRandom._check_gammavariate7  s+   
   %%UANAAAC C C##EE#JJsC0H0HIIIj%c:::j%c:::j%s;;;j%d;;;j%555j%66666 r   c                 f    |                      t          d          d t                                 d S )Nzrandom.gammavariate)r  r   r   r   s    r   test_random_gammavariatez#TestRandom.test_random_gammavariateL  s:      ,A!B!BD!1!3!3	5 	5 	5 	5 	5r   c                     |                      t          d          t          d          t                                 |                      d t          d          t                                 d S )Nnp.random.gammanp.random.standard_gamma)r  r   r   r   r   s    r   test_numpy_gammazTestRandom.test_numpy_gammaP  su      ,=!>!>!*+<!=!=!1!3!3	5 	5 	5 	  !*+E!F!F!1!3!3	5 	5 	5 	5 	5r   c                 R   |                      |          }|                     ||j        dg           |                     t          |dd           |                     t          |dd           |                     t          |dd           |                     t          |dd           dS )z6
        Check a betavariate()-like function.
        r  r   r   r  N)r   r1  betavariater  rg  r  s       r   _check_betavariatezTestRandom._check_betavariateX  s    
   %%q}zl;;;*dC555*dC555*dD#666*dC66666r   c                 d    |                      t          d          t                                 d S )Nzrandom.betavariate)r  r   r   r   s    r   test_random_betavariatez"TestRandom.test_random_betavariatee  s.    
+? @ @BRBTBTUUUUUr   c                 d    |                      t          d          t                                 d S )Nnp.random.beta)r  r   r   r   s    r   test_numpy_betazTestRandom.test_numpy_betah  s.    
+; < <>N>P>PQQQQQr   c                 j    |                      |          }|                     ||j        dg           dS )z:
        Check a vonmisesvariate()-like function.
        r  N)r   r1  vonmisesvariater  s       r   _check_vonmisesvariatez!TestRandom._check_vonmisesvariatek  s:       %%q0:,?????r   c                 d    |                      t          d          t                                 d S )Nzrandom.vonmisesvariate)r  r   r   r   s    r   test_random_vonmisesvariatez&TestRandom.test_random_vonmisesvariater  s8    ##J/G$H$H$4$6$6	8 	8 	8 	8 	8r   c                 d    |                      t          d          t                                 d S )Nnp.random.vonmises)r  r   r   r   s    r   test_numpy_vonmiseszTestRandom.test_numpy_vonmisesv  s8    ##J/C$D$D$4$6$6	8 	8 	8 	8 	8r   c           	          |                      |          }dD ]K}t          d          D ]9}|                      ||          |                    d|z            d           :LdS )z
        Check a expovariate()-like function.  Note the second argument
        is inversed compared to np.random.exponential().
        )g?r;  r  r   r   r   )r)  N)r   r   r   exponential)r   rb   r   r   lambdr   s         r   _check_expovariatezTestRandom._check_expovariatez  s    
 s##$ 	7 	7E1XX 7 7''UQ]]1u95M5M-5 ( 7 7 7 77	7 	7r   c                 d    |                      t          d          t                                 d S )Nzrandom.expovariate)r  r   r   r   s    r   test_random_expovariatez"TestRandom.test_random_expovariate  r  r   c                     |                      |          }||                     ||j        g d           ||                     ||j        dg           dS dS )z6
        Check a exponential()-like function.
        N)r=  r   r  r   )r   r1  r  )r   rA  rB  r   r   s        r   _check_exponentialzTestRandom._check_exponential  sn     s##UAM3K3K3KLLLUAMB488888 r   c                     |                      t          d          t          d          t                                 d S )Nnp.random.exponential)r  r   r~   r   r   s    r   test_numpy_exponentialz!TestRandom.test_numpy_exponential  sD    	*A B B +,C D D 0 2 2	4 	4 	4 	4 	4r   c                 f    |                      d t          d          t                                 d S )Nnp.random.standard_exponential)r  r~   r   r   s    r   test_numpy_standard_exponentialz*TestRandom.test_numpy_standard_exponential  s;     +,L M M 0 2 2	4 	4 	4 	4 	4r   c                 l    |                      |          }|                     ||j        ddg           dS )z8
        Check a paretovariate()-like function.
        r=  )r  N)r   r1  paretovariater  s       r   _check_paretovariatezTestRandom._check_paretovariate  s<    
   %%q0@AAAAAr   c                 d    |                      t          d          t                                 d S )Nzrandom.paretovariate)r  r   r   r   s    r   test_random_paretovariatez$TestRandom.test_random_paretovariate  s.    !!),B"C"CEUEWEWXXXXXr   c                 t    t          d          fd}|                     |t                                 d S )Nnp.random.paretoc                       |           dz   S )Nr   r   )r   paretos    r   r  z.TestRandom.test_numpy_pareto.<locals>.<lambda>  s    S r   )r   r  r   )r   fixed_paretor  s     @r   test_numpy_paretozTestRandom.test_numpy_pareto  sB    -..0000!!,0@0B0BCCCCCr   c                     |                      |          }||                     ||j        dg           |Et          d          D ]7}|                      |d          |                    dd                     6dS dS )z9
        Check a weibullvariate()-like function.
        Nr  r   r  r   )r   r1  weibullvariater   r   )r   r@  rA  r   r   r   s         r   _check_weibullvariatez TestRandom._check_weibullvariate  s    
   %%UA$4zlCCC1XX D D''c

()(8(8c(B(BD D D D D Dr   c                 f    |                      t          d          d t                                 d S )Nzrandom.weibullvariate)r  r   r   r   s    r   test_random_weibullvariatez%TestRandom.test_random_weibullvariate  s;    "":.E#F#F#')9););	= 	= 	= 	= 	=r   c                 f    |                      d t          d          t                                 d S )Nnp.random.weibull)r  r   r   r   s    r   test_numpy_weibullzTestRandom.test_numpy_weibull  s:    ""43F)G)G#3#5#5	7 	7 	7 	7 	7r   c           	      &   t          d          }|                     t                      d          }|                     ||j        dg           dD ]}|                      ||d          d           |                      ||d          |           dD ]} |||          }|dk    r
||z
  }d	|z
  }|                     |d           |                     ||           ||z  }d
|z  t          j	        |          z  }|                     |||z
  |||f           |                     |||z   |||f           | 
                    t          |dd           | 
                    t          |dd           | 
                    t          |dd           d S )Nnp.random.binomialr   )   g      ?)d     '  r   r   )	g-C6?皙?皙?g9?r;  g㈵ ?皙??H.?r;  r   r   r   r   皙皙?)r   r   r   r1  binomialr   assertGreaterEqualassertLessEqualmathsqrtr  rg  )r   r  r   r?   r  rZ   tols          r   test_numpy_binomialzTestRandom.test_numpy_binomial  s   233/111551:
|<<<# 	C 	CAXXa--q111XXa--q111P 
C 
CHQNNs77AAAA''1---$$Q***q5!edill*''8c>Aq!9EEE$$Q3Aq	BBBB
C 	*hC888*hD999*hC88888r   c                     t          d          }|                     t                                }|                     |t	          j        t          |          ddg           d S )Nnp.random.chisquarer  r  )r   r   r   r1  	functoolspartialr   )r   	chisquarer   s      r   test_numpy_chisquarezTestRandom.test_numpy_chisquare  sf    344	  !1!3!344"*<;; &)	+ 	+ 	+ 	+ 	+r   c                     t          d          }|                     t                                }|                     |t	          j        t          |          ddg           d S )Nnp.random.fr;  r  )r  r  )r   r   r   r1  r  r  r   )r   fr   s      r   test_numpy_fzTestRandom.test_numpy_f  sd    }%%  !1!3!344I-dA66$j1	3 	3 	3 	3 	3r   c                    t          d          |                     t          d           |                     t          d           |                     t          d           d}fdt          |          D             }|                     |dg|z             fdt          |          D             }|                    d          }|                     ||d	z             |                     ||           |                     d
 |D                        fdt          |          D             }| 	                    d |D                        fdt          |          D             }| 	                    d |D                        fdt          |          D             }| 	                    d |D                        d S )Nnp.random.geometricg      r   gjt?   c                 &    g | ]} d           S r  r   rq   r   geoms     r   rs   z3TestRandom.test_numpy_geometric.<locals>.<listcomp>  !    )))1TT#YY)))r   r   c                 &    g | ]} d           S r  r   r  s     r   rs   z3TestRandom.test_numpy_geometric.<locals>.<listcomp>  r  r   r   c                     g | ]
}|d k    |S )r  r   r   s     r   rs   z3TestRandom.test_numpy_geometric.<locals>.<listcomp>  s    333!d((!(((r   c                 &    g | ]} d           S )r  r   r  s     r   rs   z3TestRandom.test_numpy_geometric.<locals>.<listcomp>  r  r   c                     g | ]
}|d k    |S )r  r   r   s     r   rs   z3TestRandom.test_numpy_geometric.<locals>.<listcomp>  s    ///qQr   c                 &    g | ]} d           S )g{Gz?r   r  s     r   rs   z3TestRandom.test_numpy_geometric.<locals>.<listcomp>  s!    ***ATT$ZZ***r   c                     g | ]
}|d k    |S )2   r   r   s     r   rs   z3TestRandom.test_numpy_geometric.<locals>.<listcomp>  s    000qRr   c                 &    g | ]} d           S )gV瞯<r   r  s     r   rs   z3TestRandom.test_numpy_geometric.<locals>.<listcomp>  s!    +++QTT%[[+++r   c                     g | ]
}|d k    |S )        r   r   s     r   rs   z3TestRandom.test_numpy_geometric.<locals>.<listcomp>  s    333qUr   )
r   r  rg  r   r   countr  
assertLessassertFalse
assertTrue)r   r   r   r?   r  s       @r   test_numpy_geometriczTestRandom.test_numpy_geometric  s   .//*dD111*dC000*dE222))))a)))A37+++))))a)))GGAJJ16***133Q333444))))a)))//A///000****q***00A000111++++%((+++33A33344444r   c                     t          d          }|                     t                                }|                     ||j        ddg           d S )Nnp.random.gumbelr   r         r  )r   r   r   r1  gumbel)r   r)  r   s      r   test_numpy_gumbelzTestRandom.test_numpy_gumbel  sO    .///1122J+DEEEEEr   c           	          |                      t          dddg          t                      dddddd	dg
           d S )Nr%  locscaler)  r   r   )r,  r-  r(  r  r  r  r  r   s    r   test_numpy_gumbel_kwargsz#TestRandom.test_numpy_gumbel_kwargs  sc    &&.0@AA"S11#c224	 	' 	5 	5 	5 	5 	5r   c                    t          d          |                     t                                }|                     |j        ddgd           fdt          d          D             }|                     t          d |D                       |           |                     t          j
        |          d	           |                     t          j
        |          d
           fdt          d          D             }|                     t          d |D                       |           |                     t          j
        |          d           fdt          d          D             }|                     t          d |D                       |           |                     t          j
        |          d           d S )Nnp.random.hypergeometricr  r`  r   )r`  r  r      r<  c                 *    g | ]} d d d          S )r  r  r   rq   r   hgs     r   rs   z8TestRandom.test_numpy_hypergeometric.<locals>.<listcomp>  s'    555QRRdC  555r   r  c              3   .   K   | ]}|d k    o|dk    V  dS r   r  Nr   r   s     r   	<genexpr>z7TestRandom.test_numpy_hypergeometric.<locals>.<genexpr>  /      ;;AAF/qCx;;;;;;r   g      D@g      N@c                 *    g | ]} d dd          S )r  順 r  r   r5  s     r   rs   z8TestRandom.test_numpy_hypergeometric.<locals>.<listcomp>  s'    777qRRfc""777r   c              3   .   K   | ]}|d k    o|dk    V  dS r8  r   r   s     r   r9  z7TestRandom.test_numpy_hypergeometric.<locals>.<genexpr>  r:  r         $@c                 *    g | ]} d dd          S )r<  r  r  r   r5  s     r   rs   z8TestRandom.test_numpy_hypergeometric.<locals>.<listcomp>  s'    777qRRc""777r   c              3   .   K   | ]}|d k    o|dk    V  dS r8  r   r   s     r   r9  z7TestRandom.test_numpy_hypergeometric.<locals>.<genexpr>  r:  r   g     V@)r   r   r   r1  hypergeometricr   r"  allr  r   meanr  )r   r   r6  s     @r   test_numpy_hypergeometricz$TestRandom.test_numpy_hypergeometric  s   344/1122Q-*,<= " 	 	$ 	$ 	$ 6555%**555;;;;;;;Q???

D111RWQZZ...7777E#JJ777;;;;;;;Q???RWQZZ...7777E#JJ777;;;;;;;Q???

D11111r   c                 H   |                      t                                }|                     t          d          |j        ddg           |                     t          d          |j        ddg           |                     t          d          |j        dg           d S )Nnp.random.laplacer&  r'  r   r(  r   )r   r   r1  r   laplacer   r~   r   r   s     r   test_numpy_laplacezTestRandom.test_numpy_laplace  s    /1122$788!)$k2	4 	4 	4#677 '*	, 	, 	,%89919rdKKKKKr   c                 H   |                      t                                }|                     t          d          |j        ddg           |                     t          d          |j        ddg           |                     t          d          |j        dg           d S )Nnp.random.logisticr&  r'  rG  rH  r   )r   r   r1  r   logisticr   r~   rJ  s     r   test_numpy_logisticzTestRandom.test_numpy_logistic&  s    /1122$8991:$k2	4 	4 	4#788!* '*	, 	, 	,%9::AJMMMMMr   c                    |                      t                                }t          d          |                     |j        g dd           |                      t                      d          }|                     fdt          d          D             g d	           |                     t          d
           |                     t          d           |                     t          d           d S )Nnp.random.logseries)r  )gGz?)r  r  r<  r   rW   c                 &    g | ]} d           S )g{?r   )rq   r   	logseriess     r   rs   z3TestRandom.test_numpy_logseries.<locals>.<listcomp>7  s#    HHH))O44HHHr   r   )
ivxi- r3  i  in i)l   &ci܀oirH i  r   r  r  )	r   r   r   r1  rU  r   r   r  rg  )r   r   rU  s     @r   test_numpy_logserieszTestRandom.test_numpy_logseries.  s   /1122344	AK555 " 	 	$ 	$ 	$
 /11::HHHHeBiiHHHC C C	D 	D 	D 	*i555*i666*i55555r   c                     |                      t                                }t          d          }|                     ||j        g dd           |                     t          |d           d S )Nnp.random.poisson)rG  r=  r   )r>  )g     $@r  r<  r  )r   r   r   r1  poissonr  rg  )r   r   rZ  s      r   test_numpy_poissonzTestRandom.test_numpy_poisson>  sy    /1122/00!)DDD " 	 	$ 	$ 	$ 	*gt44444r   c                 *   |                      t                      d           t          d          |                     fdt	          d          D             g d           |                     fdt	          d          D             g d           |                     fdt	          d          D             g d	           t          j        fd
t	          d          D                       }|                     |d           |                     |d           | 	                    t          dd           | 	                    t          dd           | 	                    t          dd           | 	                    t          dd           d S )Nr   np.random.negative_binomialc                 (    g | ]} d d          S )r   r  r   rq   r   negbins     r   rs   z;TestRandom.test_numpy_negative_binomial.<locals>.<listcomp>J  #    ===a&&S//===r   r   )
r   r   r   r[  r   r   r   r   r   r   c                 (    g | ]} d d          S )r   r  r   r_  s     r   rs   z;TestRandom.test_numpy_negative_binomial.<locals>.<listcomp>L  ra  r   )
7   G   8   9   re  re  "   rc  e   C   c                 (    g | ]} d d          S )r  r  r   r_  s     r   rs   z;TestRandom.test_numpy_negative_binomial.<locals>.<listcomp>N  s%    ???&&s++???r   )
i#  i!  iy#  iL$  i"  i#  i#  iF"  i"  i#  c                 (    g | ]} d d          S )i ʚ;r  r   r_  s     r   rs   z;TestRandom.test_numpy_negative_binomial.<locals>.<listcomp>Q  s5     ) ) ) VJ,, ) ) )r   r  g   | Bg   $s Br;  r   r  r  )r   r   r   r   r   r   rC  assertGreaterr   r  rg  )r   r  r`  s     @r   test_numpy_negative_binomialz'TestRandom.test_numpy_negative_binomialG  s   +--q1119::====599===777	9 	9 	9====599===BBB	D 	D 	D????U2YY???8 8 8	9 	9 	9 G ) ) ) )#Bii) ) ) * *1j))):&&&*fa555*fb#666*fb$777*fb#66666r   c                    |                      t                                }t          d          }|                     ||j        g d           |                     t          |d           |                     t          |d           d S )Nnp.random.power)rR  r=  r  )g      @r   r  )r   r   r   r1  powerr  rg  )r   r   rp  s      r   test_numpy_powerzTestRandom.test_numpy_powerZ  s    /1122+,,999	; 	; 	;*eS111*eT22222r   c                 j   |                      t                                }t          d          }t          d          }|                     ||j        g d           |                     ||j        dg           |                     t          |d           |                     t          |d           d S )Nnp.random.rayleigh)rR  r  )g      9@)r  r   r   r  )r   r   r   r~   r1  rayleighr  rg  )r   r   	rayleigh1	rayleigh0s       r   test_numpy_rayleighzTestRandom.test_numpy_rayleighb  s    /1122233	 455	AJ999	; 	; 	;AJ555*i555*i66666r   c                     |                      t                                }t          d          }|                     ||j        dg           d S )Nnp.random.standard_cauchyr   )r   r   r~   r1  standard_cauchy)r   r   cauchys      r   test_numpy_standard_cauchyz%TestRandom.test_numpy_standard_cauchyl  sM    /1122899!2RD99999r   c                    |                      t                                }t          d          t          j        fdt          d          D                       }|                     t          |          d           d S )Nnp.random.standard_tc                 &    g | ]} d           S )r[  r   )rq   r   
standard_ts     r   rs   z4TestRandom.test_numpy_standard_t.<locals>.<listcomp>w  s!    :::zz!}}:::r   r`  r;  )r   r   r   r   rC  r   r   abs)r   r   avgr  s      @r   test_numpy_standard_tz TestRandom.test_numpy_standard_tq  sw       !1!3!344566
g::::eDkk:::;;C#&&&&&r   c                    |                      t                                }t          d          }|                     ||j        ddg           |                     t          |dd           |                     t          |dd           |                     t          |dd           |                     t          |dd           d S )Nnp.random.waldr:  )r         @r   r   r  )r   r   r   r1  waldr  rg  )r   r   r  s      r   test_numpy_waldzTestRandom.test_numpy_wald{  s    /1122*++qv
J'?@@@*dC555*dD#666*dC555*dC66666r   c           	      l   t          dddg          }|                     |t                      dddddddg	           |                     t          |d
d           |                     t          |dd           |                     t          |dd
           |                     t          |dd           d S )Nr  rC  r-  r  r   )rC  r-  r   r  r.  r   r  )ry   r  r   r  rg  )r   numba_versions     r   test_numpy_wald_kwargsz!TestRandom.test_numpy_wald_kwargs  s    '(867:KLL&&}'7'9'9/5;>2M2M;>2M2M2O 	' 	P 	P 	P
 	*mS#>>>*mT3???*mS#>>>*mS$?????r   c                     |                      t                                }t          d          }|                     ||j        ddgd           dD ]}|                     t          ||           d S )Nnp.random.zipfr  r  r  r<  )r   r;  r   r  )r   r   r   r1  zipfr  rg  )r   r   r  vals       r   test_numpy_zipfzTestRandom.test_numpy_zipf  s    /1122)**qv'7DDD( 	5 	5Cj$4444	5 	5r   c                    t          j        d          t          j        d                              d          g}|r|                     |          }n|                     |          }|D ]}t          d          D ]z}|                                }|                                }	 ||           |st          |j                  dk    r+|	                    |	           | 
                    ||	           {|d         }|                                }
 |t          |
                     |                     t          |          t          |
                     |                     t          |          t          |
                     |                                 5   |t          d                     ddd           dS # 1 swxY w Y   dS )	z=
        Check a shuffle()-like function for arrays.
        r~      )r_  r  r   r   r   s   xyzN)r   arangereshaper   r   r   copyr   shapeshuffler   
memoryviewassertNotEqualr   r   sortedassertTypingError)r   rb   r   ri  arrsr   r   r   r[   rZ   r"   s              r   r   zTestRandom._check_shuffle  s    	"ry}}44V<<= 	*""3''AA$$S))A 	; 	;A1XX ; ;ffhh6688S			 ;s17||q00IIh'''++C:::; GFFHHZ]]DGGT!WW---F1II...##%% 	% 	%DF##$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s    GG
G
c                 f    |                      t          d          t                      d           d S )Nzrandom.shuffleF)r   r   r   r   s    r   test_random_shufflezTestRandom.test_random_shuffle  s0    I&6779I9K9KUSSSSSr   c                 f    |                      t          d          t                      d           d S )Nznp.random.shuffleT)r   r   r   r   s    r   test_numpy_shufflezTestRandom.test_numpy_shuffle  s1    I&9::<L<N<NPTUUUUUr   c                 &   dt                      z  }t                      }t          d          D ]}t          j        t
          j        d|gt          j        t          j                  }|                                \  }}|j	        dk    r-t          d|j	        d|                                d          |                    t          |                                                     |                     t!          |          d|           d	S )
zI
        Check that the state is properly randomized at startup.
        zif 1:
            from numba.tests import test_random
            func = getattr(test_random, %(func_name)r)
            print(func(*%(func_args)r))
            r   z-c)stdoutstderrr   zprocess failed with code z: stderr follows

N)re   r   r   
subprocessPopensys
executablePIPEcommunicate
returncodeAssertionErrordecodeaddfloatstripr   r   )	r   	func_name	func_argsri   numbersr   popenouterrs	            r   _check_startup_randomnessz$TestRandom._check_startup_randomness  s    88	
 %%q 	, 	,A$cndD%A,6OJOU U UE((**HC1$$$n(-(8(8(8#**,,,,&H I I IKKciikk**++++Wq'22222r   c                 2    |                      dd           d S )Nr   r   r  r   s    r   test_random_random_startupz%TestRandom.test_random_random_startup  s    &&;;;;;r   c                 2    |                      dd           d S )Nrandom_gaussr:  r  r   s    r   test_random_gauss_startupz$TestRandom.test_random_gauss_startup      &&~zBBBBBr   c                 2    |                      dd           d S )Nr  r   r  r   s    r   test_numpy_random_startupz$TestRandom.test_numpy_random_startup  s    &&~r:::::r   c                 2    |                      dd           d S )Nnumpy_normalr:  r  r   s    r   test_numpy_gauss_startupz#TestRandom.test_numpy_gauss_startup  r  r   c                 j   t          d          }|                     t                                }dD ]}t          j        |          }|                                }|                      ||          |                    |                     |                      ||          |                    |                     |                     ||           t          j        d                              dd          t          j        d                              ddd          t          j        d                              dddd          g}|D ]^}|                                }|                      ||          |                    |                     |                     ||           _d S )	Nznp.random.permutation)r[  r      r~  r   r   r[     r   $   )	r   r   r   r   r  r  r   permutationr  )r   rb   r   sr   r"   r  s          r   test_numpy_random_permutationz(TestRandom.test_numpy_random_permutation  s   011/1122  	* 	*A	!AA##DDGGQ]]1-=-=>>>##DDGGQ]]1-=-=>>>##Aq))))	"%%a++	"%%aA..	"%%aAq113  	* 	*AA##DDGGQ]]1-=-=>>>##Aq))))	* 	*r   )r   r   r!  Nr   )Tr   r   r   r   r   r  r  r  r  r  r  r1  r7  rC  rF  rH  rJ  rN  rP  rS  rU  rX  rn  rw  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  r  r  r  r  r  r   r  r  r#  r*  r/  rD  rK  rO  rV  r[  rm  rq  rx  r}  r  r  r  r  r   r  r  r  r  r  r  r  r  r   r   r   r   r      s]       K K K< < <K K KO O OJ J JC C C3 3 3U U U :;48F F F F CD;?H H H H4 4 4V V V. . .. . .. . .. . .7 7 7C C C7 7 7": ": ": ":H4 4 4/ / /2 2 2&C C C
A A A	J 	J 	JN N NQ Q Q4 4 4
C 
C 
C	A 	A 	A3 3 3
K K K
7 7 7*5 5 55 5 57 7 7V V VR R R@ @ @8 8 88 8 8	7 	7 	7U U U9 9 94 4 4
4 4 4
B B BY Y YD D D
D D D= = =7 7 79 9 92+ + +3 3 35 5 5,F F F
5 5 52 2 2&L L LN N N6 6 6 5 5 57 7 7&3 3 37 7 7: : :
' ' '7 7 7
@ 
@ 
@5 5 5% % %6T T TV V V3 3 3(< < <C C C; ; ;C C C* * * * *r   r   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d%S )&TestRandomArrayszA
    Test array-producing variants of np.random.* functions.
    c                 f    d|}d                     dd |                   }t          ||          S )N
np.random., abcd)ru   rk   )r   funcnamenargsqualnamerh   s        r   _compile_array_distz$TestRandomArrays._compile_array_dist  s7     %-X/IIfVeVn--	Xy111r   c                    |                      |t          |          dz             }|                     t                                }t	          ||          }dD ]}||fz   } || } || }	|j        t          j        d          k    r7|	j        t          j        d          k    r|                    |	j                  }|                     ||	dd           |dz   } || } || }	|                     ||	dd           d	S )
zM
        Check returning an array according to a given distribution.
        r   r_  r   r   rs  rr  r   r[  r)  r*  r   N)	r  r   r   r   r  r   r   astyper   )
r   r  scalar_argscfuncr   rj   r6   r$  rZ   r[   s
             r   _check_array_distz"TestRandomArrays._check_array_dist  s&    ((3{3C3Ca3GHH/1122H%% 	J 	JD$(Dvt}H%,C"(7"3"333I'!2!222#??3955##Hcq#IIIIW$64=eTl#H1EEEEEr   c                    |                      |t          |          dz             }|                     t                                }t	          |d          ||z   fd}|dz   } |            } || }	|                     ||	dd           dD ]e}
||
fz   }t          j        |
          }|j        }t          |j
                  D ]} |            ||<    || }	|                     ||	dd           fd	S )
z
        Check returning an array according to a given gamma distribution,
        where we use CPython's implementation rather than NumPy's.
        r   r   c                        S r   r   )_argsrj   pyfunc_argss    r   r  z:TestRandomArrays._check_array_dist_gamma.<locals>.<lambda>  s    &&+"6 r   r   r   r[  r  r  N)r  r   r   r   r  r   r   emptyflatr   r6   )r   r  r  extra_pyfunc_argsr  r   pyrandomr$  rZ   r[   r6   expected_flatidxrj   r  s                @@r   _check_array_dist_gammaz(TestRandomArrays._check_array_dist_gamma  s>   
 ((3{3C3Ca3GHH  !1!3!344N++!$5566666W$8::eTl#H1EEE 	J 	JD$(Dx~~H$MMX]++ 0 0%-XZZc""%,C##Hcq#IIII	J 	Jr   c                 n   t           j        d             }|                     |t          |          dz             }d|}d                    ddt          |                             }t          ||          }dD ]{}||fz   }	 |              ||	 }
 |             t          j        ||
j                  }|j	        }t          |j                  D ]
} || ||<   |                     ||
d	d
           | |             |dz   }	 || } |              ||	 }
|                     ||
d	d
           dS )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                  D    t           j                            d           d S )Ni  )r   r   rW   r   r   r   resetz6TestRandomArrays._check_array_dist_self.<locals>.reset.  s    INN4     r   r   r  r  r  Nr  r   r   r[  r  r   )numbar   r  r   ru   rk   r   r  r   r  r   r6   r   )r   r  r  r  
array_funcr  rh   scalar_funcr6   r$  r[   rZ   r  r  s                 r   _check_array_dist_selfz'TestRandomArrays._check_array_dist_self%  s    
	! 	! 
	! --hK8H8H18LMM

%-X/IIf%6c+&6&6%6788	#Hi88 	J 	JD$(DEGGG*d#CEGGG xCI666H=DX]++ 6 6'K5S		##Hcq#IIIIW$;,j$#H1EEEEEr   c                    |                      dd          }d\  }}d} ||||          }|                     |t          j                   |                     |j        |           |                     |j        t          j        d          t          j        d          f           |                     t          j	        ||k                         |                     t          j	        ||k                          ||z   dz  }||z
  dz  }| 
                    |                                ||z
             |                     |                                ||z              d S )	Nr   r   )r  r  r3  r3  rs  rr  r   r~  )r  r   r   ndarrayr   r  assertInr   r"  rB  r  rC  r  )r   r  r  r  r6   resrC  r  s           r   rz  z#TestRandomArrays.test_numpy_randintL  s=   ((A66	TeCt$$c2:...D)))ci"(7"3"3RXg5F5F!GHHHscz**+++sTz**+++d
aczR

D3J777SXXZZ44444r   c                    |                      dd          }d} ||          }|                     |t          j                   |                     |j        |           |                     |j        t          j        d                     |                     t          j        |dk                         |                     t          j        |dk                          |                     t          j	        |dk                         |                     t          j	        |dk                         |
                                }|                     |d	           |                     |d
           d S )Nr   r   r  float64r   r   r  r  g?g?)r  r   r   r  r   r  r   r"  rB  anyrC  r  r  )r   r  r6   r  rC  s        r   test_numpy_random_randomz)TestRandomArrays.test_numpy_random_random\  s:   ((155eDkkc2:...D)))BHY$7$7888scz**+++sSy))***scz**+++scz**+++xxzzd+++T4(((((r   c                 2    |                      dd           d S )Nbetar  r  r   s    r   r  z TestRandomArrays.test_numpy_betap  s    ##FJ77777r   c                 2    |                      dd           d S )Nr  )r~  r;  r  r   s    r   r   z$TestRandomArrays.test_numpy_binomials  s    z955555r   c                 2    |                      dd           d S )Nr  r  r  r   s    r   r  z%TestRandomArrays.test_numpy_chisquarev  s    ##K88888r   c                 2    |                      dd           d S )Nr  r  r  r   s    r   r  z'TestRandomArrays.test_numpy_exponentialy  s    }f55555r   c                 2    |                      dd           d S )Nr  r
  r  r   s    r   r  zTestRandomArrays.test_numpy_f|  s    ##C44444r   c                 4    |                      ddd           d S )Ngamma)r   r   r   r  r   s    r   r  z!TestRandomArrays.test_numpy_gamma  s     $$Wj"=====r   c                 2    |                      dd           d S )N	geometricr  r  r   s    r   r#  z%TestRandomArrays.test_numpy_geometric      {F33333r   c                 2    |                      dd           d S )Nr)  r  r;  r  r   s    r   r*  z"TestRandomArrays.test_numpy_gumbel      x44444r   c                 2    |                      dd           d S )NrA  r2  r  r   s    r   rD  z*TestRandomArrays.test_numpy_hypergeometric  s     /1ABBBBBr   c                 2    |                      dd           d S )NrI  r  r  r   s    r   rK  z#TestRandomArrays.test_numpy_laplace      y*55555r   c                 2    |                      dd           d S )NrN  r  r  r   s    r   rO  z$TestRandomArrays.test_numpy_logistic  s    z:66666r   c                 2    |                      dd           d S )NrR  )r  r   r  r   s    r   rX  z%TestRandomArrays.test_numpy_lognormal  s    {J77777r   c                 2    |                      dd           d S )NrU  rt  r  r   s    r   rV  z%TestRandomArrays.test_numpy_logseries  r  r   c                 2    |                      dd           d S )Nr>  )r;  r   r  r   s    r   rJ  z"TestRandomArrays.test_numpy_normal  r	  r   c                 2    |                      dd           d S )Nr  r=  r  r   s    r   r  z"TestRandomArrays.test_numpy_pareto  s    x00000r   c                 2    |                      dd           d S )NrZ  rt  r  r   s    r   r[  z#TestRandomArrays.test_numpy_poisson  s    y&11111r   c                 2    |                      dd           d S )Nrp  rt  r  r   s    r   rq  z!TestRandomArrays.test_numpy_power  s    w/////r   c                      t          d          t                    } |ddd          \  }}|                     |j        d           |                     ||           d S NTrc   *   r   r   r  )r   r\   r   r  r   r   r  rZ   r[   s       r   test_numpy_randz TestRandomArrays.test_numpy_rand  sf    "T"""#344b!Q#F+++#.....r   c                      t          d          t                    } |ddd          \  }}|                     |j        d           |                     ||           d S r  )r   r`   r   r  r   r  s       r   rP  z!TestRandomArrays.test_numpy_randn  sf    "T"""#455b!Q#F+++#.....r   c                 2    |                      dd           d S )Nru  rt  r  r   s    r   rx  z$TestRandomArrays.test_numpy_rayleigh  s    z622222r   c                 2    |                      dd           d S )Nr{  r   r  r   s    r   r}  z+TestRandomArrays.test_numpy_standard_cauchy      0"55555r   c                 2    |                      dd           d S )Nstandard_exponentialr   r  r   s    r   r  z0TestRandomArrays.test_numpy_standard_exponential  s    5r:::::r   c                 4    |                      ddd           d S )Nstandard_gammarY  r  r  r   s    r   test_numpy_standard_gammaz*TestRandomArrays.test_numpy_standard_gamma  s!    $$%5vvFFFFFr   c                 2    |                      dd           d S )Nr^   r   r  r   s    r   rN  z+TestRandomArrays.test_numpy_standard_normal  r  r   c                 2    |                      dd           d S )Nr  )r  r  r  r  r   s    r   r  z&TestRandomArrays.test_numpy_triangular  s    |_=====r   c                 2    |                      dd           d S )Nr   r  r  r  r   s    r   r  z#TestRandomArrays.test_numpy_uniform  r  r   c                 2    |                      dd           d S )Nr  r%  r  r   s    r   r  z TestRandomArrays.test_numpy_wald  s    vz22222r   c                 2    |                      dd           d S )Nvonmisesr  r  r   s    r   r  z$TestRandomArrays.test_numpy_vonmises  s    ##J
;;;;;r   c                 2    |                      dd           d S )Nr  r  r  r   s    r   r  z TestRandomArrays.test_numpy_zipf  s    vv.....r   N)'r   r   r   r   r  r  r  r  rz  r  r  r   r  r  r  r  r#  r*  rD  rK  rO  rX  rV  rJ  r  r[  rq  r  rP  rx  r}  r  r!  rN  r  r  r  r  r  r   r   r   r  r    s;        2 2 2
F F F*J J J0%F %F %FN5 5 5 ) ) )(8 8 86 6 69 9 96 6 65 5 5> > >4 4 45 5 5C C C6 6 67 7 78 8 84 4 45 5 51 1 12 2 20 0 0/ / // / /3 3 36 6 6; ; ;G G G6 6 6> > >6 6 63 3 3< < </ / / / /r   r  c                   j    e Zd ZdZddZd Zd Zd Zd Zd Z	dd	Z
d
 Zd Zd Zd Zd Zd Zd ZdS )TestRandomChoicez 
    Test np.random.choice.
    Tc                    t          |          }t          |          }|                     ||           |                     t          |          t	          |                     |r3|                     t          |          t          |          |           dS |                     t          |          t          |          |           dS )zD
        Check basic expectations about a batch of samples.
        N)r   r  r  r  r   r   r   r   )r   popr  r:   spopsress         r   _check_resultszTestRandomChoice._check_results  s     3xx3xxT4(((F3KKc333 	7OOCIIs3xx55555 SYYC#66666r   c                 P   |                      t          |          t          |          dz             t          |          t          |          z  }t          j        |          }|D ]<}||         }|                      ||dz             |                     ||dz             =dS )5
        Check distribution of some samples.
        r  r;  r   N)r  r   collectionsCounterr  )r   r-  samplesexpected_frequencyr-   valuer?   s          r   r1  zTestRandomChoice._check_dist  s    
 	Gc#hhn=== \\CHH4(( 	> 	>E%A##A'9C'?@@@  $6$<====	> 	>r   c                     g }t          |          |k     r2|t           |            j                  z  }t          |          |k     2|d|         S )zk
        Accumulate array results produced by *func* until they reach
        *nresults* elements.
        N)r   r   r  )r   rb   nresultsr  s       r   _accumulate_array_resultsz*TestRandomChoice._accumulate_array_results  sU    
 #hh!!4$$$C #hh!!9H9~r   c                 2    t          d          t                    t          |          }fdt          |          D             }|                     ||           fdt          |dz            D             }|                     ||           dS )z.
        Check choice(a) against pop.
        Trc   c                 &    g | ]}           S r   r   rq   r   r   r  s     r   rs   z4TestRandomChoice._check_choice_1.<locals>.<listcomp>  s!    ***AuuQxx***r   c                 &    g | ]}           S r   r   r=  s     r   rs   z4TestRandomChoice._check_choice_1.<locals>.<listcomp>  s!    111Qa111r   r  N)r   r2   r   r   r0  r1  )r   r   r-  r?   r  distr  s    `    @r   _check_choice_1z TestRandomChoice._check_choice_1  s     #T"""=11HH*****q***C%%%11111%C..111d#####r   c                 n    d}t          t          |                    }|                     ||           dS )z"
        Test choice(int)
        r  N)r   r   r@  r   r?   r-  s      r   test_choice_scalar_1z%TestRandomChoice.test_choice_scalar_1  s6     588nnQ$$$$$r   c                 f    t          j        d          dz  dz   }|                     ||           dS )z$
        Test choice(array)
        r  r   r  N)r   r  r@  r   r-  s     r   test_choice_array_1z$TestRandomChoice.test_choice_array_1  7     imma#%S#&&&&&r   c                     t          |          }t           |            j                  }|                     |||           |                     ||dz            }|                     ||           dS )zP
        Check array results produced by *func* and their distribution.
        r  N)r   r   r  r0  r:  r1  )r   rb   r-  r:   r?   r  r?  s          r   _check_array_resultsz%TestRandomChoice._check_array_results  sq     HH4466;Cg...--dAG<<d#####r   c                 N    t          d          t                    t          |          }|dz
  d|dz
  dz  f|dz  g}|D ]^           }t          t                    rnf}|                     |j        |           |                     fd|           _dS )z4
        Check choice(a, size) against pop.
        Trc   r   r   r   c                                  S r   r   r   r  r6   s   r   r  z2TestRandomChoice._check_choice_2.<locals>.<lambda>0  s    eeAtnn r   N)r   r8   r   
isinstancer   r   r  rI  )	r   r   r-  r?   sizesr  expected_shaper  r6   s	    `     @@r   _check_choice_2z TestRandomChoice._check_choice_2   s     #T"""=11HH R!a!e\*AF3 	C 	CD%4..C%/e%<%<ITT4'NSY777%%&<&<&<&<&<&<cBBBB	C 	Cr   c                 ^    d}t          j        |          }|                     ||           dS )z(
        Test choice(int, size)
        r  Nr   r  rP  rB  s      r   test_choice_scalar_2z%TestRandomChoice.test_choice_scalar_22  2     illQ$$$$$r   c                 f    t          j        d          dz  dz   }|                     ||           dS )z*
        Test choice(array, size)
        r  r   r  NrR  rE  s     r   test_choice_array_2z$TestRandomChoice.test_choice_array_2:  rG  r   c                 H  	
  t          d          t                    	t          |          }|dz
  d|dz
  dz  fg}ddg}|D ]I
dD ]D} 	
|          }t          
t                    r
n
f}|                     |j        |           EJ|D ]
|                     	
fd|           |D ]
|                     	
fd	|d           |dz   d|dz  dz   ffD ]A
|                     t                    5   	
d           d
d
d
           n# 1 swxY w Y   Bd
S )z=
        Check choice(a, size, replace) against pop.
        Trc   r   r   r   F)TFc                        d          S )NTr   rL  s   r   r  z2TestRandomChoice._check_choice_3.<locals>.<lambda>U  s    eeAtT.B.B r   c                        d          S )NFr   rL  s   r   r  z2TestRandomChoice._check_choice_3.<locals>.<lambda>X  s    eeAtU.C.C r   N)
r   r;   r   rM  r   r   r  rI  r  rg  )r   r   r-  r?   rN  replacesr:   r  rO  r  r6   s    `       @@r   _check_choice_3z TestRandomChoice._check_choice_3A  s    #T"""=11HH R!a!e\*+%=  	< 	<D( < <eAtW--)3D%)@)@!Mtg  N;;;;<  	I 	ID%%&B&B&B&B&B&BCHHHH 	Q 	QD%%&C&C&C&C&C&CS%PPPP UQQ
O, 	& 	&D"":.. & &au%%%& & & & & & & & & & & & & & &	& 	&s   <DD	D	c                 ^    d}t          j        |          }|                     ||           dS )z1
        Test choice(int, size, replace)
        r  Nr   r  r[  rB  s      r   test_choice_scalar_3z%TestRandomChoice.test_choice_scalar_3_  rT  r   c                 f    t          j        d          dz  dz   }|                     ||           dS )z3
        Test choice(array, size, replace)
        r  r   r  Nr]  rE  s     r   test_choice_array_3z$TestRandomChoice.test_choice_array_3g  rG  r   c                    t          d          d             }t          j                            dd                              t          j                  }|                                }|                    d|          }|                                } |d|          }t          j        	                    ||           t          j        	                    ||           t          j        	                    ||           d S )NTrc   c                     t           j                            d           t          j        | dft           j                  }t          |           D ]&}t           j                            |dd          ||<   '|S )Ni9  r   F)r   r   rW   r  rs  r   r1   )n_to_returnchoice_arrayr  r   s       r   numba_randsz>TestRandomChoice.test_choice_follows_seed.<locals>.numba_randsq  sk    INN4   (K+RX66C;'' B B)),5AAAJr   i,  r  r5   r[  )
r   r   r   r   r  rs  r  py_functestingassert_allclose)r   re  rd  tmp_nprZ   tmp_nbr[   s          r   test_choice_follows_seedz)TestRandomChoice.test_choice_follows_seedn  s     
d				 	 
		 y((4(88??II""$$&&q&11""$$k!V$$

""8S111

""<888

""<88888r   N)T)r   r   r   r   r0  r1  r:  r@  rC  rF  rI  rP  rS  rV  r[  r^  r`  rk  r   r   r   r+  r+    s         7 7 7 7"> > >  	$ 	$ 	$% % %' ' '$ $ $ $C C C$% % %' ' '& & &<% % %' ' '9 9 9 9 9r   r+  c                       e Zd ZdZ ej        g dej                  Zee                                z  Zd Z	d Z
d Zd ZdS )	TestRandomMultinomialz%
    Test np.random.multinomial.
    )r   r   r   r   r   r   r   c                 v   |                      |t          j                   |                     |j        t          |          f           |                     |j        t          j        d          t          j        d          f           |                     |                                |           t          ||          D ]u\  }}| 
                    |d           |                     ||           t          |          |z  }| 
                    ||dz             |                     ||dz             vdS )r2  rs  rr  r   r;  r   N)r   r   r  r   r  r   r  r   sumzipr  r  r  )r   r?   r@   sampler  nexppexps          r   _check_samplez#TestRandomMultinomial._check_sample  s"    	fbj111E

}555flRXg%6%68I8I$JKKKq)))5&)) 	0 	0GAt##D!,,,  q)));;?D##D!c'222  q3w////	0 	0r   c                     t          d          t                    }d| j        }} |||          }|                     |||           t	          |          } |||          }|                     |||           d}t          j        dd|dz  dgt
          j                  }||                                z  } |||          }|                     |||           d	S )
z,
        Test multinomial(n, pvals)
        Trc   r  i@B r   r   r  r   N)	r   rA   r@   rt  r   r   r   r  ro  )r   r  r?   r@   r  s        r   test_multinomial_2z(TestRandomMultinomial.test_multinomial_2  s     #T"""#5665eAuoo1eS)))UeAuoo1eS)))!QS!,BJ???eAuoo1eS)))))r   c                      t          d          t                    }d| j        }}d} ||||          }|                     |j        d         |           |D ]}|                     |||           dS )z7
        Test multinomial(n, pvals, size: int)
        Trc   r  r   r   N)r   rD   r@   r   r  rt  r   r  r?   r@   kr  rq  s          r   test_multinomial_3_intz,TestRandomMultinomial.test_multinomial_3_int  s     #T"""#5665eAua  1q))) 	1 	1Fq%0000	1 	1r   c                 0    t          d          t                    }d| j        }}d} ||||          }|                     |j        dd         |           |                    d|j        d         f          D ]}|                     |||           dS )z9
        Test multinomial(n, pvals, size: tuple)
        Trc   r  )r   r  Nr   )r   rD   r@   r   r  r  rt  rx  s          r   test_multinomial_3_tuplez.TestRandomMultinomial.test_multinomial_3_tuple  s     #T"""#5665eAua  3B3+++kk2sy}"566 	1 	1Fq%0000	1 	1r   N)r   r   r   r   r   r   r  r@   ro  rt  rv  rz  r|  r   r   r   rm  rm    s          BH'''rz:::E	UYY[[E0 0 0 * * *&
1 
1 
1
1 
1 
1 
1 
1r   rm  c                   X    e Zd Z ej        g dej                  Zd Zd Zd Z	d Z
dS )TestRandomDirichlet)r   r   r   r   r   c                 *   |                      |t          j                   |                     |j        t          j                   |)|                     |j        t          |                     nmt          |          t          u r+|                     |j
        |t          |          f           n,|                     |j
        |t          |          fz              	 t          j        |          D ].}|                     |d           |                     |d           /|,|                     |                                dd           dS t          j        |                    d                    D ]}|                     |dd           dS )zCheck output structureNr   r   r[  )placesr   )axis)r   r   r  r   r   r  r6   r   typer   r  nditerr  r  assertAlmostEqualro  )r   rI   r6   rq  r  totalss         r   rt  z!TestRandomDirichlet._check_sample  s    	fbj111rz222<V[#e**5555$ZZ3V\D#e**+=>>>>V\43u::-+?@@@*9V$$ 	) 	)C##C+++  a((((<""6::<<1"=====)FJJBJ$7$788 < <&&vq&;;;;< <r   c                 J    t          d          t                    }| j        t          | j                  t	          j        g dt          j                  t	          j        g dt          j                  f}|D ]$} ||          }|                     |d|           %dS )2
        Test dirichlet(alpha, size=None)
        Trc   r   r   r  r   r   r   r   r  r   N)r   rL   rI   r   r   r   r  rt  )r   r  alphasrI   r  s        r   test_dirichlet_defaultz*TestRandomDirichlet.test_dirichlet_default  s     #T"""#:;;J$*H%%%RZ888H^^^2:666	
  	1 	1E%,,CudC0000	1 	1r   c                 |    t          d          t                    }d}| j        t          | j                  t	          j        g dt          j                  t	          j        g dt          j                  f}t          j        ||          D ](\  }} |||          }| 	                    |||           )dS )r  Trc   )Nr   r   r   r  r   r  N)
r   rJ   rI   r   r   r   r  	itertoolsproductrt  )r   r  rN  r  rI   r6   r  s          r   test_dirichletz"TestRandomDirichlet.test_dirichlet  s     #T"""?33'J$*H%%%RZ888H^^^2:666	
 %,VU;; 	1 	1KE4%t$$CudC0000	1 	1r   c           
      n    t          d          t                    }t          d          }|                     t                    5 } ||d           d d d            n# 1 swxY w Y   |                     dt          |j                             | j        }ddddd	d
t          j
        d          t          j        d          ff}|D ]h}|                     t                    5 } |||           d d d            n# 1 swxY w Y   |                     dt          |j                             id S )NTrc   )r   r   r   r   zdirichlet: alpha must be > 0.0              @r  r  r   r  r   r  r  r   rf  zGnp.random.dirichlet(): size should be int or tuple of ints or None, got)r   rJ   r   r  rg  r  str	exceptionrI   r   int8rr  r   )r   r  rI   raisesrN  r6   s         r   test_dirichlet_exceptionsz-TestRandomDirichlet.test_dirichlet_exceptions  s   "T"""?33i  z** 	fE%OOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	6F<L8M8MNNN
r3'8bgajj"(ST++=VW 	 	D"";// #6eT"""# # # # # # # # # # # # # # #MM-F$%%   	 	s$   A!!A%(A%(DD	D	N)r   r   r   r   r   r  rI   rt  r  r  r  r   r   r   r~  r~    sl        BH\\\444E< < <,1 1 11 1 1"    r   r~  c                   &    e Zd Zd Zd Zd Zd ZdS )TestRandomNoncentralChiSquarec                    ||                      |t          j                   |                     |j        t          j                   t          |t                    r|                     |j        |f           n7|                     |j        |           n|                      |t                     t          j
        |          D ]}|                     |d           d S Nr   )r   r   r  r   r   r  rM  r   r  r  r  r  )r   r6   rq  r  s       r   rt  z+TestRandomNoncentralChiSquare._check_sample  s     !!&"*555V\2:666$$$ 5  w7777  t4444""65111 9V$$ 	, 	,C##C++++	, 	,r   c                     t          d          t                    }d}|D ]d\  }} |||          }|                     d|            ||t          j                  }|                     t          j        |                     edS )z@
        Test noncentral_chisquare(df, nonc, size=None)
        Trc   )r;  r   r|  )r[  r   )r<  r   )r   r  N)r   rU   rt  r   nanr"  isnan)r   r  inputsrQ   rR   r  s         r   !test_noncentral_chisquare_defaultz?TestRandomNoncentralChiSquare.test_noncentral_chisquare_default'  s     #T"""#EFF
  	+ 	+HB%D//CtS)))%BF##COOBHSMM****		+ 	+r   c                 l    t          d          t                    }d}d}t          j        ||          D ]{\  \  }}} ||||          }|                     ||            ||t
          j        |          }|                     t          j        |          	                                           |dS )z;
        Test noncentral_chisquare(df, nonc, size)
        Trc   )Nr   r  r  r  N)
r   rS   r  r  rt  r   r  r"  r  rB  )r   r  rN  r  rQ   rR   r6   r  s           r   test_noncentral_chisquarez7TestRandomNoncentralChiSquare.test_noncentral_chisquare:  s     #T"""#=>>+
 !* 1&% @ @ 	1 	1JR%D$''CtS)))%BFD))COOBHSMM--//0000		1 	1r   c           
      2    t          d          t                    }d\  }}|                     t                    5 } |||d           d d d            n# 1 swxY w Y   |                     dt          |j                             d\  }}|                     t                    5 } |||d           d d d            n# 1 swxY w Y   |                     dt          |j                             d\  }}dd	d
dddt          j        d          t          j	        d          ff}|D ]i}|                     t                    5 } ||||           d d d            n# 1 swxY w Y   |                     dt          |j                             jd S )NTrc   )r   r   r   zdf <= 0)r   r   znonc < 0)r   r   r  r  r  r  r  r   rf  zRnp.random.noncentral_chisquare(): size should be int or tuple of ints or None, got)r   rS   r  rg  r  r  r  r   r  rr  r   )r   r  rQ   rR   r  rN  r6   s          r   $test_noncentral_chisquare_exceptionszBTestRandomNoncentralChiSquare.test_noncentral_chisquare_exceptionsN  sU   "T"""#=>>Dz** 	fE"dA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	iV%5!6!6777Dz** 	fE"dA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	j#f&6"7"7888Dr3'8bgajj"(ST++=VW 	 	D"";// &6b$%%%& & & & & & & & & & & & & & &MM-F$%%   	 	s5   AAA*CCC	E##E'	*E'	N)r   r   r   rt  r  r  r  r   r   r   r  r    sP        , , ,$+ + +&1 1 1(    r   r  T)rd   nogilc                     | dk    rt          j        |            t          |j                  D ]}t          j        d          ||<   d S )Nr   r  )r   rW   r   r6   r  )rW   r  r   s      r   py_extract_randomnessr  e  sR    qyyD38__ ( (#B''A( (r   r  c                     | dk    rt           j                            |            d}t          |j                  D ])}t           j                            t                    ||<   *d S r  )r   r   rW   r   r6   r   _randint_limit)rW   r  r  r   s       r   np_extract_randomnessr  n  s`    qyy
	t	A38__ 3 3"">22A3 3r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )ConcurrencyBaseTestr<  c                 X    d|                      d          f}t          |  t          |  d S )Nr  r   )_get_outputr  r  )r   r$  s     r   setUpzConcurrencyBaseTest.setUp  s6    D$$Q''(t$$t$$$$r   c                 B    t          j        |t           j                  S )Nr   )r   zerosr   )r   r6   s     r   r  zConcurrencyBaseTest._get_output  s    xBI....r   c                    d}dt          j        d          z  }d}t           j                            |                                ||           t           j                            |                                ||           dS )z9
        Check statistical properties of output.
        rq  r  r!  g?)rtolN)r   r  rg  rh  rC  std)r   r  expected_avgexpected_stdr  s        r   check_outputz ConcurrencyBaseTest.check_output  sp    
 272;;.

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

""37799l"FFFFFr   c                    |D ]}|                      |           |rd}nt          |          }d |D             }d |D             }d |D             }|                     t          |          ||           |                     t          |          ||           |                     t          |          ||           d S )Nr   c                 <    h | ]}t          |d d                   S )Nr[  r   rq   r  s     r   	<setcomp>z<ConcurrencyBaseTest.check_several_outputs.<locals>.<setcomp>  s&    333Cs2A2w333r   c                 <    h | ]}t          |d d                   S )re  Nr  r  s     r   r  z<ConcurrencyBaseTest.check_several_outputs.<locals>.<setcomp>  s&    444Ss233x444r   c                 6    h | ]}|                                 S r   )ro  r  s     r   r  z<ConcurrencyBaseTest.check_several_outputs.<locals>.<setcomp>  s     ---c		---r   )r  r   r   )r   r/  same_expectedr  expected_distinctheadstailssumss           r   check_several_outputsz)ConcurrencyBaseTest.check_several_outputs  s      	# 	#Cc""""  	- ! #G33733344G444--W---U%6>>>U%6>>>T$5t<<<<<r   N)r   r   r   _extract_iterationsr  r  r  r  r   r   r   r  r  x  s[         !% % %/ / /	G 	G 	G= = = = =r   r  c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestThreadsz3
    Check the PRNG behaves well with threads.
    c                 
     fdt          |dz             D             fdfdt          |          D             }|D ]}|                                  |           |D ]}|                                 S )zo
        Run *nthreads* threads extracting randomness with the given *seed*
        (no seeding if 0).
        c                 D    g | ]}                     j                  S r   r  r  )rq   r   r   s     r   rs   z2TestThreads.extract_in_threads.<locals>.<listcomp>  s:     1 1 1 ##D$<== 1 1 1r   r   c                 .     |                     d S )NrW   r  r   )r   extract_randomnessr/  rW   s    r   targetz.TestThreads.extract_in_threads.<locals>.target  s#    Dgaj999999r   c                 >    g | ]}t          j        |f           S ))r  r$  )	threadingThread)rq   r   r  s     r   rs   z2TestThreads.extract_in_threads.<locals>.<listcomp>  s;     - - - #6=== - - -r   )r   startru   )r   nthreadsr  rW   threadsthr/  r  s   ` ``  @@r   extract_in_threadszTestThreads.extract_in_threads  s    
1 1 1 1!(Q,//1 1 1	: 	: 	: 	: 	: 	: 	:- - - -!(OO- - -  	 	BHHJJJJx 	 	BGGIIIIr   c                 d    |                      d|d          }|                     |d           dS )z
        When initializing the PRNG the same way, each thread
        should produce the same sequence of random numbers,
        using independent states, regardless of parallel
        execution.
        r  r  rS  Tr  Nr  r  r   r  r/  s      r   check_thread_safetyzTestThreads.check_thread_safety  s@     ))".@r)JJ 	""7$"?????r   c                 d    |                      d|d          }|                     |d           dS )z
        The PRNG in new threads should be implicitly initialized with
        system entropy, if seed() wasn't called.
        r  r   rS  Fr  Nr  r  s      r   check_implicit_initializationz)TestThreads.check_implicit_initialization  s@    
 ))!-?a)HH 	""7%"@@@@@r   c                 :    |                      t                     d S r   )r  r  r   s    r   test_py_thread_safetyz!TestThreads.test_py_thread_safety        !677777r   c                 :    |                      t                     d S r   )r  r  r   s    r   test_np_thread_safetyz!TestThreads.test_np_thread_safety  r  r   c                 :    |                      t                     d S r   r  r  r   s    r   test_py_implicit_initializationz+TestThreads.test_py_implicit_initialization      **+@AAAAAr   c                 :    |                      t                     d S r   r  r  r   s    r   test_np_implicit_initializationz+TestThreads.test_np_implicit_initialization  r  r   N)r   r   r   r   r  r  r  r  r  r  r  r   r   r   r  r    s           0@ @ @A A A8 8 88 8 8B B BB B B B Br   r  ntz(Windows is not affected by fork() issuesc                   .    e Zd ZdZdZd Zd Zd Zd ZdS )TestProcessesz9
    Check the PRNG behaves well in child processes.
    Fc                 f   	
 t          j                    	g } fd	fd
t          t           d          rt          j        d          nt           
fdt	          |          D             }|D ]}|                                 t	          |          D ]+}|                    	                    d                     ,|D ]}|                                 |                                            |D ]/}t          |t                    r                     d|           0|S )	z`
        Run *nprocs* processes extracting randomness
        without explicit seeding.
        c                  V                         j                  }  d|            | S )Nr   r  r  )r  r  r   s    r   target_innerz8TestProcesses.extract_in_processes.<locals>.target_inner  s4    ""4#;<<CA3////Jr   c                      	              }                      |            d S # t          $ r}                     |            d }~ww xY wr   )put	Exception)r  eqr  s     r   r  z2TestProcesses.extract_in_processes.<locals>.target  sY    "lnnc




    a	s   $ 
A	AA	get_contextforkc                 <    g | ]}                                S ))r  )Process)rq   r   mpcr  s     r   rs   z6TestProcesses.extract_in_processes.<locals>.<listcomp>  s7     ) ) ) F++ ) ) )r   r[  )timeoutzException in child: )multiprocessingQueuehasattrr  r   r  r   getru   rM  r  fail)r   nprocsr  r/  procsr  r   r  r  r  r  r  s   ` `     @@@@r   extract_in_processesz"TestProcesses.extract_in_processes  s   
 !##	 	 	 	 	 	
	 	 	 	 	 	 ?M22 	"!-f55CC!C) ) ) ) )--) ) ) 	 	AGGIIII v 	- 	-ANN1555++,,,, 	 	AFFHHHH 	||~~&&& 	= 	=C#y)) =			cc;<<<r   c                 `    |                      d|          }|                     |d           dS )z
        The PRNG in new processes should be implicitly initialized
        with system entropy, to avoid reproducing the same sequences.
        r   Fr  N)r  r  r  s      r   r  z+TestProcesses.check_implicit_initialization'  s;    
 ++A/ABB 	""7%"@@@@@r   c                 :    |                      t                     d S r   r  r   s    r   r  z-TestProcesses.test_py_implicit_initialization1  r  r   c                 :    |                      t                     d S r   r  r   s    r   r  z-TestProcesses.test_np_implicit_initialization4  r  r   N)	r   r   r   r   _numba_parallel_test_r  r  r  r  r   r   r   r  r    sn          ". . .`A A AB B BB B B B Br   r  c            	          e Zd Zi dddddddddd	d
dddddddddddddddddddddddddddddddddddddddddddddd ddddd!dddd"d#d$ddd%dd&dd'd(dd$d)i d*dddd+d,ddddd-dddd.ddd/d0dddd1dddd2d3d4did5d4did6d4did7dddd8d4did9d:d;id<d4did=d4did>ddd?d@d4didAddddddBddCdddd2ddddDddddEdddddddFZdG ZdH ZdIS )JTestNumPyRandomAPIr  r   r   r   )r   r"   r6   r  r   g333333?)r?   r  r6   r  )rQ   r6   znp.random.choicer   r7   znp.random.dirichletr   rH   r  )r-  r6   r	  )dfnumdfdenr6   r  )r  r-  r6   r  )r  r6   r%  r   )r,  r-  r6   r1  )ngoodnbadnsampler6   rF  rM  rW  )rC  sigmar6   rQ  r;  znp.random.multinomialr  rC   r]  )r?   r  znp.random.noncentral_chisquarerP   r   r  rX  )lamr6   ro  znp.random.randintr  r   r6   r   r   rs  r   r   rW   r  rz  r  r  )r  r6   rL  r  g      @)leftmoderightr6   )mukappar6   )rC  r-  r6   )r  r  r  r  r  r  c                 n   | j                                         D ]\  }}d                    d |                                D                       }t          d| d| d          }i }t	          |dt
          i|           |d         } |             t          |                              d           d S )	Nr  c                 "    g | ]\  }}| d | S ro   r   rq   ry  vs      r   rs   z8TestNumPyRandomAPI.test_call_by_name.<locals>.<listcomp>{  &    DDDtq!1

q

DDDr   7
                def foo():
                    return rt   )
                r   foor   )API_CALL_TESTSitemsru   r   execr   r   compile)r   fnr$  argstrtemplater  rb   s          r   test_call_by_namez$TestNumPyRandomAPI.test_call_by_namep  s     +1133 	# 	#HBYYDDtzz||DDDEEF  !'    H AD":q)))
 U8DDFFFJJr""""	# 	#r   c                 F   | j                                         D ]\  }}d|vrd|d<   d                    d |                                D                       }t          d| d| d          }i }t	          |dt
          i|           |d	         } |            }t          |                              d          } |            }	t          |	t
          j	                  r!| 
                    |	j        |j                   |                     |	|j                   d S )
Nr6   r   r  c                 "    g | ]\  }}| d | S ro   r   r  s      r   rs   zNTestNumPyRandomAPI.test_call_distributions_with_empty_size.<locals>.<listcomp>  r  r   r  rt   r   r   r!  )r"  r#  ru   r   r$  r   r   r%  rM  r  r   r  r   	__class__)
r   r&  r$  r'  r(  r  rb   np_valnb_funcnb_vals
             r   'test_call_distributions_with_empty_sizez:TestNumPyRandomAPI.test_call_distributions_with_empty_size  sK    +1133 	@ 	@HBT!!DLYYDDtzz||DDDEEF  !'    H AD":q))) U8DTVVF4jj((,,GWYYF&"*-- @  v|<<<<%%ff.>????5	@ 	@r   N)r   r   r   r"  r)  r0  r   r   r   r  r  8  sp       5?&br1(E(E 5?*!#q,I,I5?+B-B-B5? )1*=*=5? ,tQ-G-G	5?
 .Q/G/G5? $rB%J%J5? (1sA)N)N5? ,2q-A-A5? )"r1*M*M5? 1Aq>?3L 3L5? *2A+N+N5? +BQ,O,O5? ,b2q-Q-Q5? ,3-B-B5?  .Qq/Q/Q!5?" 4135G5G#5? 5?$ 7r2AB9D 9D%5?( )"r1*M*M)5?* )A*>*>+5?2 *2q+A+A35?4 (r1)=)=55?< *1a+K+K=5?D )61+E5?F 0&!G5?H 'I5?J +b!,D,DK5?L )61+M5?N 'O5?T 2FA;U5?V 7W5?X 1B2J2JY5?Z 2FA;[5?\ -R.C.C]5? 5?^ 8:2PR78/: /:35r1+M+M35A,N,N13b!(L(L13Q+?+?.0!(<(<k5? 5? 5?Nn# # #4@ @ @ @ @r   r  __main__)Sr3  r  r  r   r   r   r  r  r  r  textwrapr   numpyr   unittestr  r   r   r   
numba.corer   numba.tests.supportr   r	   r
   numba.core.errorsr   r   r   r   r   r#   r%   r)   r+   r.   r2   r8   r;   rA   rD   rJ   rL   rS   rU   r\   r`   rk   ry   r~   r   r   r   r  r   r   r  r  r  r   r   r   r   r   r   r   r   r  r+  rm  r~  r  r  r  r  r  r  skipIfrg   r  r  r   mainr   r   r   <module>r:     s2                				      



                     ' ' ' ' ' ' ' ' ' '       ? ? ? ? ? ? ? ? ? ? ) ) ) ) ) ) - - -- - -     # # #       " " "% % %  * * *; ; ;+ + +< < <1 1 1& & &? ? ?4 4 4    & & && & &# # #$ $ $' ' '* * * z.))O,,i&&z,--{-..Y'((
      "/ / /, , ,

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