
    گ5g                        d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ ddlmZmZ  ej                         Z G d	 d
e
      ZdZdZdZ G d d      Zedk(  rej-                          yy)    )annotationsN)defaultdict)timeit)IterableIterator
NamedTuple)tabulate   )LIBRARIES_PATH	prototypec                  R    e Zd ZU ded<   ded<   ded<   ded<   ded<   ed
d       Zy	)Libstr	algorithmlibraryfunctionfloattimesetupc                    t        j                  | j                        rdn| j                  d}| j                  | j                  j                  d      d   |fS )N z0.05f.r   )mathisinfr   r   r   split)selfr   s     6lib/python3.12/site-packages/textdistance/benchmark.pyrowzLib.row   sF    ZZ		*r499U2C 2 23 7 :DAA    N)returnztuple[str, ...])__name__
__module____qualname____annotations__propertyr    r   r   r   r      s/    NLM
KJB Br   r   z?
from textdistance import {} as cls
func = cls(external=False)
zD
func('text', 'test')
func('qwer', 'asdf')
func('a' * 15, 'b' * 15)
i  c                      e Zd Zed	d       Zed
d       Zed	d       Ze	 	 	 	 	 	 dd       Zedd       Zedd       Z	e
dd       Zy)	Benchmarkc            
   #  "  K   t         j                         D ]t  } t         j                  |       D ]Z  }|j                         st	        d|        "t        | |j                  |j                  t        d      |j                         \ v y w)NzWARNING: cannot get func for Infr   r   r   r   r   )
	librariesget_algorithmsget_libsget_functionprintr   module_name	func_namer   r   )alglibs     r   get_installedzBenchmark.get_installed3   sy     ++-C ))#.'')9#?@!OO ]]u))  / .s   BBc              #     K   | D ]6  }t        t        |j                  t              }|j	                  |       8 y w)Nstmtr   number)r   )r   STMTr   RUNS_replace)	installedr4   r   s      r   get_external_benchmarkz Benchmark.get_external_benchmarkD   s:     CiiD
 ,,D,)) s   =?c               #     K   t         j                         D ].  } d|  d}t        | d| t        t        |t
              |       0 y w)Nz"func = __import__("textdistance").z(external=False)z**textdistance**r7   r+   )r,   r-   r   r   r:   r;   )r3   r   s     r   get_internal_benchmarkz Benchmark.get_internal_benchmarkN   sT     ++-C8=MNE*
 
 
 .s   AA	c                v    |D ci c]  }|j                   |j                   c}t        fd|       S c c}w )Nc                <    | j                   | j                     k  S N)r   r   )xlimitss    r   <lambda>z,Benchmark.filter_benchmark.<locals>.<lambda>d   s    )< <r   )r   r   filter)externalinternalirE   s      @r   filter_benchmarkzBenchmark.filter_benchmark^   s9    
 088x!!++qvv%x8<hGG 9s   6c                    t        | D cg c]  }|j                   c}g dd      }|dt        |        dz  }|S c c}w )N)r   r   r   github)headerstablefmtz
Total: z libs.

)r	   r   len)libsr4   tables      r   	get_tablezBenchmark.get_tablef   sK     $%SWW%4

 	9SYKz22 &s   =c                "   t        t              }| D ]6  }||j                     j                  |j                  |j
                  g       8 t        j                  dd      5 }t        j                  ||dd       d d d        y # 1 sw Y   y xY w)Nwutf8)encoding   T)objfpindent	sort_keys)
r   listr   appendr   r   r   openjsondump)rQ   datar4   fs       r   savezBenchmark.savep   sj    4 C&&S\\'BC   v6!II$1Q$? 766s   "BBc                   t        d       t        | j                               }|j                          t        | j	                  |             t        d       t        | j                  |            }t        | j                               }||z  }|j                  d        t        | j	                  |             t        | j                  ||            }| j                  |       y )Nz# Installed libraries:
z"# Benchmarks (with textdistance):
c                2    | j                   | j                  fS rC   )r   r   )rD   s    r   rF   zBenchmark.run.<locals>.<lambda>   s    akk166%:r   )key)	r0   r]   r5   sortrS   r>   r@   rK   rd   )clsr=   	benchmarkbenchmark_internals       r   runzBenchmark.runx   s    ()**,-	cmmI&'3433I>?	!#"<"<">?''	:;cmmI&'--i9KLM	r   N)r    Iterator[Lib])r=   Iterable[Lib]r    rm   )rH   rn   rI   rn   r    rm   )rQ   z	list[Lib]r    r   )rQ   rn   r    None)r    ro   )r!   r"   r#   staticmethodr5   r>   r@   rK   rS   rd   classmethodrl   r&   r   r   r(   r(   2   s       * *   HHH 
H H   @ @  r   r(   __main__)
__future__r   r`   r   collectionsr   r   typingr   r   r   r	   r,   r   r   cloner   INTERNAL_SETUPr:   r;   r(   r!   rl   r&   r   r   <module>rx      s~    "   #  1 1  1 IOO	
B* 
B
 U Up zMMO r   