
    `i                     D   d Z d ZddZej        fdZdg efdZd Z ed          Z	 ed          Z
e
                    d	           e	e
fd
Z eg d          ZeefdZ ed          d                                z   dgz   Z ed eD                       ZefdZdS )a|  
Part of the astor library for Python AST manipulation.

License: 3-clause BSD

Copyright (c) 2015 Patrick Maupin

Pretty-print source -- post-process for the decompiler

The goals of the initial cut of this engine are:

1) Do a passable, if not PEP8, job of line-wrapping.

2) Serve as an example of an interface to the decompiler
   for anybody who wants to do a better job. :)
c                 F    d                     t          |                     S )z Prettify the source.
     )joinsplit_lines)sources    e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/astor/source_repr.pypretty_sourcer      s     77;v&&'''    O   c                 f   g }|j         }|j        }g }d}d}| D ]} t          |          d          }	|                    |	          }
|
r.|                    |           |
dk    }|t	          |          z  }_|r+||k    s|r ||           nt          |||           d}d}g } ||           |S )zpSplit inputs according to lines.
       If a line is short enough, just yield it.
       Otherwise, fix it.
    F    
)extendappendtypefindlen	wrap_line)r   maxlineresultr   r   line	multilinecountitemnewlineindexs              r   r   r      s    
 F]F]FDIE  $t**T""		'"" 	KK	ISYYEE G##y#F4LLLLdGV444!	F4LLLLMr	   c                 :    t          fd| D                       S )Nc                 &    g | ]} |          S  r   ).0xslens     r   
<listcomp>zcount.<locals>.<listcomp>;   s!    '''AQ'''r	   )sum)groupr!   s    `r   r   r   :   s&    '''''''(((r	   c                    |j         }|j        }| d         }t          |          }|t          |                                          z
  }|d|fv sJ |r|                     d          nd}t          t          |                     }	|	ddd         }
|	ddd         }t          fd|
D                       ||z
  k    rCt          | ||          } t          t          |                     }	|	ddd         }
|	ddd         }|
d         } ||            ||           |s|S | |          z   }|dz  }|dz  }||dz  k    r|dz  |z   }t          ||
dd                   D ]#\  }}|r||k    r4|t          |d                   z   |k    r |d	            ||           |} |          }||z   |k    ryt          |||          \  }}|d
                             d          r|d
         dd
         |d
<    ||            |d	            ||           |} |          }||z   |k    y|r ||           ||z  } |          }||k    r!||z   |k    r |d	            ||           |} ||           ||z  }%dS )zP We have a line that is too long,
        so we're going to try to wrap it.
    r   r   N      c              3   .   K   | ]} |          V  d S Nr   r   r    r   s     r   	<genexpr>zwrap_line.<locals>.<genexpr>W   s+      
*
*5588
*
*
*
*
*
*r	   z       r    )r   r   r   lstrippoplistdelimiter_groupsmax
add_parenszipsplit_groupendswith)r   r   r   r   r   r   indentationlenfirstindentdgroupsunsplittable
splittablefirstpossgnsgcsgreadycnsgs      `               r   r   r   >   sC    ]F]Fq'K;HK..00111Fa]""""!'/$((1+++RK #D))**G33Q3<LAJ
 
*
*
*
*\
*
*
***Wv-===$00'--..sss|QTT]

 OE
F;
F5MMM 
55<<
C6K
aKF1A+&z<#344 $ $C 	 V||c"Q%jj 07 : :t{### %))C)g%%'C99	r9%%c** / %b	#2#E"Iut{###eBii )g%%  r


s
 uSzz<<C$J00F4LLLF;CstI$ $r	   c                 \   g }|                                   | r}|                                 }|                    |           |t          |          z  }| r>| d         }|                    d          r|dz   n|dz
  }|t          |          z   |k    rn| }|                                   || fS )a   Split a group into two subgroups.  The
        first will be appended to the current
        line, the second will start the new line.

        Note that the first group must always
        contain at least one item.

        The original group may be destroyed.
    r-   r.   r'   r,   )reverser0   r   r   r7   )r   r?   r   r>   tokalloweds         r   r6   r6      s     E
NN
 jjllSs3xx 	*C'*||C'8'8Kw{{w{GSXX~''   NN&=r	   z([{z)]}z):c              #     K   g }t          |           } 	 | D ]}|                    |           ||v r n|sdS |V  d}g }| D ]9}||v r|dz  }n||v r|dz  }|dk     r	|V  |g} n$|                    |           :|r
J |            dS w)zSplit a line into alternating groups.
       The first group cannot have a line feed inserted,
       the next one can, etc.
    Tr   r'   N)iterr   )r   begin_delim	end_delimtextr   levels         r   r2   r2      s       D::D 	 	DKK{"" # 	E


  	 	D{""
""
199JJJ 6DEKK!!T!!8E3r	   )zdel returnzyield zif zwhile c                 :   | d         |v r{d}| d                              d          sd}| d         dk    sJ |                     |d           | d         dk    r|                     dd           n|                     d           t          t	          |                     }t          |          dk    r| S t          fd	|D                       }d
}t          |dd                   ||z
  dz
  k    rP|dd         D ]E}	d
}t          |	          dk    r.|	                    dd           |	                    dd           d}F|r|d         ||z
  dz
  k    r7|d                             dd           |d                             d           d |D             S )zVAttempt to add parentheses around the line
       in order to make it splittable.
    r   r'   r.   r&   (r-   :)c              3   .   K   | ]} |          V  d S r)   r   r*   s     r   r+   zadd_parens.<locals>.<genexpr>   s+      ++q%%((++++++r	   FNr,   T
   c                     g | ]	}|D ]}|
S r   r   )r   r$   r   s      r   r"   zadd_parens.<locals>.<listcomp>   s%    777U77D7777r	   )r7   insertr   r1   get_assign_groupsr   r#   )
r   r   r:   
statementsr   r   groupscountsdidwrapr$   s
       `     r   r4   r4      s   
 Aw*Aw$$ 	"E7c>>>>E38s??KKC    KK #D))**F
6{{a++++F+++++FG 6#2#;7V+a///CRC[ 	 	EG5zzA~~Q$$$R%%%  fRj7V#3b#888r
!S!!!r
#77f7777r	   z
|^&+-*/%@~z<< >> // **r   c              #       K   | ]	}d |z  V  
dS )z %s= Nr   )r   r    s     r   r+   r+     s&      	#	#!'A+	#	#	#	#	#	#r	   c              #   ^   K   g }| D ]!}|                     |           ||v r|V  g }"|V  dS )zU Split a line into groups by assignment (including
        augmented assignment)
    N)r   )r   opsr$   r   s       r   rX   rX     sS       E  T3;;KKKE
KKKKKr	   N)r
   )__doc__r   r   str__len__r   r   r6   setrK   rL   addr2   rY   r4   r1   splitr_   rX   r   r	   r   <module>rf      sg   $( ( (   > k ) ) ) ) r Q Q Q Qh  4 c%jjCJJ	 	d    (3(! ! ! !H S>>>??
 2<5 '8 '8 '8 '8V d<=..000B47	c	#	#s	#	#	### !$ 
 
 
 
 
 
r	   