o
    ҷh#                     @  s0  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 zd dlmZ W n ey@   dZY nw 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d0ddZd1d!d"Zd2d%d&Zd3d'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 )4    )annotationsN)IntFlag)isnan)AnyCallable)AVX2SSE2supports)NAc                   @  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   C/var/www/html/venv/lib/python3.10/site-packages/rapidfuzz/_utils.pyr      s    r   _kwargsr   returndict[str, Any]c                  K     ddt jt jB dS )Nr       optimal_score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_similarity2   r"   r'   sboolc                 C  s.   | d u s| t u r
dS t| trt| rdS dS )NTF)	pandas_NA
isinstancefloatr   )r(   r   r   r   is_none:   s
   r-   funccached_scorer_call(dict[str, Callable[..., dict[str, Any]]]c                 C  s   || _ | | _d S )N)_RF_ScorerPy_RF_OriginalScorer)r.   r/   r   r   r   add_scorer_attrsD   s   
r3   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)r4   r   r   r   optional_import_moduleJ   s
   r9   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
    _avx2N_sse2)r	   r   r9   r   r6   r7   )r:   r4   r   r   r   vectorized_importT   s   
r>   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
    RAPIDFUZZ_IMPLEMENTATION_pyzcannot import name z from z ()cpp_cpppython)osenvirongetr6   r7   getattr__name__file__ImportErrorr>   r8   )r4   r:   implpy_modpy_funcmsgcpp_modcpp_funcr   r   r   fallback_importd   s(   

rR   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/   r0   )r4   r5   r   r   )r:   r5   r   r;   )r4   r5   r:   r5   r   r   )"
__future__r   r6   rE   enumr   mathr   typingr   r   rapidfuzz._feature_detectorr   r   r	   pandasr
   r*   BaseExceptionr   r!   r#   r&   r'   r-   r3   r9   r>   rR   rT   __annotations__rU   rV   rW   r   r   r   r   <module>   s:   










"