
    v5`_              
          d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ ej	        
                    ej	                            e                    Zej	                            ed          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                    d edd                     e                    d edd                     e                    d edd                     e                    d edd                     e                    d edd                     e                    d edd                     e                    d edd                     e                    d edd                     e                    d edd ed                                e                    d edd                     e                    d edd!                     e                    d ed"d!                     e                    d edd#                     e                    d edd                     dS )$    N)defaultdict)deepcopy)import_modulezlibraries.jsonc                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )LibrariesManagerc                 8    t          t                    | _        d S N)r   listlibsselfs    6lib/python3.11/site-packages/textdistance/libraries.py__init__zLibrariesManager.__init__   s    %%			    c                 F    | j         |                             |           dS )zRegister new lib
        N)r   append)r   alglibs      r   registerzLibrariesManager.register   s$     		#c"""""r   c                 b   t          t          d          5 }t          j        |          }ddd           n# 1 swxY w Y   |                                D ]W\  }|                     |          }|sfd|D             | j        |<   | j        |                             fd           XdS )z1Sort algorithm implementations by speed.
        rNc                 4    g | ]}|j         |j        gv |S  )module_name	func_name).0r   
libs_namess     r   
<listcomp>z-LibrariesManager.optimize.<locals>.<listcomp>#   s-    dddccos}5UYc5c5cc5c5c5cr   c                 F                         | j        | j        g          S r	   )indexr   r   )r   r   s    r   <lambda>z+LibrariesManager.optimize.<locals>.<lambda>%   s     
0@0@#/SVS`Aa0b0b r   )key)openLIBRARIES_FILEjsonloaditemsget_libsr   sort)r   f	libs_datar   r   r   s        @r   optimizezLibrariesManager.optimize   s    .#&& 	%!	!I	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%  )00 	d 	dOC==%%D ddddTdddDIcNIcN$b$b$b$bcccc	d 	ds   8<<c                 N    t          | j                                                  S )z*Get list of available algorithms.
        )r
   r   keysr   s    r   get_algorithmszLibrariesManager.get_algorithms'   s     DINN$$%%%r   c                 2    || j         vrg S | j         |         S )z$Get libs list for algorithm
        )r   )r   r   s     r   r(   zLibrariesManager.get_libs,   s"     diIy~r   c                 `    |                                  }t          | j                  |_        |S )z(Clone library manager prototype
        )	__class__r   r   )r   objs     r   clonezLibrariesManager.clone3   s)     nnDI&&
r   N)	__name__
__module____qualname__r   r   r,   r/   r(   r4   r   r   r   r   r      sq        & & &# # #
d d d & & &
      r   r   c                   2    e Zd ZeZddZd Zd Zd Zd Z	dS )LibraryBaseNc                 L    || _         || _        || _        || _        || _        d S r	   )r   r   presets
conditionsattr)r   r   r   r=   r;   r<   s         r   r   zLibraryBase.__init__>   s*    &"$			r   c                     t          |          dk    rdS | j        sdS | j                                        D ]\  }}t          ||          |k    r dS dS )N   FT)lenr<   r'   getattr)r   r3   	sequencesnamevalues        r   check_conditionszLibraryBase.check_conditionsE   sp    y>>Q5 	4?0022 	 	KD%sD!!U**uu + tr   c                     |S r	   r   r   rB   s     r   preparezLibraryBase.prepareQ   s    r   c                 |   | j         t          u r	 t          | j                  }n# t          $ r d | _         Y d S w xY w| j        dk    r# t          || j                              j        }nt          || j                  }| j         |di | j        }| j	        rt          || j	                  }|| _         | j         S )Nabydos.distancer   )
funcNotImplementedr   r   ImportErrorrA   r   dist_absr;   r=   )r   moduler3   s      r   get_functionzLibraryBase.get_functionT   s    9&&&t'788    	
 #444
 6gfdn5577@fdn55|'c))DL))y .c49--DIys   % ::c                 B    d                     | j        | j                  S )Nz{}.{})formatr   r   r   s    r   __str__zLibraryBase.__str__p   s    ~~d.???r   )NNN)
r5   r6   r7   rL   rK   r   rE   rH   rP   rS   r   r   r   r9   r9   ;   sn        D   
 
 
    8@ @ @ @ @r   r9   c                   $     e Zd Z fdZd Z xZS )TextLibraryc                      t                      j        |g|R  sdS t          |dd          dk    rdS |D ]}t          |          t          ur dS dS )NFqvalr      T)superrE   rA   typestr)r   r3   rB   seqr2   s       r   rE   zTextLibrary.check_conditionsu   sz    'uww'8i888 	5 3""a''5  	 	CCyy##uu $tr   c                     t          |d         t          t          f          rt          t          d |                    }|S )Nr   c                 ,    d                     |           S )N )join)xs    r   r!   z%TextLibrary.prepare.<locals>.<lambda>   s    2771:: r   )
isinstancetupler
   maprG   s     r   rH   zTextLibrary.prepare   s>    ilUDM22 	CS!5!5yAABBIr   )r5   r6   r7   rE   rH   __classcell__r2   s   @r   rU   rU   t   sG                  r   rU   c                        e Zd Z fdZ xZS )SameLengthLibraryc                      t                      j        |g|R  sdS t          t          t          |                    t          t          t          |                    k    rdS dS )NFT)rY   rE   minrd   r@   max)r   r3   rB   r2   s      r   rE   z"SameLengthLibrary.check_conditions   sb    'uww'8i888 	5s3	""##s3sI+>+>'?'???5tr   )r5   r6   r7   rE   re   rf   s   @r   rh   rh      s8                r   rh   c                       e Zd ZdS )SameLengthTextLibraryN)r5   r6   r7   r   r   r   rm   rm      s        Dr   rm   DamerauLevenshteinrJ   pyxdameraulevenshteindamerau_levenshtein_distance	jellyfishHammingdistancehammingLevenshteinhamming_distanceJarojaro_similarityJaroWinklerjaro_winkler_similarityT)
winklerize)r<   levenshteinpylevlevenshtein_distance)r%   osos.pathcollectionsr   copyr   	importlibr   pathdirnameabspath__file__CURRENT_DIRr`   r$   r   r9   rU   rh   rm   	prototyper   dictr   r   r   <module>r      s    				  # # # # # #       # # # # # # goobgooh7788k+;<<* * * * * * * *Z6@ 6@ 6@ 6@ 6@ 6@ 6@ 6@r    +   ,       	 	 	 	 	-{ 	 	 	 	 	  '5FH\)])] ^ ^ ^ 	  '5LNl)m)m n n n 	  '[B`)a)a b b b 	  9kk*;YGG H H H 	  9//
IFF G G G 	  933M9MM N N N 	  9kk+7IJJ K K K 	  6;;{4EFF G G G
 
  =++k;Taeaequavavav"w"w"w x x x 
  =++.?"O"O P P P 	  =++j-"H"H I I I 	  =++g}"E"E F F F 	  =++k;Q"R"R S S S 	  =++mZ"H"H I I I I Ir   