
    گ5g<              
         d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZ  e
e      j                   dz  Z G d	 d
      Z G d d      Z G d de      Z G d de      Z G d dee      Z e       Zej0                  ZdZ ee edd ed                    ee edd ed                    ee edd ed                    ee edd ed                   dZ ee edd              ee ed d              ee edd!              ee ed"d             d#Z ee edd$              ee ed%d&             d'Z ee edd( ed)                    ee ed*d& ed)                   d Z ee edd+              ee ed,d+              ee edd-              ee ed d              ee ed.d             y)/    )annotationsN)defaultdict)deepcopy)import_module)Path)AnyCallableSequencezlibraries.jsonc                  H    e Zd ZU ded<   d
dZddZd
dZddZddZddZ	y	)LibrariesManagerz#defaultdict[str, list[LibraryBase]]libsc                ,    t        t              | _        y N)r   listr   selfs    6lib/python3.12/site-packages/textdistance/libraries.py__init__zLibrariesManager.__init__   s    %	    c                @    | j                   |   j                  |       y)zRegister new lib
        N)r   append)r   alglibs      r   registerzLibrariesManager.register   s     			#c"r   c                   t         j                  dd      5 }t        j                  |      }ddd       j	                         D ]s  \  }| j                  |      }|s|D cg c]  }|j                  |j                  gv s|! c}| j                  |<   | j                  |   j                  fd       u y# 1 sw Y   xY wc c}w )z1Sort algorithm implementations by speed.
        rutf8)encodingNc                R    j                  | j                  | j                  g      S r   )indexmodule_name	func_name)r   
libs_namess    r   <lambda>z+LibrariesManager.optimize.<locals>.<lambda>(   s     
0@0@#//SVS`S`Aa0br   )key)
LIBRARIES_PATHopenjsonloaditemsget_libsr!   r"   r   sort)r   f	libs_datar   r   r   r#   s         @r   optimizezLibrariesManager.optimize   s       v 6!"iilI 7  )0OC==%D-1dTccoos}}5UYc5ccTdDIIcNIIcN$bc  1 76 es   B>%C
C
>Cc                H    t        | j                  j                               S )z*Get list of available algorithms.
        )r   r   keysr   s    r   get_algorithmszLibrariesManager.get_algorithms*   s     DIINN$%%r   c                @    || j                   vrg S | j                   |   S )z$Get libs list for algorithm
        )r   )r   r   s     r   r+   zLibrariesManager.get_libs/   s#     diiIyy~r   c                Z    | j                         }t        | j                        |_        |S )z(Clone library manager prototype
        )	__class__r   r   )r   objs     r   clonezLibrariesManager.clone6   s%     nnDII&
r   N)returnNone)r   strr   LibraryBaser8   r9   )r8   z	list[str])r   r:   r8   zlist[LibraryBase])r8   r   )
__name__
__module____qualname____annotations__r   r   r/   r2   r+   r7    r   r   r   r      s'    
--&#
d &
r   r   c                  v    e Zd ZU eZded<   dddd	 	 	 	 	 	 	 	 	 	 	 ddZddZddZe	dd       Z
dd	Zdd
Zy)r;   zCallable | None | AnyfuncN)presetsattr
conditionsc               J    || _         || _        || _        || _        || _        y r   )r!   r"   rC   rE   rD   )r   r!   r"   rC   rD   rE   s         r   r   zLibraryBase.__init__A   s(     '"$	r   c                    t        |      dk7  ry| j                  sy| j                  j                         D ]  \  }}t        ||      |k7  s y y)N   FT)lenrE   r*   getattr)r   r6   	sequencesnamevalues        r   check_conditionszLibraryBase.check_conditionsP   sM    y>Q??002KD%sD!U* 3 r   c                    |S r   r@   r   rK   s     r   preparezLibraryBase.prepare\   s    r   c                    d| j                    d| j                   d}|dz  }| j                  |dt        | j                         dz  }| j                  |d| j                   z  }|S )Nzfrom z import z as funcz
func = funcz(**).)r!   r"   rC   reprrD   )r   results     r   setupzLibraryBase.setup_   sv    ))*(4>>2B(K/!<<#D./q11F99 $))o%Fr   c                P   | j                   t        u rs	 t        | j                        }t        || j                        }| j                   |di | j                  }| j                  t        || j                        }|| _         | j                   S # t        $ r
 d | _         Y y w xY w)Nr@   )	rB   NotImplementedr   r!   ImportErrorrJ   r"   rC   rD   )r   moduler6   s      r   get_functionzLibraryBase.get_functioni   s    99&&t'7'78 &$..1C||')DLL)yy$c499-DIyy   	s   B B%$B%c                8    | j                    d| j                   S )NrT   )r!   r"   r   s    r   __str__zLibraryBase.__str__~   s    ""#1T^^$455r   )r!   r:   r"   r:   rC   zdict[str, Any] | NonerD   z
str | NonerE   zdict[str, bool] | Noner8   r9   r6   objectrK   r
   r8   boolrK   r
   r8   tuple)r8   r:   )r8   zCallable | None)r<   r=   r>   rY   rB   r?   r   rN   rQ   propertyrW   r\   r^   r@   r   r   r;   r;   >   s    "0D
0 *.-1 
 '  + 

  *6r   r;   c                  (     e Zd Zd fdZddZ xZS )TextLibraryc                ~    t        |   |g| syt        |dd      dk7  ry|D ]  }t        |      t        us y y)NFqvalr      T)superrN   rJ   typer:   )r   r6   rK   seqr5   s       r   rN   zTextLibrary.check_conditions   sN    w'8i8 3"a' CCy#  r   c                d    t        |d   t        t        f      rt        t        d |            }|S )Nr   c                $    dj                  |       S )N )join)xs    r   r$   z%TextLibrary.prepare.<locals>.<lambda>   s    BGGAJr   )
isinstancerc   r   maprP   s     r   rQ   zTextLibrary.prepare   s,    ilUDM2c"6	BCIr   r_   rb   )r<   r=   r>   rN   rQ   __classcell__r5   s   @r   rf   rf      s    r   rf   c                        e Zd Zd fdZ xZS )SameLengthLibraryc                    t        |   |g| syt        t        t        |            t        t        t        |            k7  ryy)NFT)rj   rN   minrs   rI   max)r   r6   rK   r5   s      r   rN   z"SameLengthLibrary.check_conditions   s>    w'8i8s3	"#s3sI+>'??r   r_   )r<   r=   r>   rN   rt   ru   s   @r   rw   rw      s     r   rw   c                      e Zd Zy)SameLengthTextLibraryN)r<   r=   r>   r@   r   r   r|   r|      s    r   r|   DamerauLevenshteinpyxdameraulevenshteindamerau_levenshtein_distanceT)
restricted)rE   	jellyfishFz%rapidfuzz.distance.DamerauLevenshteindistancezrapidfuzz.distance.OSAHamminghammingLevenshteinhamming_distancezrapidfuzz.distance.HammingJarojaro_similarityzrapidfuzz.distance.Jaro
similarityJaroWinklerjaro_winkler_similarity)
winklerizezrapidfuzz.distance.JaroWinklerlevenshteinpylevlevenshtein_distancezrapidfuzz.distance.Levenshtein)
__future__r   r(   collectionsr   copyr   	importlibr   pathlibr   typingr   r	   r
   __file__parentr&   r   r;   rf   rw   r|   	prototyper   regr   dictr@   r   r   <module>r      s   "  #  #  * * h&&)99, ,^A6 A6H+ , 	-{ 	 	 C,.LY]imYn	o p C["@T]bMc	d e C<jUYejUk	l m C-zdVZF[	\ ] C	:y	1 2 C	}i	8 9 C["4	5 6 C	7	D E C["3	4 5 C.	= >  C[";X\H]	^ _ C5|PT`dPe	f g  CZ	/ 0 CWm	, - C["8	9 : C]J	/ 0 C5z	B Cr   