ó
	Q˜[c           @   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 „  Z d e j f d „  ƒ  YZ d	 S(
   uD   
Fixer for:
(a,)* *b (,c)* [,] = s
for (a,)* *b (,c)* [,] in d: ...
iÿÿÿÿ(   t
   fixer_base(   t   count(
   t   Assignt   Commat   Callt   Newlinet   Namet   Numbert   tokent   symst   Nodet   Leaf(   t   indentationt   suitifyt	   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 ƒ } | j | ƒ | j t t j d d d ƒƒ n  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 ryt t j t t j d
 ƒ t | ƒ g ƒ n t d d	 ƒ g ƒ t t j d ƒ t t j d ƒ g ƒ g ƒ } | j | ƒ | d k r“| j 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 ƒ }	 | j |	 ƒ n  t t j | ƒ }
 |
 S(   u±   
    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
    i    u   [u   :u   ]u   +t   prefixu    i   u    u   -(   t   unicodeR
   R	   t   powerR   t   trailerR   R   t   LSQBt	   subscriptt   COLONR   t   RSQBt   appendt   PLUSt   factort   MINUSt
   arith_expr(   t   num_pret   num_postt   LISTNAMEt   ITERNAMEt   childrent   pret   postt   pre_partt	   main_partt	   post_partt   source(    (    s@   lib/python2.7/site-packages/libpasteurize/fixes/fix_unpacking.pyt   assignment_source   s    o"ð“t   FixUnpackingc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   u9  
    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            sF  ‡  f d †  d	 Dƒ \ } } } } g  | D]$ } | j  t j k r) | j ƒ  ^ q) } d | _ g  | D]$ } | j  t j k rc | j ƒ  ^ qc } g  t | | j ƒ  g | ƒ D] } | j ƒ  ^ q« } | j t ƒ  ƒ d | _ t t	 |  j
 ƒ t t	 d ƒ | j ƒ  g ƒ ƒ }	 t | t t | ƒ t | ƒ |  j
 |  j ƒ ƒ }
 |	 |
 f S(
   Nc         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   t   get(   t   .0t   n(   t   results(    s@   lib/python2.7/site-packages/libpasteurize/fixes/fix_unpacking.pys	   <genexpr>3   s    u   preu   nameu   postu   sourceu    u    u   list(   u   preu   nameu   postu   source(   t   typeR   t   NAMEt   cloneR   R   R   R   R   R   R   R   R'   t   lenR   (   t   selft   nodeR,   R!   t   nameR"   R&   R+   t   targett
   setup_linet
   power_line(    (   R,   s@   lib/python2.7/site-packages/libpasteurize/fixes/fix_unpacking.pyt   fix_explicit_context2   s    "1	16	00c            sU  ‡  f d †  d	 Dƒ \ } } } } g  | D]$ } | j  t j k r) | j ƒ  ^ q) } d | _ g  | D]$ } | j  t j k rc | j ƒ  ^ qc } g  t | | j ƒ  g | ƒ D] } | j ƒ  ^ q« } | j t ƒ  ƒ | j ƒ  }	 d |	 _ t t	 |  j
 ƒ t t	 d ƒ t	 |  j ƒ g ƒ ƒ }
 t | t t | ƒ t | ƒ |  j
 |  j ƒ ƒ } |
 | f S(
   u_   
        Only example of the implicit context is
        a for loop, so only fix that.
        c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R)   (   R*   R+   (   R,   (    s@   lib/python2.7/site-packages/libpasteurize/fixes/fix_unpacking.pys	   <genexpr>E   s    u   preu   nameu   postu   itu    u    u   list(   u   preu   nameu   postu   it(   R-   R   R.   R/   R   R   R   R   R   R   R   R   R   R'   R0   (   R1   R2   R,   R!   R3   R"   t   itR+   R4   R&   R5   R6   (    (   R,   s@   lib/python2.7/site-packages/libpasteurize/fixes/fix_unpacking.pyt   fix_implicit_context@   s    "1	16	30c         C   sØ  |  j  d ƒ |  _ |  j  d ƒ |  _ | j d ƒ | j d ƒ } } | d k	 rÍ |  j | | ƒ \ } } | j | _ t | j ƒ | _ | j	 t
 ƒ  ƒ | j } | j ƒ  } | j | | ƒ | j | | ƒ n| d k	 rÔ|  j | | ƒ \ } } t | ƒ g  | j D] }	 |	 j t j k r|	 ^ qd }
 d | _ |
 j d j | _ t |
 j d ƒ |
 j d _ |
 j d t
 ƒ  ƒ |
 j d | ƒ |
 j d t
 ƒ  ƒ |
 j d | ƒ | j d	 ƒ j t |  j d
 d ƒƒ n  d S(   u­  
        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
        u	   _3to2listu	   _3to2iteru   explu   impli    u    i   i   u   lstR   u    N(   t   new_nameR   R   R)   t   NoneR7   R   R   t   parentt   append_childR   t   removet   insert_childR9   R   R    R-   R	   t   suitet   valuet   replaceR   (   R1   R2   R,   t   explt   implR5   R6   R<   t   it   kR@   (    (    s@   lib/python2.7/site-packages/libpasteurize/fixes/fix_unpacking.pyt	   transformS   s0    	
2	(   t   __name__t
   __module__t   PATTERNR7   R9   RG   (    (    (    s@   lib/python2.7/site-packages/libpasteurize/fixes/fix_unpacking.pyR(   &   s   
		N(   t   __doc__t   lib2to3R    t	   itertoolsR   t   lib2to3.fixer_utilR   R   R   R   R   R   R   R	   R
   R   t   libfuturize.fixer_utilR   R   R   R'   t   BaseFixR(   (    (    (    s@   lib/python2.7/site-packages/libpasteurize/fixes/fix_unpacking.pyt   <module>   s   F	