eSrSSKrSSKrSSK7 SSKJrJr SSKJrJ r J r SQSSSS.S jjr S r SRSSS .S jjr S rSrSSSjrSrSrSTSjr\R("S5rSUSjrSrSS.SjrSr"SS\5r"SS\5rSrSr\"\ S 5(d(S!r!S"r"S#r#S$r$\%"\!\"5\ l&\%"\#\$5\ l'"S%S&\(5r)S'r*"S(S)\ \)S*9r+"S+S,\ \)S*9r,"S-S.\ \)S*9r-"S/S0\ \)S*9r."S1S2\ \)S*9r/\/r0\+\1\2\34\,\44\-\54\.\("S5\64\/\("S3540r7\+\640r8\6S0\("S5S0\1S)\2S)\3S)\4S,\5S.\("S35S20r9"S4S5\:5r;"S6S7\;5r<"S8S9\;5r=\"\>S:5(dS;r?S<r@\%"\?\@5\>lA"S=S>\B5rC"S?S@\D5rE"SASB\D5rF"SCSD\D5rGSE\H"\RRS-5-rK\ "\5"SFSG55rLSHrMSIrN/\MQ\NQ7rO"SJSK\5rPSLrQSMVs0sHnU\R"5RU5_M snrTSNrUSOrV\WSP:Xa\V"5 ggs snf)Va 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)*)contextmanager nullcontext)IntEnumauto _simple_enumF) type_commentsfeature_versionoptimizec [nUS:a U[-nU(a U[-nUcSnO/[U[5(aUupxUS:wa[ SU35eUn[ XX&XES9$)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. rr zUnsupported major version: )_feature_versionr ) PyCF_ONLY_ASTPyCF_OPTIMIZED_ASTPyCF_TYPE_COMMENTS isinstancetuple ValueErrorcompile) sourcefilenamemoder r r flagsmajorminors )/opt/imh/python3.13/lib/python3.13/ast.pyparser"s} E!| ## ## OU + +&  A::5'BC C 6T$3 HHc^^^^[U[5(a[URS5SS9n[U[5(a UR nSmU4SjmU4SjmUUUU4SjmT"U5$)a< 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 eval)rcbSn[USS5=n(aUSU3- n[USU<3-5e)Nzmalformed node or stringlinenoz on line : )getattrr)nodemsglnos r_raise_malformed_node+literal_eval.._raise_malformed_nodeGsB($$/ /3 / Yse$ $CD8},--rc>[U[5(a([UR5[[ [ 4;aT"U5 UR$N)rConstanttypevalueintfloatcomplex)r&r)s r _convert_num"literal_eval.._convert_numLs:$))T$**-=c5RYEZ-Z !$ 'zzrc>[U[5(a\[UR[[45(a7T"UR 5n[UR[5(aU7$U*$T"U5$r,)rUnaryOpopUAddUSuboperand)r&r:r3s r_convert_signed_num)literal_eval.._convert_signed_numPs^ dG $ $DGGdD\)J)J"4<<0G$''4(( y  y D!!rc >[U[5(a UR$[U[5(a[ [ TUR 55$[U[5(a[[ TUR 55$[U[5(a[[ TUR 55$[U[5(af[UR[5(aGURRS:Xa-URUR s=:Xa/:Xa [5$ [U["5(aq[%UR&5[%UR(5:waT"U5 [+[-[ TUR&5[ TUR(555$[U[.5(a[UR0[2[445(a{T"UR65nT"UR85n[U[:[<45(a<[U[>5(a'[UR0[25(aX-$X- $T"U5$)Nset) rr-r/TuplermapeltsListlistSetr>CallfuncNameidargskeywordsDictlenkeysvaluesdictzipBinOpr7AddSubleftrightr0r1r2)r&rTrU_convertr3r;r)s rrVliteral_eval.._convertXs dH % %::  e $ $Xtyy12 2 d # #Hdii01 1 c " "s8TYY/0 0t$$DIIt)D)Diille# T]](Hb(H5L)I d # #499~T[[!11%d+C$))4$++689 9 e $ $DGGc3Z)H)H&tyy1D ,E$e --*UG2L2Ldggs++<'<'"4((r)rstrrlstrip Expressionbody)node_or_stringrVr3r;r)s @@@@r literal_evalr]:sg.#&&~44U;&I.*--',,. "))4 N ##r)indent show_emptyc^^^^^SUUUUU4Sjjm[U[5(d"[SURR-5eTb[T[ 5(dST-mT"U5S$)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. If show_empty is False, then empty lists and fields that are None will be omitted from the output for better readability. rc>^TbTS- mSTT--nSTT--nOSnSn[U[5(Ga[U5n/n/nSnT nURHn [ X 5n U c[ XIS5cSnM#T(d@U bU /:Xa7[U[ [45(dUR[U 55 MjU(dURU5 /nT "U T5upU=(a U nU(aURU <SU <35 MURU 5 M T(apUR(a_URHOn [ X 5n U c[ XIS5cM!T "U T5upU=(a U nURU <SU <35 MQ U(aC[U5S ::a4URR<S SRU5<S 3U(+4$URR<S U<URU5<S 3S 4$[U[ 5(a.U(dg SU<URU U4SjU55<S3S 4$[U5S4$![ a SnGM#f=f![ a GMAf=f)N z, , T.=r()F)z[]T[c3<># UHnT"UT5Sv M g7frN).0x_formatlevels r (dump.._format..s/Sd50A!0Dds])rASTr._fieldsr%AttributeErrorr-MatchSingletonappendreprextend _attributesrL __class____name__joinrC)r&rpprefixsepclsrI args_buffer allsimplerJnamer/simpleroannotate_fieldsinclude_attributesr^r_s ` rrodump.._formatsU   QJEFUN*F&5.(CFC dC t*CDKI&H #D/E=WS%<%D#H"%2+'th-GHH&&tE{3!KK ,"$K 'u 5 %0& KK4 78KK&5%6"d&6&6 ,,D! ' 3}C)@)H $+E5$9ME ) 4fIKK4 78-SY!^#'>>#:#:DIIdOLRVhVV!%!8!8&#((4.QSXX X d # #!%sxx/Sd/S'STV[[ [Dz4U&#H8*! !s$ I( I<( I98I9< J  J zexpected AST, got %r )r)rrt TypeErrorr|r}rX)r&rrr^r_ros ````@rdumprusb$; ; z dC .1H1HHII *VS"9"9v 4= rcSHjnX!R;dMX R;dM%[XS5nUc*[X5(dMFURS5(dM^[ XU5 Ml U$)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_)r{r%hasattr startswithsetattr)new_nodeold_nodeattrr/s r copy_locationrse G '' 'D4H4H,HHD1E ''DOOF,C,C.G Orc,^U4SjmT"USSSS5 U$)ac 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*. c>SUR;a$[US5(dXlO URnSUR;a![USS5cX0lO URnSUR;a$[US5(dX lO UR nSUR;a![USS5cX@lO UR n[U5H nT"XQX#U5 M g)Nr#rrr)r{rr#r%rrriter_child_nodes)r&r#rrrchild_fixs rr#fix_missing_locations.._fixs t'' '4**$  4++ +t\408",!__ 4++ +4..",!__ t// /t-t4<&4#!%!4!4%d+E   G,rrbrrl)r&rs @rfix_missing_locationsrs H. q!Q Krrbc&[U5Hn[U[5(a[USS5U-UlM/SUR ;a[USS5U-UlSUR ;dMf[USS5=ncMxX1-UlM U$)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#r{r)r&nrrs rincrement_linenors d eZ ( ("5(A6:EL  u(( ("5(A6:EL E-- -&ulA>>K)~E  Krc#t# URHnU[X54v M g![a M%f=f7f)zg Yield a tuple of ``(fieldname, value)`` for each field in ``node._fields`` that is present on *node*. N)rur%rv)r&fields r iter_fieldsrs=  -- -   s8'8 5858c## [U5H[up[U[5(aUv M [U[5(dM7UHn[U[5(dMUv M M] g7f)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)rrrtrC)r&rritems rrr"sS #4(  eS ! !K t $ $dC((J )s?A.A.! A.c[U[[[[45(d"[ SUR R-5eUR(a"[URS[5(dgURSRn[U[5(a,[UR[5(a URnOgU(aSSK nURU5nU$)a+ 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)rAsyncFunctionDef FunctionDefClassDefModulerr|r}r[Exprr/r-rXinspectcleandoc)r&cleantextrs r get_docstringr0s d-{HfM N N2T^^5L5LLMM 99DIIaL$77 99Q<  D$!!jS&A&Azz % Krz(.*?(?:\r\n|\n|\r|$))c/n[[RU5S5H$up4UbX1:a U$URUS5 M& U$)zuSplit a string into lines ignoring form feed and other chars. This mimics how the Python parser splits source code. rbr) enumerate _line_patternfinditerrx)rmaxlineslinesr#matchs r_splitlines_no_ffrIsT E"=#9#9&#A1E   F$5  L  U1XF Lrc>SnUHnUS;aX- nMUS- nM U$)z6Replace all chars except '\f\t' in a line with spaces.rdz rrl)rresultcs r_pad_whitespacerVs/ F  ; KF cMF  Mr)paddedcURb URcgURS- nURS- nURnURn[ XS-S9nXC:Xa"XsR 5XVR5$U(a-[XsR 5SUR55nOSnXUR 5USR5-n XtR 5SUR5n XsS-UnURSU 5 URU 5 SRU5$![a gf=f)a.Get 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. Nrb)rrdr) rrr#rrvrencodedecoderinsertrxr~) rr&rr#rrrrpaddingfirstlasts rget_source_segmentras@ ?? "d&9&9&Aq__q( __ ,, f!| % sE6E E  E c## SSKJn U"U/5nU(a8UR5nUR[ U55 Uv U(aM7gg7f)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) collectionsrpopleftrzr)r&rtodos rrrsA " $=D ||~ $T*+  $s A AAc*\rSrSrSrSrSrSrSrg) NodeVisitoria 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. cpSURR-n[XUR5nU"U5$)z Visit a node.visit_)r|r}r% generic_visit)selfr&methodvisitors rvisitNodeVisitor.visits2DNN333$(:(:;t}rc [U5Huup#[U[5(a3UH+n[U[5(dMUR U5 M- MM[U[5(dMdUR U5 Mw g)z9Called if no explicit visitor function exists for a node.N)rrrCrtr)rr&rr/rs rrNodeVisitor.generic_visits^'-LE%&&!D!$,, 4("E3'' 5! .rctURn[R[U55nUc1[R 5HupE[ X$5(dMUn O Ub7SU-n[ X5nSSKnURUS3[S5 U"U5$URU5$![a Nf=f)Nrrz" is deprecated; add visit_Constant) r/_const_node_type_namesgetr.itemsrr%warningswarnDeprecationWarningrvr) rr&r/ type_namerrrrrs rvisit_ConstantNodeVisitor.visit_Constants *..tE{;  399; e)) $I<   )F %!$/  (JK0!5t}$!!$''"  s( B** B76B7rlN) r} __module__ __qualname____firstlineno____doc__rrr__static_attributes__rlrrrrs& "(rrc\rSrSrSrSrSrg)NodeTransformeria 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) c[U5Hup#[U[5(au/nUHgn[U[5(a>UR U5nUcM.[U[5(dUR U5 MVUR U5 Mi XCSS&M[U[5(dMUR U5nUc [X5 M[XU5 M U$r,) rrrCrtrrzrxdelattrr)rr&r old_value new_valuesr/rs rrNodeTransformer.generic_visits +D 1 E)T** &E!%-- $ 5 1 =$!+E3!7!7&--e4$%%e,' *! Is++::i0#D(D2%!2& rrlN)r}rrrrrrrlrrrrs !FrrzN{name} is deprecated and will be removed in Python {remove}; use value insteadzU{name} is deprecated and will be removed in Python {remove}; use ast.Constant insteadrcLSSKnURS[SS9 UR$)Deprecated. Use value instead.rN Attribute nrmessageremover _deprecated_DEPRECATED_VALUE_ALIAS_MESSAGEr/rrs r _n_getterr, #B7  zzrcBSSKnURS[SS9 Xlg)Nrrrrrrr/rs r _n_setterr' #B7   rcLSSKnURS[SS9 UR$)rrN Attribute srrrrs r _s_getterr&rrcBSSKnURS[SS9 Xlg)Nrrrrrrs r _s_setterr.rrc \rSrSrSrSrSrg)_ABCi8cSUlg)Nz3Deprecated AST node class. Use ast.Constant instead)r)rrIs r__init__ _ABC.__init__:s O rcU[;a&SSKnURSUR3[SS9 [ U[ 5(dgU[;aLURn[ U[U5=(a% [ U[RUS55(+$[RX5$![a gf=f)Nrast.rrFrl) _const_typesrrr_DEPRECATED_CLASS_MESSAGErr-r/_const_types_notrrvr.__instancecheck__)rinstrr/s rr_ABC.__instancecheck__=s ,    s''()1 !  $)) ,    ul3&78I"5*:*>*>sB*GHH%%c00"  s B22 B?>B?rlN)r}rrrr rrrlrrr r 8s P1rr cjUHYnX0R;aMURRU5nU[U5:dM@[URSU<35e U[ ;a1SSKnURSUR3[SS9 [U0UD6$[R"U/UQ70UD6$)Nz" got multiple values for argument rrrr) ruindexrLrr}rrrrrr-__new__)rrIkwargskeyposrs r_newrSs kk ! kk$ T?s||n,NsgVW W  l3##$ %/HQX  (((   C 1$ 1& 11rc\rSrSrSr\rSrg)Numic)rrlNr}rrrrurrrrlrrrrc GGrr) metaclassc\rSrSrSr\rSrg)StrigsrlNrrlrrr"r"grrr"c\rSrSrSr\rSrg)Bytesikr#rlNrrlrrr&r&krrr&c\rSrSr\rSrg) NameConstantiorlN)r}rrrrrrrlrrr(r(osGrr(c\rSrSrSrSrSrg)EllipsisirrlcU[La(SSKnURS[SS9 [ S/UQ70UD6$[R "U/UQ70UD6$)Nrz ast.Ellipsisrr.) _ast_Ellipsisrrrr-r)rrIrrs rrEllipsis.__new__usZ -    (A' ! C1$1&1 15d5f55rN)r}rrrrurrrlrrr*r*rs G6rr*.c\rSrSrSrSrg)sliceizDeprecated AST node class.rlNr}rrrrrrlrrr/r/s$rr/c\rSrSrSrSrSrg)Indexiz@Deprecated AST node class. Use the index value directly instead.c U$r,rl)rr/rs rr Index.__new__s rrlNr}rrrrrrrlrrr2r2s Jrr2c"\rSrSrSrSSjrSrg)ExtSliceiz1Deprecated AST node class. Use ast.Tuple instead.rlc >[[U5[540UD6$r,)r?rCLoad)rdimsrs rrExtSlice.__new__sT$Z2622rN)rlr5rlrrr7r7s ;3rr7r:cUR$)zDeprecated. Use elts instead.rArs r _dims_getterr?s yyrcXlgr,r=rr/s r _dims_setterrBs rc\rSrSrSrSrg)Suitei/Deprecated AST node class. Unused in Python 3.rlNr0rlrrrDrD9rrDc\rSrSrSrSrg)AugLoadirErlNr0rlrrrHrHrFrrHc\rSrSrSrSrg)AugStoreirErlNr0rlrrrJrJrFrrJc\rSrSrSrSrg)ParamirErlNr0rlrrrLrLrFrrL1ec\rSrSrSr\"5r\"5r\"5r\"5r \"5r \"5r \"5r \"5r \"5r\r\"5r\"5r\"5r\"5r\"5r\"5r\"5r\"5r\"5rSrSrg) _Precedenceiz5Precedence table that originated from python grammar.cPURUS-5$![a Us$f=fNrb)r|rr>s rnext_Precedence.nexts. >>$(+ + K s  %%rlN)r}rrrrr NAMED_EXPRTUPLEYIELDTESTORANDNOTCMPEXPRBORBXORBANDSHIFTARITHTERMFACTORPOWERAWAITATOMrRrrlrrrOrOs?J FE FE 6D B &C &C &C 6D C 6D 6D FE FE 6D VF FE FE 6DrrO)'")z"""'''c^\rSrSrSrSrSrSrSrSSjr Sr \ SS j5r \ S S .S j5r \ S 5rSrSrSrSrSrSrU4SjrSrSrSrSrSrSrSrSrSrSrSr S r!S!r"S"r#S#r$S$r%S%r&S&r'S'r(S(r)S)r*S*r+S+r,S,r-S-r.S.r/S/r0S0r1S1r2S2r3S3r4S4r5S5r6S6r7S7r8S8r9S9r:S:r;S;rS>r?S?r@\AS@SA.SBjrB\ASC.SDjrCSErDSSFjrESGrFSHrGSIrHSJrISKrJSLrKSMrLSNrMSOrNSPrOSQrPSRrQSSrRSTrSSUrTSVSWSXSYSZ.rU\VR\VR\VR\VRS[.rYS\rZSXSYS]S^S_S`SaSbScSdSeSfSgSh. r[\VR\VR\VR\VR\VR\VR\VR\VR\VR\VR\VR\VR\VRSi. rc\d"Sj5reSkrfSlSmSnSoSpSqSrSsStSuSv. rgSwrhSxSySz.ri\VR\VRS{.rlS|rmS}rnS~roSrpSrqSrrSrsSrtSruSrvSrwSrxSrySrzSr{Sr|Sr}Sr~SrSrSrSrSrSrU=r$) _UnparserizMethods in this class recursively traverse an AST and output source code for the abstract syntax; original formatting is disregarded.cJ/Ul0Ul0UlSUlSUlg)NrF)_source _precedences _type_ignores_indent _in_try_starr>s rr _Unparser.__init__s(  !rc[U5nU"[U55 UHnU"5 U"U5 M g![a gf=f)z7Call f on each item in seq, calling inter() in between.N)iterrR StopIteration)rinterfseqrns r interleave_Unparser.interleavesG3i  d3iL!   s7 AAc^[U5S:XaU"US5 TRS5 gTRU4SjX5 g)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.rbr,c&>TRS5$Nrewriter>sr&_Unparser.items_view.. DJJt$4rN)rLrry)r traverserrs` r items_view_Unparser.items_views6 u:? eAh  JJsO OO4i GrcJUR(aURS5 gg)z8Adds a newline if it isn't the start of generated sourcercN)rmrr>s r maybe_newline_Unparser.maybe_newline s << JJt  rcfUR5 URSUR-U-5 g)zPIndent a piece of text and append it, according to the current indentation levelz N)rrrprrs rfill_Unparser.fills*  6DLL(4/0rc:URRU5 g)zAdd new source partsN)rmrzrs rr_Unparser.writes D!rNc#N# Uc/nURnXlUv X lg7fr,)rm)rbufferoriginal_sources rbuffered_Unparser.buffereds' >F,,  & s#%extrac## URS5 U(aURU5 U=RS- slSv U=RS-slg7f)zA 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. :rbN)rrp)rrs rblock_Unparser.block$s@ 3  JJu      sAAc#X# URU5 Sv URU5 g7f)zA context manager for preparing the source for expressions. It adds *start* to the buffer and enters, after exit it adds *end*.Nr)rstartends rdelimit_Unparser.delimit2s! 5  3s(*cFU(aURX5$[5$r,)rr)rrr conditions r delimit_if_Unparser.delimit_if;s <<+ += rcLURSSURU5U:5$)z,Shortcut to adding precedence related parensrgrh)rget_precedence)r precedencer&s rrequire_parens_Unparser.require_parensAs%sC)<)[U[5(aUHnURU5 M g[TU]U5 gr,)rrCtraversesuperr)rr&rr|s rr_Unparser.traverseas4 dD ! ! d# GM$ rch/UlURU5 SRUR5$)zzOutputs a source code string that, if converted back to an ast (using ast.parse) will generate an AST equivalent to *node*rd)rmrr~rs rr_Unparser.visitks*  dwwt||$$rcURU5=n(a0URU5 URURSS5 gURUR5 grQ)r_write_docstringrr[)rr& docstrings r"_write_docstring_and_traverse_body,_Unparser._write_docstring_and_traverse_bodyrsL//5 5I 5  ! !) , MM$))AB- ( MM$)) $rcURVs0sHnURSUR3_M snUlUR U5 URR 5 gs snf)Nignore) type_ignoresr#tagrorclear)rr&rs r visit_Module_Unparser.visit_Moduleyse++ + MMVFJJ<0 0+  //5   "  s$A'c ^TRSS5 TRU4SjTRUR5 SSS5 TR S5 TRUR 5 g!,(df  N;=f)Nrgrhc&>TRS5$r~rr>srr._Unparser.visit_FunctionType.. 4(r -> )rryrargtypesrreturnsrs` rvisit_FunctionType_Unparser.visit_FunctionTypesX \\#s # OO($-- $ 6 dll# $ #s ,A55 BcUR5 UR[RUR5 UR UR5 gr,)rrrOrVr/rrs r visit_Expr_Unparser.visit_Exprs5  K--tzz: djj!rcpUR[RU5 UR[RUR UR 5 URUR 5 URS5 URUR 5 SSS5 g!,(df  g=f)Nz := ) rrOrTrrftargetr/rrrs rvisit_NamedExpr_Unparser.visit_NamedExprsp  !7!7 >    0 0$++tzz J MM$++ & JJv  MM$** % ? > >s A=B'' B5c~^TRS5 TRU4SjTRUR5 g)Nzimport c&>TRS5$r~rr>srr(_Unparser.visit_Import.. 4 0r)rryrnamesrs` r visit_Import_Unparser.visit_Imports( ) 0$--LrcF^TRS5 TRSUR=(d S-5 UR(aTRUR5 TRS5 TR U4SjTR UR 5 g)Nzfrom .rz import c&>TRS5$r~rr>srr,_Unparser.visit_ImportFrom..rr)rrrpmoduleryrrrs` rvisit_ImportFrom_Unparser.visit_ImportFromsd ' 3$**/*+ ;; JJt{{ # : 0$--LrcXUR5 URHEnUR[RU5 UR U5 UR S5 MG UR UR5 URU5=n(aUR U5 gg)N = ) rtargetsrrOrUrrr/r)rr&rrs r visit_Assign_Unparser.visit_Assigns llF    1 16 : MM& ! JJu # djj!006 6< 6 JJ| $ 7rcUR5 URUR5 URSURUR R R-S-5 URUR5 g)Nrz= ) rrrrbinopr7r|r}r/rs rvisit_AugAssign_Unparser.visit_AugAssignsZ  dkk" 3DGG$5$5$>$>??$FG djj!rcUR5 URSSUR(+=(a [UR[ 55 UR UR5 SSS5 URS5 UR UR5 UR(a-URS5 UR UR5 gg!,(df  Ny=f)Nrgrhr$r) rrrrrrGrr annotationr/rs rvisit_AnnAssign_Unparser.visit_AnnAssigns __S#4;;'X:dkkSW;X Y MM$++ &Z 4 doo& :: JJu  MM$** %  Z Ys C## C1cURS5 UR(a-URS5 URUR5 gg)Nreturnr)rr/rrrs r visit_Return_Unparser.visit_Returns5 ( :: JJsO MM$** % rc&URS5 g)Npassrrs r visit_Pass_Unparser.visit_Passs &rc&URS5 g)Nbreakrrs r visit_Break_Unparser.visit_Breaks 'rc&URS5 g)Ncontinuerrs rvisit_Continue_Unparser.visit_Continues *rc~^TRS5 TRU4SjTRUR5 g)Nzdel c&>TRS5$r~rr>srr(_Unparser.visit_Delete..rr)rryrrrs` r visit_Delete_Unparser.visit_Deletes( & 0$--NrcURS5 URUR5 UR(a-UR S5 URUR5 gg)Nzassert re)rrtestr'rrs r visit_Assert_Unparser.visit_AssertsF ) dii 88 JJt  MM$(( # rc~^TRS5 TRU4SjTRUR5 g)Nzglobal c&>TRS5$r~rr>srr(_Unparser.visit_Global..rrrryrrrs` r visit_Global_Unparser.visit_Globals( ) 0$**djjIrc~^TRS5 TRU4SjTRUR5 g)Nz nonlocal c&>TRS5$r~rr>srr*_Unparser.visit_Nonlocal..rrrrs` rvisit_Nonlocal_Unparser.visit_Nonlocals( + 0$**djjIrchUR[RU5 URS5 UR(aVURS5 UR [R UR5 URUR5 SSS5 g!,(df  g=f)Nawaitr)rrOrerr/rrfrrs r visit_Await_Unparser.visit_Awaitl  !2!2D 9 JJw zz 3##K$4$4djjA djj) : 9 9 A9B## B1chUR[RU5 URS5 UR(aVURS5 UR [R UR5 URUR5 SSS5 g!,(df  g=f)Nyieldr)rrOrVrr/rrfrrs r visit_Yield_Unparser.visit_Yieldrrc\UR[RU5 URS5 UR(d [ S5eUR [RUR5 URUR5 SSS5 g!,(df  g=f)Nz yield from z-Node can't be used without a value attribute.) rrOrVrr/rrrfrrs rvisit_YieldFrom_Unparser.visit_YieldFromsm  !2!2D 9 JJ} %:: !PQQ    0 0$** = MM$** % : 9 9s A3B B+cVURS5 UR(dUR(a [S5egUR S5 UR UR5 UR(a-UR S5 UR UR5 gg)Nraisez*Node can't use cause without an exception.rz from )rexccauserrrrs r visit_Raise_Unparser.visit_Raisesn 'xxzz #MOO  3 dhh :: JJx MM$** % rcURS5 UR5 URUR5 SSS5 URHnURU5 M UR (aEURS5 UR5 URUR 5 SSS5 UR (aFURS5 UR5 URUR 5 SSS5 gg!,(df  N=f!,(df  Nw=f!,(df  g=f)Ntryelsefinally)rrrr[handlersorelse finalbody)rr&exs r do_visit_try_Unparser.do_visit_trys % ZZ\ MM$)) $--B MM"  ;; IIf  dkk* >> IIi  dnn- \ s#DD)2D: D&) D7: EcpURnSUlURU5 X lg!X lf=f)NFrqr5rr&prev_in_try_stars r visit_Try_Unparser.visit_Trys7,, 1 %D    d # 0  0 -5cpURnSUlURU5 X lg!X lf=f)NTr8r9s r visit_TryStar_Unparser.visit_TryStars7,, 1 $D    d # 0  0 r=cURUR(aSOS5 UR(a,URS5 UR UR5 UR (a,URS5 URUR 5 UR 5 UR UR5 SSS5 g!,(df  g=f)Nzexcept*exceptr as )rrqr.rrrrr[rs rvisit_ExceptHandler_Unparser.visit_ExceptHandler!s t00)h? 99 JJsO MM$)) $ 99 JJv  JJtyy ! ZZ\ MM$)) $\\s /C C"c(UR5 URH%nURS5 URU5 M' URSUR-5 [ US5(aUR UR5 URSSUR=(d URS9 SnURH/nU(aURS5 OS nURU5 M1 URH/nU(aURS5 OS nURU5 M1 SSS5 UR5 URU5 SSS5 g!,(df  N9=f!,(df  g=f) N@zclass type_paramsrgrh)rFreT)rdecorator_listrrrr_type_params_helperrHrbasesrJrrr)rr&decocommaes rvisit_ClassDef_Unparser.visit_ClassDef,s' ''D IIcN MM$ ( (TYY&' 4 ' '  $ $T%5%5 6 __S#4::3N_ OEZZJJt$ E a  ]]JJt$ E a #PZZ\  3 3D 9\P O\s>BE2F2 F Fc(URUS5 g)Ndef_function_helperrs rvisit_FunctionDef_Unparser.visit_FunctionDefFs dE*rc(URUS5 g)Nz async defrSrs rvisit_AsyncFunctionDef _Unparser.visit_AsyncFunctionDefIs dK0rcUR5 URH%nURS5 URU5 M' US-UR-nURU5 [ US5(aUR UR5 URSS5 URUR5 SSS5 UR(a,URS5 URUR5 URURU5S9 URU5 SSS5 g!,(df  N=f!,(df  g=f)NrGrrHrgrhrr)rrIrrrrrJrHrrIrrrrr)rr& fill_suffixrLdef_strs rrT_Unparser._function_helperLs ''D IIcN MM$ (#dii/ ' 4 ' '  $ $T%5%5 6 \\#s # MM$)) $$ << JJv  MM$,, ' ZZd33D9Z :  3 3D 9; : $ # ; :s'E&E E E c^UbM[U5S:a=TRSS5 TRU4SjTRU5 SSS5 ggg!,(df  g=f)Nrrirsc&>TRS5$r~rr>srr/_Unparser._type_params_helper..` 4(8r)rLrryr)rrHs` rrJ_Unparser._type_params_helper]sO  "s;'7!';c3' 8$--U('(< "''s "A A!c0URUR5 UR(a,URS5 URUR5 UR(a-URS5 URUR5 gg)Nr$r)rrboundr default_valuers r visit_TypeVar_Unparser.visit_TypeVarbsa 499 :: JJt  MM$** %    JJu  MM$,, - rcURSUR-5 UR(a-URS5 URUR5 gg)Nrrrrrerrs rvisit_TypeVarTuple_Unparser.visit_TypeVarTupleksB 3?#    JJu  MM$,, - rcURSUR-5 UR(a-URS5 URUR5 gg)N**rrirs rvisit_ParamSpec_Unparser.visit_ParamSpecqsC 4$))#$    JJu  MM$,, - rcURS5 URUR5 URUR5 UR S5 URUR 5 g)Nztype r)rrrrJrHrr/rs rvisit_TypeAlias_Unparser.visit_TypeAliaswsN ' dii    !1!12 5 djj!rc(URSU5 g)Nzfor  _for_helperrs r visit_For_Unparser.visit_For~s &rc(URSU5 g)Nz async for rtrs rvisit_AsyncFor_Unparser.visit_AsyncFors t,rc~URU5 UR[RUR5 UR UR5 UR S5 UR UR5 URURU5S9 UR UR5 SSS5 UR(aFURS5 UR5 UR UR5 SSS5 gg!,(df  Nf=f!,(df  g=f)N in rr/) rrrOrUrrrrtrrr[r2)rrr&s rru_Unparser._for_helpers $ K--t{{; dkk" 6 dii ZZd33D9Z : MM$)) $; ;; IIf  dkk* ; :s!D7D. D+. D<cURS5 URUR5 UR5 URUR5 SSS5 UR (a[ UR 5S:Xa[UR S[5(aUR SnURS5 URUR5 UR5 URUR5 SSS5 UR (a=[ UR 5S:Xa$[UR S[5(aMUR (aFURS5 UR5 URUR 5 SSS5 gg!,(df  GNp=f!,(df  N=f!,(df  g=f)Nzif rbrzelif r/) rrr rr[r2rLrIfrs rvisit_If_Unparser.visit_Ifs1 % dii ZZ\ MM$)) $kkc$++.!3 4;;q>SU8V8V;;q>D IIg  MM$)) $ dii( kkc$++.!3 4;;q>SU8V8V ;; IIf  dkk* \ s#G8GG% G G"% G3cURS5 URUR5 UR5 URUR5 SSS5 UR (aFURS5 UR5 URUR 5 SSS5 gg!,(df  Nf=f!,(df  g=f)Nzwhile r/)rrr rr[r2rs r visit_While_Unparser.visit_Whiles ( dii ZZ\ MM$)) $ ;; IIf  dkk* \sB9C 9 C Cc$^TRS5 TRU4SjTRUR5 TR TR U5S9 TRUR 5 SSS5 g!,(df  g=f)Nzwith c&>TRS5$r~rr>srr&_Unparser.visit_With..rrrrryrrrrr[rs` r visit_With_Unparser.visit_Withs] ' 0$--L ZZd33D9Z : MM$)) $; : : B Bc$^TRS5 TRU4SjTRUR5 TR TR U5S9 TRUR 5 SSS5 g!,(df  g=f)Nz async with c&>TRS5$r~rr>srr+_Unparser.visit_AsyncWith..rrrrrs` rvisit_AsyncWith_Unparser.visit_AsyncWiths] -  0$--L ZZd33D9Z : MM$)) $; : :rF quote_typesescape_special_whitespacec^^^U4SjnSR[UT55mUnST;aUVs/sHof[;dMUPM nnUVs/sH ofT;dM UPM nnU(d,[T5m[ U4SjU5TS5nTSSU/4$T(aDUR U4SjS 9 USSTS:Xa"[ US5S :XdeTS SS -TS-mTU4$s snfs snf) z{Helper for writing string literals, minimizing escapes. Returns the tuple (string literal to write, possible quote types). c>T(dUS;aU$US:XdUR5(d URS5RS5$U$)Nz \unicode_escapeascii) isprintablerr)rrs r escape_char2_Unparser._str_literal_helper..escape_charsD-fDy xx 0188AAHrrdrcc3>># UHnTSU;dMUv M g7frkrl)rmqstrings rrq0_Unparser._str_literal_helper..sC[F1IN!![s  rrbr c>USTS:H$)Nrr rl)rescaped_strings rr/_Unparser._str_literal_helper..sqt~b7I/Ir)rrNr)r~r@ _MULTI_QUOTESryrRsortrL) rrrrrpossible_quotesrquoters ` ` @r_str_literal_helper_Unparser._str_literal_helpers   [&!9:% > !*9P/Q-=Oq/OP&5Qo.9P1oQ&\FC[CVAYOE!B<%( (   %I Jq!!$r(::?1-.!333!/!4t!;nR>P!P..#QQs C%C% C*C*rc^URXS9upUSnURUUU35 g)zKWrite string literal value with a best effort attempt to avoid backslashes.rrN)rr)rrr quote_types r_write_str_avoiding_backslashes)_Unparser._write_str_avoiding_backslashess:"66v6W ^  j\&*67rcURS5 /nURH]nUR5nURU5 SSS5 UR SR W5[ U[545 M_ /n[[5nSnUHup8U(a9URUUSS9up9[U 5RU5(aSn OfU nONSU;a&UV s/sHo[;dMU PM nn U(deUV s/sH oU;dM U PM n n U (aU nUR U5 M U(azS/nUR5 UHaup8U(aD[SU-5nS n UR!U 5(d[U55eU[#U 5S nUR U5 Mc SR U5nUS n URU UU 35 g!,(df  GN=fs sn fs sn f) NrwrdFTrrcrirhz'"r r)rrNr_write_fstring_innerrxr~rr-rC _ALL_QUOTESrr> isdisjointrrryrrL) rr& fstring_partsr/rnew_fstring_partsrfallback_to_repr is_constantnew_quote_typesrexpected_prefixrs rvisit_JoinedStr_Unparser.visit_JoinedStrs 3 [[EF))%0!  *UH"=> !;'  "/ E)-)A)A +.2*B*& '22;??'+$- 5=.9"Pk-=O1kK"P&&;.9"Lke^1k"L""1K  $ $U +'#0* !'K  # # %&3" u-E&+O ++O<<Id5kI<!#o"6r:E!((/ '4)* ^  j\% 56[!,#Q#Ms#G-% G?6G? HH- G< c`[U[5(a#URHnURX2S9 M g[U[5(a[UR [ 5(aUR RSS5RSS5nU(aHURSS5nURSS 5nURS S 5nURS S 5nURU5 g[U[5(aURU5 g[SU<35e)Nis_format_spec{z{{}z}}rz\\rgz\'rhz\"rcz\nz"Unexpected node inside JoinedStr, ) r JoinedStrrNrr-r/rXreplacerFormattedValuevisit_FormattedValuer)rr&rr/s rr_Unparser._write_fstring_inners dI & &))%)O% h ' 'Jtzz3,G,GJJ&&sD199#tDE dF3 c51 c51 dE2 JJu  n - -  % %d +A$JK Krc^U4SjnTRSS5 U"UR5nURS5(aTRS5 TRU5 URS:wa'TRS[ UR535 UR (a+TRS5 TRUR SS 9 SSS5 g!,(df  g=f) Nc>[T5"5nUR[RR 5U5 UR U5$r,)r.rrOrWrRr)innerunparserrs r unparse_inner5_Unparser.visit_FormattedValue..unparse_inner-s<Dz|H  # #K$4$4$9$9$;U C>>%( (rrrrr !rTr)rr/rr conversionchr format_specr)rr&rexprs` rr_Unparser.visit_FormattedValue,s ) \\#s # ,Ds## 3 JJt "$ Qs4??3456 3))$*:*:4)P$ # #s B>C!! C/c:URUR5 gr,)rrHrs r visit_Name_Unparser.visit_Name>s 477rcUR5 URS:XaURS5 URUR[ S9 g)Nur)rkindrrr/rrs rr_Unparser._write_docstringAs9 99  JJsO ,,TZZ],Src  [U[[45(aNUR[ U5R S[ 5R SS[ S[ S355 gUR[ U55 g)Ninfnanrg-rh)rr1r2rryr_INFSTRrAs r_write_constant_Unparser._write_constantGsb eeW- . . JJU (!G9AgYa 89  JJtE{ #rc~URn[U[5(a8URSS5 UR UR U5 SSS5 gUSLaUR S5 gURS:XaUR S5 UR UR5 g!,(df  g=f)Nrgrh....r)r/rrrrrrr)rr&r/s rr_Unparser.visit_ConstantSs  eU # #c3' 4 4e<(' c\ JJu yyC 3   ,('s B.. B<c^TRSS5 TRU4SjTRUR5 SSS5 g!,(df  g=f)Nrirsc&>TRS5$r~rr>srr&_Unparser.visit_List..arr)rryrrArs` r visit_List_Unparser.visit_List_s6 \\#s # OO4dmmTYY O$ # # ,A  AcURSS5 URUR5 URHnURU5 M SSS5 g!,(df  g=f)Nrirsrrelt generatorsrr&gens rvisit_ListComp_Unparser.visit_ListCompcF \\#s # MM$(( # c"'$ # # AA A*cURSS5 URUR5 URHnURU5 M SSS5 g!,(df  g=f)Nrgrhrrs rvisit_GeneratorExp_Unparser.visit_GeneratorExpirrcURSS5 URUR5 URHnURU5 M SSS5 g!,(df  g=f)Nrrrrs r visit_SetComp_Unparser.visit_SetComporrc2URSS5 URUR5 URS5 URUR5 UR HnURU5 M SSS5 g!,(df  g=f)Nrrr$)rrrrr/rrs rvisit_DictComp_Unparser.visit_DictCompusb \\#s # MM$(( # JJt  MM$** % c"' $ # #s A,B Bc@UR(aURS5 OURS5 UR[RUR 5 UR UR 5 URS5 UR"[RR5UR/URQ76 UR UR5 URH%nURS5 UR U5 M' g)Nz async for z for r| if ) is_asyncrrrOrUrrrWrRrtifs)rr& if_clauses rvisit_comprehension_Unparser.visit_comprehension}s == JJ} % JJw  K--t{{; dkk" 6 K,,113TYYJJ dii I JJv  MM) $"rc8UR[RU5 UR[RR 5UR UR 5 URUR 5 URS5 URUR 5 URS5 UR[RUR5 URUR5 SSS5 g!,(df  g=f)Nrz else ) rrOrWrrRr[r rrr2rs r visit_IfExp_Unparser.visit_IfExps  !1!14 8    0 0 5 5 7DII N MM$)) $ JJv  MM$)) $ JJx    0 0$++ > MM$++ &9 8 8s C!D  Dc^UR(aGTRSS5 TRU4SjTRUR5 SSS5 gTR S5 g!,(df  g=f)Nrrc&>TRS5$r~rr>srr%_Unparser.visit_Set..rarz{*()})rArryrrrs` r visit_Set_Unparser.visit_SetsP 99c3' 8$--S(' JJw  ('s ,A,, A:c ^^U4SjmUU4SjnTRSS5 TRU4SjU[URUR55 SSS5 g!,(df  g=f)Ncl>TRU5 TRS5 TRU5 gNr$rr)kvrs rwrite_key_value_pair2_Unparser.visit_Dict..write_key_value_pairs' MM!  JJt  MM! rc>UupUcCTRS5 TR[RU5 TR U5 gT"X5 g)Nrm)rrrOr\r)rr rrrs r write_item(_Unparser.visit_Dict..write_itemsGDAy 4 ##K$4$4a8 a $Q*rrrc&>TRS5$r~rr>srr&_Unparser.visit_Dict..rr)rryrPrMrN)rr&rrs` @r visit_Dict_Unparser.visit_DictsK  +\\#s # OO(*c$))T[[6Q $ # #s 6A!! A/c(URSS[UR5S:H=(d" URU5[R :5 UR URUR5 SSS5 g!,(df  g=f)Nrgrhr)rrLrArrOrUrrrs r visit_Tuple_Unparser.visit_Tuplesg __    Na  P4#6#6t#<{?P?P#P OODMM499 5    s 'B B~not+r)InvertNotr8r9)rrrrcURURRRnURUnUR X15 UR U5 U[RLaUR S5 URX1R5 URUR5 SSS5 g!,(df  g=fNr) unopr7r|r}unop_precedencerrrOrcrr:r)rr&operatoroperator_precedences r visit_UnaryOp_Unparser.visit_UnaryOps99TWW..778"228<  !4 ; JJx #+*<*<< 3    3\\ B MM$,, '< ; ;s A,C CrrG/%<<>>|^&//rm) rRrSMultMatMultDivModLShiftRShiftBitOrBitXorBitAndFloorDivPow) rrrrGr(r)r*r+r,r-r.r/rm)rmc<URURRRnURUnUR X15 X R ;aUR5nUnOUnUR5nURXAR5 URUR5 URSUS35 URXQR5 URUR5 SSS5 g!,(df  g=fr!) rr7r|r}binop_precedencer binop_rassocrRrrTrrrU)rr&r$r%left_precedenceright_precedences r visit_BinOp_Unparser.visit_BinOps::dgg//889"33H=  !4 ;,,,"5":":"<#6 "5#6#;#;#=    ; MM$)) $ JJ8*A '    0** = MM$** %< ; ;s B6D  Dz==z!=z>=iszis notinznot in) EqNotEqLtLtEGtGtEIsIsNotInNotIncUR[RU5 UR"[RR 5UR /UR Q76 URUR 5 [URUR 5HNup#URSURURR-S-5 URU5 MP SSS5 g!,(df  g=fr!)rrOr[rrRrT comparatorsrrPopsrcmpopsr|r})rr&orNs r visit_Compare_Unparser.visit_Compares  $ 7     4 4 6 UDDTDT U MM$)) $DHHd&6&67 3Q[[-A-A!BBSHI a 88 7 7s CC<< D andor)AndOr)rWrXc6^^^TRURRRnTRUmUU4SjnTR TU5 SUS3mTR UU4SjX1R5 SSS5 g!,(df  g=f)Ncl>TR5mTRTU5 TRU5 gr,)rRrr)r&r%rs rincreasing_level_traverse9_Unparser.visit_BoolOp..increasing_level_traverses/"5":":"<     3T : MM$ rrc&>TRT5$r,r)r$rsrr(_Unparser.visit_BoolOp..&s DJJqMr)boolopsr7r|r}boolop_precedencerryrN)rr&r$r]r%r$s` @@r visit_BoolOp_Unparser.visit_BoolOpsw<< 1 1 : :;"44X>  !4d ;H:QA OO13Lkk Z< ; ;s (B  BcUR[RUR5 UR UR5 [ UR[ 5(a:[ URR[5(aURS5 URS5 URUR5 g)Nrr) rrOrfr/rrr-r0rrrs rvisit_Attribute_Unparser.visit_Attribute(s{ K,,djj9 djj! djj( + + 4::;K;KS0Q0Q JJsO 3 499rcUR[RUR5 UR UR5 UR SS5 SnUR H/nU(aURS5 OSnUR U5 M1 URH/nU(aURS5 OSnUR U5 M1 SSS5 g!,(df  g=f)NrgrhFreT) rrOrfrFrrrIrrJ)rr&rMrNs r visit_Call_Unparser.visit_Call3s K,,dii8 dii \\#s #EYYJJt$ E a  ]]JJt$ E a #$ # #s BC"" C0cSnUR[RUR5 UR UR5 UR SS5 U"UR 5(a1URURUR R5 OUR UR 5 SSS5 g!,(df  g=f)NcH[U[5=(a UR$r,)rr?rA) slice_values ris_non_empty_tuple5_Unparser.visit_Subscript..is_non_empty_tupleFs;.%$$ rrirs) rrOrfr/rrr/rrA)rr&rns rvisit_Subscript_Unparser.visit_SubscriptEs  K,,djj9 djj! \\#s #!$**-- tzz? djj) $ # #s A$C CcURS5 UR[RUR5 UR UR5 g)Nr)rrrOr\r/rrs r visit_Starred_Unparser.visit_StarredUs7 3 K,,djj9 djj!rc&URS5 g)Nrrrs rvisit_Ellipsis_Unparser.visit_EllipsisZs 5rcRUR(aURUR5 URS5 UR(aURUR5 UR(a-URS5 URUR5 gg)Nr)lowerrruppersteprs r visit_Slice_Unparser.visit_Slice]sb :: MM$** % 3 :: MM$** % 99 JJsO MM$)) $ rcURS5 URUR5 UR5 URHnURU5 M SSS5 g!,(df  g=f)Nzmatch )rrsubjectrcases)rr&cases r visit_Match_Unparser.visit_MatchgsK ( dll# ZZ\  d##\\s %A++ A9cURUR5 UR(a-URS5 URUR5 ggr )rargrrrs r visit_arg_Unparser.visit_argns: 488 ?? JJt  MM$// * rcSnURUR-nS/[U5[UR5- -UR-n[ [ X45S5HupVUupxU(aSnOUR S5 URU5 U(a"UR S5 URU5 U[UR5:XdMyUR S5 M UR(dUR(aU(aSnOUR S5 UR S5 UR(avUR URR5 URR(a6UR S5 URURR5 UR(av[ URUR5HRupxUR S5 URU5 U(dM0UR S5 URU5 MT UR(aU(aSnOUR S5 UR S URR-5 URR(a7UR S5 URURR5 ggg) NTrbFrerfz, /rr$rm) posonlyargsrIrLdefaultsrrPrrvararg kwonlyargsrr kw_defaultskwarg) rr&rall_argsrrelementsads rvisit_arguments_Unparser.visit_argumentsts##dii/6S]S-??@4==P(X)@!DOEDA 4 MM!  3 a D,,-- 5! E ;;$// 4 JJsO{{ 4;;??+;;))JJt$MM$++"8"89 ??DOOT-=-=> 4  a 1JJsOMM!$ ? :: 4 JJtdjjnn, -zz$$ 4  djj334% rcURcURS5 O,URUR5 URS5 URUR5 g)Nrmrf)rrrr/rs r visit_keyword_Unparser.visit_keywordsC 88  JJt  JJtxx JJsO djj!rcUR[RU5 URS5 UR 5nUR UR 5 SSS5 W(aUR"S/UQ76 URS5 UR[RUR5 UR UR5 SSS5 g!,(df  N=f!,(df  g=f)Nlambdarr$) rrOrWrrrrIrr[)rr&rs r visit_Lambda_Unparser.visit_Lambdas  !1!14 8 JJx F dii(! 3(( JJt     0 0$)) < MM$)) $9 8 9 8s$"C1C A8C1 C. *C11 C?cURUR5 UR(aURSUR-5 ggNrC)rrasnamers r visit_alias_Unparser.visit_aliass3 499 ;; JJv + , rcURUR5 UR(a-URS5 URUR5 ggr)r context_expr optional_varsrrs rvisit_withitem_Unparser.visit_withitems@ d''(    JJv  MM$,, - rc`URS5 URUR5 UR(a,UR S5 URUR5 UR 5 URUR 5 SSS5 g!,(df  g=f)Nzcase r)rrpatternguardrrr[rs rvisit_match_case_Unparser.visit_match_casesd ' dll# :: JJv  MM$** % ZZ\ MM$)) $\\s :B B-c:URUR5 gr,)rr/rs rvisit_MatchValue_Unparser.visit_MatchValues djj!rc:URUR5 gr,)rr/rs rvisit_MatchSingleton_Unparser.visit_MatchSingletons TZZ(rc^TRSS5 TRU4SjTRUR5 SSS5 g!,(df  g=f)Nrirsc&>TRS5$r~rr>srr/_Unparser.visit_MatchSequence..rr)rryrpatternsrs` rvisit_MatchSequence_Unparser.visit_MatchSequences8 \\#s # OO($-- $ # #rcNURnUcSnURSU35 g)N_r)rr)rr&rs rvisit_MatchStar_Unparser.visit_MatchStars'yy <D Qtf:rc J^U4SjnTRSS5 URnTRU4SjU[X1RSS95 UR nUb,U(aTR S5 TR SU35 SSS5 g!,(df  g=f) Nct>UupTRU5 TRS5 TRU5 gr r )pairr prs rwrite_key_pattern_pair<_Unparser.visit_MatchMapping..write_key_pattern_pairs.DA MM!  JJt  MM! rrrc&>TRS5$r~rr>srr._Unparser.visit_MatchMapping..rrTstrictrerm)rrMryrPrrestr)rr&rrMrs` rvisit_MatchMapping_Unparser.visit_MatchMappings  \\#s #99D OO(&D--5  99DJJt$ Rv;'$ # #s A1B B"c ^TR[RUR5 TR UR5 TR SS5 UR nTRU4SjTRU5 URnU(aGU4SjnU(aTRS5 TRU4SjU[X1RSS95 SSS5 g!,(df  g=f) Nrgrhc&>TRS5$r~rr>srr,_Unparser.visit_MatchClass..rrcX>UupTRUS35 TRU5 g)Nrf)rr)rrrrs rwrite_attr_pattern6_Unparser.visit_MatchClass..write_attr_patterns($(MDJJ$qz*MM'*rrec&>TRS5$r~rr>srrrsDJJt,rTr) rrOrfrrrrry kwd_attrsrrP kwd_patterns)rr&rattrsrs` rvisit_MatchClass_Unparser.visit_MatchClasss K,,dhh7 dhh \\#s #}}H OO($-- NNE+ JJt$,&00>$ # #s BC** C8cURnURnUcURS5 gUcURUR5 gUR[R U5 UR [RUR5 URUR5 URSUR35 SSS5 g!,(df  g=f)NrrC) rrrrrOrWrr]r)rr&rrs r visit_MatchAs_Unparser.visit_MatchAs syy,, < JJsO _ JJtyy !$$[%5%5t<##KOOT\\B dll+ T$))-.=<TRS5$)Nz | rr>srr)_Unparser.visit_MatchOr..sDJJu$5r)rrOr]rrRrryrrs` r visit_MatchOr_Unparser.visit_MatchOrs`  $ 7     4 4 6 G G OO5t}}dmm T8 7 7s A%B B)rqrprnrmro)rdr,)F)r}rrrrr ryrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r rrrr"r%r+r5r;r?rDrOrUrXrTrJrfrjrnrqrvryrurrrrrrrrrrrrrrrrrrrrrrrrr"rOrZrcr#r&rrarbr`r]r^r_rdr< frozensetr=r@rSrUrarYrXrbrcrfrirprsrvr|rrrrrrrrrrrrrrrrr __classcell__)r|s@rrkrks" H 1 "''#  ! Q=1 )  %%#$" &MM%" && O$JJ**& & .11 %:4+1:"V .. . "'- ++$+% %&1E$/LFQ8 27hL&Q$T $ -P# # # # %' ,6%c BD          O ( E"                  __       W%L&$ F!4(G +{~~F [ !$* " %$+ 15f" %- . %")  ((. /UUrrkc8[5nURU5$r,)rkr)ast_objrs runparsers{H >>' ""r)rr"r&r(r*cU[;a4[U=[5U'nSSKnURSU3[SS9 U$[ SUS35e)Nrrrrzmodule 'ast' has no attribute 'rg)_deprecated_globalsglobalsrrrrv)rr/rs r __getattr__r's` """5d";; $%4&M#rb)r )rr^)argparseArgumentParser add_argumentr0 parse_argsrsysstdinrreadopenrrno_type_commentsprintrrr^)rparserrIrrrtrees rmainr2sO  $ $/ $ :F SCE h GGI ,d=HJ 4\./ jsAFH    D {{c!!&&({{ $++t $[[]F% yy8M8M ND $t(?(? TU% $s !E E__main__)z r)TF)rb)Tr,)Xrrre_ast contextlibrrenumrrrrr]rrrrrrrrrrrrrobjectrrrrrr-rrrrpropertyrr$r.r rrr"r&r(r*r,r0r1r2rXbytesboolrrrrtr/r2r7r?r?rBr:modrD expr_contextrHrJrLry float_info max_10_exprrO_SINGLE_QUOTESrrrkrrpoprrrr})rs0rrs04 2,,HtbH08$x49S ESl" F.  0 34  05"J 7(&7(t8k8xU x)Y/HJ)Y/HJ14162 (d(dH8t 6x4 6 #ug # E84:t$ tCyl  $  .J 5 U 7Iz %C%E 3u3 uf, 5EJ:C::l::|::L: cnn//!34 4 g> /// rU rUh!#DC ')-- C DV8 zFYs !I