U
    O8c-@                     @   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k
r   dZY nX zd dlZdZW n ek
r   dZY nX ejjdkrd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.dd  Z/G d!d" d"Z0G d#d$ d$e0Z1G d%d& d&e0Z2G d'd( d(e0Z3G d)d* d*e0Z4G d+d, d,e0Z5G d-d. d.Z6d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rNt| | ||  q| | || kstqd S N)
isinstancedictassert_state_equalnpZndarrayr   AssertionError)actualtargetkey r   B/tmp/pip-unpacked-wheel-fd_gsd75/numpy/random/tests/test_direct.pyr   '   s    r   c                 C   s   | t d? d t jS )N   g      p>)r   uint32Zastypefloat32)ur   r   r   uint32_to_float321   s    r!   c                 C   s\   t | } t j| t d? t jd}t d}t j| |@ t jd}t ||g }t|S )N    dtype    )r   uint64arrayr   Zcolumn_stackZravelr!   )xupperlowerZjoinedr   r   r   uniform32_from_uint645   s    

r+   c                 C   s0   t | t d? } t | t d@ } t| S )N   r%   )r   r&   r   r!   r(   r   r   r   uniform32_from_uint53>   s    r.   c                 C   s   t | S r   )r!   r-   r   r   r   uniform32_from_uint32D   s    r/   c                 C   s8   |dkrt | S |dkr t| S |dkr0t| S td S )N@   5   r"   )r+   r.   r/   NotImplementedErrorr(   bitsr   r   r   uniform32_from_uintH   s    r5   c                 C   s$   |dkrt | S |dkr t| S d S )N)r0   ?   r1   r"   )uniform_from_uint64uniform_from_uint32r3   r   r   r   uniform_from_uintS   s    r9   c                 C   s   | t d? d S )N   g      <)r   r&   r-   r   r   r   r7   Z   s    r7   c                 C   s`   t t| d }tdt| dD ]8}| | d? }| |d  d? }|d | d ||d < q"|S )N   r      r      g      Ag      @C)r   emptylenrange)r(   outiabr   r   r   r8   ^   s    r8   c                 C   s   |  tjd S )N      ?)viewr   doubler-   r   r   r   uniform_from_dsfmtg   s    rH   c           
      C   s   |dkrt | }n|dkr$t| }nt| }g }d}d }}t||k rd}|dks\|dkrd||  d }d||d   d }|| ||  }|d7 }qLtd	t| | }	||	|  ||	|  q<|d | S )
N)r0   r6   r"   r           r;   rE   g       @r   g       )r7   r8   rH   r?   r   sqrtlogappend)
r(   nr4   Zdoublesgausslocx1Zx2Zr2fr   r   r   gauss_from_uintk   s&    


rR   c                  C   s   ddl m} m}m} ttdddd}|d tf |j}t|j|j t|j	|j	 t
t|  t
t| | }t
t|jd t|ddkstd S )Nr   )ISeedSequenceISpawnableSeedSequenceSeedlessSeedSequence
   )r   r;   r=   )Z	spawn_keyZ	pool_size)Znumpy.random.bit_generatorrS   rT   rU   r   r@   spawnstater   Zn_children_spawnedr   	TypeErrorr2   Zgenerate_stater?   r   )rS   rT   rU   s1s2dummyr   r   r   test_seedsequence   s    


r]   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 )Nr0   )
r	   bit_generatorr4   r   r&   r$   rY   seed_error_typeinvalid_init_typesinvalid_init_valuesclsr   r   r   setup_class   s    zBase.setup_classc              
   C   s   t |x}| }|d}dd |dd  D }g }|D ]"}|t|dd  d q:|tj|| jddW  5 Q R  S Q R X 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splitrL   rg   rh   r   r'   r$   )rd   filenamecsvrm   rn   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 )Nrm     rn   r   )r_   data1
random_rawr   data2selfr_   Zuintsr   r   r   test_raw   s    

zBase.test_rawc                 C   sF   | j | jd  }|jdd}|d ks(t|jddd}|d ksBtd S )Nrm   F)outputrv   )r_   rw   rx   r   rz   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   rm   rn   )r   r_   rw   standard_normalr   rR   r4   ry   )r{   rM   rsrN   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 )Nrm   rn   )r   r_   rw   r9   r4   randomr?   r   r   r$   r   Zfloat64ry   r{   r   valsZ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 )Nrm   rn   r#   )r   r_   rw   r5   r4   r   r?   r   r   r   r   r$   ry   r   r   r   r   test_uniform_float   s    

zBase.test_uniform_floatc                 C   sL   t | j| jd  }dt|ks$tt|d ddt|ksHtd S Nrm   r   z#xXr(   )r   r_   rw   reprr   idr)   replacer{   r   r   r   r   	test_repr   s    zBase.test_reprc                 C   sd   t | j| jd  }dt|ks$tt| jjt|ks<tt|d ddt|ks`td S r   )	r   r_   rw   strr   __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 ||k	sbt	t
|| td}|||}t|j|j d S )Nr   rm   rv   d   )pickler_   rw   rX   dumpsloadsr   r   r   r   r   r   r   )	r{   r   r_   rX   Z
bitgen_pklZreloadedZreloaded_statessZaar   r   r   test_pickle   s    


zBase.test_picklec              	   C   s2   | j | jd  }tt dh|_W 5 Q R X d S )Nrm   1)r_   rw   pytestraisesrY   rX   r{   r_   r   r   r   test_invalid_state_type  s    zBase.test_invalid_state_typec              	   C   s>   | j | jd  }|j}d|d< tt ||_W 5 Q R X d S )Nrm   ZotherBitGeneratorr_   )r_   rw   rX   r   r   
ValueError)r{   r_   rX   r   r   r   test_invalid_state_value
  s
    zBase.test_invalid_state_valuec              
   C   s4   | j }| jD ]"}tt ||  W 5 Q R X qd S r   )r_   ra   r   r   rY   r{   r_   str   r   r   test_invalid_init_type  s    
zBase.test_invalid_init_typec              
   C   s8   | j }| jD ]&}tttf ||  W 5 Q R X qd S r   )r_   rb   r   r   r   OverflowErrorr   r   r   r   test_invalid_init_values  s    
zBase.test_invalid_init_valuesc              	   C   sL   | j | jd  }|d |dd tt |dd W 5 Q R X d S )Nrm   r   rG   Zint32)r_   rw   Z
_benchmarkr   r   r   r   r   r   r   test_benchmark  s
    
zBase.test_benchmarkzcffi not available)reasonc                 C   s:   | j | jd  }|j}t|ts$t|j}||ks6td S Nrm   )r_   rw   cffir   r   r   )r{   r_   Zcffi_interfaceZother_cffi_interfacer   r   r   	test_cffi$  s
    zBase.test_cffizctypes not availablec                 C   s:   | j | jd  }|j}t|ts$t|j}||ks6td S r   )r_   rw   ctypesr   r   r   )r{   r_   Zctypes_interfaceZother_ctypes_interfacer   r   r   test_ctypes,  s
    zBase.test_ctypesc                 C   s,   | j | jd  }|j}| }t|| d S r   )r_   rw   rX   __getstate__r   )r{   r_   rX   Z	alt_stater   r   r   test_getstate4  s    zBase.test_getstateN) r   
__module____qualname__r   r&   r$   ry   rw   classmethodre   ru   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   markZskipifMISSING_CFFIr   MISSING_CTYPESr   r   r   r   r   r   r^      s0   




r^   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 )	Nr0   z./data/philox-testset-1.csvz./data/philox-testset-2.csv)r   Nr   rl   r;   i  r   )r   r_   r4   r   r&   r$   ru   r   pwdrw   ry   rY   r`   ra   rb   rc   r   r   r   re   <  s    zTestPhilox.setup_classc                 C   sF   | j | jd  }|j}| j |d d |d d d}t|j|j d S )Nrm   rX   counterr   )r   r   )r_   rw   rX   r   )r{   r_   rX   Zkeyedr   r   r   test_set_keyI  s    
zTestPhilox.test_set_keyN)r   r   r   r   re   r   r   r   r   r   r   ;  s   
r   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )	TestPCG64c                 C   s^   t | _d| _tj| _| ttd| _	| ttd| _
ttf| _dd gfdg| _dg| _d S )Nr0   z./data/pcg64-testset-1.csvz./data/pcg64-testset-2.csvg	@r   Nr   )r	   r_   r4   r   r&   r$   ru   r   r   rw   ry   r   rY   r`   ra   rb   rc   r   r   r   re   R  s    
zTestPCG64.setup_classc                 C   s   t | j| jd  }|jj}d}|j| |d}||j_|jdd |  |d}||j_|jddd  |  |d}||kst||kstd S Nrm   l        PAOi_n rV   r;      r   r_   rw   rX   advanceintegersr   r{   r   rX   stepZval_negZval_posZval_bigr   r   r   test_advance_symmetry]  s    


zTestPCG64.test_advance_symmetryc                 C   sl   t | d}|j}|jd }d}|d |ks2t|tdd dD  |jd }d}|d |kshtd S )N   %@
 rX   	   r%4=Kvu1/ c                 s   s   | ]}d | V  qdS r;   Nr   ri   rB   r   r   r   	<genexpr>r  s     z/TestPCG64.test_advange_large.<locals>.<genexpr>`   r0   r"   r,   r      r;   r   l	   @H}.|zKLfbe r   r_   rX   r   r   sumr{   r   ZpcgrX   Zinitial_stateZadvanced_stater   r   r   test_advange_largel  s    

zTestPCG64.test_advange_largeNr   r   r   r   re   r   r   r   r   r   r   r   Q  s   

r   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )TestPCG64DXSMc                 C   s^   t | _d| _tj| _| ttd| _	| ttd| _
ttf| _dd gfdg| _dg| _d S )Nr0   z./data/pcg64dxsm-testset-1.csvz./data/pcg64dxsm-testset-2.csvr   r   r   )r
   r_   r4   r   r&   r$   ru   r   r   rw   ry   r   rY   r`   ra   rb   rc   r   r   r   re   y  s    
zTestPCG64DXSM.setup_classc                 C   s   t | j| jd  }|jj}d}|j| |d}||j_|jdd |  |d}||j_|jddd  |  |d}||kst||kstd S r   r   r   r   r   r   r     s    


z#TestPCG64DXSM.test_advance_symmetryc                 C   sl   t | d}|j}|j}d}|d d |ks2t|tdd dD  |jd }d}|d |kshtd S )Nr   r   rX   c                 s   s   | ]}d | V  qdS r   r   r   r   r   r   r     s     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   x  s   

r   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )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   r_   r4   r   r   r$   ru   r   r   rw   ry   r   r`   ra   rb   rc   r   r   r   re     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   rY   r_   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 )Nrm   i   r_   rX   r   pos)r   rI   )r   r_   rw   rX   r   r   )r{   r   r_   rX   Zdesiredtupr   r   r   r   test_state_tuple  s    




zTestMT19937.test_state_tupleN)r   r   r   r   re   r   r   r   r   r   r   r     s   

r   c                   @   s   e Zd Zedd ZdS )	TestSFC64c                 C   s^   t | _d| _tj| _| ttd| _	| ttd| _
ttf| _dd gfdg| _dg| _d S )Nr0   z./data/sfc64-testset-1.csvz./data/sfc64-testset-2.csvr   r   r   )r   r_   r4   r   r&   r$   ru   r   r   rw   ry   r   rY   r`   ra   rb   rc   r   r   r   re     s    
zTestSFC64.setup_classN)r   r   r   r   re   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tqd S )Nr   r   )  r   i.  )r   r   r_   r	   r   )r{   argsrgr   r   r   	test_seed  s    zTestDefaultRNG.test_seedc                 C   sB   t  }t|}|j|kstt|}||ks0t|j|ks>td S r   )r   r   r_   r   )r{   bgr   Zrg2r   r   r   test_passthrough  s    zTestDefaultRNG.test_passthroughN)r   r   r   r   r   r   r   r   r   r     s   r   )7osos.pathr   sysZnumpyr   Znumpy.testingr   r   r   r   r   Znumpy.randomr   r   r	   r
   r   r   r   r   r   Znumpy.random._commonr   r   r   ImportErrorr   r   flagsoptimizepathdirnameabspath__file__r   r   r!   r+   r.   r/   r5   r9   r7   r8   rH   rR   r]   r^   r   r   r   r   r   r   r   r   r   r   <module>   sP   ,


		 %''$