o
    1&i                     @   sd   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z
 G dd deZedkr0e   dS dS )    N)TestCaseoverride_config)njit)typesc                   @   s    e Zd ZdZdd Zdd ZdS )TestPassManagerOptimizationzT Tests that pass manager is not overriding the intended
    optimization level.
    c                 C   sB   t dd || ||W  d    S 1 sw   Y  d S )NZOPTr   )r   compileZinspect_llvm)selffnsig r   RC:\wamp64\www\opt\env\Lib\site-packages\numba/tests/test_optimisation_pipelines.py_get_llvmir   s   
$z'TestPassManagerOptimization._get_llvmirc                    s  t ddddd }tjf}| j||d}t|}|j|jd  jj	  fdd	|j
D }| t|d
 |d }dd	 |jD }| t|d
 |d }dd	 |jD }	h d}
d}|	D ]}|j|
v rp|
|j |sod}q^|
rv|rv nq^| t|
dd d S )NTnumpy)debugZerror_modelc                 S   s$   | d }|d }|| }t | |S )NgGz?gQ@)print)abcdr   r   r   foo   s
   z=TestPassManagerOptimization.test_override_config.<locals>.foo)r
   r   c                    s   g | ]	}|j  kr|qS r   name.0xr   r   r   
<listcomp>"       zDTestPassManagerOptimization.test_override_config.<locals>.<listcomp>   c                 S   s   g | ]}|qS r   r   r   r   r   r   r   %   s    c                 S   s   g | ]	}|j d kr|qS )call)opcoder   r   r   r   r   *   r   >   ZfmulZfdivZfaddFz#Function was optimized unexpectedly)r   r   Zfloat64r   llvmZparse_assemblyZ	overloadsZ
signaturesZfndescZmangled_nameZ	functionsassertEquallenblocksZassertGreaterZinstructionsr   remove)r   r   r
   Zfull_irmodulefuncsfuncr#   blockZinstrsZ	op_expectstartedr   r   r   r   test_override_config   s6   



z0TestPassManagerOptimization.test_override_configN)__name__
__module____qualname____doc__r   r*   r   r   r   r   r   	   s    r   __main__)ZunittestZnumba.tests.supportr   r   Znumbar   Z
numba.corer   Zllvmlite.bindingZbindingr    r   r+   mainr   r   r   r   <module>   s    0