o ,]:@s~dZddlmZddlmZddlmZmZmZm Z m Z m Z m Z m Z mZmZddlmZmZmZddZGdd d ejZd S) zD Fixer for: (a,)* *b (,c)* [,] = s for (a,)* *b (,c)* [,] in d: ... ) fixer_base)count) AssignCommaCallNewlineNameNumbertokensymsNodeLeaf) indentationsuitify commatizec Csg}t|}t|}|dkrCttjt|ttjttjdttj ttj dt |gttj dgg}| || ttjdddttjttjdddt|ttjttjdttj |dkrct |ntdd ttj d|dkr~ttjttjd t |gntdd gttj dttj dgg}| ||dkr| ttjdddttjt|ddttjttjdttj ttjttjd t |gttj dgttj dgg} | | ttj|} | S) z Accepts num_pre and num_post, which are counts of values before and after the starg (not including the starg) Returns a source fit for Assign() from fixer_util r[:]+ prefix-)unicoder r powerrtrailerr r LSQB subscriptCOLONr RSQBappendPLUSfactorMINUS arith_expr) num_prenum_postLISTNAMEITERNAMEchildrenprepostpre_part main_part post_partsourcer2C/usr/lib/python3/dist-packages/libpasteurize/fixes/fix_unpacking.pyassignment_sourcesJ  b  r4c@s(eZdZdZddZddZddZdS) FixUnpackinga9 expl=expr_stmt< testlist_star_expr< pre=(any ',')* star_expr< '*' name=NAME > post=(',' any)* [','] > '=' source=any > | impl=for_stmt< 'for' lst=exprlist< pre=(any ',')* star_expr< '*' name=NAME > post=(',' any)* [','] > 'in' it=any ':' suite=any>c sfdddD\}}}}dd|D}d|_dd|D}ddt||g|D}|td |_tt|jttd |g}t|t t |t ||j|j } || fS) Nc3|]}|VqdSNget.0nresultsr2r3 3z4FixUnpacking.fix_explicit_context..)r,namer-r1cS g|] }|jtjkr|qSr2typer NAMEcloner:r2r2r3 4 z5FixUnpacking.fix_explicit_context..rcSrBr2rCr:r2r2r3rG6rHcSg|]}|qSr2rFr:r2r2r3rG7rlist) rrrFr"rrrr)rr4lenr*) selfnoder>r,rAr-r1target setup_line power_liner2r=r3fix_explicit_context2s    z!FixUnpacking.fix_explicit_contextc sfdddD\}}}}dd|D}d|_dd|D}ddt||g|D}|t|}d |_tt|jttd t|j g} t|t t |t ||j|j } | | fS) z_ Only example of the implicit context is a for loop, so only fix that. c3r6r7r8r:r=r2r3r?Er@z4FixUnpacking.fix_implicit_context..)r,rAr-itcSrBr2rCr:r2r2r3rGFrHz5FixUnpacking.fix_implicit_context..rcSrBr2rCr:r2r2r3rGHrHcSrIr2rJr:r2r2r3rGIrKrrL) rrrFr"rrrr)rr*r4rM) rNrOr>r,rAr-rTrPr1rQrRr2r=r3fix_implicit_context@s  " z!FixUnpacking.fix_implicit_contextc CsD|d|_|d|_|d|d}}|durH|||\}}|j|_t|j|_|t |j}| }| ||| ||dS|dur| ||\}}t |dd|jDd} d |_| jd j|_t| jd | jd _| d t | d || d t | d ||d t|jd ddSdS)a a,b,c,d,e,f,*g,h,i = range(100) changes to _3to2list = list(range(100)) a,b,c,d,e,f,g,h,i, = _3to2list[:6] + [_3to2list[6:-2]] + _3to2list[-2:] and for a,b,*c,d,e in iter_of_iters: do_stuff changes to for _3to2iter in iter_of_iters: _3to2list = list(_3to2iter) a,b,c,d,e, = _3to2list[:2] + [_3to2list[2:-2]] + _3to2list[-2:] do_stuff _3to2list _3to2iterexplimplNcSsg|] }|jtjkr|qSr2)rDr suite)r;kr2r2r3rGpsz*FixUnpacking.transform..rrrlstrr)new_namer)r*r9rSrrparent append_childrremove insert_childrUrr+valuereplacer) rNrOr>rXrYrQrRr_irZr2r2r3 transformSs2       zFixUnpacking.transformN)__name__ __module__ __qualname__PATTERNrSrUrfr2r2r2r3r5&s   r5N)__doc__lib2to3r itertoolsrlib2to3.fixer_utilrrrrrr r r r r libfuturize.fixer_utilrrrr4BaseFixr5r2r2r2r3s  0