Ñò §ÚêLc@sdZddklZddklZlZddklZddk l Z d„Z d„Z d„Z d „Zd1d „Zd „Zd „Zd „Ze ƒe ƒd„Zd1d1d„Zd„Zd„Zd1d„Zd„Zd1d„Zd1d„Zd„Zd„Zd„Zd„Ze ddddddd d!d"g ƒZ!d#„Z"d$a#d%a$d&a%e&a'd'„Z(d(„Z)d)„Z*d*„Z+d+„Z,d,„Z-d-„Z.e ei/ei0gƒZ1d1d.„Z2e ei0ei/ei3gƒZ4d/„Z5d1d0„Z6d1S(2s1Utility functions, node construction macros, etc.i(ttoken(tLeaftNode(tpython_symbols(tpatcompcCs%tti|ttidƒ|gƒS(Nu=(RtsymstargumentRRtEQUAL(tkeywordtvalue((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt KeywordArgs cCsttidƒS(Nu((RRtLPAR(((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytLParenscCsttidƒS(Nu)(RRtRPAR(((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytRParenscCspt|tƒp |g}nt|tƒpd|_|g}ntti|ttidddƒg|ƒS(sBuild an assignment statementu u=tprefix( t isinstancetlistRRRtatomRRR(ttargettsource((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytAssigns    cCstti|d|ƒS(sReturn a NAME leafR(RRtNAME(tnameR((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytName$scCs|ttitƒ|gƒgS(sA node tuple for obj.attr(RRttrailertDot(tobjtattr((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytAttr(scCsttidƒS(s A comma leafu,(RRtCOMMA(((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytComma,scCsttidƒS(sA period (.) leafu.(RRtDOT(((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyR0scCsOtti|iƒ|iƒgƒ}|o |idtti|ƒƒn|S(s-A parenthesised argument list, used by Call()i(RRRtclonet insert_childtarglist(targstlparentrparentnode((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytArgList4s$ cCs<tti|t|ƒgƒ}|dj o ||_n|S(sA function callN(RRtpowerR(tNoneR(t func_nameR$RR'((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytCall;s  cCsttidƒS(sA newline literalu (RRtNEWLINE(((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytNewlineBscCsttidƒS(s A blank lineu(RRR-(((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt BlankLineFscCstti|d|ƒS(NR(RRtNUMBER(tnR((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytNumberJscCs1ttittidƒ|ttidƒgƒS(sA numeric or string subscriptu[u](RRRRRtLBRACEtRBRACE(t index_node((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt SubscriptMscCstti|d|ƒS(s A string leafR(RRtSTRING(tstringR((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytStringSsc Csd|_d|_d|_ttidƒ}d|_ttidƒ}d|_||||g}|oGd|_ttidƒ}d|_|itti||gƒƒntti|tti |ƒgƒ}tti tti dƒ|tti dƒgƒS(suA list comprehension of the form [xp for fp in it if test]. If test is None, the "if test" part is omitted. uu uforuinuifu[u]( RRRRtappendRRtcomp_ift listmakertcomp_forRR3R4( txptfptitttesttfor_leaftin_leaft inner_argstif_leaftinner((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytListCompWs$       #$ c Csx|D]}|iƒqWttidƒtti|ddƒttidddƒtti|ƒg}tti|ƒ}|S(sO Return an import statement in the form: from package import name_leafsufromRu uimport(tremoveRRRRRtimport_as_namest import_from(t package_namet name_leafstleaftchildrentimp((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt FromImportoscCsÇt|tƒo!|itƒtƒgjotSt|tƒo†t|iƒdjopt|idtƒoYt|idtƒoBt|idtƒo+|ididjo|ididjS(s(Does the node represent a tuple literal?iiiiu(u)( RRRNR RtTruetlenRR (R'((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytis_tuple‡s,cCst|tƒoot|iƒdjoYt|idtƒoBt|idtƒo+|ididjo|ididjS(s'Does the node represent a list literal?iiiÿÿÿÿu[u](RRRRRNRR (R'((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytis_list“s cCsttitƒ|tƒgƒS(N(RRRR R(R'((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt parenthesize¡stsortedRtsettanytallttupletsumtmintmaxccs6t||ƒ}x |o|Vt||ƒ}qWdS(slFollow an attribute chain. If you have a chain of objects where a.foo -> b, b.foo-> c, etc, use this to iterate over all objects in the chain. Iteration is terminated by getattr(x, attr) is None. Args: obj: the starting object attr: the name of the chaining attribute Yields: Each successive object in the chain. N(tgetattr(RRtnext((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt attr_chain¨s sefor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > s¥ power< ( 'iter' | 'list' | 'tuple' | 'sorted' | 'set' | 'sum' | 'any' | 'all' | (any* trailer< '.' 'join' >) ) trailer< '(' node=any ')' > any* > sN power< 'sorted' trailer< '(' arglist ')' > any* > cCs©tp7titƒatitƒatitƒatantttg}xUt|t|dƒƒD];\}}h}|i ||ƒo|d|jotSqfWt S(s Returns true if node is in an environment where all that is required of it is being itterable (ie, it doesn't matter if it returns a list or an itterator). See test_map_nochange in test_fixers.py for some examples and tests. tparentR'( t pats_builtRtcompile_patterntp1tp0tp2RQtzipR`tmatchtFalse(R'tpatternstpatternRatresults((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytin_special_contextÎs  $ cCsç|i}|dj o|itijotS|i}|ititi fjotS|iti jo|i d|jotS|iti jpG|iti jo9|dj o|itijp|i d|jotStS(sG Check that something isn't an attribute or function name etc. iN(t prev_siblingR*ttypeRR RiRaRtfuncdeftclassdeft expr_stmtRNt parameterst typedargslistRRQ(R'tprevRa((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytis_probably_builtinás   ' cCsY|itijo|S|iƒ}|id}|_tti|gƒ}||_|S(N(RoRtsuiteR!RaR*R(R'RaRw((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt make_suiteüs  cCs(x!|itijo |i}qW|S(sFind the top level namespace.(RoRt file_inputRa(R'((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt find_rootscCs"t|t|ƒ|ƒ}t|ƒS(sÞ Returns true if name is imported from package at the top level of the tree which node belongs to. To cover the case of an import like 'import foo', use None for the package and 'foo' for the name. (t find_bindingRztbool(tpackageRR'tbinding((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytdoes_tree_importscCs|ititifjS(s0Returns true if the node is an import statement.(RoRt import_nameRJ(R'((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt is_importsc Cs½d„}t|ƒ}t|||ƒodSd}}xrt|iƒD]a\}}||ƒpqGnx3t|i|ƒD]\}}||ƒpPq{q{W||}PqGW|djojxgt|iƒD]R\}}|itijo3|io)|iditijo|d}PqÉqÉWn|djo:t ti t ti dƒt ti |ddƒgƒ} n%t|t ti |ddƒgƒ} | tƒg} |i|t ti| ƒƒdS(s\ Works like `does_tree_import` but adds an import statement if it was not imported. cSs.|itijo|iot|idƒS(Ni(RoRt simple_stmtRNR(R'((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytis_import_stmtsNiiuimportRu (RzRt enumerateRNRoRR‚RR7R*RR€RRRPR.R"( R}RR'Rƒtroott insert_postoffsettidxtnode2timport_RN((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyt touch_imports:               "$c Csoxh|iD]]}d}|itijoPt||idƒo|St|t|idƒ|ƒ}|o |}q>nÆ|ititi fjo4t|t|idƒ|ƒ}|o |}q>nv|iti jo³t|t|idƒ|ƒ}|o |}q>x/t |idƒD]g\}}|it i joH|idjo8t|t|i|dƒ|ƒ}|o |}q‡q q Wn°|itjo!|idi|jo |}nt|||ƒo |}nb|itijot|||ƒ}n9|itijo%t||idƒo |}q>n|o"|p|St|ƒo|Sq q WdS( sº Returns the node which binds variable name, otherwise None. If optional argument package is supplied, only imports will be returned. See test cases for examples.iiÿÿÿÿiit:iiN(RNR*RoRtfor_stmtt_findR{Rxtif_stmtt while_stmtttry_stmtR„RtCOLONR t _def_symst_is_import_bindingR‚RrR(RR'R}tchildtretR1titkid((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyR{HsL   ##'    cCs„|g}xt|ol|iƒ}|idjo$|itjo|i|iƒq |itijo|i|jo|Sq WdS(Ni( tpopRot _block_symstextendRNRRR R*(RR'tnodes((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyRŽss   # cCsQ|itijo| o |id}|itijosxä|iD]a}|itijo |idi|jo|SqE|itijo|i|jo|SqEWqM|itijo9|id}|itijo|i|jo|SqM|itijo|i|jo|Sn(|iti jo|o%t |idƒi ƒ|jodS|id}|ot d|ƒodS|itijot ||ƒo|S|itijo9|id}|itijo|i|jo|SqM|itijo|i|jo|S|o|itijo|SndS(s› Will reuturn node if node will import name, or node will import * from package. None is returned otherwise. See test cases for examples. iiiÿÿÿÿiuasN(RoRR€RNtdotted_as_namestdotted_as_nameR RRRJtunicodetstripR*RŽRItimport_as_nametSTAR(R'RR}ROR•tlastR1((s*/usr/lib64/python2.6/lib2to3/fixer_util.pyR”}sB   #  # # ' # # # N(7t__doc__tpgen2RtpytreeRRtpygramRRtRR R RRR*RRRRR(R,R.R/R2R6R9RGRPRSRTRURWtconsuming_callsR`ReRdRfRiRbRmRvRxRzRRR‹RqRpR“R{RRšRŽR”(((s*/usr/lib64/python2.6/lib2to3/fixer_util.pytsV                      - *