
    =wgQ	                     .    d Z ddlmZ ddZddZd ZeZy)z;
Contains functions implementing edit distance algorithms.
    )xrangeNc                    d}t        t        dt        |      dz               dgz   }t        t        |             D ]  }|dgt        |      z  |dz   gz   }}t        t        |            D ]9  }||   dz   }||dz
     dz   }||dz
     | |   ||   k7  z   }	t	        |||	      ||<   ; |sn||kD  stt	        |      |kD  s|dz   c S  |t        |      dz
     S )z?Returns the Levenshtein edit distance between two strings.
    N   r   listrangelenr   min)
seq1seq2limitoneagothisrowxydelcostaddcostsubcosts
             Q/var/www/horilla/myenv/lib/python3.12/site-packages/whoosh/support/levenshtein.pylevenshteinr      s     F5CIM*+qc1GCI  "A3T?a!eW#<D	" 	8AQi!mGa!enq(GQUmtAw$q''9:GWgw7GAJ		8 QY3w<%#719 3t9q=!!    c                 V   d}t        t        dt        |      dz               dgz   }t        t        |             D ]  }||dgt        |      z  |dz   gz   }}}t        t        |            D ]  }||   dz   }||dz
     dz   }	||dz
     | |   ||   k7  z   }
t	        ||	|
      ||<   |dkD  s@|dkD  sF| |   ||dz
     k(  sU| |dz
     ||   k(  sd| |   ||   k7  spt	        ||   ||dz
     dz         ||<    |s||kD  st	        |      |kD  s|dz   c S  |t        |      dz
     S )zGReturns the Damerau-Levenshtein edit distance between two strings.
    Nr   r      r   )r   r   r   r   r   r   twoagor   r   r   r   s              r   damerau_levenshteinr      sh    F5CIM*+qc1GCI  #)'A3T?a!eW3LD	" 	@AQi!mGa!enq(GQUmtAw$q''9:GWgw7GAJA!a%DGtAE{$:QK47*tAw$q'/A VAE]Q->?
	@ QY3w<%#719!$ 3t9q=!!r   c                     t        | |      }t        t        t        |       t        |      f            }t        t	        t        |       t        |      f            }||z
  |z  ||z  z  }|S )zlReturns the relative distance between two strings, in the range
    [0-1] where 1 means total equality.
    )distancefloatmaxr	   r
   )abdlongershorterrs         r   relativer&   :   sd    
 	AA3AA'()FCQQ()*G
1*	7V#34AHr   )N)__doc__whoosh.compatr   r   r   r&   r    r   r   <module>r*      s%    !"."6	 r   