U
    ,‰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   úH/tmp/pip-unpacked-wheel-eu7e0c37/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 S )Nc                 S   s   d S r   r   ©ÚxÚyr   r   r   Úfoo   s    z'TestInspect.test_monotyped.<locals>.foo©Úfiler   z(float32, int32)z!Generated by NVIDIA NVVM Compiler)r   r   r   Újitr   Úinspect_typesÚgetvalueÚassertInÚcloseÚinspect_llvmÚinspect_asm)r   Úsigr   r   ÚtypeannoZ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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   *   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   Úformatr   r   ÚassertEqualÚlenr   r   )r   r   r   r!   ZllvmirsZasmdictr   r   r   Útest_polytyped)   s,    
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   ÚkernelÚnameZsassZseen_functionÚliner   r   r   Ú_test_inspect_sassN   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   Zgridr'   ©r   r   Úir   r   r   Úadd`   s    
z0TestInspect.test_inspect_sass_eager.<locals>.addr3   )r   r   r   r   r.   Úinspect_sass)r   r    r3   r   r   r   Útest_inspect_sass_eager\   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 r/   r0   r1   r   r   r   r3   j   s    
z/TestInspect.test_inspect_sass_lazy.<locals>.addé
   )r#   r6   r#   r3   )	r   r   ÚnpZarangeZastyper   r   r.   r4   )r   r3   r   r   Ú	signaturer   r   r   Útest_inspect_sass_lazyh   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   Úfz   s    z9TestInspect.test_inspect_sass_nvdisasm_missing.<locals>.fznvdisasm is required)	r   r   r   ÚassertRaisesÚRuntimeErrorr4   r   ÚstrÚ	exception)r   r:   Zraisesr   r   r   Ú"test_inspect_sass_nvdisasm_missingw   s
    
z.TestInspect.test_inspect_sass_nvdisasm_missingN)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r"   r(   r.   r   r5   r9   r   r?   r   r   r   r   r   
   s   
%

r   Ú__main__)Znumpyr7   Úior   Znumbar   r   r   r   r   Znumba.cuda.testingr   r	   r
   r   r   r   r@   Úmainr   r   r   r   Ú<module>   s   y