ó
    •JÕiî  ã            
      ó¨  • S r SSKJr  SSKrSSKrSSKrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jr " S S5      rSS jrSS jrSrSr\\\	\
\\\\\S.	r\S:X  aâ  SSKr\R0                  " \S9r\" \R4                  5        \R7                  5       rS\R:                  S'   \R<                  \R:                  S'   \R>                  \R:                  S'   \R@                  (       a  \R@                  4r!O\"" \5      r!\! H=  r#\" \#\R<                  \R>                  5      r \RI                  \#\ RJ                  5        M?     gg)a~  
List sort performance test.

To install `pyperf` you would need to:

    python3 -m pip install pyperf

To run:

    python3 Tools/scripts/sortperf

Options:

    * `benchmark` name to run
    * `--rnd-seed` to set random seed
    * `--size` to set the sorted list size

Based on https://github.com/python/cpython/blob/963904335e579bfe39101adf3fd6a0cf705975ff/Lib/test/sortperf.py
é    )ÚannotationsNc                ó   • [        U 5       Vs/ s H  o!R                  5       PM     nn[        S5       H@  nUR                  U 5      nUS U nUS U2	 UR                  5         UR	                  U5        AMB     [        U5      U :X  d   eU$ s  snf )Né
   )ÚrangeÚrandomÚ	randrangeÚreverseÚextendÚlen)ÚsizeÚrandÚ_ÚresultÚiÚtemps         ÚTools\scripts\sortperf.pyÚ_random_datar       s†   € Ü%*¨4¤[Ó1¢[ �k‰kŽm¡[€FÐ1ä�2ŽYˆØ�N‰N˜4Ó ˆØ�b�qˆzˆØ�2�A�2ˆJØ�‰ŒØ�‰�dÔÚñ ô ˆv‹;˜$ÓÐÐØ€Mùò 2s   ŽBc                ó   • [        X5      $ ©N)r   ©r   r   s     r   Ú	list_sortr   .   s   € Ü˜Ó#Ð#ó    c                ó<   • [        [        [        X5      5      5      $ r   )ÚlistÚreversedÚlist_sort_ascendingr   s     r   Úlist_sort_descendingr   2   s   € Ü”Ô,¨TÓ8Ó9Ó:Ð:r   c                ó*   • [        [        X5      5      $ r   )Úsortedr   r   s     r   r   r   6   s   € Ü”,˜tÓ*Ó+Ð+r   c                óž   • [        X5      n[        S5       H2  nUR                  U 5      nUR                  U 5      nX%   X$   sX$'   X%'   M4     U$ )Né   )r   r   r   )r   r   r   r   Úi1Úi2s         r   Úlist_sort_ascending_exchangedr$   :   sQ   € Ü  Ó,€Fä�1ŽXˆØ�^‰^˜DÓ!ˆØ�^‰^˜DÓ!ˆØ!'¡¨V©ZÐˆ‰
�F“Jñ ð €Mr   c                ó˜   • U S:¼  d   S5       e[        X5      n[        S5       Vs/ s H  o1R                  5       PM     snUSS & U$ s  snf )Nr   z(This benchmark requires size to be >= 10iöÿÿÿ)r   r   r   ©r   r   r   r   s       r   Úlist_sort_ascending_randomr'   D   sJ   € Ø�2‹:ÐAÐAÓAˆ:Ü  Ó,€Fä+0°¬9Ó5ª9 a—K‘K–M©9Ñ5€Fˆ3ˆ4€LØ€Mùò 6s   ¦Ac                óˆ   • [        X5      n[        U S-  5       H$  nUR                  5       X!R                  U 5      '   M&     U$ )Néd   )r   r   r   r   r&   s       r   Úlist_sort_ascending_one_percentr*   L   s;   € Ü  Ó,€Fä�4˜3‘;ÖˆØ'+§{¡{£}ˆ�~‰~˜dÓ#Ó$ñ  à€Mr   c                ój   • U S:¼  d   e[        SU5      nX S-  -  n[        [        [        U5      5      $ )Né   )r   r   ÚmapÚabs)r   r   r   s      r   Úlist_sort_duplicatesr/   T   s:   € Ø�1‹9Ðˆ9Ü   DÓ)€Fà˜q‘yÑ!€Fô ””C˜Ó Ó!Ð!r   c                ó<   • [        [        [        S/U -  5      5      $ )NgàhÇ¿›à¿)r   r-   r.   r   s     r   Úlist_sort_equalr1   ^   s   € ä””C˜)˜ tÑ+Ó,Ó-Ð-r   c                ó¤   • U S-  n[        [        US-
  SS5      5      nUR                  [        U5      5        [        [        [        U5      5      $ )Né   é   éÿÿÿÿ)r   r   r
   r-   Úfloat)r   r   Úhalfr   s       r   Úlist_sort_worst_caser8   c   sH   € ð �1‰9€DÜ”%˜˜q™ " bÓ)Ó*€FØ
‡M�M”%˜“+Ôô ””E˜6Ó"Ó#Ð#r   c                  ó2   • \ rS rSrSS jrSS jrS	S jrSrg)
Ú	Benchmarkés   c                ór   • Xl         X l        X0l        [        R                  " U R                  5      U l        g r   )Ú_nameÚ_sizeÚ_seedr   ÚRandomÚ_random)ÚselfÚnamer   Úseeds       r   Ú__init__ÚBenchmark.__init__t   s%   € ØŒ
ØŒ
ØŒ
Ü—}’} T§Z¡ZÓ0ˆ�r   c                ó°   • U R                  U5      n[        R                  " 5       nU H  nUR                  5         M     [        R                  " 5       U-
  $ r   )Ú_prepare_dataÚtimeÚperf_counterÚsort)rB   ÚloopsÚall_dataÚstartÚdatas        r   ÚrunÚBenchmark.runz   sI   € Ø×%Ñ% eÓ,ˆÜ×!Ò!Ó#ˆãˆDØ�I‰IŽKñ ô × Ò Ó" UÑ*Ð*r   c                ó¾   • [         U R                     nU" U R                  U R                  5      n[	        U5       Vs/ s H  oCR                  5       PM     sn$ s  snf r   )Ú
BENCHMARKSr=   r>   rA   r   Úcopy)rB   rL   ÚbenchrO   r   s        r   rH   ÚBenchmark._prepare_dataƒ   sD   € Ü˜4Ÿ:™:Ñ&ˆÙ�T—Z‘Z §¡Ó.ˆÜ%*¨5¤\Ó2¢\ —	‘	–¡\Ñ2Ð2ùÒ2s   ¾A)r=   rA   r?   r>   N)rC   Ústrr   ÚintrD   rX   ÚreturnÚNone)rL   rX   rY   r6   )rL   rX   rY   úlist[float])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rE   rP   rH   Ú__static_attributes__© r   r   r:   r:   s   s   † ô1ô+÷3r   r:   c                óÔ   • UR                   (       a  U R                  UR                   5        U R                  SUR                   35        U R                  SUR                   35        g )Nz--size=z--rng-seed=)Ú	benchmarkÚappendr   Úrng_seed)ÚcmdÚargss     r   Úadd_cmdline_argsrh   ‰   sG   € Ø‡~‡~Ø�
‰
�4—>‘>Ô"Ø‡J�J�˜Ÿ™˜Ð$Ô%Ø‡J�J�˜TŸ]™]˜OÐ,Õ-r   c           
     óü   • U R                  S[        SSR                  SR                  [        5      5      S9  U R                  S[        [
        S[
         S3S	9  U R                  S
[        [        S[         S3S	9  g )Nrc   Ú?zCan be any of: {0}z, )ÚchoicesÚnargsÚhelpz--sizez$Size of the lists to sort (default: Ú))ÚtypeÚdefaultrm   z
--rng-seedz'Random number generator seed (default: )Úadd_argumentrS   ÚformatÚjoinrX   ÚDEFAULT_SIZEÚDEFAULT_RANDOM_SEED)Úparsers    r   Úadd_parser_argsrw   �   s‹   € Ø
×ÑØÜØØ!×(Ñ(¨¯©´:Ó)>Ó?ð	 ñ ð ×ÑØÜÜØ3´L°>ÀÐCð	 ñ ð ×ÑØÜÜ#Ø6Ô7JÐ6KÈ1ÐMð	 ò r   i @  )	r   r   r   r$   r'   r*   r/   r1   r8   Ú__main__)rh   z&Test `list.sort()` with different dataÚdescriptionÚlist_sort_sizeÚlist_sort_random_seed)r   rX   r   zrandom.RandomrY   r[   )rf   z	list[str]rY   rZ   )rv   zargparse.ArgumentParserrY   rZ   )&Ú__doc__Ú
__future__r   ÚargparserI   r   r   r   r   r   r$   r'   r*   r/   r1   r8   r:   rh   rw   rt   ru   rS   r\   ÚpyperfÚRunnerÚrunnerÚ	argparserÚ
parse_argsrg   Úmetadatar   re   rc   Ú
benchmarksr   rU   Úbench_time_funcrP   ra   r   r   Ú<module>r‡      sO  ðñõ( #ã Û Û ôô$ô;ô,ôôôô"ô.ô
	$÷ 3ñ 3ô,.ôð* €ØÐ àØ0Ø.Ø%BØ"<Ø'FØ0Ø&Ø0ñ
€
ð ˆzÓãà�]Š]Ð,<Ñ=€FÙ�F×$Ñ$Ô%Ø×ÑÓ€Dà%M€F‡O�O�MÑ"Ø(,¯	©	€F‡O�OÐ$Ñ%Ø/3¯}©}€F‡O�OÐ+Ñ,à‡~‡~Ø—n‘nÐ&‰
á˜JÓ'ˆ
ÛˆÙ˜e T§Y¡Y°·±Ó>ˆ	Ø×Ñ˜u i§m¡mÖ4ò ð! r   