U
    Ã9%eL  ã                   @   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                   @   sp   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edƒdd„ ƒZdS )ÚTestInspectc                 C   s   t  ¡ jjS ©N)r   Zcurrent_contextZdeviceZcompute_capability)Úself© r   úc/var/www/html/Darija-Ai-API/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   sd   d}|  ¡ D ]}d|kr||krd}q|  |¡ |  |d¡ |  d|¡ |  d|¡ |  d|¡ d S )NFz.textTz*//## File ".*/test_inspect.py", line [0-9]ZS2RZBRAZEXIT)ÚsplitÚ
assertTrueÚassertRegexr   )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   sJ   t d d d… td d d… f}tj|dddd„ ƒ}|  |d| |¡¡ d S )Nr'   T©Zlineinfoc                 S   s.   t  d¡}|t| ƒk r*| |  || 7  < d S ©Nr'   ©r   Úgridr+   ©r   r   Úir   r   r   Úaddq   s    
z0TestInspect.test_inspect_sass_eager.<locals>.addr:   )r   r   r   r   r3   Úinspect_sass©r   r"   r:   r   r   r   Útest_inspect_sass_eagerm   s    
z#TestInspect.test_inspect_sass_eagerc                 C   sz   t jdddd„ ƒ}t d¡ tj¡}t d¡ tj¡}|d ||ƒ td d d… td d d… f}|  |d| |¡¡ d S )	NTr4   c                 S   s.   t  d¡}|t| ƒk r*| |  || 7  < d S r5   r6   r8   r   r   r   r:   {   s    
z/TestInspect.test_inspect_sass_lazy.<locals>.addé
   )r'   r>   r'   r:   )	r   r   ÚnpZarangeZastyper   r   r3   r;   )r   r:   r   r   Ú	signaturer   r   r   Útest_inspect_sass_lazyy   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 has not been found)	r   r   r   ÚassertRaisesÚRuntimeErrorr;   r   ÚstrÚ	exception)r   rB   Zraisesr   r   r   Ú"test_inspect_sass_nvdisasm_missingˆ   s
    
z.TestInspect.test_inspect_sass_nvdisasm_missingz&nvdisasm needed for inspect_sass_cfg()c                 C   sF   t d d d… td d d… f}t |¡dd„ ƒ}|  |j|dd¡ d S )Nr'   c                 S   s.   t  d¡}|t| ƒk r*| |  || 7  < d S r5   r6   r8   r   r   r   r:   ˜   s    
z.TestInspect.test_inspect_sass_cfg.<locals>.add)r@   zdigraph\s*\w\s*{(.|\n)*\n})r   r   r   r   r/   Zinspect_sass_cfgr<   r   r   r   Útest_inspect_sass_cfg”   s    

þz!TestInspect.test_inspect_sass_cfgN)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r&   r,   r3   r   r=   rA   r   rG   rH   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   rI   Úmainr   r   r   r   Ú<module>   s    