o
    UhQ                     @  s   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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)conv_sequences)is_nonesetupPandas)Jaro_pyg?Nprefix_weight	processorscore_cutoffc                C  s8  t   t| st|rdS |dur|| } ||}|du rd}|dks'|dk r-d}t|t| |\} }t| }t|}t||}d}	t|d}
t|
D ]}| |	 ||	 krX n|	d7 }	qL|}|dkry|	| }|dkrnd}ntd|| |d  }tj	| ||d	}|dkr||	| d|  7 }t|d}||kr|S 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Sim r!   u/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/rapidfuzz/distance/JaroWinkler_py.pyr   
   s@   &



r   c                C     t | ||||d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
   r!   r!   r"   normalized_similarity\      &r%   c                C  s~   t   t| st|rdS |dur|| } ||}|du s!|dkr#dnd| }t| |||d}d| }|du s;||kr=|S 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distr!   r!   r"   distance   s   &r*   c                C  r#   )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$   r!   r!   r"   normalized_distance   r&   r+   )
__future__r   rapidfuzz._common_pyr   rapidfuzz._utilsr   r   rapidfuzz.distancer   r   r   r%   r*   r+   r!   r!   r!   r"   <module>   s(   V38