o
    V=ºiB  ã                   @   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.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ƒr't| | || ƒ q| | || ks1J ‚qd S ©N)Ú
isinstanceÚdictÚassert_state_equalÚnpZndarrayr   )ÚactualÚtargetÚkey© r   údC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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   s4   |dkrt | ƒS |dkrt| ƒS |dkrt| ƒS t‚)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 ]}| | 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 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)r/   r5   r!   r   ç        r:   rD   g       @r   g       À)r6   r7   rG   r>   r   ÚsqrtÚlogÚappend)
r'   Únr3   ZdoublesÚgaussÚlocÚx1Zx2Zr2Úfr   r   r   Úgauss_from_uintk   s*   

üörQ   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   r:   r<   )Z	spawn_keyZ	pool_sizer   )Znumpy.random.bit_generatorrR   rS   rT   r   r?   ÚspawnÚstater   Zn_children_spawnedr   Ú	TypeErrorr1   Zgenerate_stater>   )rR   rS   rT   Ú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 )Nr/   )
r	   Úbit_generatorr3   r   r%   r#   rX   Ú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ÚsplitrK   rf   rg   r   r&   r#   )rc   ÚfilenameÚcsvrl   rm   Ú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 )Nrl   éè  rm   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 u sJ ‚|jddd�}|d u s!J ‚d S )Nrl   F)Úoutputru   )r^   rv   rw   ry   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é   rl   rm   )r   r^   rv   Ústandard_normalr   rQ   r3   rx   )rz   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 )Nrl   rm   )r   r^   rv   r8   r3   Úrandomr>   r   r   r#   r   Zfloat64rx   ©rz   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 )Nrl   rm   r"   )r   r^   rv   r4   r3   r‚   r>   r   r   r   r   r#   rx   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 ©Nrl   r   z#xÚXr'   )r   r^   rv   ÚreprÚidr(   Úreplace©rz   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   r^   rv   Ú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   rl   ru   éd   )Úpickler^   rv   rW   ÚdumpsÚloadsr   r   r   r   r   r   )	rz   r’   r^   rW   Z
bitgen_pklZreloadedZreloaded_stateÚssZ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 )Nrl   Ú1)r^   rv   ÚpytestÚraisesrX   rW   ©rz   r^   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 )Nrl   ZotherBitGeneratorr^   )r^   rv   rW   r˜   r™   Ú
ValueError)rz   r^   rW   r   r   r   Útest_invalid_state_value
  s   "ÿzBase.test_invalid_state_valuec              	   C   sH   | j }| jD ]}t t¡� ||Ž  W d   ƒ q1 sw   Y  qd S r   )r^   r`   r˜   r™   rX   ©rz   r^   Ú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   ƒ q1 sw   Y  qd S r   )r^   ra   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 )Nrl   r   rF   Zint32)r^   rv   Z
_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 ©Nrl   )r^   rv   Úcffir   r   )rz   r^   Zcffi_interfaceZother_cffi_interfacer   r   r   Ú	test_cffi$  ó
   zBase.test_cffizctypes not availablec                 C   r¥   r¦   )r^   rv   Úctypesr   r   )rz   r^   Zctypes_interfaceZother_ctypes_interfacer   r   r   Útest_ctypes,  r©   zBase.test_ctypesc                 C   s,   | j | jd Ž }|j}| ¡ }t||ƒ d S r¦   )r^   rv   rW   Ú__getstate__r   )rz   r^   rW   Z	alt_stater   r   r   Útest_getstate4  s   zBase.test_getstateN) r�   Ú
__module__Ú__qualname__r   r%   r#   rx   rv   Úclassmethodrd   rt   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]   —   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   ©rk   r:   i  r   )r   r^   r3   r   r%   r#   rt   r   Úpwdrv   rx   rX   r_   r`   ra   rb   r   r   r   rd   <  s   ÿÿzTestPhilox.setup_classc                 C   sF   | j | jd Ž }|j}| j |d d |d d d�}t|j|jƒ d S )Nrl   rW   Úcounterr   )r·   r   )r^   rv   rW   r   )rz   r^   rW   Zkeyedr   r   r   Útest_set_keyI  s   
ÿzTestPhilox.test_set_keyN)r�   r®   r¯   r°   rd   r¸   r   r   r   r   r´   ;  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 )Nr/   z./data/pcg64-testset-1.csvz./data/pcg64-testset-2.csv©gš™™™™™	@©r   Nrµ   )r	   r^   r3   r   r%   r#   rt   r   r¶   rv   rx   rœ   rX   r_   r`   ra   rb   r   r   r   rd   R  ó   
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 ©Nrl   l÷ÿÿÿ        PAOi_n¼ž rU   r:   é€   ©r   r^   rv   rW   ÚadvanceÚintegers©rz   r€   rW   ÚstepZval_negZval_posZval_bigr   r   r   Útest_advance_symmetry]  ó   


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ì   ï%”@
 rW   ì	   Ír%4=KÆv±uÅ1¹/Ø c                 s   ó   � | ]}d | V  qdS ©r:   Nr   ©rh   rA   r   r   r   Ú	<genexpr>r  ó   € z/TestPCG64.test_advange_large.<locals>.<genexpr>©é`   r/   r!   r+   r   é   r:   r   l	   ÿ@H}.|z³KLf�be ©r   r^   rW   rÃ   Úsum©rz   r€   ZpcgrW   Zinitial_stateZadvanced_stater   r   r   Útest_advange_largel  s   

zTestPCG64.test_advange_largeN©r�   r®   r¯   r°   rd   rÇ   rÖ   r   r   r   r   rº   Q  ó
    

rº   c                   @   r¹   )ÚTestPCG64DXSMc                 C   r»   )Nr/   z./data/pcg64dxsm-testset-1.csvz./data/pcg64dxsm-testset-2.csvr¼   r½   rµ   )r
   r^   r3   r   r%   r#   rt   r   r¶   rv   rx   rœ   rX   r_   r`   ra   rb   r   r   r   rd   y  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Ê   rW   c                 s   rË   rÌ   r   rÍ   r   r   r   rÎ   ™  rÏ   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Ù   x  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   r^   r3   r   r   r#   rt   r   r¶   rv   rx   rœ   r_   r`   ra   rb   r   r   r   rd      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   rX   r^   r   r&   Úpi)rz   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 )Nrl   i   r^   rW   r   Úpos)r   rH   )r   r^   rv   rW   rÄ   r   )rz   r€   r^   rW   ZdesiredÚtupr   r   r   r   Útest_state_tuple³  s   

ÿ


zTestMT19937.test_state_tupleN)r�   r®   r¯   r°   rd   rÜ   rß   r   r   r   r   rÚ   Ÿ  s
    

rÚ   c                   @   s   e Zd Zedd„ ƒZdS )Ú	TestSFC64c                 C   r»   )Nr/   z./data/sfc64-testset-1.csvz./data/sfc64-testset-2.csvr¼   r½   rµ   )r   r^   r3   r   r%   r#   rt   r   r¶   rv   rx   rœ   rX   r_   r`   ra   rb   r   r   r   rd   Ä  s   ÿÿ
zTestSFC64.setup_classN)r�   r®   r¯   r°   rd   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   r^   r	   )rz   Ú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   r^   )rz   Ú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.   r4   r8   r6   r7   rG   rQ   r\   r]   r´   rº   rÙ   rÚ   rà   rá   r   r   r   r   Ú<module>   sV    ,ÿÿ
		 %''$