a
    v5`@  ã                   @   s–   d dl mZ ddlmZmZ g d¢ZG dd„ deƒZG dd„ deƒZ	G d	d
„ d
eƒZ
G dd„ deƒZG dd„ deƒZeƒ Ze	ƒ Ze
ƒ Zeƒ Zeƒ ZdS )é    )Ú	takewhileé   )ÚBaseÚBaseSimilarity)
ÚPrefixÚPostfixÚLengthÚIdentityÚMatrixÚprefixÚpostfixÚlengthÚidentityÚmatrixc                   @   s*   e Zd ZdZd
dd„Zdd„ Zdd	„ ZdS )r   zprefix similarity
    r   Nc                 C   s   || _ |p| j| _d S ©N)ÚqvalÚ_identÚsim_test)Úselfr   r   © r   ú=lib/python3.9/site-packages/textdistance/algorithms/simple.pyÚ__init__   s    zPrefix.__init__c                    sj   |sdS ˆ j |Ž }‡ fdd„}dd„ t|t|Ž ƒD ƒ}|d }t|tƒrRd |¡S t|tƒrfd |¡S |S )Nr   c                    s
   ˆ j | Ž S r   )r   )Úseq©r   r   r   Ú<lambda>   ó    z!Prefix.__call__.<locals>.<lambda>c                 S   s   g | ]}|d  ‘qS )r   r   )Ú.0Úcr   r   r   Ú
<listcomp>   r   z#Prefix.__call__.<locals>.<listcomp>Ú r   )Z_get_sequencesr   ÚzipÚ
isinstanceÚstrÚjoinÚbytes)r   Ú	sequencesÚtestÚresultÚsr   r   r   Ú__call__   s    




zPrefix.__call__c                 G   s   t | |Ž ƒS r   )Úlen©r   r%   r   r   r   Ú
similarity#   s    zPrefix.similarity)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   r,   r   r   r   r   r      s   
r   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )r   zpostfix similarity
    c                    sV   |d }dd„ |D ƒ}t tƒ j|Ž ƒ}t|tƒr:d |¡S t|tƒrNd |¡S t|ƒS )Nr   c                 S   s   g | ]}t |ƒ‘qS r   )Úreversed)r   r(   r   r   r   r   ,   r   z$Postfix.__call__.<locals>.<listcomp>r   r   )r1   Úsuperr)   r!   r"   r#   r$   Úlist)r   r%   r(   r'   ©Ú	__class__r   r   r)   *   s    



zPostfix.__call__)r-   r.   r/   r0   r)   Ú__classcell__r   r   r4   r   r   '   s   r   c                   @   s   e Zd ZdZdd„ ZdS )r   zLength distance
    c                 G   s   t tt|ƒƒ}t|ƒt|ƒ S r   )r3   Úmapr*   ÚmaxÚmin)r   r%   Zlengthsr   r   r   r)   8   s    zLength.__call__N)r-   r.   r/   r0   r)   r   r   r   r   r   5   s   r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r	   zIdentity similarity
    c                 G   s   dS )Nr   r   r+   r   r   r   ÚmaximumA   s    zIdentity.maximumc                 G   s   t | j|Ž ƒS r   )Úintr   r+   r   r   r   r)   D   s    zIdentity.__call__N)r-   r.   r/   r0   r:   r)   r   r   r   r   r	   =   s   r	   c                   @   s*   e Zd ZdZddd„Zdd	„ Zd
d„ ZdS )r
   zMatrix similarity
    Nr   r   Tc                 C   s   || _ || _|| _|| _d S r   )ÚmatÚmismatch_costÚ
match_costÚ	symmetric)r   r<   r=   r>   r?   Zexternalr   r   r   r   L   s    zMatrix.__init__c                 G   s   | j S r   )r>   r+   r   r   r   r:   S   s    zMatrix.maximumc                 G   sl   | j s| j|Ž r| jS | jS || j v r0| j | S | jrVtt|ƒƒ}|| j v rV| j | S | j|Ž rf| jS | jS r   )r<   r   r>   r=   r?   Útupler1   r+   r   r   r   r)   V   s    





zMatrix.__call__)Nr   r   TT)r-   r.   r/   r0   r   r:   r)   r   r   r   r   r
   H   s   
r
   N)Ú	itertoolsr   Úbaser   Z_Baser   Z_BaseSimilarityÚ__all__r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Ú<module>   s   #