U
    hâËd@  ã                   @   s€   d dl Zd dlmZ d dlmZmZmZmZm	Z	 d dl
mZmZ d dl
mZmZmZ edƒG dd„ deƒƒZed	kr|e ¡  dS )
é    N)ÚStringIO)ÚcudaÚfloat32Úfloat64Úint32Úintp)ÚunittestÚCUDATestCase)Úskip_on_cudasimÚskip_with_nvdisasmÚskip_without_nvdisasmz0Simulator does not generate code to be inspectedc                   @   s`   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zed	ƒd
d„ ƒZ	ed	ƒdd„ ƒZ
edƒdd„ ƒZdS )ÚTestInspectc                 C   s   t  ¡ jjS ©N)r   Zcurrent_contextZdeviceZcompute_capability)Úself© r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cuda/tests/cudapy/test_inspect.pyÚcc   s    zTestInspect.ccc                 C   s¨   t tf}t |¡dd„ ƒ}tƒ }|j|d | ¡ }|  d|¡ |  d|¡ | ¡  | 	|¡}|  d|¡ |  d|¡ |  d|¡ | 
|¡}|  d|¡ |  d|¡ d S )	Nc                 S   s   d S r   r   ©ÚxÚyr   r   r   Úfoo   s    z'TestInspect.test_monotyped.<locals>.foo©Úfiler   z(float32, int32)úcuda.kernel.wrapperúdefine linkonce_odr i32z!Generated by NVIDIA NVVM Compiler)r   r   r   Újitr   Úinspect_typesÚgetvalueÚassertInÚcloseÚinspect_llvmÚinspect_asm)r   Úsigr   r   ÚtypeannoÚllvmÚasmr   r   r   Útest_monotyped   s     


zTestInspect.test_monotypedc                 C   s~  t jdd„ ƒ}|d ddƒ |d ddƒ tƒ }|j|d | ¡ }| ¡  |  d t¡|¡ |  d	|¡ | 	¡ }|  
d
t|ƒ¡ |  ttf|¡ |  ttf|¡ |  d|ttf ¡ |  d|ttf ¡ |  d|ttf ¡ |  d|ttf ¡ |  d|ttf ¡ |  d|ttf ¡ | ¡ }|  
d
t|ƒ¡ |  ttf|¡ |  ttf|¡ |  d|ttf ¡ |  d|ttf ¡ d S )Nc                 S   s   d S r   r   r   r   r   r   r   1   s    z'TestInspect.test_polytyped.<locals>.foo)é   r'   r'   g333333ó?g333333@r   z
({0}, {0})z(float64, float64)é   r   r   r   )r   r   r   r   r   r   r   Úformatr   r    ÚassertEqualÚlenr   r!   )r   r   r   r#   ZllvmirsZasmdictr   r   r   Útest_polytyped0   s4    
zTestInspect.test_polytypedc                 C   sX   d}|  ¡ D ]}d|kr||krd}q|  |¡ |  d|¡ |  d|¡ |  d|¡ d S )NFz.textTZS2RZBRAZEXIT)ÚsplitÚ
assertTruer   )r   ZkernelÚnameÚsassZseen_functionÚliner   r   r   Ú_test_inspect_sass]   s    
zTestInspect._test_inspect_sassz"nvdisasm needed for inspect_sass()c                 C   sF   t d d d… td d d… f}t |¡dd„ ƒ}|  |d| |¡¡ d S )Nr'   c                 S   s.   t  d¡}|t| ƒk r*| |  || 7  < d S ©Nr'   ©r   Úgridr+   ©r   r   Úir   r   r   Úaddo   s    
z0TestInspect.test_inspect_sass_eager.<locals>.addr8   )r   r   r   r   r2   Úinspect_sass)r   r"   r8   r   r   r   Útest_inspect_sass_eagerk   s    
z#TestInspect.test_inspect_sass_eagerc                 C   st   t jdd„ ƒ}t d¡ tj¡}t d¡ tj¡}|d ||ƒ td d d… td d d… f}|  |d| |¡¡ d S )Nc                 S   s.   t  d¡}|t| ƒk r*| |  || 7  < d S r3   r4   r6   r   r   r   r8   y   s    
z/TestInspect.test_inspect_sass_lazy.<locals>.addé
   )r'   r;   r'   r8   )	r   r   ÚnpZarangeZastyper   r   r2   r9   )r   r8   r   r   Ú	signaturer   r   r   Útest_inspect_sass_lazyw   s    
z"TestInspect.test_inspect_sass_lazyz@Missing nvdisasm exception only generated when it is not presentc              	   C   sR   t  td d d… f¡dd„ ƒ}|  t¡}| ¡  W 5 Q R X |  dt|jƒ¡ d S )Nr'   c                 S   s   d| d< d S )Nr   r   )r   r   r   r   Úf‰   s    z9TestInspect.test_inspect_sass_nvdisasm_missing.<locals>.fznvdisasm is required)	r   r   r   ÚassertRaisesÚRuntimeErrorr9   r   ÚstrÚ	exception)r   r?   Zraisesr   r   r   Ú"test_inspect_sass_nvdisasm_missing†   s
    
z.TestInspect.test_inspect_sass_nvdisasm_missingN)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r&   r,   r2   r   r:   r>   r   rD   r   r   r   r   r   
   s   
 -

r   Ú__main__)Únumpyr<   Úior   Znumbar   r   r   r   r   Znumba.cuda.testingr   r	   r
   r   r   r   rE   Úmainr   r   r   r   Ú<module>   s    	