
    <e                     r   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mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZ  G d d          Z	  ej                                                     d	Zn# e$ r d
ZY nw xY w e j        ed           G d dee j                              Z G d de j                  Z G d dee j                  Z dez  dz  fdZ! G d de j                  Z" G d de j                  Z# G d de j                  Z$e%dk    r e j&                     dS dS )    N)partial)logexppifsumsin	factorial)support)Fraction)abcCounterc                       e Zd Zd Zd Zd Zd Zd Zej	        
                    d          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 )TestBasicOpsc                 <     	  fdt          |          D             S )Nc                 B    g | ]}j                                         S  genrandom.0iselfs     '/usr/lib/python3.11/test/test_random.py
<listcomp>z+TestBasicOps.randomlist.<locals>.<listcomp>   s%    444a!!444    range)r   ns   ` r   
randomlistzTestBasicOps.randomlist   s&    >44445884444r   c                 "   | j                                          | j                                         }t          j        d           | j                                          | j                                         }|                     ||           d S )N皙?)r   seedgetstatetimesleepassertNotEqual)r   state1state2s      r   test_autoseedzTestBasicOps.test_autoseed   so    ""$$
3""$$FF+++++r   c                    d}| j                                          | j                                         }|                     |          }| j                             |           |                     ||                     |                     d S )N  )r   r#   r$   r    setstateassertEqual)r   Nstaterandseqs       r   test_saverestorezTestBasicOps.test_saverestore!   sx    !!##//!$$%   $//!"4"455555r   c                     G d dt                     }dD ]}| j                            |           dt          d           |            fD ]N}|                     t
                    5  | j                            |           d d d            n# 1 swxY w Y   Ot          t          d                    t          d          fD ](}|                     t
          | j        j        |           )|                     t
          | j        j        dd	dd
           |                     t
          t          | j                  g            d S )Nc                       e Zd Zd ZdS )*TestBasicOps.test_seedargs.<locals>.MySeedc                     dS )Ni?r   r   s    r   __hash__z3TestBasicOps.test_seedargs.<locals>.MySeed.__hash__,   s    ur   N)__name__
__module____qualname__r8   r   r   r   MySeedr5   +   s#            r   r<   )
Nr      l      Fx:^V    Fx:^V FTQ	@ay      ?       @r      r=   )one      )
objectr   r#   tupleassertRaises	TypeErrorlistr   dicttype)r   r<   args      r   test_seedargszTestBasicOps.test_seedargs)   s   	 	 	 	 	V 	 	 	, 	 	CHMM#%,,1 	# 	#C""9-- # #c"""# # # # # # # # # # # # # # # qNNDQKKK0 	= 	=Ci<<<<)TX]Aq!Q???)T$(^^R88888s   )BB	B	c                     t          d          }| j                            |           |                     |t          d                     d S )Ns   1234)	bytearrayr   r#   r.   )r   rA   s     r   test_seed_no_mutate_bug_44018z*TestBasicOps.test_seed_no_mutate_bug_44018;   sG    gaIg../////r   zrandom._urandomc                 F    t           |_        |                                  d S N)NotImplementedErrorside_effectrN   )r   urandom_mocks     r   *test_seed_when_randomness_source_not_foundz7TestBasicOps.test_seed_when_randomness_source_not_found@   s$     $7 r   c                 V   | j         j        }g } ||           |                     |g            dg} ||           |                     |dg           d t          d          D             }d t          d          D             }|D ]} ||           t	          ||          D ]e\  }}|                     t          |          t          |                     |                     t          |          t          |                     ft          t          d                    }t          t          d                    } ||           |                     ||k                ||           |                     ||k               | 	                    t          |d           d S )N%   c                 F    g | ]}t          t          |                    S r   rJ   r   r   r   s     r   r   z-TestBasicOps.test_shuffle.<locals>.<listcomp>R   s$    2221U1XX222r   
   c                 F    g | ]}t          t          |                    S r   r[   r\   s     r   r   z-TestBasicOps.test_shuffle.<locals>.<listcomp>S   s$    ;;;AeAhh;;;r   r,   r=   rD   rB   )r   shuffler.   r   ziplensetrJ   
assertTruerH   rI   )r   r`   lstseqsshuffled_seqsshuffled_seqseqshuffled_lsts           r   test_shufflezTestBasicOps.test_shuffleJ   s   ("b!!!drd###22b		222;;r;;;) 	" 	"LGL!!!!#&t]#;#; 	: 	:S,SXXs<'8'8999SXXs<'8'89999 5;;E$KK((|+,,,|+,,,)Wi88888r   c                    | j         j        }|                     t                    5   |g            d d d            n# 1 swxY w Y   |                      |dg          d           |                      |ddg          ddg           d S )N2      K   )r   choicerH   
IndexErrorr.   assertIn)r   rp   s     r   test_choicezTestBasicOps.test_choicek   s    z** 	 	F2JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r***ffb"X&&R11111s   ?AAc                 z   | j         j        } G d dt                    }|                     t                    5   | |g                      d d d            n# 1 swxY w Y   |                      | |dg                    d           |                      | |ddg                    ddg           d S )Nc                       e Zd Z	 d ZdS )/TestBasicOps.test_choice_with_numpy.<locals>.NAc                     t           rS   )RuntimeErrorr7   s    r   __bool__z8TestBasicOps.test_choice_with_numpy.<locals>.NA.__bool__y   s    ""r   N)r9   r:   r;   ry   r   r   r   NArv   w   s&        -# # # # #r   rz   rm   rn   ro   )r   rp   rJ   rH   rq   r.   rr   )r   rp   rz   s      r   test_choice_with_numpyz#TestBasicOps.test_choice_with_numpyr   s    	# 	# 	# 	# 	# 	# 	# 	#
 z** 	 	F22b66NNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	B4))2...ffRRR\\**RH55555s   AA"Ac                 ~   d}t          |          }t          |dz             D ]}| j                            ||          }|                     t	          |          |           t          |          }|                     t	          |          |           |                     |t          |          k               |                     | j                            g d          g            |                     t          | j        j        ||dz              |                     t          | j        j        g d           d S )Nd   r=   r   r>   )	r   r   sampler.   rb   rc   rd   rH   
ValueError)r   r/   
populationksuniqs         r   test_samplezTestBasicOps.test_sample   s    1XX
qs 	5 	5A
A..ASVVQ'''q66DSYY***OODC
OO34444Q//444*dhoz1Q3GGG*dhor2>>>>>r   c           
      d   d}t          |          }d}t          |          D ]}t          |          t          ||z
            z  }i }t          |          D ]B}d |t          | j                            ||                    <   t          |          |k    r nC|                                  d S )N   '  )r   r	   rG   r   r~   rb   fail)r   r   poptrialsr   expectedpermsr   s           r   test_sample_distributionz%TestBasicOps.test_sample_distribution   s     Ahhq 	 	A ||y1~~5HE6]]  8<eDHOOC33445u::))E * 			 	r   c                 F   | j                             t          d          d           | j                             t          d          d           | j                             t          d          d           | j                             t	          d          d           d S )N   rD   abcdefghijklmnopqrst)r   r~   r   strrG   r7   s    r   test_sample_inputszTestBasicOps.test_sample_inputs   s~    b		1%%%b		1%%%233Q777455q99999r   c                     |                      t          | j        j        t                              d          d           d S )NabcdefrD   )rH   rI   r   r~   rK   fromkeysr7   s    r   test_sample_on_dictsz!TestBasicOps.test_sample_on_dicts   s2    )TX_dmmH6M6MqQQQQQr   c                     |                      t                    5  h d}| j                            |d           d d d            d S # 1 swxY w Y   d S )N>   r]   r      (   rm   <   F   r   r   )rH   rI   r   r~   )r   r   s     r   test_sample_on_setsz TestBasicOps.test_sample_on_sets   s    y)) 	- 	-555JHOOJ!O,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   !A		AAc                 *    G d dt           j        t           j                  } |g d          }t          j                    5  t          j        dt                     | j                            |d           d d d            d S # 1 swxY w Y   d S )Nc                        e Zd Zd Zd Zd ZdS )3TestBasicOps.test_sample_on_seqsets.<locals>.SeqSetc                     || _         d S rS   _items)r   itemss     r   __init__z<TestBasicOps.test_sample_on_seqsets.<locals>.SeqSet.__init__   s    #r   c                 *    t          | j                  S rS   )rb   r   r7   s    r   __len__z;TestBasicOps.test_sample_on_seqsets.<locals>.SeqSet.__len__   s    4;'''r   c                     | j         |         S rS   r   )r   indexs     r   __getitem__z?TestBasicOps.test_sample_on_seqsets.<locals>.SeqSet.__getitem__   s    {5))r   N)r9   r:   r;   r   r   r   r   r   r   SeqSetr      sA        $ $ $( ( (* * * * *r   r   )rD   rE   r=   rB   errorrD   r   )	r   SequenceSetwarningscatch_warningssimplefilterDeprecationWarningr   r~   )r   r   r   s      r   test_sample_on_seqsetsz#TestBasicOps.test_sample_on_seqsets   s    	* 	* 	* 	* 	*S\37 	* 	* 	* VLLL))
$&& 	- 	-!'+=>>>HOOJ!O,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   7BBBc                    | j         j        }g d}g d}d}t           ||||                    }|                     t	          |                                          |           t          ||          D ]!\  }}|                     ||         |           "|                     d|           t	          |          }t           ||||                    }|                     t	          |                                          |           t          ||          D ]!\  }}|                     ||         |           "|                     d|           t           |dgdgd                    }|                     |t          d	                     t          |          }t           ||dg|z  d|z                      }|                     |t          d|z                       | 
                    t                    5   |g d
dd           d d d            n# 1 swxY w Y   | 
                    t                    5   |g d
g dd           d d d            n# 1 swxY w Y   | 
                    t                    5   |g d
g dd           d d d            n# 1 swxY w Y   | 
                    t                    5   |ddgddgd           d d d            n# 1 swxY w Y   | 
                    t                    5   |g d
ddgd           d d d            n# 1 swxY w Y   | 
                    t                    5   |g d
g dd           d d d            d S # 1 swxY w Y   d S )N)redgreenblueorangeblackbrownamber)     r   r]   r   r   r=     countsr   r   xr]      )r   )r   r   r   )iirD   )r   r   r   r   r      r=   )r=   rD   rB   rE   )r   r~   r   r.   sumvaluesra   assertLessEqualassertNotInrb   rH   rI   r   )	r   r~   colorsr   r   summarycolorweightncs	            r   test_sample_with_countsz$TestBasicOps.test_sample_with_counts   s    ONNNNN&&!<<<==W^^--..222 00 	9 	9ME6  8888'*** KK&&!<<<==W^^--..222 00 	9 	9ME6  8888'*** &&#tq999::'A,,,/// [[&&R2b5AAABB'"V)"4"4555 y)) 	> 	>F+++B"====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>z** 	G 	GF+++LLLAFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gz** 	D 	DF+++IIICCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Dz** 	< 	<FE7#RH;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<z** 	A 	AF+++QFa@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Az** 	G 	GF+++LLLAFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gsl   H%%H),H)
I))I-0I-J--J14J1K11K58K5L55L9<L9M::M>M>c           
         | j         j        }g d}d}t          d          }t          t          d                    } ||d           ||t          d          d           |d|t          d                     |d|t          d                    fD ]}|                     t          |          d           |                     t          |          t                     |                     t          |          t          |          k               | 	                    t                    5   |d           d d d            n# 1 swxY w Y   |                      ||d	          g            |                      ||d
          g            | 	                    t                    5   ||d           d d d            n# 1 swxY w Y   |                     t           ||d                    t          |          k               |                     t           ||d                    t          |          k               | 	                    t                    5   ||d           d d d            n# 1 swxY w Y   |                     t           ||d d                    t          |          k               |                     t           ||d d                    t          |          k               | 	                    t                    5   ||ddgd           d d d            n# 1 swxY w Y   | 	                    t                    5   ||dd           d d d            n# 1 swxY w Y   | 	                    t                    5   ||d gdz  d           d d d            n# 1 swxY w Y   g dg dt          dd          t          dd          t          dd          t          dd          gg dfD ]A}|                     t           |||d                    t          |          k               B| 	                    t                    5   ||ddgd           d d d            n# 1 swxY w Y   | 	                    t                    5   ||dd           d d d            n# 1 swxY w Y   | 	                    t                    5   ||d gdz  d           d d d            n# 1 swxY w Y   | 	                    t                    5   ||t          d          t          d          d           d d d            n# 1 swxY w Y   g dg dt          dd          t          dd          t          dd          t          dd          gfD ]A}|                     t           |||d                    t          |          k               B|                      |dg d          dg           |                      |dg d          dg           |                      |dg d          dg           |                      |dg d          dg           | 	                    t                    5   |g d           d d d            n# 1 swxY w Y   | 	                    t                    5   |g g d           d d d            n# 1 swxY w Y   | 	                    t                    5   |g g d           d d d            d S # 1 swxY w Y   d S )N)r   r   r   yellowabcdrE   r   r   )r   r   weights)r   r   cum_weightsrD   r   r>   g      @)r   r   r=   r]   )   r]   rn   r   )g333333.@gffffff$@g3333339@gL>@rB      )TFTFr   r   )r=   r   r   r   rA   )r   r=   r   r   b)r   r   r=   r   c)r   r   r   r=   d)r   choicesr   rc   r.   rb   rL   rJ   rd   rH   rI   r   r   rq   )r   r   datastr_data
range_dataset_datar~   r   s           r   test_choiceszTestBasicOps.test_choices   s
   ("1111XX
uQxx== GDAGD%((a(((GaD%((;;;GaDeAhh???	
 	6 	6F S[[!,,,T&\\4000OOCKK3t9945555 y)) 	 	GAJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	+++R000,,,b111y)) 	! 	!GDC    	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	GGH22233s8}}DEEEGGJ!44455ZHIIIy)) 	# 	#GH""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	GGD$!44455TBCCCGGD$!<<<==TJKKKz** 	& 	&GD1Q%1%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&y)) 	# 	#GD"""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#y)) 	) 	)GD4&(a((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) !  (((!Q!Q!Q!QP***	
 	K 	KG OOCg ; ; ;<<D		IJJJJz** 	2 	2GDqeq1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2y)) 	/ 	/GDbA....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/y)) 	5 	5GDtfQh!4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5y)) 	? 	?GD%((aA>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? !  (((!Q!Q!Q!QP
 	W 	WG
 OOC'Q G G GHHCPTIIUVVVV 	66>>>66>>>66>>>66>>> z** 	 	GB!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	) 	)GBa((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)z** 	- 	-GBB!,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   5EEE4GGG/J		JJ,M		MM.N		NN.OOO<RR R>SS S>TT!$T!*U88U<?U<0[

[[/\

\\/]]]c                 B    | j         j        } |ddgddgd           d S )Nr=   rD   g         )r   r   r   )r   r   )r   r   s     r   test_choices_subnormalz#TestBasicOps.test_choices_subnormal9  s4    
 ("Aq6FF+;tDDDDDDr   c                     |                      t                    5  | j                            dddg           d d d            d S # 1 swxY w Y   d S )NAB        rH   r   r   r   r7   s    r   "test_choices_with_all_zero_weightsz/TestBasicOps.test_choices_with_all_zero_weightsA  s    z** 	/ 	/HTC:...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/   AA
A
c                     |                      t                    5  | j                            dg d           d d d            d S # 1 swxY w Y   d S )NABC)rB   r=   r   r7   s    r   test_choices_negative_totalz(TestBasicOps.test_choices_negative_totalF  s    z** 	0 	0HUJJJ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0r   c                    |                      t                    5  | j                            dt	          d          g           d d d            n# 1 swxY w Y   |                      t                    5  | j                            ddt	          d          g           d d d            n# 1 swxY w Y   |                      t                    5  | j                            dt	          d           dg           d d d            n# 1 swxY w Y   |                      t                    5  | j                            ddt	          d          g           d d d            n# 1 swxY w Y   |                      t                    5  | j                            dt	          d          t	          d          g           d d d            d S # 1 swxY w Y   d S )NAinfr   r   {   nanz-inf)rH   r   r   r   floatr7   s    r   test_choices_infinite_totalz(TestBasicOps.test_choices_infinite_totalJ  s   z** 	2 	2HS5<<.111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2z** 	8 	8HTCu#6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8z** 	9 	9HTU5\\M3#7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9z** 	8 	8HTCu#6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8z** 	B 	BHTE&MM5<<#@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	BsY   *AAA6+B--B14B1,D

DD/+E&&E*-E*8GGGc                    dD ]}| j                             |           | j                                         }| j                             dd          }| j                             |           | j                                         }| j                             dd          }|                     ||           |                     ||           d S )N)r=      r   i  i90  i@ i	 r   r=   )r   r#   r   gaussr.   )r   r#   x1y1x2y2s         r   
test_gausszTestBasicOps.test_gaussV  s    
 < 
	% 
	%DHMM$""B1%%BHMM$""B1%%BR$$$R$$$$
	% 
	%r   c                    t          dd          D ]@}|                     d| j                            |          cxk    od|z  k     nc            A|                     | j                            d          d           | j        j        }dD ]d}d|z  dz
  }d}d}t          d          D ]} ||          }||z  }|||z  z  }|                     ||           |                     ||           e|                     t          | j        j                   |                     t          | j        j        dd           |                     t          | j        j        d           |                     t          | j        j        d           d S )	Nr=   r,   r   rD   )r=   rD   rB   rE          r   4   5   6   w            r}   r>   g333333$@)r   rd   r   getrandbitsr.   rH   rI   r   )	r   r   getbitsspanall_bitscumcpl_cumr   vs	            r   test_getrandbitszTestBasicOps.test_getrandbitsg  s   q$ 	A 	AAOOA!5!5a!8!8????1a4????@@@@--a00!444 (&L 		0 		0D$wqyHCG3ZZ ( (GDMMq8a<'S(+++Wh//// 	)TX%9:::)TX%91a@@@*dh&:B???)TX%94@@@@@r   c                 <    t          t          j        dz             D ]|}t          j         j        |          } fdt          d          D             }t          j        |          fdt          d          D             }                     ||           }d S )Nr=   c                 B    g | ]}j                                         S r   r   r   s     r   r   z.TestBasicOps.test_pickling.<locals>.<listcomp>  s%    <<<Qtx((<<<r   r]   c                 8    g | ]}                                 S r   r   )r   r   newgens     r   r   z.TestBasicOps.test_pickling.<locals>.<listcomp>  s!    >>>q6==??>>>r   )r   pickleHIGHEST_PROTOCOLdumpsr   loadsr.   )r   protor0   origseqrestoredseqr  s   `    @r   test_picklingzTestBasicOps.test_pickling  s    62Q677 	3 	3EL511E<<<<%))<<<G\%((F>>>>E"II>>>KWk2222	3 	3r   c                 *   g d}|D ]\  }}t          t          j        |          d          5 }t          j        |          }d d d            n# 1 swxY w Y   |                     t          |                                dz            |           d S )N))zrandv2_32.pcki  )zrandv2_64.pckib  )z
randv3.pckiW  rbr,   )openr
   findfiler  loadr.   intr   )r   filesfilevaluefrs         r   test_bug_1727780zTestBasicOps.test_bug_1727780  s    & & & ! 	: 	:KD%g&t,,T22 #aKNN# # # # # # # # # # # # # # #SD1159999	: 	:s   AA	A	c                     d}| j         j        t          fdt          |          D                       }|                     d||z  cxk     odk     nc ||z             d S )Ni c              3   <   K   | ]} d           dz  dk    V  dS )l          rB   rD   Nr   )r   r   	randranges     r   	<genexpr>z-TestBasicOps.test_bug_9025.<locals>.<genexpr>  s8      GG		*++a/14GGGGGGr   333333?gGz?)r   r)  r   r   rd   )r   r   r   r)  s      @r   test_bug_9025zTestBasicOps.test_bug_9025  sz     H&	GGGGeAhhGGGGGqs((((S((((1Q300000r   c                    t          dd          D ]g}| j                            |          }|                     t	          |          t
                     |                     t          |          |           h|                     | j                            d          d           |                     t          | j        j                   |                     t          | j        j        dd           |                     t          | j        j        d           |                     t          | j        j        d           d S )Nr=   r]   r   r   rD   r>         ?)
r   r   	randbytesr.   rL   bytesrb   rH   rI   r   )r   r   r   s      r   test_randbyteszTestBasicOps.test_randbytes  s   q" 	+ 	+A8%%a((DT$ZZ///SYY****++A..444 	)TX%7888)TX%7A>>>*dh&8"===)TX%7=====r   c                     |                      | j                                        t                     |                      | j                                        t                     d S rS   )assertIsInstancer   normalvariater   r   r7   s    r   test_mu_sigma_default_argsz'TestBasicOps.test_mu_sigma_default_args  sN    dh4466>>>dhnn..66666r   N)"r9   r:   r;   r    r*   r2   rN   rQ   unittestmockpatchrW   rk   rs   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r&  r,  r1  r5  r   r   r   r   r      s       
5 5 5, , ,6 6 69 9 9$0 0 0
 ]*++  ,+9 9 9B2 2 26 6 6? ? ?    : : :R R R- - -
- - - *G *G *GXK- K- K-ZE E E/ / /
0 0 0
B 
B 
B% % %"A A A23 3 3
: 
: 
:1 1 1> > >7 7 7 7 7r   r   TFz!random.SystemRandom not availablec                       e Zd Z ej                    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eefdZdS )SystemRandom_TestBasicOpsc                 8    | j                                          d S rS   r   r#   r7   s    r   r*   z'SystemRandom_TestBasicOps.test_autoseed  s    r   c                     |                      t          | j        j                   |                      t          | j        j        d            d S rS   )rH   rT   r   r$   r-   r7   s    r   r2   z*SystemRandom_TestBasicOps.test_saverestore  sB    -tx/@AAA-tx/@$GGGGGr   c                 :    | j                             d           d S Nr}   r<  r7   s    r   rN   z'SystemRandom_TestBasicOps.test_seedargs  s    cr   c                     d | j         _        | j                             d           |                     | j         j        d            d S r?  )r   
gauss_nextr#   r.   r7   s    r   r   z$SystemRandom_TestBasicOps.test_gauss  sA    "c,d33333r   c                     t          t          j        dz             D ].}|                     t          t          j        | j        |           /d S )Nr=   )r   r  r  rH   rT   r  r   )r   r  s     r   r  z'SystemRandom_TestBasicOps.test_pickling  sQ    62Q677 	R 	RE16<5QQQQ	R 	Rr   c                     d}d}t          d          D ].}|t          | j                                        |z            z  }/|                     ||dz
             d S Nl          r   r}   r=   r   r   r   r   r.   r   r  r
  r   s       r   test_53_bits_per_floatz0SystemRandom_TestBasicOps.test_53_bits_per_float  f    s 	1 	1A3tx((4/000CCd1f%%%%%r   c                     ddz  }d}t          d          D ]D}| j                            |          }|                     d|cxk    o|k     nc            ||z  }E|                     ||dz
             d S NrD   r   r   r}   r=   r   r   r)  rd   r.   r   r  r
  r   r%  s        r   test_bigrandz&SystemRandom_TestBasicOps.test_bigrand       Cxs 	 	A""4((AOOAMMMMTMMMM***1HCCd1f%%%%%r   c                    dD ]}| j                             d|dz
  z            }| j                             d|z            }||k    rF|                     || j                             ||          cxk    o|k     nc            d S N)	r   P      r         iw  i   i&  rD   r   r)  rd   r   r   startstops       r   test_bigrand_rangesz-SystemRandom_TestBasicOps.test_bigrand_ranges      ; 	M 	MAH&&qQqSz22E8%%a1f--Du}}OOETX%7%7t%D%DKKKKtKKKKLLLL	M 	Mr   c           
           dD ]^\                        t          t                              t           fdt          d          D                                  _d S )N)r   )l        l         )l            l           c                 F    g | ]}j                                       S r   r   r)  r   r   r   rW  rX  s     r   r   z>SystemRandom_TestBasicOps.test_rangelimits.<locals>.<listcomp>  +    HHHTX''d33HHHr   r}   r.   rc   r   r   rW  rX  s   `@@r   test_rangelimitsz*SystemRandom_TestBasicOps.test_rangelimits      K 	K 	KKE4SuT!2!233HHHHHHU3ZZHHHIIK K K K	K 	Kr   c                     | j                             ddd          }|                     |d           | j                             ddd          }|                     |d           d S )Nr   r]   rD   )r   rD   rE   r   r   )r   r)  rr   r.   )r   rints     r   test_randrange_nonunit_stepz5SystemRandom_TestBasicOps.test_randrange_nonunit_step  sd    x!!!R++dO,,,x!!!Q**q!!!!!r   c           
      :   t          | j        t          | j        j                  } |dd            |d            |ddd           |                     t          |d           |                     t          | j        j        d           |                     t          | j        j        t          dd                     |                     t          |d	           |                     t          |dd
           |                     t          | j        j        dd           |                     t          | j        j        dt          dd                     |                     t          |dd            |ddd           |                     t          |ddd           |                     t          |ddd           |                     t          |ddd           |                     t          | j        j        ddd           |                     t          | j        j        ddt          dd                     |                     t          |ddd	           |                     t          | j        j        ddd           |                     t          |ddd           d S )NrB   i/r   r}   in!	@      @r=   3	@       @rD   2*   r   r.  )r   rH   r   r   r)  assertWarnsr   r   )r   raisess     r   test_randrange_errorsz/SystemRandom_TestBasicOps.test_randrange_errors  s[   *J8JKKq!tq#s+VW===+TX-?EEE+TX-?!QPPP+VS999+VQ@@@+TX-?CHHH+TX-?HQPQNNSSS+VQ<<<q"a+VQC@@@+VQ3???+VQGDDD+TX-?BLLL+TX-?BQRTUWWW+VQC@@@+TX-?BLLL+VQ3?????r   c                    | j         j        }|                     t                    5   |ddd           d d d            n# 1 swxY w Y   |                     t                    5   |ddd           d d d            n# 1 swxY w Y   |                     t                    5   |ddd           d d d            n# 1 swxY w Y   |                     t                    5   |ddd           d d d            n# 1 swxY w Y   |                     t                    5  |                     t
                    5   |d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t                    5  |                     t
                    5   |dd	           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t                    5  |                     t
                    5   |ddd
           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N      $@r   rD   r]   g      4@r.  rn  g      %@g     4@      ?)r   r)  rq  r   rH   r   r   r)  s     r    test_randrange_argument_handlingz:SystemRandom_TestBasicOps.test_randrange_argument_handling  s   H&	011 	# 	#IdB"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#011 	# 	#Ib$"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#011 	# 	#Ib"c"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#011 	# 	#Ib"c"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#011 	  	 "":..    	$                             	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  011 	$ 	$"":.. $ $	"d###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 011 	' 	'"":.. ' '	"b#&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   AAA&B  BB%B??CC$C>>DD#E->E
E-E	E-E	E--E14E1G-G:GG
	
GG
	GG!$G!IH7+I7H;	;I>H;	?IIIc                    | j         j        }|                     t                    5   |dd           d d d            n# 1 swxY w Y   |                     t                    5   |dd d           d d d            d S # 1 swxY w Y   d S )Nr,   r}   )step)r   r)  rH   rI   rw  s     r   test_randrange_stepz-SystemRandom_TestBasicOps.test_randrange_step$  s   H&	y)) 	& 	&Id%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&y)) 	, 	,IdDs++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s#   AAA&BB	Bc                 j   t          dd          D ] }d|z  }|dz   } |d ||d          z             }|                     ||           |                     |d|dz
  z             ||dz
  z  } |d ||d          z             }|                     |||dz   g           |                     d|z  |cxk    od|dz
  z  k    nc            ||dz	  z  } |d ||d          z             }|                     ||           |                     d|z  |cxk    od|dz
  z  k    nc            "d S Nr=   r,   grZ|
 ?rD   r   r   r.   rr   rd   r   _logr   r   r   numbitsr   s          r   test_randbelow_logicz.SystemRandom_TestBasicOps.test_randbelow_logic,      q$ 	1 	1AQAcGGdd1ajj())AQ(((QAaC)))QJAGdd1ajj())AMM!gwqy1222OOAqD1////q1Q3x////000bLAGdd1ajj())AQ(((OOAqD1////q1Q3x////0000	1 	1r   N)r9   r:   r;   r   SystemRandomr   r*   r2   rN   r   r  rG  rM  rY  rd  rh  rs  rx  r{  r   r   r  r   r   r   r:  r:    s       
&


C  H H H  4 4 4
R R R& & &	& 	& 	&M M MK K K
" " "@ @ @4' ' '(, , , ), 1 1 1 1 1 1r   r:  c                   b    e Zd Zej        j        d             Zej        j        d             ZdS )TestRawMersenneTwisterc                     dd l }t          t          j        dz             D ]=}|                                }|                     t          t          j        ||           >d S )Nr   r=   )_randomr   r  r  RandomrH   rI   r  )r   r  r  r%  s       r   test_bug_41052z%TestRawMersenneTwister.test_bug_41052C  sh     	62Q677 	A 	AE  Aiq%@@@@	A 	Ar   c                     dd l }|                                }|                    d           |                    d          }|                     |                                |                                           d S )Nr   _ )r  r  r#   r.   r   )r   r  r1r2s       r   test_bug_42008z%TestRawMersenneTwister.test_bug_42008K  sk     	^^
^^G$$biikk22222r   N)r9   r:   r;   testr
   cpython_onlyr  r  r   r   r   r  r  B  sW        	\A A A 
\3 3 3 3 3r   r  c                        e Zd Z ej                    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 fdZd ZeefdZd Zd Zd Z fdZd Zd Z xZS )MersenneTwister_TestBasicOpsc                 <     j                             dd                                 fdt          d          D             g d            j                             dd                                 fd	t          d          D             g d
           d S )Ni4 r=   versionc                 f    g | ]-}j                                                                         .S r   r   r   hexr   s     r   r   zGMersenneTwister_TestBasicOps.test_guaranteed_stable.<locals>.<listcomp>[  1    DDDa$(//++//11DDDr   rE   )z0x1.ac362300d90d2p-1z0x1.9d16f74365005p-1z0x1.1ebb4352e4c4dp-1z0x1.1a7422abf9c11p-1zthe quick brown foxrD   c                 f    g | ]-}j                                                                         .S r   r  r   s     r   r   zGMersenneTwister_TestBasicOps.test_guaranteed_stable.<locals>.<listcomp>_  r  r   )z0x1.1239ddfb11b7cp-3z0x1.b3cbb5c51b120p-4z0x1.8c4f55116b60fp-1z0x1.63eb525174a27p-1r   r#   r.   r   r7   s   `r   test_guaranteed_stablez3MersenneTwister_TestBasicOps.test_guaranteed_stableX  s    gq)))DDDD588DDD= = =	> 	> 	> 	+Q777DDDD588DDD= = =	> 	> 	> 	> 	>r   c                      j                             dd                                 fdt          d          D             g d            j                             dd                                 fdt          d          D             g d	            j                             d
d                                 fdt          d          D             g d           d S )Nnofarr=   r  c                 f    g | ]-}j                                                                         .S r   r  r   s     r   r   z?MersenneTwister_TestBasicOps.test_bug_27706.<locals>.<listcomp>g  r  r   rE   z0x1.8645314505ad7p-1z0x1.afb1f82e40a40p-5z0x1.2a59d2285e971p-1z0x1.56977142a7880p-6rachelc                 f    g | ]-}j                                                                         .S r   r  r   s     r   r   z?MersenneTwister_TestBasicOps.test_bug_27706.<locals>.<listcomp>l  r  r   z0x1.0b294cc856fcdp-1z0x1.2ad22d79e77b8p-3z0x1.3052b9c072678p-2z0x1.578f332106574p-3 c                 f    g | ]-}j                                                                         .S r   r  r   s     r   r   z?MersenneTwister_TestBasicOps.test_bug_27706.<locals>.<listcomp>q  r  r   z0x1.b0580f98a7dbep-1z0x1.84129978f9c1ap-1z0x1.aeaa51052e978p-2z0x1.092178fb945a6p-2r  r7   s   `r   test_bug_27706z+MersenneTwister_TestBasicOps.test_bug_27706c  s'    	gq)))DDDD588DDD= = =	> 	> 	> 	h***DDDD588DDD= = =	> 	> 	> 	b!$$$DDDD588DDD= = =	> 	> 	> 	> 	>r   c                      G d dt                     }	 | j                             |                       d S # t          $ r Y d S w xY w)Nc                       e Zd Zd ZdS );MersenneTwister_TestBasicOps.test_bug_31478.<locals>.BadIntc                     d S rS   r   r7   s    r   __abs__zCMersenneTwister_TestBasicOps.test_bug_31478.<locals>.BadInt.__abs__y  s    tr   N)r9   r:   r;   r  r   r   r   BadIntr  x  s#            r   r  )r   r   r#   rI   )r   r  s     r   test_bug_31478z+MersenneTwister_TestBasicOps.test_bug_31478u  ss    	 	 	 	 	S 	 	 		HMM&&((##### 	 	 	DD	s   "9 
AAc                 t     j                             dd                                 fdt          d          D             g d            j                             dd                                 fdt          d          D             g d	            j                             d
d                                 fdt          d          D             g d           d} j                             |d                                 fdt          d          D             g d           d S )Ns   nofarr=   r  c                 f    g | ]-}j                                                                         .S r   r  r   s     r   r   z?MersenneTwister_TestBasicOps.test_bug_31482.<locals>.<listcomp>  r  r   rE   r  s   rachelc                 f    g | ]-}j                                                                         .S r   r  r   s     r   r   z?MersenneTwister_TestBasicOps.test_bug_31482.<locals>.<listcomp>  r  r   r  r   c                 f    g | ]-}j                                                                         .S r   r  r   s     r   r   z?MersenneTwister_TestBasicOps.test_bug_31482.<locals>.<listcomp>  r  r   r  s	     @`c                 f    g | ]-}j                                                                         .S r   r  r   s     r   r   z?MersenneTwister_TestBasicOps.test_bug_31482.<locals>.<listcomp>  r  r   )z0x1.52c2fde444d23p-1z0x1.875174f0daea4p-2z0x1.9e9b2c50e5cd2p-1z0x1.fa57768bd321cp-2r  )r   r   s   ` r   test_bug_31482z+MersenneTwister_TestBasicOps.test_bug_31482  s    	h***DDDD588DDD= = =	> 	> 	> 	i+++DDDD588DDD= = =	> 	> 	> 	c1%%%DDDD588DDD= = =	> 	> 	> 4a###DDDD588DDD= = =	> 	> 	> 	> 	>r   c                 R    |                      t          | j        j        d           d S )N)r=   NN)rH   r   r   r-   r7   s    r   test_setstate_first_argz4MersenneTwister_TestBasicOps.test_setstate_first_arg  s%    *dh&7IIIIIr   c                    | j                                         }|                     t          | j         j        d           |                     t
          | j         j        d           |                     t          | j         j        dddz  d f           |                     t          | j         j        dddz  dz   d f           |                     t
          t          f          5  | j                             dddz  d	z   d f           d d d            n# 1 swxY w Y   |                     t
          t          f          5  | j                             dddz  d
z   d f           d d d            n# 1 swxY w Y   | j                             d          }| j                             |           |                     | j                             d          |           | j                                         d         }t          |          }t          d          |d<   d |D             }|                     t          | j         j        d|d f           d S )N)rD   NN)rD   r_   NrD   )rA   q  )r   ip  )r=   )r  )r>   r}   r=   r   r>   c              3   4   K   | ]}t          |          V  d S rS   )r   )r   r   s     r   r*  zHMersenneTwister_TestBasicOps.test_setstate_middle_arg.<locals>.<genexpr>  s(      ..AQ......r   )r   r$   rH   rI   r-   r   OverflowErrorr  r.   rJ   r   )r   start_statebits100state_valuesr0   s        r   test_setstate_middle_argz5MersenneTwister_TestBasicOps.test_setstate_middle_arg  s   h'')))TX%6HHH*dh&79KLLL)TX%6F3J8MNNN)TX%6DHVOT8RSSS
M:;; 	: 	:Hq$s(6/48999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:
M:;; 	9 	9Hq$s(5.$7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 (&&s+++&&&--c22G<<< x((**1-L)) <<R.....)TX%6E48HIIIIIs$   "$DDD>$E..E25E2c                     g d}| j                             d           |                     d          dd          }t          ||          D ]\  }}|                     ||d           d S )N)
g>FdV?gwR1ۉ?gQ"?g~5?g mb?gYKbX?gH,r̊?gV8?gOֶ?g4Ԗ?   #q  `&  'R      )places)r   r#   r    ra   assertAlmostEqual)r   r   actualrA   es        r   test_referenceImplementationz9MersenneTwister_TestBasicOps.test_referenceImplementation  s    	) 	) 	) 	CDDD&&stt,)) 	2 	2DAq""1Qb"1111	2 	2r   c           	         ddl m} g d}| j                            d           |                     d          dd          }t          ||          D ]2\  }}|                     t           ||d                    |           3d S )Nr   )ldexp)
l   #1,u l   wbl' l    JX l   uak~[ l   @"p1y l   sV%bX$ l   E3EJ l   Vb l   aoek l   4)[v r  r  r  r   )mathr  r   r#   r    ra   r.   r   )r   r  r   r  rA   r  s         r   $test_strong_reference_implementationzAMersenneTwister_TestBasicOps.test_strong_reference_implementation  s    
 		& 	& 	& 	CDDD&&stt,)) 	3 	3DAqSq"..2222	3 	3r   c                 J    ddz  dz
  }| j                             |           d S )Nr=   i8 r<  )r   r#   s     r   test_long_seedz+MersenneTwister_TestBasicOps.test_long_seed  s-     i A%dr   c                     d}d}t          d          D ].}|t          | j                                        |z            z  }/|                     ||dz
             d S rD  rE  rF  s       r   rG  z3MersenneTwister_TestBasicOps.test_53_bits_per_float  rH  r   c                     ddz  }d}t          d          D ]D}| j                            |          }|                     d|cxk    o|k     nc            ||z  }E|                     ||dz
             d S rJ  rK  rL  s        r   rM  z)MersenneTwister_TestBasicOps.test_bigrand  rN  r   c                    dD ]}| j                             d|dz
  z            }| j                             d|z            }||k    rF|                     || j                             ||          cxk    o|k     nc            d S rP  rU  rV  s       r   rY  z0MersenneTwister_TestBasicOps.test_bigrand_ranges  rZ  r   c           
           dD ]^\                        t          t                              t           fdt          d          D                                  _d S )Nr\  c                 F    g | ]}j                                       S r   r_  r`  s     r   r   zAMersenneTwister_TestBasicOps.test_rangelimits.<locals>.<listcomp>  ra  r   r}   rb  rc  s   `@@r   rd  z-MersenneTwister_TestBasicOps.test_rangelimits  re  r   c                     t                                                       | j                            d           |                     | j                            d          d           d S )N r}      S!m.vFXO )superr  r   r#   r.   r  )r   	__class__s    r   r  z-MersenneTwister_TestBasicOps.test_getrandbits  sf      """ 	g--c226	8 	8 	8 	8 	8r   c                     | j                             d           |                     | j                             ddz            d           d S )Nr  rD   c   r  )r   r#   r.   r)  r7   s    r   test_randrange_uses_getrandbitsz<MersenneTwister_TestBasicOps.test_randrange_uses_getrandbits"  sU     	g 	++ArE226	8 	8 	8 	8 	8r   c                 j   t          dd          D ] }d|z  }|dz   } |d ||d          z             }|                     ||           |                     |d|dz
  z             ||dz
  z  } |d ||d          z             }|                     |||dz   g           |                     d|z  |cxk    od|dz
  z  k    nc            ||dz	  z  } |d ||d          z             }|                     ||           |                     d|z  |cxk    od|dz
  z  k    nc            "d S r}  r~  r  s          r   r  z1MersenneTwister_TestBasicOps.test_randbelow_logic,  r  r   c                 ^   dt           j        z  }t          j                    5  t          j        dt
                     | j                            |dz   |           d d d            n# 1 swxY w Y   | j                            d|           d}d}|||z  z
  |z  }t          j	        j
                            t           j        d          5 }||z   ||z
  g|_        | j                            ||           |                     |j        d           d d d            d S # 1 swxY w Y   d S )	Nr=   ignore)maxsizei  rp  {Gz?r   rD   )r   BPFr   r   r   UserWarningr   _randbelow_without_getrandbitsr6  r7  r8  rF   r  rU   r.   
call_count)r   r  r   epsilonlimitrandom_mocks         r   "test_randbelow_without_getrandbitsz?MersenneTwister_TestBasicOps.test_randbelow_without_getrandbitsA  s    VZ-$&& 	 	!(K888H33	7 4   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	//g/FFF  GaK(G3] ''x@@ 	8K',w&HK#H33Aw3GGG[3Q777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s$   :A))A-0A-AD""D&)D&c                     d}d}d}| j                             |||          }|                     ||cxk     o|k    nc            |                     ||z   |z  d           d S )Nl    J)r?   i8r   )r   r)  rd   r.   )r   rW  rX  rz  r   s        r   test_randrange_bug_1590891z7MersenneTwister_TestBasicOps.test_randrange_bug_1590891c  s|    %HudD11q))))E))))***!D&$*****r   c                    | j         j        }d}| j                             d           | j                             t          |          d          }| j                             d           | j                             t          |          dg|z  d          }|                     ||           | j                             d           | j                             t          |          t          d|dz             d          }|                     ||           g d}g d}g d	}d
gdz  dgdz  z   dgdz  z   }	| j                             d           | j                             |	d          }| j                             d           | j                             ||d          }|                     ||           | j                             d           | j                             ||d          }|                     ||           d S )Ni r  r   r   r=   r   )RedBlackGreen)   r  rD   )r  $   &   r  r  r  r  rD   i߉ )r   r   r#   r   r.   )
r   r   r   rA   r   r   r   r   r   expanded_populations
             r   test_choices_algorithmsz4MersenneTwister_TestBasicOps.test_choices_algorithmsk  s   ("gHU1XX//gHU1XXs1u66AgHU1XX5AaC==EJJA /..
++"ll$glgY^;wi!mKgH0E::gHZE::AgHZ[EJJAr   c           	          t                                                       d}d j                            |                                 j                            d                      j                            |                                 j                            d          d                                 j                            d                      j                            |                                d                     fdt          d          D                                   j                            |           dd d         }                     d                     fd	t          d          D                       |            j                            |           d                    fd
t          dt                    d          D                       }                     d                     fdt          d          D                       |            j                            |           d                    fdt          dt                    d          D                       }                     d                     fdt          d          D                       |           d S )Nr  s   3f6oe   r   r   c                 D    g | ]}j                             d           S )rE   r   r/  r   _r   s     r   r   z?MersenneTwister_TestBasicOps.test_randbytes.<locals>.<listcomp>  s)    "K"K"KQ48#5#5a#8#8"K"K"Kr   rE   rB   c              3   L   K   | ]}j                             d           V  dS )r=   Nr  r  s     r   r*  z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>  3      !J!JA$("4"4Q"7"7!J!J!J!J!J!Jr   c              3   8   K   | ]}|d z   |dz            V  dS )rD   rE   Nr   r   r   r   s     r   r*  z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>  P       B B!" &a!eQUl3 B B B B B Br   c              3   L   K   | ]}j                             d           V  dS )rD   Nr  r  s     r   r*  z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>  r  r   c              3   8   K   | ]}|d z   |dz            V  dS )r=   rE   Nr   r  s     r   r*  z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>  r  r   c              3   L   K   | ]}j                             d           V  dS )rB   Nr  r  s     r   r*  z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>  r  r   )	r  r1  r   r#   r.   r/  joinr   rb   )r   r#   	expected1	expected2	expected3r   r  s   `    @r   r1  z+MersenneTwister_TestBasicOps.test_randbytes  s       Gd++B//::: 	d++A..444++B//::: 	d"K"K"K"K%(("K"K"KLL!	# 	# 	#
 	dQTTN	!J!J!J!Jq!J!J!JJJ"	$ 	$ 	$ 	dHH B B B B&+As8}}a&@&@B B B B B	!J!J!J!Jq!J!J!JJJ"	$ 	$ 	$ 	dHH B B B B&+As8}}a&@&@B B B B B	!J!J!J!Jq!J!J!JJJ"	$ 	$ 	$ 	$ 	$r   c                 b   d}t          j                    }| j                            |           |                    |           t	          d          D ]Z}|                     | j                            |          |                    |dz                                |d                     [d S )Nl   OS 	   r   little)	r   r  r   r#   r   r.   r/  r  to_bytes)r   r#   gen2r   s       r   test_randbytes_getrandbitsz7MersenneTwister_TestBasicOps.test_randbytes_getrandbits  s    }d		$q 	L 	LATX//22!--a!e44==aJJL L L L	L 	Lr   c                    | j         j        }| j         j        }g d}g d}d} |d            ||||          } |d           d t          ||          D             }|                     t          |          t          |                      |||          }|                     ||           d}	g d	} |d           d
                     ||	|d                    }d
                    d t          |	|          D                       } |d           d
                     ||d                    }|                     ||           d S )N)r   r   r   r   r   r   )r   r   r   r]   r   r=   r   r  r   c                 <    g | ]\  }}t          |          D ]}|S r   r   )r   r   countr   s       r   r   zOMersenneTwister_TestBasicOps.test_sample_counts_equivalence.<locals>.<listcomp>  s0    ZZZnueUSX\\ZZEZZZZr   r   	abcdefghi)	r]   r  r      r   r   rE   rB   rD   r  r   c                 <    g | ]\  }}t          |          D ]}|S r   r   )r   letterr  r   s       r   r   zOMersenneTwister_TestBasicOps.test_sample_counts_equivalence.<locals>.<listcomp>  s3    aaaTYZ_T`T`aaqFaaaar   )r   r~   r#   ra   r.   rb   r   r  )
r   r~   r#   r   r   r   s1expandeds2r   s
             r   test_sample_counts_equivalencez;MersenneTwister_TestBasicOps.test_sample_counts_equivalence  s|    x}FFFEEEWVF6Q///WZZFF0C0CZZZXF444VH"""R   ---WWWVVC"5556677aa#c6:J:JaaabbWWWVVH+++,,R     r   )r9   r:   r;   r   r  r   r  r  r  r  r  r  r  r  r  rG  rM  rY  rd  r  r  r   r   r  r  r  r  r1  r  r  __classcell__)r  s   @r   r  r  U  s       
&-//C	> 	> 	>> > >$	 	 	> > >6J J JJ J J<2 2 2>3 3 3,  & & &	& 	& 	&M M MK K K
8 8 8 8 88 8 8 ), 1 1 1 1* 8  8  8D+ + +  B&$ &$ &$ &$ &$PL L L! ! ! ! ! ! !r   r  rn        ?c                 >   | dk     r2t           t          t           | z            z  t          d| z
            z  S | dz   }|| dz
  z  t          |          z  |z  t	          dd| z  d| dz   z  d| dz   z  d	| d
z   z  d| dz   z  d| dz   z  d| dz   z  d| dz   z  g	          z  S )Nr  r.  g      @g?g
ö)$@g&Ԏgta@rn  gQfrk  g>@~)@g      @gA~      @g~\>g      @giE>g      @)r   r   gammar   r   )zsqrt2piazs      r   r  r    s    3wwC1II~c!e,,	
iB!C%=3r77"W,tAae$QsU#ae$QsU#qu%!C%(!C%(
5 
0 
0 
 
r   c                      e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            d          d             Ze	j
                            d          d	             Ze	j
                            d          d
             Ze	j
                            d          d             Ze	j
                            d          d             ZdS )TestDistributionsc                    t          j                    fdt          d          D             dgdz  z   }|d d          j        _                             dd           |d d          j        _                             d           |d d          j        _                             d           |d d          j        _                             dd           |d d          j        _                             dd           |d d          j        _         	                    dd           |d d          j        _         
                    dd           |d d          j        _                             dd           |d d          j        _                             dd           |d d          j        _                             dd           |d d          j        _                             dd           |d d          j        _                             d	d           |d d          j        _                             d
d
           |d d          j        _                             ddd           d S )Nc                 8    g | ]}                                 S r   r  )r   r   gs     r   r   z5TestDistributions.test_zeroinputs.<locals>.<listcomp>  s!    +++AQXXZZ+++r   rm   r   r   r=   r]   r.  r  g      i@rk  UUUUUU?)r   r  r   r   uniformparetovariateexpovariateweibullvariatevonmisesvariater4  r   lognormvariategammavariatebetavariate
triangular)r   r   r$  s     @r   test_zeroinputsz!TestDistributions.test_zeroinputs  s9   MOO++++r+++seAg5QQQ48QYYq___QQQ48Q__S111QQQ48Q]]3///QQQ48Q--c3777QQQ48Q..sC888QQQ48Q__S#666QQQ48QWWS#...QQQ48Q--c3777QQQ48Q..sC888QQQ48Q^^D#666QQQ48Q^^C555QQQ48Q^^E3777QQQ48Q]]3444QQQ48Q\\#sG<<<<<r   c                    t          j                    }dfdt          d          D             }|j        dddf|j        ddd	f|j        d
ddf|j        dt          t          dz  dz  f|j        dddf|j	        dt          d          t          d          t          d          dz  z
  ffD ]\  }}}}|d d          j        |_         g }t          t          |                    D ]+}	 |                     ||            # t          $ r Y (w xY wdx}	}
|D ]}|	|z  }	|
||z
  dz  z  }
t          |          |                     |	z  |d|j        |           |                     |
dz
  z  |d|j        |           d S )Nr   c                 4    g | ]}|t                    z  S r   )r   )r   r   r/   s     r   r   z2TestDistributions.test_avg_std.<locals>.<listcomp>  s#    ,,,AQuQxxZ,,,r   r=   )r.  ru  g      @g      @)r   r.  r%  gqq?g<ݚ?)rv  gUUUUUU?)gGz?r   rD   rB   )r  g      ?g?)r.  rk  gUUUUUU?g?r   )r  msg)r   r  r   r&  r.  r(  r*  r   r'  r)  r  r   rb   appendrq   r  r9   )r   r$  r   variateargsmu	sigmasqrdyr   r  r  r  r/   s               @r   test_avg_stdzTestDistributions.test_avg_std   s    MOO,,,,q,,,J6FG2G\Jx8"Ir2q57;&+":<!:uW~~"'..w1B"BD-F 	J 	J(GT2y txAHA3q66]]  HHWWd^,,,,!   DKB $ $aq2v!m#AA""2a4A181A1A44'H # J J J""2qs8Yq181A1A44'H # J J J J/	J 	Js   *D
DDc                    t          j                    }d}|j        ddf|j        ddf|j        ddf|j        t          d          fdf|j        dt          d          fdf|j        ddf|j        d	d
f|j        t          d           dfdf|j	        ddf|j
        t          d          fd
f|j        dt          d          fdf|j        ddffD ]1\  }}}t          |          D ]}|                      || |           2d S )Nr}   )ru  ru  ru  )ru  ru  ru  r   r   rk  )ru  r   )r   r   r.  )r   ru  )r   r  r&  r.  r(  r   r*  r   r+  r4  r'  r)  r   r.   )r   r$  r/   r4  r5  r   r   s          r   test_constantzTestDistributions.test_constant   s8   MOOL$/|T2148u5"S%,,$7=+t,!:s3!U5\\M3#7=+t45<</37!D%,,#7>!;4( 	; 	;#GT8 1XX ; ;  $::::;	; 	;r   c                    t          j                    }d}dD ]s}dD ]n}t          |          D ]\}|                    ||          }|                     d|cxk    ot           j        k    nc d                    |||                     ]otd S )Nr}   )r   r"   g@g@)r   ffffff@g     @@r   zCvonmisesvariate({}, {}) produced a result {} out of range [0, 2*pi])r2  )r   r  r   r*  rd   TWOPIformat)r   r$  r/   r6  kappar  r~   s          r   test_von_mises_rangez&TestDistributions.test_von_mises_range4  s     MOO$ 	O 	OB( O Oq O OA..r599FOOV3333v|333334:F2uf4M4M $ O O O OOO	O 	Or   c                 Z    t          j        dd           t          j        dd           d S )Nr   g  4&kCg}Ô%IT)r   r*  r7   s    r   test_von_mises_large_kappaz,TestDistributions.test_von_mises_large_kappaB  s.    q$'''q%(((((r   c                 >   |                      t          t          j        dd           |                      t          t          j        dd           |                      t          t          j        dd           |                      t          t          j        dd           d S )Nr>   rB   r   rD   r=   r   )rH   r   r   r,  r7   s    r   test_gammavariate_errorsz*TestDistributions.test_gammavariate_errorsG  s|    *f&92qAAA*f&91a@@@*f&91a@@@*f&91bAAAAAr   zrandom.Random.randomc                 n    g d|_         t          j        dd          }|                     |d           d S )N):0yE>r  r+  g?r=  g=
ףp=@rU   r   r,  r  r   r  returned_values      r   #test_gammavariate_alpha_greater_onez5TestDistributions.test_gammavariate_alpha_greater_oneR  s@     #3"2"2,S#66~t44444r   c                 l    dg|_         t          j        dd          }|                     |d           d S )Ng?r.  r@   g/qr	?rH  rI  s      r   !test_gammavariate_alpha_equal_onez3TestDistributions.test_gammavariate_alpha_equal_one]  s=     $(&,S$77~/@AAAAAr   c                     d}ddg|_         t          j        d|          }t          j        d|z            }|                     ||           d S )Nr@   rG  r.  )rU   r   r,  r(  r  )r   r  betagammavariate_returned_valueexpovariate_returned_values        r   4test_gammavariate_alpha_equal_one_equals_expovariatezFTestDistributions.test_gammavariate_alpha_equal_one_equals_expovariateh  s[    
 #',&,&9#t&D&D#%+%7d
%C%C":<VWWWWWr   c                 ^   t           j        }t           j        }t           j        }d}d}||z   |z  }d}d}	d}
|	|
|z   |	|
g|_        t          j        ||          }|                     |d           d}	d}
|	|
|z   |	|
g|_        t          j        ||          }|                     |d	           d S )
Ngffffff?g333333?r  gX Y?g=,6V?g.3333?gl%t?gK,	9?g7SvT?)r   _e_expr  rU   r,  r  )r   r  rT  rU  r  alpharO  r   r  r  r  rJ  s               r   ,test_gammavariate_alpha_between_zero_and_onez>TestDistributions.test_gammavariate_alpha_between_zero_and_ones  s    F Y{{%ZO
 $&rG|R"<,UD99~/ABBB 
 $&rG|R"<,UD99~/ABBBBBr   zrandom.Random.gammavariatec                 f    d|_         |                     dt          j        dd                     d S )Nr   rm  rj  )return_valuer.   r   r-  )r   gammavariate_mocks     r   test_betavariate_return_zeroz.TestDistributions.test_betavariate_return_zero  s6     *-&f0'BBCCCCCr   N)r9   r:   r;   r/  r9  r;  rA  rC  rE  r6  r7  r8  rK  rM  rR  rW  r[  r   r   r   r!  r!    sk       = = =&J J J@; ; ;(O O O) ) )
B B B ]/005 5 105 ]/00B B 10B ]/00X X 10X ]/00CC CC 10CCJ ]566D D 76D D Dr   r!  c                       e Zd Zd Zd ZdS )TestRandomSubclassingc                 N     G d dt           j                  } |d           d S )Nc                       e Zd ZddZdS )HTestRandomSubclassing.test_random_subclass_with_kwargs.<locals>.SubclassNc                 D    t           j                            |            d S rS   )r   r  r   )r   newargs     r   r   zQTestRandomSubclassing.test_random_subclass_with_kwargs.<locals>.Subclass.__init__  s    &&t,,,,,r   rS   )r9   r:   r;   r   r   r   r   Subclassr`    s(        - - - - - -r   rc  r=   )rb  )r   r  )r   rc  s     r    test_random_subclass_with_kwargsz6TestRandomSubclassing.test_random_subclass_with_kwargs  sI    	- 	- 	- 	- 	-v} 	- 	- 	- 	r   c                     G fddt           j                  }t                       |                                d           |                     dh            G fddt           j                  }t                       |                                d           |                     dh            G fdd	|          }t                       |                                d           |                     d
h            G fdd|          }t                       |                                d           |                     dh            G fdd          } G fdd          } G d d|t           j                  }t                       |                                d           |                     dh            G d d|t           j                  }t                       |                                d           |                     dh            G d d||t           j                  }	t                       |	                                d           |                     dh            G d d||t           j                  }
t                       |
                                d           |                     dh           d S )Nc                   $    e Zd Z fdZ fdZdS )KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1c                 l                         d           t          j                            |           S )NzSubClass1.randomaddr   r  r   calleds    r   r   zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1.random  ,    

-...}++D111r   c                 n                         d           t          j                            | |          S )NSubClass1.getrandbitsrj  r   r  r  r   r   rl  s     r   r  zWTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1.getrandbits  .    

2333}00q999r   N)r9   r:   r;   r   r  rl  s   r   	SubClass1rg    sG        2 2 2 2 2: : : : : : :r   rt  rp  ro  c                       e Zd Z fdZdS )KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass2c                 l                         d           t          j                            |           S )NSubClass2.randomri  rk  s    r   r   zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass2.random  rm  r   Nr9   r:   r;   r   rs  s   r   	SubClass2rv    .        2 2 2 2 2 2 2r   rz  rx  c                       e Zd Z fdZdS )KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass3c                 n                         d           t          j                            | |          S )NSubClass3.getrandbitsrp  rq  s     r   r  zWTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass3.getrandbits  rr  r   Nr9   r:   r;   r  rs  s   r   	SubClass3r}    .        : : : : : : :r   r  r  c                       e Zd Z fdZdS )KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass4c                 l                         d           t          j                            |           S )NSubClass4.randomri  rk  s    r   r   zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass4.random  rm  r   Nry  rs  s   r   	SubClass4r    r{  r   r  r  c                       e Zd Z fdZdS )HTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin1c                 l                         d           t          j                            |           S )NMixin1.randomri  rk  s    r   r   zOTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin1.random  s+    

?+++}++D111r   Nry  rs  s   r   Mixin1r    r{  r   r  c                       e Zd Z fdZdS )HTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin2c                 n                         d           t          j                            | |          S )NMixin2.getrandbitsrp  rq  s     r   r  zTTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin2.getrandbits  s.    

/000}00q999r   Nr  rs  s   r   Mixin2r     r  r   r  c                       e Zd ZdS )KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass5Nr9   r:   r;   r   r   r   	SubClass5r            Dr   r  r  c                       e Zd ZdS )KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass6Nr  r   r   r   	SubClass6r    r  r   r  r  c                       e Zd ZdS )KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass7Nr  r   r   r   	SubClass7r    r  r   r  c                       e Zd ZdS )KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass8Nr  r   r   r   	SubClass8r    r  r   r  )r   r  rc   r)  r.   )r   rt  rz  r  r  r  r  r  r  r  r  rl  s              @r   "test_subclasses_overriding_methodsz8TestRandomSubclassing.test_subclasses_overriding_methods  s   	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	b!!!"9!:;;;	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	b!!!"4!5666	: 	: 	: 	: 	: 	: 	:	 	: 	: 	: 	b!!!"9!:;;;	2 	2 	2 	2 	2 	2 	2	 	2 	2 	2 	b!!!"4!5666	2 	2 	2 	2 	2 	2 	2 	2 	2 	2	: 	: 	: 	: 	: 	: 	: 	: 	: 	:
	 	 	 	 	 	 	 		b!!!/!2333	 	 	 	 	 	 	 		b!!!"6!7888	 	 	 	 	 	 	 		b!!!/!2333	 	 	 	 	 	 	 		b!!!"6!788888r   N)r9   r:   r;   rd  r  r   r   r   r]  r]    s7          R9 R9 R9 R9 R9r   r]  c                   ^    e Zd Zd Zd Zej                                        d             ZdS )
TestModulec                    |                      t          j        d           |                      t          j        d           |                      t          j        d           |                      t          j        d           d S )Ng3?r?g.DT!@g9B.?gtY@)r  r   NV_MAGICCONSTr>  LOG4SG_MAGICCONSTr7   s    r   testMagicConstantszTestModule.testMagicConstants  sm    v35EFFFv|];;;v{,<===v35EFFFFFr   c                     |                      t          t          j                  t          t	          t                              k               d S rS   )rd   rc   r   __all__dirr7   s    r   test__all__zTestModule.test__all__%  s7    FN++s3v;;/?/??@@@@@r   c                    t          j                    \  }}t          j                    }|dk    r	 t          j        d          }t          |d          5 }|                    t          |                     d d d            n# 1 swxY w Y   t          j        d           d S # t          j        d           w xY wt          j	        |           t          j        d          }t          |d          5 }t          |                                          }d d d            n# 1 swxY w Y   |                     ||           t          j        |d           d S )Nr   r  wr%  )exitcode)ospipeforkr   r  r  writer   _exitcloseevalreadr'   r
   wait_process)r   r%  r  pidvalr$  	child_vals          r   test_after_forkzTestModule.test_after_fork)  s    wyy1gii!88(--!S\\ &QGGCHH%%%& & & & & & & & & & & & & & &  HQKKK$S))Ca + NN	+ + + + + + + + + + + + + + +Y/// q111111sA   $B% #B8B% BB% BB% %B;6"D$$D(+D(N)	r9   r:   r;   r  r  r  r
   requires_forkr  r   r   r   r  r    sb        G G GA A A 
\!!2 2 "!2 2 2r   r  __main__)'r6  unittest.mockr   r  r%   r  r   test.supportr  	functoolsr   r  r   r   r   r   r   r	   r
   	fractionsr   collectionsr   r   r   r  SystemRandom_availablerT   
skipUnlessTestCaser:  r  r  r  r!  r]  r  r9   mainr   r   r   <module>r     s         				              3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3             $ $ $ $ $ $ $ $]7 ]7 ]7 ]7 ]7 ]7 ]7 ]7@"F  """ "  # # #"#
 +-PQQG1 G1 G1 G1 G1h.? G1 G1 RQG1T3 3 3 3 3X. 3 3 3&B! B! B! B! B!<1B B! B! B!J "fs]    $RD RD RD RD RD) RD RD RDjZ9 Z9 Z9 Z9 Z9H- Z9 Z9 Z9z 2  2  2  2  2"  2  2  2F zHMOOOOO s   !A= =BB