o
    1&iY                     @   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G dd deZedkrTe  dS dS )    N)njit)overload)ConfigStack)FlagsDEFAULT_FLAGS)types)default_mangler)TestCaseunittestc                   @      e Zd Zdd ZdS )TestCompilerFlagsc                 C   sB   t  }d}| t| d|_W d    d S 1 sw   Y  d S )Nz<'Flags' object has no attribute 'this_really_does_not_exist'T)r   assertRaisesRegexAttributeErrorZthis_really_does_not_exist)selfflagsmsg r   JC:\wamp64\www\opt\env\Lib\site-packages\numba/tests/test_compiler_flags.pytest_setting_invalid_attribute   s
   "z0TestCompilerFlags.test_setting_invalid_attributeN)__name__
__module____qualname__r   r   r   r   r   r          r   c                   @   r   )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 Nr   r   r   r   r   fastmath_status      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   r   zeTestCompilerFlagCachedOverload.test_fastmath_in_overload.<locals>.ov_fastmath_status.<locals>.codegen)r   topfastmath)r   r!   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)r   r$   r)   r&   r'   r   r(   r   test_fastmath_in_overload   s   
	
z8TestCompilerFlagCachedOverload.test_fastmath_in_overloadN)r   r   r   r+   r   r   r   r   r      r   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   check7   s   
z-TestFlagMangling.test_demangle.<locals>.checkT)r   r   Zno_cpython_wrappernrtr#   )r   r2   r   r   r1   r   test_demangle5   s   zTestFlagMangling.test_demanglec                 C   s2   t  }d|_d|_| t| t|  d S )NT)r   r3   auto_parallel
assertLesslenr-   r/   )r   r   r   r   r   test_mangled_flags_is_shorterK   s    z.TestFlagMangling.test_mangled_flags_is_shorterc                 C   sX   t  }d|_d|_d|_d|_| t| t|  |	| }| 
d| d S )NTalways0x)r   r3   r5   r#   inliner6   r7   r-   r/   r.   ZassertNotIn)r   r   	demangledr   r   r   /test_mangled_flags_with_fastmath_parfors_inlineR   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)   Tr9   )Zabi_tagsZ_Z3fooBz[0-9]+Nr   )r   Zint32r   r3   r;   r   r-   rematchr7   groupintr.   r*   r/   )r   fnameargtypesr   nameprefixmsizebaseZabi_mangledr<   r   r   r   $test_demangling_from_mangled_symbols^   s   

z5TestFlagMangling.test_demangling_from_mangled_symbolsN)r   r   r   r4   r8   r=   rI   r   r   r   r   r,   3   s
    r,   __main__)r>   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,   r   mainr   r   r   r   <module>   s    C