o
    1ήc                     @   sJ  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
 pCe d
dG dd deZedeejZejje	 p_e ddG dd deZedeejZejje	 p{e 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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 d    n1 s/w   Y  W n tyK } z
t |}W Y d }~nd }~ww zdd l}|jdgtd	d
d}	|		 }	W n tyw } z
t |}	W Y d }~nd }~ww dd l
}
|
jd|||	f dd}td|| ||f )NT' /proc/cpuinfori   r   	/bin/true1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)actualdesiredfname__tracebackhide__detectedfdcpuinfoerrr   auxvr   error_report r%   I/tmp/pip-target-vg8gfxp4/lib/python/numpy/core/tests/test_cpu_features.pyassert_features_equal   sB   
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 ]\}} fdd|D }tt|t|| q	 jD ]} |}t|}t||| q%d 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+   gnamer5   test_featuresfeature_namer-   npy_haver%   r*   r&   r7   <   s   


zAbstractTest.test_featuresc                 C   s@   | j ||}t|tr|| jv S |D ]
}|| jv r dS qdS )NTF)features_mapr3   
isinstancer   features_flags)r+   r8   	map_namesr/   r%   r%   r&   r-   G   s   


zAbstractTest.cpu_havec                 C   s   |  || _d S r)   )get_cpuinfo_itemr<   )r+   	magic_keyr%   r%   r&   load_flags_cpuinfoP   s   zAbstractTest.load_flags_cpuinfoc                 C   s   t  }td0}|D ]$}||sq
dd |ddD }t|dkr.||d   }q
W d    |S 1 s:w   Y  |S )Nr   c                 S      g | ]}|  qS r%   stripr.   sr%   r%   r&   r0   Y       z1AbstractTest.get_cpuinfo_item.<locals>.<listcomp>:      )setr   
startswithsplitlenunionupper)r+   r?   valuesr    lineflags_valuer%   r%   r&   r>   S   s   


zAbstractTest.get_cpuinfo_itemc                 C   s~   dd l }|jdgtddd}|dD ](}|dsqdd	 |d
dD }t|dkr<| j|d  	  | _qd S )Nr   r   r   r	   r      
s   AT_HWCAPc                 S   rA   r%   rB   rD   r%   r%   r&   r0   d   rF   z0AbstractTest.load_flags_auxv.<locals>.<listcomp>   :rH   rI   )
r   r   r   rL   rK   rM   r<   rN   rO   r   )r+   r   r#   athwcap_valuer%   r%   r&   load_flags_auxv^   s   
zAbstractTest.load_flags_auxvN)__name__
__module____qualname__r5   r1   r:   rJ   r<   r,   r7   r-   r@   r>   rW   r%   r%   r%   r&   r(   3   s    	r(   linuxcygwinz^(amd64|x86|i386|i686)zOnly for Linux and x86)reasonc                   @   sd   e Zd Zg dZeg dg dg dg dg dg ddZed	d
ddddddddd
Zdd ZdS )Test_X86_Features)MMXSSESSE2SSE3SSSE3SSE41POPCNTSSE42AVXF16CXOPFMA4FMA3AVX2AVX512FAVX512CDAVX512ERAVX512PFAVX5124FMAPSAVX5124VNNIWAVX512VPOPCNTDQAVX512VLAVX512BWAVX512DQ
AVX512VNNI
AVX512IFMA
AVX512VBMIAVX512VBMI2AVX512BITALG)rm   rn   ro   rp   )rm   rn   ro   rp   rq   rr   rs   )rm   rn   ru   rv   rt   )rm   rn   ru   rv   rt   rw   )rm   rn   ru   rv   rt   rx   ry   )rm   rn   ru   rv   rt   rx   ry   rw   rz   r{   rs   )
AVX512_KNL
AVX512_KNM
AVX512_SKX
AVX512_CLX
AVX512_CNL
AVX512_ICLPNISSE4_1SSE4_2FMAAVX512_VNNIAVX512_BITALGAVX512_VBMI2AVX512_4FMAPSAVX512_4VNNIWAVX512_VPOPCNTDQ)
rb   rd   rf   rk   rw   r{   rz   rq   rr   rs   c                 C   s   |  d d S )Nflags)r@   r*   r%   r%   r&   r,      s   zTest_X86_Features.load_flagsN)rX   rY   rZ   r5   r   r1   r:   r,   r%   r%   r%   r&   r^   n   s     r^   z^(powerpc|ppc)64zOnly for Linux and Powerc                   @   s*   e Zd Zg dZeddddZdd ZdS )	Test_POWER_Features)VSXVSX2VSX3VSX4	ARCH_2_07	ARCH_3_00ARCH_3_1)r   r   r   c                 C      |    d S r)   rW   r*   r%   r%   r&   r,         zTest_POWER_Features.load_flagsN)rX   rY   rZ   r5   r   r:   r,   r%   r%   r%   r&   r      s    r   z^(s390x)zOnly for Linux and IBM Zc                   @   s   e Zd Zg dZdd ZdS )Test_ZARCH_Features)VXVXEVXE2c                 C   r   r)   r   r*   r%   r%   r&   r,      r   zTest_ZARCH_Features.load_flagsN)rX   rY   rZ   r5   r,   r%   r%   r%   r&   r      s    r   z^(arm|aarch64)zOnly for Linux and ARMc                   @   s0   e Zd Zg dZeddgddgdZdd ZdS )	Test_ARM_Features)NEONASIMDFPHPASIMDHPASIMDDPASIMDFHMr   HALFVFPV4)	NEON_FP16
NEON_VFPV4c                 C   sh   |  d | d}|rtdtt| dknd}tdts"|r,tdddd| _	d S td	d
| _	d S )NFeatureszCPU architecture0   r   z^(aarch64|AARCH64)r   )r   r   r   )AESSHA1SHA2PMULLCRC32)r   )
r@   r>   intnextiterrematchmachiner   r:   )r+   archis_rootfs_v8r%   r%   r&   r,      s   

 zTest_ARM_Features.load_flagsN)rX   rY   rZ   r5   r   r1   r,   r%   r%   r%   r&   r      s    r   )sysplatformr   pytestnumpy.core._multiarray_umathr   r'   r(   rK   is_linux	is_cygwinr   r   
IGNORECASEis_x86markskipifr^   is_powerr   is_zarchr   is_armr   r%   r%   r%   r&   <module>   s.     /7