U
    ,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re  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   C/tmp/pip-unpacked-wheel-eu7e0c37/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   fname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   rA   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