o
    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 r9ede
 d e Z	ned	e d
 e Z	e	e dZedd e	D Zerz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[ww edd e	D Zerz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[ww de	v Zeresz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[ww de	v Zer1es1zed ddlT ed dZW n ey0 Z zede dZW Y dZ[ndZ[ww esDed  ddlT ed! dS dS )"    Nc                 C   s   dd |  dD S )Nc                 S   s   g | ]}t |qS  )int.0xr   r   f/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/faiss/loader.py
<listcomp>   s    zVersion.<locals>.<listcomp>.)split)vr   r   r   Version   s   r   c                  C   sl  dd } ddl }t|jtdkr;ddlm} dd | D }|  r(|d	 td
d	dD ]}|
| q1|S t dkrRtddgd dkrOdhS t S t dkrddl}t }d|jjjjd ddv rr|d d|jjjjd ddv r|d d|jjjjd ddv r|d |  r|d	 td
d	dD ]}|
| q|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.0sve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   s    z-supported_instruction_sets.<locals>.<setcomp>SVEFAISS_DISABLE_CPU_FEATURESr   z, 	
Darwinz/usr/sbin/sysctlzhw.optional.avx2_01AVX2r   avx2flagsavx512AVX512avx512_fp16
AVX512_SPR)r   r   r   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   s:   




r9   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       | ]	}d |  v V  qdS )r,   Nupperr   r   r   r   	<genexpr>b       r>   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   r;   )r*   Nr<   r   r   r   r   r>   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   r3   loggingr0   r   r9   	getLogger__name__loggerinstruction_setsopt_env_variable_nameenvironr   	opt_leveldebugr5   r/   loadedanyhas_AVX512_SPRr   swigfaiss_avx512_sprImportErrore
has_AVX512swigfaiss_avx512has_AVX2swigfaiss_avx2has_SVEswigfaiss_sve	swigfaissr   r   r   r   <module>   s   
A









