
    daf                         d 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	m
Z
mZmZ d Z G d dej                        Zd	 Zd
 Zg dfdZd Zy)a:  Fixer for function definitions with tuple parameters.

def func(((a, b), c), d):
    ...

    ->

def func(x, d):
    ((a, b), c) = x
    ...

It will also support lambdas:

    lambda (x, y): x + y -> lambda t: t[0] + t[1]

    # The parens are a syntax error in Python 3
    lambda (x): x + y -> lambda x: x + y
   )pytree)token)
fixer_base)AssignNameNewlineNumber	Subscriptsymsc                     t        | t        j                        xr* | j                  d   j                  t
        j                  k(  S )N    )
isinstancer   Nodechildrentyper   STRING)stmts    9/root/Python-3.12.4/Lib/lib2to3/fixes/fix_tuple_params.pyis_docstringr      s5    dFKK( 1==  ELL01    c                   $    e Zd ZdZdZdZd Zd Zy)FixTupleParams   Ta  
              funcdef< 'def' any parameters< '(' args=any ')' >
                       ['->' any] ':' suite=any+ >
              |
              lambda=
              lambdef< 'lambda' args=vfpdef< '(' inner=any ')' >
                       ':' body=any
              >
              c                     d|v r j                  ||      S g |d   }|d   }|d   j                  d   j                  t        j                  k(  r)d}|d   j                  d   j
                  }t               n(d}d}t        j                  t        j                  d      d fd		}|j                  t        j                  k(  r	 ||       ne|j                  t        j                  k(  rHt        |j                        D ]0  \  }}	|	j                  t        j                  k(  s$ ||	|dkD  
       2 sy D ]  }
|d   |
_         |}|dk(  rdd   _        n*t        |d   j                  |         r|d   _        |dz   }D ]  }
|d   |
_         |d   j                  || t!        |dz   |t#              z   dz         D ]  }||d   j                  |   _         |d   j%                          y )Nlambdasuiteargsr      r   z;  c                 T   t        j                               }| j                         }d|_        t	        ||j                               }|rd|_        | j                  |       j                  t        j                  t        j                  |j                         g             y )Nr    )r   new_namecloneprefixr   replaceappendr   r   r   simple_stmt)	tuple_arg
add_prefixnargr   end	new_linesselfs        r   handle_tuplez.FixTupleParams.transform.<locals>.handle_tupleC   s    T]]_%A//#CCJ#qwwy)Da V[[)9)9*.		)<> ?r   )r)   r!   )F)transform_lambdar   r   r   INDENTvaluer   r   Leafr   tfpdeftypedargslist	enumerateparentr$   r   rangelenchanged)r.   noderesultsr   r   startindentr/   ir+   lineafterr,   r-   s   `           @@r   	transformzFixTupleParams.transform.   s   w((w77	 v 8Q$$4E1X&&q)//F)CEF++ellB/C
		? 99#YY$,,,#DMM2 :388t{{* !!a%9	:   	#D(DK	# A:"%IaL%(++E23"(IaLAIE 	#D(DK	#)2a%&uQwc)n 4Q 67 	1A*0E!Ha '	1ar   c                 
   |d   }|d   }t        |d         }|j                  t        j                  k(  r)|j	                         }d|_        |j                  |       y t        |      }t        |      }| j                  t        |            }t        |d      }	|j                  |	j	                                |j                         D ]  }
|
j                  t        j                  k(  s!|
j                  |v s0||
j                     D cg c]  }|j	                          }}t        j                  t         j"                  |	j	                         g|z         }|
j
                  |_        |
j                  |        y c c}w )Nr   bodyinnerr!   )r$   )simplify_argsr   r   NAMEr#   r$   r%   find_paramsmap_to_indexr"   
tuple_namer   
post_orderr2   r   r   r   power)r.   r;   r<   r   rD   rE   paramsto_indextup_name	new_paramr*   c
subscriptsnews                 r   r0   zFixTupleParams.transform_lambdan   s/   vvgg./ ::#KKMEELLLT"'==F!34#.	Y__&'" 	Avv#8(;19!''1BCAaggiC
Ckk$**#,??#4"5
"BDXX
		#	Cs   F N)__name__
__module____qualname__	run_orderBM_compatiblePATTERNrB   r0    r   r   r   r      s    IMG>@r   r   c                 L   | j                   t        j                  t        j                  fv r| S | j                   t        j
                  k(  rL| j                   t        j
                  k(  r-| j                  d   } | j                   t        j
                  k(  r-| S t        d| z        )Nr   zReceived unexpected node %s)r   r   vfplistr   rG   vfpdefr   RuntimeError)r;   s    r   rF   rF      sx    yyT\\5::..	dkk	! ii4;;&==#D ii4;;&
4t;
<<r   c                 J   | j                   t        j                  k(  rt        | j                  d         S | j                   t
        j                  k(  r| j                  S | j                  D cg c]+  }|j                   t
        j                  k7  s!t        |      - c}S c c}w )Nr   )	r   r   r]   rH   r   r   rG   r2   COMMA)r;   rQ   s     r   rH   rH      sk    yyDKK4==+,,	ejj	 zz$(MMKqQVVu{{5JKNKKKs   -"B B Nc                     |i }t        |       D ]J  \  }}t        t        t        |                  g}t	        |t
              rt        |||       C||z   ||<   L |S )N)d)r6   r
   r	   strr   listrI   )
param_listr$   rb   r?   objtrailers         r   rI   rI      sd    yJ' &3VCF^,-c4 g+g%AcF& Hr   c                     g }| D ]>  }t        |t              r|j                  t        |             .|j                  |       @ dj	                  |      S )N_)r   rd   r&   rJ   join)re   lrf   s      r   rJ   rJ      sK    
A c4 HHZ_%HHSM	
 88A;r   )__doc__r   r   pgen2r   r   
fixer_utilr   r   r   r	   r
   r   r   BaseFixr   rF   rH   rI   rJ   rZ   r   r   <module>rp      sQ   *    G G1gZ'' gX	=L %'$ 	r   