U
    iâËdÈ  ã                   @   s˜   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZmZ G d	d
„ d
eƒZG dd„ deƒZedkr”e ¡  dS )é    N)Únjit)Úoverload)ÚConfigStack)ÚFlagsÚDEFAULT_FLAGS)Útypes)Údefault_mangler)ÚTestCaseÚunittestc                   @   s   e Zd Zdd„ ZdS )ÚTestCompilerFlagCachedOverloadc                    sh   dd„ ‰ t ˆ ƒdd„ ƒ}tdd�‡ fdd„ƒ‰tƒ ‡ ‡fd	d
„ƒ}|ƒ \}}|  |d¡ |  |d¡ d S )Nc                   S   s   d S ©N© r   r   r   úX/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_compiler_flags.pyÚfastmath_status   s    zQTestCompilerFlagCachedOverload.test_fastmath_in_overload.<locals>.fastmath_statusc                     s(   t ƒ  ¡ } | jrdnd‰ ‡ fdd„}|S )NúHas fastmathúNo fastmathc                      s   ˆ S r   r   r   ©Úvalr   r   Úcodegen   s    zeTestCompilerFlagCachedOverload.test_fastmath_in_overload.<locals>.ov_fastmath_status.<locals>.codegen)r   ÚtopÚfastmath)Úflagsr   r   r   r   Úov_fastmath_status   s    
zTTestCompilerFlagCachedOverload.test_fastmath_in_overload.<locals>.ov_fastmath_statusT)r   c                      s   ˆ ƒ S r   r   r   )r   r   r   Úset_fastmath   s    zNTestCompilerFlagCachedOverload.test_fastmath_in_overload.<locals>.set_fastmathc                     s   ˆ ƒ } ˆƒ }| |fS r   r   )ÚaÚb©r   r   r   r   Úfoo    s    zETestCompilerFlagCachedOverload.test_fastmath_in_overload.<locals>.foor   r   )r   r   ÚassertEqual)Úselfr   r   r   r   r   r   r   Útest_fastmath_in_overload   s    
	
z8TestCompilerFlagCachedOverload.test_fastmath_in_overloadN)Ú__name__Ú
__module__Ú__qualname__r    r   r   r   r   r      s   r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestFlagManglingc                    sF   ‡ fdd„}t ƒ }||ƒ |tƒ t ƒ }d|_d|_d|_||ƒ d S )Nc                    s&   |   ¡ }|  |¡}ˆ  ||  ¡ ¡ d S r   )Úget_mangle_stringÚdemangler   Úsummary)r   ZmangledÚout©r   r   r   Úcheck/   s    
z-TestFlagMangling.test_demangle.<locals>.checkT)r   r   Zno_cpython_wrapperÚnrtr   )r   r*   r   r   r)   r   Útest_demangle-   s    zTestFlagMangling.test_demanglec                 C   s2   t ƒ }d|_d|_|  t| ¡ ƒt| ¡ ƒ¡ d S )NT)r   r+   Úauto_parallelÚ
assertLessÚlenr%   r'   )r   r   r   r   r   Útest_mangled_flags_is_shorterC   s    z.TestFlagMangling.test_mangled_flags_is_shorterc                 C   sX   t ƒ }d|_d|_d|_d|_|  t| ¡ ƒt| ¡ ƒ¡ | 	| ¡ ¡}|  
d|¡ d S )NTÚalwaysÚ0x)r   r+   r-   r   Úinliner.   r/   r%   r'   r&   ZassertNotIn)r   r   Ú	demangledr   r   r   Ú/test_mangled_flags_with_fastmath_parfors_inlineJ   s    z@TestFlagMangling.test_mangled_flags_with_fastmath_parfors_inlinec                 C   sš   d}t jf}tƒ }d|_d|_t||| ¡ gd�}d}t d|t	|ƒd… ¡}| 
d¡}t	|ƒt	|ƒ }|||t|ƒ … }	t |	¡}
|  |
| ¡ ¡ dS )	z,Test demangling of flags from mangled symbolr   TZ
myhardware)Zabi_tagsZ_Z3fooBz[0-9]+Nr   )r   Zint32r   r+   Ztarget_backendr   r%   ÚreÚmatchr/   ÚgroupÚintr&   r   r'   )r   ÚfnameZargtypesr   ÚnameÚprefixÚmÚsizeÚbaseZabi_mangledr4   r   r   r   Ú$test_demangling_from_mangled_symbolsV   s"      ÿ

z5TestFlagMangling.test_demangling_from_mangled_symbolsN)r!   r"   r#   r,   r0   r5   r@   r   r   r   r   r$   +   s   r$   Ú__main__)r6   Znumbar   Znumba.core.extendingr   Znumba.core.targetconfigr   Znumba.core.compilerr   r   Z
numba.corer   Znumba.core.funcdescr   Znumba.tests.supportr	   r
   r   r$   r!   Úmainr   r   r   r   Ú<module>   s   C