a DOg@sddlZddlTddlmZmZddlmZmZd_dddd d Zd d Z d`ddddZ ddZ ddZ daddZ ddZddZdbddZddZd d!Zdd"d#d$Zd%d&ZGd'd(d(eZGd)d*d*eZeed+sd,d-Zd.d/Zeeee_eeee_Gd0d1d1eZ d2d3Z!Gd4d5d5ee d6Z"Gd7d8d8ee d6Z#Gd9d:d:ee d6Z$Gd;d<dd>ee d6Z&e"e'e(e)fe#e*fe$e+fe%ede,fe&ed?fiZ-e"e,fiZ.e,diZ/Gd@dAdAe0Z1GdBdCdCe1Z2GdDdEdEe1Z3ee4dFsBdGdHZ5dIdJZ6ee5e6e4_7GdKdLdLe8Z9GdMdNdNe:Z;GdOdPdPe:Zej?j@dZAGdTdUdUeZBdVZCdWZDgeCeDRZEGdXdYdYeZFdZd[ZGd\d]ZHeId^kreHdS)cN)*)contextmanager nullcontext)IntEnumauto execF) type_commentsfeature_versioncCsFt}|r|tO}t|tr(|\}}|}n |dur4d}t|||||dS)N)_feature_version)Z PyCF_ONLY_ASTZPyCF_TYPE_COMMENTS isinstancetuplecompile)sourcefilenamemoder r flagsmajorminorr(/opt/alt/python39/lib64/python3.9/ast.pyparse!s  rcs`t|trt|dd}t|tr&|j}ddfddfddfd d |S) NevalrcSstd|dS)Nzmalformed node or string: ) ValueErrornoderrr_raise_malformed_nodeCsz+literal_eval.._raise_malformed_nodecs,t|trt|jtttfvr&||jSN)r Constanttypevalueintfloatcomplexr)rrr _convert_numEsz"literal_eval.._convert_numcsDt|tr._convert_signed_numcsZt|tr|jSt|tr*tt|jSt|trDtt|jSt|t r^t t|jSt|t rt|j t r|j jdkr|j|jkrgkrnnt St|trt|jt|jkrȈ|ttt|jt|jSt|trRt|jttfrR|j}|j}t|ttfrRt|trRt|jtrJ||S||S|S)Nset) r r r"TuplermapeltsListlistSetr,ZCallfuncNameidargskeywordsDictlenkeysvaluesdictzipZBinOpr'AddSubleftrightr#r$r%)rr@rA_convertr&r+rrrrCQs<          zliteral_eval.._convert)r strrZ Expressionbody)Znode_or_stringrrBr literal_eval6s     rFT)indentcsTdfdd t|ts.td|jjdurHttsHd|dS)Nrc sdur*d7d}d}nd}d}t|trt|}g}d}}|jD]}zt||} Wntyd}YqXYn0| durt||ddurd}qX| \} } |o| }|r|d|| fqX|| qXrh|jrh|jD]t}zt||} WntyYqYn0| durz(dump.._format..)r ASTr!_fieldsgetattrAttributeErrorappend _attributesr9 __class____name__joinr1repr) rrQprefixsepclsr6Z allsimpler7namer"simplerPannotate_fieldsinclude_attributesrG)rQrrPzsX          &zdump.._formatzexpected AST, got %r )r)r rT TypeErrorrZr[rD)rrdrerGrrcrdumpns 0 rhcCsVdD]L}||jvr||jvrt||d}|dusDt||r|drt|||q|S)N)lineno col_offset end_linenoend_col_offsetZend_)rYrVhasattr startswithsetattr)new_nodeZold_nodeattrr"rrr copy_locations rrcs fdd|dddd|S)Ncsd|jvr"t|ds||_n|j}d|jvrJt|dddurD||_n|j}d|jvrlt|dsf||_n|j}d|jvrt|dddur||_n|j}t|D]}|||||qdS)Nrirkrjrl)rYrmrirVrkrjrliter_child_nodes)rrirjrkrlchild_fixrrrvs$       z#fix_missing_locations.._fixrHrrrrrurfix_missing_locationss rwrHcCsVt|D]H}d|jvr(t|dd||_d|jvrt|dd}dur|||_q|S)Nrirrk)walkrYrVrirk)rnrtrkrrrincrement_linenos   rzc cs8|jD],}z|t||fVWqty0Yq0qdSr)rUrVrW)rfieldrrr iter_fieldss   r|ccsLt|D]>\}}t|tr"|Vqt|tr|D]}t|tr0|Vq0qdSr)r|r rTr1)rrar{itemrrrrss   rscCst|ttttfs"td|jj|jr8t|jdt s|jdus|jdurWdS|jd}|jd}|j}|j}WntyRYdS0t|}||kr|||||S|rt||d|}nd}||||d} ||d|} ||d|}| d| | | d |S)NrHrJr) rkrlrirjrWrencodedecoderinsertrXr\) rrrrirkrjrlrZpaddingfirstZlastrrrget_source_segmentNs*       rccs<ddlm}||g}|r8|}|t||VqdS)Nr)deque) collectionsrpopleftextendrs)rrZtodorrrrxss   rxc@s$eZdZddZddZddZdS) NodeVisitorcCs"d|jj}t|||j}||S)Nvisit_)rZr[rV generic_visit)selfrmethodvisitorrrrvisits zNodeVisitor.visitcCsTt|D]F\}}t|tr:|D]}t|tr||qqt|tr||qdSr)r|r r1rTr)rrr{r"r}rrrrs   zNodeVisitor.generic_visitc Cs|j}tt|}|dur@tD]\}}t||r$|}q@q$|durd|}zt||}WntypYn&0ddl}| |dt d||S| |S)Nrrz" is deprecated; add visit_Constant) r"_const_node_type_namesgetr!itemsr rVrWwarningswarnDeprecationWarningr) rrr"Z type_namer`rarrrrrrvisit_Constants&   zNodeVisitor.visit_ConstantN)r[ __module__ __qualname__rrrrrrrrs rc@seZdZddZdS)NodeTransformercCst|D]\}}t|trvg}|D]D}t|tr\||}|durFq"nt|ts\||q"||q"||dd<qt|tr||}|durt||qt|||q|Sr) r|r r1rTrrrXdelattrro)rrr{ old_valueZ new_valuesr"rprrrrs&         zNodeTransformer.generic_visitN)r[rrrrrrrrs$rrycCs|jSrr"rrrr_gettersrcCs ||_dSrrrr"rrr_settersrc@seZdZddZddZdS)_ABCcGs d|_dS)Nz3Deprecated AST node class. Use ast.Constant instead)__doc__)r`r6rrr__init__sz _ABC.__init__cCsdt|tsdS|tvrXz |j}Wnty4YdS0t|t|oVt|t|d St||S)NFr) r r _const_typesr"rW_const_types_notrr!__instancecheck__)r`instr"rrrr s   z_ABC.__instancecheck__N)r[rrrrrrrrrsrcOsp|D]<}||jvrq|j|}|t|krt|jd|q|tvrXt|i|Stj|g|Ri|S)Nz" got multiple values for argument )rUindexr9rgr[rr __new__)r`r6kwargskeyposrrr_news   rc@seZdZdZeZdS)Num)ryNr[rrrUrrrrrrr%sr) metaclassc@seZdZdZeZdS)rrNrrrrrr)src@seZdZdZeZdS)BytesrNrrrrrr-src@seZdZeZdS) NameConstantN)r[rrrrrrrrr1src@seZdZdZddZdS)EllipsisrcOs6|turtdg|Ri|Stj|g|Ri|S)N.)rr r)r`r6rrrrr7szEllipsis.__new__N)r[rrrUrrrrrr4sr.c@s eZdZdS)sliceNr[rrrrrrrRsrc@seZdZddZdS)IndexcKs|Srr)r`r"rrrrrWsz Index.__new__Nr[rrrrrrrrUsrc@seZdZdddZdS)ExtSlicercKstt|tfi|Sr)r-r1ZLoad)r`dimsrrrrr\szExtSlice.__new__N)rrrrrrrZsrrcCs|jSrr/rrrr _dims_getterdsrcCs ||_dSrrrrrr _dims_setterhsrc@s eZdZdS)SuiteNrrrrrrmsrc@s eZdZdS)AugLoadNrrrrrrpsrc@s eZdZdS)AugStoreNrrrrrrssrc@s eZdZdS)ParamNrrrrrrvsrZ1ec@s~eZdZeZeZeZeZeZeZ eZ eZ e Z eZ eZeZeZeZeZeZeZeZddZdS) _PrecedencecCs,z||dWSty&|YS0dSNrH)rZrrrrrnexts z_Precedence.nextN)r[rrrTUPLEYIELDTESTORANDNOTCMPEXPRBORBXORBANDSHIFTARITHTERMFACTORPOWERAWAITATOMrrrrrr~s&r)'")z"""z'''cseZdZddddZddZddZd d Zdd d ZddZddZ e ddZ e ddddZ e ddZddZddZddZd d!Zd"d#Zd$d%Zfd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zdd?Z!d@dAZ"dBdCZ#dDdEZ$dFdGZ%dHdIZ&dJdKZ'dLdMZ(dNdOZ)dPdQZ*dRdSZ+dTdUZ,dVdWZ-dXdYZ.dZd[Z/d\d]Z0d^d_Z1d`daZ2dbdcZ3dddeZ4dfdgZ5dhdiZ6djdkZ7dldmZ8dndoZ9e:ddpdqdrZ;e:dsdtduZdzd{Z?d|d}Z@d~dZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNddZOdddddZPeQjReQjSeQjSeQjSdZTddZUdddddddddddddd ZVeQjWeQjWeQjXeQjXeQjXeQjXeQjYeQjYeQjZeQj[eQj\eQjXeQj]d Z^e_dZ`ddZaddddddddddd ZbddZcdddÜZdeQjeeQjfdĜZgddƄZhddȄZiddʄZjdd̄Zkdd΄ZlddЄZmdd҄ZnddԄZoddքZpdd؄ZqddڄZrdd܄ZsddބZtZuS) _UnparserF_avoid_backslashescCs(g|_g|_i|_i|_d|_||_dS)Nr)_source_buffer _precedences _type_ignores_indentr)rrrrrrs z_Unparser.__init__cCsHt|}z|t|Wnty*Yn0|D]}|||q0dSr)iterr StopIteration)rZinterfseqrOrrr interleaves z_Unparser.interleavecs>t|dkr$||ddnfdd||dS)NrHr,cs dSNrKwriterrrrrSz&_Unparser.items_view..)r9rr)rZ traverserrrrr items_views   z_Unparser.items_viewcCs|jr|ddS)NrI)rrrrrr maybe_newlinesz_Unparser.maybe_newlinerJcCs ||d|j|dS)Nz )rrrrrrrrfillsz_Unparser.fillcCs|j|dSr)rrXrrrrrsz_Unparser.writecCs|j|dSr)rrXrrrr buffer_writersz_Unparser.buffer_writercCsd|j}|j|SNrJ)r\rclearrrrrbuffers  z_Unparser.bufferNextraccs>|d|r|||jd7_dV|jd8_dS)N:rH)rr)rrrrrblocks   z_Unparser.blockccs||dV||dSrr)rstartendrrrdelimits z_Unparser.delimitcCs|r|||StSdSr)r r)rrr  conditionrrr delimit_ifs z_Unparser.delimit_ifcCs|dd|||kSN())r get_precedence)r precedencerrrrrequire_parenssz_Unparser.require_parenscCs|j|tjSr)rrrrrrrrrrsz_Unparser.get_precedencecGs|D]}||j|<qdSr)r)rrZnodesrrrrset_precedencesz_Unparser.set_precedencecCs`t|ttttfr t|jdkr$dS|jd}t|ts||}r.||||jddn ||jdSr)r_write_docstringrrE)rrZ docstringrrr"_write_docstring_and_traverse_body&s z,_Unparser._write_docstring_and_traverse_bodycCs*dd|jD|_|||jdS)NcSsi|]}|jd|jqS)ignore)ritag)rNrrrr .sz*_Unparser.visit_Module..) type_ignoresrrrrrrr visit_Module-s  z_Unparser.visit_Modulecs`dd*fddj|jWdn1s<0Yd|jdS)Nrrcs dSrrrrrrr8rSz._Unparser.visit_FunctionType.. -> )r rrargtypesrreturnsrrrrvisit_FunctionType5s " z_Unparser.visit_FunctionTypecCs(||tj|j||jdSr)rrrrr"rrrrr visit_Expr>sz_Unparser.visit_ExprcCsh|tj|F|tj|j|j||j|d||jWdn1sZ0YdS)Nz := ) rrrrrtargetr"rrrrrrvisit_NamedExprCs   z_Unparser.visit_NamedExprcs(dfddj|jdS)Nzimport cs dSrrrrrrrLrSz(_Unparser.visit_Import..)rrrnamesrrrr visit_ImportJs z_Unparser.visit_ImportcsTdd|j|jr,|jdfddj|jdS)Nzfrom .z import cs dSrrrrrrrTrSz,_Unparser.visit_ImportFrom..)rrrQmodulerrr)rrrrvisit_ImportFromNs    z_Unparser.visit_ImportFromcCsP||jD]}|||dq||j||}rL||dS)N = )rtargetsrrr"r)rrr'rrrr visit_AssignVs    z_Unparser.visit_AssigncCsB|||j|d|j|jjjd||jdS)Nrfz= ) rrr'rbinopr'rZr[r"rrrrvisit_AugAssign_s z_Unparser.visit_AugAssigncCs||dd|j o"t|jt||jWdn1sH0Y|d||j|j r|d||j dS)Nrr: r.) rr rbr r'r4rr annotationr"rrrrvisit_AnnAssignes *   z_Unparser.visit_AnnAssigncCs*|d|jr&|d||jdS)Nreturnrf)rr"rrrrrr visit_Returnos  z_Unparser.visit_ReturncCs|ddS)Npassrrrrr visit_Passusz_Unparser.visit_PasscCs|ddS)Nbreakr9rrrr visit_Breakxsz_Unparser.visit_BreakcCs|ddS)Ncontinuer9rrrrvisit_Continue{sz_Unparser.visit_Continuecs(dfddj|jdS)Nzdel cs dSrrrrrrrrSz(_Unparser.visit_Delete..)rrrr/rrrr visit_Delete~s z_Unparser.visit_DeletecCs6|d||j|jr2|d||jdS)Nzassert rK)rrtestmsgrrrrr visit_Asserts    z_Unparser.visit_Assertcs(dfddj|jdS)Nzglobal cs dSrrrrrrrrSz(_Unparser.visit_Global..rrrr)rrrr visit_Globals z_Unparser.visit_Globalcs(dfddj|jdS)Nz nonlocal cs dSrrrrrrrrSz*_Unparser.visit_Nonlocal..rCrrrrvisit_Nonlocals z_Unparser.visit_NonlocalcCsh|tj|F|d|jrF|d|tj|j||jWdn1sZ0YdS)Nawaitrf)rrrrr"rrrrrrr visit_Awaits   z_Unparser.visit_AwaitcCsh|tj|F|d|jrF|d|tj|j||jWdn1sZ0YdS)Nyieldrf)rrrrr"rrrrrrr visit_Yields   z_Unparser.visit_YieldcCsf|tj|D|d|js(td|tj|j||jWdn1sX0YdS)Nz yield from z-Node can't be used without a value attribute.) rrrrr"rrrrrrrrvisit_YieldFroms  z_Unparser.visit_YieldFromcCsX|d|js"|jrtddS|d||j|jrT|d||jdS)Nraisez*Node can't use cause without an exception.rfz from )rexccauserrrrrrr visit_Raises    z_Unparser.visit_RaisecCs|d|||jWdn1s40Y|jD]}||qD|jr|d|||jWdn1s0Y|jr|d|||jWdn1s0YdS)Ntryelsefinally)rrrrEhandlersorelse finalbody)rrZexrrr visit_Trys  *    *  z_Unparser.visit_TrycCsz|d|jr&|d||j|jrB|d||j|||jWdn1sl0YdS)Nexceptrf as )rr!rrrarrErrrrvisit_ExceptHandlers      z_Unparser.visit_ExceptHandlercCs||jD]}|d||q|d|j|jdd|jpJ|jdhd}|jD]"}|rp|dnd}||q\|jD]"}|r|dnd}||qWdn1s0Y| | |Wdn1s0YdS) N@zclass rr)r FrKT) rdecorator_listrrrar basesr7rrr)rrdecocommaerrrvisit_ClassDefs&        * z_Unparser.visit_ClassDefcCs||ddS)Ndef_function_helperrrrrvisit_FunctionDefsz_Unparser.visit_FunctionDefcCs||ddS)Nz async defrarrrrvisit_AsyncFunctionDefsz _Unparser.visit_AsyncFunctionDefcCs||jD]}|d||q|d|j}|||dd||jWdn1sn0Y|jr|d||j|j | |d| |Wdn1s0YdS)NrYrfrrr"r) rrZrrrar r6r$rrrr)rrZ fill_suffixr\Zdef_strrrrrbs    *  z_Unparser._function_helpercCs|d|dS)Nzfor  _for_helperrrrr visit_Forsz_Unparser.visit_ForcCs|d|dS)Nz async for rerrrrvisit_AsyncForsz_Unparser.visit_AsyncForcCs||||j|d||j|j||d||jWdn1s`0Y|jr|d|||jWdn1s0YdS)N in rrP) rrr'rrrrrErS)rrrrrrrfs    *  z_Unparser._for_helpercCs|d||j|||jWdn1s@0Y|jrt|jdkrt|jdtr|jd}|d||j|||jWdqJ1s0YqJ|jr |d|||jWdn1s0YdS)Nzif rHrzelif rP) rrr@rrErSr9r ZIfrrrrvisit_Ifs   *$    ,  z_Unparser.visit_IfcCs|d||j|||jWdn1s@0Y|jr|d|||jWdn1s0YdS)Nzwhile rP)rrr@rrErSrrrr visit_While s   *  z_Unparser.visit_Whilecsfdfddj|jj|d|jWdn1sX0YdS)Nzwith cs dSrrrrrrr,rSz&_Unparser.visit_With..rrrrrrrrErrrr visit_With*s z_Unparser.visit_Withcsfdfddj|jj|d|jWdn1sX0YdS)Nz async with cs dSrrrrrrr2rSz+_Unparser.visit_AsyncWith..rrlrrrrvisit_AsyncWith0s z_Unparser.visit_AsyncWith quote_typesescape_special_whitespacecsfdd}dt||}dvr6dd|D}fdd|D}|sttfdd |Dd }d d |gfSr|jfd dd|d d d krƈdd dd |fS)Ncs4s|dvr|S|dks |s0|ddS|S)Nz \Zunicode_escapeascii) isprintablerr)r)rqrr escape_char<s  z2_Unparser._str_literal_helper..escape_charrJrIcSsg|]}|tvr|qSr) _MULTI_QUOTESrNqrrr IrSz1_Unparser._str_literal_helper..csg|]}|vr|qSrrrwescaped_stringrrryJrSc3s|]}d|vr|VqdSrMrrw)stringrrrRPrSz0_Unparser._str_literal_helper..rrHr cs|ddkS)Nrr r)rxrzrrrTrSz/_Unparser._str_literal_helper..)rrr)r\r.r]rsort)rr|rprqruZpossible_quotesZquoter)rqr{r|r_str_literal_helper6s z_Unparser._str_literal_helperrpcCs4|j||d\}}|d}||||dS)Nrr)r~r)rr|rp quote_typerrr_write_str_avoiding_backslashes\sz)_Unparser._write_str_avoiding_backslashesc Cs|d|jr.|||j||jdSg}|jD]:}t|dt|j }|||j| |jt |t fq8g}t }|D]&\}}|j|||d\}}| |qd|}|d}||||dS)Nr _fstring_rorJr)rr_fstring_JoinedStrrrrr;rVr!r[rXr r _ALL_QUOTESr~r\) rrrr"methZ new_bufferrpZ is_constantrrrrvisit_JoinedStrbs*        z_Unparser.visit_JoinedStrcCs(|d|||j||jdS)Nr)r_fstring_FormattedValuerrrrrrrvisit_FormattedValues z_Unparser.visit_FormattedValuecCs.|jD]"}t|dt|j}|||qdS)Nr)r;rVr!r[)rrrr"rrrrrs z_Unparser._fstring_JoinedStrcCs6t|jtstd|jdddd}||dS)Nz.Constants inside JoinedStr should be a string.{z{{}z}})r r"rDrreplace)rrrr"rrr_fstring_Constants z_Unparser._fstring_ConstantcCs|dt|dd}|tj|j||j}|drH|dd|vrXtd|||j dkrt |j }|dvrtd |d ||j r|d t |d t|j j }||j ||d dS)NrTrrfrrz5Unable to avoid backslash in f-string expression partr ZsrazUnknown f-string conversion.!rrr)r!rrrrr"rrnr conversionchr format_specrVr[)rrrunparserexprrrrrrrs&     z!_Unparser._fstring_FormattedValuecCs||jdSr)rr5rrrr visit_Namesz_Unparser.visit_NamecCs0||jdkr|d|j|jtddS)Nur)rkindrrr"rvrrrrrs  z_Unparser._write_docstringc Csjt|ttfr<|t|dtddtdtdn*|jrXt|trX| |n|t|dS)Ninfnanr-r) r r$r%rr]r_INFSTRrrDrrrrr_write_constants z_Unparser._write_constantcCs|j}t|trL|dd||j|Wdq1s@0Yn4|dur`|dn |jdkrt|d||jdS)Nrr....r)r"r rr rrrr)rrr"rrrrs .   z_Unparser.visit_ConstantcsJdd*fddj|jWdn1s<0YdS)N[]cs dSrrrrrrrrSz&_Unparser.visit_List..)r rrr/rrrr visit_Listsz_Unparser.visit_ListcCsR|dd2||j|jD]}||q Wdn1sD0YdS)Nrrr relt generatorsrrgenrrrvisit_ListComps  z_Unparser.visit_ListCompcCsR|dd2||j|jD]}||q Wdn1sD0YdSr rrrrrvisit_GeneratorExps  z_Unparser.visit_GeneratorExpcCsR|dd2||j|jD]}||q Wdn1sD0YdS)Nrrrrrrr visit_SetComps  z_Unparser.visit_SetCompcCsh|ddH||j|d||j|jD]}||q6Wdn1sZ0YdS)Nrrr3)r rrrr"rrrrrvisit_DictComps     z_Unparser.visit_DictCompcCs|jr|dn |d|tj|j||j|d|jtj|j g|j R||j |j D]}|d||qrdS)Nz async for z for ri if ) is_asyncrrrrr'rrrrifs)rrZ if_clauserrrvisit_comprehensions       z_Unparser.visit_comprehensioncCs|tj|p|tj|j|j||j|d||j|d|tj|j ||j Wdn1s0YdS)Nrz else ) rrrrrrEr@rrrSrrrr visit_IfExps    z_Unparser.visit_IfExpcs\|jrNdd*fddj|jWdqX1sB0Yn ddS)Nrrcs dSrrrrrrrrSz%_Unparser.visit_Set..z{*()})r/r rrrrrrr visit_Sets:z_Unparser.visit_Setcsjfddfdd}dd0fdd|t|j|jWdn1s\0YdS) Ncs"|d|dSNr3)rr)kvrrrwrite_key_value_pair s  z2_Unparser.visit_Dict..write_key_value_paircsB|\}}|dur4dtj||n ||dS)N**)rrrrr)r}rrrrrr write_items   z(_Unparser.visit_Dict..write_itemrrcs dSrrrrrrrrSz&_Unparser.visit_Dict..)r rr=r:r;)rrrrrr visit_Dicts   z_Unparser.visit_DictcCs@|dd ||j|jWdn1s20YdSr )r rrr/rrrr visit_Tuplesz_Unparser.visit_Tuple~not+r)ZInvertZNotr(r))rrrrcCs|j|jjj}|j|}|||H|||tjurF|d| ||j | |j Wdn1st0YdSNrf) unopr'rZr[unop_precedencerrrrrr*r)rroperatoroperator_precedencerrr visit_UnaryOp*s    z_Unparser.visit_UnaryOprrY/%<<>>|^&//r) r>r?ZMultZMatMultZDivZModZLShiftZRShiftZBitOrZBitXorZBitAndZFloorDivZPow) rrrrYrrrrrrrrr)rcCs|j|jjj}|j|}|||z||jvr@|}|}n |}|}|||j | |j | d|d|||j | |j Wdn1s0YdSr) r1r'rZr[binop_precedencer binop_rassocrrr@rrrA)rrrrZleft_precedenceZright_precedencerrr visit_BinOpWs   z_Unparser.visit_BinOpz==z!=z>=iszis notinznot in) ZEqZNotEqZLtZLtEZGtZGtEZIsZIsNotZInZNotIncCs|tj|x|jtj|jg|jR||jt|j |jD].\}}| d|j |j j d||qHWdn1s0YdSr)rrrrrr@ comparatorsrr=opsrcmpopsrZr[)rror^rrr visit_Compareus  z_Unparser.visit_Compareandor)ZAndZOr)rrcs~j|jjj}j|fdd}|6d|dfdd||jWdn1sp0YdS)Ncs"||dSr)rrrr)rrrrincreasing_level_traverses z9_Unparser.visit_BoolOp..increasing_level_traverserfcs Srrr)rrrrrrSz(_Unparser.visit_BoolOp..)boolopsr'rZr[boolop_precedencerrr;)rrrrr)rrrr visit_BoolOps   z_Unparser.visit_BoolOpcCsZ|tj|j||jt|jtr@t|jjtr@|d|d||j dS)Nrfr+) rrrr"rr r r#rrqrrrrvisit_Attributes    z_Unparser.visit_AttributecCs|tj|j||j|ddhd}|jD]"}|rH|dnd}||q4|jD]"}|rr|dnd}||q^Wdn1s0YdS)NrrFrKT) rrrr3rr r6rr7)rrr]r^rrr visit_Calls      z_Unparser.visit_CallcCs~dd}|tj|j||j|dd:||jrP||j|jjn ||jWdn1sp0YdS)NcSs&t|to$|jo$tdd|jD S)Ncss|]}t|tVqdSr)r ZStarred)rNrrrrrRrSzE_Unparser.visit_Subscript..is_simple_tuple..)r r-r/any)Z slice_valuerrris_simple_tuples  z2_Unparser.visit_Subscript..is_simple_tuplerr) rrrr"rr rrr/)rrrrrrvisit_Subscripts   z_Unparser.visit_SubscriptcCs*|d|tj|j||jdS)Nr)rrrrr"rrrrr visit_Starreds z_Unparser.visit_StarredcCs|ddS)Nrrrrrrvisit_Ellipsissz_Unparser.visit_EllipsiscCsN|jr||j|d|jr.||j|jrJ|d||jdS)Nr)lowerrruppersteprrrr visit_Slices    z_Unparser.visit_SlicecCs,||j|jr(|d||jdSr)rargr4rrrrr visit_args  z_Unparser.visit_argc Csd}|j|j}dgt|t|j|j}tt||dD]^\}}|\}}|rXd}n |d|||r|d|||t|jkr>|dq>|js|j r|rd}n |d|d|jr||jj |jj r|d||jj |j rLt|j |j D]8\}}|d|||r|d||q|j r|r`d}n |d|d |j j |j j r|d||j j dS) NTrHFrK=z, /rr3r) posonlyargsr6r9defaults enumerater=rrvararg kwonlyargsrr4 kw_defaultskwarg) rrrZall_argsrrelementsadrrrvisit_argumentssN                z_Unparser.visit_argumentscCs<|jdur|dn||j|d||jdS)Nrr)rrrr"rrrr visit_keyword s     z_Unparser.visit_keywordcCsn|tj|L|d||j|d|tj|j||jWdn1s`0YdS)Nzlambda r3)rrrrrr6rrErrrr visit_Lambdas    z_Unparser.visit_LambdacCs&||j|jr"|d|jdSNrW)rraasnamerrrr visit_aliass z_Unparser.visit_aliascCs,||j|jr(|d||jdSr)r context_expr optional_varsrrrrrvisit_withitems  z_Unparser.visit_withitem)rJ)vr[rrrrrrrrrpropertyrrrr r rrrrrrrrr!r%r&r(r*r-r0r2r5r7r:r<r>r?rBrDrErGrIrJrNrUrXr_rcrdrbrgrhrfrjrkrmrnrr~rrrrrrrrrrrrrrrrrrrrrrrrrrr1rrrrrrrr frozensetrrrrrrrrrrrrrrrrrrrrr __classcell__rrrrrs               &        3rcCst}||Sr)rr)Zast_objrrrrunparse$srcCsddl}|jdd}|jd|jddddd d |jd d d ddd|jddddd|jddddd|jddtddd|}|j}|}Wdn1s0Yt||jj |j |j d }t t ||j|jd!dS)"Nrz python -m ast)proginfilerbr?rz$the file to parse; defaults to stdin)r!nargsdefaulthelpz-mz--moder)rZsinglerZ func_typez(specify what kind of code must be parsed)rchoicesrz--no-type-commentsTZ store_falsez)don't add information about type comments)ractionrz-az--include-attributes store_truez:include attributes such as line numbers and column offsets)rrz-iz--indentrLz'indentation of nodes (number of spaces))r!rr)r )rerG)argparseArgumentParser add_argumentZFileTyper# parse_argsrreadrrarZno_type_commentsprintrhrerG)r parserr6rrZtreerrrmain)s0     &r__main__)rr)TF)rH)T)JsysZ_ast contextlibrrenumrrrrFrhrrrwrzr|rsrrrrrxobjectrrrmr rrrryrr!rrrrrrrr#r$r%rDbytesboolrrrrTrrrr-rrrmodrZ expr_contextrrrr] float_info max_10_exprrZ_SINGLE_QUOTESrvrrrrr[rrrrs 8C#    %:<