o
    8ήcX                     @   s   d dl Z d dlZd dlZd dl mZ d dlmZmZ d dlm	Z	 d dl
mZmZmZ d dlmZmZ d dlmZ d dlmZmZ G d	d
 d
eZdd ZG dd deeZG dd deeZdS )    N)types)TestCaseMemoryLeakMixin)_get_proper_funcnext_uint32next_uint64next_double)MT19937	Generator)TypingError)run_in_new_process_cachingSerialMixinc                   @      e Zd Zdd ZdS )TestHelperFuncsc                 C   s   dd }dd }|  t||tjd  d |  t||tjd  d |  t||tjd  d |  t||tjd  d | t}t||tj W d    n1 sWw   Y  | 	dt
|j d S )	Nc                   S      dS )N     r   r   r   D/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_np_randomgen.pytest_32bit_func      zBTestHelperFuncs.test_proper_func_provider.<locals>.test_32bit_funcc                   S   r   )N@   r   r   r   r   r   test_64bit_func   r   zBTestHelperFuncs.test_proper_func_provider.<locals>.test_64bit_funcr   r   r   z2Unsupported dtype int32 for the given distribution)assertEqualr   npfloat64float32r   assertRaisesr   int32assertInstr	exception)selfr   r   raisesr   r   r   test_proper_func_provider   sJ   



z)TestHelperFuncs.test_proper_func_providerN)__name__
__module____qualname__r$   r   r   r   r   r          r   c                  C   sN   t jd} t jd}dd }tjdd|}t |d|| s%J d S )N   c                 S   
   |  dS N
   randomxr   r   r   <lambda>+      
 z(test_generator_caching.<locals>.<lambda>Tcacher,   )r   r.   default_rngnumbanjitallclose)nb_rngnp_rngpy_func
numba_funcr   r   r   test_generator_caching(   s
   r=   c                   @   sD   e Zd Z		dddZdddZdd Zd	d
 Zdd Zdd ZdS )TestRandomGeneratorsNc                 C   s   t |}|d u rd}|d u rtjj|d}tjj|d}nt||}t||}||||}||||}	| ||	 | d }
| d }|D ]}| |
| ||  qKd S )Nr)   seedstate)	r6   r7   r   r.   r5   r   r;   assertPreciseEqual__getstate__)r"   distribution_funcbitgen_typer@   	test_size
test_dtypenumba_rng_instancenumpy_rng_instance	numba_res	numpy_resnumba_gen_statenumpy_gen_state
_state_keyr   r   r   check_numpy_parity1   s,   

z'TestRandomGenerators.check_numpy_parityr)   c           
         sb   t jj|d}t jj|d}t|jj|}||jjj}t fdd}||}	| 	|	| d S )Nr?   c                    s
    | j S N)bit_generatorr/   bitgen_funcr   r   r1   W   r2   z?TestRandomGenerators._test_bitgen_func_parity.<locals>.<lambda>)
r   r.   r5   getattrrQ   ctypesrA   r6   r7   rB   )
r"   	func_namerS   r@   rH   rI   
numpy_funcrK   r<   rJ   r   rR   r   _test_bitgen_func_parityP   s   z-TestRandomGenerators._test_bitgen_func_parityc                 C   sD   t j }tdd }| ||| | t|t|| d S )Nc                 S      | S rP   r   r/   r   r   r   r1   ^       zATestRandomGenerators.test_npgen_boxing_unboxing.<locals>.<lambda>)r   r.   r5   r6   r7   r   id)r"   rng_instancer<   r   r   r   test_npgen_boxing_unboxing\   s   
z/TestRandomGenerators.test_npgen_boxing_unboxingc                 C   s`   t j }tdd }tdd }||}t|}~|| t|}| ||d  d S )Nc                 S      |   S rP   r-   r/   r   r   r   r1   d       zATestRandomGenerators.test_npgen_boxing_refcount.<locals>.<lambda>c                 S   rY   rP   r   r/   r   r   r   r1   e   rZ   r)   )r   r.   r5   r6   r7   sysgetrefcountr   )r"   r\   no_boxdo_boxyref_1ref_2r   r   r   test_npgen_boxing_refcountb   s   


z/TestRandomGenerators.test_npgen_boxing_refcountc              	   C   sd   g d}t ttg}t||D ]!\}}| j||d | || W d    n1 s*w   Y  qd S )Nr   )_func
_func_name)r   r   r	   zipsubTestrX   )r"   
func_namesfuncsrh   ri   r   r   r   test_bitgen_funcso   s   
z&TestRandomGenerators.test_bitgen_funcsc                 C   s   g d}t jt jg}d tg}dd }|   | j|dt jd W d    n1 s*w   Y  dd }|D ]-}|D ](}|D ]#}| j|||d | ||d || W d    n1 s[w   Y  q=q9q5d S )N)Nr   )d   )r,         c                 S   r^   rP   r-   r0   sizedtyper   r   r   r1   }   r_   z2TestRandomGenerators.test_random.<locals>.<lambda>ro   )rF   rG   c                 S   s   | j ||dS )N)rs   rt   r-   rr   r   r   r   r1      s    )_size_dtype_bitgen)r   r   r   r
   rk   rO   )r"   
test_sizestest_dtypesbitgen_types	dist_funcru   rv   rw   r   r   r   test_randomw   s0   
z TestRandomGenerators.test_random)NNNN)r)   )	r%   r&   r'   rO   rX   r]   rg   rn   r|   r   r   r   r   r>   0   s    

r>   c                   @   r   )TestGeneratorCachingc                 C   sr   t jd}t jd}tjdd dd}| |d|| | |d|| tt}| |d d d S )	Nr)   c                 S   r*   r+   r-   r/   r   r   r   r1      r2   z=TestGeneratorCaching.test_randomgen_caching.<locals>.<lambda>Tr3   r,   exitcoder   )	r   r.   r5   r6   r7   rB   r   r=   r   )r"   r9   r:   r<   resr   r   r   test_randomgen_caching   s   z+TestGeneratorCaching.test_randomgen_cachingN)r%   r&   r'   r   r   r   r   r   r}      r(   r}   )r6   numpyr   r`   r   numba.tests.supportr   r   !numba.np.random.generator_methodsr   numba.np.random.generator_corer   r   r	   numpy.randomr
   r   numba.core.errorsr   r   r   r   r=   r>   r}   r   r   r   r   <module>   s    ^