U e5d½ã@sŒdZddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z dd„Z Gdd „d ejƒZd d „Zd d „Zgdfdd„Zdd„ZdS)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ÚsymscCst|tjƒo|jdjtjkS)Né)Ú isinstancerÚNodeÚchildrenÚtyperÚSTRING)Ústmt©rú6/usr/lib64/python3.8/lib2to3/fixes/fix_tuple_params.pyÚ is_docstrings ÿrc@s(eZdZdZdZdZdd„Zdd„ZdS) ÚFixTupleParamséTa funcdef< 'def' any parameters< '(' args=any ')' > ['->' any] ':' suite=any+ > | lambda= lambdef< 'lambda' args=vfpdef< '(' inner=any ')' > ':' body=any > c sšd|krˆ ||¡Sg‰|d}|d}|djdjtjkrZd}|djdj}tƒ‰nd}d}t tjd¡‰d‡‡‡fd d „ }|jt j kr˜||ƒn<|jt j krÔt |jƒD]$\}} | jt j kr®|| |dkd �q®ˆsÜdSˆD]} |d| _ qà|} |dk�r d ˆd_n&t|dj|ƒ�r0|ˆd_|d} ˆD]} |d| _ �q4ˆ|dj| | …<t| d| tˆƒdƒD]}||dj|_�qr|d ¡dS)NÚlambdaÚsuiteÚargsr érz; ÚFcs\tˆ ¡ƒ}| ¡}d|_t|| ¡ƒ}|r2d|_| |¡ˆ t t j |ˆ ¡g¡¡dS)Nrú ) rÚnew_nameÚcloneÚprefixrÚreplaceÚappendrr r Z simple_stmt)Z tuple_argÚ add_prefixÚnÚargr©ÚendZ new_linesÚselfrrÚ handle_tupleCs    ÿz.FixTupleParams.transform..handle_tuple)r"r)F)Útransform_lambdarrrÚINDENTÚvaluerrZLeafr ZtfpdefZ typedargslistÚ enumerateÚparentrrÚrangeÚlenZchanged) r'ÚnodeÚresultsrrÚstartÚindentr(Úir$ÚlineZafterrr%rÚ transform.sF         zFixTupleParams.transformc Csâ|d}|d}t|dƒ}|jtjkrD| ¡}d|_| |¡dSt|ƒ}t|ƒ}|  t |ƒ¡}t |dd�} | |  ¡¡|  ¡D]X} | jtjkr„| j |kr„dd„|| j Dƒ} t tj|  ¡g| ¡} | j| _|  | ¡q„dS)NrÚbodyÚinnerr)rcSsg|] }| ¡‘qSr)r©Ú.0ÚcrrrÚ ‚sz3FixTupleParams.transform_lambda..)Ú simplify_argsrrÚNAMErrr Ú find_paramsÚ map_to_indexrÚ tuple_namerZ post_orderr+rr r Zpower) r'r0r1rr7r8ZparamsZto_indexZtup_nameZ new_paramr#Z subscriptsÚnewrrrr)ns*      ÿzFixTupleParams.transform_lambdaN)Ú__name__Ú __module__Ú __qualname__Z run_orderZ BM_compatibleZPATTERNr6r)rrrrrs  @rcCsN|jtjtjfkr|S|jtjkr>|jtjkr:|jd}q"|Std|ƒ‚dS)NrzReceived unexpected node %s)rr Zvfplistrr>ÚvfpdefrÚ RuntimeError©r0rrrr=‹s   r=cCs<|jtjkrt|jdƒS|jtjkr,|jSdd„|jDƒS)NrcSs g|]}|jtjkrt|ƒ‘qSr)rrÚCOMMAr?r9rrrr<›s zfind_params..)rr rFr?rrr>r+rHrrrr?–s   r?NcCsZ|dkr i}t|ƒD]@\}}ttt|ƒƒƒg}t|tƒrHt|||d�q||||<q|S)N)Úd)r,r rÚstrr Úlistr@)Ú param_listrrJr4ÚobjZtrailerrrrr@�s r@cCs<g}|D](}t|tƒr&| t|ƒ¡q| |¡qd |¡S)NÚ_)r rLr!rAÚjoin)rMÚlrNrrrrA¨s   rA)Ú__doc__rrZpgen2rrZ fixer_utilrrrrr r rZBaseFixrr=r?r@rArrrrÚs    l