python (3.11.7)

(root)/
lib/
python3.11/
__pycache__/
ast.cpython-311.opt-1.pyc

edZddlZddlTddlmZmZddlmZmZm	Z	dLddd	d
Z
dZdMdd
dZdZ
dZdNdZdZdZdOdZdZdZdddZdZGddeZGddeZeeds(d Zd!Zeeee_eeee_ Gd"d#e!Z"d$Z#Gd%d&ee"'Z$Gd(d)ee"'Z%Gd*d+ee"'Z&Gd,d-ee"'Z'Gd.d/ee"'Z(e$e)e*e+fe%e,fe&e-fe'e!de.fe(e!d0fiZ/e$e.fiZ0e.d-e!dd-e)d&e*d&e+d&e,d)e-d+e!d0d/iZ1Gd1d2e2Z3Gd3d4e3Z4Gd5d6e3Z5ee6d7sd8Z7d9Z8ee7e8e6_9Gd:d;e:Z;Gd<d=e<Z=Gd>d?e<Z>Gd@dAe<Z?dBe@ejAjBdzzZCe	eGdCdDZDdEZEdFZFgeEeFRZGGdGdHeZHdIZIdJZJeKdKkreJdSdS)PaH
    ast
    ~~~

    The `ast` module helps Python applications to process trees of the Python
    abstract syntax grammar.  The abstract syntax itself might change with
    each Python release; this module helps to find out programmatically what
    the current grammar looks like and allows modifications of it.

    An abstract syntax tree can be generated by passing `ast.PyCF_ONLY_AST` as
    a flag to the `compile()` builtin function or by using the `parse()`
    function from this module.  The result will be a tree of objects whose
    classes all inherit from `ast.AST`.

    A modified abstract syntax tree can be compiled into a Python code object
    using the built-in `compile()` function.

    Additionally various helper functions are provided that make working with
    the trees simpler.  The main intention of the helper functions and this
    module in general is to provide an easy to use interface for libraries
    that work tightly with the python syntax (template engines for example).


    :copyright: Copyright 2008 by Armin Ronacher.
    :license: Python License.
N)*)contextmanagernullcontext)IntEnumauto_simple_enum	<unknown>execF)
type_commentsfeature_versionct}|r
|tz}t|tr|\}}|}n|d}t	|||||S)z
    Parse the source into an AST node.
    Equivalent to compile(source, filename, mode, PyCF_ONLY_AST).
    Pass type_comments=True to get back type comments where the syntax allows.
    N)_feature_version)
PyCF_ONLY_ASTPyCF_TYPE_COMMENTS
isinstancetuplecompile)sourcefilenamemoderrflagsmajorminors        7/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/ast.pyparser!sk
E$
##/5))&u		 68T5$35555ct|tr$t|dd}t|tr|j}dfdfdfd|S)aT
    Evaluate an expression node or a string containing only a Python
    expression.  The string or node provided may only consist of the following
    Python literal structures: strings, bytes, numbers, tuples, lists, dicts,
    sets, booleans, and None.

    Caution: A complex expression can overflow the C stack and cause a crash.
    z 	evalrcfd}t|ddx}r|d|z
}t|d|z)Nzmalformed node or stringlinenoz	 on line : )getattr
ValueError)nodemsglnos   r_raise_malformed_nodez+literal_eval.<locals>._raise_malformed_nodeCsL($$///3	%$s$$$C}D}},---rct|tr(t|jtt
tfvr||jSN)rConstanttypevalueintfloatcomplex)r&r)s r_convert_numz"literal_eval.<locals>._convert_numHsJ$))	(T$*-=-=c5RYEZ-Z-Z!!$'''zrct|trQt|jttfr0|j}t|jtr|
S|S|Sr+)rUnaryOpopUAddUSuboperand)r&r8r2s  r_convert_signed_numz)literal_eval.<locals>._convert_signed_numLsqdG$$	!DGdD\)J)J	!"l4<00G$'4((
! y  y |D!!!rc	t|tr|jSt|tr"t	t|jSt|tr"tt|jSt|tr"tt|jSt|trRt|jtr8|jjdkr(|j|jcxkrgkrnntSt|t"rxt%|jt%|jkr|t+t-t|jt|jSt|t.rt|jt2t4fru|j}|j}t|t:t<fr9t|t>r$t|jt2r||zS||z
S|S)Nset) rr,r.TuplermapeltsListlistSetr;CallfuncNameidargskeywordsDictlenkeysvaluesdictzipBinOpr5AddSubleftrightr/r0r1)r&rQrR_convertr2r9r)s   rrSzliteral_eval.<locals>._convertTs*dH%%	(:
e
$
$	(Xty11222
d
#
#	(Hdi00111
c
"
"	(s8TY//000t$$	(DIt)D)D	(ile##	T](H(H(H(Hb(H(H(H(H(H55L
d
#
#	(49~~T[!1!111%%d+++C$)44$+668899
9
e
$
$	(DGc3Z)H)H	(&&ty11D L,,E$e--
(*UG2L2L
(dgs++(%<'%<'""4(((r)rstrrlstrip
Expressionbody)node_or_stringrSr2r9r)s @@@@rliteral_evalrY6s.#&&J~44U;;&III.*---',...
"""""))))))))48N###rT)indentcdfd	t|tstd|jjztt
sdz|dS)a
    Return a formatted dump of the tree in node.  This is mainly useful for
    debugging purposes.  If annotate_fields is true (by default),
    the returned string will show the names and the values for fields.
    If annotate_fields is false, the result string will be more compact by
    omitting unambiguous field names.  Attributes such as line
    numbers and column offsets are not dumped by default.  If this is wanted,
    include_attributes can be set to true.  If indent is a non-negative
    integer or string, then the tree will be pretty-printed with that indent
    level. None (the default) selects the single line representation.
    rcdz
dzz}dzz}nd}d}t|trzt|}g}d}}|jD]}	t	||}	n#t
$rd}Y"wxYw|	t	||dd}<|	\}	}
|o|
}|r||d|	l||	
rt|jrm|jD]e}	t	||}	n#t
$rY wxYw|	t	||d8|	\}	}
|o|
}||d|	f|r;t|d	kr(|j	j
d
d|d|fS|j	j
d
|||ddfSt|tr.|sd
Sd||fd|DddfSt|dfS)N
z,
, T.=()F)z[]T[c3<K|]}|dVdSrN).0x_formatlevels  r	<genexpr>z(dump.<locals>._format.<locals>.<genexpr>s4/S/S50A0A!0D/S/S/S/S/S/Sr])rASTr-_fieldsr$AttributeErrorappend_attributesrI	__class____name__joinr@repr)r&rlprefixsepclsrF	allsimplerGnamer.simplerkannotate_fieldsinclude_attributesrZs `         rrkzdump.<locals>._format}sQJEFUN*F&5.(CCFCdC  %	\t**CDI&H
'
'#D$//EE%#HH=WS$%<%<%D#H 'u 5 5
v%0&	'KK444 78888KK&&&&!

9d&6

9 ,	9	9D! 'd 3 3)!!! !}dC)@)@)H $+GE5$9$9ME6 ) 4fIKK444 78888
WSYY!^^#'>#:#:#:DIIdOOOOLRVhVV!%!8!8!8&&#((4....QSXXX
d
#
#	\
"!z
"%vsxx/S/S/S/S/Sd/S/S/S'S'S'S'STV[[[Dzz4s$A%%A43A4&C77
DDzexpected AST, got %rN )r)rro	TypeErrorrtrurT)r&r~rrZrks ```@rdumprqs. . . . . . . . . `dC  J.1HHIII
*VS"9"9v74==rcdD]]}||jvrR||jvrIt||d}|%t||r&|drt	|||^|S)z
    Copy source location (`lineno`, `col_offset`, `end_lineno`, and `end_col_offset`
    attributes) from *old_node* to *new_node* if possible, and return *new_node*.
    )r"
col_offset
end_linenoend_col_offsetNend_)rsr$hasattr
startswithsetattr)new_nodeold_nodeattrr.s    r
copy_locationrs
G//8'''DH4H,H,HHdD11E $''!,0OOF,C,C!$...Orc0fd|dddd|S)a{
    When you compile a node tree with compile(), the compiler expects lineno and
    col_offset attributes for every node that supports them.  This is rather
    tedious to fill in for generated nodes, so this helper adds these attributes
    recursively where not already set, by setting them to the values of the
    parent node.  It works recursively starting at *node*.
    cd|jvrt|ds||_n|j}d|jvr t|dd||_n|j}d|jvrt|ds||_n|j}d|jvr t|dd||_n|j}t|D]}|||||dS)Nr"rrr)rsrr"r$rrriter_child_nodes)r&r"rrrchild_fixs      rrz#fix_missing_locations.<locals>._fixst'''4**
%$4+++t\4008",!_
4+++4..
-",!_
t///t-t44<&4##!%!4%d++	H	HED
JGGGG	H	Hrr]rrh)r&rs @rfix_missing_locationsrs@HHHHH.	Dq!QKrr]ct|D]y}t|trt|dd|z|_1d|jvrt|dd|z|_d|jvrt|ddx}
||z|_z|S)z
    Increment the line number and end line number of each node in the tree
    starting at *node* by *n*. This is useful to "move code" to a different
    location in a file.
    r"rr)walkr
TypeIgnorer$r"rsr)r&nrrs    rincrement_linenorsd
.
.eZ((	"5(A66:ELu((("5(A66:ELE---&ulA>>>K)A~EKrc#hK|jD]'}	|t||fV#t$rY$wxYwdS)zs
    Yield a tuple of ``(fieldname, value)`` for each field in ``node._fields``
    that is present on *node*.
    N)rpr$rq)r&fields  riter_fieldsrsf
	u-------			D	s"
//c#Kt|D]R\}}t|tr|Vt|tr|D]}t|tr|VSdS)z
    Yield all direct child nodes of *node*, that is, all fields that are nodes
    and all items of fields that are lists of nodes.
    N)rrror@)r&r|ritems    rrrs
#4((eeS!!	KKKK
t
$
$	

dC((JJJ
rct|ttttfstd|jjz|jr t|jdtsdS|jdj
}t|tr|j}n9t|tr"t|j
tr|j
}ndS|rddl}||}|S)aC
    Return the docstring for the given node or None if no docstring can
    be found.  If the node provided does not have docstrings a TypeError
    will be raised.

    If *clean* is `True`, all tabs are expanded to spaces and any whitespace
    that can be uniformly removed from the second line onwards is removed.
    z%r can't have docstringsrN)rAsyncFunctionDefFunctionDefClassDefModulerrtrurWExprr.Strsr,rTinspectcleandoc)r&cleantextrs    r
get_docstringrsd-{HfMNNN2T^5LLMMM9DIaL$77t9Q<D$v	D(	#	#
4:s(C(Czt&%%KrcDd}g}d}|t|kro||}||z
}|dz
}|dkr)|t|kr||dkr
|dz
}|dz
}|dvr||d}|t|ko|r|||S)z}Split a string into lines ignoring form feed and other chars.

    This mimics how the Python parser splits source code.
    rr_r]
r^z
)rIrr)ridxlines	next_linecs     r_splitlines_no_ffr3s
CEI

F

3KQ	q99s6{{**vc{d/B/BI1HC;;LL###IF

 
YLrc2d}|D]}|dvr||z
}|dz
}|S)z6Replace all chars except '\f\t' in a line with spaces.r_z	rrh)rresultrs   r_pad_whitespacerLs:
F
;;aKFFcMFFMr)paddedc	|j|jdS|jdz
}|jdz
}|j}|j}n#t$rYdSwxYwt|}||kr4||||S|rBt||d|}nd}||||dz}	||d|}
||dz|}|	d|	|
|
d|S)aBGet source code segment of the *source* that generated *node*.

    If some location information (`lineno`, `end_lineno`, `col_offset`,
    or `end_col_offset`) is missing, return None.

    If *padded* is `True`, the first line of a multi-line statement will
    be padded with spaces to match its original position.
    Nr]r_r)rrr"rrqrencodedecoderinsertrrrv)rr&rr"rrrrpaddingfirstlasts           rget_source_segmentrWs?"d&9&A4q_q(
_
,tt
f%%EVV}##%%j&?@GGIII
!%-"6"6"8"8*"E"L"L"N"NOOeFm**,,Z[[9@@BBBE##%%o~o6==??D&(:%&E	LLE	LL
775>>s5"5
AAc#Kddlm}||g}|r>|}|t	||V|<dSdS)z
    Recursively yield all descendant nodes in the tree starting at *node*
    (including *node* itself), in no specified order.  This is useful if you
    only want to modify nodes in place and don't care about the context.
    r)dequeN)collectionsrpopleftextendr)r&rtodos   rrr|s"!!!!!5$==D
||~~$T**+++


rc$eZdZdZdZdZdZdS)NodeVisitora<
    A node visitor base class that walks the abstract syntax tree and calls a
    visitor function for every node found.  This function may return a value
    which is forwarded by the `visit` method.

    This class is meant to be subclassed, with the subclass adding visitor
    methods.

    Per default the visitor functions for the nodes are ``'visit_'`` +
    class name of the node.  So a `TryFinally` node visit function would
    be `visit_TryFinally`.  This behavior can be changed by overriding
    the `visit` method.  If no visitor function exists for a node
    (return value `None`) the `generic_visit` visitor is used instead.

    Don't use the `NodeVisitor` if you want to apply changes to nodes during
    traversing.  For this a special visitor exists (`NodeTransformer`) that
    allows modifications.
    cbd|jjz}t|||j}||S)z
Visit a node.visit_)rtrur$
generic_visit)selfr&methodvisitors    rvisitzNodeVisitor.visits3DN33$(:;;wt}}rct|D]t\}}t|tr0|D],}t|tr||-Jt|tr||udS)z9Called if no explicit visitor function exists for a node.N)rrr@ror)rr&rr.rs     rrzNodeVisitor.generic_visits'--	"	"LE5%&&
"!))D!$,,)

4((()E3''
"

5!!!
	"	"rc|j}tt|}|3tD]\}}t||r|}n|Td|z}	t
||}ddl}||dtd||S#t$rYnwxYw||S)Nrrz" is deprecated; add visit_Constant)r._const_node_type_namesgetr-itemsrr$warningswarnDeprecationWarningrqr)	rr&r.	type_namerzr|rrrs	         rvisit_ConstantzNodeVisitor.visit_Constants
*..tE{{;;	399;;

	TeS)) $IE 	)F
%!$// 

KKK0!555wt}}$
"



!!$'''s,B**
B76B7N)ru
__module____qualname____doc__rrrrhrrrrsK&"""(((((rrceZdZdZdZdS)NodeTransformeraC
    A :class:`NodeVisitor` subclass that walks the abstract syntax tree and
    allows modification of nodes.

    The `NodeTransformer` will walk the AST and use the return value of the
    visitor methods to replace or remove the old node.  If the return value of
    the visitor method is ``None``, the node will be removed from its location,
    otherwise it is replaced with the return value.  The return value may be the
    original node in which case no replacement takes place.

    Here is an example transformer that rewrites all occurrences of name lookups
    (``foo``) to ``data['foo']``::

       class RewriteName(NodeTransformer):

           def visit_Name(self, node):
               return Subscript(
                   value=Name(id='data', ctx=Load()),
                   slice=Constant(value=node.id),
                   ctx=node.ctx
               )

    Keep in mind that if the node you're operating on has child nodes you must
    either transform the child nodes yourself or call the :meth:`generic_visit`
    method for the node first.

    For nodes that were part of a collection of statements (that applies to all
    statement nodes), the visitor may also return a list of nodes rather than
    just a single node.

    Usually you use the transformer like this::

       node = YourTransformer().visit(node)
    ct|D]\}}t|tr|g}|D]o}t|trC||}|/t|ts||Z||p||dd<t|tr9||}|t||t||||Sr+)	rrr@rorrrrdelattrr)rr&r	old_value
new_valuesr.rs       rrzNodeTransformer.generic_visits +D 1 1	3	3E9)T**
3
&--E!%--% $

5 1 1 =$!+E3!7!7%&--e444$%%e,,,,)	!!!Is++
3::i00#D%((((D%222rN)rurrrrrhrrrrs.!!Frrrc|jS)zDeprecated. Use value instead.r.rs r_getterrs
zrc||_dSr+rrr.s  r_setterrs



rceZdZdZdZdS)_ABCcd|_dS)Nz3Deprecated AST node class. Use ast.Constant instead)r)rzrFs  r__init__z
_ABC.__init__s
Orc4t|tsdS|tvr^	|j}t|t|o)t|t|dS#t$rYdSwxYwt||S)NFrh)	rr,_const_typesr._const_types_notrrqr-__instancecheck__)rzinstr.s   rrz_ABC.__instancecheck__s$))	5,


ul3&788I"5*:*>*>sB*G*GHHH"


uu
%%c4000sA..
A<;A<N)rurrrrrhrrrrs5PPP
1
1
1
1
1rrc|D]R}||jvr|j|}|t|krt|jd|S|t
vrt
|i|St
j|g|Ri|S)Nz" got multiple values for argument )rpindexrIrrurr,__new__)rzrFkwargskeyposs     r_newr"sXXck!!k$$T??s|VVsVVWWW
l((((C1$111&111rceZdZdZeZdS)Num)rNrurrrprrrhrrrr.GGGGrr)	metaclassceZdZdZeZdS)rrNrrhrrrr2rrrceZdZdZeZdS)BytesrNrrhrrrr6rrrceZdZeZdS)NameConstantN)rurrrrrhrrrr:sGGGrrceZdZdZdZdS)Ellipsisrhc^|turtdg|Ri|Stj|g|Ri|S)N.)rr,r)rzrFrs   rrzEllipsis.__new__@sJ(??C1$111&1115d555f555rN)rurrrprrhrrrr=s(G66666rr.ceZdZdZdS)slicezDeprecated AST node class.Nrurrrrhrrrr[s$$$$rrceZdZdZdZdS)Indexz@Deprecated AST node class. Use the index value directly instead.c|Sr+rh)rzr.rs   rrz
Index.__new__`srNrurrrrrhrrrr^s)JJrrceZdZdZddZdS)ExtSlicez1Deprecated AST node class. Use ast.Tuple instead.rhcPtt|tfi|Sr+)r<r@Load)rzdimsrs   rrzExtSlice.__new__es$T$ZZ226222rN)rhr
rhrrrrcs.;;333333rrrc|jS)zDeprecated. Use elts instead.r>rs r_dims_getterrms
yrc||_dSr+rrs  r_dims_setterrqs
			rceZdZdZdS)Suite/Deprecated AST node class.  Unused in Python 3.Nr	rhrrrrv9999rrceZdZdZdS)AugLoadrNr	rhrrrryrrrceZdZdZdS)AugStorerNr	rhrrrr|rrrceZdZdZdS)ParamrNr	rhrrr!r!rrr!1eceZdZdZeZeZeZeZeZ	eZ
eZeZeZ
e
ZeZeZeZeZeZeZeZeZeZdZdS)_Precedencez5Precedence table that originated from python grammar.cX	||dzS#t$r|cYSwxYwNr])rtr%rs rnextz_Precedence.nextsA	>>$(+++			KKK	s))N)rurrrr
NAMED_EXPRTUPLEYIELDTESTORANDNOTCMPEXPRBORBXORBANDSHIFTARITHTERMFACTORPOWERAWAITATOMr'rhrrr$r$s??JDFFEDFFE466D	
B
$&&C
$&&C
$&&C466D
C466D466DDFFEDFFE466D
TVVFDFFEDFFE466Drr$)'")z"""'''ceZdZdZdddZdZdZdZdd	Zd
Z	e
ddZe
dd
dZe
dZ
dZdZdZdZdZdZfdZdZdZdZdZdZdZdZdZdZd Zd!Zd"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-d0Z.d1Z/d2Z0d3Z1d4Z2d5Z3d6Z4d7Z5d8Z6d9Z7d:Z8d;Z9d<Z:e;dd=d>Z<e;d?d@Z=dAZ>dBZ?dCZ@dDZAdEZBdFZCdGZDdHZEdIZFdJZGdKZHdLZIdMZJdNZKdOZLdPZMdQZNdRdSdTdUdVZOePjQePjRePjRePjRdWZSdXZTdTdUdYdZd[d\d]d^d_d`dadbdcdd
ZUePjVePjVePjWePjWePjWePjWePjXePjXePjYePjZePj[ePjWePj\de
Z]e^dfZ_dgZ`dhdidjdkdldmdndodpdqdr
ZadsZbdtdudvZcePjdePjedwZfdxZgdyZhdzZid{Zjd|Zkd}Zld~ZmdZndZodZpdZqdZrdZsdZtdZudZvdZwdZxdZydZzdZ{dZ|dZ}xZ~S)	_UnparserzMethods in this class recursively traverse an AST and
    output source code for the abstract syntax; original formatting
    is disregarded.F_avoid_backslashescZg|_i|_i|_d|_||_d|_dS)NrF)_source_precedences
_type_ignores_indentrA_in_try_star)rrAs  rrz_Unparser.__init__s6"4!rct|}	|t||D]}|||dS#t$rYdSwxYw)z7Call f on each item in seq, calling inter() in between.N)iterr'
StopIteration)rinterfseqrjs     r
interleavez_Unparser.interleaves~3ii	
Ad3iiLLL

!

			DD	sA
AAct|dkr(||dddSfd||dS)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.dSNr`writersr<lambda>z&_Unparser.items_view.<locals>.<lambda>DJJt$4$4rN)rIrTrN)r	traverserrs`  r
items_viewz_Unparser.items_viewsau::??IeAhJJsOOOOOOO4444iGGGGGrcB|jr|ddSdS)z8Adds a newline if it isn't the start of generated sourcer^N)rCrTrs r
maybe_newlinez_Unparser.maybe_newlines.<	JJt		rr_cn||d|jz|zdS)zXIndent a piece of text and append it, according to the current
        indentation levelz    N)rZrTrFrrs  rfillz_Unparser.fills:	


6DL(4/00000rc:|j|dS)zAdd new source partsN)rCrr\s  rrTz_Unparser.writesD!!!!!rNc#DK|g}|j}||_|V||_dSr+)rC)rbufferoriginal_sources   rbufferedz_Unparser.buffereds2>F,&rextrac#K|d|r|||xjdz
c_dV|xjdzc_dS)aA 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)rTrF)rrds  rblockz_Unparser.blocks^	

3	JJu
rc#fK||dV||dS)zA context manager for preparing the source for expressions. It adds
        *start* to the buffer and enters, after exit it adds *end*.NrS)rstartends   rdelimitz_Unparser.delimits6
	

5


3rcN|r|||StSr+)rkr)rrirj	conditions    r
delimit_ifz_Unparser.delimit_ifs(	!<<s+++== rc^|dd|||kS)z,Shortcut to adding precedence related parensrcrd)rnget_precedence)r
precedencer&s   rrequire_parensz_Unparser.require_parenss+sC)<)<T)B)BZ)OPPPrcL|j|tjSr+)rDrr$r+rr&s  rrpz_Unparser.get_precedences $$T;+;<<<rc$|D]}||j|<
dSr+)rD)rrqnodesr&s    rset_precedencez_Unparser.set_precedences+	1	1D&0Dd##	1	1rcFt|ttttfrt|jdkrdS|jd}t|tsdS|j}t|trt|jtr|SdSdS)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)rrrrrrIrWrr.r,rTrts  rget_raw_docstringz_Unparser.get_raw_docstrings
#[(FC

	
^^a

4y|$%%	4zdH%%	*TZ*E*E	K				rc`|j|jp|j}|d|SdS)Nz	 # type: )rErr"type_comment)rr&comments   rget_type_commentz_Unparser.get_type_comments>$((55J9J(w(((rct|tr|D]}||dSt|dSr+)rr@traversesuperr)rr&rrts   rrz_Unparser.traverse$sadD!!	 
$
$

d####
$
$
GGMM$rcng|_||d|jS)zOutputs a source code string that, if converted back to an ast
        (using ast.parse) will generate an AST equivalent to *node*r_)rCrrvrts  rrz_Unparser.visit.s1

dwwt|$$$rc||x}r9||||jdddS||jdSr&)ry_write_docstringrrW)rr&	docstrings   r"_write_docstring_and_traverse_bodyz,_Unparser._write_docstring_and_traverse_body5sm//555I	%!!),,,MM$)ABB-(((((MM$)$$$$$rcd|jD|_|||jdS)Nc.i|]}|jd|jS)ignore)r"tag)rirs  r
<dictcomp>z*_Unparser.visit_Module.<locals>.<dictcomp>=s7



M0FJ00


r)type_ignoresrErclearrts  rvisit_Modulez_Unparser.visit_Module<sW

+


	
//555  """""rc
dd5fdj|jdddn#1swxYwYd|jdS)Nrcrdc.dSrRrSrsrrUz._Unparser.visit_FunctionType.<locals>.<lambda>G

4((r -> )rkrNrargtypesrTreturnsrts` rvisit_FunctionTypez_Unparser.visit_FunctionTypeDs
\\#s
#
#		OO(((($-


															
	

6

dl#####s%A		A
A
c||tj|j||jdSr+)r]rwr$r*r.rrts  r
visit_Exprz_Unparser.visit_ExprMsD		K-tz:::

dj!!!!!rc`|tj|5|tj|j|j||j|d||jddddS#1swxYwYdS)Nz := )	rrr$r(rwr:targetr.rrTrts  rvisit_NamedExprz_Unparser.visit_NamedExprRs

 
 !7
>
>	&	& 0$+tzJJJMM$+&&&JJvMM$*%%%		&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&sA5B##B'*B'czdfdj|jdS)Nzimport c.dSrRrSrsrrUz(_Unparser.visit_Import.<locals>.<lambda>[

4 0 0r)r]rNrnamesrts` rvisit_Importz_Unparser.visit_ImportYs?		)0000$-LLLLLrc$dd|jpdz|jr|jdfdj|jdS)Nzfrom .rz import c.dSrRrSrsrrUz,_Unparser.visit_ImportFrom.<locals>.<lambda>crr)r]rTrlmodulerNrrrts` rvisit_ImportFromz_Unparser.visit_ImportFrom]s		'

3$*/*+++;	$JJt{###

:0000$-LLLLLrcf||jD]L}|tj||||dM||j||x}r||dSdS)N = )	r]targetsrwr$r)rrTr.r})rr&rr{s    rvisit_Assignz_Unparser.visit_Assignes		l		F 16:::MM&!!!JJu

dj!!!00666<	%JJ|$$$$$	%	%rc|||j|d|j|jjjzdz||jdS)Nrz= )	r]rrrTbinopr5rtrur.rts  rvisit_AugAssignz_Unparser.visit_AugAssignosh		

dk"""

3DG$5$>??$FGGG

dj!!!!!rc||dd|jot|jt
5||jdddn#1swxYwY|d||j|j	r1|d||j	dSdS)Nrcrdr#r)
r]rnr}rrrDrrT
annotationr.rts  rvisit_AnnAssignz_Unparser.visit_AnnAssignus
		
__S#4;'X:dkSW;X;X
Y
Y	'	'MM$+&&&	'	'	'	'	'	'	'	'	'	'	'	'	'	'	'

4

do&&&:	&JJuMM$*%%%%%	&	&sA33A7:A7c|d|jr1|d||jdSdS)Nreturnr)r]r.rTrrts  rvisit_Returnz_Unparser.visit_ReturnsQ		(:	&JJsOOOMM$*%%%%%	&	&rc0|ddS)Npassr]rts  r
visit_Passz_Unparser.visit_Passs		&rc0|ddS)Nbreakrrts  rvisit_Breakz_Unparser.visit_Breaks		'rc0|ddS)Ncontinuerrts  rvisit_Continuez_Unparser.visit_Continues		*rczdfdj|jdS)Nzdel c.dSrRrSrsrrUz(_Unparser.visit_Delete.<locals>.<lambda>rr)r]rNrrrts` rvisit_Deletez_Unparser.visit_Deletes?		&0000$-NNNNNrc|d||j|jr1|d||jdSdS)Nzassert r`)r]rtestr'rTrts  rvisit_Assertz_Unparser.visit_Assertsh		)

di   8	$JJtMM$(#####	$	$rczdfdj|jdS)Nzglobal c.dSrRrSrsrrUz(_Unparser.visit_Global.<locals>.<lambda>rrr]rNrTrrts` rvisit_Globalz_Unparser.visit_Globals?		)0000$*djIIIIIrczdfdj|jdS)Nz	nonlocal c.dSrRrSrsrrUz*_Unparser.visit_Nonlocal.<locals>.<lambda>rrrrts` rvisit_Nonlocalz_Unparser.visit_Nonlocals?		+0000$*djIIIIIrcX|tj|5|d|jrT|d|tj|j||jddddS#1swxYwYdS)Nawaitr)rrr$r9rTr.rwr:rrts  rvisit_Awaitz_Unparser.visit_Await

 
 !2D
9
9	*	*JJwz
*

3##K$4djAAA

dj)))	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*A1BB#&B#cX|tj|5|d|jrT|d|tj|j||jddddS#1swxYwYdS)Nyieldr)rrr$r*rTr.rwr:rrts  rvisit_Yieldz_Unparser.visit_YieldrrcL|tj|5|d|jstd|tj|j||jddddS#1swxYwYdS)Nzyield from z-Node can't be used without a value attribute.)	rrr$r*rTr.r%rwr:rrts  rvisit_YieldFromz_Unparser.visit_YieldFroms

 
 !2D
9
9	&	&JJ}%%%:
R !PQQQ 0$*===MM$*%%%	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&sA+BB Bc<|d|js|jrtddS|d||j|jr1|d||jdSdS)Nraisez*Node can't use cause without an exception.rz from )r]exccauser%rTrrts  rvisit_Raisez_Unparser.visit_Raises		'x	z
P !NOOOF

3

dh:	&JJx   MM$*%%%%%	&	&rc|d|5||jdddn#1swxYwY|jD]}|||jr[|d|5||jdddn#1swxYwY|jr^|d|5||jddddS#1swxYwYdSdS)Ntryelsefinally)r]rgrrWhandlersorelse	finalbody)rr&exs   rdo_visit_tryz_Unparser.do_visit_trys		%
ZZ\\	%	%MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%-		BMM";	+IIf
+
+

dk***
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>	.IIi   
.
.

dn---
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.	.	.s5AAA+CCC
D55D9<D9ct|j}	d|_||||_dS#||_wxYw)NFrGrrr&prev_in_try_stars   r	visit_Tryz_Unparser.visit_TrysO,	1 %Dd### 0D 0D0000.	7ct|j}	d|_||||_dS#||_wxYw)NTrrs   r
visit_TryStarz_Unparser.visit_TryStarsO,	1 $Dd### 0D 0D0000rc||jrdnd|jr/|d||j|jr/|d||j|5||jddddS#1swxYwYdS)Nzexcept*exceptr as )r]rGr-rTrr|rgrWrts  rvisit_ExceptHandlerz_Unparser.visit_ExceptHandlers		t0>))h???9	%JJsOOOMM$)$$$9	"JJvJJty!!!
ZZ\\	%	%MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%sCCCc||jD],}|d||-|d|jz|dd|jp|j5d}|jD]1}|r|dnd}||2|jD]1}|r|dnd}||2	dddn#1swxYwY|	5|
|ddddS#1swxYwYdS)	N@zclass rcrd)rmFr`T)rZdecorator_listr]rr|rnbasesrGrTrgr)rr&decocommaes     rvisit_ClassDefz_Unparser.visit_ClassDefs'	 	 DIIcNNNMM$		(TY&'''
__S#4:3N_
O
O
	!
	!EZ
!
!!JJt$$$$ E

a    ]
!
!!JJt$$$$ E

a    
!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!ZZ\\	:	:33D999	:	:	:	:	:	:	:	:	:	:	:	:	:	:	:	:	:	:s%
A5DDD+EEEc2||ddS)Ndef_function_helperrts  rvisit_FunctionDefz_Unparser.visit_FunctionDefsdE*****rc2||ddS)Nz	async defrrts  rvisit_AsyncFunctionDefz _Unparser.visit_AsyncFunctionDef
sdK00000rc||jD],}|d||-|dz|jz}|||dd5||jdddn#1swxYwY|jr/|d||j|	|
|5||ddddS#1swxYwYdS)Nrrrcrdrrc)rZrr]rr|rkrFrrTrgr}r)rr&fill_suffixrdef_strs     rrz_Unparser._function_helper
s'	 	 DIIcNNNMM$#di/		'
\\#s
#
#	%	%MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%<	(JJvMM$,'''
ZZd33D99Z
:
:	:	:33D999	:	:	:	:	:	:	:	:	:	:	:	:	:	:	:	:	:	:s$B((B,/B,D55D9<D9c2|d|dS)Nzfor _for_helperrts  r	visit_Forz_Unparser.visit_Fors&&&&&rc2|d|dS)Nz
async for rrts  rvisit_AsyncForz_Unparser.visit_AsyncForst,,,,,rc|||tj|j||j|d||j||	|5||j
dddn#1swxYwY|jr^|d|5||jddddS#1swxYwYdSdS)N in rcr)r]rwr$r)rrrTrIrgr}rWr)rr]r&s   rrz_Unparser._for_helper"s		$K-t{;;;

dk"""

6

di   
ZZd33D99Z
:
:	%	%MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%;	+IIf
+
+

dk***
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	+	+s$-CCCD77D;>D;c|d||j|5||jdddn#1swxYwY|jrt
|jdkrt|jdtr|jd}|d||j|5||jdddn#1swxYwY|jr8t
|jdkr t|jdt|jr^|d|5||jddddS#1swxYwYdSdS)Nzif r]rzelif r)	r]rrrgrWrrIrIfrts  rvisit_Ifz_Unparser.visit_If/sa		%

di   
ZZ\\	%	%MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%k	)c$+..!33
4;q>SU8V8V3;q>DIIgMM$)$$$
)
)

di(((
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)	k	)c$+..!33
4;q>SU8V8V3;	+IIf
+
+

dk***
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	+	+s6A++A/2A/D,,D03D0&GGGc|d||j|5||jdddn#1swxYwY|jr^|d|5||jddddS#1swxYwYdSdS)Nzwhile r)r]rrrgrWrrts  rvisit_Whilez_Unparser.visit_WhileAsK		(

di   
ZZ\\	%	%MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%;	+IIf
+
+

dk***
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	+	+s$A++A/2A/&CCCc2dfdj|j|5|jddddS#1swxYwYdS)Nzwith c.dSrRrSrsrrUz&_Unparser.visit_With.<locals>.<lambda>Mrrrcr]rNrrrgr}rWrts` r
visit_Withz_Unparser.visit_WithKs		'0000$-LLL
ZZd33D99Z
:
:	%	%MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%$BBBc2dfdj|j|5|jddddS#1swxYwYdS)Nzasync with c.dSrRrSrsrrUz+_Unparser.visit_AsyncWith.<locals>.<lambda>Srrrcr
rts` rvisit_AsyncWithz_Unparser.visit_AsyncWithQs		-   0000$-LLL
ZZd33D99Z
:
:	%	%MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%rquote_typesescape_special_whitespacecfd}dt||}dvrd|D}fd|D}|s>ttfd|Dd}dd	|gfSrG|fd
|ddd	krdd	d
zd	z|fS)zHelper for writing string literals, minimizing escapes.
        Returns the tuple (string literal to write, possible quote types).
        cs|dvr|S|dks|s(|ddS|S)Nz
	\unicode_escapeascii)isprintablerr)rrs rescape_charz2_Unparser._str_literal_helper.<locals>.escape_char]sU-
fDyy

yxx 01188AAAHrr_r^c$g|]
}|tv|Srh)
_MULTI_QUOTES)riqs  r
<listcomp>z1_Unparser._str_literal_helper.<locals>.<listcomp>js"PPPQQ-=O=Oq=O=O=Orcg|]}|v|	Srhrh)rirescaped_strings  rr z1_Unparser._str_literal_helper.<locals>.<listcomp>ks#QQQ.9P9P19P9P9Prc30K|]}d|v|VdSrgrh)rirstrings  rrmz0_Unparser._str_literal_helper.<locals>.<genexpr>qs+CCF1INN!NNNNCCrrr]rc(|ddkS)Nrrrh)rr"s rrUz/_Unparser._str_literal_helper.<locals>.<lambda>usqt~b7I/Ir)rNr)rvr=rwr'sort)rr$rrrpossible_quotesquoter"s ` `   @r_str_literal_helperz_Unparser._str_literal_helperWs7					[&!9!9::%>!!PP/PPPOQQQQoQQQ	)&\\FCCCC[CCCVAYOOE!B$<%((	Q  %I%I%I%I JJJq!!$r(:::!/!4t!;nR>P!P..rrc|||\}}|d}||||dS)zKWrite string literal value with a best effort attempt to avoid backslashes.r*rN)r)rT)rr$r
quote_types    r_write_str_avoiding_backslashesz)_Unparser._write_str_avoiding_backslashes}sP"66v;6WW ^


j6&6*6677777rcB|d|jri|5}||dddn#1swxYwY|d|Sg}|jD]}|5}||dddn#1swxYwY|d|t|tfg}tt}d}|D]]\}}||||\}}	||t|	|rd}n|	}^|r]dg}||D]C\}}t!d|z}d}
||t#|
d	Dd|}|d
}||||dS)NrLr_FrTr=r<z'"rr)rTrArb_write_fstring_innerr-rvrKrrrr,r@_ALL_QUOTESr)r;
isdisjointrrwrI)rr&r`
fstring_partsr.new_fstring_partsrfallback_to_repris_constantnew_quote_typesexpected_prefixr,s            rvisit_JoinedStrz_Unparser.visit_JoinedStrs

3"	I
0F))$///
0
0
0
0
0
0
0
0
0
0
0
0
0
0
077HHH
[		E
1F))%000
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1  *UH"="=>



;'' "/
	*
	*E;%)%=%='*5&>&&"E?

$$U+++?##..{;;
#' )KK		I!'K##%%%&3
I
I"{S5[))"'!((s?/C/CB/F)GHHHH)** ^


j5%55566666s#AAA%CC	C	ct|tr!|jD]}||dSt|tr`t|jtrF|jdddd}||dSt|tr|
|dStd|)N{z{{}z}}z"Unexpected node inside JoinedStr, )r	JoinedStrrKr/r,r.rTreplacerTFormattedValuevisit_FormattedValuer%rr&r.s   rr/z_Unparser._write_fstring_innersdI&&
	L
1
1))%0000
1
1
h
'
'	LJtz3,G,G	LJ&&sD1199#tDDEJJu
n
-
-	L%%d+++++J$JJKKKrc
fd}dd5||j}d|vrtd|drd||jdkr*dt
|j|jr/d	|jddddS#1swxYwYdS)
Nctd}|tj|||S)NTr@)r-rwr$r+r'r)innerunparserrs  r
unparse_innerz5_Unparser.visit_FormattedValue.<locals>.unparse_innersR!tDzzT:::H##K$4$9$9$;$;UCCC>>%(((rr:r;rz5Unable to avoid backslash in f-string expression partrr!rf)	rkr.r%rrT
conversionchrformat_specr/)rr&rEexprs`   rr?z_Unparser.visit_FormattedValues_	)	)	)	)	)
\\#s
#
#	<	< =,,Dt|| Ks##
 

3JJt"$$

5s4?3355666
<

3))$*:;;;	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<sCC88C<?C<c:||jdSr+)rTrErts  r
visit_Namez_Unparser.visit_Names

47rc||jdkr|d||jt
dS)Nur*)r]kindrTr-r.rrts  rrz_Unparser._write_docstringsL		9JJsOOO,,TZ],SSSSSrc
t|ttfrb|t	|dtddtdtddS|jr,t|tr|	|dS|t	|dS)Ninfnanrc-rd)
rr0r1rTrwr=_INFSTRrArTr-rs  r_write_constantz_Unparser._write_constantseeW-..	$
JJU(( 8G 8 8g 8 8 899






$	$E3)?)?	$0077777JJtE{{#####rc|j}t|trL|dd5||j|ddddS#1swxYwYdS|dur|ddS|jdkr|d||jdS)Nrcrd....rN)r.rrrkrXrUrTrOr@s   rrz_Unparser.visit_Constants
eU##	-c3''
=
= 4e<<<
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
c\\JJuyC

3  ,,,,,sAA #A cdd5fdj|jddddS#1swxYwYdS)Nrernc.dSrRrSrsrrUz&_Unparser.visit_List.<locals>.<lambda>rVr)rkrNrr>rts` r
visit_Listz_Unparser.visit_Lists
\\#s
#
#	P	POO4444dmTYOOO	P	P	P	P	P	P	P	P	P	P	P	P	P	P	P	P	P	P%A

AAc|dd5||j|jD]}||	ddddS#1swxYwYdS)Nrernrkrelt
generatorsrr&gens   rvisit_ListCompz_Unparser.visit_ListComp
\\#s
#
#	#	#MM$(###
#
#

c""""
#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#:AA#&A#c|dd5||j|jD]}||	ddddS#1swxYwYdS)Nrcrdr]r`s   rvisit_GeneratorExpz_Unparser.visit_GeneratorExprcrdc|dd5||j|jD]}||	ddddS#1swxYwYdS)Nr:r;r]r`s   r
visit_SetCompz_Unparser.visit_SetComprcrdc6|dd5||j|d||j|jD]}||	ddddS#1swxYwYdS)Nr:r;r#)rkrrrTr.r_r`s   rvisit_DictCompz_Unparser.visit_DictComps
\\#s
#
#	#	#MM$(###JJtMM$*%%%
#
#

c""""
#		#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#sA)BBBc|jr|dn|d|tj|j||j|d|jtj|j	g|j
R||j	|j
D],}|d||-dS)Nz async for z for r if )is_asyncrTrwr$r)rrr+r'rIifs)rr&	if_clauses   rvisit_comprehensionz_Unparser.visit_comprehensions=	 JJ}%%%%JJwK-t{;;;

dk"""

6K,1133TYJJJJJ

di   	%	%IJJvMM)$$$$	%	%rc,|tj|5|tj|j|j||j|d||j|d|tj|j	||j	ddddS#1swxYwYdS)Nrlz else )
rrr$r+rwr'rWrrrTrrts  rvisit_IfExpz_Unparser.visit_IfExp(s%

 
 !14
8
8	'	' 0 5 5 7 7DINNNMM$)$$$JJvMM$)$$$JJx    0$+>>>MM$+&&&	'	'	'	'	'	'	'	'	'	'	'	'	'	'	'	'	'	'sCD		D
D
c|jrUdd5fdj|jddddS#1swxYwYdSddS)Nr:r;c.dSrRrSrsrrUz%_Unparser.visit_Set.<locals>.<lambda>5s

4(8(8rz{*()})r>rkrNrrTrts` r	visit_Setz_Unparser.visit_Set2s9	 c3''
T
T 8 8 8 8$-SSS
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T

JJws%AAAc	fdfd}dd5fd|t|j|jddddS#1swxYwYdS)Nc|d|dSNr#rrT)kvrs  rwrite_key_value_pairz2_Unparser.visit_Dict.<locals>.write_key_value_pair<s?MM!JJtMM!rc|\}}|Ldtj||dS||dS)N**)rTrwr$r0r)rrzr{rr|s   r
write_itemz(_Unparser.visit_Dict.<locals>.write_itemAsoDAqy

4   ##K$4a888

a     $$Q*****rr:r;c.dSrRrSrsrrUz&_Unparser.visit_Dict.<locals>.<lambda>Nrr)rkrNrMrJrK)rr&rr|s`  @r
visit_Dictz_Unparser.visit_Dict;s					
		+		+		+		+		+		+\\#s
#
#		OO((((*c$)T[6Q6Q


																		s3A$$A(+A(c|ddt|jdkp"||tjk5||j|jddddS#1swxYwYdS)Nrcrdr)rnrIr>rpr$r)rXrrts  rvisit_Tuplez_Unparser.visit_TupleQs
__	NNaP4#6#6t#<#<{?P#P

	6	6

OODM49555	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6s!A??BB~not+rS)InvertNotr6r7)rrrrSc|j|jjj}|j|}|||5|||tjur|d|	||j
||j
ddddS#1swxYwYdSNr)unopr5rtruunop_precedencerrrTr$r7rwr8r)rr&operatoroperator_precedences    r
visit_UnaryOpz_Unparser.visit_UnaryOpas9TW.78"28<

 
 !4d
;
;	(	(JJx   #+*<<<

3 3T\BBBMM$,'''	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(sA.B;;B?B?rr/%<<>>|^&//r~)
rOrPMultMatMultDivModLShiftRShiftBitOrBitXorBitAndFloorDivPow)
rrSrrrrrrrrrrr~)r~c(|j|jjj}|j|}|||5||jvr|}|}n|}|}|||j	|
|j	|d|d|||j|
|jddddS#1swxYwYdSr)
rr5rtrubinop_precedencerrbinop_rassocr'rwrQrrTrR)rr&rrleft_precedenceright_precedences      rvisit_BinOpz_Unparser.visit_BinOpsQ:dg/89"3H=

 
 !4d
;
;	&	&4,,,"5":":"<"<#6  "5#6#;#;#=#= ;;;MM$)$$$JJ8''' 0$*===MM$*%%%	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&sB:DDDz==z!=<z<=>z>=iszis notinznot in)
EqNotEqLtLtEGtGtEIsIsNotInNotInc|tj|5|jtj|jg|jR||jt|j	|jD]J\}}|
d|j|jj
zdz||K	ddddS#1swxYwYdSr)rrr$r/rwr'rQcomparatorsrrMopsrTcmpopsrtru)rr&ors    r
visit_Comparez_Unparser.visit_Compares&

 
 $
7
7	!	!D 4 4 6 6	UDDTUUUUMM$)$$$DHd&677
!
!1

3Q[-A!BBSHIII

a    
!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!sB5C$$C(+C(andor)AndOr)rrcj|jjj}j|fd}|5d|dfd||jddddS#1swxYwYdS)Nc||dSr+)r'rwr)r&rrs rincreasing_level_traversez9_Unparser.visit_BoolOp.<locals>.increasing_level_traversesD"5":":"<"< 3T:::MM$rrc.Sr+rS)rrsrrUz(_Unparser.visit_BoolOp.<locals>.<lambda>sDJJqMMr)boolopsr5rtruboolop_precedencerrrNrK)rr&rrrrs`   @@rvisit_BoolOpz_Unparser.visit_BoolOps	< 1 :;"4X>	 	 	 	 	 	 
 
 !4d
;
;	[	[HAOO111113LdkZZZ	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[	[s	'A==BBc~|tj|j||jt|jtr4t|jjtr|d|d||j	dS)Nrr)
rwr$r:r.rrr,r/rTrrts  rvisit_Attributez_Unparser.visit_AttributesK,dj999

dj!!!dj(++	
4:;KS0Q0Q	JJsOOO

3

49rc|tj|j||j|dd5d}|jD]1}|r|dnd}||2|jD]1}|r|dnd}||2	ddddS#1swxYwYdS)NrcrdFr`T)	rwr$r:rCrrkrFrTrG)rr&rrs    r
visit_Callz_Unparser.visit_CallsCK,di888

di   
\\#s
#
#
	!
	!EY
!
!!JJt$$$$ E

a    ]
!
!!JJt$$$$ E

a    
!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!
	!sA5CC Ccd}|tj|j||j|dd5||jr&||j|jjn||jddddS#1swxYwYdS)Nc:t|to|jSr+)rr<r>)slice_values ris_non_empty_tuplez5_Unparser.visit_Subscript.<locals>.is_non_empty_tuples;..%$
rrern)	rwr$r:r.rrkrrXr>)rr&rs   rvisit_Subscriptz_Unparser.visit_Subscripts				
K,dj999

dj!!!
\\#s
#
#	*	*!!$*--
*
tz????

dj)))	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*sAB77B;>B;c|d|tj|j||jdS)Nr)rTrwr$r0r.rrts  r
visit_Starredz_Unparser.visit_StarredsF

3K,dj999

dj!!!!!rc0|ddS)NrWrSrts  rvisit_Ellipsisz_Unparser.visit_Ellipsiss

5rc$|jr||j|d|jr||j|jr1|d||jdSdS)Nrf)lowerrrTuppersteprts  rvisit_Slicez_Unparser.visit_Slices:	&MM$*%%%

3:	&MM$*%%%9	%JJsOOOMM$)$$$$$	%	%rc|d||j|5|jD]}||	ddddS#1swxYwYdS)Nzmatch )r]rsubjectrgcases)rr&cases   rvisit_Matchz_Unparser.visit_Matchs		(

dl###
ZZ\\	$	$

$
$

d####
$	$	$	$	$	$	$	$	$	$	$	$	$	$	$	$	$	$	$s A22A69A6c||j|jr1|d||jdSdSrx)rTargrrrts  r	visit_argz_Unparser.visit_argsV

48?	+JJtMM$/*****	+	+rc8d}|j|jz}dgt|t|jz
z|jz}t	t||dD]\}}|\}}|rd}n|d|||r*|d|||t|jkr|d|js|j	r|rd}n|d|d|jr_||jj
|jjr4|d||jj|j	rvt|j	|jD][\}}|d|||r*|d||\|j
r~|rd}n|d|d	|j
j
z|j
jr8|d||j
jdSdSdS)
NTr]Fr`raz, /rr#r~)posonlyargsrFrIdefaults	enumeraterMrTrvararg
kwonlyargsrrkw_defaultskwarg)	rr&rall_argsrrelementsads	         rvisit_argumentsz_Unparser.visit_argumentss#di/6S]]S-?-??@4=P(Xx)@)@!DD	"	"OE8DAq
!

4   MM!
!

3

a   D,----

5!!!;
	:$/
	:
!

4   JJsOOO{
:

4;?+++;):JJt$$$MM$+"8999?	%DOT-=>>
%
%1

4   

a   %JJsOOOMM!$$$:	5
!

4   JJtdjn,---z$
5

4   

dj344444	5	5
5
5rc|j|dn/||j|d||jdS)Nr~ra)rrTrr.rts  r
visit_keywordz_Unparser.visit_keywordDs\8JJtJJtx   JJsOOO

dj!!!!!rc|tj|5|d|5}||jdddn#1swxYwY|r|jdg|R|d|tj|j||jddddS#1swxYwYdS)Nlambdarr#)	rrr$r+rTrbrrFrwrW)rr&r`s   rvisit_Lambdaz_Unparser.visit_LambdaLsh

 
 !14
8
8	%	%JJx   
)F

di(((
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
3(((((JJt 0$)<<<MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%s6*C.A2&C.2A6	6C.9A6	:A'C..C25C2c||j|jr|d|jzdSdSNr)rTr|asnamerts  rvisit_aliasz_Unparser.visit_aliasWsI

49;	-JJv+,,,,,	-	-rc||j|jr1|d||jdSdSr)rcontext_expr
optional_varsrTrts  rvisit_withitemz_Unparser.visit_withitem\sY

d'(((	.JJvMM$,-----	.	.rc^|d||j|jr/|d||j|5||jddddS#1swxYwYdS)Nzcase rl)r]rpatternguardrTrgrWrts  rvisit_match_casez_Unparser.visit_match_casebs		'

dl###:	&JJvMM$*%%%
ZZ\\	%	%MM$)$$$	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%	%s:B""B&)B&c:||jdSr+)rr.rts  rvisit_MatchValuez_Unparser.visit_MatchValueks

dj!!!!!rc:||jdSr+)rUr.rts  rvisit_MatchSingletonz_Unparser.visit_MatchSingletonnsTZ(((((rcdd5fdj|jddddS#1swxYwYdS)Nrernc.dSrRrSrsrrUz/_Unparser.visit_MatchSequence.<locals>.<lambda>trr)rkrNrpatternsrts` rvisit_MatchSequencez_Unparser.visit_MatchSequenceqs
\\#s
#
#		OO(((($-


																		r[cL|j}|d}|d|dS)N_r)r|rT)rr&r|s   rvisit_MatchStarz_Unparser.visit_MatchStarws1y<D

:t::rc
Lfd}dd5|j}fd|t||jd|j}|/|rdd|ddddS#1swxYwYdS)	Nc|\}}|d|dSrxry)pairrzprs   rwrite_key_pattern_pairz<_Unparser.visit_MatchMapping.<locals>.write_key_pattern_pair~sHDAqMM!JJtMM!rr:r;c.dSrRrSrsrrUz._Unparser.visit_MatchMapping.<locals>.<lambda>rrTstrictr`r~)rkrJrNrMrrestrT)rr&rrJrs`    rvisit_MatchMappingz_Unparser.visit_MatchMapping}s					\\#s
#
#	(	(9DOO((((&D$-555



9D%JJt$$$

;;;'''	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(sA/BB Bc
tj|j|jdd5|j}fdj||j}|rKfd}|r	dfd|t||jdddddS#1swxYwYdS)	Nrcrdc.dSrRrSrsrrUz,_Unparser.visit_MatchClass.<locals>.<lambda>rrcl|\}}|d|dS)Nra)rTr)r
rrrs   rwrite_attr_patternz6_Unparser.visit_MatchClass.<locals>.write_attr_patterns<$(MD'JJ$zzz***MM'*****rr`c.dSrRrSrsrrUz,_Unparser.visit_MatchClass.<locals>.<lambda>sDJJt,,rTr)rwr$r:rzrrkrrN	kwd_attrsrTrMkwd_patterns)rr&rattrsrs`    rvisit_MatchClassz_Unparser.visit_MatchClasssYK,dh777

dh
\\#s
#
#		}HOO(((($-


NE
+++++
%JJt$$$,,,,&t0>>>																		sA;CC#&C#c|j}|j}||ddS|||jdS|tj|5|tj|j||j|d|jddddS#1swxYwYdS)Nr	r)	r|rrTrrr$r+rwr1r)rr&r|rs    r
visit_MatchAsz_Unparser.visit_MatchAssy,<JJsOOOOO
_JJty!!!!!$$[%5t<<
/
/##KOT\BBB

dl+++

-$)--...
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/s&ACCCc tj|5jtjg|jRfdj|jddddS#1swxYwYdS)Nc.dS)Nz | rSrsrrUz)_Unparser.visit_MatchOr.<locals>.<lambda>sDJJu$5$5r)rrr$r1rwr'rrNrrts` r
visit_MatchOrz_Unparser.visit_MatchOrs

 
 $
7
7	U	UD 4 4 6 6GGGGGOO5555t}dmTTT	U	U	U	U	U	U	U	U	U	U	U	U	U	U	U	U	U	UsABB
B)r_r+)rurrrrrNrXrZr]rTrrbrgrkrnrrrprwryr}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrr0r)r-r8r/r?rLrrUrrZrbrfrhrjrprrrurrrr$r.r7rrrr5r6r4r1r2r3r8r	frozensetrrrrrr-r,rrrrrrrrrrrrrrrrrrrr
rrrr"
__classcell__)rts@rr?r?s.3"""""


HHH
1111"""'''^'#^^!!!QQQ===111 )))
     %%%%%%###$$$"""
&&&MMMMMM%%%"""&&&&&&OOO$$$JJJJJJ******&&&
&
&
&
.
.
.111111	%	%	%:::0+++111
:
:
:'''---++++++$+++%%%%%%&1E$/$/$/$/$/LFQ88888171717fLLL<<<,TTT$$$
-
-
-PPP############%%%'''   ,666%cBBD





	O
(
(
(

E"











_



 9W%%L&&&$F!!!4((G +{~FF[[[			!!!$*** """
%%%$$$+++151515f"""	%	%	%---
...%%%""")))((((.///UUUUUUUrr?cHt}||Sr+)r?r)ast_objrDs  runparser's{{H>>'"""rcddl}|d}|d|dddd	
|ddd
dd|dddd|dddd|ddtdd|}|j5}|}dddn#1swxYwYt||jj	|j
|j }tt||j|j!dS)"Nrz
python -m ast)proginfilerbr ?rSz$the file to parse; defaults to stdin)r-nargsdefaulthelpz-mz--moder
)r
singler	func_typez(specify what kind of code must be parsed)r.choicesr/z--no-type-commentsTstore_falsez)don't add information about type comments)r.actionr/z-az--include-attributes
store_truez:include attributes such as line numbers and column offsets)r4r/z-iz--indentrbz'indentation of nodes (number of spaces))r-r.r/)r)rrZ)argparseArgumentParseradd_argumentFileTyper/
parse_argsr*readrr|rno_type_commentsprintrrrZ)r6parserrFr*rtrees      rmainr@sOOO

$
$/
$
:
:F
x'8'8d'8'C'C3 #CEEEh GGIII,d=HJJJ
4\.///jsAFHHHD	
)49DDYZZZD	$t(?
T
T
TUUUUUsC00C47C4__main__)r	r
)TF)r])T)Lrsys_ast
contextlibrrenumrrrrrYrrrrrrrrrrrobjectrrrr,rrpropertyrrr-rrrrrrrr/r0r1rTbytesboolrrrrorrrr<rrrmodrexpr_contextrrr!rw
float_info
max_10_exprTr$_SINGLE_QUOTESrr0r?r'r@rurhrr<module>rOsH4


22222222,,,,,,,,,,5t55555*8$8$8$v@@@@@@F"   F.			4205"""""J7(7(7(7(7(&7(7(7(t88888k888xwx,'7++HJ'7++HJ111114111(
2
2
2(d(dH8t66666x46666#ug	#	E844::t$ttCyyl$
	.DJJ	5U	7DIIz	%%%%%C%%%E
33333u333wuf6,55EJ:::::C::::::::l::::::::|::::::::L:::cn/!344
4
g>
////MUMUMUMUMUMUMUMU^ ###
VVV0zDFFFFFr