
    j                     V    d dl mZ ddgZdedededefdZd	ee         ded
edefdZdS )    )Hammingmerge_stringsmerge_multi_stringsaboverlap_ratioreturnc                 0  
 t          t          |           t          |                    }|dk    r| |z   S | dd         |dd         c
t          t          
          t                              }
fdt          d|dz             D             }d t          |          D             }t	          t          |          |z            dz
  t          |          dk    r|d         }
|dz   d         z   S t          |          dk    r$t          |fd	          }
|dz   d         z   S dk     r| |z   S dk     r
z   S fd
t          |          D             }	|	                    t          |	                    }
|dz   d         z   S )aP  Merges 2 character sequences in the best way to maximize the alignment of their overlapping characters.

    Args:
        a: first char seq, suffix should be similar to b's prefix.
        b: second char seq, prefix should be similar to a's suffix.
        overlap_ratio: estimated ratio of overlapping characters.

    Returns:
        A merged character sequence.

    Example::
        >>> from doctr.models.recognition.utils import merge_strings
        >>> merge_strings('abcd', 'cdefgh', 0.5)
        'abcdefgh'
        >>> merge_strings('abcdi', 'cdefgh', 0.5)
        'abcdefgh'
       Nc                 `    g | ]*}t          j        | d          d |         d           +S )N)	processor)r   distance).0ia_cropb_crops     a/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/doctr/models/recognition/utils.py
<listcomp>z!merge_strings.<locals>.<listcomp>&   s=    kkkAgvqbcc{F2A2J$GGGkkk    c                 $    g | ]\  }}|d k    |S )r    )r   r   scores      r   r   z!merge_strings.<locals>.<listcomp>)   s!    FFF(!U5A::A:::r      r   c                 (    t          | z
            S )Nabs)xexpected_overlaps    r   <lambda>zmerge_strings.<locals>.<lambda>5   s    Q9I5I1J1J r   )keyc                 @    g | ]\  }}|t          |z
            z   S r   r   )r   r   r   r   s      r   r   z!merge_strings.<locals>.<listcomp>@   s0    [[[XQus1'7#7888[[[r   )minlenrange	enumerateroundindex)r   r   r   seq_lenmax_overlapscoreszero_matchesr   best_icombined_scoresr   r   r   s             @@@r   r   r      s   $ #a&&#a&&!!G!||1ussVQqrrUNFFc&kk3v;;//K lkkkkQVWXZehiZiQjQjkkkF GFi&7&7FFFLSVVm344q8 <AOq1uww'' 
\		Q		\'J'J'J'JKKKvz||,,, "1u	A		 \[[[SYIZIZ[[[O""3#7#788FF6A:<<(((r   seq_listlast_overlap_ratioc                     | sdS | d         }t          dt          |                     D ]5}| |         }|t          |           dz
  k    r|n|}t          |||          }6|S )af  
    Merges consecutive string sequences with overlapping characters.

    Args:
        seq_list: list of sequences to merge. Sequences need to be ordered from left to right.
        overlap_ratio: Estimated ratio of overlapping letters between neighboring strings.
        last_overlap_ratio: Estimated ratio of overlapping letters for the last element in seq_list.

    Returns:
        A merged character sequence

    Example::
        >>> from doctr.models.recognition.utils import merge_multi_strings
        >>> merge_multi_strings(['abc', 'bcdef', 'difghi', 'aijkl'], 0.5, 0.1)
        'abcdefghijkl'
     r   r   )r%   r$   r   )r/   r   r0   resultr   text_bratios          r   r   r   E   sz    "  ra[F1c(mm$$ 6 6!&'3x==1+<&<&<""-vvu55Mr   N)rapidfuzz.distancer   __all__strfloatr   listr   r   r   r   <module>r;      s    ' & & & & &1
26)S 6)S 6) 6)3 6) 6) 6) 6)r$s) E W\ ad      r   