a
    ç´«j3K  ã                   @   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y¢   dZY n0 zd dlZdZW n eyÊ   dZY n0 ejjdkrÜd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/d!d"„ Z0d#d$„ Z1G d%d&„ d&ƒZ2G d'd(„ d(e2ƒZ3G d)d*„ d*e2ƒZ4G d+d,„ d,e2ƒZ5G d-d.„ d.e2ƒZ6G d/d0„ d0e2ƒZ7G d1d2„ d2ƒZ8dS )3é    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J ‚qd S ©N)Ú
isinstanceÚdictÚassert_state_equalÚnpZndarrayr   )ÚactualÚtargetÚkey© r   ú]/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/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    r4   c                 C   s$   |dv rt | ƒS |dkr t| ƒS d S )N)r/   é?   r0   r!   )Úuniform_from_uint64Úuniform_from_uint32r2   r   r   r   Úuniform_from_uintS   s    r8   c                 C   s   | t  d¡? d S )Né   g       <)r   r%   r,   r   r   r   r6   Z   s    r6   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   r7   ^   s    r7   c                 C   s   |   tj¡d S )Nç      ð?)Úviewr   Údoubler,   r   r   r   Úuniform_from_dsfmtg   s    rG   c           
      C   sÜ   |dv rt | ƒ}n|dkr$t| ƒ}nt| ƒ}g }d}d }}t|ƒ|k rÐd}|dks\|dkršd||  d }d||d   d }|| ||  }|d7 }qLt d	t |¡ | ¡}	| |	| ¡ | |	| ¡ q<|d |… S )
N)r/   r5   r!   r   ç        r:   rD   g       @r   g       À)r6   r7   rG   r>   r   ÚsqrtÚlogÚappend)
r'   Únr3   ZdoublesÚgaussÚlocÚx1Zx2Ú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 i |j¤Ž}t|j|jƒ t|j	|j	ƒ t
t| ƒ t
t|ƒ |ƒ }t
t|jdƒ t| d¡ƒdksšJ ‚d S )Nr   )ÚISeedSequenceÚISpawnableSeedSequenceÚSeedlessSeedSequenceé
   )r   r:   r<   )Ú	spawn_keyZ	pool_size)Únumpy.random.bit_generatorrS   rT   rU   r   r?   ÚspawnÚstater   Ún_children_spawnedr   Ú	TypeErrorr1   Úgenerate_stater>   )rS   rT   rU   Ús1Ús2Údummyr   r   r   Útest_seedsequence„   s    


ra   c                     sÞ   t j ¡ } | jj‰ ˆ  d¡}‡ fdd„tdƒD ƒ}dd„ |D ƒ|ksHJ ‚| j d¡}‡ fdd„tddƒD ƒ}dd„ |D ƒ|ks‚J ‚|  d¡}‡ fdd„tdd	ƒD ƒ}d
d„ |D ƒ}||ks¾J ‚|d  ¡ |d  ¡ ksÚJ ‚dS )z? Test spawning new generators and bit_generators directly.
    r;   c                    s   g | ]}ˆ j |f ‘qS r   ©rW   ©Ú.0rA   ©Úseqr   r   Ú
<listcomp>�   ó    z+test_generator_spawning.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r   rb   )rd   Úcr   r   r   rg   ž   rh   c                    s   g | ]}ˆ j |f ‘qS r   rb   rc   re   r   r   rg   ¡   rh   rV   c                 S   s   g | ]}|j j‘qS r   )Úseed_seqrW   )rd   Úbgr   r   r   rg   ¢   rh   c                    s   g | ]}ˆ j |f ‘qS r   rb   rc   re   r   r   rg   ¥   rh   é   c                 S   s   g | ]}|j jj‘qS r   )Úbit_generatorrj   rW   )rd   Úrngr   r   r   rg   ¦   rh   r   r   N)r   Úrandomr   rm   rj   rY   r?   Úuniform)rn   Znew_ssZexpected_keysZnew_bgsZnew_rngsZ
found_keysr   re   r   Útest_generator_spawning—   s    


rq   c                  C   s¨   ddl m}  G dd„ dƒ}|  |¡ tj |ƒ ¡}tjtdd�� | 	d¡ W d   ƒ n1 s`0    Y  tjtdd�� |j
 	d¡ W d   ƒ n1 sš0    Y  d S )Nr   )rS   c                   @   s   e Zd Zejfdd„ZdS )z,test_non_spawnable.<locals>.FakeSeedSequencec                 S   s   t j||d�S )Nr"   )r   Zzeros)ÚselfZn_wordsr#   r   r   r   r]   ±   s    z;test_non_spawnable.<locals>.FakeSeedSequence.generate_stateN)Ú__name__Ú
__module__Ú__qualname__r   r   r]   r   r   r   r   ÚFakeSeedSequence°   s   rv   zThe underlying SeedSequence)Úmatchr;   )rX   rS   Úregisterr   ro   r   ÚpytestÚraisesr\   rY   rm   )rS   rv   rn   r   r   r   Útest_non_spawnable­   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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	   rm   r3   r   r%   r#   r\   Úseed_error_typeÚinvalid_init_typesÚinvalid_init_values©Úclsr   r   r   Úsetup_classÃ   s    zBase.setup_classc                 C   s–   t |ƒ�z}| ¡ }| d¡}dd„ |dd … D ƒ}g }|D ]"}| t| d¡d  ¡ dƒ¡ q:|tj|| jd�dœW  d   ƒ S 1 sˆ0    Y  d S )	Nú,c                 S   s   g | ]}t | ¡ d ƒ‘qS )r   )ÚintÚstrip)rd   Úsr   r   r   rg   Ñ   rh   z"Base._read_csv.<locals>.<listcomp>r   éÿÿÿÿr   r"   )ÚseedÚdata)	ÚopenÚreadlineÚsplitrK   r„   r…   r   r&   r#   )r�   ÚfilenameÚcsvrˆ   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 )Nrˆ   éè  r‰   r   )rm   Údata1Ú
random_rawr   Údata2©rr   rm   Z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 sBJ ‚d S )Nrˆ   F)Úoutputr‘   )rm   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é   rˆ   r‰   )r   rm   r’   Ústandard_normalr   rR   r3   r”   )rr   rL   ÚrsrM   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 )Nrˆ   r‰   )r   rm   r’   r8   r3   ro   r>   r   r   r#   r   Zfloat64r”   ©rr   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 )Nrˆ   r‰   r"   )r   rm   r’   r4   r3   ro   r>   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 sHJ ‚d S ©Nrˆ   r   z#xÚXr'   )r   rm   r’   ÚreprÚidr(   Úreplace©rr   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s`J ‚d S r¡   )r   rm   r’   Ústrrs   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sbJ ‚t	||ƒ t
dƒ}| | |¡¡}t|j|jƒ d S )Nr   rˆ   r‘   éd   )Úpicklerm   r’   rZ   ÚdumpsÚloadsr   r   rš   r   r   r   )	rr   r«   rm   rZ   Z
bitgen_pklZreloadedZreloaded_stateÚssZaar   r   r   Útest_pickle  s    

ÿ
zBase.test_picklec                 C   s’   dd l }| j| jd Ž }|j}| | |¡¡}|j}t|j|jƒ t|j|jƒ |j 	d¡ | | |¡¡}|j}t|j|jƒ t|j
|j
ƒ d S )Nr   rˆ   rV   )r«   rm   r’   rj   r­   r¬   r   rZ   ÚpoolrY   r[   )rr   r«   rm   r®   Zbg_plkZss_plkr   r   r   Ú#test_pickle_preserves_seed_sequence-  s    z(Base.test_pickle_preserves_seed_sequencec                 C   sF   | j | jd Ž }t t¡� dh|_W d   ƒ n1 s80    Y  d S )Nrˆ   Ú1)rm   r’   ry   rz   r\   rZ   ©rr   rm   r   r   r   Útest_invalid_state_type?  s    zBase.test_invalid_state_typec                 C   sR   | j | jd Ž }|j}d|d< t t¡� ||_W d   ƒ n1 sD0    Y  d S )Nrˆ   ZotherBitGeneratorrm   )rm   r’   rZ   ry   rz   Ú
ValueError)rr   rm   rZ   r   r   r   Útest_invalid_state_valueD  s
    zBase.test_invalid_state_valuec              	   C   sH   | j }| jD ]6}t t¡� ||Ž  W d   ƒ q1 s80    Y  qd S r   )rm   r~   ry   rz   r\   ©rr   rm   Ústr   r   r   Útest_invalid_init_typeK  s    
zBase.test_invalid_init_typec              	   C   sL   | j }| jD ]:}t ttf¡� ||Ž  W d   ƒ q1 s<0    Y  qd S r   )rm   r   ry   rz   rµ   ÚOverflowErrorr·   r   r   r   Útest_invalid_init_valuesQ  s    
zBase.test_invalid_init_valuesc                 C   s`   | j | jd Ž }| d¡ | dd¡ t t¡� | dd¡ W d   ƒ n1 sR0    Y  d S )Nrˆ   r   rF   Zint32)rm   r’   Z
_benchmarkry   rz   rµ   r³   r   r   r   Útest_benchmarkW  s
    
zBase.test_benchmarkzcffi not available)Úreasonc                 C   s:   | j | jd Ž }|j}t|tƒs$J ‚|j}||u s6J ‚d S ©Nrˆ   )rm   r’   Úcffir   r   )rr   rm   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$J ‚|j}||u s6J ‚d S r¾   )rm   r’   Úctypesr   r   )rr   rm   Zctypes_interfaceZother_ctypes_interfacer   r   r   Útest_ctypesf  s
    zBase.test_ctypesc                 C   sP   | j | jd Ž }|j}| ¡ }t|tƒs,J ‚t||d ƒ t|d tƒsLJ ‚d S )Nrˆ   r   r   )rm   r’   rZ   Ú__getstate__r   Útupler   r   )rr   rm   rZ   Z	alt_stater   r   r   Útest_getstaten  s    zBase.test_getstateN)!rs   rt   ru   r   r%   r#   r”   r’   Úclassmethodr‚   r�   r–   r˜   rœ   rŸ   r    r§   r©   r¯   r±   r´   r¶   r¹   r»   r¼   ry   ÚmarkZskipifÚMISSING_CFFIrÀ   ÚMISSING_CTYPESrÂ   rÅ   r   r   r   r   r|   ¿   s2   




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 )	Nr/   z./data/philox-testset-1.csvz./data/philox-testset-2.csv)r   Nr   ©r‡   r:   i  r   )r   rm   r3   r   r%   r#   r�   r   Úpwdr’   r”   r\   r}   r~   r   r€   r   r   r   r‚   w  s    ÿÿzTestPhilox.setup_classc                 C   sF   | j | jd Ž }|j}| j |d d |d d d�}t|j|jƒ d S )Nrˆ   rZ   Úcounterr   )rÍ   r   )rm   r’   rZ   r   )rr   rm   rZ   Zkeyedr   r   r   Útest_set_key„  s    
ÿzTestPhilox.test_set_keyN)rs   rt   ru   rÆ   r‚   rÎ   r   r   r   r   rÊ   v  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   NrË   )r	   rm   r3   r   r%   r#   r�   r   rÌ   r’   r”   rµ   r\   r}   r~   r   r€   r   r   r   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s’J ‚||ksžJ ‚d S ©Nrˆ   l÷ÿÿÿ        PAOi_n¼ž rV   r:   é€   ©r   rm   r’   rZ   ÚadvanceÚintegers©rr   r›   rZ   Ú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s2J ‚| tdd„ dD ƒƒ¡ |jd }d}|d |kshJ ‚d S )Nì   ï%”@
 rZ   ì	   Ír%4=KÆv±uÅ1¹/Ø c                 s   s   | ]}d | V  qdS ©r:   Nr   rc   r   r   r   Ú	<genexpr>­  rh   z/TestPCG64.test_advange_large.<locals>.<genexpr>©é`   r/   r!   r+   r   é   r:   r   l	   ÿ@H}.|z³KLf�be ©r   rm   rZ   rÕ   Úsum©rr   r›   ZpcgrZ   Zinitial_stateZadvanced_stater   r   r   Útest_advange_large§  s    

zTestPCG64.test_advange_largeN©rs   rt   ru   rÆ   r‚   rÙ   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 )Ú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.csvrÐ   rÑ   rË   )r
   rm   r3   r   r%   r#   r�   r   rÌ   r’   r”   rµ   r\   r}   r~   r   r€   r   r   r   r‚   µ  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s’J ‚||ksžJ ‚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s2J ‚| tdd„ dD ƒƒ¡ |jd }d}|d |kshJ ‚d S )NrÚ   rÛ   rZ   c                 s   s   | ]}d | V  qdS rÜ   r   rc   r   r   r   rÝ   Õ  rh   z3TestPCG64DXSM.test_advange_large.<locals>.<genexpr>rÞ   l	   oF‚	œ[UmO1X·9}Ð rá   rã   r   r   r   rä   Ï  s    
z TestPCG64DXSM.test_advange_largeNrå   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 )Ú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   rm   r3   r   r   r#   r�   r   rÌ   r’   r”   rµ   r}   r~   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   r\   rm   r   r&   Úpi)rr   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 )Nrˆ   i   rm   rZ   r   Úpos)r   rH   )r   rm   r’   rZ   rÖ   r   )rr   r›   rm   rZ   ZdesiredÚtupr   r   r   r   Útest_state_tupleï  s    

ÿ


zTestMT19937.test_state_tupleN)rs   rt   ru   rÆ   r‚   ré   rì   r   r   r   r   rç   Û  s   

rç   c                   @   s    e Zd Zedd„ ƒZ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.csvrÐ   rÑ   rË   )r   rm   r3   r   r%   r#   r�   r   rÌ   r’   r”   rµ   r\   r}   r~   r   r€   r   r   r   r‚      s    ÿÿ
zTestSFC64.setup_classc                 C   s¦   dd l }dd l}tjg d¢tjd�}tj tj t	¡¡d }tj 
|dd¡}| |¡�}| |¡}W d   ƒ n1 sv0    Y  t|tƒsŽJ ‚t|jd d |ƒ d S )Nr   )l   …VoTM‹Q l    Ì*,!;l   ¢aºE]yÀg é   r"   r‰   zsfc64_np126.pkl.gzrZ   )Úgzipr«   r   r&   r%   ÚosÚpathrŒ   ÚabspathÚ__file__r   rŠ   Úloadr   r   r   rZ   )rr   rï   r«   Zexpected_stateÚ	base_pathZpkl_fileÚgzZsfcr   r   r   Útest_legacy_pickle  s    ù
(zTestSFC64.test_legacy_pickleN)rs   rt   ru   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   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   rm   r	   )rr   ÚargsÚrgr   r   r   Ú	test_seed&  s    zTestDefaultRNG.test_seedc                 C   sB   t ƒ }t|ƒ}|j|u sJ ‚t|ƒ}||u s0J ‚|j|u s>J ‚d S r   )r   r   rm   )rr   rk   rû   Zrg2r   r   r   Útest_passthrough+  s    zTestDefaultRNG.test_passthroughN)rs   rt   ru   rü   rý   r   r   r   r   rø   %  s   rø   )9rð   Úos.pathr   ÚsysÚnumpyr   Znumpy.testingr   r   r   r   ry   Znumpy.randomr   r   r	   r
   r   r   r   r   r   Znumpy.random._commonr   r¿   rÈ   ÚImportErrorrÁ   rÉ   ÚflagsÚoptimizerñ   Údirnamerò   ró   rÌ   r   r    r*   r-   r.   r4   r8   r6   r7   rG   rR   ra   rq   r{   r|   rÊ   rÏ   ræ   rç   rí   rø   r   r   r   r   Ú<module>   sT   ,


		 8('$&