o
    6aA@                     @   s  d dl Z d dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
 d dlZd dlmZmZmZmZmZmZmZmZmZ d dlmZ zd dlZdZW n eyQ   dZY nw zd dlZdZW n eye   dZY nw ejjdkrndZe j e j!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.G dd  d Z/G d!d" d"e/Z0G d#d$ d$e/Z1G d%d& d&e/Z2G d'd( d(e/Z3G d)d* d*e/Z4G d+d, d,Z5dS )-    N)join)assert_equalassert_allcloseassert_array_equalassert_raises)		GeneratorMT19937PCG64	PCG64DXSMPhiloxRandomStateSeedSequenceSFC64default_rng)	interfaceFT   c                 C   sh   | D ]/}t | | trt| | ||  qt | | tjr't| | ||  q| | || ks1J qd S N)
isinstancedictassert_state_equalnpndarrayr   )actualtargetkey r   @/usr/lib/python3/dist-packages/numpy/random/tests/test_direct.pyr   '   s   r   c                 C   sr   t | } t j| t d? t jd}t d}t j| |@ t jd}t ||g }|t d? d }|t jS )N    dtype    	         >)r   uint64arrayuint32column_stackravelastypefloat32)xupperlowerjoinedoutr   r   r   uniform32_from_uint641   s   

r/   c                 C   sF   t | t d? } t | t d@ } | t d? d }|t jS )N   r    r!   r"   )r   r#   r%   r(   r)   )r*   r.   r   r   r   uniform32_from_uint53;   s   r1   c                 C      | t d? d S )Nr!   r"   )r   r%   r*   r   r   r   uniform32_from_uint32B      r4   c                 C   s4   |dkrt | S |dkrt| S |dkrt| S t)N@   5   r   )r/   r1   r4   NotImplementedErrorr*   bitsr   r   r   uniform32_from_uintF   s   r;   c                 C   s$   |dv rt | S |dkrt| S d S )N)r6   ?   r7   r   )uniform_from_uint64uniform_from_uint32r9   r   r   r   uniform_from_uintQ   s
   r?   c                 C   r2   )N   g      <)r   r#   r3   r   r   r   r=   X   r5   r=   c                 C   s`   t t| d }tdt| dD ]}| | d? }| |d  d? }|d | d ||d < q|S )N   r      r      g      Ag      @C)r   emptylenrange)r*   r.   iabr   r   r   r>   \   s   r>   c                 C   s   |  tjd S )N      ?)viewr   doubler3   r   r   r   uniform_from_dsfmte   s   rM   c           
      C   s   |dv r	t | }n|dkrt| }nt| }g }d}d }}t||k rtd}|dks.|dkrTd||  d }d||d   d }|| ||  }|d7 }|dks.|dks.td	t| | }	||	|  ||	|  t||k s$|d | S )
N)r6   r<   r   r           rA   rJ   g       @r   g       )r=   r>   rM   rE   r   sqrtlogappend)
r*   nr:   doublesgausslocx1x2r2fr   r   r   gauss_from_uinti   s*   

rZ   c                  C   s   ddl m} m}m} ttdddd}|d tdi |j}t|j|j t|j	|j	 t
t|  t
t| | }t
t|jd t|ddksMJ d S )Nr   )ISeedSequenceISpawnableSeedSequenceSeedlessSeedSequence
   )r   rA   rC   )	spawn_key	pool_sizer   )numpy.random.bit_generatorr[   r\   r]   r   rF   spawnstater   n_children_spawnedr   	TypeErrorr8   generate_staterE   )r[   r\   r]   s1s2dummyr   r   r   test_seedsequence   s   


rj   c                   @   s   e Zd ZejZi  ZZedd Z	e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edd d!d" Zejjed#d d$d% Zd&d' Zd(S ))Basec                 C   s*   t | _d| _tj| _t| _g | _g | _	d S )Nr6   )
r	   bit_generatorr:   r   r#   r   re   seed_error_typeinvalid_init_typesinvalid_init_valuesclsr   r   r   setup_class   s   
zBase.setup_classc                 C   s   t |=}| }|d}dd |dd  D }g }|D ]}|t|dd  d q|tj|| jddW  d    S 1 sDw   Y  d S )	N,c                 S   s   g | ]	}t | d qS )r   )intstrip).0sr   r   r   
<listcomp>   s    z"Base._read_csv.<locals>.<listcomp>r   r   r   )seeddata)	openreadlinesplitrQ   rt   ru   r   r$   r   )rq   filenamecsvrz   r{   liner   r   r   	_read_csv   s   

 $zBase._read_csvc                 C   s   | j | jd  }|d}t|| jd  | j | jd  }| }t|| jd d  | j | jd  }|d}t|| jd  d S )Nrz     r{   r   )rl   data1
random_rawr   data2selfrl   uintsr   r   r   test_raw   s   

zBase.test_rawc                 C   sF   | j | jd  }|jdd}|d u sJ |jddd}|d u s!J d S )Nrz   F)outputr   )rl   r   r   r   r   r   r   test_random_raw   s
   zBase.test_random_rawc                 C   sx   d}t | j| jd  }||}t|t| jd || j t | j| jd  }|d}t|t| jd || j d S )N   rz   r{   )r   rl   r   standard_normalr   rZ   r:   r   )r   rR   rsrT   r   r   r   test_gauss_inv   s   

zBase.test_gauss_invc                 C   s   t | j| jd  }t| jd | j}|t|}t|| t|j	t
j t | j| jd  }t| jd | j}|t|}t|| t|j	t
j d S )Nrz   r{   )r   rl   r   r?   r:   randomrE   r   r   r   r   float64r   r   r   valsuniformsr   r   r   test_uniform_double   s   

zBase.test_uniform_doublec                 C   s   t | j| jd  }t| jd | j}|jt|tjd}t	|| t
|jtj t | j| jd  }t| jd | j}|jt|tjd}t	|| t
|jtj d S )Nrz   r{   r   )r   rl   r   r;   r:   r   rE   r   r)   r   r   r   r   r   r   r   r   test_uniform_float   s   

zBase.test_uniform_floatc                 C   sL   t | j| jd  }dt|v sJ t|d ddt|v s$J d S Nrz   r   z#xXr*   )r   rl   r   repridr+   replacer   r   r   r   r   	test_repr   s   (zBase.test_reprc                 C   sd   t | j| jd  }dt|v sJ t| jjt|v sJ t|d ddt|vs0J d S r   )r   rl   r   str__name__r   r+   r   r   r   r   r   test_str   s   (zBase.test_strc           	      C   s   dd l }| j| jd  }|j}||}||}|j}tt|dt|d ||us1J t	|| t
d}|||}t|j|j d S )Nr   rz   r   d   )picklerl   r   rc   dumpsloadsr   r   r   r   r   r   )	r   r   rl   rc   
bitgen_pklreloadedreloaded_statessaar   r   r   test_pickle   s   


zBase.test_picklec                 C   sH   | j | jd  }tt dh|_W d    d S 1 sw   Y  d S )Nrz   1)rl   r   pytestraisesre   rc   r   rl   r   r   r   test_invalid_state_type  s   
"zBase.test_invalid_state_typec                 C   sT   | j | jd  }|j}d|d< tt ||_W d    d S 1 s#w   Y  d S )Nrz   otherBitGeneratorrl   )rl   r   rc   r   r   
ValueError)r   rl   rc   r   r   r   test_invalid_state_value  s   "zBase.test_invalid_state_valuec              	   C   sH   | j }| jD ]}tt ||  W d    n1 sw   Y  qd S r   )rl   rn   r   r   re   r   rl   str   r   r   test_invalid_init_type  s   

zBase.test_invalid_init_typec              	   C   sL   | j }| jD ]}tttf ||  W d    n1 sw   Y  qd S r   )rl   ro   r   r   r   OverflowErrorr   r   r   r   test_invalid_init_values  s   

zBase.test_invalid_init_valuesc                 C   sb   | j | jd  }|d |dd tt |dd W d    d S 1 s*w   Y  d S )Nrz   r   rL   int32)rl   r   
_benchmarkr   r   r   r   r   r   r   test_benchmark  s   
"zBase.test_benchmarkzcffi not available)reasonc                 C   :   | j | jd  }|j}t|tsJ |j}||u sJ d S Nrz   )rl   r   cffir   r   )r   rl   cffi_interfaceother_cffi_interfacer   r   r   	test_cffi!  
   zBase.test_cffizctypes not availablec                 C   r   r   )rl   r   ctypesr   r   )r   rl   ctypes_interfaceother_ctypes_interfacer   r   r   test_ctypes)  r   zBase.test_ctypesc                 C   s,   | j | jd  }|j}| }t|| d S r   )rl   r   rc   __getstate__r   )r   rl   rc   	alt_stater   r   r   test_getstate1  s   zBase.test_getstateN) r   
__module____qualname__r   r#   r   r   r   classmethodrr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markskipifMISSING_CFFIr   MISSING_CTYPESr   r   r   r   r   r   rk      s2    




rk   c                   @   s    e Zd Zedd Zdd ZdS )
TestPhiloxc                 C   sb   t | _d| _tj| _| ttd| _	| ttd| _
t| _g | _ddd d dd d fg| _d S )	Nr6   z./data/philox-testset-1.csvz./data/philox-testset-2.csv)r   Nr   ry   rA   i  r   )r   rl   r:   r   r#   r   r   r   pwdr   r   re   rm   rn   ro   rp   r   r   r   rr   9  s   zTestPhilox.setup_classc                 C   sF   | j | jd  }|j}| j |d d |d d d}t|j|j d S )Nrz   rc   counterr   )r   r   )rl   r   rc   r   )r   rl   rc   keyedr   r   r   test_set_keyF  s   
zTestPhilox.test_set_keyN)r   r   r   r   rr   r   r   r   r   r   r   8  s    
r   c                   @   (   e Zd Zedd Zdd Zdd ZdS )	TestPCG64c                 C   ^   t | _d| _tj| _| ttd| _	| ttd| _
ttf| _dd gfdg| _dg| _d S )Nr6   z./data/pcg64-testset-1.csvz./data/pcg64-testset-2.csvg	@r   Nr   )r	   rl   r:   r   r#   r   r   r   r   r   r   r   re   rm   rn   ro   rp   r   r   r   rr   O     
zTestPCG64.setup_classc                 C      t | j| jd  }|jj}d}|j| |d}||j_|jdd |  |d}||j_|jddd  |  |d}||ksIJ ||ksOJ d S Nrz   l        PAOi_n r^   rA      r   rl   r   rc   advanceintegersr   r   rc   stepval_negval_posval_bigr   r   r   test_advance_symmetryZ     


zTestPCG64.test_advance_symmetryc                 C   sl   t | d}|j}|jd }d}|d |ksJ |tdd dD  |jd }d}|d |ks4J d S )N   %@
 rc   	   r%4=Kvu1/ c                 s       | ]}d | V  qdS rA   Nr   rv   rG   r   r   r   	<genexpr>o      z/TestPCG64.test_advange_large.<locals>.<genexpr>`   r6   r   r0         rA   r   l	   @H}.|zKLfbe r   rl   rc   r   sumr   r   pcgrc   initial_stateadvanced_stater   r   r   test_advange_largei  s   

zTestPCG64.test_advange_largeNr   r   r   r   rr   r   r   r   r   r   r   r   N  
    

r   c                   @   r   )TestPCG64DXSMc                 C   r   )Nr6   z./data/pcg64dxsm-testset-1.csvz./data/pcg64dxsm-testset-2.csvr   r   r   )r
   rl   r:   r   r#   r   r   r   r   r   r   r   re   rm   rn   ro   rp   r   r   r   rr   v  r   zTestPCG64DXSM.setup_classc                 C   r   r   r   r   r   r   r   r     r   z#TestPCG64DXSM.test_advance_symmetryc                 C   sl   t | d}|j}|j}d}|d d |ksJ |tdd dD  |jd }d}|d |ks4J d S )Nr   r   rc   c                 s   r   r   r   r   r   r   r   r     r   z3TestPCG64DXSM.test_advange_large.<locals>.<genexpr>r   l	   oF	[UmO1X9} r   r   r   r   r   r     s   
z TestPCG64DXSM.test_advange_largeNr   r   r   r   r   r   u  r   r   c                   @   r   )TestMT19937c                 C   sP   t | _d| _tj| _| ttd| _	| ttd| _
t| _g | _dg| _d S )Nr   z./data/mt19937-testset-1.csvz./data/mt19937-testset-2.csvr   )r   rl   r:   r   r%   r   r   r   r   r   r   r   rm   rn   ro   rp   r   r   r   rr     s   zTestMT19937.setup_classc                 C   s   t t| jttjg t t| jttj g t t| jttjtj g t t| jtdtjg t t| jtjg t t| jdtjg d S )Nr   )r   re   rl   r   r$   pi)r   r   r   r   test_seed_float_array  s   z!TestMT19937.test_seed_float_arrayc                 C   s   t | j| jd  }|j}|j}|d}|d |d d |d d f}||_|d}t|| |d }||_|d}t|| d S )Nrz   i   rl   rc   r   pos)r   rN   )r   rl   r   rc   r   r   )r   r   rl   rc   desiredtupr   r   r   r   test_state_tuple  s   




zTestMT19937.test_state_tupleN)r   r   r   r   rr   r  r  r   r   r   r   r     s
    

r   c                   @   s   e Zd Zedd ZdS )	TestSFC64c                 C   r   )Nr6   z./data/sfc64-testset-1.csvz./data/sfc64-testset-2.csvr   r   r   )r   rl   r:   r   r#   r   r   r   r   r   r   r   re   rm   rn   ro   rp   r   r   r   rr     s   
zTestSFC64.setup_classN)r   r   r   r   rr   r   r   r   r   r    s    r  c                   @   s   e Zd Zdd Zdd ZdS )TestDefaultRNGc                 C   s4   dddddgffD ]}t | }t|jtsJ q	d S )Nr   r   )  r	  i.  )r   r   rl   r	   )r   argsrgr   r   r   	test_seed  s   zTestDefaultRNG.test_seedc                 C   sB   t  }t|}|j|u sJ t|}||u sJ |j|u sJ d S r   )r   r   rl   )r   bgr  rg2r   r   r   test_passthrough  s   zTestDefaultRNG.test_passthroughN)r   r   r   r  r  r   r   r   r   r    s    r  )6osos.pathr   sysnumpyr   numpy.testingr   r   r   r   r   numpy.randomr   r   r	   r
   r   r   r   r   r   numpy.random._commonr   r   r   ImportErrorr   r   flagsoptimizepathdirnameabspath__file__r   r   r/   r1   r4   r;   r?   r=   r>   rM   rZ   rj   rk   r   r   r   r   r  r  r   r   r   r   <module>   sT    ,

	 %''$