
    NgQ                    z    d dl mZ d dlmZ d dlmZmZ d dlm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S )    )annotations)conv_sequences)is_nonesetupPandas)Jaro_pyg?Nprefix_weight	processorscore_cutoffc                  t                       t          |           st          |          rdS | ||           }  ||          }|d}|dk    s|dk     rd}t          |          t          | |          \  } }t	          |           }t	          |          }t          ||          }d}	t          |d          }
t          |
          D ]}| |	         ||	         k    r n|	dz  }	|}|dk    r'|	|z  }|dk    rd}nt          d||z
  |dz
  z            }t          j	        | ||	          }|dk    r||	|z  d|z
  z  z  }t          |d          }||k    r|ndS )
a  
    Calculates the jaro winkler similarity

    Parameters
    ----------
    s1 : Sequence[Hashable]
        First string to compare.
    s2 : Sequence[Hashable]
        Second string to compare.
    prefix_weight : float, optional
        Weight used for the common prefix of the two strings.
        Has to be between 0 and 0.25. Default is 0.1.
    processor: callable, optional
        Optional callable that is used to preprocess the strings before
        comparing them. Default is None, which deactivates this behaviour.
    score_cutoff : float, optional
        Optional argument for a score threshold as a float between 0 and 1.0.
        For ratio < score_cutoff 0 is returned instead. Default is None,
        which deactivates this behaviour.

    Returns
    -------
    similarity : float
        similarity between s1 and s2 as a float between 0 and 1.0

    Raises
    ------
    ValueError
        If prefix_weight is invalid
    g        Nr         ?z.prefix_weight has to be in the range 0.0 - 1.0      gffffff?)r   )
r   r   
ValueErrorr   lenminrangemaxJaro
similarity)s1s2r	   r
   r   msgP_lenT_lenmin_lenprefix
max_prefix_jaro_score_cutoff
prefix_simSims                  ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/rapidfuzz/distance/JaroWinkler_py.pyr   r   
   s   L MMMr{{ gbkk sYr]]Yr]]smc11>ooB##FBGGEGGE%GFWaJ:  f:F##E!$3m+
 # #C*7H*HZZ]M])^ _ _
/"b/@
A
A
AC
Syyv%s33#smm%%331,    c               *    t          | ||||          S )a  
    Calculates the normalized jaro winkler similarity

    Parameters
    ----------
    s1 : Sequence[Hashable]
        First string to compare.
    s2 : Sequence[Hashable]
        Second string to compare.
    prefix_weight : float, optional
        Weight used for the common prefix of the two strings.
        Has to be between 0 and 0.25. Default is 0.1.
    processor: callable, optional
        Optional callable that is used to preprocess the strings before
        comparing them. Default is None, which deactivates this behaviour.
    score_cutoff : float, optional
        Optional argument for a score threshold as a float between 0 and 1.0.
        For ratio < score_cutoff 0 is returned instead. Default is None,
        which deactivates this behaviour.

    Returns
    -------
    normalized similarity : float
        normalized similarity between s1 and s2 as a float between 0 and 1.0

    Raises
    ------
    ValueError
        If prefix_weight is invalid
    r   )r   r   r   r	   r
   r   s        r#   normalized_similarityr'   \   s+    L 

#!   r$   c                   t                       t          |           st          |          rdS | ||           }  ||          }||dk    rdnd|z
  }t          | |||          }d|z
  }|||k    r|ndS )a  
    Calculates the jaro winkler distance

    Parameters
    ----------
    s1 : Sequence[Hashable]
        First string to compare.
    s2 : Sequence[Hashable]
        Second string to compare.
    prefix_weight : float, optional
        Weight used for the common prefix of the two strings.
        Has to be between 0 and 0.25. Default is 0.1.
    processor: callable, optional
        Optional callable that is used to preprocess the strings before
        comparing them. Default is None, which deactivates this behaviour.
    score_cutoff : float, optional
        Optional argument for a score threshold as a float between 0 and 1.0.
        For ratio < score_cutoff 0 is returned instead. Default is None,
        which deactivates this behaviour.

    Returns
    -------
    distance : float
        distance between s1 and s2 as a float between 1.0 and 0.0

    Raises
    ------
    ValueError
        If prefix_weight is invalid
    r   N)r	   r   )r   r   r   )r   r   r	   r
   r   cutoff_distancesimdists           r#   distancer,      s    L MMMr{{ gbkk sYr]]Yr]]+3|c7I7IddPSVbPbO
R=
W
W
WC9D (DL,@,@44sJr$   c               *    t          | ||||          S )a  
    Calculates the normalized jaro winkler distance

    Parameters
    ----------
    s1 : Sequence[Hashable]
        First string to compare.
    s2 : Sequence[Hashable]
        Second string to compare.
    prefix_weight : float, optional
        Weight used for the common prefix of the two strings.
        Has to be between 0 and 0.25. Default is 0.1.
    processor: callable, optional
        Optional callable that is used to preprocess the strings before
        comparing them. Default is None, which deactivates this behaviour.
    score_cutoff : float, optional
        Optional argument for a score threshold as a float between 0 and 1.0.
        For ratio < score_cutoff 0 is returned instead. Default is None,
        which deactivates this behaviour.

    Returns
    -------
    normalized distance : float
        normalized distance between s1 and s2 as a float between 1.0 and 0.0

    Raises
    ------
    ValueError
        If prefix_weight is invalid
    r   )r,   r&   s        r#   normalized_distancer.      s+    L 

#!   r$   )
__future__r   rapidfuzz._common_pyr   rapidfuzz._utilsr   r   rapidfuzz.distancer   r   r   r'   r,   r.    r$   r#   <module>r4      s    # " " " " " / / / / / / 1 1 1 1 1 1 1 1 . . . . . . O- O- O- O- O-l , , , , ,f 1K 1K 1K 1K 1Kp , , , , , , ,r$   