grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026B sa‰;’ùŠåã/@sÈdZdZdZddlmZddlmZmZddl Z ddl m Z ddl m Z ddl ZddlZddlZdd lTe d ej¡Ze d ej¡ZddlZejd d ddgZ[eeeeeeeeee e!e"e#e$e%e&e'e(e)e*e+e,e-e.e/e0e1e2e3e4e5e6e7e8e9e:e;ee?e@eAeBeCeDdœ.ZEGdd„de  Fdd¡ƒZGdd„ZHdd„ZIdd„ZJdZKdZLeKeIdeKƒeJeLƒZMdZNdZOdZPdZQd ZReHeOePeQeRƒZSd!ZTeHd"d#ƒeJeTƒZUd$eTZVeHeUeVƒZWeHd%eWd&ƒZXeHeXeWeSƒZYd'd(„ZZd)d*„Z[eHeZƒŽZ\d+Z]d,Z^d-Z_d.Z`eHe\d/e\d0ƒZaeHe\d1e\d2ƒZbeHd3d4d5d6d7d8d9d:ƒZcd;ZdeHdƒZeeHecedeeƒZfeHeYefebeNƒZgeMegZheHe\d?eHd@dƒe\dAeHdBdƒƒZieHdCeLeaƒZjeKeHejeYefeieNƒZkiZlx@eZƒD]6Zme]elemd@<e^elemdB<e_elemd/<e`elemd0<�qžWenƒZoenƒZpx\eZƒD]RZqx$eqdBeqd@fD]Zreo ser¡�qWx$eqd0eqd/fD]Zrep ser¡�q(W�qìWdDZtGdEdF„dFeuƒZvGdGdH„dHeuƒZwGdIdJ„dJƒZxdKd„ZydLdM„ZzdNd „Z{dOdP„ZdQd „Z|dRdS„Z}dTdU„Z~dVdW„Ze€dXk�rÄeƒdS)YaoTokenization help for Python programs. tokenize(readline) is a generator that breaks a stream of bytes into Python tokens. It decodes the bytes according to PEP-0263 for determining source file encoding. It accepts a readline-like method which is called repeatedly to get the next line of input (or b"" for EOF). It generates 5-tuples with these members: the token type (see token.py) the token (a string) the starting (row, column) indices of the token (a 2-tuple of ints) the ending (row, column) indices of the token (a 2-tuple of ints) the original line (string) It is designed to match the working of the Python tokenizer exactly, except that it produces COMMENT tokens for comments and gives type OP for all operators. Additionally, all token lists start with an ENCODING token which tells you which encoding was used to decode the bytes stream. zKa-Ping Yee zpGvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, Skip Montanaro, Raymond Hettinger, Trent Nelson, Michael Foordé)Úopen)ÚlookupÚBOM_UTF8N)Ú TextIOWrapper)Úchain)Ú*z&^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)s^[ \t\f]*(?:[#\r\n]|$)ÚtokenizeÚdetect_encodingÚ untokenizeÚ TokenInfo).ú(ú)ú[ú]ú:ú,ú;ú+ú-rú/ú|ú&ú<ú>ú=Ú.ú%Ú{Ú}z==z!=z<=z>=ú~ú^z<>z**z+=z-=z*=z/=z%=z&=z|=z^=z<<=z>>=z**=z//z//=z...z->ú@z@=c@s eZdZdd„Zedd„ƒZdS)r cCs$d|jt|jf}d|j|d�S)Nz%d (%s)z8TokenInfo(type=%s, string=%r, start=%r, end=%r, line=%r))Útype)r"Útok_nameÚ_replace)ÚselfÚannotated_type©r'ú-/opt/alt/python37/lib64/python3.7/tokenize.pyÚ__repr___szTokenInfo.__repr__cCs(|jtkr|jtkrt|jS|jSdS)N)r"ÚOPÚstringÚEXACT_TOKEN_TYPES)r%r'r'r(Ú exact_typeds zTokenInfo.exact_typeN)Ú__name__Ú __module__Ú __qualname__r)Úpropertyr-r'r'r'r(r ^sztype string start end linecGsdd |¡dS)Nr rr )Újoin)Úchoicesr'r'r(Úgroupkór4cGs t|ŽdS)Nr)r4)r3r'r'r(Úanylr5r6cGs t|ŽdS)Nú?)r4)r3r'r'r(Úmaybemr5r8z[ \f\t]*z #[^\r\n]*z\\\r?\nz\w+z0[xX](?:_?[0-9a-fA-F])+z0[bB](?:_?[01])+z0[oO](?:_?[0-7])+z(?:0(?:_?0)*|[1-9](?:_?[0-9])*)z[eE][-+]?[0-9](?:_?[0-9])*z)[0-9](?:_?[0-9])*\.(?:[0-9](?:_?[0-9])*)?z\.[0-9](?:_?[0-9])*z[0-9](?:_?[0-9])*z[0-9](?:_?[0-9])*[jJ]z[jJ]cCsjddddddg}dh}xN|D]F}x@t |¡D]2}x,tjdd „|DƒŽD]}| d |¡¡qFWq,WqW|S) NÚbÚrÚuÚfÚbrÚfrÚcSsg|]}|| ¡f‘qSr')Úupper)Ú.0Úcr'r'r(ú �sz(_all_string_prefixes..)Ú _itertoolsÚ permutationsÚproductÚaddr2)Ú_valid_string_prefixesÚresultÚprefixÚtr;r'r'r(Ú_all_string_prefixes„s rLcCst |tj¡S)N)ÚreÚcompileÚUNICODE)Úexprr'r'r(Ú_compile“srQz[^'\\]*(?:\\.[^'\\]*)*'z[^"\\]*(?:\\.[^"\\]*)*"z%[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''z%[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""z'''z"""z'[^\n'\\]*(?:\\.[^\n'\\]*)*'z"[^\n"\\]*(?:\\.[^\n"\\]*)*"z\*\*=?z>>=?z<<=?z!=z//=?z->z[+\-*/%&@|^=<>]=?rz[][(){}]z\r?\nz\.\.\.z[:;.,@]z'[^\n'\\]*(?:\\.[^\n'\\]*)*ú'z"[^\n"\\]*(?:\\.[^\n"\\]*)*ú"z \\\r?\n|\Zéc@s eZdZdS)Ú TokenErrorN)r.r/r0r'r'r'r(rUÔsrUc@s eZdZdS)ÚStopTokenizingN)r.r/r0r'r'r'r(rVÖsrVc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú UntokenizercCsg|_d|_d|_d|_dS)Nér)ÚtokensÚprev_rowÚprev_colÚencoding)r%r'r'r(Ú__init__ÛszUntokenizer.__init__cCs„|\}}||jks&||jkr>||jkr>td |||j|j¡ƒ‚||j}|rb|j d|¡d|_||j}|r€|j d|¡dS)Nz+start ({},{}) precedes previous end ({},{})z\ rú )rZr[Ú ValueErrorÚformatrYÚappend)r%ÚstartÚrowÚcolÚ row_offsetÚ col_offsetr'r'r(Úadd_whitespaceás  zUntokenizer.add_whitespacec Cs4t|ƒ}g}d}�x|D�] }t|ƒdkr8| ||¡P|\}}}} } |tkrV||_q|tkr`P|tkrv| |¡qnl|tkr–|  ¡| \|_ |_ qnL|t t fkr¨d}n:|râ|râ|d} |dt| ƒkrÞ|j | ¡t| ƒ|_ d}| |¡|j |¡| \|_ |_ |t t fkr|j d7_ d|_ qWd |j¡S)NFéTéÿÿÿÿrXrr?)ÚiterÚlenÚcompatÚENCODINGr\Ú ENDMARKERÚINDENTraÚDEDENTÚpoprZr[ÚNEWLINEÚNLrYrgr2) r%ÚiterableÚitÚindentsÚ startlinerKÚtok_typeÚtokenrbÚendÚlineÚindentr'r'r(r îsF            zUntokenizer.untokenizec Csèg}|jj}|dttfk}d}xÂt|g|ƒD]²}|dd…\}} |tkrR| |_q.|ttfkrf| d7} |t kr€|rzd| } d}nd}|t krš| | ¡q.n>|t kr®|  ¡q.n*|ttfkrÀd}n|rØ|rØ||dƒd}|| ƒq.WdS)NrFrhr^Tri) rYrarrrsrrmr\ÚNAMEÚNUMBERÚSTRINGrorprq) r%ryrtrvÚ toks_appendrwÚ prevstringÚtokÚtoknumÚtokvalr'r'r(rls8    zUntokenizer.compatN)r.r/r0r]rgr rlr'r'r'r(rWÙs %rWcCs*tƒ}| |¡}|jdk r&| |j¡}|S)aTransform tokens back into Python source code. It returns a bytes object, encoded using the ENCODING token, which is the first token sequence output by tokenize. Each element returned by the iterable must be a token sequence with at least two elements, a token number and token value. If only two tokens are passed, the resulting output is poor. Round-trip invariant for full input: Untokenized source will match input source exactly Round-trip invariant for limited input: # Output bytes will tokenize back to the input t1 = [tok[:2] for tok in tokenize(f.readline)] newcode = untokenize(t1) readline = BytesIO(newcode).readline t2 = [tok[:2] for tok in tokenize(readline)] assert t1 == t2 N)rWr r\Úencode)rtÚutÚoutr'r'r(r 8s    cCsH|dd… ¡ dd¡}|dks*| d¡r.dS|dks@| d¡rDd S|S) z(Imitates get_normal_name in tokenizer.c.Né Ú_rzutf-8zutf-8-)zlatin-1z iso-8859-1z iso-latin-1)zlatin-1-z iso-8859-1-z iso-latin-1-z iso-8859-1)ÚlowerÚreplaceÚ startswith)Úorig_encÚencr'r'r(Ú_get_normal_nameSs r�csÞy ˆjj‰Wntk r$d‰YnXd‰d}d}‡fdd„}‡‡fdd„}|ƒ}| t¡rpd‰|d d…}d }|s||gfS||ƒ}|r’||gfSt |¡s¦||gfS|ƒ}|sº||gfS||ƒ}|rÒ|||gfS|||gfS) a The detect_encoding() function is used to detect the encoding that should be used to decode a Python source file. It requires one argument, readline, in the same way as the tokenize() generator. It will call readline a maximum of twice, and return the encoding used (as a string) and a list of any lines (left as bytes) it has read in. It detects the encoding from the presence of a utf-8 bom or an encoding cookie as specified in pep-0263. If both a bom and a cookie are present, but disagree, a SyntaxError will be raised. If the encoding cookie is an invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, 'utf-8-sig' is returned. If no encoding is specified, then the default of 'utf-8' will be returned. NFzutf-8cs yˆƒStk rdSXdS)Nr5)Ú StopIterationr')Úreadliner'r(Ú read_or_stopvsz%detect_encoding..read_or_stopcsäy| d¡}Wn4tk rBd}ˆdk r6d |ˆ¡}t|ƒ‚YnXt |¡}|sVdSt| d¡ƒ}y t|ƒ}Wn:t k rªˆdkr’d|}n d ˆ|¡}t|ƒ‚YnXˆrà|dkr؈dkrÆd}n d ˆ¡}t|ƒ‚|d 7}|S) Nzutf-8z'invalid or missing encoding declarationz {} for {!r}rXzunknown encoding: zunknown encoding for {!r}: {}zencoding problem: utf-8z encoding problem for {!r}: utf-8z-sig) ÚdecodeÚUnicodeDecodeErrorr`Ú SyntaxErrorÚ cookie_reÚmatchr�r4rÚ LookupError)r{Ú line_stringÚmsgr—r\Úcodec)Ú bom_foundÚfilenamer'r(Ú find_cookie|s6     z$detect_encoding..find_cookieTéz utf-8-sig)Ú__self__ÚnameÚAttributeErrorrŒrÚblank_rer—)r‘r\Údefaultr’ržÚfirstÚsecondr')rœr�r‘r(r ^s8   &       cCsVt|dƒ}y0t|jƒ\}}| d¡t||dd�}d|_|S| ¡‚YnXdS)zXOpen a file in read only mode using the encoding detected by detect_encoding(). ÚrbrT)Úline_bufferingr:N)Ú _builtin_openr r‘ÚseekrÚmodeÚclose)r�Úbufferr\ÚlinesÚtextr'r'r(r»s  rcCsBddlm}m}t|ƒ\}}t|dƒ}|dƒ}t||||ƒj|ƒS)aÝ The tokenize() generator requires one argument, readline, which must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as bytes. Alternatively, readline can be a callable function terminating with StopIteration: readline = open(myfile, 'rb').__next__ # Example of alternate readline The generator produces 5-tuples with these members: the token type; the token string; a 2-tuple (srow, scol) of ints specifying the row and column where the token begins in the source; a 2-tuple (erow, ecol) of ints specifying the row and column where the token ends in the source; and the line on which the token was found. The line passed is the logical line; continuation lines are included. The first token sequence will always be an ENCODING token which tells you which encoding was used to decode the bytes stream. r)rÚrepeatr5)Ú itertoolsrr°r rjÚ _tokenizeÚ__next__)r‘rr°r\ÚconsumedÚrl_genÚemptyr'r'r(rËs   ccs€d}}}d}d\}}d}dg} |dk rH|dkr6d}tt|dddƒVd} d} �xšy| } |ƒ} Wntk rzd} YnX|dk rŽ|  |¡} |d 7}dt| ƒ} } |�rt| s¸td |ƒ‚| | ¡}|�r | d¡} }tt|| d|…|||f|| ƒVd\}}d}nf|�r^| d d…d k�r^| d d…dk�r^tt || ||t| ƒf|ƒVd}d}qTn|| }|| }qT�nÀ|dk�r|�s| �sŒPd}xf| | k�rö| | dk�r´|d 7}n6| | dk�rÔ|t d t }n| | dk�rèd}nP| d 7} �q’W| | k�rP| | dk�rˆ| | dk�r`| | d…  d¡}tt ||| f|| t|ƒf| ƒV| t|ƒ7} tt | | d…|| f|t| ƒf| ƒVqT|| dk�rÂ|  |¡tt| d| …|df|| f| ƒVxp|| dk�r|| k�rîtdd|| | fƒ‚| dd…} ttd|| f|| f| ƒV�qÄWn| �s0td|dfƒ‚d}�x²| | k�rèttƒ | | ¡}|�rº| d ¡\}}||f||f|}}} ||k�rŒ�q8| ||…| |}}||k�sÊ|dk�rà|dk�rà|dk�ràtt|||| ƒV�qä|dk�r|dk�rtt |||| ƒVntt|||| ƒV�qä|dk�r>tt |||| ƒV�qä|tk�r²tt|ƒ}| | | ¡}|�r”| d¡} | || …}tt|||| f| ƒVn||f}| |d…}| }P�qä|tk�sà|dd…tk�sà|dd…tk�rR|ddk�r>||f}tt |¡�p t |d ¡�p t |d¡ƒ}| |d…d }}| }Pntt|||| ƒVnf| ¡�rptt|||| ƒVnH|dk�r€d }n8|dk�r”|d 7}n|d k�r¦|d 8}tt|||| ƒVn*tt | | || f|| d f| ƒV| d 7} �q8WqTW| �r0| ddk�r0ttd|d t| ƒf|d t| ƒd fdƒVx0| d d…D] }ttd|df|dfdƒV�q>Wttd|df|dfdƒVdS)!NrÚ 0123456789)r?rz utf-8-sigzutf-8)rrr?r5rXzEOF in multi-line stringéþÿÿÿz\ éýÿÿÿz\ r^ú ú z# ú#z riz3unindent does not match any outer indentation levelz zEOF in multi-line statementrz...rhrŸÚ ú\z([{z)]})r rmr�r“rkrUr—rzrÚ ERRORTOKENÚtabsizeÚrstripÚCOMMENTrsraroÚIndentationErrorrprQÚ PseudoTokenÚspanr~rrÚ triple_quotedÚendpatsÚ single_quotedÚgetÚ isidentifierr}r*rn)r‘r\ÚlnumÚparenlevÚ continuedÚnumcharsÚcontstrÚneedcontÚcontlinervÚ last_liner{ÚposÚmaxÚstrstartÚendprogÚendmatchrzÚcolumnÚ comment_tokenÚ pseudomatchrbÚsposÚeposryÚinitialr|r'r'r(r²çs       *      "  "                  . r²cCs t|dƒS)N)r²)r‘r'r'r(Úgenerate_tokens srÞc s(ddl}dd„‰d‡fdd„ }|jdd�}|jdd d d d �|jd ddddd�| ¡}y’|jrŒ|j}t|dƒ�}tt|jƒƒ}WdQRXnd}t t j jdƒ}xF|D]>}|j }|j rº|j}d|j|j} td| t||jfƒq¤WW�n8tk �r:} z0| jddd…\} } || jd|| | fƒWdd} ~ XYnêtk �r€} z(| jd\} } || jd|| | fƒWdd} ~ XYn¤tk �r¬} z|| |ƒWdd} ~ XYnxtk �rÖ} z || ƒWdd} ~ XYnNtk �ròtdƒYn2tk �r"} zˆd| ƒ‚Wdd} ~ XYnXdS)NrcSst|tjd�dS)N)Úfile)ÚprintÚsysÚstderr)Úmessager'r'r(Úperror§szmain..perrorcsR|r"|f||f}ˆd|ƒn"|r8ˆd||fƒn ˆd|ƒt d¡dS)Nz%s:%d:%d: error: %sz %s: error: %sz error: %srX)ráÚexit)rãr�ÚlocationÚargs)rär'r(Úerrorªs zmain..errorzpython -m tokenize)Úprogr�r7z filename.pyz'the file to tokenize; defaults to stdin)ÚdestÚnargsÚmetavarÚhelpz-ez--exactÚexactÚ store_truez(display token names using the exact type)rêÚactionrír§zz %d,%d-%d,%d:z%-20s%-15s%-15rrXrŸz interrupted zunexpected error: %s)NN)ÚargparseÚArgumentParserÚ add_argumentÚ parse_argsr�r©Úlistrr‘r²ráÚstdinr"rîr-rbrzràr#r+rÃrçrUr•ÚOSErrorÚKeyboardInterruptÚ Exception) rñrèÚparserrçr�r<rYryÚ token_typeÚ token_rangeÚerrr{rØr')rär(Úmain£sN    &&  rþÚ__main__)�Ú__doc__Ú __author__Ú __credits__Úbuiltinsrr©ÚcodecsrrÚ collectionsÚiorr±rrDrMráryrNÚASCIIr–r£Ú__all__ÚLPARÚRPARÚLSQBÚRSQBÚCOLONÚCOMMAÚSEMIÚPLUSÚMINUSÚSTARÚSLASHÚVBARÚAMPERÚLESSÚGREATERÚEQUALÚDOTÚPERCENTÚLBRACEÚRBRACEÚEQEQUALÚNOTEQUALÚ LESSEQUALÚ GREATEREQUALÚTILDEÚ CIRCUMFLEXÚ LEFTSHIFTÚ RIGHTSHIFTÚ DOUBLESTARÚ PLUSEQUALÚMINEQUALÚ STAREQUALÚ SLASHEQUALÚ PERCENTEQUALÚ AMPEREQUALÚ VBAREQUALÚCIRCUMFLEXEQUALÚLEFTSHIFTEQUALÚRIGHTSHIFTEQUALÚDOUBLESTAREQUALÚ DOUBLESLASHÚDOUBLESLASHEQUALÚELLIPSISÚRARROWÚATÚATEQUALr,Ú namedtupler r4r6r8Ú WhitespaceÚCommentÚIgnoreÚNameÚ HexnumberÚ BinnumberÚ OctnumberÚ DecnumberÚ IntnumberÚExponentÚ PointfloatÚExpfloatÚ FloatnumberÚ ImagnumberÚNumberrLrQÚ StringPrefixÚSingleÚDoubleÚSingle3ÚDouble3ÚTripleÚStringÚOperatorÚBracketÚSpecialÚFunnyÚ PlainTokenÚTokenÚContStrÚ PseudoExtrasrÄrÇÚ_prefixÚsetrÈrÆrKr;rGrÀrùrUrVrWr r�r rr²rÞrþr.r'r'r'r(Ús                   _ ]:<