U
    iâËdk  ã                   @   s¨   d dl Z d dlZd dlmZ d dlZd dlmZmZ d dl	m
Z
mZ d dlmZ dZerpd dlmZ e dd	¡ e e  ¡ d
kd¡G dd„ deƒƒZedkr¤e ¡  dS )é    N)Útypes)Úoverride_env_configÚTestCase)Úcompile_isolatedÚFlags)ÚFastMathOptionsF)ÚbindingÚ z--debug-only=loop-vectorizeÚx86_64zx86_64 only testc                   @   sB   e Zd ZdZddd„Zdd„ Zejddid	�d
d„ ƒZdd„ Z	dS )ÚTestVectorizationzP
    Tests to assert that code which should vectorize does indeed vectorize
    Fc                 C   sr   t ddƒ�^ t ddƒ�H tƒ }t|ƒ|_d|_t|||d�}|j ¡ W  5 Q R £ W  5 Q R £ S Q R X W 5 Q R X d S )NZNUMBA_CPU_NAMEzskylake-avx512ZNUMBA_CPU_FEATURESr	   T)Úflags)r   r   r   ÚfastmathZnrtr   ZlibraryZget_llvm_str)ÚselfÚfuncZ
args_tupler   Ú_flagsZjitted© r   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_vectorization.pyÚgen_ir   s     ÿþ
zTestVectorization.gen_irc                 C   sB   dd„ }| j |tjd d d… fdd�}|  d|¡ |  d|¡ d S )Nc                 S   s$   d}t  | ¡D ]}|| ¡ 7 }q|S )Nr   )ÚnpZnditerÚitem)ÚxÚaccÚvr   r   r   Údo_sum!   s    z2TestVectorization.test_nditer_loop.<locals>.do_sumé   T©r   úvector.bodyúllvm.loop.isvectorized)r   r   Úfloat64ÚassertIn)r   r   Úllvm_irr   r   r   Útest_nditer_loop   s    z"TestVectorization.test_nditer_loopZNUMBA_SLP_VECTORIZEÚ1)Úenvvarsc                 C   sD   dd„ }t j}| j||fd |d d d… f dd�}|  d|¡ d S )Nc                 S   sD   | | |  |d< |||  |d< | | |  |d< |||  |d< d S )Nr   r   é   é   r   )Za1Za2Úb1Úb2ÚAr   r   r   Úfoo2   s    z'TestVectorization.test_slp.<locals>.fooé   r   Tr   z
2 x double)r   r   r   r   )r   r)   Útyr    r   r   r   Útest_slp-   s    &zTestVectorization.test_slpc                 C   s>   dd„ }| j |t tj¡fdd�}|  d|¡ |  d|¡ d S )Nc                 S   s    d}| D ]}|t  |¡7 }q|S )Ng        )r   Úsqrt)Úlstr   r   r   r   r   Úsum_sqrt_listC   s    z@TestVectorization.test_instcombine_effect.<locals>.sum_sqrt_listTr   r   r   )r   r   ZListTyper   r   )r   r/   r    r   r   r   Útest_instcombine_effect<   s    ÿz)TestVectorization.test_instcombine_effectN)F)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   r   Zrun_test_in_subprocessr,   r0   r   r   r   r   r      s   


r   Ú__main__)ÚplatformÚnumpyr   Znumbar   ZunittestZnumba.tests.supportr   r   Znumba.core.compilerr   r   Znumba.core.cpu_optionsr   Ú_DEBUGZllvmliter   ÚllvmZ
set_optionZskipIfÚmachiner   r1   Úmainr   r   r   r   Ú<module>   s   >