o
    Ô­jsE  ã                   @   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/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ƒr't| | || ƒ q| | || ks1J ‚qd S ©N)Ú
isinstanceÚdictÚassert_state_equalÚnpÚndarrayr   )ÚactualÚtargetÚkey© r   ú[/var/www/html/CropPilot/venv/lib/python3.10/site-packages/numpy/random/tests/test_direct.pyr   '   s   úr   c                 C   s   | t  d¡? d  t j¡S )Né   g      p>)r   Úuint32Ú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   Úcolumn_stackÚravelr"   )ÚxÚupperÚlowerÚ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   r2   c                 C   s   t | ƒS r   )r"   r1   r   r   r   Úuniform32_from_uint32D   s   r3   c                 C   s4   |dkrt | ƒS |dkrt| ƒS |dkrt| ƒS t‚)Né@   é5   r#   )r/   r2   r3   ÚNotImplementedError©r+   Úbitsr   r   r   Úuniform32_from_uintH   s   r9   c                 C   s$   |dv rt | ƒS |dkrt| ƒS d S )N)r4   é?   r5   r#   )Úuniform_from_uint64Úuniform_from_uint32r7   r   r   r   Úuniform_from_uintS   s
   ÿr=   c                 C   s   | t  d¡? d S )Né   g       <)r   r'   r1   r   r   r   r;   Z   s   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+   ÚoutÚiÚaÚbr   r   r   r<   ^   s   r<   c                 C   s   |   tj¡d S )Nç      ð?)Úviewr   Údoubler1   r   r   r   Úuniform_from_dsfmtg   s   rL   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)r4   r:   r#   r   ç        r?   rI   g       @r   g       À)r;   r<   rL   rC   r   ÚsqrtÚlogÚappend)
r+   Únr8   ÚdoublesÚgaussÚlocÚx1Úx2Úr2Úfr   r   r   Úgauss_from_uintk   s*   

üörY   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?   rA   )Ú	spawn_keyÚ	pool_sizer   )Únumpy.random.bit_generatorrZ   r[   r\   r   rD   ÚspawnÚstater   Ún_children_spawnedr   Ú	TypeErrorr6   Úgenerate_staterC   )rZ   r[   r\   Ús1Ús2Údummyr   r   r   Útest_seedsequence„   s   


ri   c                     sÞ   t j ¡ } | jj‰ ˆ  d¡}‡ fdd„tdƒD ƒ}dd„ |D ƒ|ks$J ‚| j d¡}‡ fdd„tddƒD ƒ}dd„ |D ƒ|ksAJ ‚|  d¡}‡ fdd„tdd	ƒD ƒ}d
d„ |D ƒ}||ks_J ‚|d  ¡ |d  ¡ ksmJ ‚dS )z? Test spawning new generators and bit_generators directly.
    r@   c                    ó   g | ]}ˆ j |f ‘qS r   ©r^   ©Ú.0rF   ©Úseqr   r   Ú
<listcomp>�   ó    z+test_generator_spawning.<locals>.<listcomp>c                 S   s   g | ]}|j ‘qS r   rk   )rm   Úcr   r   r   rp   ž   s    c                    rj   r   rk   rl   rn   r   r   rp   ¡   rq   r]   c                 S   s   g | ]}|j j‘qS r   )Úseed_seqr^   )rm   Úbgr   r   r   rp   ¢   s    c                    rj   r   rk   rl   rn   r   r   rp   ¥   rq   é   c                 S   s   g | ]}|j jj‘qS r   )Úbit_generatorrs   r^   )rm   Úrngr   r   r   rp   ¦   s    r   r   N)r   Úrandomr   rv   rs   ra   rD   Úuniform)rw   Únew_ssÚexpected_keysÚnew_bgsÚnew_rngsÚ
found_keysr   rn   r   Útest_generator_spawning—   s   


 r   c                  C   sª   ddl m}  G dd„ dƒ}|  |¡ tj |ƒ ¡}tjtdd�� | 	d¡ W d   ƒ n1 s0w   Y  tjtdd�� |j
 	d¡ W d   ƒ d S 1 sNw   Y  d S )Nr   )rZ   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   Úzeros)ÚselfÚn_wordsr%   r   r   r   re   ±   s   z;test_non_spawnable.<locals>.FakeSeedSequence.generate_stateN)Ú__name__Ú
__module__Ú__qualname__r   r   re   r   r   r   r   ÚFakeSeedSequence°   s    r†   zThe underlying SeedSequence)Úmatchr@   )r`   rZ   Úregisterr   rx   r   ÚpytestÚraisesrd   ra   rv   )rZ   r†   rw   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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 )Nr4   )
r	   rv   r8   r   r'   r%   rd   Ú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)rm   Úsr   r   r   rp   Ñ   s    z"Base._read_csv.<locals>.<listcomp>r   éÿÿÿÿr   r$   )ÚseedÚdata)	ÚopenÚreadlineÚsplitrP   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   )rv   Údata1Ú
random_rawr   Údata2©r�   rv   Ú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 )Nr˜   F)Úoutputr¡   )rv   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   rv   r¢   Ústandard_normalr   rY   r8   r¤   )r�   rQ   ÚrsrS   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   rv   r¢   r=   r8   rx   rC   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 )Nr˜   r™   r$   )r   rv   r¢   r9   r8   rx   rC   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 ©Nr˜   r   z#xÚXr+   )r   rv   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   rv   r¢   Ústrrƒ   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   r˜   r¡   éd   )Úpicklerv   r¢   rb   ÚdumpsÚloadsr   r   r«   r   r   r   )	r�   r¾   rv   rb   Ú
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 )Nr˜   Ú1)rv   r¢   r‰   rŠ   rd   rb   ©r�   rv   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 )Nr˜   ÚotherBitGeneratorrv   )rv   r¢   rb   r‰   rŠ   Ú
ValueError)r�   rv   rb   r   r   r   Útest_invalid_state_value2  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   )rv   rŽ   r‰   rŠ   rd   ©r�   rv   Ústr   r   r   Útest_invalid_init_type9  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   )rv   r�   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 )Nr˜   r   rK   Úint32)rv   r¢   Ú
_benchmarkr‰   rŠ   rË   rÈ   r   r   r   Útest_benchmarkE  s   
"ÿzBase.test_benchmarkzcffi not available)Úreasonc                 C   ó:   | j | jd Ž }|j}t|tƒsJ ‚|j}||u sJ ‚d S ©Nr˜   )rv   r¢   Úcffir   r   )r�   rv   Úcffi_interfaceÚother_cffi_interfacer   r   r   Ú	test_cffiL  ó
   zBase.test_cffizctypes not availablec                 C   rÖ   r×   )rv   r¢   Úctypesr   r   )r�   rv   Úctypes_interfaceÚother_ctypes_interfacer   r   r   Útest_ctypesT  rÜ   zBase.test_ctypesc                 C   s,   | j | jd Ž }|j}| ¡ }t||ƒ d S r×   )rv   r¢   rb   Ú__getstate__r   )r�   rv   rb   Ú	alt_stater   r   r   Útest_getstate\  s   zBase.test_getstateN) rƒ   r„   r…   r   r'   r%   r¤   r¢   Úclassmethodr’   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   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 )	Nr4   z./data/philox-testset-1.csvz./data/philox-testset-2.csv)r   Nr   ©r—   r?   i  r   )r   rv   r8   r   r'   r%   r    r   Úpwdr¢   r¤   rd   r�   rŽ   r�   r�   r   r   r   r’   d  s   ÿÿzTestPhilox.setup_classc                 C   sF   | j | jd Ž }|j}| j |d d |d d d�}t|j|jƒ d S )Nr˜   rb   Úcounterr   )rì   r   )rv   r¢   rb   r   )r�   rv   rb   Úkeyedr   r   r   Útest_set_keyq  s   
ÿzTestPhilox.test_set_keyN)rƒ   r„   r…   rä   r’   rî   r   r   r   r   ré   c  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 )Nr4   z./data/pcg64-testset-1.csvz./data/pcg64-testset-2.csv©gš™™™™™	@©r   Nrê   )r	   rv   r8   r   r'   r%   r    r   rë   r¢   r¤   rË   rd   r�   rŽ   r�   r�   r   r   r   r’   z  ó   
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 ©Nr˜   l÷ÿÿÿ        PAOi_n¼ž r]   r?   é€   ©r   rv   r¢   rb   ÚadvanceÚintegers©r�   r¬   rb   ÚstepÚval_negÚval_posÚ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ì   ï%”@
 rb   ì	   Ír%4=KÆv±uÅ1¹/Ø c                 s   ó   � | ]}d | V  qdS ©r?   Nr   rl   r   r   r   Ú	<genexpr>š  ó   € z/TestPCG64.test_advange_large.<locals>.<genexpr>©é`   r4   r#   r0   r   é   r?   r   l	   ÿ@H}.|z³KLf�be ©r   rv   rb   rù   Úsum©r�   r¬   Úpcgrb   Úinitial_stateÚadvanced_stater   r   r   Útest_advange_large”  s   

zTestPCG64.test_advange_largeN©rƒ   r„   r…   rä   r’   r   r  r   r   r   r   rð   y  ó
    

rð   c                   @   rï   )ÚTestPCG64DXSMc                 C   rñ   )Nr4   z./data/pcg64dxsm-testset-1.csvz./data/pcg64dxsm-testset-2.csvrò   ró   rê   )r
   rv   r8   r   r'   r%   r    r   rë   r¢   r¤   rË   rd   r�   rŽ   r�   r�   r   r   r   r’   ¡  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  rb   c                 s   r  r  r   rl   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     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   rv   r8   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   rd   rv   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 )Nr˜   i   rv   rb   r   Úpos)r   rM   )r   rv   r¢   rb   rú   r   )r�   r¬   rv   rb   Ú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   rñ   )Nr4   z./data/sfc64-testset-1.csvz./data/sfc64-testset-2.csvrò   ró   rê   )r   rv   r8   r   r'   r%   r    r   rë   r¢   r¤   rË   rd   r�   rŽ   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   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   rv   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   rv   )r�   rt   r   Úrg2r   r   r   Útest_passthrough   s   zTestDefaultRNG.test_passthroughN)rƒ   r„   r…   r!  r#  r   r   r   r   r  ú  s    r  )9Ú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"   r/   r2   r3   r9   r=   r;   r<   rL   rY   ri   r   r‹   rŒ   ré   rð   r  r  r  r  r   r   r   r   Ú<module>   sZ    ,ÿÿ
		 %''$