o
    k)hn                     @   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	 d dl
mZmZmZmZmZmZ ejdejejejejejejejejejf	ddd Zd	d
 Zd ddZdd Zd!ddZG dd dZ G dd de Z!G dd de Z"G dd de Z#G dd de Z$G dd de Z%G dd de Z&dS )"    N)partial)assert_equalassert_assert_array_equal)	GeneratorMT19937PCG64	PCG64DXSMPhiloxSFC64module)Zscopeparamsc                 C   s   | j S N)Zparam)Zrequest r   =lib/python3.10/site-packages/numpy/random/tests/test_smoke.pydtype	   s   r   c                 C   sr   |  }t t| | d}t |jdk | d}t |jdk | d}t |jdk | dd}t |jdk d S )N
   r   r   r   r   r   r   )   r   size)r   npisscalarshape)fvalr   r   r   params_0   s   
r   Fc                 C   s   d}t dd}t ddd}t ddd}t ddg}t ddd	}|rVd
}|d|   }|d|   }|d|   }|d|   }|d|   }| | | |dd | | | | | | | |dd | |dd | |dd d S )Ng      @       @g      (@     Y@r   g     P@r         @)   r   r"         ?g      ?r   r   r      )r   arangereshapearraymax)r   boundedabcdegr   r   r   params_1   s*   r1   c                 C   s   d}t | tr| D ]}|t| | || M }q	|S t| t|kr-|t| t|kM }|S t | tttjfrRt |tttjfrRt| |D ]\}}|t||M }qD|S || |kM }|S )NT)	
isinstancedict
comp_statetypelisttupler   Zndarrayzip)state1state2Z	identicalkeys1s2r   r   r   r4   >   s    

r4   c                 C   s   |d u rdt jdd }| | | | | j|t jd | j|t jd | jdd|t jd | jdd|t jd | d| | jd|t jd | j|t jd | j|t jd d S )N   r      r      l          g      &@)	r   randomZrandintstandard_normalfloat32integersuint64standard_gammafloat64)rgnr   r   r   warmupO   s   

rK   c                   @   sD  e Zd 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d!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0d[d\ Z1d]d^ Z2d_d` Z3dadb Z4dcdd Z5dedf Z6dgdh Z7didj Z8dkdl Z9dmdn Z:dodp Z;dqdr Z<dsdt Z=dudv Z>dwdx Z?dydz Z@d{d| ZAd}d~ ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdS )RNGc                 C   D   t | _d | _dg| _t| j| j | _| jjj| _d| _| 	  d S )N90  @   
r   bit_generatoradvanceseedr   rI   stateinitial_stateseed_vector_bits_extra_setupclsr   r   r   setup_class_   s   zRNG.setup_classc                 C   sH   t dd| _t ddd d d f | _t dddd| _t| _d S )Nr   r    g{Gz?d   r\   )r   r&   vec_1dvec_2dr'   mat	TypeError
seed_errorrX   r   r   r   rW   j   s   
zRNG._extra_setupc                 C   s   | j | jj_d S r   )rU   rI   rQ   rT   selfr   r   r   _reset_stateq   s   zRNG._reset_statec                 C   sJ   t |  }|jj}|d |d ||j_|jj}tt|| d S )Nr"   )r   rQ   rT   rC   r   r4   )rc   rI   rT   Z	new_stater   r   r   	test_initt   s   

zRNG.test_initc                 C   sb   | j jj}t| j jdr!| j j| j tt|| j jj  d S | j jjj}t	
d|  d S )NrR   zAdvance is not supported by )rI   rQ   rT   hasattrrR   r   r4   	__class____name__pytestskip)rc   rT   bitgen_namer   r   r   test_advance}   s   
zRNG.test_advancec                 C   s   | j jj}t| j jdr:| j j }|j}tt||  | j d || j j_| j j }|j}tt|| d S | j jjj	}|dvrKt
d| td|  d S )Njumpedi. )r   zno "jumped" in zJump is not supported by )rI   rQ   rT   rf   rm   r   r4   rB   rg   rh   AttributeErrorri   rj   )rc   rT   Zbit_gen2Zjumped_stateZbit_gen3Zrejumped_staterk   r   r   r   	test_jump   s   

zRNG.test_jumpc                 C   sF   | j jdddd}tt|dk t|dk  t|dk  d S )N              r   r   r   )rI   uniformr   lenallrc   rr   r   r   test_uniform   s   zRNG.test_uniformc                 C   s   | j jtdgd ddd}tt|dk t|dk  t|dk  | j jtdgd tdgd dd}tt|dk t|dk  t|dk  | j jdtdgd dd}tt|dk t|dk  t|dk  d S )Nrp   r   rq   r   rr   r   )rI   rs   r   r(   r   rt   ru   rv   r   r   r   test_uniform_array   s   zRNG.test_uniform_arrayc                 C   (   t t| jddk t| jj d S Nr   )r   rt   rI   rB   r   rb   r   r   r   test_random      zRNG.test_randomc                 C   s   t t| jddk d S r{   )r   rt   rI   rC   rb   r   r   r   test_standard_normal_zig   s   zRNG.test_standard_normal_zigc                 C   rz   r{   )r   rt   rI   rC   r   rb   r   r   r   test_standard_normal   r}   zRNG.test_standard_normalc                 C   sP   t t| jdddk t t| jtdgd ddk t| jj d S r{   )r   rt   rI   rG   r   r(   r1   rb   r   r   r   test_standard_gamma   s   &zRNG.test_standard_gammac                 C   rz   r{   )r   rt   rI   standard_exponentialr   rb   r   r   r   test_standard_exponential   r}   zRNG.test_standard_exponentialc                 C   sH   | j jddd}tt|dk |jtjksJ tt| j jdd d S )Nr   rD   r@   	rI   r   r   rt   r   r   rD   r   r   rc   Zrandomsr   r   r   test_standard_exponential_float   s   z#RNG.test_standard_exponential_floatc                 C   sL   | j jdddd}tt|dk |jtjksJ tt| j jddd d S )Nr   rD   inv)r   methodr   r   r   r   r   #test_standard_exponential_float_log   s   
z'RNG.test_standard_exponential_float_logc                 C   rz   r{   )r   rt   rI   Zstandard_cauchyr   rb   r   r   r   test_standard_cauchy   r}   zRNG.test_standard_cauchyc                 C   s*   t t| jdddk t| jj d S r{   )r   rt   rI   Z
standard_tr1   rb   r   r   r   test_standard_t   s   zRNG.test_standard_tc                 C   s0   t | jdddk t | jdddk d S )Nr   r#   r     )r   rI   Zbinomialrb   r   r   r   test_binomial   s   zRNG.test_binomialc                 C   s<   | j jj}| j d}|| j j_| j d}t||k d S )Nl        )rI   rQ   rT   rE   r   )rc   rT   Zint_1Zint_2r   r   r   test_reset_state   s
   

zRNG.test_reset_statec                 C   s4   t |  }t |  }tt|jj|jj  d S r   )r   rQ   r   r4   rT   rc   rI   rg2r   r   r   test_entropy_init   s
   
zRNG.test_entropy_initc                 C   sJ   t | j| j }t | j| j }|  |  tt|jj|jj d S r   )r   rQ   rS   rB   r   r4   rT   r   r   r   r   	test_seed   s
   zRNG.test_seedc                 C   sZ   t | j| j }|  |jj}|jdd}t |  }||j_|jdd}t|| d S )Nr   r   )r   rQ   rS   rC   rT   r   rc   rI   rT   Zn1r   Zn2r   r   r   test_reset_state_gauss   s   zRNG.test_reset_state_gaussc                 C   sv   t | j| j }|jdddtjd |jj}|jdddtjd}t |  }||j_|jdddtjd}t|| d S )Nr   rA   x   r@   r   )r   rQ   rS   rE   r   uint32rT   r   r   r   r   r   test_reset_state_uint32   s   zRNG.test_reset_state_uint32c                 C   sh   t | j| j }|jdd |jj}|jddd}t |  }||j_|jddd}t||k  d S )NrD   r@   r   r   r   )r   rQ   rS   rB   rT   r   ru   r   r   r   r   test_reset_state_float  s   zRNG.test_reset_state_floatc                 C   .   t ddd}| j|}t||k  d S N   r   rr   r   r&   rI   Zpermutationr   anyrc   ZoriginalZpermutedr   r   r   test_shuffle     zRNG.test_shufflec                 C   r   r   r   r   r   r   r   test_permutation  r   zRNG.test_permutationc                 C   s   | j ddd}tt|dk | j tdgd d}tt|dk | j dtdgd }tt|dk | j tdgd tdgd }tt|dk | j tdgd tdggd }t|jdk d S )Nr   r   r   )rI   Zbetar   rt   r   r(   r   rc   Zvalsr   r   r   	test_beta  s   &(zRNG.test_betac                 C   s    | j d}tt|dk d S r{   )rI   bytesr   rt   r   r   r   r   
test_bytes"  s   zRNG.test_bytesc                 C   .   | j dd}tt|dk t| j j d S Nr   r   )rI   Z	chisquarer   rt   r1   r   r   r   r   test_chisquare&     zRNG.test_chisquarec                 C   r   r   )rI   exponentialr   rt   r1   r   r   r   r   test_exponential+  r   zRNG.test_exponentialc                 C   $   | j ddd}tt|dk d S )N   r   r   )rI   r   r   rt   r   r   r   r   test_f0     z
RNG.test_fc                 C   r   )Nr   r%   r   )rI   Zgammar   rt   r   r   r   r   
test_gamma4  r   zRNG.test_gammac                 C   s2   | j dd}tt|dk t| j jdd d S )Nr#   r   Tr*   )rI   Z	geometricr   rt   r1   r   r   r   r   r   test_geometric8     zRNG.test_geometricc                 C   $   | j ddd}tt|dk d S r   )rI   Zgumbelr   rt   r   r   r   r   test_gumbel=  r   zRNG.test_gumbelc                 C   r   r   )rI   Zlaplacer   rt   r   r   r   r   test_laplaceA  r   zRNG.test_laplacec                 C   r   r   )rI   Zlogisticr   rt   r   r   r   r   test_logiticE  r   zRNG.test_logiticc                 C   "   | j dd}tt|dk d S )Nr#   r   )rI   Z	logseriesr   rt   r   r   r   r   test_logseriesI     zRNG.test_logseriesc                 C   $   | j ddd}tt|dk d S Nr   皙?)rI   Znegative_binomialr   rt   r   r   r   r   test_negative_binomialM  r   zRNG.test_negative_binomialc                 C   r   )Nr   r%   )rI   Znoncentral_chisquarer   rt   r   r   r   r   test_noncentral_chisquareQ  r   zRNG.test_noncentral_chisquarec                 C   s   | j dddd}tt|dk | j tdgd dd}tt|dk | j dtdgd d}tt|dk | j ddtdgd }tt|dk d S )Nr   r   r%   r   )rI   Znoncentral_fr   rt   r   r(   r   r   r   r   test_noncentral_fU  s   zRNG.test_noncentral_fc                 C   r   r   )rI   Znormalr   rt   r   r   r   r   test_normal_  r   zRNG.test_normalc                 C   r   )Nr!   r   )rI   Zparetor   rt   r   r   r   r   test_paretoc  r   zRNG.test_paretoc                 C   sV   | j dd}tt|dk | j tdgd }tt|dk t| j j d S r{   )rI   Zpoissonr   rt   r   r(   r1   r   r   r   r   test_poissong  s
   zRNG.test_poissonc                 C   r   )Nr   r   )rI   Zpowerr   rt   r   r   r   r   
test_powern  r   zRNG.test_powerc                 C   r   )Nr   r?   )rI   rE   r   rt   r   r   r   r   test_integersr  r   zRNG.test_integersc                 C   s2   | j dd}tt|dk t| j jdd d S )Nr   r   Tr   )rI   Zrayleighr   rt   r1   r   r   r   r   test_rayleighv  r   zRNG.test_rayleighc                 C   r   r   )rI   Zvonmisesr   rt   r   r   r   r   test_vonmises{  r   zRNG.test_vonmisesc                 C   r   N      ?r   )rI   Zwaldr   rt   r   r   r   r   	test_wald  r   zRNG.test_waldc                 C   r   r   )rI   Zweibullr   rt   r   r   r   r   test_weibull  r   zRNG.test_weibullc                 C   sx   | j dd}tt|dk | j | j}tt|dk | j | j}t|jdk | j | j}t|jdk d S )Nr   r\   )r"   r\   r[   )rI   Zzipfr   rt   r]   r^   r   r_   r   r   r   r   	test_zipf  s   zRNG.test_zipfc                 C   sL   | j ddd}tt| | j tdgd dd}t|jdk d S )N   r?   r   r   )rI   Zhypergeometricr   r   r   r(   r   r   r   r   r   test_hypergeometric     zRNG.test_hypergeometricc                 C   sL   | j ddd}tt| | j dtdgd d}t|jdk d S )Nr   r   r   r   )rI   Z
triangularr   r   r   r(   r   r   r   r   r   test_triangular  r   zRNG.test_triangularc                 C   s   ddg}ddgddgg}| j ||d}t|jdk | j ||d}t|jdk | j ||d}t|jdk t||k  d S )Nr   r"   r\     )r   r%   )rI   Zmultivariate_normalr   r   r   )rc   ZmeanZcovxZx_zigZx_invr   r   r   test_multivariate_normal  s   zRNG.test_multivariate_normalc                 C   sH   | j dddg}t|jdk | j jdddgdd}t|jdk d S )Nr\   gUUUUUU?gUUUUUU?)r%   r   r   r$   )rI   Zmultinomialr   r   r   r   r   r   test_multinomial  s   zRNG.test_multinomialc                 C   s    | j dd}t|jdk d S )N)r   r   r   r?   )r?   r   )rI   Z	dirichletr   r   )rc   sr   r   r   test_dirichlet  s   zRNG.test_dirichletc                 C   s   t | j}t |}tt| jt|k tt| jjj|jj t | j}t |}tt| jt|k tt| jjj|jj d S r   )	pickledumpsrI   loadsr   r5   r4   rQ   rT   )rc   ZpickZunpickr   r   r   test_pickle  s   


zRNG.test_picklec                 C   sX  | j d u r| jj}td|  | j dkrtj}ntj}tjdg|d}| |}|j	}| d}|j	}t
t|| tjd|d}| |}|j	}| |d }|j	}t
t||  tjd|d}| |}|j	}| |d }|j	}t
t||  dttjd|d| j d  d }| |}|j	}| |d }|j	}t
t||  d S )	Nz#Vector seeding is not supported by     r"   r@      r   i  r%   )rV   rQ   rh   ri   rj   r   r   rF   r(   rT   r   r4   r&   mod)rc   rk   r   rS   bgr9   r:   r   r   r   test_seed_array  sD   






zRNG.test_seed_arrayc                 C   s   t | d}t| |jj}|jdtjd}t |  }t| ||j_|jdtjd}t|| t|j	tj t
t|jj|jj d S )NrN   r>   r@   )r   rQ   rK   rT   rB   r   rD   r   r   r   r   r4   rc   rI   rT   Zr1r   Zr2r   r   r   test_uniform_float  s   
zRNG.test_uniform_floatc                 C   s   t |  }t| |jj}|jddtjd}t |  }t| ||j_|jddtjd}t|| t|j	tj t
t|jj|jj d S )Ng      @r>   r@   )r   rQ   rK   rT   rG   r   rD   r   r   r   r   r4   r   r   r   r   test_gamma_floats  s   
zRNG.test_gamma_floatsc                 C      t |  }t| |jj}|jdtjd}t |  }t| ||j_|jdtjd}t|| t|j	tj t
t|jj|jj d S Nr>   r@   r   rQ   rK   rT   rC   r   rD   r   r   r   r   r4   r   r   r   r   test_normal_floats     
zRNG.test_normal_floatsc                 C   r   r   r   r   r   r   r   test_normal_zig_floats  r   zRNG.test_normal_zig_floatsc                 C   s   | j }|jj}d}t|}||j_|j|d ||j_|j|d}t|| t|}||j_|j||jd tj|tjd}||j_|j|tjd ||j_|j|tjd}t|| d S )N      a   outr   )r   r   r@   r   r   r   )	rI   rQ   rT   r   emptyrC   r   r   rD   )rc   rI   rT   r   existingdirectZsizedr   r   r   test_output_fill  s$   


zRNG.test_output_fillc                 C      | j }|jj}d}t|}||j_|j|d ||j_|j|d}t|| tj|tjd}||j_|j|tjd ||j_|j|tjd}t|| d S Nr   r   r   r@   r   r   )rI   rQ   rT   r   r   rB   r   rD   rc   rI   rT   r   r   r   r   r   r   test_output_filling_uniform/     

zRNG.test_output_filling_uniformc                 C   r   r   )rI   rQ   rT   r   r   r   r   rD   r   r   r   r   test_output_filling_exponentialA  r   z#RNG.test_output_filling_exponentialc                 C   s   | j }|jj}d}t|}||j_|jd|d ||j_|jd|d}t|| tj|tjd}||j_|jd|tjd ||j_|jd|tjd}t|| d S )Nr   r   r   r   r@   r   r   )rI   rQ   rT   r   zerosrG   r   rD   r   r   r   r   test_output_filling_gammaS  s   

zRNG.test_output_filling_gammac                 C   s   | j }|jj}d}tdd }t|}||j_|j||d ||j_|j||d}t|| tj|tjd}||j_|j||tjd ||j_|j||tjd}t|| d S )	Nr   g     @X@r   r   r   r@   r   r   )	rI   rQ   rT   r   r&   r   rG   r   rD   )rc   rI   rT   r   Zmur   r   r   r   r   #test_output_filling_gamma_broadcaste  s    

z'RNG.test_output_filling_gamma_broadcastc                 C   s  | j }d}t|}tt |j|tjd W d    n1 s"w   Y  tt |j|d d d d W d    n1 sBw   Y  tj|tjd}tt |j|tj	d W d    n1 sgw   Y  tj
|tjd}tt |jd|tj	d W d    n1 sw   Y  tt |jd|d d d tjd W d    n1 sw   Y  tj
|tj	d}tt |jd|tjd W d    n1 sw   Y  tt |jd|d d d d W d    d S 1 sw   Y  d S )Nr   r   r   r   r@   r   )rI   r   r   ri   raisesr`   rC   rD   
ValueErrorrH   r   rG   )rc   rI   r   r   r   r   r   test_output_fill_errorx  s6   
"zRNG.test_output_fill_errorc           
      C   sf  |t jkr
d}d}nt |}t|jd }|j}|   | jj||gd |d}|   | jj|gd ||d}t	|| |   | jj||d|d}t	|| |   | jjt 
|gd t j
|gtdd|d}t	|| |   | jjt 
|gd t 
|gd d|d}	t	||	 |   | jjd|d|d}|   | jj|gd |d}t	|| d S )Nr%   r   r"   r   r@   r   )r   booliinfointr)   minrd   rI   rE   r   r(   object)
rc   r   upperlowerinfor+   r,   r-   r.   r/   r   r   r   test_integers_broadcast  sB   






zRNG.test_integers_broadcastc                 C   s   t dg}t dg}| jj|||d}|jdksJ | jj|d ||d}|jdks.J | jj||d |d}|jdks@J d S )Nr"   r   r@   )r"   )r   r(   rI   rE   r   )rc   r   ZhighZlowr   r   r   r   test_integers_numpy  s   zRNG.test_integers_numpyc                 C   sL  |t jkr
d}d}nt |}t|jd }|j}tt | j	j
||d gd |d W d    n1 s7w   Y  tt | j	j
|d |gd |d W d    n1 sZw   Y  tt | j	j
|d g|gd |d W d    n1 s~w   Y  tt | j	j
dgdg|d W d    d S 1 sw   Y  d S )Nr%   r   r"   r   r@   )r   r  r  r  r)   r  ri   r   r   rI   rE   )rc   r   r  r  r  r   r   r   test_integers_broadcast_errors  s$   

 "z"RNG.test_integers_broadcast_errorsN)Jrh   
__module____qualname__classmethodrZ   rW   rd   re   rl   ro   rx   ry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r
  r  r   r   r   r   rL   ^   s    


		




&!rL   c                   @   s    e Zd Zedd Zdd ZdS )TestMT19937c                 C   sJ   t | _d | _dg| _t| j| j | _| jjj| _d| _| 	  t
| _d S )Ni! ! r   )r   rQ   rR   rS   r   rI   rT   rU   rV   rW   r   ra   rX   r   r   r   rZ     s   
zTestMT19937.setup_classc                 C   sh   t j }|d | }|| jj_| jjj}t|d |d d k	  t|d |d d k d S )Nc   r"   rT   r;   r%   pos)
r   rB   ZRandomStaterC   Z	get_staterI   rQ   rT   r   ru   )rc   ZnprgrT   r:   r   r   r   test_numpy_state  s   



zTestMT19937.test_numpy_stateN)rh   r  r  r  rZ   r  r   r   r   r   r    s    

r  c                   @      e Zd Zedd ZdS )
TestPhiloxc                 C   D   t | _d| _dg| _t| j| j | _| jjj| _d| _| 	  d S Nl         rN   rO   )
r
   rQ   rR   rS   r   rI   rT   rU   rV   rW   rX   r   r   r   rZ        zTestPhilox.setup_classNrh   r  r  r  rZ   r   r   r   r   r        r  c                   @   r  )	TestSFC64c                 C   rM   )NrN      )
r   rQ   rR   rS   r   rI   rT   rU   rV   rW   rX   r   r   r   rZ     r  zTestSFC64.setup_classNr  r   r   r   r   r    r  r  c                   @   r  )	TestPCG64c                 C   r  r  rP   rX   r   r   r   rZ     r  zTestPCG64.setup_classNr  r   r   r   r   r    r  r  c                   @   r  )TestPCG64DXSMc                 C   r  r  )
r	   rQ   rR   rS   r   rI   rT   rU   rV   rW   rX   r   r   r   rZ   
  r  zTestPCG64DXSM.setup_classNr  r   r   r   r   r  	  r  r  c                   @   s(   e Zd Zedd Zdd Zdd ZdS )TestDefaultRNGc                 C   sB   t | _d| _dg| _tjj| j | _| jjj| _	d| _
|   d S r  )r   rQ   rR   rS   r   rB   default_rngrI   rT   rU   rV   rW   rX   r   r   r   rZ     s   zTestDefaultRNG.setup_classc                 C   s   t t| jjt d S r   )r   r2   rI   rQ   r   rb   r   r   r   test_default_is_pcg64"  s   z$TestDefaultRNG.test_default_is_pcg64c                 C   s   t j  t jd  t jd t jd t jd t jddg tt t jd W d    n1 s;w   Y  tt t jddg W d    d S 1 sYw   Y  d S )NrN   r   l	   -tE+I6%Yl  l	   )	~eR :TI*6 rr   )r   rB   r  ri   r   r   rb   r   r   r   r   '  s   
"zTestDefaultRNG.test_seedN)rh   r  r  r  rZ   r   r   r   r   r   r   r    s
    
r  )Fr   )'r   	functoolsr   Znumpyr   ri   Znumpy.testingr   r   r   Znumpy.randomr   r   r   r	   r
   r   Zfixturer  Zint8Zint16Zint32Zint64Zuint8Zuint16r   rF   r   r   r1   r4   rK   rL   r  r  r  r  r  r  r   r   r   r   <module>   s6     

!
    u