U
    #c                     @   sL  d dl Z d dlZd dlZd dlZd dlmZ dd ZG dd dZe jdZ	e jdZ
e Zed	eejZejje	p~e
 pe d
dG dd deZedeejZejje	 pe ddG dd deZedeejZejje	 pe ddG dd deZedeejZejje	 p0e ddG dd deZdS )    N)__cpu_features__c              
   C   s  d}t | t | } }| |kr"d S t tdd}z$tdd}|d}W 5 Q R X W n* tk
r } zt |}W 5 d }~X Y nX z*dd l}|jdgtd	d
d}	|		 }	W n* tk
r } zt |}	W 5 d }~X Y nX dd l
}
|
jd|||	f dd}td|| ||f d S )NT' /proc/cpuinfori   r   	/bin/true1ZLD_SHOW_AUXVenva  
###########################################
### Extra debugging information
###########################################
-------------------------------------------
--- NumPy Detections
-------------------------------------------
%s
-------------------------------------------
--- SYS / CPUINFO
-------------------------------------------
%s....
-------------------------------------------
--- SYS / AUXV
-------------------------------------------
%s
)prefixz9Failure Detection
 NAME: '%s'
 ACTUAL: %s
 DESIRED: %s
%s)strr   replaceopenread	Exception
subprocesscheck_outputdictdecodetextwrapindentAssertionError)actualZdesiredfnameZ__tracebackhide__ZdetectedfdZcpuinfoerrr   auxvr   Zerror_report r   F/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_cpu_features.pyassert_features_equal   s6    
r!   c                   @   sN   e Zd Zg Zi Zi Ze Zdd Zdd Z	dd Z
dd Zd	d
 Zdd ZdS )AbstractTestc                 C   s   d S Nr   selfr   r   r    
load_flags9   s    zAbstractTest.load_flagsc                    st        j D ]0\}} fdd|D }tt|t|| q jD ]$} |}t|}t||| qJd S )Nc                    s   g | ]}  |qS r   )cpu_have).0fr$   r   r    
<listcomp>?   s     z.AbstractTest.test_features.<locals>.<listcomp>)	r&   features_groupsitemsr!   r   getallfeaturesr'   )r%   gnamer/   test_featuresfeature_namer'   Znpy_haver   r$   r    r1   <   s    


zAbstractTest.test_featuresc                 C   s@   | j ||}t|tr"|| jkS |D ]}|| jkr& dS q&dS )NTF)features_mapr-   
isinstancer   features_flags)r%   r2   Z	map_namesr)   r   r   r    r'   G   s    


zAbstractTest.cpu_havec                 C   s   |  || _d S r#   )get_cpuinfo_itemr5   )r%   	magic_keyr   r   r    load_flags_cpuinfoP   s    zAbstractTest.load_flags_cpuinfoc              	   C   sl   t  }tdT}|D ]H}||s$qdd |ddD }t|dkr||d   }qW 5 Q R X |S )Nr   c                 S   s   g | ]}|  qS r   stripr(   sr   r   r    r*   Y   s     z1AbstractTest.get_cpuinfo_item.<locals>.<listcomp>:      )setr   
startswithsplitlenunionupper)r%   r7   valuesr   lineZflags_valuer   r   r    r6   S   s    

"zAbstractTest.get_cpuinfo_itemc                 C   s~   dd l }|jdgtddd}|dD ]P}|ds8q(dd	 |d
dD }t|dkr(| j|d  	  | _q(d S )Nr   r   r   r	   r
      
s   AT_HWCAPc                 S   s   g | ]}|  qS r   r9   r;   r   r   r    r*   d   s     z0AbstractTest.load_flags_auxv.<locals>.<listcomp>   :r>   r?   )
r   r   r   rB   rA   rC   r5   rD   rE   r   )r%   r   r   atZhwcap_valuer   r   r    load_flags_auxv^   s    
zAbstractTest.load_flags_auxvN)__name__
__module____qualname__r/   r+   r3   r@   r5   r&   r1   r'   r8   r6   rK   r   r   r   r    r"   3   s   	r"   linuxcygwinz^(amd64|x86|i386|i686)zOnly for Linux and x86)reasonc                   @   s   e Zd Zddddddddd	d
dddddddddddddddddddgZeddddgdddddddgdddddgddddddgdddddddgdddddddddddgdZedd d!d"d#d$d%d&d'd(d)
Zd*d+ Zd,S )-Test_X86_FeaturesZMMXZSSEZSSE2SSE3ZSSSE3SSE41ZPOPCNTSSE42ZAVXZF16CZXOPZFMA4FMA3ZAVX2ZAVX512FZAVX512CDZAVX512ERZAVX512PFAVX5124FMAPSAVX5124VNNIWAVX512VPOPCNTDQZAVX512VLZAVX512BWZAVX512DQ
AVX512VNNIZ
AVX512IFMAZ
AVX512VBMIAVX512VBMI2AVX512BITALG)Z
AVX512_KNLZ
AVX512_KNMZ
AVX512_SKXZ
AVX512_CLXZ
AVX512_CNLZ
AVX512_ICLZPNIZSSE4_1ZSSE4_2ZFMAZAVX512_VNNIZAVX512_BITALGZAVX512_VBMI2ZAVX512_4FMAPSZAVX512_4VNNIWZAVX512_VPOPCNTDQ)
rS   rT   rU   rV   rZ   r\   r[   rW   rX   rY   c                 C   s   |  d d S )Nflags)r8   r$   r   r   r    r&      s    zTest_X86_Features.load_flagsN)rL   rM   rN   r/   r   r+   r3   r&   r   r   r   r    rR   n   s|                           

            rR   z^(powerpc|ppc)64zOnly for Linux and Powerc                   @   s.   e Zd ZddddgZeddddZd	d
 ZdS )Test_POWER_FeaturesZVSXVSX2VSX3VSX4Z	ARCH_2_07Z	ARCH_3_00ZARCH_3_1)r_   r`   ra   c                 C   s   |    d S r#   rK   r$   r   r   r    r&      s    zTest_POWER_Features.load_flagsN)rL   rM   rN   r/   r   r3   r&   r   r   r   r    r^      s   r^   z^(s390x)zOnly for Linux and IBM Zc                   @   s   e Zd ZdddgZdd ZdS )Test_ZARCH_FeaturesZVXZVXEZVXE2c                 C   s   |    d S r#   rb   r$   r   r   r    r&      s    zTest_ZARCH_Features.load_flagsN)rL   rM   rN   r/   r&   r   r   r   r    rc      s   
rc   z^(arm|aarch64)zOnly for Linux and ARMc                   @   s8   e Zd ZddddddgZeddgddgd	Zd
d ZdS )Test_ARM_FeaturesNEONASIMDZFPHPZASIMDHPZASIMDDPZASIMDFHMHALFVFPV4)Z	NEON_FP16Z
NEON_VFPV4c                 C   sf   |  d | d}|r0tdtt| dknd}tdtsD|rVtdddd| _	ntd	d
| _	d S )NZFeatureszCPU architecture0   r   z^(aarch64|AARCH64)rf   )re   rg   rh   )ZAESSHA1ZSHA2ZPMULLZCRC32)rf   )
r8   r6   intnextiterrematchmachiner   r3   )r%   archZis_rootfs_v8r   r   r    r&      s    

   
zTest_ARM_Features.load_flagsN)rL   rM   rN   r/   r   r+   r&   r   r   r   r    rd      s        rd   )sysplatformro   ZpytestZnumpy.core._multiarray_umathr   r!   r"   rA   Zis_linuxZ	is_cygwinrq   rp   
IGNORECASEZis_x86markZskipifrR   Zis_powerr^   Zis_zarchrc   Zis_armrd   r   r   r   r    <module>   s.    /7 