
    dL                        d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	 ddddddZ
ddddddZddddddZddddddZdS )    )annotations)CallableHashableSequence)is_none)Jarog?Nprefix_weight	processorscore_cutoffs1Sequence[Hashable]s2r
   floatr   (Callable[..., Sequence[Hashable]] | Noner   float | Nonereturnc                  t          |           st          |          rdS | ||           }  ||          }|d}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  }||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         gffffff?      ?)r   )r   lenminrangemaxr   
similarity)r   r   r
   r   r   P_lenT_lenmin_lenprefix
max_prefix_jaro_score_cutoff
prefix_simSims                 e/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/rapidfuzz/distance/JaroWinkler_py.pyr   r      sc   L r{{ gbkk sYr]]Yr]]GGEGGE%GFWaJ:  f:F##E!$3m+
 # #j#44c9IJ! ! /"b/@
A
A
AC
Syyv%s33%%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*   Y   s+    L 

#!   r'   c                   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   cutoff_distancesimdists           r&   distancer/      s    L r{{ gbkk sYr]]Yr]] %););#BT  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_distancer1      s+    L 

#!   r'   )r   r   r   r   r
   r   r   r   r   r   r   r   )
__future__r   typingr   r   r   rapidfuzz._utilsr   rapidfuzz.distancer   r   r*   r/   r1    r'   r&   <module>r7      s   # " " " " " / / / / / / / / / / $ $ $ $ $ $ # # # # # # :>!%J- J- J- J- J- J-b :>!%, , , , , ,f :>!%2K 2K 2K 2K 2K 2Kr :>!%, , , , , , , ,r'   