B
    .ufA@                 @   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 yd dlZdZW n ek
r   dZY nX y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.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   sl   xf| D ]^}t | | tr,t| | ||  qt | | tjrPt| | ||  q| | || kstqW d S )N)
isinstancedictassert_state_equalnpZndarrayr   AssertionError)actualtargetkey r   `/home/ankuromar296_gmail_com/myenv/lib/python3.7/site-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    )dtypel    	   g      >)r   uint64arrayuint32Zcolumn_stackZravelastypefloat32)xupperlowerZ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   l    r   g      >)r   r   r!   r"   r#   )r$   r'   r   r   r   uniform32_from_uint53;   s    r*   c             C   s   | t d? d S )Nr   g      >)r   r!   )r$   r   r   r   uniform32_from_uint32B   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_uintF   s    r0   c             C   s$   |dkrt | S |dkr t| S d S )N)r,   ?   r-   r   )uniform_from_uint64uniform_from_uint32)r$   r/   r   r   r   uniform_from_uintQ   s    r4   c             C   s   | t d? d S )N   g      <)r   r   )r$   r   r   r   r2   X   s    r2   c             C   sd   t t| d }xLtdt| dD ]8}| | d? }| |d  d? }|d | d ||d < q$W |S )N   r      r      g      Ag      @C)r   emptylenrange)r$   r'   iabr   r   r   r3   \   s    r3   c             C   s   |  tjd S )Ng      ?)viewr   double)r$   r   r   r   uniform_from_dsfmte   s    rA   c       
      C   s   |dkrt | }n|dkr$t| }nt| }g }d}d }}xt||k rd}xP|dks`|dkrd||  d }d||d   d }|| ||  }|d7 }qPW td	t| | }	||	|  ||	|  q>W |d | S )
N)r,   r1   r   r   g        r6   g      ?g       @r   g       )r2   r3   rA   r:   r   sqrtlogappend)
r$   nr/   Zdoublesgausslocx1Zx2r2fr   r   r   gauss_from_uinti   s&    

rK   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   r6   r8   )Z	spawn_keyZ	pool_size)Znumpy.random.bit_generatorrL   rM   rN   r   r;   spawnstater   Zn_children_spawnedr   	TypeErrorr.   Zgenerate_stater:   r   )rL   rM   rN   s1s2dummyr   r   r   test_seedsequence   s    


rV   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 )Nr,   )
r	   bit_generatorr/   r   r   r   rR   seed_error_typeinvalid_init_typesinvalid_init_values)clsr   r   r   setup_class   s    zBase.setup_classc          	   C   s   t |p}| }|d}dd |dd  D }g }x*|D ]"}|t|dd  d q<W |tj|| jdd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splitrD   r_   r`   r   r    r   )r\   filenamecsvre   rf   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 )Nre   i  rf   r   )rX   data1
random_rawr   data2)selfrX   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 )Nre   F)outputi  )rX   rn   ro   r   )rq   rX   rr   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   re   rf   )r   rX   rn   standard_normalr   rK   r/   rp   )rq   rE   rsrF   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 )Nre   rf   )r   rX   rn   r4   r/   randomr:   r   r   r   r   Zfloat64rp   )rq   rx   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 )Nre   rf   )r   )r   rX   rn   r0   r/   rz   r:   r   r#   r   r   r   rp   )rq   rx   r{   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 )Nre   r   z#xXr$   )r   rX   rn   reprr   idr%   replace)rq   rx   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 )Nre   r   z#xr   r$   )	r   rX   rn   strr   __name__r   r%   r   )rq   rx   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   re   i  d   )picklerX   rn   rQ   dumpsloadsr   r   rw   r   r   r   r   )	rq   r   rX   rQ   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 d Q R X d S )Nre   1)rX   rn   pytestraisesrR   rQ   )rq   rX   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 d Q R X d S )Nre   ZotherBitGeneratorrX   )rX   rn   rQ   r   r   
ValueError)rq   rX   rQ   r   r   r   test_invalid_state_value  s
    zBase.test_invalid_state_valuec          
   C   s8   | j }x,| jD ]"}tt ||  W d Q R X qW d S )N)rX   rZ   r   r   rR   )rq   rX   str   r   r   test_invalid_init_type  s    zBase.test_invalid_init_typec          
   C   s<   | j }x0| jD ]&}tttf ||  W d Q R X qW d S )N)rX   r[   r   r   r   OverflowError)rq   rX   r   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 d Q R X d S )Nre   r   r@   Zint32)rX   rn   Z
_benchmarkr   r   r   )rq   rX   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 )Nre   )rX   rn   cffir   r   r   )rq   rX   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 )Nre   )rX   rn   ctypesr   r   r   )rq   rX   Zctypes_interfaceZother_ctypes_interfacer   r   r   test_ctypes)  s
    zBase.test_ctypesc             C   s,   | j | jd  }|j}| }t|| d S )Nre   )rX   rn   rQ   __getstate__r   )rq   rX   rQ   Z	alt_stater   r   r   test_getstate1  s    zBase.test_getstateN) r   
__module____qualname__r   r   r   rp   rn   classmethodr]   rm   rs   ru   ry   r}   r~   r   r   r   r   r   r   r   r   r   markZskipifMISSING_CFFIr   MISSING_CTYPESr   r   r   r   r   r   rW      s(   	rW   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 )	Nr,   z./data/philox-testset-1.csvz./data/philox-testset-2.csv)r   Nr   )rd   r6   i  r   )r   rX   r/   r   r   r   rm   r   pwdrn   rp   rR   rY   rZ   r[   )r\   r   r   r   r]   9  s    zTestPhilox.setup_classc             C   sF   | j | jd  }|j}| j |d d |d d d}t|j|j d S )Nre   rQ   counterr   )r   r   )rX   rn   rQ   r   )rq   rX   rQ   Zkeyedr   r   r   test_set_keyF  s
    zTestPhilox.test_set_keyN)r   r   r   r   r]   r   r   r   r   r   r   8  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 )Nr,   z./data/pcg64-testset-1.csvz./data/pcg64-testset-2.csv)g	@)r   N)rd   )r	   rX   r/   r   r   r   rm   r   r   rn   rp   r   rR   rY   rZ   r[   )r\   r   r   r   r]   O  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 )Nre   l        PAOi_n rO   r6      )r   rX   rn   rQ   advanceintegersr   )rq   rx   rQ   stepval_negval_posval_bigr   r   r   test_advance_symmetryZ  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 )Nl   %@
 rQ   l	   r%4=Kvu1/ c             s   s   | ]}d | V  qdS )r6   Nr   )ra   r<   r   r   r   	<genexpr>o  s    z/TestPCG64.test_advange_large.<locals>.<genexpr>)`   r,   r   r)         r6   r   l	   @H}.|zKLfbe )r   rX   rQ   r   r   sum)rq   rx   pcgrQ   initial_stateadvanced_stater   r   r   test_advange_largei  s    

zTestPCG64.test_advange_largeN)r   r   r   r   r]   r   r   r   r   r   r   r   N  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 )Nr,   z./data/pcg64dxsm-testset-1.csvz./data/pcg64dxsm-testset-2.csv)g	@)r   N)rd   )r
   rX   r/   r   r   r   rm   r   r   rn   rp   r   rR   rY   rZ   r[   )r\   r   r   r   r]   v  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 )Nre   l        PAOi_n rO   r6   r   )r   rX   rn   rQ   r   r   r   )rq   rx   rQ   r   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 )Nl   %@
 l	   r%4=Kvu1/ rQ   c             s   s   | ]}d | V  qdS )r6   Nr   )ra   r<   r   r   r   r     s    z3TestPCG64DXSM.test_advange_large.<locals>.<genexpr>)r   r,   r   r)   r   r   r6   r   l	   oF	[UmO1X9} )r   rX   rQ   r   r   r   )rq   rx   r   rQ   r   r   r   r   r   r     s    
z TestPCG64DXSM.test_advange_largeN)r   r   r   r   r]   r   r   r   r   r   r   r   u  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.csv)rd   )r   rX   r/   r   r!   r   rm   r   r   rn   rp   r   rY   rZ   r[   )r\   r   r   r   r]     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   rR   rX   r   r    pi)rq   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 )Nre   i   rX   rQ   r   pos)r   g        )r   rX   rn   rQ   r   r   )rq   rx   rX   rQ   Zdesiredtupr   r   r   r   test_state_tuple  s    



zTestMT19937.test_state_tupleN)r   r   r   r   r]   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 )Nr,   z./data/sfc64-testset-1.csvz./data/sfc64-testset-2.csv)g	@)r   N)rd   )r   rX   r/   r   r   r   rm   r   r   rn   rp   r   rR   rY   rZ   r[   )r\   r   r   r   r]     s    
zTestSFC64.setup_classN)r   r   r   r   r]   r   r   r   r   r     s   r   c               @   s   e Zd Zdd Zdd ZdS )TestDefaultRNGc             C   s8   x2dddddgfgD ]}t | }t|jtstqW d S )Nr   )N)i  i  i.  )r   r   rX   r	   r   )rq   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 )N)r   r   rX   r   )rq   bgr   Z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   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+   r0   r4   r2   r3   rA   rK   rV   rW   r   r   r   r   r   r   r   r   r   r   <module>   sN   ,



	 %''$