
    ZQd                         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dS )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                 v    t          | t          j                  o| j        d         j        t
          j        k    S )N    )
isinstancer   Nodechildrentyper   STRING)stmts    5/usr/lib/python3.11/lib2to3/fixes/fix_tuple_params.pyis_docstringr      s/    dFK(( 1= EL01    c                   &    e Zd ZdZdZdZd Zd ZdS )FixTupleParams   Ta  
              funcdef< 'def' any parameters< '(' args=any ')' >
                       ['->' any] ':' suite=any+ >
              |
              lambda=
              lambdef< 'lambda' args=vfpdef< '(' inner=any ')' >
                       ':' body=any
              >
              c                     d|v r                      ||          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 ||           nU|j        t          j        k    r@t          |j                  D ]+\  }}	|	j        t          j
        k    r ||	|dk               ,sd S D ]}
|d         |
_        |}|dk    rdd         _        n2t          |d         j        |                   r|d         _        |dz   }D ]}
|d         |
_        |d         j        ||<   t!          |dz   |t#                    z   dz             D ]}||d         j        |         _        |d                                          d S )Nlambdasuiteargsr      r   z;  Fc                    t                                                    }|                                 }d|_        t	          ||                                          }|rd|_        |                     |                               t          j        t          j
        |                                g                     d S )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#qwwyy))D a   V[)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.   sM   w((w777	 v 8Q$44E1X&q)/F))CCEF+elB//C
		? 		? 		? 		? 		? 		? 		? 		? 9##LY$,,,#DM22 : :38t{** !L!a%9999 	F  	# 	#D(DKK A::"%IaL%(+E233 	"(IaLAIE 	# 	#D(DKK)2a%+&uQwc)nn 4Q 677 	1 	1A*0E!Ha ''ar   c                    |d         }|d         }t          |d                   }|j        t          j        k    r2|                                }d|_        |                    |           d S t          |          }t          |          }| 	                    t          |                    }t          |d          }	|                    |	                                           |                                D ]}
|
j        t          j        k    rv|
j        |v rmd ||
j                 D             }t          j        t           j        |	                                g|z             }|
j        |_        |
                    |           d S )Nr   bodyinnerr!   )r$   c                 6    g | ]}|                                 S  )r#   .0cs     r   
<listcomp>z3FixTupleParams.transform_lambda.<locals>.<listcomp>   s     CCCAaggiiCCCr   )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*   
subscriptsnews                r   r0   zFixTupleParams.transform_lambdan   s`   vvgg.// :##KKMMEELLLFT""''==F!3!344#...	Y__&&'''"" 	 	Av##8(;(;CC!'1BCCC
k$*#,??#4#4"5
"BD DX
		#	 	r   N)__name__
__module____qualname__	run_orderBM_compatiblePATTERNrB   r0   rG   r   r   r   r      sD        IMG> > >@    r   r   c                    | j         t          j        t          j        fv r| S | j         t          j        k    r9| j         t          j        k    r"| j        d         } | j         t          j        k    "| S t          d| z            )Nr   zReceived unexpected node %s)r   r   vfplistr   rM   vfpdefr   RuntimeErrorr;   s    r   rL   rL      ss    yT\5:...	dk	!	! i4;&&=#D i4;&&
4t;
<
<<r   c                     | j         t          j        k    rt          | j        d                   S | j         t
          j        k    r| j        S d | j        D             S )Nr   c                 V    g | ]&}|j         t          j        k    t          |          'S rG   )r   r   COMMArN   rH   s     r   rK   zfind_params.<locals>.<listcomp>   s,    KKKqQVu{5J5JKNN5J5J5Jr   )r   r   ra   rN   r   r   rM   r2   rc   s    r   rN   rN      sS    yDK4=+,,,	ej	 	 zKKDMKKKKr   Nc                     |i }t          |           D ]_\  }}t          t          t          |                              g}t	          |t
                    rt          |||           W||z   ||<   `|S )N)d)r6   r
   r	   strr   listrO   )
param_listr$   rh   r?   objtrailers         r   rO   rO      s    yJ'' & &3VCFF^^,,-c4   	&g+++++g%AcFFHr   c                     g }| D ]O}t          |t                    r#|                    t          |                     :|                    |           Pd                    |          S )N_)r   rj   r&   rP   join)rk   lrl   s      r   rP   rP      sd    
A  c4   	HHZ__%%%%HHSMMMM88A;;r   )__doc__r   r   pgen2r   r   
fixer_utilr   r   r   r	   r
   r   r   BaseFixr   rL   rN   rO   rP   rG   r   r   <module>rv      s   *                   G G G G G G G G G G G G G G G G1 1 1g g g g gZ' g g gX	= 	= 	=L L L %'$ 	 	 	 	    r   