U
    ËZj:  ã                   @   s~   d 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mZmZmZmZ ddlmZmZmZ dd„ ZG dd	„ d	ejƒZd
S )zD
Fixer for:
(a,)* *b (,c)* [,] = s
for (a,)* *b (,c)* [,] in d: ...
é    )Ú
fixer_base)Úcount)
ÚAssignÚCommaÚCallÚNewlineÚNameÚNumberÚtokenÚsymsÚNodeÚLeaf)ÚindentationÚsuitifyÚ	commatizec                 C   sÌ  g }t | ƒ}t |ƒ}| dkr†ttjt|ƒttjttjdƒttj	ttj
dƒt|ƒgƒttjdƒgƒgƒ}| |¡ | ttjddd�¡ ttjttjddd�t|ƒttjttjdƒttj	| dkrÆt|ƒntdd	ƒttj
dƒ|dkrüttjttjd
ƒt|ƒgƒntdd	ƒgƒttjdƒttjdƒgƒgƒ}| |¡ |dk�r¼| ttjddd�¡ ttjt|dd�ttjttjdƒttj	ttjttjd
ƒt|ƒgƒttj
dƒgƒttjdƒgƒgƒ}	| |	¡ ttj|ƒ}
|
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   Úpowerr   Útrailerr   r
   ÚLSQBZ	subscriptÚCOLONr	   ÚRSQBÚappendÚPLUSÚfactorÚMINUSZ
arith_expr)Znum_preZnum_postÚLISTNAMEÚITERNAMEÚchildrenÚpreÚpostZpre_partZ	main_partZ	post_partÚsource© r+   úd/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/libpasteurize/fixes/fix_unpacking.pyÚassignment_source   s    J
 

b
r-   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú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           
         s¶   ‡ fdd„dD ƒ\}}}}dd„ |D ƒ}d|_ dd„ |D ƒ}dd„ t|| ¡ g | ƒD ƒ}| tƒ ¡ d	|_ tt| jƒttd
ƒ| ¡ gƒƒ}t|t	t
|ƒt
|ƒ| j| jƒƒ}	||	fS )Nc                 3   s   | ]}ˆ   |¡V  qd S ©N©Úget©Ú.0Ún©Úresultsr+   r,   Ú	<genexpr>3   s     z4FixUnpacking.fix_explicit_context.<locals>.<genexpr>)r(   Únamer)   r*   c                 S   s    g | ]}|j tjkr| ¡ ‘qS r+   ©Útyper
   ÚNAMEÚcloner2   r+   r+   r,   Ú
<listcomp>4   s      z5FixUnpacking.fix_explicit_context.<locals>.<listcomp>r   c                 S   s    g | ]}|j tjkr| ¡ ‘qS r+   r9   r2   r+   r+   r,   r=   6   s      c                 S   s   g | ]}|  ¡ ‘qS r+   ©r<   r2   r+   r+   r,   r=   7   s     r   Úlist)r   r   r<   r!   r   r   r   r%   r   r-   Úlenr&   )
ÚselfÚnoder6   r(   r8   r)   r*   ÚtargetÚ
setup_lineÚ
power_liner+   r5   r,   Úfix_explicit_context2   s       z!FixUnpacking.fix_explicit_contextc                    sÀ   ‡ fdd„dD ƒ\}}}}dd„ |D ƒ}d|_ dd„ |D ƒ}dd„ t|| ¡ g | ƒD ƒ}| tƒ ¡ | ¡ }d	|_ tt| jƒttd
ƒt| j	ƒgƒƒ}	t|t
t|ƒt|ƒ| j| j	ƒƒ}
|	|
fS )z_
        Only example of the implicit context is
        a for loop, so only fix that.
        c                 3   s   | ]}ˆ   |¡V  qd S r/   r0   r2   r5   r+   r,   r7   E   s     z4FixUnpacking.fix_implicit_context.<locals>.<genexpr>)r(   r8   r)   Úitc                 S   s    g | ]}|j tjkr| ¡ ‘qS r+   r9   r2   r+   r+   r,   r=   F   s      z5FixUnpacking.fix_implicit_context.<locals>.<listcomp>r   c                 S   s    g | ]}|j tjkr| ¡ ‘qS r+   r9   r2   r+   r+   r,   r=   H   s      c                 S   s   g | ]}|  ¡ ‘qS r+   r>   r2   r+   r+   r,   r=   I   s     r   r?   )r   r   r<   r!   r   r   r   r%   r   r&   r-   r@   )rA   rB   r6   r(   r8   r)   rG   rC   r*   rD   rE   r+   r5   r,   Úfix_implicit_context@   s     " z!FixUnpacking.fix_implicit_contextc           
      C   s@  |   d¡| _|   d¡| _| d¡| d¡ }}|dk	rŽ|  ||¡\}}|j|_t|jƒ|_| t	ƒ ¡ |j}| 
¡ }| ||¡ | ||¡ n®|dk	�r<|  ||¡\}}t|ƒ dd„ |jD ƒd }	d	|_|	jd
 j|_t|	jd ƒ|	jd _|	 dt	ƒ ¡ |	 d|¡ |	 dt	ƒ ¡ |	 d|¡ | d¡ t| jdd�¡ dS )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
        Z	_3to2listZ	_3to2iterÚexplÚimplNc                 S   s   g | ]}|j tjkr|‘qS r+   )r:   r   Úsuite)r3   Úkr+   r+   r,   r=   p   s      z*FixUnpacking.transform.<locals>.<listcomp>r   r   r   é   Úlstr   r   )Únew_namer%   r&   r1   rF   r   r   ÚparentZappend_childr   ÚremoveZinsert_childrH   r   r'   ÚvalueÚreplacer   )
rA   rB   r6   rI   rJ   rD   rE   rP   ÚirK   r+   r+   r,   Ú	transformS   s0    
zFixUnpacking.transformN)Ú__name__Ú
__module__Ú__qualname__ZPATTERNrF   rH   rU   r+   r+   r+   r,   r.   &   s   
r.   N)Ú__doc__Zlib2to3r   Ú	itertoolsr   Zlib2to3.fixer_utilr   r   r   r   r   r	   r
   r   r   r   Zlibfuturize.fixer_utilr   r   r   r-   ZBaseFixr.   r+   r+   r+   r,   Ú<module>   s   0