
    daf                     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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j2                         j                          d	Z e j8                  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 jL                          yy# e$ r d
ZY w xY w)    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                  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!y)TestBasicOpsc                 n    t        |      D cg c]  }| j                  j                          c}S c c}w )z0Helper function to make a list of random numbers)rangegenrandom)selfnis      +/root/Python-3.12.4/Lib/test/test_random.py
randomlistzTestBasicOps.randomlist   s%    +084a!444s   !2c                 "   | j                   j                          | j                   j                         }t        j                  d       | j                   j                          | j                   j                         }| j                  ||       y )N皙?)r   seedgetstatetimesleepassertNotEqual)r   state1state2s      r   test_autoseedzTestBasicOps.test_autoseed   s[    ""$

3""$FF+    c                 
   d}| j                   j                          | j                   j                         }| j                  |      }| j                   j	                  |       | j                  || j                  |             y )N  )r   r   r   r   setstateassertEqual)r   Nstaterandseqs       r   test_saverestorezTestBasicOps.test_saverestore!   s_    !!#//!$% $//!"45r#   c                 p    G d dt               }dD ]  }| j                  j                  |        dt        d       |       fD ];  }| j	                  t
              5  | j                  j                  |       d d d        = t        t        d            t        d      fD ]-  }| j	                  t
        | j                  j                  |       / | j	                  t
        | j                  j                  dd	dd
       | j	                  t
        t        | j                        g        y # 1 sw Y   xY w)Nc                       e Zd Zd Zy)*TestBasicOps.test_seedargs.<locals>.MySeedc                      y)Ni? r   s    r   __hash__z3TestBasicOps.test_seedargs.<locals>.MySeed.__hash__,   s    r#   N)__name__
__module____qualname__r2   r0   r#   r   MySeedr.   +   s    r#   r6   )
Nr      l      Fx:^V    Fx:^V FTQ	@ay      ?       @r      r7   )one      )
objectr   r   tupleassertRaises	TypeErrorlistr   dicttype)r   r6   args      r   test_seedargszTestBasicOps.test_seedargs)   s    	V 	, 	CHHMM#	 %,1 	#C""9- #c"# #	# qNDQK0 	=Ci<	=)TXX]]Aq!Q?)T$((^R8# #s   D,,D5	c                     t        d      }| j                  j                  |       | j                  |t        d             y )Ns   1234)	bytearrayr   r   r'   )r   r;   s     r   test_seed_no_mutate_bug_44018z*TestBasicOps.test_seed_no_mutate_bug_44018;   s1    gaIg./r#   zrandom._urandomc                 :    t         |_        | j                          y N)NotImplementedErrorside_effectrH   )r   urandom_mocks     r   *test_seed_when_randomness_source_not_foundz7TestBasicOps.test_seed_when_randomness_source_not_found@   s     $7 r#   c                 $   | j                   j                  }g } ||       | j                  |g        dg} ||       | j                  |dg       t        d      D cg c]  }t	        t        |             }}t        d      D cg c]  }t	        t        |             }}|D ]
  } ||        t        ||      D ]M  \  }}| j                  t        |      t        |             | j                  t        |      t        |             O t	        t        d            }t	        t        d            } ||       | j                  ||k7          ||       | j                  ||k7         | j                  t        |d       y c c}w c c}w )N%   
   r%   r7   r>   r<   )r   shuffler'   r   rD   ziplenset
assertTruerB   rC   )	r   rV   lstr   seqsshuffled_seqsshuffled_seqseqshuffled_lsts	            r   test_shufflezTestBasicOps.test_shuffleJ   sX   ((""b!drd#(-b	21U1X2216r;AeAh;;) 	"LL!	"#&t]#; 	:S,SXs<'89SXs<'89	: 5;E$K(|+,|+,)Wi8/ 3;s   FFc                     | j                   j                  }| j                  t              5   |g        d d d        | j	                   |dg      d       | j                   |ddg      ddg       y # 1 sw Y   ?xY w)N2      K   )r   choicerB   
IndexErrorr'   assertIn)r   rf   s     r   test_choicezTestBasicOps.test_choicek   sj    z* 	2J	r*fb"X&R1	 	s   	A33A<c                 @   | j                   j                  } G d dt              }| j                  t              5   | |g              d d d        | j                   | |dg            d       | j                   | |ddg            ddg       y # 1 sw Y   KxY w)Nc                       e Zd ZdZd Zy)/TestBasicOps.test_choice_with_numpy.<locals>.NAzSimulate numpy.array() behaviorc                     t         rM   )RuntimeErrorr1   s    r   __bool__z8TestBasicOps.test_choice_with_numpy.<locals>.NA.__bool__y   s    ""r#   N)r3   r4   r5   __doc__ro   r0   r#   r   NArl   w   s
    -#r#   rq   rc   rd   re   )r   rf   rD   rB   rg   r'   rh   )r   rf   rq   s      r   test_choice_with_numpyz#TestBasicOps.test_choice_with_numpyr   s     	# 	#
 z* 	2b6N	B4)2.fRR\*RH5	 	s   BBc                 F   d}t        |      }t        |dz         D ]|  }| j                  j                  ||      }| j                  t	        |      |       t        |      }| j                  t	        |      |       | j                  |t        |      k         ~ | j                  | j                  j                  g d      g        | j                  t        | j                  j                  ||dz          | j                  t        | j                  j                  g d       y )Nd   r7   r   r8   )	r   r   sampler'   rX   rY   rZ   rB   
ValueError)r   r(   
populationksuniqs         r   test_samplezTestBasicOps.test_sample   s     1X
qs 	5A
A.ASVQ'q6DSY*OODC
O34	5 	Q/4*dhhooz1Q3G*dhhoor2>r#   c           
      *   d}t        |      }d}t        |      D ]v  }t        |      t        ||z
        z  }i }t        |      D ]:  }d |t        | j                  j	                  ||            <   t        |      |k(  s: f | j                          x y )N   '  )r   r	   rA   r   ru   rX   fail)r   r   poptrialsrx   expectedpermsr   s           r   test_sample_distributionz%TestBasicOps.test_sample_distribution   s     Ahq 	A |y1~5HE6] 8<eDHHOOC345u:)
 			r#   c                 ,   | j                   j                  t        d      d       | j                   j                  t        d      d       | j                   j                  t        d      d       | j                   j                  t	        d      d       y )N   r>   abcdefghijklmnopqrst)r   ru   r   strrA   r1   s    r   test_sample_inputszTestBasicOps.test_sample_inputs   s^    b	1%b	1%23Q745q9r#   c                     | j                  t        | j                  j                  t        j                  d      d       y )Nabcdefr>   )rB   rC   r   ru   rE   fromkeysr1   s    r   test_sample_on_dictsz!TestBasicOps.test_sample_on_dicts   s'    )TXX__dmmH6MqQr#   c                     | j                  t              5  h d}| j                  j                  |d       d d d        y # 1 sw Y   y xY w)N>   rT   r      (   rc   <   F   r}   rx   )rB   rC   r   ru   )r   rw   s     r   test_sample_on_setsz TestBasicOps.test_sample_on_sets   s>    y) 	-5JHHOOJ!O,	- 	- 	-s   "AA
c                 (    G d dt         j                  t         j                        } |g d      }t        j                         5  t        j
                  dt               | j                  j                  |d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zd Zd Zy)3TestBasicOps.test_sample_on_seqsets.<locals>.SeqSetc                     || _         y rM   _items)r   itemss     r   __init__z<TestBasicOps.test_sample_on_seqsets.<locals>.SeqSet.__init__   s	    #r#   c                 ,    t        | j                        S rM   )rX   r   r1   s    r   __len__z;TestBasicOps.test_sample_on_seqsets.<locals>.SeqSet.__len__   s    4;;''r#   c                      | j                   |   S rM   r   )r   indexs     r   __getitem__z?TestBasicOps.test_sample_on_seqsets.<locals>.SeqSet.__getitem__   s    {{5))r#   N)r3   r4   r5   r   r   r   r0   r#   r   SeqSetr      s    $(*r#   r   )r>   r?   r7   r<   errorr>   r   )	r   SequenceSetwarningscatch_warningssimplefilterDeprecationWarningr   ru   )r   r   rw   s      r   test_sample_on_seqsetsz#TestBasicOps.test_sample_on_seqsets   sj    	*S\\377 	* L)
$$& 	-!!'+=>HHOOJ!O,	- 	- 	-s   8BBc                    | j                   j                  }g d}g d}d}t         ||||            }| j                  t	        |j                               |       t        ||      D ]  \  }}| j                  ||   |        | j                  d|       t	        |      }t         ||||            }| j                  t	        |j                               |       t        ||      D ]  \  }}| j                  ||   |        | j                  d|       t         |dgdgd            }| j                  |t        d	             t        |      }t         ||dg|z  d|z              }| j                  |t        d|z               | j                  t              5   |g d
dd       d d d        | j                  t              5   |g d
g dd       d d d        | j                  t              5   |g d
g dd       d d d        | j                  t              5   |ddgddgd       d d d        | j                  t              5   |g d
ddgd       d d d        | j                  t              5   |g d
g dd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   y xY w)N)redgreenblueorangeblackbrownamber)     r   rT   r}   r   r7     countsrx   r   xrT      )r   )r   r   r   )iir>   )r   r   r   r   r      r7   )r7   r>   r<   r?   )r   ru   r   r'   sumvaluesrW   assertLessEqualassertNotInrX   rB   rC   rv   )	r   ru   colorsr   rx   summarycolorweightncs	            r   test_sample_with_countsz$TestBasicOps.test_sample_with_counts   s    ON&!<=W^^-.2 0 	9ME6  8	9'* K&!<=W^^-.2 0 	9ME6  8	9'* &#tq9:'A,/ [&R2b5AB'"V)"45 y) 	>+B"=	>z* 	G+LAF	Gz* 	D+IC	Dz* 	<E7#RH;	<z* 	A+QFa@	Az* 	G+LAF	G 	G	> 	>	G 	G	D 	D	< 	<	A 	A	G 	GsH   'JJ+?J7,KKKJ(+J47K KKK$c           
         | j                   j                  }g d}d}t        d      }t        t        d            } ||d       ||t        d      d       |d|t        d             |d|t        d            fD ]b  }| j	                  t        |      d       | j	                  t        |      t               | j                  t        |      t        |      k         d | j                  t              5   |d       d d d        | j	                   ||d	      g        | j	                   ||d
      g        | j                  t              5   ||d       d d d        | j                  t         ||d            t        |      k         | j                  t         ||d            t        |      k         | j                  t              5   ||d       d d d        | j                  t         ||d d            t        |      k         | j                  t         ||d d            t        |      k         | j                  t              5   ||ddgd       d d d        | j                  t              5   ||dd       d d d        | j                  t              5   ||d gdz  d       d d d        g dg dt        dd      t        dd      t        dd      t        dd      gg dfD ]1  }| j                  t         |||d            t        |      k         3 | j                  t              5   ||ddgd       d d d        | j                  t              5   ||dd       d d d        | j                  t              5   ||d gdz  d       d d d        | j                  t              5   ||t        d      t        d      d       d d d        g dg dt        dd      t        dd      t        dd      t        dd      gfD ]1  }| j                  t         |||d            t        |      k         3 | j	                   |dg d      dg       | j	                   |dg d      dg       | j	                   |dg d      dg       | j	                   |dg d      dg       | j                  t              5   |g d       d d d        | j                  t              5   |g g d       d d d        | j                  t              5   |g g d       d d d        y # 1 sw Y   FxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   >xY w# 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N)r   r   r   yellowabcdr?   r}   r   )rx   rw   weights)rx   rw   cum_weightsr>   r   r8   g      @)r   rx   r7   rT   )   rT   rd   r   )g333333.@gffffff$@g3333339@gL>@r<      )TFTFr   rx   )r7   r   r   r   r;   )r   r7   r   r   b)r   r   r7   r   c)r   r   r   r7   d)r   choicesr   rY   r'   rX   rF   rD   rZ   rB   rC   rv   r   rg   )r   r   datastr_data
range_dataset_dataru   r   s           r   test_choiceszTestBasicOps.test_choices   s1   ((""11X
uQx= DAD%(a(aD%(;aDeAh?	
 	6F S[!,T&\40OOCK3t945	6 y) 	AJ	 	+R0,b1y) 	!DC 	! 	GH23s8}DEGJ!45ZHIy) 	#H"	# 	GD$!45TBCGD$!<=TJKz* 	&D1Q%1%	&y) 	#D""	#y) 	)D4&(a(	) !(!Q!Q!Q!QP*	
 	KG OOCg ;<D	IJ	K z* 	2Dqeq1	2y) 	/DbA.	/y) 	5DtfQh!4	5y) 	?D%(aA>	? !(!Q!Q!Q!QP
 	WG
 OOC'Q GHCPTIUV	W 	6>6>6>6> z* 	B!	z* 	)Ba(	)z* 	-BB!,	- 	-o	 	
	! 	!
	# 	#
	& 	&	# 	#	) 	)	2 	2	/ 	/	5 	5	? 	? 	 		) 	)	- 	-s   :	UUU!U.	U;2VV6V"V/V<!W		W2W!UU!U+.U8;VVV"V,/V9<W	WW!W*c                 N    | j                   j                  } |ddgddgd       y )Nr7   r>   g         )rw   r   rx   )r   r   )r   r   s     r   test_choices_subnormalz#TestBasicOps.test_choices_subnormal9  s(    
 ((""Aq6FF+;tDr#   c                     | j                  t              5  | j                  j                  dddg       d d d        y # 1 sw Y   y xY w)NAB        rB   rv   r   r   r1   s    r   "test_choices_with_all_zero_weightsz/TestBasicOps.test_choices_with_all_zero_weightsA  s=    z* 	/HHTC:.	/ 	/ 	/	   >Ac                     | j                  t              5  | j                  j                  dg d       d d d        y # 1 sw Y   y xY w)NABC)r<   r7   r   r1   s    r   test_choices_negative_totalz(TestBasicOps.test_choices_negative_totalF  s9    z* 	0HHUJ/	0 	0 	0r   c                 B   | j                  t              5  | j                  j                  dt	        d      g       d d d        | j                  t              5  | j                  j                  ddt	        d      g       d d d        | j                  t              5  | j                  j                  dt	        d       dg       d d d        | j                  t              5  | j                  j                  ddt	        d      g       d d d        | j                  t              5  | j                  j                  dt	        d      t	        d      g       d d d        y # 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   y xY w)NAinfr   r   {   nanz-inf)rB   rv   r   r   floatr1   s    r   test_choices_infinite_totalz(TestBasicOps.test_choices_infinite_totalJ  sO   z* 	2HHS5<.1	2z* 	8HHTCu#67	8z* 	9HHTU5\M3#78	9z* 	8HHTCu#67	8z* 	BHHTE&M5<#@A	B 	B	2 	2	8 	8	9 	9	8 	8	B 	Bs;   'E$(E1)E=%(F	*1F$E.1E:=F	FFc                    dD ]  }| j                   j                  |       | j                   j                         }| j                   j                  dd      }| j                   j                  |       | j                   j                         }| j                   j                  dd      }| j	                  ||       | j	                  ||        y )N)r7      r   i  i90  i@ i	 r   r7   )r   r   r   gaussr'   )r   r   x1y1x2y2s         r   
test_gausszTestBasicOps.test_gaussV  s    
 < 
	%DHHMM$"B1%BHHMM$"B1%BR$R$
	%r#   c                 .   t        dd      D ]=  }| j                  d| j                  j                  |      cxk  xr d|z  k  nc        ? | j	                  | j                  j                  d      d       | j                  j                  }dD ]W  }d|z  dz
  }d}d}t        d      D ]  } ||      }||z  }|||z  z  } | j	                  ||       | j	                  ||       Y | j                  t        | j                  j                         | j                  t        | j                  j                  dd       | j                  t        | j                  j                  d       | j                  t        | j                  j                  d       y )	Nr7   r%   r   r>   )r7   r>   r<   r?          r   4   5   6   w            rt   r8   g333333$@)r   rZ   r   getrandbitsr'   rB   rC   rv   )	r   rx   getbitsspanall_bitscumcpl_cumr   vs	            r   test_getrandbitszTestBasicOps.test_getrandbitsg  s_   q$ 	AAOOA!5!5a!8?1a4?@	A--a0!4 ((&&L 		0D$wqyHCG3Z (DMq8a<'( S(+Wh/		0 	)TXX%9%9:)TXX%9%91a@*dhh&:&:B?)TXX%9%94@r#   c                    t        t        j                  dz         D ]  }t        j                  | j                  |      }t        d      D cg c]  }| j                  j                          }}t        j                  |      }t        d      D cg c]  }|j                          }}| j                  ||        y c c}w c c}w )Nr7   rT   )r   pickleHIGHEST_PROTOCOLdumpsr   r   loadsr'   )r   protor)   r   origseqnewgenrestoredseqs          r   test_picklingzTestBasicOps.test_pickling  s    622Q67 	3ELL51E27)<Qtxx(<G<\\%(F49"I>q6==?>K>Wk2	3<>s   !C Cc                 
   g d}|D ]n  \  }}t        t        j                  |      d      5 }t        j                  |      }d d d        | j                  t        j                         dz        |       p y # 1 sw Y   8xY w)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  sv    & ! 	:KD%g&&t,T2 #aKKN#SD159	:# #s   A99B	c                     d}| j                   j                  t        fdt        |      D              }| j	                  d||z  cxk  xr dk  nc ||z         y )N順 c              3   :   K   | ]  } d       dz  dk(    yw)l          r<   r>   Nr0   ).0r   	randranges     r   	<genexpr>z-TestBasicOps.test_bug_9025.<locals>.<genexpr>  s!     G	*+a/14Gs   333333?gGz?)r   r  r   r   rZ   )r   r   rx   r  s      @r   test_bug_9025zTestBasicOps.test_bug_9025  sM     HH&&	GeAhGGqs(S(1Q30r#   c                 ~   t        dd      D ]W  }| j                  j                  |      }| j                  t	        |      t
               | j                  t        |      |       Y | j                  | j                  j                  d      d       | j                  t        | j                  j                         | j                  t        | j                  j                  dd       | j                  t        | j                  j                  d       | j                  t        | j                  j                  d       y )Nr7   rT   r   r#   r>   r8         ?)
r   r   	randbytesr'   rF   bytesrX   rB   rC   rv   )r   r   r   s      r   test_randbyteszTestBasicOps.test_randbytes  s    q" 	+A88%%a(DT$Z/SY*	+
 	++A.4 	)TXX%7%78)TXX%7%7A>*dhh&8&8"=)TXX%7%7=r#   c                     | j                  | j                  j                         t               | j                  | j                  j	                         t               y rM   )assertIsInstancer   normalvariater   r   r1   s    r   test_mu_sigma_default_argsz'TestBasicOps.test_mu_sigma_default_args  s:    dhh446>dhhnn.6r#   N)"r3   r4   r5   r   r"   r+   rH   rK   unittestmockpatchrQ   ra   ri   rr   r{   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r'  r+  r0   r#   r   r   r      s    
5,69$0
 ]]*+ ,9B26?  :R-
- *GXK-ZE/
0
B%"A23
:1>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eefdZy)SystemRandom_TestBasicOpsc                 8    | j                   j                          y rM   r   r   r1   s    r   r"   z'SystemRandom_TestBasicOps.test_autoseed  s    r#   c                     | j                  t        | j                  j                         | j                  t        | j                  j                  d        y rM   )rB   rN   r   r   r&   r1   s    r   r+   z*SystemRandom_TestBasicOps.test_saverestore  s:    -txx/@/@A-txx/@/@$Gr#   c                 :    | j                   j                  d       y Nrt   r2  r1   s    r   rH   z'SystemRandom_TestBasicOps.test_seedargs  s    cr#   c                     d | j                   _        | j                   j                  d       | j                  | j                   j                  d        y r5  )r   
gauss_nextr   r'   r1   s    r   r   z$SystemRandom_TestBasicOps.test_gauss  s8    "c,,d3r#   c                     t        t        j                  dz         D ]2  }| j                  t        t        j
                  | j                  |       4 y )Nr7   )r   r  r  rB   rN   r  r   )r   r
  s     r   r  z'SystemRandom_TestBasicOps.test_pickling  s@    622Q67 	RE16<<5Q	Rr#   c                     d}d}t        d      D ]+  }|t        | j                  j                         |z        z  }- | j	                  ||dz
         y Nl          r   rt   r7   r   r  r   r   r'   r   r   r  r   s       r   test_53_bits_per_floatz0SystemRandom_TestBasicOps.test_53_bits_per_float  R    s 	1A3txx(4/00C	1d1f%r#   c                     ddz  }d}t        d      D ]A  }| j                  j                  |      }| j                  d|cxk  xr |k  nc        ||z  }C | j	                  ||dz
         y Nr>   r   r   rt   r7   r   r   r  rZ   r'   r   r   r  r   r  s        r   test_bigrandz&SystemRandom_TestBasicOps.test_bigrand  l     Cxs 	A""4(AOOAMTM*1HC	 	d1f%r#   c                    dD ]  }| j                   j                  d|dz
  z        }| j                   j                  d|z        }||k  rH| j                  || j                   j                  ||      cxk  xr |k  nc         y N)	r   P      r         iw  i   i&  r>   r   r  rZ   r   r   startstops       r   test_bigrand_rangesz-SystemRandom_TestBasicOps.test_bigrand_ranges  x    ; 	MAHH&&qQqSz2E88%%a1f-Du}OOETXX%7%7t%DKtKL	Mr#   c                     dD ]d  \  }}| j                  t        t        ||            t        t        d      D cg c]  }| j                  j	                  ||        c}             f y c c}w N))r   )l        l         )l            l           rt   r'   rY   r   r   r  r   rM  rN  r   s       r   test_rangelimitsz*SystemRandom_TestBasicOps.test_rangelimits  _    K 	KKE4SuT!23U3ZHTXX''d3HIK	KH   #A+c                     | j                   j                  ddd      }| j                  |d       | j                   j                  ddd      }| j                  |d       y )Nr   rT   r>   )r   r>   r?   r   r   )r   r  rh   r'   )r   rints     r   test_randrange_nonunit_stepz5SystemRandom_TestBasicOps.test_randrange_nonunit_step  sP    xx!!!R+dO,xx!!!Q*q!r#   c                    t        | j                  t        | j                  j                        }t        | j                  t
        | j                  j                        } |dd        |d        |ddd        |ddd        |ddd        |ddd        |d        |d	        |t        dd
              |d        |dd        |dd        |dt        dd
              |dd        |ddd        |dd        |dd        |t        dd
      d        |dd        |ddd        |ddd        |ddd	        |ddt        dd
              |ddd        |ddd        |ddd       y )Nr<   i/r   rt   i*   r   n!	@      @r7   3gW}W@       @r>   2r}   r$  )r   rB   rv   r   r  rC   r   )r   raises_value_errorraises_type_errors      r   test_randrange_errorsz/SystemRandom_TestBasicOps.test_randrange_errors  st   $T%6%6
DHHDVDVW#D$5$5y$((BTBTU 	1a 4 1c3' 	1b!$!R%!Q$ 	'"#(1a.)#!W%!S!!Xa^,!S!!Wa( 	'1%#q!(1a.!,#q!'1a( 	!R)!R%!R!Q0!R%!R%!Q$r#   c                    | j                   j                  }| j                  t              5   |dd       d d d        | j                  t              5   |dd d       d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY w)Nr%   rt   )step)r   r  rB   rC   )r   r  s     r   test_randrange_stepz-SystemRandom_TestBasicOps.test_randrange_step  sr    HH&&	y) 	&d%	&y) 	,dDs+	, 	,	& 	&	, 	,s   A)A5)A25A>c                    t        dd      D ]  }d|z  }|dz   } |d ||d      z         }| j                  ||       | j                  |d|dz
  z         ||dz
  z  } |d ||d      z         }| j                  |||dz   g       | j                  d|z  |cxkD  xr d|dz
  z  kD  nc        ||dz	  z  } |d ||d      z         }| j                  ||       | j                  d|z  |cxkD  xr d|dz
  z  kD  nc         y Nr7   r%   grZ|
 ?r>   r   r   r'   rh   rZ   r   _logr  r   r   numbitsrx   s          r   test_randbelow_logicz.SystemRandom_TestBasicOps.test_randbelow_logic&      q$ 	1AQAcGGd1aj()AQ(QAaC)QJAGd1aj()AMM!gwqy12OOAqD1/q1Q3x/0bLAGd1aj()AQ(OOAqD1/q1Q3x/0	1r#   N)r3   r4   r5   r   SystemRandomr   r"   r+   rH   r   r  r=  rC  rO  rV  r[  re  rh  r   r  ro  r0   r#   r   r0  r0    s_    
&


CH4
R&	&MK
"&%P, ), 1r#   r0  c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestRawMersenneTwisterc                     dd l }t        t        j                  dz         D ]8  }|j	                         }| j                  t        t        j                  ||       : y )Nr   r7   )_randomr   r  r  RandomrB   rC   r  )r   ru  r
  r  s       r   test_bug_41052z%TestRawMersenneTwister.test_bug_41052=  sL     	622Q67 	AE Aiq%@	Ar#   c                     dd l }|j                         }|j                  d       |j                  d      }| j                  |j	                         |j	                                y )Nr   _ )ru  rv  r   r'   r   )r   ru  r1r2s       r   test_bug_42008z%TestRawMersenneTwister.test_bug_42008E  sI     	^^
^^G$biik2r#   N)r3   r4   r5   testr
   cpython_onlyrw  r|  r0   r#   r   rs  rs  <  s>    	\\A A 
\\3 3r#   rs  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                   j                  dd       | j                  t        d      D cg c]*  }| j                   j	                         j                         , c}g d       | j                   j                  dd       | j                  t        d      D cg c]*  }| j                   j	                         j                         , c}g d       y c c}w c c}w )	Ni4 r7   versionr?   )z0x1.ac362300d90d2p-1z0x1.9d16f74365005p-1z0x1.1ebb4352e4c4dp-1z0x1.1a7422abf9c11p-1zthe quick brown foxr>   )z0x1.1239ddfb11b7cp-3z0x1.b3cbb5c51b120p-4z0x1.8c4f55116b60fp-1z0x1.63eb525174a27p-1r   r   r'   r   r   hexr   r   s     r   test_guaranteed_stablez3MersenneTwister_TestBasicOps.test_guaranteed_stableR  s    gq)58Da$((//+//1D=	> 	+Q758Da$((//+//1D=	>	 E Es   /C$/C#c                    | j                   j                  dd       | j                  t        d      D cg c]*  }| j                   j	                         j                         , c}g d       | j                   j                  dd       | j                  t        d      D cg c]*  }| j                   j	                         j                         , c}g d       | j                   j                  dd       | j                  t        d      D cg c]*  }| j                   j	                         j                         , c}g d	       y c c}w c c}w c c}w )
Nnofarr7   r  r?   z0x1.8645314505ad7p-1z0x1.afb1f82e40a40p-5z0x1.2a59d2285e971p-1z0x1.56977142a7880p-6rachelz0x1.0b294cc856fcdp-1z0x1.2ad22d79e77b8p-3z0x1.3052b9c072678p-2z0x1.578f332106574p-3 z0x1.b0580f98a7dbep-1z0x1.84129978f9c1ap-1z0x1.aeaa51052e978p-2z0x1.092178fb945a6p-2r  r  s     r   test_bug_27706z+MersenneTwister_TestBasicOps.test_bug_27706]  s     	gq)58Da$((//+//1D=	> 	h*58Da$((//+//1D=	> 	b!$58Da$((//+//1D=	> E
 E
 Es   /E$/E/Ec                      G d dt               }	 | j                  j                   |              y # t        $ r Y y w xY w)Nc                       e Zd Zd Zy);MersenneTwister_TestBasicOps.test_bug_31478.<locals>.BadIntc                      y rM   r0   r1   s    r   __abs__zCMersenneTwister_TestBasicOps.test_bug_31478.<locals>.BadInt.__abs__s  s    r#   N)r3   r4   r5   r  r0   r#   r   BadIntr  r  s    r#   r  )r  r   r   rC   )r   r  s     r   test_bug_31478z+MersenneTwister_TestBasicOps.test_bug_31478o  s7    	S 		HHMM&(# 		s    2 	>>c                    | j                   j                  dd       | j                  t        d      D cg c]*  }| j                   j	                         j                         , c}g d       | j                   j                  dd       | j                  t        d      D cg c]*  }| j                   j	                         j                         , c}g d       | j                   j                  dd       | j                  t        d      D cg c]*  }| j                   j	                         j                         , c}g d	       d
}| j                   j                  |d       | j                  t        d      D cg c]*  }| j                   j	                         j                         , c}g d       y c c}w c c}w c c}w c c}w )Ns   nofarr7   r  r?   r  s   rachelr  r#   r  s	     @`)z0x1.52c2fde444d23p-1z0x1.875174f0daea4p-2z0x1.9e9b2c50e5cd2p-1z0x1.fa57768bd321cp-2r  )r   r   r   s      r   test_bug_31482z+MersenneTwister_TestBasicOps.test_bug_31482z  sW    	h*58Da$((//+//1D=	> 	i+58Da$((//+//1D=	> 	c1%58Da$((//+//1D=	> 4a#58Da$((//+//1D=	>! E
 E
 E Es   /F<$/G/G/Gc                 Z    | j                  t        | j                  j                  d       y )N)r7   NN)rB   rv   r   r&   r1   s    r   test_setstate_first_argz4MersenneTwister_TestBasicOps.test_setstate_first_arg  s    *dhh&7&7Ir#   c                    | j                   j                         }| j                  t        | j                   j                  d       | j                  t
        | j                   j                  d       | j                  t        | j                   j                  dddz  d f       | j                  t        | j                   j                  dddz  dz   d f       | j                  t
        t        f      5  | j                   j	                  dddz  d	z   d f       d d d        | j                  t
        t        f      5  | j                   j	                  dddz  d
z   d f       d d d        | j                   j                  d      }| j                   j	                  |       | j                  | j                   j                  d      |       | j                   j                         d   }t        |      }t        d      |d<   d |D        }| j                  t        | j                   j                  d|d f       y # 1 sw Y   !xY w# 1 sw Y   xY w)N)r>   NN)r>   rU   Nr>   )r;   q  )r   ip  )r7   )r  )r8   rt   r7   r   r8   c              3   2   K   | ]  }t        |        y wrM   )r  )r  r   s     r   r   zHMersenneTwister_TestBasicOps.test_setstate_middle_arg.<locals>.<genexpr>  s     .AQ.s   )r   r   rB   rC   r&   rv   OverflowErrorr   r'   rD   r   )r   start_statebits100state_valuesr)   s        r   test_setstate_middle_argz5MersenneTwister_TestBasicOps.test_setstate_middle_arg  s   hh''))TXX%6%6H*dhh&7&79KL)TXX%6%6F3J8MN)TXX%6%6DHVOT8RS
M:; 	:HHq$s(6/489	:
M:; 	9HHq$s(5.$78	9 ((&&s++&--c2G< xx((*1-L) <R..)TXX%6%6E48HI#	: 	:	9 	9s   1%H59%I5H?Ic                     g d}| j                   j                  d       | j                  d      dd  }t        ||      D ]  \  }}| j	                  ||d        y )N)
g>FdV?gwR1ۉ?gQ"?g~5?g mb?gYKbX?gH,r̊?gV8?gOֶ?g4Ԗ?   #q  `&  'R      )places)r   r   r   rW   assertAlmostEqual)r   r   actualr;   es        r   test_referenceImplementationz9MersenneTwister_TestBasicOps.test_referenceImplementation  s`    	) 	CD&st,) 	2DAq""1Qb"1	2r#   c           	          ddl m} g d}| j                  j                  d       | j	                  d      dd  }t        ||      D ]'  \  }}| j                  t         ||d            |       ) y )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   rW   r'   r  )r   r  r   r  r;   r  s         r   $test_strong_reference_implementationzAMersenneTwister_TestBasicOps.test_strong_reference_implementation  sk    
 		& 	CD&st,) 	3DAqSq".2	3r#   c                 J    ddz  dz
  }| j                   j                  |       y )Nr7   i8 r2  )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                  j                         |z        z  }- | j	                  ||dz
         y r:  r;  r<  s       r   r=  z3MersenneTwister_TestBasicOps.test_53_bits_per_float  r>  r#   c                     ddz  }d}t        d      D ]A  }| j                  j                  |      }| j                  d|cxk  xr |k  nc        ||z  }C | j	                  ||dz
         y r@  rA  rB  s        r   rC  z)MersenneTwister_TestBasicOps.test_bigrand  rD  r#   c                    dD ]  }| j                   j                  d|dz
  z        }| j                   j                  d|z        }||k  rH| j                  || j                   j                  ||      cxk  xr |k  nc         y rF  rK  rL  s       r   rO  z0MersenneTwister_TestBasicOps.test_bigrand_ranges  rP  r#   c                     dD ]d  \  }}| j                  t        t        ||            t        t        d      D cg c]  }| j                  j	                  ||        c}             f y c c}w rR  rT  rU  s       r   rV  z-MersenneTwister_TestBasicOps.test_rangelimits  rW  rX  c                     t         |           | j                  j                  d       | j	                  | j                  j                  d      d       y )N rt      S!m.vFXO )superr  r   r   r'   r   )r   	__class__s    r   r  z-MersenneTwister_TestBasicOps.test_getrandbits  sB     " 	g--c26	8r#   c                     | j                   j                  d       | j                  | j                   j                  ddz        d       y )Nr  r>   c   r  )r   r   r'   r  r1   s    r   test_randrange_uses_getrandbitsz<MersenneTwister_TestBasicOps.test_randrange_uses_getrandbits  s<     	g 	++ArE26	8r#   c                    t        dd      D ]  }d|z  }|dz   } |d ||d      z         }| j                  ||       | j                  |d|dz
  z         ||dz
  z  } |d ||d      z         }| j                  |||dz   g       | j                  d|z  |cxkD  xr d|dz
  z  kD  nc        ||dz	  z  } |d ||d      z         }| j                  ||       | j                  d|z  |cxkD  xr d|dz
  z  kD  nc         y rj  rk  rl  s          r   ro  z1MersenneTwister_TestBasicOps.test_randbelow_logic&  rp  r#   c                 r   dt         j                  z  }t        j                         5  t        j                  dt
               | j                  j                  |dz   |       d d d        | j                  j                  d|       d}d}|||z  z
  |z  }t        j                  j                  j                  t         j                  d      5 }||z   ||z
  g|_        | j                  j                  ||       | j                  |j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nr7   ignore)maxsizei  r]  {Gz?r   r>   )r   BPFr   r   r   UserWarningr   _randbelow_without_getrandbitsr,  r-  r.  r@   rv  rO   r'   
call_count)r   r  r   epsilonlimitrandom_mocks         r   "test_randbelow_without_getrandbitsz?MersenneTwister_TestBasicOps.test_randbelow_without_getrandbits;  s    VZZ-$$& 	!!(K8HH33	7 4 	 	//g/F  GaK(G3]]  ''x@ 	8K',w&HK#HH33Aw3G[33Q7	8 	83	 	2	8 	8s   ;D!A	D-!D*-D6c                     d}d}d}| j                   j                  |||      }| j                  ||cxk  xr |k  nc        | j                  ||z   |z  d       y )Nl    J)r9   i8r   )r   r  rZ   r'   )r   rM  rN  rg  r   s        r   test_randrange_bug_1590891z7MersenneTwister_TestBasicOps.test_randrange_bug_1590891]  sW    %HHudD1q)E)*!D&$*r#   c                    | j                   j                  }d}| j                   j                  d       | j                   j                  t        |      d      }| j                   j                  d       | j                   j                  t        |      dg|z  d      }| j	                  ||       | j                   j                  d       | j                   j                  t        |      t        d|dz         d      }| j	                  ||       g d}g d}g d	}d
gdz  dgdz  z   dgdz  z   }	| j                   j                  d       | j                   j                  |	d      }| j                   j                  d       | j                   j                  ||d      }| j	                  ||       | j                   j                  d       | j                   j                  ||d      }| j	                  ||       y )Ni ry  r~   r   r7   r   )RedBlackGreen)   r  r>   )r  $   &   r  r  r  r  r>   i߉ )r   r   r   r   r'   )
r   r   r   r;   r   r   rw   r   r   expanded_populations
             r   test_choices_algorithmsz4MersenneTwister_TestBasicOps.test_choices_algorithmse  s   ((""gHHU1X/gHHU1Xs1u6AgHHU1X5AaC=EJA /
"$glgY^;wi!mKgHH0E:gHHZE:AgHHZ[EJAr#   c           
          t                    d}d j                  j                  |        j	                   j                  j                  d              j                  j                  |        j	                   j                  j                  d      d        j	                   j                  j                  d              j                  j                  |        j	                  dj                  t        d      D cg c]  } j                  j                  d       c}              j                  j                  |       dd d   } j	                  dj                   fdt        d      D              |        j                  j                  |       dj                  fd	t        dt              d      D              } j	                  dj                   fd
t        d      D              |        j                  j                  |       dj                  fdt        dt              d      D              } j	                  dj                   fdt        d      D              |       y c c}w )Nry  s   3f6oe   r   r#   r?   r<   c              3   T   K   | ]  }j                   j                  d        ! yw)r7   Nr   r%  r  _r   s     r   r   z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>        !JA$(("4"4Q"7!J   %(c              3   4   K   | ]  }|d z   |dz      yw)r>   r?   Nr0   r  r   r   s     r   r   z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>  *      B!" &a!eQU3 B   c              3   T   K   | ]  }j                   j                  d        ! yw)r>   Nr  r  s     r   r   z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>  r  r  c              3   4   K   | ]  }|d z   |dz      yw)r7   r?   Nr0   r  s     r   r   z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>  r  r  c              3   T   K   | ]  }j                   j                  d        ! yw)r<   Nr  r  s     r   r   z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>  r  r  )	r  r'  r   r   r'   r%  joinr   rX   )r   r   r  	expected1	expected2	expected3r   r  s   `     @r   r'  z+MersenneTwister_TestBasicOps.test_randbytes  s     Gd++B/: 	d++A.4++B/: 	d%("KQ488#5#5a#8"KL!	#
 	dQTTN	!Jq!JJ"	$ 	dHH B&+As8}a&@B B	!Jq!JJ"	$ 	dHH B&+As8}a&@B B	!Jq!JJ"	$' #Ls   "Jc                 B   d}t        j                         }| j                  j                  |       |j                  |       t	        d      D ]O  }| j                  | j                  j                  |      |j                  |dz        j                  |d             Q y )Nl   OS 	   r   little)	r   rv  r   r   r   r'   r%  r   to_bytes)r   r   gen2r   s       r   test_randbytes_getrandbitsz7MersenneTwister_TestBasicOps.test_randbytes_getrandbits  s    }}d		$q 	LATXX//2!--a!e4==aJL	Lr#   c           
         | j                   j                  }| j                   j                  }g d}g d}d} |d        ||||      } |d       t        ||      D 	cg c]  \  }}t	        |      D ]  }	|  }
}}}	| j                  t        |
      t        |              ||
|      }| j                  ||       d}g d} |d       d	j                   |||d
            }d	j                  t        ||      D 	cg c]  \  }}t	        |      D ]  }	|  c}	}}      }
 |d       d	j                   ||
d
            }| j                  ||       y c c}	}}w c c}	}}w )N)r   r   r   r   r   r   )r   r   r   rT   r}   r7   r   ry  r   r   	abcdefghi)	rT   r  r      r   r}   r?   r<   r>   r  r   )	r   ru   r   rW   r   r'   rX   r   r  )r   ru   r   r   r   rx   s1r   countr   expandeds2r   letters                 r   test_sample_counts_equivalencez;MersenneTwister_TestBasicOps.test_sample_counts_equivalence  sI    xx}}FEWF6Q/W03FF0CZZnueUSX\ZEZEZZXF4H"R -WWWVC"5677#c6:JaaTYZ_T`aqFaFabWWWVH+,R  [ bs   "EE%)r3   r4   r5   r   rv  r   r  r  r  r  r  r  r  r  r  r=  rC  rO  rV  r  r  r   r  ro  r  r  r  r'  r  r  __classcell__)r  s   @r   r  r  O  s    
&--/C	>>$	>6JJ<2>3,&	&MK
88 ), 1* 8D+B&$PL!r#   r  ra        ?c                    | dk  r(t         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@ra  gQfr_  g>@~)@g      @gA~      @g~\>g      @giE>g      @)r   r   gammar   r   )zsqrt2piazs      r   r  r    s    3wC1I~c!e,,	
iB!C%=3r7"W,tAae$QsU#ae$QsU#qu%!C%(!C%(
5 
0 
 
r#   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                  j                  d      d	        Ze
j                  j                  d      d
        Ze
j                  j                  d      d        Ze
j                  j                  d      d        Ze
j                  j                  d      d        Zy)TestDistributionsc                     t        j                         }t        d      D cg c]  }|j                          c}dgdz  z   }|d d  j                  |_         |j	                  dd       |d d  j                  |_         |j                  d       |d d  j                  |_         |j                  d       |d d  j                  |_         |j                          |d d  j                  |_         |j                  dd       |d d  j                  |_         |j                  dd       |d d  j                  |_         |j                  dd       |d d  j                  |_         |j                  dd       |d d  j                  |_         |j                  dd       |d d  j                  |_         |j                  dd       |d d  j                  |_         |j                  dd       |d d  j                  |_         |j                  dd       |d d  j                  |_         |j                  dd       |d d  j                  |_         |j                  d	d	       |d d  j                  |_         |j                  ddd
       y c c}w )Nrc   r   r}   r7   rT   r$  r  g      i@r_  UUUUUU?)r   rv  r   r   uniformparetovariateexpovariateweibullvariatevonmisesvariater*  r   lognormvariategammavariatebetavariate
triangular)r   gr   r   s       r   test_zeroinputsz!TestDistributions.test_zeroinputs  s   MMO!&r+AQXXZ+seAg5Q488QYYq_Q488Q__S1Q488Q]]3/Q488Q]]_Q488Q--c37Q488Q..sC8Q488Q__S#6Q488QWWS#.Q488Q--c37Q488Q..sC8Q488Q^^D#6Q488Q^^C5Q488Q^^E37Q488Q]]34Q488Q\\#sG< ,s   I;c                 >   t        j                         }d}t        d|      D cg c]  }|t        |      z   }}|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 ]  }	 |	j                   ||         dx}
}|	D ]  }|
|z  }
|||z
  dz  z  } t        |	      }| j!                  |
|z  |d|j"                  |       | j!                  ||dz
  z  |d|j"                  |        y c c}w # t        $ r Y w xY w)Nr   r7   )r$        $@g      @g      @)r   r$  r  gqq?g<ݚ?)      ?gUUUUUU?)gGz?r   r>   r<   )r  g      ?g?)r$  r_  gUUUUUU?g?r   )r  msg)r   rv  r   r   r  r  r  r	  r   r  r  r  r   rX   appendrg   r  r3   )r   r  r(   r   r   variateargsmu	sigmasqrdyr  r  r  s                r   test_avg_stdzTestDistributions.test_avg_std  s    MMO!&q,AQuQxZ,,J6FG2G\Jx8""Ir2q57;&+":<!!:uW~"'.w1B"BD-F 	J(GT2y txxAHA3q6] HHWd^,
 KB $aq2v!m#$ AA""2a4A181A1A4'H # J""2qs8Yq181A1A4'H # J/	J - " s   F=F	FF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                  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fD ]+  \  }}}t        |      D ]  }| j                   || |        - y )Nrt   )r  r  r  )r  r  r  r   r   r_  )r  r   )r   r   r$  )r   r  r   )rT   r   )rT   r$  rT   )r   r  )r   rv  r  r  r  r   r	  r   r
  r*  binomialvariater  r  r   r'   )r   r  r(   r  r  r   r   s          r   test_constantzTestDistributions.test_constant  s_   MMOL$/|T2148u5""S%,$7=+t,!!:s3!!U5\M3#7=+t4""Ha0""Iq1""Ir25</37!!D%,#7>!!;4( 	;#GT8" 1X ;  $:;#	;r#   c                 j   t         j                  | j                  t              5   d       d d d        | j                  t              5   dd       d d d        | j                  t              5   dd       d d d        | j	                   dd      d	       | j	                   dd
      d       | j                   dd      dv        | j                   dd      dv        | j                   dd      dv        | j                   dd
      dv        | j                   dd      t        t        d            v        | j                   dd      t        t        d            v        | j                   dd      t        t        d            v        | j                   dd      t        t        d            v        t        fdt        d      D              }| j                  d|d	   cxk  xr dk  nc |       | j                  d|d   cxk  xr dk  nc        | j                  d|d   cxk  xr dk  nc        | j                  d|d    cxk  xr d!k  nc        | j	                  t        |      h d"       t        fd#t        d      D              }| j                  d$|d%   |d&   z   |d'   z   |d(   z   |d)   z   cxk  xr d*k  nc        | j                  t        |      t        t        d            k         | j	                  |j                         d       | j                  d+ d,d-      cxk  xr d.k  nc        | j                  d/ d,d      cxk  xr
 d0k         y c        y # 1 sw Y   _xY w# 1 sw Y   DxY w# 1 sw Y   )xY w)1Nr8   )r   r7   g      )r   pr  rT   r   r   r$  r!  >   r   r7   g?>   r   >   r7   r}         ?r   g      ?rt   e   c              3   0   K   | ]  } d d        yw)r?   r   Nr0   r  r   Bs     r   r   z9TestDistributions.test_binomialvariate.<locals>.<genexpr>T  s     71AaJ7   r  is  ii  i  i  iJ  r>   i6Z  i
  r<   i   >   r   r7   r>   r<   r?   c              3   0   K   | ]  } d d        yw)rt   r   Nr0   r#  s     r   r   z9TestDistributions.test_binomialvariate.<locals>.<genexpr>]  s     9QAc4L9r%  i  r   r            iF  i!i g?i@o@i@Nil)
r   r  rB   rv   r'   rZ   rY   r   r   total)r   r   r$  s     @r   test_binomialvariatez&TestDistributions.test_binomialvariate2  s   "" z* 	G	z* 	TN	z* 	SM	2sQ'2sR(!S	V+,!S	V+,!S	S()!S	S() 	!T
c%(m34 	!T
c%(m34 	#tE#J78 	#tE#J78 7g77!A$0&0!4!A$0&01!A$0&01!A$/%/0Q1 9%.99!B%"+ae"3AbE"9!B%"?I6IJA#eCj/12G, 	
aS&9GZGH
aS&9GZGHGH]	 		 		 	s#   
NN6N(NN%(N2c                    t        j                         }d}dD ]k  }dD ]d  }t        |      D ]T  }|j                  ||      }| j	                  d|cxk  xr t         j
                  k  nc dj                  |||             V f m y )Nrt   )r   r   g@g@)r   ffffff@g     @@r   zCvonmisesvariate({}, {}) produced a result {} out of range [0, 2*pi])r  )r   rv  r   r	  rZ   TWOPIformat)r   r  r(   r  kappar  ru   s          r   test_von_mises_rangez&TestDistributions.test_von_mises_rangeg  s     MMO$ 	OB( Oq OA..r59FOOV3v||334:F2uf4M $ OOO	Or#   c                 \    t        j                  dd       t        j                  dd       y )Nr   g  4&kCg}Ô%IT)r   r	  r1   s    r   test_von_mises_large_kappaz,TestDistributions.test_von_mises_large_kappau  s"    q$'q%(r#   c                 4   | j                  t        t        j                  dd       | j                  t        t        j                  dd       | j                  t        t        j                  dd       | j                  t        t        j                  dd       y )Nr8   r<   r   r>   r7   r   )rB   rv   r   r  r1   s    r   test_gammavariate_errorsz*TestDistributions.test_gammavariate_errorsz  sj    *f&9&92qA*f&9&91a@*f&9&91a@*f&9&91bAr#   zrandom.Random.randomc                 f    g d|_         t        j                  dd      }| j                  |d       y )N):0yE>r  r!  g?r-  g=
ףp=@rO   r   r  r  r   r  returned_values      r   #test_gammavariate_alpha_greater_onez5TestDistributions.test_gammavariate_alpha_greater_one  s.     #3,,S#6~t4r#   c                 d    dg|_         t        j                  dd      }| j                  |d       y )Ng?r$  r:   g/qr	?r8  r9  s      r   !test_gammavariate_alpha_equal_onez3TestDistributions.test_gammavariate_alpha_equal_one  s1     $(&,,S$7~/@Ar#   c                     d}ddg|_         t        j                  d|      }t        j                  d|z        }| j	                  ||       y )Nr:   r7  r$  )rO   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_expovariate  sO    
 #',&,&9&9#t&D#%+%7%7d
%C":<VWr#   c                 h   t         j                  }t         j                  }t         j                  }d}d}||z   |z  }d}d}	d}
|	|
|z   |	|
g|_        t        j
                  ||      }| j                  |d       d}	d}
|	|
|z   |	|
g|_        t        j
                  ||      }| j                  |d	       y )
Ngffffff?g333333?r  gX Y?g=,6V?g.3333?gl%t?gK,	9?g7SvT?)r   _e_exprm  rO   r  r  )r   r  rD  rE  rm  alphar?  r   r  rz  r{  r:  s               r   ,test_gammavariate_alpha_between_zero_and_onez>TestDistributions.test_gammavariate_alpha_between_zero_and_one  s    F YY{{{{%ZO
 $&rG|R"<,,UD9~/AB 
 $&rG|R"<,,UD9~/ABr#   zrandom.Random.gammavariatec                 ^    d|_         | j                  dt        j                  dd             y )Nr   g	@r^  )return_valuer'   r   r  )r   gammavariate_mocks     r   test_betavariate_return_zeroz.TestDistributions.test_betavariate_return_zero  s*     *-&f00'BCr#   N)r3   r4   r5   r  r  r  r+  r1  r3  r5  r,  r-  r.  r;  r=  rB  rG  rK  r0   r#   r   r  r    s    =(J@;.2IjO)
B ]]/05 15 ]]/0B 1B ]]/0X 1X ]]/0CC 1CCJ ]]56D 7Dr#   r  c                       e Zd Zd Zd Zy)TestRandomSubclassingc                 H     G d dt         j                        } |d       y )Nc                       e Zd ZddZy)HTestRandomSubclassing.test_random_subclass_with_kwargs.<locals>.SubclassNc                 B    t         j                  j                  |        y rM   )r   rv  r   )r   newargs     r   r   zQTestRandomSubclassing.test_random_subclass_with_kwargs.<locals>.Subclass.__init__  s    &&t,r#   rM   )r3   r4   r5   r   r0   r#   r   SubclassrP    s    -r#   rS  r7   )rR  )r   rv  )r   rS  s     r    test_random_subclass_with_kwargsz6TestRandomSubclassing.test_random_subclass_with_kwargs  s    	-v}} 	- 	r#   c                     G fddt         j                        }t                |       j                  d       | j	                  dh        G fddt         j                        }t                |       j                  d       | j	                  dh        G fdd	|      }t                |       j                  d       | j	                  d
h        G fdd|      }t                |       j                  d       | j	                  dh        G fdd      } G fdd      } G d d|t         j                        }t                |       j                  d       | j	                  dh        G d d|t         j                        }t                |       j                  d       | j	                  dh        G d d||t         j                        }	t                |	       j                  d       | j	                  dh        G d d||t         j                        }
t                |
       j                  d       | j	                  dh       y )Nc                   "    e Zd Z fdZ fdZy)KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1c                 d    j                  d       t        j                  j                  |       S )NzSubClass1.randomaddr   rv  r   calleds    r   r   zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1.random  %    

-.}}++D11r#   c                 f    j                  d       t        j                  j                  | |      S )NSubClass1.getrandbitsrZ  r   rv  r   r   r   r\  s     r   r   zWTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1.getrandbits	  '    

23}}00q99r#   N)r3   r4   r5   r   r   r\  s   r   	SubClass1rW    s    2:r#   rd  r]  r_  c                       e Zd Z fdZy)KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass2c                 d    j                  d       t        j                  j                  |       S )NSubClass2.randomrY  r[  s    r   r   zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass2.random  r]  r#   Nr3   r4   r5   r   rc  s   r   	SubClass2rf        2r#   rj  rh  c                       e Zd Z fdZy)KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass3c                 f    j                  d       t        j                  j                  | |      S )NSubClass3.getrandbitsr`  ra  s     r   r   zWTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass3.getrandbits  rb  r#   Nr3   r4   r5   r   rc  s   r   	SubClass3rm        :r#   rq  ro  c                       e Zd Z fdZy)KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass4c                 d    j                  d       t        j                  j                  |       S )NSubClass4.randomrY  r[  s    r   r   zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass4.random&  r]  r#   Nri  rc  s   r   	SubClass4rt  %  rk  r#   rw  rv  c                       e Zd Z fdZy)HTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin1c                 d    j                  d       t        j                  j                  |       S )NMixin1.randomrY  r[  s    r   r   zOTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin1.random0  s$    

?+}}++D11r#   Nri  rc  s   r   Mixin1ry  /  rk  r#   r|  c                       e Zd Z fdZy)HTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin2c                 f    j                  d       t        j                  j                  | |      S )NMixin2.getrandbitsr`  ra  s     r   r   zTTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin2.getrandbits4  s'    

/0}}00q99r#   Nrp  rc  s   r   Mixin2r~  3  rr  r#   r  c                       e Zd Zy)KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass5Nr3   r4   r5   r0   r#   r   	SubClass5r  8      r#   r  r{  c                       e Zd Zy)KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass6Nr  r0   r#   r   	SubClass6r  >  r  r#   r  r  c                       e Zd Zy)KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass7Nr  r0   r#   r   	SubClass7r  D  r  r#   r  c                       e Zd Zy)KTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass8Nr  r0   r#   r   	SubClass8r  J  r  r#   r  )r   rv  rY   r  r'   )r   rd  rj  rq  rw  r|  r  r  r  r  r  r\  s              @r   "test_subclasses_overriding_methodsz8TestRandomSubclassing.test_subclasses_overriding_methods  s   	: 	: b!"9!:;	2 	2 b!"4!56	:	 	: b!"9!:;	2	 	2 b!"4!56	2 	2	: 	:
	 	b!/!23	 	b!"6!78	 	b!/!23	 	b!"6!78r#   N)r3   r4   r5   rT  r  r0   r#   r   rM  rM    s    R9r#   rM  c                   X    e Zd Zd Zd Zej                  j                         d        Zy)
TestModulec                    | j                  t        j                  d       | j                  t        j                  d       | j                  t        j                  d       | j                  t        j
                  d       y )Ng3?r?g.DT!@g9B.?gtY@)r  r   NV_MAGICCONSTr.  LOG4SG_MAGICCONSTr1   s    r   testMagicConstantszTestModule.testMagicConstantsR  sY    v335EFv||];v{{,<=v335EFr#   c                     | j                  t        t        j                        t        t	        t                    k         y rM   )rZ   rY   r   __all__dirr1   s    r   test__all__zTestModule.test__all__X  s%    FNN+s3v;/??@r#   c                    t        j                         \  }}t        j                         }|dk(  r[	 t        j                  d      }t        |d      5 }|j                  t        |             d d d        t        j                  d       y t        j                  |       t        j                  d      }t        |d      5 }t        |j                               }d d d        | j                  |       t        j                  |d       y # 1 sw Y   xY w# t        j                  d       w xY w# 1 sw Y   YxY w)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     wwy1ggi!8((-!S\ &QGGCH%&  HHQK$$S)Ca + N	+Y/  q1& & 
+ +s/   !D D.D D4DD D14D=N)	r3   r4   r5   r  r  r}  r
   requires_forkr  r0   r#   r   r  r  Q  s/    GA 
\\!2 "2r#   r  __main__)'r,  unittest.mockr   r  r   r  r   test.supportr}  	functoolsr   r  r   r   r   r   r   r	   r
   	fractionsr   collectionsr   r   r   rq  SystemRandom_availablerN   
skipUnlessTestCaser0  rs  r  r  r  rM  r  r3   mainr0   r#   r   <module>r     sC      	      3 3   $]7 ]7@"F  " "+-PQA1h.?.? A1 RA1H3X.. 3&B!<1B1B B!J "fs] $KD)) KD\Z9H-- Z9z 2""  2F zHMMO E  #"#s   D0 0D:9D: