
    0Vhњ                         d dl Z ddl d dlmZ d dlmZ  G d de      Zd ee j                  j                  dz         z   Z G d	 d
e      ZdZdZeez   Z G d de      Zd Zy)    N   )*)contextmanager	printablec                        e Zd ZddZd Zd Zy)nullcontextNc                     || _         y Nenter_result)selfr   s     =/home/dcms/DCMS/lib/python3.12/site-packages/gast/unparser.py__init__znullcontext.__init__;   s
    (    c                     | j                   S r   r   r   s    r   	__enter__znullcontext.__enter__>   s       r   c                      y r    )r   excinfos     r   __exit__znullcontext.__exit__A   s    r   r   )__name__
__module____qualname__r   r   r   r   r   r   r	   r	   :   s    )!r   r	   1ec                   X    e Zd ZdZdZdZdZdZdZdZ	dZ
d	ZeZd
ZdZdZdZdZdZdZdZdZy)_Precedencez5Precedence table that originated from python grammar.r                        	   
                        N)r   r   r   __doc__TUPLEYIELDTESTORANDNOTCMPEXPRBORBXORBANDSHIFTARITHTERMFACTORPOWERAWAITATOMr   r   r   r   r   I   s_    ?EED	
B
C
C
CD
CDDEEDFEEDr   r   )'")z"""z'''c                       e Zd ZdZddZd Zd Zd ZddZd Z	d	 Z
ed
        Zedd       Zed        Zd Zd Zd Zd Zd Zd Z fdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9d7 Z:d8 Z;d9 Z<d: Z=d; Z>d< Z?e@dfd=ZAe@fd>ZBd? ZCd@ ZDdA ZEdB ZFdC ZGdD ZHdE ZIdF ZJdG ZKdH ZLdI ZMdJ ZNdK ZOdL ZPdM ZQdN ZRdO ZSdP ZTdQ ZUdRdSdTdUdVZVeWj                  eWj                  eWj                  eWj                  dWZZdX Z[dTdUdYdZd[d\d]d^d_d`dadbdcddZ\eWj                  eWj                  eWj                  eWj                  eWj                  eWj                  eWj                  eWj                  eWj                  eWj                  eWj                  eWj                  eWj                  deZd eedf      Zfdg Zgdhdidjdkdldmdndodpdqdr
Zhds ZidtdudvZjeWj                  eWj                  dwZmdx Zndy Zodz Zpd{ Zqd| Zrd} Zsd~ Ztd Zud Zvd Zwd Zxd Zyd Zzd Z{d Z|d Z}d Z~d Zd Zd Zd Zd Zd Z xZS )	_UnparserzMethods in this class recursively traverse an AST and
    output source code for the abstract syntax; original formatting
    is disregarded.Fc                 X    g | _         g | _        i | _        i | _        d| _        || _        y )Nr   )_source_buffer_precedences_type_ignores_indent_avoid_backslashes)r   rL   s     r   r   z_Unparser.__init__j   s/    "4r   c                     t        |      }	  |t        |             |D ]  } |         ||        y# t        $ r Y yw xY w)z7Call f on each item in seq, calling inter() in between.N)iternextStopIteration)r   interfseqxs        r   
interleavez_Unparser.interleaver   sL    3i	d3iL  !  		s   5 	A Ac                      t        |      dk(  r ||d           j                  d       y j                   fd||       y)zTraverse and separate the given *items* with a comma and append it to
        the buffer. If *items* is a single item sequence, a trailing comma
        will be added.r   r   ,c                  &     j                  d      S N, writer   s   r   <lambda>z&_Unparser.items_view.<locals>.<lambda>       DJJt$4 r   N)lenr\   rU   )r   	traverseritemss   `  r   
items_viewz_Unparser.items_view~   s8     u:?eAhJJsOOO4iGr   c                 @    | j                   r| j                  d       yy)z8Adds a newline if it isn't the start of generated source
N)rG   r\   r   s    r   maybe_newlinez_Unparser.maybe_newline   s    <<JJt r   c                 f    | j                          | j                  d| j                  z  |z          y)zXIndent a piece of text and append it, according to the current
        indentation levelz    N)re   r\   rK   r   texts     r   fillz_Unparser.fill   s*     	

6DLL(4/0r   c                 :    | j                   j                  |       y)zAppend a piece of textN)rG   appendrg   s     r   r\   z_Unparser.write   s    D!r   c                 :    | j                   j                  |       y r   )rH   rk   rg   s     r   buffer_writerz_Unparser.buffer_writer   s    D!r   c                 p    dj                  | j                        }| j                  j                          |S )N )joinrH   clearr   values     r   bufferz_Unparser.buffer   s)    %r   c              #      K   | j                  d       |r| j                  |       | xj                  dz  c_        d | xj                  dz  c_        yw)a  A context manager for preparing the source for blocks. It adds
        the character':', increases the indentation on enter and decreases
        the indentation on exit. If *extra* is given, it will be directly
        appended after the colon character.
        :r   N)r\   rK   )r   extras     r   blockz_Unparser.block   sA      	

3JJus   AAc              #   X   K   | j                  |       d | j                  |       yw)zA context manager for preparing the source for expressions. It adds
        *start* to the buffer and enters, after exit it adds *end*.Nr[   )r   startends      r   delimitz_Unparser.delimit   s"     
 	

5

3s   (*c                 >    |r| j                  ||      S t               S r   )r|   r	   )r   rz   r{   	conditions       r   
delimit_ifz_Unparser.delimit_if   s    <<s++= r   c                 L    | j                  dd| j                  |      |kD        S )z,Shortcut to adding precedence related parens())r   get_precedence)r   
precedencenodes      r   require_parensz_Unparser.require_parens   s%    sC)<)<T)BZ)OPPr   c                 V    | j                   j                  |t        j                        S r   )rI   getr   r2   r   r   s     r   r   z_Unparser.get_precedence   s!      $$T;+;+;<<r   c                 0    |D ]  }|| j                   |<    y r   )rI   )r   r   nodesr   s       r   set_precedencez_Unparser.set_precedence   s!     	1D&0Dd#	1r   c                 (   t        |t        t        t        t        f      rt        |j                        dk  ry|j                  d   }t        |t              sy|j                  }t        |t              rt        |j                  t              r|S yy)zIf a docstring node is found in the body of the *node* parameter,
        return that docstring node, None otherwise.

        Logic mirrored from ``_PyAST_GetDocString``.r   Nr   )
isinstanceAsyncFunctionDefFunctionDefClassDefModuler_   bodyExprrs   Constantstrr   s     r   get_raw_docstringz_Unparser.get_raw_docstring   sv    
 #[(FC
^ayy|$%zzdH%*TZZ*EK +F%r   c                     | j                   j                  |j                        xs |j                  }|dj	                  |      S y )Nz # type: {})rJ   r   linenotype_commentformat)r   r   comments      r   get_type_commentz_Unparser.get_type_comment   sC    $$((5J9J9J ''00 r   c                 ~    t        |t              r|D ]  }| j                  |        y t        t        |   |       y r   )r   listtraversesuperrE   visit)r   r   item	__class__s      r   r   z_Unparser.traverse   s9    dD! $d#$ )T(.r   c                 h    g | _         | j                  |       dj                  | j                         S )zOutputs a source code string that, if converted back to an ast
        (using ast.parse) will generate an AST equivalent to *node*ro   )rG   r   rp   r   s     r   r   z_Unparser.visit   s*     dwwt||$$r   c                     | j                  |      }|r0| j                  |       | j                  |j                  dd         y | j                  |j                         y )Nr   )r   _write_docstringr   r   )r   r   	docstrings      r   "_write_docstring_and_traverse_bodyz,_Unparser._write_docstring_and_traverse_body   sI    **40	!!),MM$))AB-(MM$))$r   c                     |j                   D ci c](  }|j                  dj                  |j                        * c}| _        | j                  |       | j                  j                          y c c}w )Nzignore{})type_ignoresr   r   tagrJ   r   rq   )r   r   ignores      r   visit_Modulez_Unparser.visit_Module   sd     ++
 MM:,,VZZ88
 	//5  "
s   -A0c                       j                  dd      5   j                   fd j                  |j                         d d d         j	                  d        j                  |j
                         y # 1 sw Y   6xY w)Nr   r   c                  &     j                  d      S rY   r[   r   s   r   r]   z._Unparser.visit_FunctionType.<locals>.<lambda>      

4( r    -> )r|   rU   r   argtypesr\   returnsr   s   ` r   visit_FunctionTypez_Unparser.visit_FunctionType   s_    \\#s# 	OO($--	
 	

6dll#	 	s   +A44A=c                     | j                          | j                  t        j                  |j                         | j                  |j                         y r   )ri   r   r   r1   rs   r   r   s     r   
visit_Exprz_Unparser.visit_Expr  s5    		K--tzz:djj!r   c                 f   | j                  t        j                  |      5  | j                  t        j                  |j
                  |j                         | j                  |j
                         | j                  d       | j                  |j                         d d d        y # 1 sw Y   y xY w)Nz := )	r   r   r0   r   rA   targetrs   r   r\   r   s     r   visit_NamedExprz_Unparser.visit_NamedExpr  sy      !2!2D9 	& 0 0$++tzzJMM$++&JJvMM$**%		& 	& 	&s   A=B''B0c                 |      j                  d        j                   fd j                  |j                         y )Nzimport c                  &     j                  d      S rY   r[   r   s   r   r]   z(_Unparser.visit_Import.<locals>.<lambda>      

4 0 r   )ri   rU   r   namesr   s   ` r   visit_Importz_Unparser.visit_Import  s(    		)0$--Lr   c                 (     j                  d        j                  d|j                  z         |j                  r j                  |j                          j                  d        j	                   fd j
                  |j                         y )Nzfrom .z import c                  &     j                  d      S rY   r[   r   s   r   r]   z,_Unparser.visit_ImportFrom.<locals>.<lambda>  r   r   )ri   r\   levelmodulerU   r   r   r   s   ` r   visit_ImportFromz_Unparser.visit_ImportFrom  s`    		'

3#$;;JJt{{#

:0$--Lr   c                 
   | j                          |j                  D ]$  }| j                  |       | j                  d       & | j                  |j                         | j                  |      }|r| j                  |       y y )N = )ri   targetsr   r\   rs   r   )r   r   r   r   s       r   visit_Assignz_Unparser.visit_Assign  sl    		ll 	FMM&!JJu	 	djj!,,T2JJ|$ r   c                    | j                          | j                  |j                         | j                  d| j                  |j
                  j                  j                     z   dz          | j                  |j                         y )N z= )	ri   r   r   r\   binopopr   r   rs   r   s     r   visit_AugAssignz_Unparser.visit_AugAssign)  sZ    		dkk"

3DGG$5$5$>$>??$FGdjj!r   c                    | j                          | j                  dd|j                   xr t        |j                  t
                    5  | j                  |j                         d d d        | j                  d       | j                  |j                         |j                  r-| j                  d       | j                  |j                         y y # 1 sw Y   oxY w)Nr   r   : r   )
ri   r   simpler   r   Namer   r\   
annotationrs   r   s     r   visit_AnnAssignz_Unparser.visit_AnnAssign/  s    		__S#4;;'X:dkkSW;XY 	'MM$++&	'

4doo&::JJuMM$**% 		' 	's   CCc                     | j                  d       |j                  r-| j                  d       | j                  |j                         y y )Nreturnr   )ri   rs   r\   r   r   s     r   visit_Returnz_Unparser.visit_Return9  s5    		(::JJsOMM$**% r   c                 &    | j                  d       y )Npassri   r   s     r   
visit_Passz_Unparser.visit_Pass?  s    		&r   c                 &    | j                  d       y )Nbreakr   r   s     r   visit_Breakz_Unparser.visit_BreakB  s    		'r   c                 &    | j                  d       y )Ncontinuer   r   s     r   visit_Continuez_Unparser.visit_ContinueE  s    		*r   c                 |      j                  d        j                   fd j                  |j                         y )Nzdel c                  &     j                  d      S rY   r[   r   s   r   r]   z(_Unparser.visit_Delete.<locals>.<lambda>J  r   r   )ri   rU   r   r   r   s   ` r   visit_Deletez_Unparser.visit_DeleteH  s(    		&0$--Nr   c                     | j                  d       | j                  |j                         |j                  r-| j	                  d       | j                  |j                         y y )Nzassert rZ   )ri   r   testmsgr\   r   s     r   visit_Assertz_Unparser.visit_AssertL  sF    		)dii 88JJtMM$((# r   c                 |      j                  d        j                   fd j                  |j                         y )Nzglobal c                  &     j                  d      S rY   r[   r   s   r   r]   z(_Unparser.visit_Global.<locals>.<lambda>U  r   r   ri   rU   r\   r   r   s   ` r   visit_Globalz_Unparser.visit_GlobalS  s(    		)0$**djjIr   c                 |      j                  d        j                   fd j                  |j                         y )Nz	nonlocal c                  &     j                  d      S rY   r[   r   s   r   r]   z*_Unparser.visit_Nonlocal.<locals>.<lambda>Y  r   r   r   r   s   ` r   visit_Nonlocalz_Unparser.visit_NonlocalW  s(    		+0$**djjIr   c                 T   | j                  t        j                  |      5  | j                  d       |j                  rV| j                  d       | j                  t        j                  |j                         | j                  |j                         d d d        y # 1 sw Y   y xY w)Nawaitr   )r   r   r@   r\   rs   r   rA   r   r   s     r   visit_Awaitz_Unparser.visit_Await[  u      !2!2D9 	*JJwzz

3##K$4$4djjAdjj)	* 	* 	*   A4BB'c                 T   | j                  t        j                  |      5  | j                  d       |j                  rV| j                  d       | j                  t        j                  |j                         | j                  |j                         d d d        y # 1 sw Y   y xY w)Nyieldr   )r   r   r1   r\   rs   r   rA   r   r   s     r   visit_Yieldz_Unparser.visit_Yieldc  r   r   c                 H   | j                  t        j                  |      5  | j                  d       |j                  st        d      | j                  t        j                  |j                         | j                  |j                         d d d        y # 1 sw Y   y xY w)Nzyield from z-Node can't be used without a value attribute.)	r   r   r1   r\   rs   
ValueErrorr   rA   r   r   s     r   visit_YieldFromz_Unparser.visit_YieldFromk  sv      !2!2D9 	&JJ}%:: !PQQ 0 0$**=MM$**%	& 	& 	&s   A.BB!c                 8   | j                  d       |j                  s|j                  rt        d      y | j	                  d       | j                  |j                         |j                  r-| j	                  d       | j                  |j                         y y )Nraisez*Node can't use cause without an exception.r   z from )ri   exccauser   r\   r   r   s     r   visit_Raisez_Unparser.visit_Raises  sn    		'xxzz !MNN

3dhh::JJx MM$**% r   c                 `   | j                  d       | j                         5  | j                  |j                         d d d        |j                  D ]  }| j                  |        |j
                  rE| j                  d       | j                         5  | j                  |j
                         d d d        |j                  rF| j                  d       | j                         5  | j                  |j                         d d d        y y # 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   y xY w)Ntryelsefinally)ri   rx   r   r   handlersorelse	finalbody)r   r   exs      r   	visit_Tryz_Unparser.visit_Try  s    		%ZZ\ 	%MM$))$	%-- 	BMM"	;;IIf +dkk*+>>IIi  .dnn-. . 	% 	%+ +. .s#   DD&D$DD!$D-c                    | j                  d       |j                  r,| j                  d       | j                  |j                         |j                  r6| j                  d       | j                  |j                  j
                         | j                         5  | j                  |j                         d d d        y # 1 sw Y   y xY w)Nexceptr    as )ri   typer\   r   nameidrx   r   r   s     r   visit_ExceptHandlerz_Unparser.visit_ExceptHandler  s    		(99JJsOMM$))$99JJvJJtyy||$ZZ\ 	%MM$))$	% 	% 	%s   CC
c                    | j                          |j                  D ]$  }| j                  d       | j                  |       & | j                  d|j                  z          t        |d      r| j                  |j                         | j                  dd|j                  xs |j                        5  d}|j                  D ])  }|r| j                  d       nd	}| j                  |       + |j                  D ])  }|r| j                  d       nd	}| j                  |       + 	 d d d        | j                         5  | j                  |       d d d        y # 1 sw Y   4xY w# 1 sw Y   y xY w)
N@zclass type_paramsr   r   )r~   FrZ   T)re   decorator_listri   r   r  hasattr_type_params_helperr  r   baseskeywordsr\   rx   r   )r   r   decocommaes        r   visit_ClassDefz_Unparser.visit_ClassDef  sC   '' 	 DIIcNMM$	  			(TYY&'4'$$T%5%56__S#4::3N_O 	!EZZ !JJt$ Ea ! ]] !JJt$ Ea !	! ZZ\ 	:33D9	: 	:	! 	!	: 	:s   5A3EE(E%(E1c                 (    | j                  |d       y )Ndef_function_helperr   s     r   visit_FunctionDefz_Unparser.visit_FunctionDef  s    dE*r   c                 (    | j                  |d       y )Nz	async defr  r   s     r   visit_AsyncFunctionDefz _Unparser.visit_AsyncFunctionDef  s    dK0r   c                    | j                          |j                  D ]$  }| j                  d       | j                  |       & |dz   |j                  z   }| j                  |       t        |d      r| j                  |j                         | j                  dd      5  | j                  |j                         d d d        |j                  r,| j                  d       | j                  |j                         | j                  | j                  |            5  | j                  |       d d d        y # 1 sw Y   }xY w# 1 sw Y   y xY w)Nr  r   r  r   r   r   rw   )re   r  ri   r   r  r  r  r  r|   argsr   r\   rx   r   r   )r   r   fill_suffixr  def_strs        r   r  z_Unparser._function_helper  s   '' 	 DIIcNMM$	  #dii/		'4'$$T%5%56\\#s# 	%MM$))$	%<<JJvMM$,,'ZZd33D9Z: 	:33D9	: 	:	% 	%
	: 	:s    D8E8EEc                      |Kt        |      dkD  r< j                  dd      5   j                   fd j                  |       d d d        y y y # 1 sw Y   y xY w)Nr   []c                  &     j                  d      S rY   r[   r   s   r   r]   z/_Unparser._type_params_helper.<locals>.<lambda>      

4(8 r   )r_   r|   rU   r   )r   r  s   ` r   r  z_Unparser._type_params_helper  s_    "s;'7!';c3' V 8$--UV V (<"V Vs   !AAc                     | j                  |j                         |j                  r-| j                  d       | j                  |j                         y y Nr   )r\   r  boundr   r   s     r   visit_TypeVarz_Unparser.visit_TypeVar  s:    

499::JJtMM$**% r   c                 @    | j                  d|j                  z          y Nr   r\   r  r   s     r   visit_TypeVarTuplez_Unparser.visit_TypeVarTuple  s    

3?#r   c                 @    | j                  d|j                  z          y N**r3  r   s     r   visit_ParamSpecz_Unparser.visit_ParamSpec  s    

4$))#$r   c                     | j                  d       | j                  |j                         | j                  |j                         | j                  d       | j                  |j                         y )Nztype r   )ri   r   r  r  r  r\   rs   r   s     r   visit_TypeAliasz_Unparser.visit_TypeAlias  sN    		'dii   !1!12

5djj!r   c                 (    | j                  d|       y )Nzfor _for_helperr   s     r   	visit_Forz_Unparser.visit_For  s    &r   c                 (    | j                  d|       y )Nz
async for r<  r   s     r   visit_AsyncForz_Unparser.visit_AsyncFor  s    t,r   c                    | j                  |       | j                  |j                         | j                  d       | j                  |j                         | j                  | j                  |            5  | j                  |j                         d d d        |j                  rF| j                  d       | j                         5  | j                  |j                         d d d        y y # 1 sw Y   \xY w# 1 sw Y   y xY w)N in r$  r  )	ri   r   r   r\   rN   rx   r   r   r  )r   ri   r   s      r   r=  z_Unparser._for_helper  s    		$dkk"

6dii ZZd33D9Z: 	%MM$))$	%;;IIf +dkk*+ + 	% 	%+ +s   :C1C=1C:=Dc                    | j                  d       | j                  |j                         | j                         5  | j                  |j                         d d d        |j
                  rt        |j
                        dk(  rt        |j
                  d   t              r|j
                  d   }| j                  d       | j                  |j                         | j                         5  | j                  |j                         d d d        |j
                  r6t        |j
                        dk(  rt        |j
                  d   t              r|j
                  rF| j                  d       | j                         5  | j                  |j
                         d d d        y y # 1 sw Y   OxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nzif r   r   zelif r  )	ri   r   r   rx   r   r  r_   r   Ifr   s     r   visit_Ifz_Unparser.visit_If  sF   		%dii ZZ\ 	%MM$))$	% kkc$++.!3
4;;q>SU8V;;q>DIIgMM$))$ )dii()	 kkc$++.!3
4;;q>SU8V ;;IIf +dkk*+ + 	% 	%) )
+ +s#   F&-F3 F?&F03F<?Gc                    | j                  d       | j                  |j                         | j                         5  | j                  |j                         d d d        |j
                  rF| j                  d       | j                         5  | j                  |j
                         d d d        y y # 1 sw Y   \xY w# 1 sw Y   y xY w)Nzwhile r  )ri   r   r   rx   r   r  r   s     r   visit_Whilez_Unparser.visit_While  s    		(dii ZZ\ 	%MM$))$	%;;IIf +dkk*+ + 	% 	%+ +s   B4C 4B= C	c                      j                  d        j                   fd j                  |j                          j	                   j                  |            5   j                  |j                         d d d        y # 1 sw Y   y xY w)Nzwith c                  &     j                  d      S rY   r[   r   s   r   r]   z&_Unparser.visit_With.<locals>.<lambda>  r   r   r$  ri   rU   r   ra   rx   r   r   r   s   ` r   
visit_Withz_Unparser.visit_With  sf    		'0$--LZZd33D9Z: 	%MM$))$	% 	% 	%   BBc                      j                  d        j                   fd j                  |j                          j	                   j                  |            5   j                  |j                         d d d        y # 1 sw Y   y xY w)Nzasync with c                  &     j                  d      S rY   r[   r   s   r   r]   z+_Unparser.visit_AsyncWith.<locals>.<lambda>  r   r   r$  rJ  r   s   ` r   visit_AsyncWithz_Unparser.visit_AsyncWith  sf    		- 0$--LZZd33D9Z: 	%MM$))$	% 	% 	%rL  c                    fd}dj                  t        |            |}dv r|D cg c]  }|t        v s| }}|D cg c]	  }|vs| }}|s+t              t	        fd|D        d         }dd |gfS rD|j                  fd	       |d   d   d   k(  r!t        |d         d
k(  sJ dd dz   d   z   |fS c c}w c c}w )zHelper for writing string literals, minimizing escapes.
        Returns the tuple (string literal to write, possible quote types).
        c                     s| dv r| S | dk(  st        d | D              s | j                  d      j                  d      S | S )Nz
	\c              3   ,   K   | ]  }|t         v   y wr   r   ).0ccs     r   	<genexpr>zE_Unparser._str_literal_helper.<locals>.escape_char.<locals>.<genexpr>(  s     #@B)O#@s   unicode_escapeascii)allencodedecode)cescape_special_whitespaces    r   escape_charz2_Unparser._str_literal_helper.<locals>.escape_char"  sG     -fDy#@a#@ @xx 0188AAHr   ro   rd   c              3   2   K   | ]  }d    |v s|  yw)r   Nr   )rT  qstrings     r   rV  z0_Unparser._str_literal_helper.<locals>.<genexpr>6  s     CF1IN!Cs   r   r   c                     | d   d   k(  S )Nr   rb  r   )r`  escaped_strings    r   r]   z/_Unparser._str_literal_helper.<locals>.<lambda>:  s    qt~b7I/I r   )keyr    NrR  )rp   map_MULTI_QUOTESreprrO   sortr_   )	r   ra  quote_typesr]  r^  possible_quotesr`  quoterd  s	    ` `    @r   _str_literal_helperz_Unparser._str_literal_helper  s   	 [&!9:%>!*9PQQ-=OqPOP&5Q.9P1QQ &\FC[CVAYOE!B<%((  %I J q!!$r(::?1-.!333!/!4t!;nR>P!P..# QQs   CC	CCc                 |    | j                  ||      \  }}|d   }| j                  dj                  ||             y)zKWrite string literal value with a best effort attempt to avoid backslashes.rj  r   	{0}{1}{0}N)rm  r\   r   )r   ra  rj  
quote_types       r   _write_str_avoiding_backslashesz)_Unparser._write_str_avoiding_backslashesB  s>    "66v;6W ^


;%%j&9:r   c                 v   | j                  d       | j                  r8| j                  || j                         | j	                  | j
                         y g }|j                  D ]b  }t        | dt        |      j                  z         } ||| j                         |j                  | j
                  t        |t              f       d g }t        }|D ]-  \  }}| j                  |||      \  }}|j                  |       / dj                  |      }|d   }| j                  dj!                  ||             y )NrR   	_fstring_)rj  r]  ro   r   rp  )r\   rL   _fstring_JoinedStrrm   rr  rt   valuesgetattrr  r   rk   r   r   _ALL_QUOTESrm  rp   r   )	r   r   rt   rs   meth
new_bufferrj  is_constantrq  s	            r   visit_JoinedStrz_Unparser.visit_JoinedStrH  s(   

3""##D$*<*<=00= [[ 	FE4tE{/C/C!CDD**+MM4;;
5((CDE	F 
!"( 	%E;!%!9!9;*5 ": "E; e$	% 
# ^


;%%j%89r   c                     | j                  d       | j                  || j                         | j                  | j                         y )NrR   )r\   _fstring_FormattedValuerm   rr  rt   r   s     r   visit_FormattedValuez_Unparser.visit_FormattedValueg  s5    

3$$T4+=+=>,,T[[9r   c                 |    |j                   D ]-  }t        | dt        |      j                  z         } |||       / y )Nrt  )rv  rw  r  r   )r   r   r\   rs   ry  s        r   ru  z_Unparser._fstring_JoinedStrl  s:    [[ 	E4tE{/C/C!CDD	r   c                     t        |j                  t              st        d      |j                  j	                  dd      j	                  dd      } ||       y )Nz.Constants inside JoinedStr should be a string.{z{{}z}})r   rs   r   r   replace)r   r   r\   rs   s       r   _fstring_Constantz_Unparser._fstring_Constantq  sF    $**c*MNN

""3-55c4@er   c                 r    |d        t        |       d      }|j                  t        j                  dz   |j                         |j                  |j                        }|j                  d      r |d       d|v rt        d       ||       |j                  dk7  r;t        |j                        }|d	vrt        d
       |dj                  |             |j                  rG |d       t        | dt        |j                        j                  z         } ||j                  |        |d       y )Nr  T)rL   r   r   rR  z5Unable to avoid backslash in f-string expression partrb  srazUnknown f-string conversion.z!{}rv   rt  r  )r  r   r   r2   rs   r   
startswithr   
conversionchrr   format_specrw  r   )r   r   r\   unparserexprr  ry  s          r   r~  z!_Unparser._fstring_FormattedValuew  s    c
4:6 0 01 4djjA~~djj)??3#J4<TUUd??b T__-J& !?@@%,,z*+#J4tD4D4D/E/N/N!NOD!!5)c
r   c                 :    | j                  |j                         y r   )r\   r  r   s     r   
visit_Namez_Unparser.visit_Name  s    

477r   c                     | j                          |j                  dk(  r| j                  d       | j                  |j                  t
               y )Nuro  )ri   kindr\   rr  rs   rg  r   s     r   r   z_Unparser._write_docstring  s9    		99JJsO,,TZZ],Sr   c                 d   t        |t        t        f      rR| j                  t	        |      j                  dt              j                  ddj                  t                           y | j                  r"t        |t              r| j                  |       y | j                  t	        |             y )Ninfnanz	({0}-{0}))r   floatcomplexr\   rh  r  _INFSTRr   rL   r   rr  rr   s     r   _write_constantz_Unparser._write_constant  s{    eeW-. JJU( 2 27 ;<
 $$E3)?007JJtE{#r   c                 n   |j                   }t        |t              r8| j                  dd      5  | j	                  | j
                  |       d d d        y |t        u r| j                  d       y |j                  dk(  r| j                  d       | j                  |j                          y # 1 sw Y   y xY w)Nr   r   ...r  )	rs   r   tupler|   rb   r  Ellipsisr\   r  )r   r   rs   s      r   visit_Constantz_Unparser.visit_Constant  s    

eU#c3' = 4 4e<= =hJJuyyC

3  ,= =s   B++B4c                       j                  dd      5   j                   fd j                  |j                         d d d        y # 1 sw Y   y xY w)Nr)  r*  c                  &     j                  d      S rY   r[   r   s   r   r]   z&_Unparser.visit_List.<locals>.<lambda>  r^   r   )r|   rU   r   eltsr   s   ` r   
visit_Listz_Unparser.visit_List  sC    \\#s# 	POO4dmmTYYO	P 	P 	P   +AAc                     | j                  dd      5  | j                  |j                         |j                  D ]  }| j                  |        	 d d d        y # 1 sw Y   y xY w)Nr)  r*  r|   r   elt
generatorsr   r   gens      r   visit_ListCompz_Unparser.visit_ListComp  T    \\#s# 	#MM$((# #c"#	# 	# 	#   >AA$c                     | j                  dd      5  | j                  |j                         |j                  D ]  }| j                  |        	 d d d        y # 1 sw Y   y xY wNr   r   r  r  s      r   visit_GeneratorExpz_Unparser.visit_GeneratorExp  r  r  c                     | j                  dd      5  | j                  |j                         |j                  D ]  }| j                  |        	 d d d        y # 1 sw Y   y xY w)Nr  r  r  r  s      r   visit_SetCompz_Unparser.visit_SetComp  r  r  c                 &   | j                  dd      5  | j                  |j                         | j                  d       | j                  |j                         |j
                  D ]  }| j                  |        	 d d d        y # 1 sw Y   y xY w)Nr  r  r   )r|   r   re  r\   rs   r  r  s      r   visit_DictCompz_Unparser.visit_DictComp  sp    \\#s# 	#MM$((#JJtMM$**% #c"#		# 	# 	#s   A*BBc                    |j                   r| j                  d       n| j                  d       | j                  t        j                  |j
                         | j                  |j
                         | j                  d        | j                  t        j                  dz   |j                  g|j                    | j                  |j                         |j                  D ]$  }| j                  d       | j                  |       & y )Nz async for z for rB  r    if )
is_asyncr\   r   r   r0   r   r   r2   rN   ifs)r   r   	if_clauses      r   visit_comprehensionz_Unparser.visit_comprehension  s    ==JJ}%JJwK--t{{;dkk"

6K,,q0$))GdhhGdii  	%IJJvMM)$	%r   c                    | j                  t        j                  |      5  | j                  t        j                  dz   |j                  |j
                         | j                  |j                         | j                  d       | j                  |j
                         | j                  d       | j                  t        j                  |j                         | j                  |j                         d d d        y # 1 sw Y   y xY w)Nr   r  z else )	r   r   r2   r   r   r   r   r\   r  r   s     r   visit_IfExpz_Unparser.visit_IfExp  s      !1!148 	' 0 01 4diiKMM$))$JJvMM$))$JJx  0 0$++>MM$++&	' 	' 	's   CD  D	c                      |j                   rF j                  dd      5   j                   fd j                  |j                          d d d        y  j	                  d       y # 1 sw Y   y xY w)Nr  r  c                  &     j                  d      S rY   r[   r   s   r   r]   z%_Unparser.visit_Set.<locals>.<lambda>  r,  r   z{*()})r  r|   rU   r   r\   r   s   ` r   	visit_Setz_Unparser.visit_Set  s^    99c3' T 8$--ST T
 JJwT Ts   +A&&A/c           	            fd fd} j                  dd      5   j                   fd|t        |j                  |j                               d d d        y # 1 sw Y   y xY w)Nc                 l    j                  |        j                  d       j                  |       y r.  r   r\   )kvr   s     r   write_key_value_pairz2_Unparser.visit_Dict.<locals>.write_key_value_pair  s'    MM!JJtMM!r   c                     | \  }}|Cj                  d       j                  t        j                  |       j	                  |       y  ||       y r6  )r\   r   r   r7   r   )r   r  r  r   r  s      r   
write_itemz(_Unparser.visit_Dict.<locals>.write_item  sK    DAqy 

4 ##K$4$4a8a $Q*r   r  r  c                  &     j                  d      S rY   r[   r   s   r   r]   z&_Unparser.visit_Dict.<locals>.<lambda>  r   r   )r|   rU   zipkeysrv  )r   r   r  r  s   `  @r   
visit_Dictz_Unparser.visit_Dict  sT    	
		+ \\#s# 	OO(*c$))T[[6Q	 	 	s   5AA'c                     | j                  dd      5  | j                  | j                  |j                         d d d        y # 1 sw Y   y xY wr  )r|   rb   r   r  r   s     r   visit_Tuplez_Unparser.visit_Tuple  s;    \\#s# 	6OODMM4995	6 	6 	6s   'AA~not+-)InvertNotUAddUSub)r  r  r  r  c                    | j                   |j                  j                  j                     }| j                  |   }| j                  ||      5  | j                  |       |t        j                  ur| j                  d       | j                  ||j                         | j                  |j                         d d d        y # 1 sw Y   y xY w)Nr   )unopr   r   r   unop_precedencer   r\   r   r>   r   operandr   )r   r   operatoroperator_precedences       r   visit_UnaryOpz_Unparser.visit_UnaryOp  s    99TWW..778"228<  !4d; 	(JJx  #+*<*<<

3 3T\\BMM$,,'	( 	( 	(s   A,CCr   r  /%<<>>|^&//r7  )AddSubMultMatMultDivModLShiftRShiftBitOrBitXorBitAndFloorDivPow)r  r  r   r  r  r  r  r  r  r  r  r  r7  )r7  c                     | j                   |j                  j                  j                     }| j                  |   }| j                  ||      5  || j                  v r|dz   }|}n|}|dz   }| j                  ||j                         | j                  |j                         | j                  dj                  |             | j                  ||j                         | j                  |j                         d d d        y # 1 sw Y   y xY w)Nr    {} )r   r   r   r   binop_precedencer   binop_rassocr   leftr   r\   r   right)r   r   r  r  left_precedenceright_precedences         r   visit_BinOpz_Unparser.visit_BinOp=  s    ::dgg//889"33H=  !4d; 	&4,,,"5"9#6 "5#6#: ;MM$))$JJv}}X./ 0$**=MM$**%	& 	& 	&s   B,DDz==z!=<z<=>z>=iszis notinznot in)
EqNotEqLtLtEGtGtEIsIsNotInNotInc                    | j                  t        j                  |      5   | j                  t        j                  dz   |j                  g|j
                    | j                  |j                         t        |j                  |j
                        D ]N  \  }}| j                  d| j                  |j                  j                     z   dz          | j                  |       P 	 d d d        y # 1 sw Y   y xY w)Nr   r   )r   r   r6   r   r  comparatorsr   r  opsr\   cmpopsr   r   )r   r   or  s       r   visit_Comparez_Unparser.visit_Compare[  s      $7 	!D! 3TYYRAQAQRMM$))$DHHd&6&67 !1

3Q[[-A-A!BBSHIa !	! 	! 	!s   CC11C:andor)AndOr)r  r  c                 H     j                   |j                  j                  j                     } j                  |   g fd} j                  d   |      5  dj                  |       j                   fd||j                         d d d        y # 1 sw Y   y xY w)Nc                 l    dxx   dz  cc<   j                  d   |        j                  |        y )Nr   r   )r   r   )r   r  r   s    r   increasing_level_traversez9_Unparser.visit_BoolOp.<locals>.increasing_level_traversej  s5    "a'" 3A 6=MM$r   r   r  c                  &    j                         S r   r[   )sr   s   r   r]   z(_Unparser.visit_BoolOp.<locals>.<lambda>q  s    DJJqM r   )	boolopsr   r   r   boolop_precedencer   r   rU   rv  )r   r   r  r  r  r  s   `   @@r   visit_BoolOpz_Unparser.visit_BoolOpf  s    << 1 1 : :;#55h?@	 
   !4Q!7> 	[h'AOO13LdkkZ	[ 	[ 	[s   3BB!c                    | j                  t        j                  |j                         | j	                  |j                         t        |j                  t              r5t        |j                  j                  t              r| j                  d       | j                  d       | j                  |j                         y )Nr   r   )
r   r   rA   rs   r   r   r   intr\   attrr   s     r   visit_Attributez_Unparser.visit_Attributes  su    K,,djj9djj! djj(+
4::;K;KS0QJJsO

3

499r   c                    | j                  t        j                  |j                         | j	                  |j                         | j                  dd      5  d}|j                  D ])  }|r| j                  d       nd}| j	                  |       + |j                  D ])  }|r| j                  d       nd}| j	                  |       + 	 d d d        y # 1 sw Y   y xY w)Nr   r   FrZ   T)	r   r   rA   funcr   r|   r%  r\   r  )r   r   r  r  s       r   
visit_Callz_Unparser.visit_Call~  s    K,,dii8dii \\#s# 	!EYY !JJt$ Ea ! ]] !JJt$ Ea !	! 	! 	!s   A3CCc                    d }| j                  t        j                  |j                         | j	                  |j                         | j                  dd      5   ||j                        r1| j                  | j                  |j                  j                         n| j	                  |j                         d d d        y # 1 sw Y   y xY w)Nc                 |    t        | t              xr+ | j                  xr t        d | j                  D               S )Nc              3   <   K   | ]  }t        |t                y wr   )r   Starred)rT  r  s     r   rV  zE_Unparser.visit_Subscript.<locals>.is_simple_tuple.<locals>.<genexpr>  s     QJsG4Qs   )r   Tupler  any)slice_values    r   is_simple_tuplez2_Unparser.visit_Subscript.<locals>.is_simple_tuple  s?    
 ;. R$$RQ@P@PQQQr   r)  r*  )	r   r   rA   rs   r   r|   slicerb   r  )r   r   r(  s      r   visit_Subscriptz_Unparser.visit_Subscript  s    	 	K,,djj9djj!\\#s# 	*tzz*tzz?djj)		* 	* 	*s   ACCc                     | j                  d       | j                  t        j                  |j                         | j                  |j                         y r2  )r\   r   r   r7   rs   r   r   s     r   visit_Starredz_Unparser.visit_Starred  s7    

3K,,djj9djj!r   c                 &    | j                  d       y )Nr  r[   r   s     r   visit_Ellipsisz_Unparser.visit_Ellipsis  s    

5r   c                 4   |j                   r| j                  |j                          | j                  d       |j                  r| j                  |j                         |j                  r-| j                  d       | j                  |j                         y y )Nrv   )lowerr   r\   upperstepr   s     r   visit_Slicez_Unparser.visit_Slice  sb    ::MM$**%

3::MM$**%99JJsOMM$))$ r   c                     | j                  d       | j                  |j                         | j                         5  |j                  D ]  }| j                  |        	 d d d        y # 1 sw Y   y xY w)Nzmatch )ri   r   subjectrx   cases)r   r   cases      r   visit_Matchz_Unparser.visit_Match  s[    		(dll#ZZ\ 	$

 $d#$	$ 	$ 	$s   #A**A3c                     | j                  |j                  j                         |j                  r-| j                  d       | j	                  |j                         y y r.  )r\   argr  r   r   r   s     r   	visit_argz_Unparser.visit_arg  s>    

488;;??JJtMM$//* r   c                 l   d}|j                   |j                  z   }d gt        |      t        |j                        z
  z  |j                  z   }t	        t        ||      d      D ]  \  }}|\  }}|rd}n| j                  d       | j                  |       |r"| j                  d       | j                  |       |t        |j                         k(  so| j                  d        |j                  s|j                  r|rd}n| j                  d       | j                  d       |j                  rq| j                  |j                  j                         |j                  j                  r6| j                  d       | j                  |j                  j                         |j                  rot        |j                  |j                        D ]L  \  }}| j                  d       | j                  |       |s+| j                  d       | j                  |       N |j                  r|rd}n| j                  d       | j                  d	|j                  j                  z          |j                  j                  r7| j                  d       | j                  |j                  j                         y y y )
NTr   FrZ   =z, /r   r   r7  )posonlyargsr%  r_   defaults	enumerater  r\   r   vararg
kwonlyargsr  r   kw_defaultskwarg)	r   r   firstall_argsr?  indexelementsads	            r   visit_argumentsz_Unparser.visit_arguments  s   ##dii/6S]S-??@4==P(Xx)@!D 	"OE8DAq

4 MM!

3a D,,--

5!	" ;;$//

4 JJsO{{

4;;>>*;;))JJt$MM$++"8"89 ??DOOT-=-=> %1

4 a JJsOMM!$% ::

4 JJtdjjmm+,zz$$

4 djj334 % r   c                     |j                   | j                  d       n,| j                  |j                          | j                  d       | j                  |j                         y )Nr7  r=  )r:  r\   r   rs   r   s     r   visit_keywordz_Unparser.visit_keyword  sC    88JJtJJtxx JJsOdjj!r   c                 r   | j                  t        j                  |      5  | j                  d       | j	                  |j
                         | j                  d       | j                  t        j                  |j                         | j	                  |j                         d d d        y # 1 sw Y   y xY w)Nzlambda r   )r   r   r2   r\   r   r%  r   r   r   s     r   visit_Lambdaz_Unparser.visit_Lambda  s      !1!148 	%JJy!MM$))$JJt 0 0$))<MM$))$	% 	% 	%s   BB--B6c                     | j                  |j                         |j                  r| j                  d|j                  z          y y Nr  )r\   r  asnamer   s     r   visit_aliasz_Unparser.visit_alias  s3    

499;;JJv+, r   c                     | j                  |j                         |j                  r-| j                  d       | j                  |j                         y y rQ  )r   context_exproptional_varsr\   r   s     r   visit_withitemz_Unparser.visit_withitem
  s@    d''(JJvMM$,,- r   c                 L   | j                  d       | j                  |j                         |j                  r,| j	                  d       | j                  |j                         | j                         5  | j                  |j                         d d d        y # 1 sw Y   y xY w)Nzcase r  )ri   r   patternguardr\   rx   r   r   s     r   visit_match_casez_Unparser.visit_match_case  so    		'dll#::JJvMM$**%ZZ\ 	%MM$))$	% 	% 	%s   5BB#c                 :    | j                  |j                         y r   )r   rs   r   s     r   visit_MatchValuez_Unparser.visit_MatchValue  s    djj!r   c                 :    | j                  |j                         y r   )r  rs   r   s     r   visit_MatchSingletonz_Unparser.visit_MatchSingleton  s    TZZ(r   c                       j                  dd      5   j                   fd j                  |j                         d d d        y # 1 sw Y   y xY w)Nr)  r*  c                  &     j                  d      S rY   r[   r   s   r   r]   z/_Unparser.visit_MatchSequence.<locals>.<lambda>"  r   r   )r|   rU   r   patternsr   s   ` r   visit_MatchSequencez_Unparser.visit_MatchSequence  sA    \\#s# 	OO($--	 	 	r  c                 d    |j                   }|d}| j                  dj                  |             y )N_z*{})r  r\   r   )r   r   r  s      r   visit_MatchStarz_Unparser.visit_MatchStar%  s*    yy<D

5<<%&r   c           
      P     fd} j                  dd      5  |j                  } j                   fd|t        ||j                  d             |j
                  }|3|r j                  d        j                  dj                  |             d d d        y # 1 sw Y   y xY w)	Nc                 v    | \  }}j                  |       j                  d       j                  |       y r.  r  )pairr  pr   s      r   write_key_pattern_pairz<_Unparser.visit_MatchMapping.<locals>.write_key_pattern_pair,  s0    DAqMM!JJtMM!r   r  r  c                  &     j                  d      S rY   r[   r   s   r   r]   z._Unparser.visit_MatchMapping.<locals>.<lambda>5  r   r   TstrictrZ   z**{})r|   r  rU   r  rb  restr\   r   )r   r   rk  r  ro  s   `    r   visit_MatchMappingz_Unparser.visit_MatchMapping+  s    	 \\#s# 	099DOO(&D$--5
 99DJJt$

6==./	0 	0 	0s   A:BB%c           
           j                  t        j                  |j                          j	                  |j                          j                  dd      5  |j                  } j                   fd j                  |       |j                  }|rD fd}|r j                  d        j                   fd|t        ||j                  d             d d d        y # 1 sw Y   y xY w)	Nr   r   c                  &     j                  d      S rY   r[   r   s   r   r]   z,_Unparser.visit_MatchClass.<locals>.<lambda>E  r   r   c                 r    | \  }}j                  dj                  |             j                  |       y )Nz{}=)r\   r   r   )ri  r  rY  r   s      r   write_attr_patternz6_Unparser.visit_MatchClass.<locals>.write_attr_patternI  s-    $(MD'JJu||D12MM'*r   rZ   c                  &     j                  d      S rY   r[   r   s   r   r]   z,_Unparser.visit_MatchClass.<locals>.<lambda>Q  s    DJJt, r   Trm  )r   r   rA   clsr   r|   rb  rU   	kwd_attrsr\   r  kwd_patterns)r   r   rb  attrsrt  s   `    r   visit_MatchClassz_Unparser.visit_MatchClass?  s    K,,dhh7dhh\\#s# 	}}HOO($-- NNE+
 JJt$,&t00>	 	 	s   A?C!!C*c                    |j                   }|j                  }|| j                  d       y || j                  |j                          y | j                  t        j
                  |      5  | j                  t        j                  |j                         | j                  |j                         | j                  dj                  |j                                d d d        y # 1 sw Y   y xY w)Nre  z as {})
r  rY  r\   r   r   r2   r   r8   r   r   )r   r   r  rY  s       r   visit_MatchAsz_Unparser.visit_MatchAsV  s    yy,,<JJsO_JJtyy!$$[%5%5t< 7##KOOT\\Bdll+

8??499567 7 7s   +A0C$$C-c                       j                  t        j                  |      5    j                  t        j                  dz   g|j                     j                   fd j                  |j                         d d d        y # 1 sw Y   y xY w)Nr   c                  &     j                  d      S )Nz | r[   r   s   r   r]   z)_Unparser.visit_MatchOr.<locals>.<lambda>f  s    DJJu$5 r   )r   r   r8   r   rb  rU   r   r   s   ` r   visit_MatchOrz_Unparser.visit_MatchOrc  sk      $7 	UD! 3DdmmDOO5t}}dmmT	U 	U 	Us   ABB)F)ro   r   )r   r   r   r/   r   rU   rb   re   ri   r\   rm   propertyrt   r   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r"  r  r  r0  r4  r8  r:  r>  r@  r=  rE  rG  rK  rO  rx  rm  rr  r|  r  ru  r  r~  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r5   r>   r  r  r   r<   r=   r;   r8   r9   r:   r?   r  	frozensetr  r  r  r  r  r4   r3   r  r  r  r   r*  r,  r.  r3  r8  r;  rK  rM  rO  rS  rW  r[  r]  r_  rc  rf  rp  rz  r|  r  __classcell__)r   s   @r   rE   rE   e   s   5
H
1""  
    !Q=1 1
/%%#$"
&MM%"&&O$JJ**&
&.	%:4+1:"V
&$%"'-
++$+%% #.$/L CN ;:>:

*T$
-P####%' ,6 %cBD	O
( E" __  W%L&$ F! 4(G +{~~F[	!$*&"
%$+15f"%-
.%")'0(.7Ur   rE   c                 8    t               }|j                  |       S r   )rE   r   )ast_objr  s     r   unparser  h  s    {H>>'""r   )sysro   
contextlibr   ra  r   objectr	   rh  
float_info
max_10_expr  r   _SINGLE_QUOTESrg  rx  NodeVisitorrE   r  r   r   r   <module>r     sx   h   % &  cnn//!34
4& 0 },AU AUF #r   