o
    HXh                     @   sd  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 dZze   W n eyd   d	ZY nw 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re %  dS dS )    N)partial)logexppifsumsin	factorial)support)Fraction)abc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d,d- Zd.d/ Zd0d1 Zejj d2d3 Z!ejj d4d5 Z"d6d7 Z#d8d9 Z$d:d; Z%d<S )=TestBasicOpsc                    s   	  fddt |D S )Nc                       g | ]} j  qS  genrandom.0iselfr   :/opt/python-3.10.19/usr/lib/python3.10/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    n1 s3w   Y  qttdtddfD ] }| t | 	t
| jj| W d    n1 s_w   Y  qD| 	t
| jjdd	dd
 | 	t
t| jg  d S )Nc                   @      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__,      z3TestBasicOps.test_seedargs.<locals>.MySeed.__hash__N)__name__
__module____qualname__r.   r   r   r   r   MySeed+       r3   )
Nr      l      Fx:^V    Fx:^V FTQ	@ay      ?       @r      r5   )Zone      )objectr   r!   tupleassertWarnsDeprecationWarninglistr   dictassertRaises	TypeErrortype)r   r3   argr   r   r   test_seedargs)   s   zTestBasicOps.test_seedargsc                 C   s(   t d}| j| | |t d d S )Ns   1234)	bytearrayr   r!   r)   )r   r9   r   r   r   test_seed_no_mutate_bug_44018<      z*TestBasicOps.test_seed_no_mutate_bug_44018zrandom._urandomc                 C   s   t |_|   d S N)NotImplementedErrorside_effectrG   )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 ]}|| q2t||D ]\}}| t|t| | t|t| q>ttd}ttd}|| | ||k || | ||k | 	t
|d d S )N%   c                 S      g | ]}t t|qS r   rA   r   r   r   r   r   r   r   S       z-TestBasicOps.test_shuffle.<locals>.<listcomp>
   c                 S   rP   r   rQ   rR   r   r   r   r   T   rS   r'   r5   r;   r:   )r   shuffler)   r   ziplensetrA   
assertTruerC   rD   )r   rV   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 s$w   Y  |  d S )N      ?)return_values   abcdefghijk)	r   rV   unittestmockZMockrH   r?   r@   Zassert_called_with)r   rV   Zmock_randomr[   r   r   r   test_shuffle_random_argumentl   s   z)TestBasicOps.test_shuffle_random_argumentc                 C   sh   | j j}| t |g  W d    n1 sw   Y  | |dgd | |ddgddg d S )N2      K   )r   choicerC   
IndexErrorr)   assertIn)r   re   r   r   r   test_choiceu   s   
zTestBasicOps.test_choicec                 C   s   d}t |}t |d D ]&}| j||}| t|| t|}| t|| | |t|k q| | jg dg  | t| jj||d  | t| jjg d d S )Nd   r5   r   r6   )	r   r   sampler)   rX   rY   rZ   rC   
ValueError)r   r*   
populationksZuniqr   r   r   test_sample|   s   zTestBasicOps.test_samplec              	   C   sv   d}t |}d}t |D ],}t|t||  }i }t |D ]}d |t| j||< t||kr3 nq|   qd S )N   '  )r   r   r>   r   rj   rX   Zfail)r   r   popZtrialsrm   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   r;   Zabcdefghijklmnopqrst)r   rj   r   strr>   r   r   r   r   test_sample_inputs      zTestBasicOps.test_sample_inputsc                 C   s   |  t| jjtdd d S )NZabcdefr;   )rC   rD   r   rj   rB   fromkeysr   r   r   r   test_sample_on_dicts   s   z!TestBasicOps.test_sample_on_dictsc                 C   sH   |  t h d}| jj|dd W d    d S 1 sw   Y  d S )N>   F   (   rT   rb   ru   <      rp   rm   )r?   r@   r   rj   )r   rl   r   r   r   test_sample_on_sets   s   "z TestBasicOps.test_sample_on_setsc                 C   sl   G dd dt jt j}|g d}t  tdt | jj|dd W d    d S 1 s/w   Y  d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z3TestBasicOps.test_sample_on_seqsets.<locals>.SeqSetc                 S   s
   || _ d S rK   _items)r   itemsr   r   r   __init__      
z<TestBasicOps.test_sample_on_seqsets.<locals>.SeqSet.__init__c                 S   s
   t | jS rK   )rX   r   r   r   r   r   __len__   r   z;TestBasicOps.test_sample_on_seqsets.<locals>.SeqSet.__len__c                 S   s
   | j | S rK   r   )r   indexr   r   r   __getitem__   r   z?TestBasicOps.test_sample_on_seqsets.<locals>.SeqSet.__getitem__N)r0   r1   r2   r   r   r   r   r   r   r   SeqSet   s    r   )r;   r<   r5   r:   errorr;   r   )	r   SequenceSetwarningscatch_warningssimplefilterr@   r   rj   )r   r   rl   r   r   r   test_sample_on_seqsets   s   

"z#TestBasicOps.test_sample_on_seqsetsc           	      C   s  | j j}g d}g d}d}t||||d}| t| | t||D ]\}}| || | q&| d| t|}t||||d}| t| | t||D ]\}}| || | qU| 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 sw   Y  | 
t |g d
g ddd W d    n1 sw   Y  | 
t |g d
g ddd W d    n1 sw   Y  | 
t |ddgddgdd W d    n	1 sw   Y  | 
t |g d
ddgdd W d    n	1 s3w   Y  | 
t |g d
g ddd W d    d S 1 sUw   Y  d S )N)redgreenblueorangeblackbrownamber)     ru   rT   rp   r   r5     countsrm   r   xrT      )r   )r   r   r   )iir;   )r   r   r   r   r      r5   )r5   r;   r:   r<   )r   rj   r   r)   sumvaluesrW   ZassertLessEqualZassertNotInrX   rC   rD   rk   )	r   rj   colorsr   rm   ZsummarycolorZweightZncr   r   r   test_sample_with_counts   sL   $z$TestBasicOps.test_sample_with_countsc              	   C   sd  | 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 q3| 	t
 |d W d    n1 sew   Y  | ||d	dg  | ||d
dg  | 	t
 ||dd W d    n1 sw   Y  | t||ddt|k | t||ddt|k | 	t
 ||dd W d    n1 sw   Y  | t||d ddt|k | t||d ddt|k | 	t ||ddgdd W d    n	1 sw   Y  | 	t
 ||ddd W d    n	1 s)w   Y  | 	t
 ||d gd dd W d    n	1 sIw   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 qj| 	t ||ddgdd W d    n	1 sw   Y  | 	t
 ||ddd W d    n	1 sw   Y  | 	t
 ||d gd dd W d    n	1 sw   Y  | 	t
 ||tdtddd W d    n	1 sw   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 spw   Y  | 	t |g g dd W d    n	1 sw   Y  | 	t |g g dd W d    d S 1 sw   Y  d S )N)r   r   r   ZyellowZabcdr<   rp   r   )rm   rl   weights)rm   rl   cum_weightsr;   r   r6   g      @)r   rm   r5   rT   )   rT   rc   r~   )g333333.@gffffff$@g3333339@gL>@r:      )TFTFr   rm   )r5   r   r   r   r9   )r   r5   r   r   b)r   r   r5   r   c)r   r   r   r5   d)r   choicesr   rY   r)   rX   rE   rA   rZ   rC   rD   rk   r
   rf   )r   r   dataZstr_dataZ
range_dataset_datarj   r   r   r   r   test_choices   s   

  "$"$$zTestBasicOps.test_choicesc                 C   s"   | j j}|ddgddgdd d S )Nr5   r;   g         )rl   r   rm   )r   r   )r   r   r   r   r   test_choices_subnormal4  s   z#TestBasicOps.test_choices_subnormalc                 C   sB   |  t | jdddg W d    d S 1 sw   Y  d S )NAB        rC   rk   r   r   r   r   r   r   "test_choices_with_all_zero_weights<  s   "z/TestBasicOps.test_choices_with_all_zero_weightsc                 C   sB   |  t | jdg d W d    d S 1 sw   Y  d S )NABC)r:   r5   r   r   r   r   r   test_choices_negative_totalA  s   "z(TestBasicOps.test_choices_negative_totalc                 C   sJ  |  t | jdtdg W d    n1 sw   Y  |  t | jddtdg W d    n1 s:w   Y  |  t | jdtd dg W d    n1 s[w   Y  |  t | jddtdg W d    n1 s{w   Y  |  t | jdtdtdg W d    d S 1 sw   Y  d S )NAinfr   r   {   nanz-inf)rC   rk   r   r   floatr   r   r   r   test_choices_infinite_totalE  s   "z(TestBasicOps.test_choices_infinite_totalc                 C   sn   dD ]2}| j | | j  }| j dd}| j | | j  }| j dd}| || | || qd S )N)r5      r   i  i90  i@ i	 r   r5   )r   r!   r   gaussr)   )r   r!   Zx1Zy1Zx2Zy2r   r   r   
test_gaussQ  s   

zTestBasicOps.test_gaussc           	      C   s  t ddD ]}| d| j|  kod| k n   q| | jdd | jj}dD ]-}d| d }d}d}t dD ]}||}||O }|||A O }q=| || | || q-| t| jj | t| jjdd | t| jjd | t| jjd d S )	Nr5   r'   r   r;   )r5   r;   r:   r<          r   4   5   6   w            ri   r6   g333333$@)r   rZ   r   getrandbitsr)   rC   rD   rk   )	r   rm   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j|}fddt dD }t|  fddt dD }|| qd S )Nr5   c                    r   r   r   r   r   r   r   r   ~  r   z.TestBasicOps.test_pickling.<locals>.<listcomp>rT   c                       g | ]}   qS r   r   r   )newgenr   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   r5   )_randomr   r   r   RandomrC   rD   r   )r   r   r   rr   r   r   test_bug_41052  s
   zTestBasicOps.test_bug_41052c                 C   s<   dd l }| }|d |d}| | |  d S )Nr   _ )r   r   r!   r)   r   )r   r   r1r2r   r   r   test_bug_42008  s
   

zTestBasicOps.test_bug_42008c              	   C   sl   g d}|D ]-\}}t t|d}t|}W d    n1 s"w   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_1727780  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          r:   r;   Nr   r   	randranger   r   	<genexpr>  s    z-TestBasicOps.test_bug_9025.<locals>.<genexpr>333333?gGz?)r   r   r   r   rZ   )r   r   rm   r   r   r   test_bug_9025  s   ,zTestBasicOps.test_bug_9025c                 C   s   t ddD ]}| 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 )Nr5   rT   r       r;   r6         ?)
r   r   	randbytesr)   rE   bytesrX   rC   rD   rk   )r   r   r   r   r   r   test_randbytes  s   zTestBasicOps.test_randbytesN)&r0   r1   r2   r   r&   r,   rG   rI   r_   r`   patchrN   r\   ra   rh   ro   rt   rw   rz   r   r   r   r   r   r   r   r   r   r   r   testr	   Zcpython_onlyr   r   r   r   r   r   r   r   r   r      sB    

	!	,M

r   FTz!random.SystemRandom not availablec                   @   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eefddZdS )SystemRandom_TestBasicOpsc                 C   s   | j   d S rK   r   r!   r   r   r   r   r&     s   z'SystemRandom_TestBasicOps.test_autoseedc                 C   s&   |  t| jj |  t| jjd  d S rK   )rC   rL   r   r"   r(   r   r   r   r   r,     s   z*SystemRandom_TestBasicOps.test_saverestorec                 C   s   | j d d S Nri   r   r   r   r   r   rG     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     rJ   z$SystemRandom_TestBasicOps.test_gaussc                 C   s,   t tjd D ]}| ttj| j| qd S )Nr5   )r   r   r   rC   rL   r   r   )r   r   r   r   r   r     s   z'SystemRandom_TestBasicOps.test_picklingc                 C   @   d}d}t dD ]}|t| j | O }q| ||d  d S Nl          r   ri   r5   r   r   r   r   r)   r   r   r   r   r   r   r   test_53_bits_per_float  
   z0SystemRandom_TestBasicOps.test_53_bits_per_floatc                 C   `   dd }d}t dD ]}| j|}| d|  ko|k n   ||O }q
| ||d  d S Nr;   r   r   ri   r5   r   r   r   rZ   r)   r   r   r   r   r   r   r   r   test_bigrand     
z&SystemRandom_TestBasicOps.test_bigrandc                 C   d   dD ]-}| j d|d  }| j d| }||krq| || j ||  ko+|k n   qd S N)	r|   P      r         iw  i   i&  r;   r   r   rZ   r   r   startstopr   r   r   test_bigrand_ranges     *z-SystemRandom_TestBasicOps.test_bigrand_rangesc                    B   dD ]\  ttt fddtdD  qd S )N)r   )l        l         )l            l           c                       g | ]	} j qS r   r   r   r   r   r  r  r   r   r         z>SystemRandom_TestBasicOps.test_rangelimits.<locals>.<listcomp>ri   r)   rY   r   r   r   r  r   test_rangelimits  
   z*SystemRandom_TestBasicOps.test_rangelimitsc                 C   s<   | j ddd}| |d | j ddd}| |d d S )Nr   rT   r;   )r   r;   r<   r   r   )r   r   rg   r)   )r   Zrintr   r   r   test_randrange_nonunit_step  s   z5SystemRandom_TestBasicOps.test_randrange_nonunit_stepc              	   C   sv  t | jt| jj}|dd |d |ddd | t|d | t| jjd | t| jjtdd | t|d	 | t|dd
 | t| jjdd | t| jjdtdd | t|dd |ddd | t|ddd | t|ddd | t|ddd | t| jjddd | t| jjddtdd | t|ddd	 | t| jjddd | t|ddd d S )Nr:   i/r   ri   in!	@      @r5   3	@       @r;   2*   r   r   )r   rC   rk   r   r   r?   r@   r
   )r   Zraisesr   r   r   test_randrange_errors  s*   
z/SystemRandom_TestBasicOps.test_randrange_errorsc              	   C   s  | j j}| t |ddd W d    n1 sw   Y  | t |ddd W d    n1 s5w   Y  | t |ddd W d    n1 sPw   Y  | t |ddd W d    n1 skw   Y  | t! | t |d W d    n1 sw   Y  W d    n1 sw   Y  | t" | t |dd	 W d    n1 sw   Y  W d    n1 sw   Y  | t, | t |ddd
 W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )N      $@ru   r;   rT   g      4@r   r$  g      %@g     4@      ?)r   r   r?   r@   rC   rk   r   r   r   r   r    test_randrange_argument_handling  s@   
$z:SystemRandom_TestBasicOps.test_randrange_argument_handlingc                 C   s|   | j j}| t |ddd W d    n1 sw   Y  | t |dd dd W d    d S 1 s7w   Y  d S )Nr'   ri   )step)r   r   rC   rD   r*  r   r   r   test_randrange_step,  s   "z-SystemRandom_TestBasicOps.test_randrange_stepc                 C     t ddD ]{}d|> }|d }|d||d }| || | |d|d   ||d 7 }|d||d }| |||d g | d| |  koRd|d  kn   ||d? 8 }|d||d }| || | d| |  ko|d|d  kn   qd S Nr5   r'   grZ|
 ?r;   r   r   r)   rg   rZ   r   _logr   r   r   Znumbitsrm   r   r   r   test_randbelow_logic4     *,z.SystemRandom_TestBasicOps.test_randbelow_logicN)r0   r1   r2   r   SystemRandomr   r&   r,   rG   r   r   r  r  r  r  r  r'  r+  r-  r   r   r3  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 r5   versionc                       g | ]	} j   qS r   r   r   hexr   r   r   r   r   P  r  zGMersenneTwister_TestBasicOps.test_guaranteed_stable.<locals>.<listcomp>r<   )z0x1.ac362300d90d2p-1z0x1.9d16f74365005p-1z0x1.1ebb4352e4c4dp-1z0x1.1a7422abf9c11p-1zthe quick brown foxr;   c                    r9  r   r:  r   r   r   r   r   T  r  )z0x1.1239ddfb11b7cp-3z0x1.b3cbb5c51b120p-4z0x1.8c4f55116b60fp-1z0x1.63eb525174a27p-1r   r!   r)   r   r   r   r   r   test_guaranteed_stableM  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nofarr5   r7  c                    r9  r   r:  r   r   r   r   r   \  r  z?MersenneTwister_TestBasicOps.test_bug_27706.<locals>.<listcomp>r<   z0x1.8645314505ad7p-1z0x1.afb1f82e40a40p-5z0x1.2a59d2285e971p-1z0x1.56977142a7880p-6Zrachelc                    r9  r   r:  r   r   r   r   r   a  r  z0x1.0b294cc856fcdp-1z0x1.2ad22d79e77b8p-3z0x1.3052b9c072678p-2z0x1.578f332106574p-3 c                    r9  r   r:  r   r   r   r   r   f  r  z0x1.b0580f98a7dbep-1z0x1.84129978f9c1ap-1z0x1.aeaa51052e978p-2z0x1.092178fb945a6p-2r<  r   r   r   r   test_bug_27706X  s   z+MersenneTwister_TestBasicOps.test_bug_27706c                 C   s:   G dd dt }z
| j|  W d S  ty   Y d S w )Nc                   @   r-   )z;MersenneTwister_TestBasicOps.test_bug_31478.<locals>.BadIntc                 S   s   d S rK   r   r   r   r   r   __abs__n  r/   zCMersenneTwister_TestBasicOps.test_bug_31478.<locals>.BadInt.__abs__N)r0   r1   r2   rC  r   r   r   r   BadIntm  r4   rD  )r   r   r!   rD   )r   rD  r   r   r   test_bug_31478j  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   nofarr5   r7  c                    r9  r   r:  r   r   r   r   r   |  r  z?MersenneTwister_TestBasicOps.test_bug_31482.<locals>.<listcomp>r<   r>  s   rachelc                    r9  r   r:  r   r   r   r   r     r  r?  r   c                    r9  r   r:  r   r   r   r   r     r  rA  s	     @`c                    r9  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_31482u  s"   z+MersenneTwister_TestBasicOps.test_bug_31482c                 C   s   |  t| jjd d S )N)r5   NN)rC   rk   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 sTw   Y  | ttf | j ddd d
 d f W d    n1 sxw   Y  | j d}| j | | | j d| | j  d }t	|}t
d|d< dd |D }| t| j jd|d f d S )N)r;   NN)r;   rU   Nr;   )r9   q  )r   ip  )r5   )rH  )r6   ri   r5   r   r6   c                 s   s    | ]}t |V  qd S rK   )r   )r   r   r   r   r   r     s    zHMersenneTwister_TestBasicOps.test_setstate_middle_arg.<locals>.<genexpr>)r   r"   rC   rD   r(   rk   OverflowErrorr   r)   rA   r   )r   Zstart_stateZbits100Zstate_valuesr+   r   r   r   test_setstate_middle_arg  s&   
 z5MersenneTwister_TestBasicOps.test_setstate_middle_argc                 C   sN   g d}| j d | ddd  }t||D ]\}}| j||dd qd S )N)
g>FdV?gwR1ۉ?gQ"?g~5?g mb?gYKbX?gH,r̊?gV8?gOֶ?g4Ԗ?   #q  `&  'R      )places)r   r!   r   rW   assertAlmostEqual)r   rs   actualr9   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 rK  rL  rM  r   )mathrT  r   r!   r   rW   r)   r   )r   rT  rs   rQ  r9   rR  r   r   r   $test_strong_reference_implementation  s   
zAMersenneTwister_TestBasicOps.test_strong_reference_implementationc                 C   s   dd> d }| j | d S )Nr5   i8 r   )r   r!   r   r   r   test_long_seed  s   z+MersenneTwister_TestBasicOps.test_long_seedc                 C   r   r   r   r   r   r   r   r    r  z3MersenneTwister_TestBasicOps.test_53_bits_per_floatc                 C   r  r  r  r  r   r   r   r    r  z)MersenneTwister_TestBasicOps.test_bigrandc                 C   r	  r
  r  r  r   r   r   r    r  z0MersenneTwister_TestBasicOps.test_bigrand_rangesc                    r  )Nr  c                    r  r   r  r   r  r   r   r     r  zAMersenneTwister_TestBasicOps.test_rangelimits.<locals>.<listcomp>ri   r  r   r   r  r   r  
  r  z-MersenneTwister_TestBasicOps.test_rangelimitsc                    s.   t    | jd | | jdd d S )N ri      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 )NrX  r;   c   rY  )r   r!   r)   r   r   r   r   r   test_randrange_uses_getrandbits  s   z<MersenneTwister_TestBasicOps.test_randrange_uses_getrandbitsc                 C   r.  r/  r0  r1  r   r   r   r3  !  r4  z1MersenneTwister_TestBasicOps.test_randbelow_logicc                 C   s   dt j> }t  tdt | jj|d |d W d    n1 s$w   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    d S 1 sxw   Y  d S )
Nr5   ignore)maxsizei  r   r&  {Gz?r   r;   )r   BPFr   r   r   UserWarningr   _randbelow_without_getrandbitsr)   r_   r`   r   r=   r   rM   Z
call_count)r   r`  r   r   epsilonlimitrandom_mockr   r   r   "test_randbelow_without_getrandbits6  s$   

"z?MersenneTwister_TestBasicOps.test_randbelow_without_getrandbitsc                 C   sR   d}d}d}| j |||}| ||  k o|kn   | || | d d S )Nl    J)r7   i8r   )r   r   rZ   r)   )r   r  r  r,  r   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 r   rq   r   r5   r   )RedBlackGreen)   rm  r;   )rm  $   &   rj  rm  rk  rl  r;   i߉ )r   r   r!   r   r)   )
r   r   r   r9   r   r   rl   r   r   Zexpanded_populationr   r   r   test_choices_algorithmsd  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 )Nr   s   3f6oe   r   r   c                    s   g | ]} j d qS )r<   r   r   r   _r   r   r   r     rS   z?MersenneTwister_TestBasicOps.test_randbytes.<locals>.<listcomp>r<   r:   c                 3       | ]	} j d V  qdS )r5   Nrr  rs  r   r   r   r         z>MersenneTwister_TestBasicOps.test_randbytes.<locals>.<genexpr>c                 3   $    | ]} |d  |d  V  qdS )r;   r<   Nr   r   rs   r   r   r         c                 3   ru  )r;   Nrr  rs  r   r   r   r     rv  c                 3   rw  )r5   r<   Nr   r   rx  r   r   r     ry  c                 3   ru  )r:   Nrr  rs  r   r   r   r     rv  )	rZ  r   r   r!   r)   r   joinr   rX   )r   r!   Z	expected1Z	expected2Z	expected3r[  )rs   r   r   r     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)r   r   r   r   r   r   )r   r   ru   rT   rp   r5   r   r   r   c                 S   "   g | ]\}}t |D ]}|q
qS r   r   )r   r   countr   r   r   r   r        " zOMersenneTwister_TestBasicOps.test_sample_counts_equivalence.<locals>.<listcomp>r   Z	abcdefghi)	rT   r{  r      r   rp   r<   r:   r;   r@  r~   c                 S   r  r   r   )r   Zletterr  r   r   r   r   r     r  )r   rj   r!   rW   r)   rX   r   rz  )
r   rj   r!   r   r   rm   s1Zexpandeds2rr   r   r   r   test_sample_counts_equivalence  s(   z;MersenneTwister_TestBasicOps.test_sample_counts_equivalence)r0   r1   r2   r   r   r   r=  rB  rE  rF  rG  rJ  rS  rV  rW  r  r  r  r  r   r^  r   r   r3  rh  ri  rp  r   r~  r  __classcell__r   r   r[  r   r6  J  s0    	
&!(
r6  r$  r]   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 )Nr]   r   g      @g?g
ö)$@g&Ԏgta@r$  gQfr!  g>@~)@g      @gA~      @g~\>g      @giE>g      @)r   r   gammar   r   )zZsqrt2piazr   r   r   r    s   






r  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                    r   r   r   r   gr   r   r     r   z5TestDistributions.test_zeroinputs.<locals>.<listcomp>rb   r   rp   r5   rT   r   ra  g      i@r!  UUUUUU?)r   r   r   rr   uniformparetovariateexpovariateweibullvariatevonmisesvariatenormalvariater   lognormvariategammavariatebetavariate
triangular)r   r   r   r  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 ]f\}}}}|d d  j|_ g }tt|D ]}z	|||  W q\ typ   Y q\w d }	}
|D ]}|	|7 }	|
|| d 7 }
qwt| | j|	  |dd|j|f d | j|
 d  |dd|j|f d qFd S )Nr   c                    s   g | ]}|t   qS r   )r   r   r*   r   r   r     rS   z2TestDistributions.test_avg_std.<locals>.<listcomp>r5   )r   r(  g      @g      @)r   r   r  gqq?g<ݚ?)r)  gUUUUUU?)gGz?r   r;   r:   )r  g      ?g?)r   r!  gUUUUUU?g?r   z%s%r)rO  msg)r   r   r   r  r  r  r  r   r  r  r  rr   rX   appendrf   rP  r0   )r   r  r   variateargsmuZ	sigmasqrdyr   r  r  rR  r   r  r   test_avg_std  sD   	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 ]
}| || | q`qWd S )Nri   )r(  r(  r(  )r(  r(  r(  r   r   r!  )r(  r   )r   r   r   )r   r(  )r   r   r  r  r  r   r  r   r  r  r  r  r   r)   )r   r  r*   r  r  rs   r   r   r   r   test_constant  s&   






zTestDistributions.test_constantc              
   C   sl   t  }d}dD ]+}dD ]&}t|D ]}|||}| jd|  ko&t jkn  d|||d qqqd S )Nri   )r   r    g@g@)r   ffffff@g     @@r   zCvonmisesvariate({}, {}) produced a result {} out of range [0, 2*pi])r  )r   r   r   r  rZ   TWOPIformat)r   r  r*   r  kappart  rj   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   r  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 )Nr6   r:   r   r;   r5   r   )rC   rk   r   r  r   r   r   r   test_gammavariate_errors@  rx   z*TestDistributions.test_gammavariate_errorszrandom.Random.randomc                 C   s&   g d|_ tdd}| |d d S )N):0yE>r]   r   g?r  g=
ףp=@rM   r   r  rP  r   rg  returned_valuer   r   r   #test_gammavariate_alpha_greater_oneK  s   
z5TestDistributions.test_gammavariate_alpha_greater_onec                 C   s$   dg|_ tdd}| |d d S )Ng?r   r8   g/qr	?r  r  r   r   r   !test_gammavariate_alpha_equal_oneV  s   z3TestDistributions.test_gammavariate_alpha_equal_onec                 C   s8   d}ddg|_ td|}td| }| || d S )Nr8   r  r   )rM   r   r  r  rP  )r   rg  betaZgammavariate_returned_valueZexpovariate_returned_valuer   r   r   4test_gammavariate_alpha_equal_one_equals_expovariatea  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?ra  gX Y?g=,6V?g.3333?gl%t?gK,	9?g7SvT?)r   _e_expr2  rM   r  rP  )r   rg  r  r  r2  alphar  r   re  r   r   r  r   r   r   ,test_gammavariate_alpha_between_zero_and_onel  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   )r^   r)   r   r  )r   Zgammavariate_mockr   r   r   test_betavariate_return_zero  s   z.TestDistributions.test_betavariate_return_zeroN)r0   r1   r2   r  r  r  r  r  r  r_   r`   r   r  r  r  r  r  r   r   r   r   r    s"     











Er  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 rK   )r   r   r   )r   newargr   r   r   r     s   zQTestRandomSubclassing.test_random_subclass_with_kwargs.<locals>.Subclass.__init__rK   )r0   r1   r2   r   r   r   r   r   Subclass  s    r  r5   )r  )r   r   )r   r  r   r   r    test_random_subclass_with_kwargs  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                         d tj| S )NzSubClass1.randomaddr   r   r   Zcalledr   r   r        
zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1.randomc                         d tj| |S )NSubClass1.getrandbitsr  r   r   r   r   r  r   r   r        
zWTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass1.getrandbitsN)r0   r1   r2   r   r   r   r  r   r   	SubClass1  s    r  r&  r  c                          e Zd Z fddZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass2c                    r  )NSubClass2.randomr  r   r  r   r   r     r  zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass2.randomNr0   r1   r2   r   r   r  r   r   	SubClass2      r  r  c                       r  )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass3c                    r  )NSubClass3.getrandbitsr  r   r  r   r   r     r  zWTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass3.getrandbitsNr0   r1   r2   r   r   r  r   r   	SubClass3  r  r  r  c                       r  )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass4c                    r  )NSubClass4.randomr  r   r  r   r   r     r  zRTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass4.randomNr  r   r  r   r   	SubClass4  r  r  r  c                       r  )zHTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin1c                    r  )NMixin1.randomr  r   r  r   r   r     r  zOTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin1.randomNr  r   r  r   r   Mixin1  r  r  c                       r  )zHTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin2c                    r  )NMixin2.getrandbitsr  r   r  r   r   r     r  zTTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.Mixin2.getrandbitsNr  r   r  r   r   Mixin2  r  r  c                   @      e Zd ZdS )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass5Nr0   r1   r2   r   r   r   r   	SubClass5      r  r  c                   @   r  )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass6Nr  r   r   r   r   	SubClass6  r  r  r  c                   @   r  )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass7Nr  r   r   r   r   	SubClass7
  r  r  c                   @   r  )zKTestRandomSubclassing.test_subclasses_overriding_methods.<locals>.SubClass8Nr  r   r   r   r   	SubClass8  r  r  )r   r   rY   r   r)   )r   r  r  r  r  r  r  r  r  r  r  r   r  r   "test_subclasses_overriding_methods  sD   z8TestRandomSubclassing.test_subclasses_overriding_methodsN)r0   r1   r2   r  r  r   r   r   r   r    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@)rP  r   NV_MAGICCONSTr  LOG4SG_MAGICCONSTr   r   r   r   testMagicConstants  s   zTestModule.testMagicConstantsc                 C   s    |  ttjtttk d S rK   )rZ   rY   r   __all__dirr   r   r   r   test__all__  s    zTestModule.test__all__forkzfork() requiredc              	   C   s   t  \}}t  }|dkrFz1td}t|d}|t| W d    n1 s+w   Y  W t d d S W t d d S t d w t 	| td}t|d}t
| }W d    n1 sfw   Y  | || tj|dd d S )Nr   r   wr   )exitcode)ospiper  r   r   r   writerv   _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)
r0   r1   r2   r  r  r_   
skipUnlesshasattrr  r  r   r   r   r   r    s
    r  __main__)&r_   Zunittest.mockr   r  r#   r   r   Ztest.supportr   	functoolsr   rU  r   r   r   r   r   r   r	   Z	fractionsr
   collectionsr   r   r   r5  rL   ZSystemRandom_availabler  ZTestCaser   r6  r  r  r  r  r0   mainr   r   r   r   <module>   sL        +
     V]#