a
    ^ŠÝgS  ã                
   @   s–  d dl Z d dlZd dlZd dlZdd„ Zdd„ Ze e¡ZdZ	dZ
ej e
d¡Zedu rre de
› d¡ eƒ Z	n"e d	e› d
¡ eƒ Z	e	 e¡ dZedd„ e	D ƒƒZerz$e d¡ ddlT e d¡ dZW n: ey Z z e de›¡ dZW Y dZ[n
dZ[0 0 edd„ e	D ƒƒZerˆz$e d¡ ddlT e d¡ dZW n: ey† Z z e de›¡ dZW Y dZ[n
dZ[0 0 de	v Zerüesüz$e d¡ ddlT e d¡ dZW n: eyú Z z e de›¡ dZW Y dZ[n
dZ[0 0 de	v Zerpespz$e d¡ ddlT e d¡ dZW n: eyn Z z e de›¡ dZW Y dZ[n
dZ[0 0 es’e d ¡ ddlT e d!¡ dS )"é    Nc                 C   s   dd„ |   d¡D ƒS )Nc                 S   s   g | ]}t |ƒ‘qS © )Úint©Ú.0Úxr   r   úZ/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/faiss/loader.pyÚ
<listcomp>   ó    zVersion.<locals>.<listcomp>Ú.)Úsplit)Úvr   r   r   ÚVersion   s    r   c                  C   sr  dd„ } ddl }t|jƒtdƒkrvddlm} dd„ | ¡ D ƒ}| ƒ rP| d	¡ t d
d¡ 	d¡D ]}| 
|¡ qb|S t ¡ dkr t ddg¡d dkrždhS nÌt ¡ dkrlddl}tƒ }d|jjjjd  dd¡v râ| d¡ d|jjjjd  dd¡v r
| d¡ d|jjjjd  dd¡v r2| d¡ | ƒ rD| d	¡ t d
d¡ 	d¡D ]}| 
|¡ qV|S tƒ S )aÏ  
    Returns the set of supported CPU features, see
    https://github.com/numpy/numpy/blob/master/numpy/core/src/common/npy_cpu_features.h
    for the list of features that this set may contain per architecture.

    Example:
    >>> supported_instruction_sets()  # for x86
    {"SSE2", "AVX2", "AVX512", ...}
    >>> supported_instruction_sets()  # for PPC
    {"VSX", "VSX2", ...}
    >>> supported_instruction_sets()  # for ARM
    {"NEON", "ASIMD", ...}
    c                  S   sf   t  ¡ dkrdS t  ¡ dkr dS dd l} t| jƒtdƒkr>dS dd l} d| jjj	j
d  dd¡ ¡ v S )	NÚaarch64FÚLinuxr   z2.0ZsveZFeaturesÚ )ÚplatformÚmachineÚsystemÚnumpyr   Ú__version__Únumpy.distutils.cpuinfoÚ	distutilsÚcpuinfoÚcpuÚinfoÚgetr   )r   r   r   r   Úis_sve_supported    s    z4supported_instruction_sets.<locals>.is_sve_supportedr   Nz1.19)Ú__cpu_features__c                 S   s   h | ]\}}|r|’qS r   r   )r   Úkr   r   r   r   Ú	<setcomp>4   r	   z-supported_instruction_sets.<locals>.<setcomp>ÚSVEZFAISS_DISABLE_CPU_FEATURESr   z, 	
ÚDarwinz/usr/sbin/sysctlzhw.optional.avx2_0éÿÿÿÿÚ1ÚAVX2r   Zavx2ÚflagsZavx512ÚAVX512Zavx512_fp16Ú
AVX512_SPR)r   r   r   Znumpy.core._multiarray_umathr   ÚitemsÚaddÚosÚgetenvr   Údiscardr   r   Ú
subprocessÚcheck_outputr   Úsetr   r   r   r   r   )r   r   r   Ú	supportedÚfÚresultr   r   r   Úsupported_instruction_sets   s8    




r3   ZFAISS_OPT_LEVELzEnvironment variable zK is not set, so let's pick the instruction set according to the current CPUzUsing z as an instruction set.Fc                 c   s   | ]}d |  ¡ v V  qdS )r'   N©Úupperr   r   r   r   Ú	<genexpr>b   r	   r6   z&Loading faiss with AVX512-SPR support.é   )Ú*z2Successfully loaded faiss with AVX512-SPR support.Tz7Could not load library with AVX512-SPR support due to:
c                 c   s   | ]}d |  ¡ v V  qdS )r&   Nr4   r   r   r   r   r6   n   r	   z"Loading faiss with AVX512 support.z.Successfully loaded faiss with AVX512 support.z3Could not load library with AVX512 support due to:
r$   z Loading faiss with AVX2 support.z,Successfully loaded faiss with AVX2 support.z1Could not load library with AVX2 support due to:
r    zLoading faiss with SVE support.z+Successfully loaded faiss with SVE support.z0Could not load library with SVE support due to:
zLoading faiss.zSuccessfully loaded faiss.)r   r-   Úloggingr*   r   r3   Ú	getLoggerÚ__name__ÚloggerZinstruction_setsZopt_env_variable_nameÚenvironr   Ú	opt_levelÚdebugr/   r)   ZloadedÚanyZhas_AVX512_SPRr   Zswigfaiss_avx512_sprÚImportErrorÚeZ
has_AVX512Zswigfaiss_avx512Zhas_AVX2Zswigfaiss_avx2Zhas_SVEZswigfaiss_sveZ	swigfaissr   r   r   r   Ú<module>   sx   A










