U
    -e                     @  s@  U d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZ G dd deZd	d
dddZd	d
dddZd	d
dddZd	d
dddZd	ddddZd	ddddZdd	dddZdd d!d"d#Zddd	d$d%d&Zd'eiZded(< d'eiZded)< d'eiZded*< d'eiZded+< dS ),    )annotationsN)IntFlag)isnan)AnyCallable)AVX2SSE2supportsc                   @  s   e Zd ZdZdZdZdS )
ScorerFlag    @   i   N)__name__
__module____qualname__
RESULT_F64
RESULT_I64	SYMMETRIC r   r   Q/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/rapidfuzz/_utils.pyr
      s   r
   r   zdict[str, Any])_kwargsreturnc                  K  s   ddt jt jB dS )Nr       Zoptimal_scoreZworst_scoreflagsr
   r   r   r   r   r   r   _get_scorer_flags_distance   s    
r   c                  K  s   ddt jt jB dS )Nr   r   r   r   r   r   r   r   _get_scorer_flags_similarity   s    
r   c                  K  s   ddt jt jB dS )Nr      r   r
   r   r   r   r   r   r   %_get_scorer_flags_normalized_distance%   s    
r    c                  K  s   ddt jt jB dS )Nr   r   r   r   r   r   r   r   '_get_scorer_flags_normalized_similarity-   s    
r!   bool)sr   c                 C  s&   | d krdS t | tr"t| r"dS dS )NTF)
isinstancefloatr   )r#   r   r   r   is_none5   s
    r&   z(dict[str, Callable[..., dict[str, Any]]]funcZcached_scorer_callc                 C  s   || _ | | _d S )N)Z_RF_ScorerPyZ_RF_OriginalScorerr'   r   r   r   add_scorer_attrs?   s    r)   str)moduler   c                 C  s(   zt | W S  tk
r"   Y dS X dS )z6
    try to import module. Return None on failure
    N)	importlibimport_module	Exception)r+   r   r   r   optional_import_moduleE   s    r/   ztuple[Any, list[Any]])namer   c                 C  sJ   t tr t| d }|dk	r |S t tr@t| d }|dk	r@|S t| S )z4
    import module best fitting for current CPU
    Z_avx2NZ_sse2)r	   r   r/   r   r,   r-   )r0   r+   r   r   r   vectorized_importO   s    r1   )r+   r0   r   c                 C  s   t jd}t| d }t||}|sLd|d|jd|j d}t||dkrbt	| d }n6|d	krn|S zt	| d }W n t
k
r   | Y S X t||}|sd|d|jd|j d}t||S )
z}
    import library function and possibly fall back to a pure Python version
    when no C++ implementation is available
    ZRAPIDFUZZ_IMPLEMENTATIONZ_pyzcannot import name z from z ()cppZ_cpppython)osenvirongetr,   r-   getattrZ__name__file__ImportErrorr1   r.   )r+   r0   implZpy_modZpy_funcmsgZcpp_modZcpp_funcr   r   r   fallback_import_   s&    


r=   Zget_scorer_flagsdefault_distance_attributedefault_similarity_attribute%default_normalized_distance_attribute'default_normalized_similarity_attribute)
__future__r   r,   r5   enumr   mathr   typingr   r   Zrapidfuzz._feature_detectorr   r   r	   r
   r   r   r    r!   r&   r)   r/   r1   r=   r>   __annotations__r?   r@   rA   r   r   r   r   <module>   s6    

"   