o
    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Zd-ddZd-ddZd-ddZd.ddZd/ddZd0d d!Zd1d$d%Zd2d&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 )3    )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   @D:\Projects\ConvertPro\env\Lib\site-packages\rapidfuzz/_utils.pyr
      s    r
   _kwargsr   returndict[str, Any]c                  K     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      
r   c                  K  r   )Nr   r   r   r   r   r   r   r   _get_scorer_flags_similarity   r   r    c                  K  r   )Nr      r   r
   r   r   r   r   r   r   %_get_scorer_flags_normalized_distance%   r   r#   c                  K  r   )Nr!   r   r   r"   r   r   r   r   '_get_scorer_flags_normalized_similarity-   r   r$   sboolc                 C  s&   | d u rdS t | trt| rdS dS )NTF)
isinstancefloatr   )r%   r   r   r   is_none5   s
   r)   funccached_scorer_call(dict[str, Callable[..., dict[str, Any]]]c                 C  s   || _ | | _d S )N)Z_RF_ScorerPyZ_RF_OriginalScorer)r*   r+   r   r   r   add_scorer_attrs?   s   
r-   modulestrc                 C  s"   zt | W S  ty   Y dS w )z6
    try to import module. Return None on failure
    N)	importlibimport_module	Exception)r.   r   r   r   optional_import_moduleE   s
   r3   nametuple[Any, list[Any]]c                 C  sJ   t trt| d }|dur|S t tr t| d }|dur |S t| S )z4
    import module best fitting for current CPU
    Z_avx2NZ_sse2)r	   r   r3   r   r0   r1   )r4   r.   r   r   r   vectorized_importO   s   
r6   c                 C  s   t jd}t| d }t||}|s&d|d|jd|j d}t||dkr1t	| d }n|d	kr7|S zt	| d }W n t
yJ   | Y S w t||}|sdd|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getr0   r1   getattrZ__name__file__ImportErrorr6   r2   )r.   r4   implZpy_modZpy_funcmsgZcpp_modZcpp_funcr   r   r   fallback_import_   s(   

rB   Zget_scorer_flagsdefault_distance_attributedefault_similarity_attribute%default_normalized_distance_attribute'default_normalized_similarity_attribute)r   r   r   r   )r%   r   r   r&   )r*   r   r+   r,   )r.   r/   r   r   )r4   r/   r   r5   )r.   r/   r4   r/   r   r   )
__future__r   r0   r:   enumr   mathr   typingr   r   Zrapidfuzz._feature_detectorr   r   r	   r
   r   r    r#   r$   r)   r-   r3   r6   rB   rC   __annotations__rD   rE   rF   r   r   r   r   <module>   s0   










"