a
    ­Àh„  ã                
   @   s   d dl Z d dlZd dlZd dlZd dlmZ dd„ Ze e¡Z	dZ
dZej ed¡Zedu rve	 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’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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rzeszz$e	 d¡ ddlT e	 d¡ dZW n: eyx 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 )!é    N)ÚVersionc                  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   sœ   t  ¡ dkrdS t  ¡ dkr dS dd l} t| jƒtdƒkr>dS z*dd l} d| jjj	j
d  dd¡ ¡ v W S  ty–   ttd	ƒ d ¡ d
¡d@ ƒ Y S 0 d S )NÚaarch64FÚLinuxr   z2.0ZsveZFeaturesÚ Úctypesé   i  @ )ÚplatformÚmachineÚsystemÚnumpyr   Ú__version__Únumpy.distutils.cpuinfoÚ	distutilsÚcpuinfoÚcpuÚinfoÚgetÚsplitÚImportErrorÚboolÚ
__import__ÚCDLLZ	getauxval)r   © r   úH/var/www/html/assistant/venv/lib/python3.9/site-packages/faiss/loader.pyÚ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   )Ú.0ÚkÚvr   r   r   Ú	<setcomp>:   ó    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    




r4   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©Úupper©r   Úxr   r   r   Ú	<genexpr>h   r    r9   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'   Nr5   r7   r   r   r   r9   t   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+   Zpackaging.versionr   r4   Ú	getLoggerÚ__name__ÚloggerZinstruction_setsZopt_env_variable_nameÚenvironr   Ú	opt_levelÚdebugr0   r*   ZloadedÚanyZhas_AVX512_SPRr   Zswigfaiss_avx512_sprr   ÚeZ
has_AVX512Zswigfaiss_avx512Zhas_AVX2Zswigfaiss_avx2Zhas_SVEZswigfaiss_sveZ	swigfaissr   r   r   r   Ú<module>   sx   H










