a
    zeE                     @   s^  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 G dd dZze   W n ey   d	ZY n0 d
Ze edG dd dee jZG dd dee jZde d fddZG dd de jZ G dd de jZ!G dd de jZ"e#dkrZe $  dS )    N)partial)logexppifsumsin	factorial)support)Fraction)Counterc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
ddd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zejjd,d- Zd.d/ Zd0d1 Z d2d3 Z!d4S )5TestBasicOpsc                    s    fddt |D S )z0Helper function to make a list of random numbersc                    s   g | ]} j  qS  genrandom.0iselfr   &/usr/lib/python3.9/test/test_random.py
<listcomp>       z+TestBasicOps.randomlist.<locals>.<listcomp>ranger   nr   r   r   
randomlist   s    zTestBasicOps.randomlistc                 C   sB   | j   | j  }td | j   | j  }| || d S )N皙?)r   seedgetstatetimesleepassertNotEqual)r   Zstate1Zstate2r   r   r   test_autoseed   s    




zTestBasicOps.test_autoseedc                 C   sD   d}| j   | j  }| |}| j | | || | d S )N  )r   r   r    r   setstateassertEqual)r   NstateZrandseqr   r   r   test_saverestore!   s    


zTestBasicOps.test_saverestorec              	   C   s   G dd dt }dD ]}| j| qdtd| fD ]:}| t | j| W d    q61 sf0    Y  q6ttdtddfD ]@}| t" | 	t
| jj| W d    q1 s0    Y  q| 	t
| jjdd	dd
 | 	t
t| jg  d S )Nc                   @   s   e Zd Zdd ZdS )z*TestBasicOps.test_seedargs.<locals>.MySeedc                 S   s   dS )Ni?r   r   r   r   r   __hash__,   s    z3TestBasicOps.test_seedargs.<locals>.MySeed.__hash__N)__name__
__module____qualname__r+   r   r   r   r   MySeed+   s   r/   )
Nr      l      Fx:^V    Fx:^V FTQ	@ay      ?       @abc   r0   )Zone      )objectr   r   tupleassertWarnsDeprecationWarninglistr   dictassertRaises	TypeErrortype)r   r/   argr   r   r   test_seedargs)   s    ,2zTestBasicOps.test_seedargsc                 C   s(   t d}| j| | |t d d S )Ns   1234)	bytearrayr   r   r'   )r   r4   r   r   r   test_seed_no_mutate_bug_44018<   s    z*TestBasicOps.test_seed_no_mutate_bug_44018zrandom._urandomc                 C   s   t |_|   d S N)NotImplementedErrorside_effectrC   )r   Zurandom_mockr   r   r   *test_seed_when_randomness_source_not_foundA   s    z7TestBasicOps.test_seed_when_randomness_source_not_foundc                 C   s  | j j}g }|| | |g  dg}|| | |dg dd tdD }dd tdD }|D ]}|| qdt||D ]0\}}| t|t| | t|t| q|ttd}ttd}|| | ||k || | ||k | 	t
|d d S )N%   c                 S   s   g | ]}t t|qS r   r=   r   r   r   r   r   r   r   S   r   z-TestBasicOps.test_shuffle.<locals>.<listcomp>
   c                 S   s   g | ]}t t|qS r   rK   rL   r   r   r   r   T   r   r%   r0   r7   r6   )r   shuffler'   r   ziplensetr=   
assertTruer?   r@   )r   rO   ZlstZseqsZshuffled_seqsZshuffled_seqseqZshuffled_lstr   r   r   test_shuffleK   s*    
zTestBasicOps.test_shufflec                 C   s^   | j j}tjjdd}td}| t ||| W d    n1 sH0    Y  |  d S )N      ?)return_values   abcdefghijk)	r   rO   unittestmockZMockrD   r;   r<   Zassert_called_with)r   rO   Zmock_randomrT   r   r   r   test_shuffle_random_argumentl   s    (z)TestBasicOps.test_shuffle_random_argumentc                 C   sh   | j j}| t |g  W d    n1 s00    Y  | |dgd | |ddgddg d S )N2      K   )r   choicer?   
IndexErrorr'   assertIn)r   r^   r   r   r   test_choiceu   s
    &zTestBasicOps.test_choicec                 C   s   d}t |}t |d D ]L}| j||}| t|| t|}| t|| | |t|k q| | jg dg  | t| jj||d  | t| jjg d d S )Nd   r0   r   r1   )	r   r   sampler'   rQ   rR   rS   r?   
ValueError)r   r(   
populationksZuniqr   r   r   test_sample|   s    zTestBasicOps.test_samplec              	   C   sv   d}t |}d}t |D ]X}t|t||  }i }t |D ]*}d |t| j||< t||kr< qq<|   qd S )N   '  )r   r   r:   r   rc   rQ   Zfail)r   r   popZtrialsrf   expectedZpermsr   r   r   r   test_sample_distribution   s    z%TestBasicOps.test_sample_distributionc                 C   sL   | j tdd | j tdd | j tdd | j tdd d S )N   r7   Zabcdefghijklmnopqrst)r   rc   r   strr:   r   r   r   r   test_sample_inputs   s    zTestBasicOps.test_sample_inputsc                 C   s   |  t| jjtdd d S )NZabcdefr7   )r?   r@   r   rc   r>   fromkeysr   r   r   r   test_sample_on_dicts   s    z!TestBasicOps.test_sample_on_dictsc                 C   sF   |  t( h d}| jj|dd W d    n1 s80    Y  d S )N>   F   (   rM   r[   rn   <      ri   rf   )r;   r<   r   rc   )r   re   r   r   r   test_sample_on_sets   s    z TestBasicOps.test_sample_on_setsc           	      C   s  | j j}g d}g d}d}t||||d}| t| | t||D ]\}}| || | qL| d| t|}t||||d}| t| | t||D ]\}}| || | q| d| t|dgdgdd}| |tdd	 t	|}t||dg| d| d}| |td|  | 
t" |g d
ddd W d    n1 sd0    Y  | 
t& |g d
g ddd W d    n1 s0    Y  | 
t& |g d
g ddd W d    n1 s0    Y  | 
t& |ddgddgdd W d    n1 s*0    Y  | 
t& |g d
ddgdd W d    n1 sl0    Y  | 
t& |g d
g ddd W d    n1 s0    Y  d S )N)redgreenblueorangeblackbrownamber)     rn   rM   ri   r   r0     countsrf   r~   xrM      )r   )ry   rz   r{   )iir7   )r   r   r   ry   rz      r0   )r0   r7   r6   r8   )r   rc   r   r'   sumvaluesrP   ZassertLessEqualZassertNotInrQ   r?   r@   rd   )	r   rc   colorsr   rf   ZsummarycolorZweightZncr   r   r   test_sample_with_counts   s@    26666z$TestBasicOps.test_sample_with_countsc              	   C   sf  | j j}g d}d}td}ttd}||dd||tddd|d|tdd|d|tddfD ]:}| t|d | t|t | t|t|k qf| 	t
 |d W d    n1 s0    Y  | ||d	dg  | ||d
dg  | 	t
 ||dd W d    n1 s*0    Y  | t||ddt|k | t||ddt|k | 	t
 ||dd W d    n1 s0    Y  | t||d ddt|k | t||d ddt|k | 	t" ||ddgdd W d    n1 s0    Y  | 	t
 ||ddd W d    n1 sV0    Y  | 	t
$ ||d gd dd W d    n1 s0    Y  g dg dtddtddtddtddgg dfD ]&}| t|||ddt|k q| 	t" ||ddgdd W d    n1 s40    Y  | 	t
 ||ddd W d    n1 sn0    Y  | 	t
$ ||d gd dd W d    n1 s0    Y  | 	t
( ||tdtddd W d    n1 s0    Y  g dg dtddtddtddtddgfD ]&}| t|||ddt|k q.| |dg ddg | |dg ddg | |dg ddg | |dg ddg | 	t |g dd W d    n1 s0    Y  | 	t |g g dd W d    n1 s0    Y  | 	t |g g dd W d    n1 sX0    Y  d S )N)ry   rz   r{   ZyellowZabcdr8   ri   rw   )rf   re   weights)rf   re   cum_weightsr7   r   r1   g      @)r   rf   r0   rM   )   rM   r\   rv   )g333333.@gffffff$@g3333339@gL>@r6      )TFTFr   rf   )r0   r   r   r   r4   )r   r0   r   r   b)r   r   r0   r   c)r   r   r   r0   d)r   choicesr   rR   r'   rQ   rA   r=   rS   r?   r@   rd   r
   r_   )r   r   dataZstr_dataZ
range_dataset_datarc   r   r   r   r   test_choices   sx    
&,,  2.4"$2.48"$,.zTestBasicOps.test_choicesc                 C   s"   | j j}|ddgddgdd d S )Nr0   r7   g         )re   r   rf   )r   r   )r   r   r   r   r   test_choices_subnormal$  s    z#TestBasicOps.test_choices_subnormalc                 C   s@   |  t" | jdddg W d    n1 s20    Y  d S )NZAB        )r?   rd   r   r   r   r   r   r   "test_choices_with_all_zero_weights,  s    z/TestBasicOps.test_choices_with_all_zero_weightsc                 C   sn   dD ]d}| j | | j  }| j dd}| j | | j  }| j dd}| || | || qd S )N)r0      {   i  i90  i@ i	 r   r0   )r   r   r   gaussr'   )r   r   Zx1Zy1Zx2Zy2r   r   r   
test_gauss1  s    

zTestBasicOps.test_gaussc           	      C   s  t ddD ].}| d| j|  ko0d| k n   q
| | jdd | jj}dD ]Z}d| d }d}d}t dD ] }||}||O }|||A O }qz| || | || qZ| t| jj | t| jjdd | t| jjd | t| jjd d S )	Nr0   r%   r   r7   )r0   r7   r6   r8          r   4   5   6   w            rb   r1   g333333$@)r   rS   r   getrandbitsr'   r?   r@   rd   )	r   rf   ZgetbitsspanZall_bitscumZcpl_cumr   vr   r   r   test_getrandbitsB  s$    ,zTestBasicOps.test_getrandbitsc                    sh   t tjd D ]T}tj|}fddt dD }t|  fddt dD }|| qd S )Nr0   c                    s   g | ]} j  qS r   r   r   r   r   r   r   ^  r   z.TestBasicOps.test_pickling.<locals>.<listcomp>rM   c                    s   g | ]}   qS r   r   r   )newgenr   r   r   `  r   )r   pickleHIGHEST_PROTOCOLdumpsr   loadsr'   )r   protor)   ZorigseqZrestoredseqr   )r   r   r   test_pickling[  s    
zTestBasicOps.test_picklingc                 C   s:   dd l }ttjd D ]}| }| ttj|| qd S )Nr   r0   )_randomr   r   r   Randomr?   r@   r   )r   r   r   rr   r   r   test_bug_41052c  s    zTestBasicOps.test_bug_41052c              	   C   sl   g d}|D ]Z\}}t t|d}t|}W d    n1 sD0    Y  | t| d | qd S )N))zrandv2_32.pcki  )zrandv2_64.pckib  )z
randv3.pckiW  rbr%   )openr	   Zfindfiler   loadr'   intr   )r   filesfilevaluefr   r   r   r   test_bug_1727780k  s
    (zTestBasicOps.test_bug_1727780c                    sR   d}| j j t fddt|D }| d||   k o@dk n  ||  d S )Ni c                 3   s   | ]} d d dkV  qdS )l          r6   r7   Nr   r   	randranger   r   	<genexpr>|  r   z-TestBasicOps.test_bug_9025.<locals>.<genexpr>333333?gGz?)r   r   r   r   rS   )r   r   rf   r   r   r   test_bug_9025w  s    zTestBasicOps.test_bug_9025c                 C   s   t ddD ]0}| j|}| t|t | t|| q
| | jdd | t| jj | t| jjdd | t	| jjd | t| jjd d S )Nr0   rM   r   r   r7   r1         ?)
r   r   	randbytesr'   rA   bytesrQ   r?   r@   rd   )r   r   r   r   r   r   test_randbytes  s    zTestBasicOps.test_randbytesN)"r,   r-   r.   r   r$   r*   rC   rE   rX   rY   patchrI   rU   rZ   ra   rh   rm   rp   rr   rx   r   r   r   r   r   r   r   testr	   Zcpython_onlyr   r   r   r   r   r   r   r   r      s6   

	!	,M
r   FTz!random.SystemRandom not availablec                   @   sz   e Zd Ze Zdd Zdd Zdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd ZeefddZdS )SystemRandom_TestBasicOpsc                 C   s   | j   d S rF   r   r   r   r   r   r   r$     s    z'SystemRandom_TestBasicOps.test_autoseedc                 C   s&   |  t| jj |  t| jjd  d S rF   )r?   rG   r   r    r&   r   r   r   r   r*     s    z*SystemRandom_TestBasicOps.test_saverestorec                 C   s   | j d d S Nrb   r   r   r   r   r   rC     s    z'SystemRandom_TestBasicOps.test_seedargsc                 C   s(   d | j _| j d | | j jd  d S r   )r   
gauss_nextr   r'   r   r   r   r   r     s    z$SystemRandom_TestBasicOps.test_gaussc                 C   s,   t tjd D ]}| ttj| j| qd S )Nr0   )r   r   r   r?   rG   r   r   )r   r   r   r   r   r     s    z'SystemRandom_TestBasicOps.test_picklingc                 C   s@   d}d}t dD ]}|t| j | O }q| ||d  d S Nl          r   rb   r0   r   r   r   r   r'   r   r   r   r   r   r   r   test_53_bits_per_float  s
    z0SystemRandom_TestBasicOps.test_53_bits_per_floatc                 C   s`   dd }d}t dD ]6}| j|}| d|  ko:|k n   ||O }q| ||d  d S Nr7   r   r   rb   r0   r   r   r   rS   r'   r   r   r   r   r   r   r   r   test_bigrand  s    
z&SystemRandom_TestBasicOps.test_bigrandc                 C   sd   dD ]Z}| j d|d  }| j d| }||kr6q| || j ||  koV|k n   qd S N)	rt   P      r         iw  i   i&  r7   r   r   rS   r   r   startstopr   r   r   test_bigrand_ranges  s    z-SystemRandom_TestBasicOps.test_bigrand_rangesc                    sB   dD ]8\  ttt fddtdD  qd S )N)r   )l        l         )l            l           c                    s   g | ]} j qS r   r   r   r   r   r   r   r   r   r     r   z>SystemRandom_TestBasicOps.test_rangelimits.<locals>.<listcomp>rb   r'   rR   r   r   r   r   r   test_rangelimits  s    z*SystemRandom_TestBasicOps.test_rangelimitsc                 C   s<   | j ddd}| |d | j ddd}| |d d S )Nr   rM   r7   )r   r7   r8   r   r   )r   r   r`   r'   )r   Zrintr   r   r   test_randrange_nonunit_step  s    z5SystemRandom_TestBasicOps.test_randrange_nonunit_stepc                 C   s^   t | jt| jj}|dd |d |ddd |d |dd |ddd |ddd d S )	Nr6   i/r   rb   in!	@	@*   )r   r?   rd   r   r   )r   Zraisesr   r   r   test_randrange_errors  s    

z/SystemRandom_TestBasicOps.test_randrange_errorsc                 C   s  t ddD ]}d|> }|d }|d||d }| || | |d|d   ||d 7 }|d||d }| |||d g | d| |  kod|d  kn   ||d? 8 }|d||d }| || | d| |  kod|d  kn   q
d S Nr0   r%   grZ|
 ?r7   r   r   r'   r`   rS   r   _logr   r   r   Znumbitsrf   r   r   r   test_randbelow_logic  s    *z.SystemRandom_TestBasicOps.test_randbelow_logicN)r,   r-   r.   r   SystemRandomr   r$   r*   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   r   c                       s   e Zd Ze Zdd Zdd Zdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z fddZdd Zeefdd Zd!d" Zd#d$ Zd%d& Z fd'd(Zd)d* Zd+d, Z  ZS )-MersenneTwister_TestBasicOpsc                    sh    j jddd   fddtdD g d  j jdd	d   fd
dtdD g d d S )Ni4 r0   versionc                    s   g | ]} j   qS r   r   r   hexr   r   r   r   r     r   zGMersenneTwister_TestBasicOps.test_guaranteed_stable.<locals>.<listcomp>r8   )z0x1.ac362300d90d2p-1z0x1.9d16f74365005p-1z0x1.1ebb4352e4c4dp-1z0x1.1a7422abf9c11p-1zthe quick brown foxr7   c                    s   g | ]} j   qS r   r   r   r   r   r   r     r   )z0x1.1239ddfb11b7cp-3z0x1.b3cbb5c51b120p-4z0x1.8c4f55116b60fp-1z0x1.63eb525174a27p-1r   r   r'   r   r   r   r   r   test_guaranteed_stable  s    z3MersenneTwister_TestBasicOps.test_guaranteed_stablec                    s    j jddd   fddtdD g d  j jddd   fd	dtdD g d
  j jddd   fddtdD g d d S )NZnofarr0   r   c                    s   g | ]} j   qS r   r   r   r   r   r   r   
  r   z?MersenneTwister_TestBasicOps.test_bug_27706.<locals>.<listcomp>r8   z0x1.8645314505ad7p-1z0x1.afb1f82e40a40p-5z0x1.2a59d2285e971p-1z0x1.56977142a7880p-6Zrachelc                    s   g | ]} j   qS r   r   r   r   r   r   r     r   z0x1.0b294cc856fcdp-1z0x1.2ad22d79e77b8p-3z0x1.3052b9c072678p-2z0x1.578f332106574p-3 c                    s   g | ]} j   qS r   r   r   r   r   r   r     r   z0x1.b0580f98a7dbep-1z0x1.84129978f9c1ap-1z0x1.aeaa51052e978p-2z0x1.092178fb945a6p-2r   r   r   r   r   test_bug_27706  s    z+MersenneTwister_TestBasicOps.test_bug_27706c                 C   s:   G dd dt }z| j|  W n ty4   Y n0 d S )Nc                   @   s   e Zd Zdd ZdS )z;MersenneTwister_TestBasicOps.test_bug_31478.<locals>.BadIntc                 S   s   d S rF   r   r   r   r   r   __abs__  s    zCMersenneTwister_TestBasicOps.test_bug_31478.<locals>.BadInt.__abs__N)r,   r-   r.   r  r   r   r   r   BadInt  s   r  )r   r   r   r@   )r   r  r   r   r   test_bug_31478  s
    z+MersenneTwister_TestBasicOps.test_bug_31478c                    s    j jddd   fddtdD g d  j jddd   fd	dtdD g d
  j jddd   fddtdD g d d} j j|dd   fddtdD g d d S )Ns   nofarr0   r   c                    s   g | ]} j   qS r   r   r   r   r   r   r   *  r   z?MersenneTwister_TestBasicOps.test_bug_31482.<locals>.<listcomp>r8   r   s   rachelc                    s   g | ]} j   qS r   r   r   r   r   r   r   /  r   r   r   c                    s   g | ]} j   qS r   r   r   r   r   r   r   4  r   r  s	     @`c                    s   g | ]} j   qS r   r   r   r   r   r   r   :  r   )z0x1.52c2fde444d23p-1z0x1.875174f0daea4p-2z0x1.9e9b2c50e5cd2p-1z0x1.fa57768bd321cp-2r   )r   r   r   r   r   test_bug_31482#  s"    z+MersenneTwister_TestBasicOps.test_bug_31482c                 C   s   |  t| jjd d S )N)r0   NN)r?   rd   r   r&   r   r   r   r   test_setstate_first_arg>  s    z4MersenneTwister_TestBasicOps.test_setstate_first_argc                 C   sr  | j  }| t| j jd | t| j jd | t| j jddd d f | t| j jddd d d f | ttf* | j ddd d	 d f W d    n1 s0    Y  | ttf* | j ddd d
 d f W d    n1 s0    Y  | j d}| j | | | j d| | j  d }t	|}t
d|d< dd |D }| t| j jd|d f d S )N)r7   NN)r7   rN   Nr7   )r4   q  )r   ip  )r0   )r  )r1   rb   r0   nanr1   c                 s   s   | ]}t |V  qd S rF   )r   )r   r   r   r   r   r   \  r   zHMersenneTwister_TestBasicOps.test_setstate_middle_arg.<locals>.<genexpr>)r   r    r?   r@   r&   rd   OverflowErrorr   r'   r=   float)r   Zstart_stateZbits100Zstate_valuesr)   r   r   r   test_setstate_middle_argA  s"    
 88z5MersenneTwister_TestBasicOps.test_setstate_middle_argc                 C   sN   g d}| j d | ddd  }t||D ]\}}| j||dd q0d S )N)
g>FdV?gwR1ۉ?gQ"?g~5?g mb?gYKbX?gH,r̊?gV8?gOֶ?g4Ԗ?   #q  `&  'R      )places)r   r   r   rP   assertAlmostEqual)r   rl   actualr4   er   r   r   test_referenceImplementation_  s
    z9MersenneTwister_TestBasicOps.test_referenceImplementationc                 C   s`   ddl m} g d}| jd | ddd  }t||D ]\}}| t||d| q<d 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   rP   r'   r   )r   r  rl   r  r4   r  r   r   r   $test_strong_reference_implementation~  s    
zAMersenneTwister_TestBasicOps.test_strong_reference_implementationc                 C   s   dd> d }| j | d S )Nr0   i8 r   )r   r   r   r   r   test_long_seed  s    z+MersenneTwister_TestBasicOps.test_long_seedc                 C   s@   d}d}t dD ]}|t| j | O }q| ||d  d S r   r   r   r   r   r   r     s
    z3MersenneTwister_TestBasicOps.test_53_bits_per_floatc                 C   s`   dd }d}t dD ]6}| j|}| d|  ko:|k n   ||O }q| ||d  d S r   r   r   r   r   r   r     s    
z)MersenneTwister_TestBasicOps.test_bigrandc                 C   sd   dD ]Z}| j d|d  }| j d| }||kr6q| || j ||  koV|k n   qd S r   r   r   r   r   r   r     s    z0MersenneTwister_TestBasicOps.test_bigrand_rangesc                    sB   dD ]8\  ttt fddtdD  qd S )Nr   c                    s   g | ]} j qS r   r   r   r   r   r   r     r   zAMersenneTwister_TestBasicOps.test_rangelimits.<locals>.<listcomp>rb   r   r   r   r   r   r     s    z-MersenneTwister_TestBasicOps.test_rangelimitsc                    s.   t    | jd | | jdd d S )N rb      S!m.vFXO )superr   r   r   r'   r   r   	__class__r   r   r     s
    
z-MersenneTwister_TestBasicOps.test_getrandbitsc                 C   s(   | j d | | j dd d d S )Nr  r7   c   r  )r   r   r'   r   r   r   r   r   test_randrange_uses_getrandbits  s    z<MersenneTwister_TestBasicOps.test_randrange_uses_getrandbitsc                 C   s  t ddD ]}d|> }|d }|d||d }| || | |d|d   ||d 7 }|d||d }| |||d g | d| |  kod|d  kn   ||d? 8 }|d||d }| || | d| |  kod|d  kn   q
d S r   r   r   r   r   r   r     s    *z1MersenneTwister_TestBasicOps.test_randbelow_logicc                 C   s   dt j> }t 0 tdt | jj|d |d W d    n1 sH0    Y  | jjd|d | jjd|d}| |d d}d}|||  | }t	j
jt jd@}|| || g|_| jj||d | |jd	 W d    n1 s0    Y  d S )
Nr0   ignore)maxsizei  r   r   {Gz?r   r7   )r   BPFwarningscatch_warningssimplefilterUserWarningr   _randbelow_without_getrandbitsr'   rX   rY   r   r9   r   rH   Z
call_count)r   r"  r   r   epsilonlimitrandom_mockr   r   r   "test_randbelow_without_getrandbits  s     

$z?MersenneTwister_TestBasicOps.test_randbelow_without_getrandbitsc                 C   sR   d}d}d}| j |||}| ||  k o2|kn   | || | d d S )Nl    J)r2   i8r   )r   r   rS   r'   )r   r   r   stepr   r   r   r   test_randrange_bug_1590891
  s    z7MersenneTwister_TestBasicOps.test_randrange_bug_1590891c           
      C   sB  | j j}d}| j d | j jt|dd}| j d | j jt|dg| dd}| || | j d | j jt|td|d dd}| || g d}g d}g d	}d
gd dgd  dgd  }	| j d | j j|	dd}| j d | j j||dd}| || | j d | j j||dd}| || d S )Ni _ rj   rw   r0   r   )RedBlackGreen)   r4  r7   )r4  $   &   r1  r4  r2  r3  r7   i߉ )r   r   r   r   r'   )
r   r   r   r4   r   r   re   r   r   Zexpanded_populationr   r   r   test_choices_algorithms  s,     z4MersenneTwister_TestBasicOps.test_choices_algorithmsc                    s  t    d}d j| jd  j| jdd jd  j| dfddtdD   j|  d	d d }dfd
dtdD | j| d fddtdt dD }dfddtdD | j| d fddtdt dD }dfddtdD | d S )Nr0  s   3f6oe   r   r   c                    s   g | ]} j d qS )r8   r   r   r   _r   r   r   r   E  r   z?MersenneTwister_TestBasicOps.test_randbytes.<locals>.<listcomp>r8   r6   c                 3   s   | ]} j d V  qdS )r0   Nr9  r:  r   r   r   r   L  r   z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>c                 3   s"   | ]} |d  |d  V  qdS )r7   r8   Nr   r   rl   r   r   r   P  s   c                 3   s   | ]} j d V  qdS )r7   Nr9  r:  r   r   r   r   R  r   c                 3   s"   | ]} |d  |d  V  qdS )r0   r8   Nr   r   r<  r   r   r   V  s   c                 3   s   | ]} j d V  qdS )r6   Nr9  r:  r   r   r   r   X  r   )	r  r   r   r   r'   r   joinr   rQ   )r   r   Z	expected1Z	expected2Z	expected3r  )rl   r   r   r   3  s>    
z+MersenneTwister_TestBasicOps.test_randbytesc                 C   sZ   d}t  }| j| || tdD ]*}| | j|||d |d q*d S )Nl   OS 	   r   little)	r   r   r   r   r   r'   r   r   to_bytes)r   r   Zgen2r   r   r   r   test_randbytes_getrandbits[  s    
z7MersenneTwister_TestBasicOps.test_randbytes_getrandbitsc           
      C   s   | j j}| j j}g d}g d}d}|d ||||d}|d dd t||D }| t|t| |||d}| || d	}	g d
}|d d||	|dd}ddd t|	|D }|d d||dd}| || d S )N)ry   rz   r{   r|   r}   r   )r   r   rn   rM   ri   r0   r   r0  r   c                 S   s"   g | ]\}}t |D ]}|qqS r   r   )r   r   countr   r   r   r   r   r  r   zOMersenneTwister_TestBasicOps.test_sample_counts_equivalence.<locals>.<listcomp>rw   Z	abcdefghi)	rM   r>  r      r   ri   r8   r6   r7   r   rv   c                 S   s"   g | ]\}}t |D ]}|qqS r   r   )r   ZletterrB  r   r   r   r   r   {  r   )r   rc   r   rP   r'   rQ   r   r=  )
r   rc   r   r   r   rf   s1Zexpandeds2rk   r   r   r   test_sample_counts_equivalencee  s(    z;MersenneTwister_TestBasicOps.test_sample_counts_equivalence)r,   r-   r.   r   r   r   r   r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r-  r/  r7  r   rA  rF  __classcell__r   r   r  r   r     s.   	
&!(
r          @rV   c                 C   s   | dk r$t tt |   td|   S | d }|| d  t| | tdd|  d| d  d| d  d	| d
  d| d  d| d  d| d  d| d  g	 S )NrV   r   g      @g?g
ö)$@g&Ԏgta@rH  gQf      @g>@~)@g      @gA~      @g~\>g      @giE>g      @)r   r   gammar   r   )zZsqrt2piazr   r   r   rK    s    






rK  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
ddd Ze	j
ddd Ze	j
ddd Ze	j
ddd Ze	j
ddd ZdS )TestDistributionsc                    s  t    fddtdD dgd  }|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                    s   g | ]}   qS r   r   r   gr   r   r     r   z5TestDistributions.test_zeroinputs.<locals>.<listcomp>r[   r   ri   r0   rM   r   r#  g      i@rI  UUUUUU?)r   r   r   rk   uniformparetovariateexpovariateweibullvariatevonmisesvariatenormalvariater   lognormvariategammavariatebetavariate
triangular)r   r   r   rO  r   test_zeroinputs  s      z!TestDistributions.test_zeroinputsc                    s`  t  }d  fddtd D }|jdddf|jdd	d
f|jddd	f|jdttd d f|jdddf|j	dt
dt
dt
dd  ffD ]\}}}}|d d  j|_ g }tt|D ]*}z|||  W q ty   Y q0 qd }	}
|D ]}|	|7 }	|
|| d 7 }
qt| | j|	  |dd|j|f d | j|
 d  |dd|j|f d qd S )Nr   c                    s   g | ]}|t   qS r   )r  r   r(   r   r   r     r   z2TestDistributions.test_avg_std.<locals>.<listcomp>r0   )r         $@g      @g      @)r   r   rQ  gqq?g<ݚ?)g      ?gUUUUUU?)gGz?r   r7   r6   )rJ  g      ?g?)r   rI  gUUUUUU?g?r   z%s%r)r  msg)r   r   r   rR  r[  rT  rV  r   rS  rU  rK  rk   rQ   appendr_   r  r,   )r   rP  r   variateargsmuZ	sigmasqrdyr   rD  rE  r  r   r]  r   test_avg_std  s@    	zTestDistributions.test_avg_stdc                 C   s   t  }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 ](\}}}t|D ]}| || | qqd S )Nrb   )r^  r^  r^  )r^  r^  r^  infr   rI  )r^  r   )r   r   r   )r   r^  )r   r   rR  r[  rT  r  rV  r   rX  rW  rS  rU  r   r'   )r   rP  r(   ra  rb  rl   r   r   r   r   test_constant  s"    






zTestDistributions.test_constantc              
   C   sl   t  }d}dD ]V}dD ]L}t|D ]>}|||}| jd|  koLt jkn  d|||d q$qqd S )Nrb   )r   r   g@g@)r   ffffff@g     @@r   zCvonmisesvariate({}, {}) produced a result {} out of range [0, 2*pi])r_  )r   r   r   rV  rS   TWOPIformat)r   rP  r(   rc  kappar;  rc   r   r   r   test_von_mises_range  s    z&TestDistributions.test_von_mises_rangec                 C   s   t dd t dd d S )Nr   g  4&kCg}Ô%IT)r   rV  r   r   r   r   test_von_mises_large_kappa  s    z,TestDistributions.test_von_mises_large_kappac                 C   sL   |  ttjdd |  ttjdd |  ttjdd |  ttjdd d S )Nr1   r6   r   r7   r0   r   )r?   rd   r   rY  r   r   r   r   test_gammavariate_errors  s    z*TestDistributions.test_gammavariate_errorszrandom.Random.randomc                 C   s&   g d|_ tdd}| |d d S )N):0yE>rV   r   g?rh  g=
ףp=@rH   r   rY  r  r   r,  returned_valuer   r   r   #test_gammavariate_alpha_greater_one  s    
z5TestDistributions.test_gammavariate_alpha_greater_onec                 C   s$   dg|_ tdd}| |d d S )Ng?r   r3   g/qr	?rp  rq  r   r   r   !test_gammavariate_alpha_equal_one  s    z3TestDistributions.test_gammavariate_alpha_equal_onec                 C   s8   d}ddg|_ td|}td| }| || d S )Nr3   ro  r   )rH   r   rY  rT  r  )r   r,  betaZgammavariate_returned_valueZexpovariate_returned_valuer   r   r   4test_gammavariate_alpha_equal_one_equals_expovariate  s
    
zFTestDistributions.test_gammavariate_alpha_equal_one_equals_expovariatec                 C   s   t j}t j}t j}d}d}|| | }d}d}	d}
|	|
| |	|
g|_t ||}| |d d}	d}
|	|
| |	|
g|_t ||}| |d	 d S )
Ngffffff?g333333?r#  gX Y?g=,6V?g.3333?gl%t?gK,	9?g7SvT?)r   _e_expr   rH   rY  r  )r   r,  rw  rx  r   alpharu  r   r*  Zr1Zr2rr  r   r   r   ,test_gammavariate_alpha_between_zero_and_one  s"    #	z>TestDistributions.test_gammavariate_alpha_between_zero_and_onezrandom.Random.gammavariatec                 C   s   d|_ | dtdd d S )Nr   r   r   )rW   r'   r   rZ  )r   Zgammavariate_mockr   r   r   test_betavariate_return_zero`  s    z.TestDistributions.test_betavariate_return_zeroN)r,   r-   r.   r\  re  rg  rl  rm  rn  rX   rY   r   rs  rt  rv  rz  r{  r   r   r   r   rN    s     










E
rN  c                   @   s   e Zd Zdd Zdd ZdS )TestRandomSubclassingc                 C   s    G dd dt j}|dd d S )Nc                   @   s   e Zd ZdddZdS )zHTestRandomSubclassing.test_random_subclass_with_kwargs.<locals>.SubclassNc                 S   s   t j|  d S rF   )r   r   __init__)r   newargr   r   r   r}  l  s    zQTestRandomSubclassing.test_random_subclass_with_kwargs.<locals>.Subclass.__init__)N)r,   r-   r.   r}  r   r   r   r   Subclassk  s   r  r0   )r~  )r   r   )r   r  r   r   r    test_random_subclass_with_kwargsi  s    z6TestRandomSubclassing.test_random_subclass_with_kwargsc                    s  G  fdddt j}t  | d |  dh G  fdddt j}t  | d |  dh G  fdd	d	|}t  | d |  d
h G  fddd|}t  | d |  dh G  fddd}G  fddd}G dd d|t j}t  | d |  dh G dd d|t j}t  | d |  dh G dd d||t j}	t  |	 d |  dh G dd d||t j}
t  |
 d |  dh d S )Nc                       s$   e Zd Z fddZ fddZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1c                    s     d tj| S )NzSubClass1.randomaddr   r   r   Zcalledr   r   r   y  s    
zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1.randomc                    s     d tj| |S )NSubClass1.getrandbitsr  r   r   r   r   r  r   r   r   }  s    
zWTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1.getrandbitsN)r,   r-   r.   r   r   r   r  r   r   	SubClass1x  s   r  r   r  c                       s   e Zd Z fddZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass2c                    s     d tj| S )NSubClass2.randomr  r   r  r   r   r     s    
zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass2.randomNr,   r-   r.   r   r   r  r   r   	SubClass2  s   r  r  c                       s   e Zd Z fddZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass3c                    s     d tj| |S )NSubClass3.getrandbitsr  r   r  r   r   r     s    
zWTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass3.getrandbitsNr,   r-   r.   r   r   r  r   r   	SubClass3  s   r  r  c                       s   e Zd Z fddZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass4c                    s     d tj| S )NSubClass4.randomr  r   r  r   r   r     s    
zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass4.randomNr  r   r  r   r   	SubClass4  s   r  r  c                       s   e Zd Z fddZdS )zHTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin1c                    s     d tj| S )NMixin1.randomr  r   r  r   r   r     s    
zOTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin1.randomNr  r   r  r   r   Mixin1  s   r  c                       s   e Zd Z fddZdS )zHTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin2c                    s     d tj| |S )NMixin2.getrandbitsr  r   r  r   r   r     s    
zTTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin2.getrandbitsNr  r   r  r   r   Mixin2  s   r  c                   @   s   e Zd ZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass5Nr,   r-   r.   r   r   r   r   	SubClass5  s   r  r  c                   @   s   e Zd ZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass6Nr  r   r   r   r   	SubClass6  s   r  r  c                   @   s   e Zd ZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass7Nr  r   r   r   r   	SubClass7  s   r  c                   @   s   e Zd ZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass8Nr  r   r   r   r   	SubClass8  s   r  )r   r   rR   r   r'   )r   r  r  r  r  r  r  r  r  r  r  r   r  r   "test_subclasses_overriding_methodsp  sD    z8TestRandomSubclassing.test_subclasses_overriding_methodsN)r,   r-   r.   r  r  r   r   r   r   r|  h  s   r|  c                   @   s6   e Zd Zdd Zdd Zeeedddd Z	d	S )

TestModulec                 C   s<   |  tjd |  tjd |  tjd |  tjd d S )Ng3?r?g.DT!@g9B.?gtY@)r  r   NV_MAGICCONSTri  LOG4SG_MAGICCONSTr   r   r   r   testMagicConstants  s    zTestModule.testMagicConstantsc                 C   s    |  ttjtttk d S rF   )rS   rR   r   __all__dirr   r   r   r   test__all__  s    zTestModule.test__all__forkzfork() requiredc              	   C   s   t  \}}t  }|dkr|zPtd}t|d}|t| W d    n1 sV0    Y  W t d qt d 0 ndt 	| td}t|d}t
| }W d    n1 s0    Y  | || tj|dd d S )Nr   r   wr   )exitcode)ospiper  r   r   r   writero   _exitcloseevalreadr#   r	   Zwait_process)r   r   r  pidvalr   Z	child_valr   r   r   test_after_fork  s    
.

*zTestModule.test_after_forkN)
r,   r-   r.   r  r  rX   
skipUnlesshasattrr  r  r   r   r   r   r    s   r  __main__)%rX   Zunittest.mockr   r  r!   r   r%  Ztest.supportr   	functoolsr   r  r   r   r   r   r   r   r	   Z	fractionsr
   collectionsr   r   r   rG   ZSystemRandom_availabler  ZTestCaser   r   rK  rN  r|  r  r,   mainr   r   r   r   <module>   sD       

a    V]#
