Ë
    #´˜j  ã                   óf   — d Z ddlmZ ddlmZmZmZmZmZm	Z	 dZ
dZ G d„ dej                  «      Zy)	aÜ  Adjust some old Python 2 idioms to their modern counterparts.

* Change some type comparisons to isinstance() calls:
    type(x) == T -> isinstance(x, T)
    type(x) is T -> isinstance(x, T)
    type(x) != T -> not isinstance(x, T)
    type(x) is not T -> not isinstance(x, T)

* Change "while 1:" into "while True:".

* Change both

    v = list(EXPR)
    v.sort()
    foo(v)

and the more general

    v = EXPR
    v.sort()
    foo(v)

into

    v = sorted(EXPR)
    foo(v)
é   )Ú
fixer_base)ÚCallÚCommaÚNameÚNodeÚ	BlankLineÚsymsz0(n='!=' | '==' | 'is' | n=comp_op< 'is' 'not' >)z(power< 'type' trailer< '(' x=any ')' > >c            	       óX   ‡ — e Zd ZdZde›de›de›de›d�	Zˆ fd„Zd„ Zd„ Z	d	„ Z
d
„ Zˆ xZS )Ú	FixIdiomsTz 
        isinstance=comparison< Ú z8 T=any >
        |
        isinstance=comparison< T=any aX   >
        |
        while_stmt< 'while' while='1' ':' any+ >
        |
        sorted=any<
            any*
            simple_stmt<
              expr_stmt< id1=any '='
                         power< list='list' trailer< '(' (not arglist<any+>) any ')' > >
              >
              '\n'
            >
            sort=
            simple_stmt<
              power< id2=any
                     trailer< '.' 'sort' > trailer< '(' ')' >
              >
              '\n'
            >
            next=any*
        >
        |
        sorted=any<
            any*
            simple_stmt< expr_stmt< id1=any '=' expr=any > '\n' >
            sort=
            simple_stmt<
              power< id2=any
                     trailer< '.' 'sort' > trailer< '(' ')' >
              >
              '\n'
            >
            next=any*
        >
    c                 óV   •— t         t        | �  |«      }|rd|v r|d   |d   k(  r|S y |S )NÚsortedÚid1Úid2)Úsuperr   Úmatch)ÚselfÚnodeÚrÚ	__class__s      €ú*lib/python3.12/lib2to3/fixes/fix_idioms.pyr   zFixIdioms.matchO   s<   ø€ Ü”)˜TÑ(¨Ó.ˆñ �˜Q‘Ø�‰x˜1˜U™8Ò#Ø�ØØˆó    c                 óœ   — d|v r| j                  ||«      S d|v r| j                  ||«      S d|v r| j                  ||«      S t        d«      ‚)NÚ
isinstanceÚwhiler   zInvalid match)Útransform_isinstanceÚtransform_whileÚtransform_sortÚRuntimeError)r   r   Úresultss      r   Ú	transformzFixIdioms.transformZ   s^   € Ø˜7Ñ"Ø×,Ñ,¨T°7Ó;Ð;Ø˜ÑØ×'Ñ'¨¨gÓ6Ð6Ø˜Ñ Ø×&Ñ& t¨WÓ5Ð5ä˜Ó/Ð/r   c                 ó0  — |d   j                  «       }|d   j                  «       }d|_        d|_        t        t        d«      |t	        «       |g«      }d|v r,d|_        t        t        j                  t        d«      |g«      }|j                  |_        |S )NÚxÚTÚ r   r   ÚnÚnot)ÚcloneÚprefixr   r   r   r   r	   Únot_test)r   r   r    r#   r$   Útests         r   r   zFixIdioms.transform_isinstanced   s„   € Ø�C‰L×ÑÓ ˆØ�C‰L×ÑÓ ˆØˆŒØˆŒÜ”D˜Ó&¨¬E«G°Q¨Ó8ˆØ�'‰>ØˆDŒKÜœŸ™¬¨U«°TÐ':Ó;ˆDØ—k‘kˆŒØˆr   c                 óZ   — |d   }|j                  t        d|j                  ¬«      «       y )Nr   ÚTrue©r)   )Úreplacer   r)   )r   r   r    Úones       r   r   zFixIdioms.transform_whilep   s#   € Ø�gÑˆØ�‰”D˜¨¯
©
Ô3Õ4r   c                 óî  — |d   }|d   }|j                  d«      }|j                  d«      }|r'|j                  t        d|j                  ¬«      «       nV|rI|j	                  «       }d|_        |j                  t        t        d«      |g|j                  ¬«      «       nt        d«      ‚|j                  «        |j                  }d	|v rª|r=|j                  d	«      d
   |d
   j                  f}	d	j                  |	«      |d
   _        y |j                  sJ ‚|j                  �J ‚t        «       }
|j                  j                  |
«       |j                  |
u sJ ‚|j                  d	«      d
   |
_        y y )NÚsortÚnextÚlistÚexprr   r.   r%   zshould not have reached hereÚ
é    )Úgetr/   r   r)   r(   r   r   ÚremoveÚ
rpartitionÚjoinÚparentÚnext_siblingr   Úappend_child)r   r   r    Ú	sort_stmtÚ	next_stmtÚ	list_callÚsimple_exprÚnewÚbtwnÚprefix_linesÚend_lines              r   r   zFixIdioms.transform_sortt   sf  € Ø˜F‘Oˆ	Ø˜F‘Oˆ	Ø—K‘K Ó'ˆ	Ø—k‘k &Ó)ˆáØ×Ñœd 8°I×4DÑ4DÔEÕFÙØ×#Ñ#Ó%ˆCØˆCŒJØ×Ñ¤¤T¨(£^°c°UØ,7×,>Ñ,>ô!@õ Aô Ð=Ó>Ð>Ø×ÑÔà×Ñˆð �4‰<Ùð !%§¡°Ó 5°aÑ 8¸)ÀA¹,×:MÑ:MÐN�Ø&*§i¡i°Ó&=�	˜!‘Õ#à ×'Ò'Ð'Ð'Ø ×-Ñ-Ð5Ð5Ð5ä$›;�Ø× Ñ ×-Ñ-¨hÔ7Ø ×-Ñ-°Ñ9Ð9Ð9ð #'§/¡/°$Ó"7¸Ñ":�•ð! r   )Ú__name__Ú
__module__Ú__qualname__ÚexplicitÚTYPEÚCMPÚPATTERNr   r!   r   r   r   Ú__classcell__)r   s   @r   r   r   %   s6   ø„ Ø�HòN ’’cš4ðK%!€GôN	ò0ò
ò5ö$;r   r   N)Ú__doc__r%   r   Ú
fixer_utilr   r   r   r   r   r	   rL   rK   ÚBaseFixr   © r   r   Ú<module>rS      s3   ðñõ< ß A× Aà8€Ø1€ôs;�
×"Ñ"õ s;r   