python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_tokenize.cpython-312.pyc

Αes6ddlmZddlmZddlmZmZmZmZmZm	Z	m
Z
mZmZm
Z
mZmZmZmZmZmZmZmZddlmZmZddlZddlmZddlmZmZddlm Z m!Z!ddlmZdd	l"m#Z#m$Z$m%Z%ddl&Z&ddl'Z'd
Z(GddeZ)Gd
de)Z*dZ+GddeZ,GddeZ-GddeZ.GddeZ/GddeZ0GddeZ1GddeZ2GddeZ3Gd d!eZ4Gd"d#ej:Z5e6d$k(rejnyy)%)support)	os_helper)tokenize
untokenizeNUMBERNAMEOPSTRING	ENDMARKERENCODINGtok_namedetect_encodingopenUntokenizergenerate_tokensNEWLINE!_generate_tokens_from_c_tokenizerDEDENT	TokenInfo
TokenError)BytesIOStringION)dedent)TestCasemock)VALID_UNDERSCORE_LITERALSINVALID_UNDERSCORE_LITERALS)run_test_scriptmake_scriptrun_python_until_endcg}t|j}|ddv}|D]P\}}}}}	|tk(r|S|r|tk(r	|d|k(r)t|}|jd|dd|dd|d|R|S)Nz
r    10 13)len
splitlinesrrr
append)
token_generator
source_stringresult	num_linesmissing_trailing_nltypetokenstartendlines
          F/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/test_tokenize.pystringify_tokens_from_sourcer5s
FM,,./I'+69)8C%eUC9M47?s1v7J~

T"IQurl!E7!C5ABCMceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZy)TokenizeTestct|jd}tt|j|}|j|dg|j
jzy)Nutf-8z*    ENCODING   'utf-8'       (0, 0) (0, 0))rencoder5rreadlineassertEqualrstripr(selfsexpectedfr,s     r4check_tokenizezTokenizeTest.check_tokenize.sZ
AHHW%&-hqzz.BAFFG!*5578	9r6cd}|jt5tt|jdddd}|jt5tt|jdddd}|jt5tt|jdddy#1swYxYw#1swYZxYw#1swYyxYw)Nc3Kddyw)NsdfosdgrHr6r4genz/TokenizeTest.test_invalid_readline.<locals>.gen8sOO
c3Kddyw)NssdfosdgrHrHr6r4rIz/TokenizeTest.test_invalid_readline.<locals>.gen>srJc3Kdddzyw)NrGrrHrHr6r4rIz/TokenizeTest.test_invalid_readline.<locals>.genDsO
aCs
)assertRaises	TypeErrorlistr__next__rZeroDivisionError)r@rIs  r4test_invalid_readlinez"TokenizeTest.test_invalid_readline7s	

y
)	+#%..)*	+	

y
)	201	2	

0
1	201	2	2	+	+	2	2	2	2s#$C$C!$C&CC#&C/ctdjd}tt|j}|j|djt|j|djty)Nxr:r")	rr;rPrr<r=r/rr)r@rCtokenss   r4test_implicit_newlinez"TokenizeTest.test_implicit_newlineJsZ
CJJw'(hqzz*+'2)4r6cP|jdd|jdd|jdd|jddd	}t|j}|jtd
5}t|D]}	ddd|j
jjd|j
|jjd|j
|jjd|j
|jjd|j
|jjd
|j
|jjd
|j
|jjdy#1swYxYw)Nz1 + 1z    NUMBER     '1'           (1, 0) (1, 1)
    OP         '+'           (1, 2) (1, 3)
    NUMBER     '1'           (1, 4) (1, 5)
    z3if False:
    # NL
    
    True = False # NEWLINE
af    NAME       'if'          (1, 0) (1, 2)
    NAME       'False'       (1, 3) (1, 8)
    OP         ':'           (1, 8) (1, 9)
    NEWLINE    '\n'          (1, 9) (1, 10)
    COMMENT    '# NL'        (2, 4) (2, 8)
    NL         '\n'          (2, 8) (2, 9)
    NL         '\n'          (3, 4) (3, 5)
    INDENT     '    '        (4, 0) (4, 4)
    NAME       'True'        (4, 4) (4, 8)
    OP         '='           (4, 9) (4, 10)
    NAME       'False'       (4, 11) (4, 16)
    COMMENT    '# NEWLINE'   (4, 17) (4, 26)
    NEWLINE    '\n'          (4, 26) (4, 27)
    DEDENT     ''            (5, 0) (5, 0)
    z%if True:
    # NL
    foo='bar'

a@    NAME       'if'          (1, 0) (1, 2)
    NAME       'True'        (1, 3) (1, 7)
    OP         ':'           (1, 7) (1, 8)
    NEWLINE    '\r\n'        (1, 8) (1, 10)
    COMMENT    '# NL'        (2, 4) (2, 8)
    NL         '\r\n'        (2, 8) (2, 10)
    INDENT     '    '        (3, 0) (3, 4)
    NAME       'foo'         (3, 4) (3, 7)
    OP         '='           (3, 7) (3, 8)
    STRING     "'bar'"       (3, 8) (3, 13)
    NEWLINE    '\r\n'        (3, 13) (3, 15)
    NL         '\r\n'        (4, 0) (4, 2)
    DEDENT     ''            (5, 0) (5, 0)
            zx = 1 + \
1
a    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '1'           (1, 4) (1, 5)
    OP         '+'           (1, 6) (1, 7)
    NUMBER     '1'           (2, 0) (2, 1)
    NEWLINE    '\r\n'        (2, 1) (2, 3)
            sdef k(x):
    x += 2
  x += 5
z3unindent does not match any outer indentation level<string>	z  x += 5)rDrr<assertRaisesRegexIndentationErrorrr=	exceptionlinenofilename
end_lineno
end_offsetmsgoffsettext)r@indent_error_filer<etoks     r4
test_basiczTokenizeTest.test_basicRsG&		
	
;=		(	
KN	 	
14	
,-66

#
#$4%>?	BC)

	
	
++Q/--z://6//6
KKOOA	C	
++Q/)):6		s6FF%cH|jdd|jdd|jdd|jdd|jd	d
|jdd|jd
d|jdd|jddy)N0xff <= 255z    NUMBER     '0xff'        (1, 0) (1, 4)
    OP         '<='          (1, 5) (1, 7)
    NUMBER     '255'         (1, 8) (1, 11)
    0b10 <= 255z    NUMBER     '0b10'        (1, 0) (1, 4)
    OP         '<='          (1, 5) (1, 7)
    NUMBER     '255'         (1, 8) (1, 11)
    0o123 <= 0O123z    NUMBER     '0o123'       (1, 0) (1, 5)
    OP         '<='          (1, 6) (1, 8)
    NUMBER     '0O123'       (1, 9) (1, 14)
    1234567 > ~0x15z    NUMBER     '1234567'     (1, 0) (1, 7)
    OP         '>'           (1, 8) (1, 9)
    OP         '~'           (1, 10) (1, 11)
    NUMBER     '0x15'        (1, 11) (1, 15)
    2134568 != 1231515z    NUMBER     '2134568'     (1, 0) (1, 7)
    OP         '!='          (1, 8) (1, 10)
    NUMBER     '1231515'     (1, 11) (1, 18)
    (-124561-1) & 200000000ac    OP         '('           (1, 0) (1, 1)
    OP         '-'           (1, 1) (1, 2)
    NUMBER     '124561'      (1, 2) (1, 8)
    OP         '-'           (1, 8) (1, 9)
    NUMBER     '1'           (1, 9) (1, 10)
    OP         ')'           (1, 10) (1, 11)
    OP         '&'           (1, 12) (1, 13)
    NUMBER     '200000000'   (1, 14) (1, 23)
    0xdeadbeef != -1z    NUMBER     '0xdeadbeef'  (1, 0) (1, 10)
    OP         '!='          (1, 11) (1, 13)
    OP         '-'           (1, 14) (1, 15)
    NUMBER     '1'           (1, 15) (1, 16)
    0xdeadc0de & 12345z    NUMBER     '0xdeadc0de'  (1, 0) (1, 10)
    OP         '&'           (1, 11) (1, 12)
    NUMBER     '12345'       (1, 13) (1, 18)
    0xFF & 0x15 | 1234z    NUMBER     '0xFF'        (1, 0) (1, 4)
    OP         '&'           (1, 5) (1, 6)
    NUMBER     '0x15'        (1, 7) (1, 11)
    OP         '|'           (1, 12) (1, 13)
    NUMBER     '1234'        (1, 14) (1, 18)
    rDr@s r4test_intzTokenizeTest.test_intsM,		
	
M,		
	
,/		
	
-0			
03		
	
5	8				
.1			
03		
	
03		r6c|jdd|jdd|jdd|jddy)	Nzx = 0z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '0'           (1, 4) (1, 5)
    zx = 0xfffffffffffz    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '0xfffffffffff' (1, 4) (1, 17)
    zx = 123141242151251616110z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '123141242151251616110' (1, 4) (1, 25)
    zx = -15921590215012591z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    OP         '-'           (1, 4) (1, 5)
    NUMBER     '15921590215012591' (1, 5) (1, 22)
    rurvs r4	test_longzTokenizeTest.test_longs_G&		
	
/2		
	
7:		
	
47		r6c|jdd|jdd|jdd|jdd|jd	d
|jdd|jd
dy)Nx = 3.14159z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '3.14159'     (1, 4) (1, 11)
    x = 314159.z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '314159.'     (1, 4) (1, 11)
    x = .314159z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '.314159'     (1, 4) (1, 11)
    x = 3e14159z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '3e14159'     (1, 4) (1, 11)
    	x = 3E123z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '3E123'       (1, 4) (1, 9)
    
x+y = 3e-1230z    NAME       'x'           (1, 0) (1, 1)
    OP         '+'           (1, 1) (1, 2)
    NAME       'y'           (1, 2) (1, 3)
    OP         '='           (1, 4) (1, 5)
    NUMBER     '3e-1230'     (1, 6) (1, 13)
    x = 3.14e159z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '3.14e159'    (1, 4) (1, 12)
    rurvs r4
test_floatzTokenizeTest.test_floatsM,		
	
M,		
	
M,		
	
M,		
	
K*		
	
O.			
N-		r6cd}tD]}d|vr|j|||!ddh}tD](}||vr	|||j	|||*y#t$rY7wxYw)Nct|jd}t|jD]\}}}}}|tk(s|cSy)Nr:z
invalid token)rr;rr<r)rArCtoktyper0r1r2r3s       r4number_tokenz;TokenizeTest.test_underscore_literals.<locals>.number_tokensJ)*A4<QZZ4H
!0sDf$ L
!#r6(0_709_99)rr=rrassertNotEqual)r@rlitextra_valid_casess    r4test_underscore_literalsz%TokenizeTest.test_underscore_literalss	#-	5Ccz\#.4		5#G,.	8C''
S!
S 137	8


sA""	A.-A.c|jdd|jdd|jdd|jdd|jd	d
|jdd|jd
d|jdd|jdd|jdd|jdd|jdd|jdd|jdd|jdd|jdd |jd!d"|jd#d$|jd%d&|jd'd(|jd)d*|jd+d,|jd-d.|jd/d0|jd1d2|jd3d4|jd5d6|jd7d8|jd9d:|jd;d<|jd=d>|jd?d@|jdAdBy)CNx = ''; y = ""a5    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    STRING     "''"          (1, 4) (1, 6)
    OP         ';'           (1, 6) (1, 7)
    NAME       'y'           (1, 8) (1, 9)
    OP         '='           (1, 10) (1, 11)
    STRING     '""'          (1, 12) (1, 14)
    x = '"'; y = "'"a6    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    STRING     '\'"\''       (1, 4) (1, 7)
    OP         ';'           (1, 7) (1, 8)
    NAME       'y'           (1, 9) (1, 10)
    OP         '='           (1, 11) (1, 12)
    STRING     '"\'"'        (1, 13) (1, 16)
    x = "doesn't "shrink", does it"z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    STRING     '"doesn\'t "' (1, 4) (1, 14)
    NAME       'shrink'      (1, 14) (1, 20)
    STRING     '", does it"' (1, 20) (1, 31)
    x = 'abc' + 'ABC'z    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    STRING     "'abc'"       (1, 4) (1, 9)
    OP         '+'           (1, 10) (1, 11)
    STRING     "'ABC'"       (1, 12) (1, 17)
    y = "ABC" + "ABC"z    NAME       'y'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    STRING     '"ABC"'       (1, 4) (1, 9)
    OP         '+'           (1, 10) (1, 11)
    STRING     '"ABC"'       (1, 12) (1, 17)
    %x = r'abc' + r'ABC' + R'ABC' + R'ABC'a    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    STRING     "r'abc'"      (1, 4) (1, 10)
    OP         '+'           (1, 11) (1, 12)
    STRING     "r'ABC'"      (1, 13) (1, 19)
    OP         '+'           (1, 20) (1, 21)
    STRING     "R'ABC'"      (1, 22) (1, 28)
    OP         '+'           (1, 29) (1, 30)
    STRING     "R'ABC'"      (1, 31) (1, 37)
    %y = r"abc" + r"ABC" + R"ABC" + R"ABC"a    NAME       'y'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    STRING     'r"abc"'      (1, 4) (1, 10)
    OP         '+'           (1, 11) (1, 12)
    STRING     'r"ABC"'      (1, 13) (1, 19)
    OP         '+'           (1, 20) (1, 21)
    STRING     'R"ABC"'      (1, 22) (1, 28)
    OP         '+'           (1, 29) (1, 30)
    STRING     'R"ABC"'      (1, 31) (1, 37)
    u'abc' + U'abc'z    STRING     "u'abc'"      (1, 0) (1, 6)
    OP         '+'           (1, 7) (1, 8)
    STRING     "U'abc'"      (1, 9) (1, 15)
    u"abc" + U"abc"z    STRING     'u"abc"'      (1, 0) (1, 6)
    OP         '+'           (1, 7) (1, 8)
    STRING     'U"abc"'      (1, 9) (1, 15)
    b'abc' + B'abc'z    STRING     "b'abc'"      (1, 0) (1, 6)
    OP         '+'           (1, 7) (1, 8)
    STRING     "B'abc'"      (1, 9) (1, 15)
    b"abc" + B"abc"z    STRING     'b"abc"'      (1, 0) (1, 6)
    OP         '+'           (1, 7) (1, 8)
    STRING     'B"abc"'      (1, 9) (1, 15)
    %br'abc' + bR'abc' + Br'abc' + BR'abc'a;    STRING     "br'abc'"     (1, 0) (1, 7)
    OP         '+'           (1, 8) (1, 9)
    STRING     "bR'abc'"     (1, 10) (1, 17)
    OP         '+'           (1, 18) (1, 19)
    STRING     "Br'abc'"     (1, 20) (1, 27)
    OP         '+'           (1, 28) (1, 29)
    STRING     "BR'abc'"     (1, 30) (1, 37)
    %br"abc" + bR"abc" + Br"abc" + BR"abc"a;    STRING     'br"abc"'     (1, 0) (1, 7)
    OP         '+'           (1, 8) (1, 9)
    STRING     'bR"abc"'     (1, 10) (1, 17)
    OP         '+'           (1, 18) (1, 19)
    STRING     'Br"abc"'     (1, 20) (1, 27)
    OP         '+'           (1, 28) (1, 29)
    STRING     'BR"abc"'     (1, 30) (1, 37)
    %rb'abc' + rB'abc' + Rb'abc' + RB'abc'a;    STRING     "rb'abc'"     (1, 0) (1, 7)
    OP         '+'           (1, 8) (1, 9)
    STRING     "rB'abc'"     (1, 10) (1, 17)
    OP         '+'           (1, 18) (1, 19)
    STRING     "Rb'abc'"     (1, 20) (1, 27)
    OP         '+'           (1, 28) (1, 29)
    STRING     "RB'abc'"     (1, 30) (1, 37)
    %rb"abc" + rB"abc" + Rb"abc" + RB"abc"a;    STRING     'rb"abc"'     (1, 0) (1, 7)
    OP         '+'           (1, 8) (1, 9)
    STRING     'rB"abc"'     (1, 10) (1, 17)
    OP         '+'           (1, 18) (1, 19)
    STRING     'Rb"abc"'     (1, 20) (1, 27)
    OP         '+'           (1, 28) (1, 29)
    STRING     'RB"abc"'     (1, 30) (1, 37)
    "a\
de\
fg"3    STRING     '"a\\\nde\\\nfg"' (1, 0) (3, 3)
    u"a\
de"/    STRING     'u"a\\\nde"'  (1, 0) (2, 3)
    rb"a\
d"/    STRING     'rb"a\\\nd"'  (1, 0) (2, 2)
    
"""a\
b"""0    STRING     '"""a\\\nb"""' (1, 0) (2, 4)
    u"""a\
b"""1    STRING     'u"""a\\\nb"""' (1, 0) (2, 4)
    rb"""a\
b\
c"""7    STRING     'rb"""a\\\nb\\\nc"""' (1, 0) (3, 4)
    f"abc"    FSTRING_START 'f"'          (1, 0) (1, 2)
    FSTRING_MIDDLE 'abc'         (1, 2) (1, 5)
    FSTRING_END '"'           (1, 5) (1, 6)
    	fR"a{b}c"a=    FSTRING_START 'fR"'         (1, 0) (1, 3)
    FSTRING_MIDDLE 'a'           (1, 3) (1, 4)
    OP         '{'           (1, 4) (1, 5)
    NAME       'b'           (1, 5) (1, 6)
    OP         '}'           (1, 6) (1, 7)
    FSTRING_MIDDLE 'c'           (1, 7) (1, 8)
    FSTRING_END '"'           (1, 8) (1, 9)
    zfR"a{{{b!r}}}c"a    FSTRING_START 'fR"'         (1, 0) (1, 3)
    FSTRING_MIDDLE 'a{'          (1, 3) (1, 5)
    OP         '{'           (1, 6) (1, 7)
    NAME       'b'           (1, 7) (1, 8)
    OP         '!'           (1, 8) (1, 9)
    NAME       'r'           (1, 9) (1, 10)
    OP         '}'           (1, 10) (1, 11)
    FSTRING_MIDDLE '}'           (1, 11) (1, 12)
    FSTRING_MIDDLE 'c'           (1, 13) (1, 14)
    FSTRING_END '"'           (1, 14) (1, 15)
    zf"{{{1+1}}}"a    FSTRING_START 'f"'          (1, 0) (1, 2)
    FSTRING_MIDDLE '{'           (1, 2) (1, 3)
    OP         '{'           (1, 4) (1, 5)
    NUMBER     '1'           (1, 5) (1, 6)
    OP         '+'           (1, 6) (1, 7)
    NUMBER     '1'           (1, 7) (1, 8)
    OP         '}'           (1, 8) (1, 9)
    FSTRING_MIDDLE '}'           (1, 9) (1, 10)
    FSTRING_END '"'           (1, 11) (1, 12)
    zf"""{f'''{f'{f"{1+1}"}'}'''}"""ad    FSTRING_START 'f"""'        (1, 0) (1, 4)
    OP         '{'           (1, 4) (1, 5)
    FSTRING_START "f'''"        (1, 5) (1, 9)
    OP         '{'           (1, 9) (1, 10)
    FSTRING_START "f'"          (1, 10) (1, 12)
    OP         '{'           (1, 12) (1, 13)
    FSTRING_START 'f"'          (1, 13) (1, 15)
    OP         '{'           (1, 15) (1, 16)
    NUMBER     '1'           (1, 16) (1, 17)
    OP         '+'           (1, 17) (1, 18)
    NUMBER     '1'           (1, 18) (1, 19)
    OP         '}'           (1, 19) (1, 20)
    FSTRING_END '"'           (1, 20) (1, 21)
    OP         '}'           (1, 21) (1, 22)
    FSTRING_END "'"           (1, 22) (1, 23)
    OP         '}'           (1, 23) (1, 24)
    FSTRING_END "'''"         (1, 24) (1, 27)
    OP         '}'           (1, 27) (1, 28)
    FSTRING_END '"""'         (1, 28) (1, 31)
    z.f"""     x
str(data, encoding={invalid!r})
"""a    FSTRING_START 'f"""'        (1, 0) (1, 4)
    FSTRING_MIDDLE '     x\nstr(data, encoding=' (1, 4) (2, 19)
    OP         '{'           (2, 19) (2, 20)
    NAME       'invalid'     (2, 20) (2, 27)
    OP         '!'           (2, 27) (2, 28)
    NAME       'r'           (2, 28) (2, 29)
    OP         '}'           (2, 29) (2, 30)
    FSTRING_MIDDLE ')\n'         (2, 30) (3, 0)
    FSTRING_END '"""'         (3, 0) (3, 3)
    z#f"""123456789
something{None}bad"""aO    FSTRING_START 'f"""'        (1, 0) (1, 4)
    FSTRING_MIDDLE '123456789\nsomething' (1, 4) (2, 9)
    OP         '{'           (2, 9) (2, 10)
    NAME       'None'        (2, 10) (2, 14)
    OP         '}'           (2, 14) (2, 15)
    FSTRING_MIDDLE 'bad'         (2, 15) (2, 18)
    FSTRING_END '"""'         (2, 18) (2, 21)
    
f"""abc"""    FSTRING_START 'f"""'        (1, 0) (1, 4)
    FSTRING_MIDDLE 'abc'         (1, 4) (1, 7)
    FSTRING_END '"""'         (1, 7) (1, 10)
    f"abc\
def"    FSTRING_START 'f"'          (1, 0) (1, 2)
    FSTRING_MIDDLE 'abc\\\ndef'  (1, 2) (2, 3)
    FSTRING_END '"'           (2, 3) (2, 4)
    Rf"abc\
def"    FSTRING_START 'Rf"'         (1, 0) (1, 3)
    FSTRING_MIDDLE 'abc\\\ndef'  (1, 3) (2, 3)
    FSTRING_END '"'           (2, 3) (2, 4)
    z5f'some words {a+b:.3f} more words {c+d=} final words'aA    FSTRING_START "f'"          (1, 0) (1, 2)
    FSTRING_MIDDLE 'some words ' (1, 2) (1, 13)
    OP         '{'           (1, 13) (1, 14)
    NAME       'a'           (1, 14) (1, 15)
    OP         '+'           (1, 15) (1, 16)
    NAME       'b'           (1, 16) (1, 17)
    OP         ':'           (1, 17) (1, 18)
    FSTRING_MIDDLE '.3f'         (1, 18) (1, 21)
    OP         '}'           (1, 21) (1, 22)
    FSTRING_MIDDLE ' more words ' (1, 22) (1, 34)
    OP         '{'           (1, 34) (1, 35)
    NAME       'c'           (1, 35) (1, 36)
    OP         '+'           (1, 36) (1, 37)
    NAME       'd'           (1, 37) (1, 38)
    OP         '='           (1, 38) (1, 39)
    OP         '}'           (1, 39) (1, 40)
    FSTRING_MIDDLE ' final words' (1, 40) (1, 52)
    FSTRING_END "'"           (1, 52) (1, 53)
    z
f'''{
3
=}'''a`    FSTRING_START "f'''"        (1, 0) (1, 4)
    OP         '{'           (1, 4) (1, 5)
    NL         '\n'          (1, 5) (1, 6)
    NUMBER     '3'           (2, 0) (2, 1)
    NL         '\n'          (2, 1) (2, 2)
    OP         '='           (3, 0) (3, 1)
    OP         '}'           (3, 1) (3, 2)
    FSTRING_END "'''"         (3, 2) (3, 5)
    rurvs r4test_stringzTokenizeTest.test_string+s1.1			
14			
AD			
/2			
/2			
C
F
			
C
F
			
-0		
	
-0			
-0		
	
-0		
	
CF			
CF			
CF			
CF			
		
	
			
			
			
			
		
	
H'		
	
K*			
-0			
N
-
			
EH		*	
N
Q
			
BE			
L+		
	
			
			
SV		(	
				r6cp|jdd|jdd|jddy)N!def d22(a, b, c=2, d=2, *k): passa    NAME       'def'         (1, 0) (1, 3)
    NAME       'd22'         (1, 4) (1, 7)
    OP         '('           (1, 7) (1, 8)
    NAME       'a'           (1, 8) (1, 9)
    OP         ','           (1, 9) (1, 10)
    NAME       'b'           (1, 11) (1, 12)
    OP         ','           (1, 12) (1, 13)
    NAME       'c'           (1, 14) (1, 15)
    OP         '='           (1, 15) (1, 16)
    NUMBER     '2'           (1, 16) (1, 17)
    OP         ','           (1, 17) (1, 18)
    NAME       'd'           (1, 19) (1, 20)
    OP         '='           (1, 20) (1, 21)
    NUMBER     '2'           (1, 21) (1, 22)
    OP         ','           (1, 22) (1, 23)
    OP         '*'           (1, 24) (1, 25)
    NAME       'k'           (1, 25) (1, 26)
    OP         ')'           (1, 26) (1, 27)
    OP         ':'           (1, 27) (1, 28)
    NAME       'pass'        (1, 29) (1, 33)
    def d01v_(a=1, *k, **w): passa    NAME       'def'         (1, 0) (1, 3)
    NAME       'd01v_'       (1, 4) (1, 9)
    OP         '('           (1, 9) (1, 10)
    NAME       'a'           (1, 10) (1, 11)
    OP         '='           (1, 11) (1, 12)
    NUMBER     '1'           (1, 12) (1, 13)
    OP         ','           (1, 13) (1, 14)
    OP         '*'           (1, 15) (1, 16)
    NAME       'k'           (1, 16) (1, 17)
    OP         ','           (1, 17) (1, 18)
    OP         '**'          (1, 19) (1, 21)
    NAME       'w'           (1, 21) (1, 22)
    OP         ')'           (1, 22) (1, 23)
    OP         ':'           (1, 23) (1, 24)
    NAME       'pass'        (1, 25) (1, 29)
    &def d23(a: str, b: int=3) -> int: passa    NAME       'def'         (1, 0) (1, 3)
    NAME       'd23'         (1, 4) (1, 7)
    OP         '('           (1, 7) (1, 8)
    NAME       'a'           (1, 8) (1, 9)
    OP         ':'           (1, 9) (1, 10)
    NAME       'str'         (1, 11) (1, 14)
    OP         ','           (1, 14) (1, 15)
    NAME       'b'           (1, 16) (1, 17)
    OP         ':'           (1, 17) (1, 18)
    NAME       'int'         (1, 19) (1, 22)
    OP         '='           (1, 22) (1, 23)
    NUMBER     '3'           (1, 23) (1, 24)
    OP         ')'           (1, 24) (1, 25)
    OP         '->'          (1, 26) (1, 28)
    NAME       'int'         (1, 29) (1, 32)
    OP         ':'           (1, 32) (1, 33)
    NAME       'pass'        (1, 34) (1, 38)
    rurvs r4
test_functionzTokenizeTest.test_function@sJ?B		,	
;>		"	
DG		r6c(|jddy)NXif 1 < 1 > 1 == 1 >= 5 <= 0x15 <= 0x12 != 1 and 5 in 1 not in 1 is 1 or 5 is not 1: passa    NAME       'if'          (1, 0) (1, 2)
    NUMBER     '1'           (1, 3) (1, 4)
    OP         '<'           (1, 5) (1, 6)
    NUMBER     '1'           (1, 7) (1, 8)
    OP         '>'           (1, 9) (1, 10)
    NUMBER     '1'           (1, 11) (1, 12)
    OP         '=='          (1, 13) (1, 15)
    NUMBER     '1'           (1, 16) (1, 17)
    OP         '>='          (1, 18) (1, 20)
    NUMBER     '5'           (1, 21) (1, 22)
    OP         '<='          (1, 23) (1, 25)
    NUMBER     '0x15'        (1, 26) (1, 30)
    OP         '<='          (1, 31) (1, 33)
    NUMBER     '0x12'        (1, 34) (1, 38)
    OP         '!='          (1, 39) (1, 41)
    NUMBER     '1'           (1, 42) (1, 43)
    NAME       'and'         (1, 44) (1, 47)
    NUMBER     '5'           (1, 48) (1, 49)
    NAME       'in'          (1, 50) (1, 52)
    NUMBER     '1'           (1, 53) (1, 54)
    NAME       'not'         (1, 55) (1, 58)
    NAME       'in'          (1, 59) (1, 61)
    NUMBER     '1'           (1, 62) (1, 63)
    NAME       'is'          (1, 64) (1, 66)
    NUMBER     '1'           (1, 67) (1, 68)
    NAME       'or'          (1, 69) (1, 71)
    NUMBER     '5'           (1, 72) (1, 73)
    NAME       'is'          (1, 74) (1, 76)
    NAME       'not'         (1, 77) (1, 80)
    NUMBER     '1'           (1, 81) (1, 82)
    OP         ':'           (1, 82) (1, 83)
    NAME       'pass'        (1, 84) (1, 88)
    rurvs r4test_comparisonzTokenizeTest.test_comparison|M!O"		r6c(|jddy)Nzx = 1 << 1 >> 5a6    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '1'           (1, 4) (1, 5)
    OP         '<<'          (1, 6) (1, 8)
    NUMBER     '1'           (1, 9) (1, 10)
    OP         '>>'          (1, 11) (1, 13)
    NUMBER     '5'           (1, 14) (1, 15)
    rurvs r4
test_shiftzTokenizeTest.test_shifts-0		r6c(|jddy)N%x = 1 - y + 15 - 1 + 0x124 + z + a[5]a$    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '1'           (1, 4) (1, 5)
    OP         '-'           (1, 6) (1, 7)
    NAME       'y'           (1, 8) (1, 9)
    OP         '+'           (1, 10) (1, 11)
    NUMBER     '15'          (1, 12) (1, 14)
    OP         '-'           (1, 15) (1, 16)
    NUMBER     '1'           (1, 17) (1, 18)
    OP         '+'           (1, 19) (1, 20)
    NUMBER     '0x124'       (1, 21) (1, 26)
    OP         '+'           (1, 27) (1, 28)
    NAME       'z'           (1, 29) (1, 30)
    OP         '+'           (1, 31) (1, 32)
    NAME       'a'           (1, 33) (1, 34)
    OP         '['           (1, 34) (1, 35)
    NUMBER     '5'           (1, 35) (1, 36)
    OP         ']'           (1, 36) (1, 37)
    rurvs r4
test_additivezTokenizeTest.test_additiveCF		r6c(|jddy)Nx = 1//1*1/5*12%0x12@42a    NAME       'x'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    NUMBER     '1'           (1, 4) (1, 5)
    OP         '//'          (1, 5) (1, 7)
    NUMBER     '1'           (1, 7) (1, 8)
    OP         '*'           (1, 8) (1, 9)
    NUMBER     '1'           (1, 9) (1, 10)
    OP         '/'           (1, 10) (1, 11)
    NUMBER     '5'           (1, 11) (1, 12)
    OP         '*'           (1, 12) (1, 13)
    NUMBER     '12'          (1, 13) (1, 15)
    OP         '%'           (1, 15) (1, 16)
    NUMBER     '0x12'        (1, 16) (1, 20)
    OP         '@'           (1, 20) (1, 21)
    NUMBER     '42'          (1, 21) (1, 23)
    rurvs r4test_multiplicativez TokenizeTest.test_multiplicative58		r6cL|jdd|jddy)N~1 ^ 1 & 1 |1 ^ -1a    OP         '~'           (1, 0) (1, 1)
    NUMBER     '1'           (1, 1) (1, 2)
    OP         '^'           (1, 3) (1, 4)
    NUMBER     '1'           (1, 5) (1, 6)
    OP         '&'           (1, 7) (1, 8)
    NUMBER     '1'           (1, 9) (1, 10)
    OP         '|'           (1, 11) (1, 12)
    NUMBER     '1'           (1, 12) (1, 13)
    OP         '^'           (1, 14) (1, 15)
    OP         '-'           (1, 16) (1, 17)
    NUMBER     '1'           (1, 17) (1, 18)
    -1*1/1+1*1//1 - ---1**1aH    OP         '-'           (1, 0) (1, 1)
    NUMBER     '1'           (1, 1) (1, 2)
    OP         '*'           (1, 2) (1, 3)
    NUMBER     '1'           (1, 3) (1, 4)
    OP         '/'           (1, 4) (1, 5)
    NUMBER     '1'           (1, 5) (1, 6)
    OP         '+'           (1, 6) (1, 7)
    NUMBER     '1'           (1, 7) (1, 8)
    OP         '*'           (1, 8) (1, 9)
    NUMBER     '1'           (1, 9) (1, 10)
    OP         '//'          (1, 10) (1, 12)
    NUMBER     '1'           (1, 12) (1, 13)
    OP         '-'           (1, 14) (1, 15)
    OP         '-'           (1, 16) (1, 17)
    OP         '-'           (1, 17) (1, 18)
    OP         '-'           (1, 18) (1, 19)
    NUMBER     '1'           (1, 19) (1, 20)
    OP         '**'          (1, 20) (1, 22)
    NUMBER     '1'           (1, 22) (1, 23)
    rurvs r4
test_unaryzTokenizeTest.test_unarys003			
58		r6c(|jddy)N/import sys, time
x = sys.modules['time'].time()a    NAME       'import'      (1, 0) (1, 6)
    NAME       'sys'         (1, 7) (1, 10)
    OP         ','           (1, 10) (1, 11)
    NAME       'time'        (1, 12) (1, 16)
    NEWLINE    '\n'          (1, 16) (1, 17)
    NAME       'x'           (2, 0) (2, 1)
    OP         '='           (2, 2) (2, 3)
    NAME       'sys'         (2, 4) (2, 7)
    OP         '.'           (2, 7) (2, 8)
    NAME       'modules'     (2, 8) (2, 15)
    OP         '['           (2, 15) (2, 16)
    STRING     "'time'"      (2, 16) (2, 22)
    OP         ']'           (2, 22) (2, 23)
    OP         '.'           (2, 23) (2, 24)
    NAME       'time'        (2, 24) (2, 28)
    OP         '('           (2, 28) (2, 29)
    OP         ')'           (2, 29) (2, 30)
    rurvs r4
test_selectorzTokenizeTest.test_selectorNQ		r6c(|jddy)N @staticmethod
def foo(x,y): passa    OP         '@'           (1, 0) (1, 1)
    NAME       'staticmethod' (1, 1) (1, 13)
    NEWLINE    '\n'          (1, 13) (1, 14)
    NAME       'def'         (2, 0) (2, 3)
    NAME       'foo'         (2, 4) (2, 7)
    OP         '('           (2, 7) (2, 8)
    NAME       'x'           (2, 8) (2, 9)
    OP         ','           (2, 9) (2, 10)
    NAME       'y'           (2, 10) (2, 11)
    OP         ')'           (2, 11) (2, 12)
    OP         ':'           (2, 12) (2, 13)
    NAME       'pass'        (2, 14) (2, 18)
    rurvs r4test_methodzTokenizeTest.test_method?
B
		r6c(|jddy)Nzdef f():
	if x
        	passa_    NAME       'def'         (1, 0) (1, 3)
    NAME       'f'           (1, 4) (1, 5)
    OP         '('           (1, 5) (1, 6)
    OP         ')'           (1, 6) (1, 7)
    OP         ':'           (1, 7) (1, 8)
    NEWLINE    '\n'          (1, 8) (1, 9)
    INDENT     '\t'          (2, 0) (2, 1)
    NAME       'if'          (2, 1) (2, 3)
    NAME       'x'           (2, 4) (2, 5)
    NEWLINE    '\n'          (2, 5) (2, 6)
    INDENT     '        \t'  (3, 0) (3, 9)
    NAME       'pass'        (3, 9) (3, 13)
    DEDENT     ''            (4, 0) (4, 0)
    DEDENT     ''            (4, 0) (4, 0)
    rurvs r4	test_tabszTokenizeTest.test_tabs%s-/		r6c(|jddy)Nu!Örter = 'places'
grün = 'green'u7    NAME       'Örter'       (1, 0) (1, 5)
    OP         '='           (1, 6) (1, 7)
    STRING     "'places'"    (1, 8) (1, 16)
    NEWLINE    '\n'          (1, 16) (1, 17)
    NAME       'grün'        (2, 0) (2, 4)
    OP         '='           (2, 5) (2, 6)
    STRING     "'green'"     (2, 7) (2, 14)
    rurvs r4test_non_ascii_identifiersz'TokenizeTest.test_non_ascii_identifiers:s@C		r6c(|jddy)N#Örter = u'places'
grün = U'green'u7    NAME       'Örter'       (1, 0) (1, 5)
    OP         '='           (1, 6) (1, 7)
    STRING     "u'places'"   (1, 8) (1, 17)
    NEWLINE    '\n'          (1, 17) (1, 18)
    NAME       'grün'        (2, 0) (2, 4)
    OP         '='           (2, 5) (2, 6)
    STRING     "U'green'"    (2, 7) (2, 15)
    rurvs r4test_unicodezTokenizeTest.test_unicodeFBE		r6c|jdd|jdd|jdd|jdd|jd	d
|jdd|jd
d|jdd|jdd|jdd|jdd|jdd|jdd|jdd|jdd|jdd |jd!d"|jd#d$|jd%d&|jd'd(|jd)d*y)+N	async = 1z    NAME       'async'       (1, 0) (1, 5)
    OP         '='           (1, 6) (1, 7)
    NUMBER     '1'           (1, 8) (1, 9)
    a = (async = 1)a8    NAME       'a'           (1, 0) (1, 1)
    OP         '='           (1, 2) (1, 3)
    OP         '('           (1, 4) (1, 5)
    NAME       'async'       (1, 5) (1, 10)
    OP         '='           (1, 11) (1, 12)
    NUMBER     '1'           (1, 13) (1, 14)
    OP         ')'           (1, 14) (1, 15)
    async()z    NAME       'async'       (1, 0) (1, 5)
    OP         '('           (1, 5) (1, 6)
    OP         ')'           (1, 6) (1, 7)
    class async(Bar):passa<    NAME       'class'       (1, 0) (1, 5)
    NAME       'async'       (1, 6) (1, 11)
    OP         '('           (1, 11) (1, 12)
    NAME       'Bar'         (1, 12) (1, 15)
    OP         ')'           (1, 15) (1, 16)
    OP         ':'           (1, 16) (1, 17)
    NAME       'pass'        (1, 17) (1, 21)
    class async:passz    NAME       'class'       (1, 0) (1, 5)
    NAME       'async'       (1, 6) (1, 11)
    OP         ':'           (1, 11) (1, 12)
    NAME       'pass'        (1, 12) (1, 16)
    	await = 1z    NAME       'await'       (1, 0) (1, 5)
    OP         '='           (1, 6) (1, 7)
    NUMBER     '1'           (1, 8) (1, 9)
    	foo.asyncz    NAME       'foo'         (1, 0) (1, 3)
    OP         '.'           (1, 3) (1, 4)
    NAME       'async'       (1, 4) (1, 9)
    async for a in b: passa;    NAME       'async'       (1, 0) (1, 5)
    NAME       'for'         (1, 6) (1, 9)
    NAME       'a'           (1, 10) (1, 11)
    NAME       'in'          (1, 12) (1, 14)
    NAME       'b'           (1, 15) (1, 16)
    OP         ':'           (1, 16) (1, 17)
    NAME       'pass'        (1, 18) (1, 22)
    async with a as b: passa<    NAME       'async'       (1, 0) (1, 5)
    NAME       'with'        (1, 6) (1, 10)
    NAME       'a'           (1, 11) (1, 12)
    NAME       'as'          (1, 13) (1, 15)
    NAME       'b'           (1, 16) (1, 17)
    OP         ':'           (1, 17) (1, 18)
    NAME       'pass'        (1, 19) (1, 23)
    	async.fooz    NAME       'async'       (1, 0) (1, 5)
    OP         '.'           (1, 5) (1, 6)
    NAME       'foo'         (1, 6) (1, 9)
    asyncz/    NAME       'async'       (1, 0) (1, 5)
    async
#comment
awaitz    NAME       'async'       (1, 0) (1, 5)
    NEWLINE    '\n'          (1, 5) (1, 6)
    COMMENT    '#comment'    (2, 0) (2, 8)
    NL         '\n'          (2, 8) (2, 9)
    NAME       'await'       (3, 0) (3, 5)
    async
...
awaitz    NAME       'async'       (1, 0) (1, 5)
    NEWLINE    '\n'          (1, 5) (1, 6)
    OP         '...'         (2, 0) (2, 3)
    NEWLINE    '\n'          (2, 3) (2, 4)
    NAME       'await'       (3, 0) (3, 5)
    async
awaitz    NAME       'async'       (1, 0) (1, 5)
    NEWLINE    '\n'          (1, 5) (1, 6)
    NAME       'await'       (2, 0) (2, 5)
    
foo.async + 1z    NAME       'foo'         (1, 0) (1, 3)
    OP         '.'           (1, 3) (1, 4)
    NAME       'async'       (1, 4) (1, 9)
    OP         '+'           (1, 10) (1, 11)
    NUMBER     '1'           (1, 12) (1, 13)
    async def foo(): passa;    NAME       'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'foo'         (1, 10) (1, 13)
    OP         '('           (1, 13) (1, 14)
    OP         ')'           (1, 14) (1, 15)
    OP         ':'           (1, 15) (1, 16)
    NAME       'pass'        (1, 17) (1, 21)
    Nasync def foo():
  def foo(await):
    await = 1
  if 1:
    await
async += 1
a    NAME       'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'foo'         (1, 10) (1, 13)
    OP         '('           (1, 13) (1, 14)
    OP         ')'           (1, 14) (1, 15)
    OP         ':'           (1, 15) (1, 16)
    NEWLINE    '\n'          (1, 16) (1, 17)
    INDENT     '  '          (2, 0) (2, 2)
    NAME       'def'         (2, 2) (2, 5)
    NAME       'foo'         (2, 6) (2, 9)
    OP         '('           (2, 9) (2, 10)
    NAME       'await'       (2, 10) (2, 15)
    OP         ')'           (2, 15) (2, 16)
    OP         ':'           (2, 16) (2, 17)
    NEWLINE    '\n'          (2, 17) (2, 18)
    INDENT     '    '        (3, 0) (3, 4)
    NAME       'await'       (3, 4) (3, 9)
    OP         '='           (3, 10) (3, 11)
    NUMBER     '1'           (3, 12) (3, 13)
    NEWLINE    '\n'          (3, 13) (3, 14)
    DEDENT     ''            (4, 2) (4, 2)
    NAME       'if'          (4, 2) (4, 4)
    NUMBER     '1'           (4, 5) (4, 6)
    OP         ':'           (4, 6) (4, 7)
    NEWLINE    '\n'          (4, 7) (4, 8)
    INDENT     '    '        (5, 0) (5, 4)
    NAME       'await'       (5, 4) (5, 9)
    NEWLINE    '\n'          (5, 9) (5, 10)
    DEDENT     ''            (6, 0) (6, 0)
    DEDENT     ''            (6, 0) (6, 0)
    NAME       'async'       (6, 0) (6, 5)
    OP         '+='          (6, 6) (6, 8)
    NUMBER     '1'           (6, 9) (6, 10)
    NEWLINE    '\n'          (6, 10) (6, 11)
    )async def foo():
  async for i in 1: passa    NAME       'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'foo'         (1, 10) (1, 13)
    OP         '('           (1, 13) (1, 14)
    OP         ')'           (1, 14) (1, 15)
    OP         ':'           (1, 15) (1, 16)
    NEWLINE    '\n'          (1, 16) (1, 17)
    INDENT     '  '          (2, 0) (2, 2)
    NAME       'async'       (2, 2) (2, 7)
    NAME       'for'         (2, 8) (2, 11)
    NAME       'i'           (2, 12) (2, 13)
    NAME       'in'          (2, 14) (2, 16)
    NUMBER     '1'           (2, 17) (2, 18)
    OP         ':'           (2, 18) (2, 19)
    NAME       'pass'        (2, 20) (2, 24)
    DEDENT     ''            (3, 0) (3, 0)
    async def foo(async): awaitah    NAME       'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'foo'         (1, 10) (1, 13)
    OP         '('           (1, 13) (1, 14)
    NAME       'async'       (1, 14) (1, 19)
    OP         ')'           (1, 19) (1, 20)
    OP         ':'           (1, 20) (1, 21)
    NAME       'await'       (1, 22) (1, 27)
    @def f():

  def baz(): pass
  async def bar(): pass

  await = 2a    NAME       'def'         (1, 0) (1, 3)
    NAME       'f'           (1, 4) (1, 5)
    OP         '('           (1, 5) (1, 6)
    OP         ')'           (1, 6) (1, 7)
    OP         ':'           (1, 7) (1, 8)
    NEWLINE    '\n'          (1, 8) (1, 9)
    NL         '\n'          (2, 0) (2, 1)
    INDENT     '  '          (3, 0) (3, 2)
    NAME       'def'         (3, 2) (3, 5)
    NAME       'baz'         (3, 6) (3, 9)
    OP         '('           (3, 9) (3, 10)
    OP         ')'           (3, 10) (3, 11)
    OP         ':'           (3, 11) (3, 12)
    NAME       'pass'        (3, 13) (3, 17)
    NEWLINE    '\n'          (3, 17) (3, 18)
    NAME       'async'       (4, 2) (4, 7)
    NAME       'def'         (4, 8) (4, 11)
    NAME       'bar'         (4, 12) (4, 15)
    OP         '('           (4, 15) (4, 16)
    OP         ')'           (4, 16) (4, 17)
    OP         ':'           (4, 17) (4, 18)
    NAME       'pass'        (4, 19) (4, 23)
    NEWLINE    '\n'          (4, 23) (4, 24)
    NL         '\n'          (5, 0) (5, 1)
    NAME       'await'       (6, 2) (6, 7)
    OP         '='           (6, 8) (6, 9)
    NUMBER     '2'           (6, 10) (6, 11)
    DEDENT     ''            (7, 0) (7, 0)
    Fasync def f():

  def baz(): pass
  async def bar(): pass

  await = 2a    NAME       'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'f'           (1, 10) (1, 11)
    OP         '('           (1, 11) (1, 12)
    OP         ')'           (1, 12) (1, 13)
    OP         ':'           (1, 13) (1, 14)
    NEWLINE    '\n'          (1, 14) (1, 15)
    NL         '\n'          (2, 0) (2, 1)
    INDENT     '  '          (3, 0) (3, 2)
    NAME       'def'         (3, 2) (3, 5)
    NAME       'baz'         (3, 6) (3, 9)
    OP         '('           (3, 9) (3, 10)
    OP         ')'           (3, 10) (3, 11)
    OP         ':'           (3, 11) (3, 12)
    NAME       'pass'        (3, 13) (3, 17)
    NEWLINE    '\n'          (3, 17) (3, 18)
    NAME       'async'       (4, 2) (4, 7)
    NAME       'def'         (4, 8) (4, 11)
    NAME       'bar'         (4, 12) (4, 15)
    OP         '('           (4, 15) (4, 16)
    OP         ')'           (4, 16) (4, 17)
    OP         ':'           (4, 17) (4, 18)
    NAME       'pass'        (4, 19) (4, 23)
    NEWLINE    '\n'          (4, 23) (4, 24)
    NL         '\n'          (5, 0) (5, 1)
    NAME       'await'       (6, 2) (6, 7)
    OP         '='           (6, 8) (6, 9)
    NUMBER     '2'           (6, 10) (6, 11)
    DEDENT     ''            (7, 0) (7, 0)
    rurvs r4
test_asynczTokenizeTest.test_asyncRsK*			
-0			
I(			
36			
.1			
K*			
K*			
47			
58			
K*			
G&			
47			
/2			
N-			
O.			
36			
#*		X	
		*	
=	@				

#		J	

$		r6c(|jddy)Nz[
    # A comment here
    1
]
ad    OP         '['           (1, 0) (1, 1)
    NL         '\n'          (1, 1) (1, 2)
    COMMENT    '# A comment here' (2, 4) (2, 20)
    NL         '\n'          (2, 20) (2, 21)
    NUMBER     '1'           (3, 4) (3, 5)
    NL         '\n'          (3, 5) (3, 6)
    OP         ']'           (4, 0) (4, 1)
    NEWLINE    '\n'          (4, 1) (4, 2)
    rurvs r43test_newline_after_parenthesized_block_with_commentz@TokenizeTest.test_newline_after_parenthesized_block_with_commentds
			r6c(|jddy)Nz); xz    OP         ')'           (1, 0) (1, 1)
    OP         ';'           (1, 1) (1, 2)
    NAME       'x'           (1, 3) (1, 4)
    rurvs r4,test_closing_parenthesis_from_different_linez9TokenizeTest.test_closing_parenthesis_from_different_lineusF%		r6N)__name__
__module____qualname__rDrSrXrjrwryrrrrrrrrrrrrrrrrrrHr6r4r8r8's92&5F7P7	r	0&	P80S	j:	x$	L
		.	(#	J	,	"	*
	
	P	d	"	r6r8ceZdZdZy)GenerateTokensTestct|}tt|j|}|j	||jj
yN)rr5rr<r=r>r(r?s     r4rDz!GenerateTokensTest.check_tokenize}sB
QK-oajj.I1M!2!=!=!?@r6N)rrrrDrHr6r4rr|sAr6rc	xg}tt|jdj}|D]_\}}}}}|tk(r;d|vr7|jtdftdftt|ftdfgM|j||fat|jdjS)Nr:.Decimalr))rrr;r<rextendrr	r
reprr)rdecodestrip)rAr,gtoknumtokval_s      r4decistmtr	s
F'*+445A$%	,1aVv
MMy!S	f&S		

MM66*+	,f$$W-3355r6ceZdZdZy)TestMisccddlm}d}|jt|d|j	tt
|d|jt
t||dy)Nr)rz+21.3e-5*-.1234/81.7z8+Decimal ('21.3e-5')*-Decimal ('.1234')/Decimal ('81.7')z-3.2171603427[0-9]*e-0+7z!-3.217160342717258261933904529E-7)decimalrr=r	assertRegexreval)r@rrAs   r4
test_decistmtzTestMisc.test_decistmtsd	$"!S	U	
d1g(BC	
hqk* !DE	Gr6N)rrrrrHr6r4rrsGr6rc4eZdZdZdZdZdZdZdZdZ	y)	TestTokenizerAdheresToPep0263zU
    Test that tokenizer adheres to the coding behaviour stipulated in PEP 0263.
    ctjjtjjt|}t|d5}tj||dddy#1swYyxYw)Nrb)ospathjoindirname__file__r
TestRoundtripcheck_roundtrip)r@rarrCs    r4	_testFilez'TestTokenizerAdheresToPep0263._testFilesTww||BGGOOH5x@
$
	3))$2	3	3	3sA..A7c*d}|j|y)Nz9tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txtrr@rCs  r4'test_utf8_coding_cookie_and_no_utf8_bomzETestTokenizerAdheresToPep0263.test_utf8_coding_cookie_and_no_utf8_bomGqr6cJd}|jt|j|y)a
        As per PEP 0263, if a file starts with a utf-8 BOM signature, the only
        allowed encoding for the comment is 'utf-8'.  The text file used in
        this test starts with a BOM signature, but specifies latin1 as the
        coding, so verify that a SyntaxError is raised, which matches the
        behaviour of the interpreter when it encounters a similar condition.
        z8tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txtNrNSyntaxErrorrrs  r4&test_latin1_coding_cookie_and_utf8_bomzDTestTokenizerAdheresToPep0263.test_latin1_coding_cookie_and_utf8_boms 
G+t~~q9r6c*d}|j|y)Nz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtrrs  r4"test_no_coding_cookie_and_utf8_bomz@TestTokenizerAdheresToPep0263.test_no_coding_cookie_and_utf8_bomr!r6c*d}|j|y)Nz6tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txtrrs  r4$test_utf8_coding_cookie_and_utf8_bomzBTestTokenizerAdheresToPep0263.test_utf8_coding_cookie_and_utf8_bomsDqr6c|jt|jd|jt|jdy)Nz
bad_coding.pyzbad_coding2.pyr#rvs r4test_bad_coding_cookiez4TestTokenizerAdheresToPep0263.test_bad_coding_cookies/+t~~G+t~~7GHr6N)
rrr__doc__rr r%r'r)r+rHr6r4rrs&3
	:Ir6rceZdZdZy)
Test_Tokenizecd}|jddfd}tt|jdddd}t	ddd	d
dg}|j||dy)Nu"ЉЊЈЁЂ"r:Fc3(Ksdydyw)NTr6rH)firstr3sr4r<zNTest_Tokenize.test__tokenize_decodes_with_specified_encoding.<locals>.readlines
	sT)encodingextra_tokensrVrZrMrrMzbytes not decoded with encoding)r;rPrrQrr=)r@literalr<rWexpected_tokensr1r3s     @@r4.test__tokenize_decodes_with_specified_encodingz<Test_Tokenize.test__tokenize_decodes_with_specified_encodingsx ~~g&	7
8K8KV]#')**-2/$QWX:	<r6N)rrrr9rHr6r4r.r.s<r6r.ceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZy)TestDetectEncodingcdfd}|S)NrcDtk(rt}dz
|SNrM)r'
StopIteration)r3indexliness r4r<z1TestDetectEncoding.get_readline.<locals>.readlines,E
"##<DQJEKr6rH)r@rAr<r@s ` @r4get_readlinezTestDetectEncoding.get_readlines	r6cd}t|j|\}}|j|d|j|t|ddy)N)# something
print(something)
do_something(else)
r:)rrBr=rPr@rAr2consumed_liness    r4test_no_bom_no_encoding_cookiez1TestDetectEncoding.test_no_bom_no_encoding_cookiesO

$343D3DU3K#L .7+eBQi9r6cd}t|j|\}}|j|d|j|ddgy)N)s# something
rErF	utf-8-sigrDrErrBr=rHs    r4test_bom_no_cookiez%TestDetectEncoding.test_bom_no_cookiesO

$343D3DU3K#L .;/*,AB	Dr6cd}t|j|\}}|j|d|j|dgy)N)# -*- coding: latin-1 -*-
rErF
iso-8859-1rPrMrHs    r4test_cookie_first_line_no_bomz0TestDetectEncoding.test_cookie_first_line_no_bom	sI

$343D3DU3K#L .<0*H)IJr6cd}t|j|\}}|j|d|j|dgy)N)s# coding=utf-8
rErFrLs# coding=utf-8
rMrHs    r4&test_matched_bom_and_cookie_first_linez9TestDetectEncoding.test_matched_bom_and_cookie_first_linesI

$343D3DU3K#L .;/*=)>?r6c`d}|j|}|jtt|y)N)s## vim: set fileencoding=ascii :
rErFrBrNr$rr@rAr<s   r4<test_mismatched_bom_and_cookie_first_line_raises_syntaxerrorzOTestDetectEncoding.test_mismatched_bom_and_cookie_first_line_raises_syntaxerrors-

$$U++Ar6cd}t|j|\}}|j|dddg}|j||y)N)
#! something
 # vim: set fileencoding=ascii :
rErFasciirZr[rMr@rAr2rIrBs     r4test_cookie_second_line_no_bomz1TestDetectEncoding.test_cookie_second_line_no_bom&sP
$343D3DU3K#L .7+%'KL2r6cd}t|j|\}}|j|d|j|ddgy)N)#! something
f# coding=utf-8
rErFrLrZrarMrHs    r4'test_matched_bom_and_cookie_second_linez:TestDetectEncoding.test_matched_bom_and_cookie_second_line2sO
$343D3DU3K#L .;/+-AB	Dr6c`d}|j|}|jtt|y)N)r`r[rErFrVrWs   r4=test_mismatched_bom_and_cookie_second_line_raises_syntaxerrorzPTestDetectEncoding.test_mismatched_bom_and_cookie_second_line_raises_syntaxerror>s-
$$U++Ar6cd}t|j|\}}|j|ddg}|j||y)N)print('£')
%# vim: set fileencoding=iso8859-15 :

print('€')
r:rfrMr]s     r4/test_cookie_second_line_noncommented_first_linezBTestDetectEncoding.test_cookie_second_line_noncommented_first_lineHsM

$343D3DU3K#L .7+*+2r6cd}t|j|\}}|j|dddg}|j||y)N)
#print('£')
rgrh
iso8859-15rkrgrMr]s     r4,test_cookie_second_line_commented_first_linez?TestDetectEncoding.test_cookie_second_line_commented_first_lineSsP

$343D3DU3K#L .<0+-VW2r6cd}t|j|\}}|j|dddg}|j||y)N)
rgrhrlrorgrMr]s     r4(test_cookie_second_line_empty_first_linez;TestDetectEncoding.test_cookie_second_line_empty_first_line^sP

$343D3DU3K#L .<0DE2r6cd}|D]g}dD]`}|jd|}dd|jdzdzdd	f}|j|}t|\}}|j	|d
biy)N)latin-1rQziso-latin-1zlatin-1-unixziso-8859-1-unixziso-latin-1-mac-rrt#!/usr/bin/python

# coding: r\rosprint(things)
sdo_something += 4
rQreplacer;rBrr=	r@	encodingsr2repencrArlfoundrIs	         r4test_latin1_normalizationz,TestDetectEncoding.test_latin1_normalizationis;	!		6H!
6&&sC0/&G)<<uD+/1&&u-(7(;%~  5
6		6r6c`d}|j|}|jtt|y)Ns
print("")rVrWs   r4test_syntaxerror_latin1z*TestDetectEncoding.test_syntaxerror_latin1xs-$$U++Ar6cd}|D]f}dD]_}|jd|}dd|jdzdzdf}|j|}t|\}}|j	|d	ahy)
N)r:z	utf-8-macz
utf-8-unixrsrtrurvr\ros1 + 3
r:rwrys	         r4test_utf8_normalizationz*TestDetectEncoding.test_utf8_normalizations8	!	1H!
1&&sC0/&G)<<uD#%&&u-(7(;%~  0
1	1r6ct|jd}t|\}}|j|d|j|dgt|jd\}}|j|d|j|g|jd}t|\}}|j|d|j|dg|jd}t|\}}|j|d|j|g|jd}|jtt|y)	N)rEr:rErH)sprint(something)
rL)s)s# coding: bad
)rBrr=rNr$r@r<r2rIs    r4test_short_filesz#TestDetectEncoding.test_short_filess'$$%=>#28#< .7+*?)@A#243D3DR3H#I .7+,$$%IJ#28#< .;/*?)@A$$%78#28#< .;/,$$%:;+Ar6c|jd}t|\}}|j|d|j|dgy)N)print("#coding=fake")r:r)rBrr=rs    r4test_false_encodingz&TestDetectEncoding.test_false_encodingsF$$%@A#28#< .7+*B)CDr6ctjdz}|jtj|dD]}t	|d|5}td|z|td|dddt
|5}|j|j||j|jddddt	|dd	5}td|dddt
|5}|j|jd	|j|jddddy#1swYxYw#1swYxYw#1swYoxYw#1swYyxYw)
Nz.py)ziso-8859-15r:wr2z# coding: %sfileuprint('euro:€')rrL)
rTESTFN
addCleanupunlinkrprint
tokenize_openr=r2mode)r@rar2fps    r4	test_openzTestDetectEncoding.test_opens>##e+	(((31	/Hhh7
72nx/b9,26
7x(
/B  h7  #.
/
/		/(C+
6	3"(r2	3
8
$	+R[[+6RWWc*	+	+
7
7
/
/
	3	3	+	+s0D,89D8	E*9E,D5	8E	EEcjd}dGfdd}|jt5||}|`t|jddd|jtdj
|5||}t|jdddy#1swYVxYw#1swYyxYw)Nsome_file_pathrceZdZdZfdZy);TestDetectEncoding.test_filename_in_exception.<locals>.Bunkc.||_||_d|_y)Nr)name_lines_index)r@rArs   r4__init__zDTestDetectEncoding.test_filename_in_exception.<locals>.Bunk.__init__s 	#r6c|jtk(rt|j}|xjdz
c_|Sr>)rr'r?)r@r3rAs  r4r<zDTestDetectEncoding.test_filename_in_exception.<locals>.Bunk.readlines:;;#e*,''T[[)q r6N)rrrrr<)rAsr4Bunkrs

 

r6rz.*{})rNr$rrr<r]format)r@rrinsrAs    @r4test_filename_in_exceptionz-TestDetectEncoding.test_filename_in_exceptions		

{
+	*ud#CCLL)		*

#
#Kt1D
E	*ud#CCLL)	*	*	*	*
	*	*s!B5B)B&)B2ctd}tjd|5|jtt
dddd|j
|jy#1swY%xYw)Ns#coding:xxxztokenize._builtin_open)return_valuefoobar)rrpatchrNr$r
assertTrueclosed)r@ms  r4test_open_errorz"TestDetectEncoding.test_open_errorsVN#
ZZ0q
A	Dk=(C	D!	D	DsA##A,N)rrrrBrJrNrRrTrXr^rbrdrirmrprrrrrrrrrHr6r4r;r;so	:	DK@B
3
DB	3	3	3
6B1B.E+(*8"r6r;c<eZdZdZdZdZdZdZdZdZ	dZ
y	)
TestTokenizecF	
ddl}d	d
	fd}
fd}dfd}|j}|j}||_||_	t|}|jt	|ddgd||_||_|j
	y#||_||_wxYw)Nrr:cddgfS)NfirstsecondrH)r<r2s r4mock_detect_encodingz8TestTokenize.test_tokenize.<locals>.mock_detect_encodingsh	222r6cl|g}		|}|r|j||S#t$r|cYSwxYwr)r?r))r<r2kwargsout	next_line
encoding_useds     r4mock__tokenizez2TestTokenize.test_tokenize.<locals>.mock__tokenizesK$MC (
IJJy)
%Js%33cLdz
dk(rytjS)NrMr6)strr;)countersr4
mock_readlinez1TestTokenize.test_tokenize.<locals>.mock_readlines)qLG!|w<&&((r6rM)rr1234)rrrr=rP)r@tokenize_modulerrrorig_detect_encodingorig_c_tokenresultsrr2rs        @@@r4
test_tokenizezTestTokenize.test_tokenizes*
	3		) />>&HH*>'<J9	M}-GT']12.J
L/CO+@LO=1/CO+@LO=s+BB c	Xg}tdD]#}|jdj|%|jddj|}t	tt
|jdj}|j|djdy)Nizdef i{i}(): return {i})iOK
r:)ranger)rrrPrrr;r<r=string)r@bufrtokss    r4test_oneline_defszTestTokenize.test_oneline_defsss	=AJJ/666;<	=

4iinHWSZZ%89BBCDb$/r6c	ttt|jdj}t|}|j
t|d|z|j
t|djttt|D]5}|j
t||dzjt||7|j
t|d|zjttj|j
t|d|zjttjy)Nr:rZrrMrG)rPrrr;r<r'r=r

exact_typerrr0rr)r@opstroptypesrWnum_optypesrs      r4assertExactTypeEqualz!TestTokenize.assertExactTypeEqualshwu||G'<=FFGH'lVa+o6&)"6"67!(+	-{#	3AXfQUm&>&>?%gaj1
3	3	
&["9"D"DE!%--0	2&["9"D"DE!%//2	4r6c\|jdtjtj|jdtjtj
|jdtj|jdtj|jdtj|jdtj|jdtj|jdtj|jd	tj|jd
tj|jdtj|jdtj|jd
tj |jdtj"|jdtj$|jdtj&|jdtj(tj*|jdtj,|jdtj.|jdtj0|jdtj2|jdtj4|jdtj6|jdtj8|jdtj:|jdtj<|jdtj>|jdtj@|jdtjB|jdtjD|jdtjF|jd tjH|jd!tjJ|jd"tjL|jd"tjL|jd#tjN|jd$tjP|jd%tjR|jd&tjT|jd'tjV|jd(tjX|jd)tjZ|jd*tj\|jd+tj^|jd,tj`|jd-tbtj<tdtjtbtj<tdtj,tbtj<td|jd.tj(tjdtjtjdtjtjdtj*|jd/tj6tjtjbtjtjdtjy)0Nz()z[]:,;+rt*/|&<>=r%z{}z==z!=z<=z>=~^z<<z>>z**z+=z-=z*=z/=z%=z&=z|=z^=z<<=z>>=z**=z//z//=z:=z...z->@z@=za**2+b**2==c**2z	{1, 2, 3}z
^(x & 0x1))3rr0LPARRPARLSQBRSQBCOLONCOMMASEMIPLUSMINUSSTARSLASHVBARAMPERLESSGREATEREQUALDOTPERCENTLBRACERBRACEEQEQUALNOTEQUAL	LESSEQUALGREATEREQUALTILDE
CIRCUMFLEX	LEFTSHIFT
RIGHTSHIFT
DOUBLESTAR	PLUSEQUALMINEQUAL	STAREQUAL
SLASHEQUALPERCENTEQUAL
AMPEREQUAL	VBAREQUALCIRCUMFLEXEQUALLEFTSHIFTEQUALRIGHTSHIFTEQUALDOUBLESTAREQUALDOUBLESLASHDOUBLESLASHEQUAL
COLONEQUALELLIPSISRARROWATATEQUALrrrvs r4test_exact_typezTestTokenize.test_exact_type,sz!!$

EJJ?!!$

EJJ?!!#u{{3!!#u{{3!!#uzz2!!#uzz2!!#u{{3!!#uzz2!!#u{{3!!#uzz2!!#u{{3!!#uzz2!!#u}}5!!#u{{3!!#uyy1!!#u}}5!!$ellC!!$

6!!$7!!$8!!$(:(:;!!#u{{3!!#u'7'78!!$8!!$(8(89!!$(8(89!!$8!!$7!!$8!!$(8(89!!$(:(:;!!$(8(89!!$8!!$(=(=>!!$(=(=>!!%)=)=>!!%)>)>?!!%)>)>?!!$(9(9:!!%)?)?@!!$(8(89!!%8!!$5!!#uxx0!!$

6!!"3"&(8(8&"'**"&(8(8&"'--"&(8(8&	B	
!!+"',,"',,"',,"',,"',,	0	
!!,"'"2"2"'**"'**ekk5<<"'**		.r6cD|jdtjy)Nz@          )rr0rrvs r4%test_pathological_trailing_whitespacez2TestTokenize.test_pathological_trailing_whitespacems!!-:r6cd}ttjddddttjdddd	ttjd
ddd	ttj
d
ddd	ttjdddd	ttjddddttjddddttjddddttjddddg	}ttt|jdj}|j||y)Nzb = 1

#testr:rrr/rr1r2r3br4rMrMzb = 1
rrMrGrMrZ1rMrMrrrMrGrrGrMz#testrZr)rZr)rZr))r&r)rr0rrr	rrNLCOMMENTrrPrrr;r<r=r@sourcer8rWs    r45test_comment_at_the_end_of_the_source_without_newlinezBTestTokenize.test_comment_at_the_end_of_the_source_without_newlineqs!5>>'VZ\]5::cVR[\588Cv6PYZ5<<6vT]^5==VV_`588DFQUV5==FY`a588Bf&wW5??2VVXY

hwv}}W'=>GGHI1r6cd}ttjddddttjdddd	ttjd
ddd	ttj
ddd
dttjddddg}ttt|jdj}|j||y)Nza
 r:rr)rr1r2r3ar4r!za
rr"r+)rGrGr%r,)
rr0rrrr-rrPrrr;r<r=r/s    r4?test_newline_and_space_at_the_end_of_the_source_without_newlinezLTestTokenize.test_newline_and_space_at_the_end_of_the_source_without_newlinesennWFUWXejjFUSemmDFQVWehhrV#NeoobFQST
hwv}}W'=>GGHI1r6cRd}tj5}tjj	|d}t|d5}|j
|dddt|\}}|jd|jdddy#1swY<xYw#1swYyxYw)NsF"""
        """z	script.pywbsSyntaxError)
rtemp_dirrrrrwriter assertInerr)r@scriptr7rarrsrs       r4(test_invalid_character_in_fstring_middlez5TestTokenize.test_invalid_character_in_fstring_middles


!	2Xww||Hk:Hh%
#

6"
#(2EBMM."&&1	2	2
#
#	2	2s#-BB2BB	BB&N)rrrrrrrrr1r4r=rHr6r4rrs,)2V	04?.B;2$2
2r6rceZdZdZdZdZy)UntokenizeTestc>t}d|_d|_|jt5}|jdddd|j
jjdd|jt|j
dy#1swYTxYw)NrGr#rz'start (1,3) precedes previous end (2,2)r+)	rprev_rowprev_colrN
ValueErroradd_whitespacer=r_args)r@ucms   r4test_bad_input_orderz#UntokenizeTest.test_bad_input_ordersM




z
*	$b
U#	$**1-9	;	
*a&6&6>	$	$sBBc6t}d|_d|_g|_|j	d|j|jdgd|_|j	d|j|jgdtj|dy)NrMr*\
rG)r&r&)rJz\
\
r#za
  b
    c
  \
  c
)rrArBrWrDr=rr)r@rFs  r4test_backslash_continuationz*UntokenizeTest.test_backslash_continuations}M

	 F8,
	 #?@%%d,HIr6ct}tdf}tdf|g}|j|t	g|j|jdgt}|j|jt	|gdt}|j|jt	|d|j|jd|jtt	|dy)NHellor:zHello sHello )	rrrcompatiterr=rWrr2)r@rFr0rWs    r4test_iter_compatzUntokenizeTest.test_iter_compatsMwW%u-	R!H:.MdE7m4h?Md6l3X>W-DL19=r6N)rrrrHrKrPrHr6r4r?r?s
?J>r6r?cBeZdZdZdZdZdZdZdZdZ	dZ
d	Zy
)rct|tr|jd}n|j}t	|jdj}tt|}|Dcgc]}|dd	}}t|}t	|jdj}t|Dcgc]}|dd	}	}|j|	|t|}
t	|
jdj}t|Dcgc]}|dd	}}|j||ycc}wcc}wcc}w)a)
        Test roundtrip for `untokenize`. `f` is an open file or a string.
        The source code in f is tokenized to both 5- and 2-tuples.
        Both sequences are converted back to source code via
        tokenize.untokenize(), and the latter tokenized again to 2-tuples.
        The test fails if the 3 pair tokenizations do not match.

        When untokenize bugs are fixed, untokenize with 5-tuples should
        reproduce code that does not contain a backslash continuation
        following spaces.  A proper test should test this.
        r:TkeependsNrG)
isinstancerr;readrOr(rQrPrrr=)
r@rCcoder<tokens5ritokens2bytes_from2	readline2
tokens2_from2bytes_from5	readline5
tokens2_from5s
             r4rzTestRoundtrip.check_roundtrips'a88G$D668D67@@x)*&-.s3r7.. )///>?HH	,4Y,?@SRa@
@0 )///>?HH	,4Y,?@SRa@
@0/A
As0D9;D>Ect|tr|jd}n|j}t	|jdj}t|D]^}|jtthvr|j|j|j|jd|jd`y)Nr:TrSrM)rUrr;rVrOr(rQrr/rrr=rr3r1r2)r@rCrWr<ris     r4check_line_extractionz#TestRoundtrip.check_line_extractionsa88G$D668D67@@H%	MCxxXy11SZZ#))A,
)KL	Mr6c|jd|jd|jdtjd}t|d5}|j|ddd|jd|jd|jd|jd	y#1swYNxYw)
Nzif x == 1:
    print(x)
z # This is a comment
# This also
zif x == 1 : 
  print(x)
tokenize_tests.txtrzoif x == 1:
    # A comment by itself.
    print(x) # Comment here, too.
    # Another comment.
after_if = True
zPif (x # The comments need to go in the right place
    == 1):
    print('x==1')
zclass Test: # A comment here
  # A comment with weird indent
  after_com = 5
  def x(m): return m*5 # a one liner
  def y(m): # A whitespace after the colon
     return y*4 # 3-space indent
zttry: import somemodule
except ImportError: # comment
    print('Can not import' # comment2
)else:   print('Loaded')
)rrfindfiler)r@fnrCs   r4test_roundtripzTestRoundtrip.test_roundtrips	
.	/-	.	
,	-


2
3
"d^	$q  #	$1	2
	
3	4	
B	C	
9	:%	$	$sB44B=c&|jdy)Nzna = (3,4, 
5,6)
y = [3, 4,
5]
z = {'a': 5,
'b':15, 'c':True}
x = len(y) + 5 - a[
3] - a[2]
+ len(z) - z[
'b']
rrvs r4test_continuationzTestRoundtrip.test_continuations	&		'r6cH|jd|jdy)Nz)x=1+\
1
# This is a comment\
# This also
z# Comment \
x = 0rhrvs r4rKz)TestRoundtrip.test_backslash_continuation's*-	.	
%	&r6c&|jdy)Nz'' ''rhrvs r4test_string_concatenationz'TestRoundtrip.test_string_concatenation0sW%r6cddl}ddl}tjd}tj
j
|xstj}|jtj
j|j|d}|jtj
j|d|jtj
j|ddD]4}|jtj
j|d|z6tjds|j|d	}|D]s}tjd
k\rtd|t|d5}|j!|
5|j#||j%|dddddduy#1swYxYw#1swYxYw)Nrrcztest*.pyztest_unicode_identifiers.pyztest_fstring.py)bufferbuiltinfileioinspectrplatformsysz
test_%s.pycpu
rGrrr)globrandomrrdrrrcurdirrescaperemoveis_resource_enabledsampleverboserrsubTestrra)r@rvrwretempdir	testfilesrCtestfiles        r4test_random_fileszTestRoundtrip.test_random_files4sv	


2
3''//"%2IIbggll4;;w+?LM		g/LMN	g/@ABT	FARWW\\'<@1DE	F**51

i4I!	2H!#j(+h%
2\\x\02((+..q12
2
2	222
2
2s$;G#G1GG
	GG	ct|tr|jd}tt	t|jjdS)Nr:)rUrr;rrrr<r)r@rWs  r4	roundtripzTestRoundtrip.roundtripVs?dC ;;w'D(74=#9#9:;BB7KKr6cd}|j|jd}|j|d|d|j|y)z
        Ensure that although whitespace might be mutated in a roundtrip,
        the semantic meaning of the indentation remains consistent.
        zif False:
	x=3
	x=3
rrMrGN)rsplitr=r)r@rW	codeliness   r4#test_indentation_semantics_retainedz1TestRoundtrip.test_indentation_semantics_retained[sH
+NN4(..t4	1y|4T"r6N)rrrrrarfrirKrlrrrrHr6r4rrs31>	M%:N'&&2DL
#r6rceZdZdZdZy)InvalidPythonTestsc
d}ttjddddttjddddttjddd	dttjd
d	ddttjddd
dttj
dd
ddttjddddg}ttt|j}|j||y)Nz2sin(x)2r4r!rsinr%rr'rUr(rr5r)rMr*)rr0rrr	rrrPrrr<r=r/s    r4test_number_followed_by_namez/InvalidPythonTests.test_number_followed_by_namegs5<<6vT]^5::e6vT]^588Cv6PYZ5::cVR[\588Cv6PYZ5==6vT]^5??2VVXY
ohv&6&?&?@A1r6c	,d}ttjddddttjddddttjddddg}tt
t|j}|j||y)N01234r4r'rrr(r*)
rr0rrrrPrrr<r=r/s    r4test_number_starting_with_zeroz1InvalidPythonTests.test_number_starting_with_zerowsy5<<v6X_`5==6vT[\5??2VVXY
ohv&6&?&?@A1r6N)rrrrrrHr6r4rrfs2 	2r6rcxeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZy)
CTokenizeTestct|}|j|5tt|j|}|j||j
jdddy#1swYyxYw)N)r0)rr~r5rr<r=r>r(r?s     r4rDzCTokenizeTest.check_tokenizesn
QK
\\\
#	E11!**=qF
VX__%6%A%A%CD		E	E	EsAA55A>cd}ttddddttddddttddd	dttd
d	ddttd
ddd
g}d
D]V}|j|5t
t||jd|}|j||dddXy#1swYcxYw)Nc32Kdj|yw)N1+1)r;rs r4r<z-CTokenizeTest.test_encoding.<locals>.readlines,,x((sr$r4r!rrrr"r#rr%r*)r:rrzutf-16rT)r3r2)
rrr	rrr~rPrrQr=)r@r<rBr2rWs     r4
test_encodingzCTokenizeTest.test_encodings	)
6#VeT2cV%P6#VeT72VeT9Rv6PRS
7	3Hx0
3?X&//!%%
  2

3
3	3
3
3s<:CC
	cH|jdd|jdd|jdd|jdd|jd	d
|jdd|jd
d|jdd|jddy)Nrlz    NUMBER     '0xff'        (1, 0) (1, 4)
    LESSEQUAL  '<='          (1, 5) (1, 7)
    NUMBER     '255'         (1, 8) (1, 11)
    rmz    NUMBER     '0b10'        (1, 0) (1, 4)
    LESSEQUAL  '<='          (1, 5) (1, 7)
    NUMBER     '255'         (1, 8) (1, 11)
    rnz    NUMBER     '0o123'       (1, 0) (1, 5)
    LESSEQUAL  '<='          (1, 6) (1, 8)
    NUMBER     '0O123'       (1, 9) (1, 14)
    roz    NUMBER     '1234567'     (1, 0) (1, 7)
    GREATER    '>'           (1, 8) (1, 9)
    TILDE      '~'           (1, 10) (1, 11)
    NUMBER     '0x15'        (1, 11) (1, 15)
    rpz    NUMBER     '2134568'     (1, 0) (1, 7)
    NOTEQUAL   '!='          (1, 8) (1, 10)
    NUMBER     '1231515'     (1, 11) (1, 18)
    rqac    LPAR       '('           (1, 0) (1, 1)
    MINUS      '-'           (1, 1) (1, 2)
    NUMBER     '124561'      (1, 2) (1, 8)
    MINUS      '-'           (1, 8) (1, 9)
    NUMBER     '1'           (1, 9) (1, 10)
    RPAR       ')'           (1, 10) (1, 11)
    AMPER      '&'           (1, 12) (1, 13)
    NUMBER     '200000000'   (1, 14) (1, 23)
    rrz    NUMBER     '0xdeadbeef'  (1, 0) (1, 10)
    NOTEQUAL   '!='          (1, 11) (1, 13)
    MINUS      '-'           (1, 14) (1, 15)
    NUMBER     '1'           (1, 15) (1, 16)
    rsz    NUMBER     '0xdeadc0de'  (1, 0) (1, 10)
    AMPER      '&'           (1, 11) (1, 12)
    NUMBER     '12345'       (1, 13) (1, 18)
    rtz    NUMBER     '0xFF'        (1, 0) (1, 4)
    AMPER      '&'           (1, 5) (1, 6)
    NUMBER     '0x15'        (1, 7) (1, 11)
    VBAR       '|'           (1, 12) (1, 13)
    NUMBER     '1234'        (1, 14) (1, 18)
    rurvs r4rwzCTokenizeTest.test_intsM,			
M,			
,/			
-0			
03			
5	8				
.1			
03			
03		r6c|jdd|jdd|jdd|jdd|jd	d
|jdd|jd
dy)Nr{z    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    NUMBER     '3.14159'     (1, 4) (1, 11)
    r|z    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    NUMBER     '314159.'     (1, 4) (1, 11)
    r}z    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    NUMBER     '.314159'     (1, 4) (1, 11)
    r~z    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    NUMBER     '3e14159'     (1, 4) (1, 11)
    rz    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    NUMBER     '3E123'       (1, 4) (1, 9)
    rz    NAME       'x'           (1, 0) (1, 1)
    PLUS       '+'           (1, 1) (1, 2)
    NAME       'y'           (1, 2) (1, 3)
    EQUAL      '='           (1, 4) (1, 5)
    NUMBER     '3e-1230'     (1, 6) (1, 13)
    rz    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    NUMBER     '3.14e159'    (1, 4) (1, 12)
    rurvs r4rzCTokenizeTest.test_floatsM,			
M,			
M,			
M,			
K*			
O.			
N-		r6c|jdd|jdd|jdd|jdd|jd	d
|jdd|jd
d|jdd|jdd|jdd|jdd|jdd|jdd|jdd|jdd|jdd |jd!d"|jd#d$|jd%d&|jd'd(|jd)d*|jd+d,|jd-d.|jd/d0|jd1d2|jd3d4|jd5d6|jd7d8|jd9d:y);Nra5    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    STRING     "''"          (1, 4) (1, 6)
    SEMI       ';'           (1, 6) (1, 7)
    NAME       'y'           (1, 8) (1, 9)
    EQUAL      '='           (1, 10) (1, 11)
    STRING     '""'          (1, 12) (1, 14)
    ra6    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    STRING     '\'"\''       (1, 4) (1, 7)
    SEMI       ';'           (1, 7) (1, 8)
    NAME       'y'           (1, 9) (1, 10)
    EQUAL      '='           (1, 11) (1, 12)
    STRING     '"\'"'        (1, 13) (1, 16)
    rz    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    STRING     '"doesn\'t "' (1, 4) (1, 14)
    NAME       'shrink'      (1, 14) (1, 20)
    STRING     '", does it"' (1, 20) (1, 31)
    rz    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    STRING     "'abc'"       (1, 4) (1, 9)
    PLUS       '+'           (1, 10) (1, 11)
    STRING     "'ABC'"       (1, 12) (1, 17)
    rz    NAME       'y'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    STRING     '"ABC"'       (1, 4) (1, 9)
    PLUS       '+'           (1, 10) (1, 11)
    STRING     '"ABC"'       (1, 12) (1, 17)
    ra    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    STRING     "r'abc'"      (1, 4) (1, 10)
    PLUS       '+'           (1, 11) (1, 12)
    STRING     "r'ABC'"      (1, 13) (1, 19)
    PLUS       '+'           (1, 20) (1, 21)
    STRING     "R'ABC'"      (1, 22) (1, 28)
    PLUS       '+'           (1, 29) (1, 30)
    STRING     "R'ABC'"      (1, 31) (1, 37)
    ra    NAME       'y'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    STRING     'r"abc"'      (1, 4) (1, 10)
    PLUS       '+'           (1, 11) (1, 12)
    STRING     'r"ABC"'      (1, 13) (1, 19)
    PLUS       '+'           (1, 20) (1, 21)
    STRING     'R"ABC"'      (1, 22) (1, 28)
    PLUS       '+'           (1, 29) (1, 30)
    STRING     'R"ABC"'      (1, 31) (1, 37)
    rz    STRING     "u'abc'"      (1, 0) (1, 6)
    PLUS       '+'           (1, 7) (1, 8)
    STRING     "U'abc'"      (1, 9) (1, 15)
    rz    STRING     'u"abc"'      (1, 0) (1, 6)
    PLUS       '+'           (1, 7) (1, 8)
    STRING     'U"abc"'      (1, 9) (1, 15)
    rz    STRING     "b'abc'"      (1, 0) (1, 6)
    PLUS       '+'           (1, 7) (1, 8)
    STRING     "B'abc'"      (1, 9) (1, 15)
    rz    STRING     'b"abc"'      (1, 0) (1, 6)
    PLUS       '+'           (1, 7) (1, 8)
    STRING     'B"abc"'      (1, 9) (1, 15)
    ra;    STRING     "br'abc'"     (1, 0) (1, 7)
    PLUS       '+'           (1, 8) (1, 9)
    STRING     "bR'abc'"     (1, 10) (1, 17)
    PLUS       '+'           (1, 18) (1, 19)
    STRING     "Br'abc'"     (1, 20) (1, 27)
    PLUS       '+'           (1, 28) (1, 29)
    STRING     "BR'abc'"     (1, 30) (1, 37)
    ra;    STRING     'br"abc"'     (1, 0) (1, 7)
    PLUS       '+'           (1, 8) (1, 9)
    STRING     'bR"abc"'     (1, 10) (1, 17)
    PLUS       '+'           (1, 18) (1, 19)
    STRING     'Br"abc"'     (1, 20) (1, 27)
    PLUS       '+'           (1, 28) (1, 29)
    STRING     'BR"abc"'     (1, 30) (1, 37)
    ra;    STRING     "rb'abc'"     (1, 0) (1, 7)
    PLUS       '+'           (1, 8) (1, 9)
    STRING     "rB'abc'"     (1, 10) (1, 17)
    PLUS       '+'           (1, 18) (1, 19)
    STRING     "Rb'abc'"     (1, 20) (1, 27)
    PLUS       '+'           (1, 28) (1, 29)
    STRING     "RB'abc'"     (1, 30) (1, 37)
    ra;    STRING     'rb"abc"'     (1, 0) (1, 7)
    PLUS       '+'           (1, 8) (1, 9)
    STRING     'rB"abc"'     (1, 10) (1, 17)
    PLUS       '+'           (1, 18) (1, 19)
    STRING     'Rb"abc"'     (1, 20) (1, 27)
    PLUS       '+'           (1, 28) (1, 29)
    STRING     'RB"abc"'     (1, 30) (1, 37)
    rrrrrrrrrrrrz"hola\\\r\ndfgf"z9    STRING     '"hola\\\\\\r\\ndfgf"' (1, 0) (1, 16)
    rrra=    FSTRING_START 'fR"'         (1, 0) (1, 3)
    FSTRING_MIDDLE 'a'           (1, 3) (1, 4)
    LBRACE     '{'           (1, 4) (1, 5)
    NAME       'b'           (1, 5) (1, 6)
    RBRACE     '}'           (1, 6) (1, 7)
    FSTRING_MIDDLE 'c'           (1, 7) (1, 8)
    FSTRING_END '"'           (1, 8) (1, 9)
    rrrrzf"{
a}"z    FSTRING_START 'f"'          (1, 0) (1, 2)
    LBRACE     '{'           (1, 2) (1, 3)
    NAME       'a'           (2, 0) (2, 1)
    RBRACE     '}'           (2, 1) (2, 2)
    FSTRING_END '"'           (2, 2) (2, 3)
    rrzf"hola\\\r\ndfgf"z    FSTRING_START 'f"'          (1, 0) (1, 2)
    FSTRING_MIDDLE 'hola\\\\\\r\\ndfgf' (1, 2) (1, 16)
    FSTRING_END '"'           (1, 16) (1, 17)
    rurvs r4rzCTokenizeTest.test_strings.1			
14			
>A			
/2			
/2			
C
F
			
C
F
			
-0			
-0			
-0			
-0			
CF			
CF			
CF			
CF			
-0			
L+			
L+			
			
			
			
/2			
H'			
K*			
L+			
			
				
			
03		r6cp|jdd|jdd|jddy)Nra    NAME       'def'         (1, 0) (1, 3)
    NAME       'd22'         (1, 4) (1, 7)
    LPAR       '('           (1, 7) (1, 8)
    NAME       'a'           (1, 8) (1, 9)
    COMMA      ','           (1, 9) (1, 10)
    NAME       'b'           (1, 11) (1, 12)
    COMMA      ','           (1, 12) (1, 13)
    NAME       'c'           (1, 14) (1, 15)
    EQUAL      '='           (1, 15) (1, 16)
    NUMBER     '2'           (1, 16) (1, 17)
    COMMA      ','           (1, 17) (1, 18)
    NAME       'd'           (1, 19) (1, 20)
    EQUAL      '='           (1, 20) (1, 21)
    NUMBER     '2'           (1, 21) (1, 22)
    COMMA      ','           (1, 22) (1, 23)
    STAR       '*'           (1, 24) (1, 25)
    NAME       'k'           (1, 25) (1, 26)
    RPAR       ')'           (1, 26) (1, 27)
    COLON      ':'           (1, 27) (1, 28)
    NAME       'pass'        (1, 29) (1, 33)
    ra    NAME       'def'         (1, 0) (1, 3)
    NAME       'd01v_'       (1, 4) (1, 9)
    LPAR       '('           (1, 9) (1, 10)
    NAME       'a'           (1, 10) (1, 11)
    EQUAL      '='           (1, 11) (1, 12)
    NUMBER     '1'           (1, 12) (1, 13)
    COMMA      ','           (1, 13) (1, 14)
    STAR       '*'           (1, 15) (1, 16)
    NAME       'k'           (1, 16) (1, 17)
    COMMA      ','           (1, 17) (1, 18)
    DOUBLESTAR '**'          (1, 19) (1, 21)
    NAME       'w'           (1, 21) (1, 22)
    RPAR       ')'           (1, 22) (1, 23)
    COLON      ':'           (1, 23) (1, 24)
    NAME       'pass'        (1, 25) (1, 29)
    ra    NAME       'def'         (1, 0) (1, 3)
    NAME       'd23'         (1, 4) (1, 7)
    LPAR       '('           (1, 7) (1, 8)
    NAME       'a'           (1, 8) (1, 9)
    COLON      ':'           (1, 9) (1, 10)
    NAME       'str'         (1, 11) (1, 14)
    COMMA      ','           (1, 14) (1, 15)
    NAME       'b'           (1, 16) (1, 17)
    COLON      ':'           (1, 17) (1, 18)
    NAME       'int'         (1, 19) (1, 22)
    EQUAL      '='           (1, 22) (1, 23)
    NUMBER     '3'           (1, 23) (1, 24)
    RPAR       ')'           (1, 24) (1, 25)
    RARROW     '->'          (1, 26) (1, 28)
    NAME       'int'         (1, 29) (1, 32)
    COLON      ':'           (1, 32) (1, 33)
    NAME       'pass'        (1, 34) (1, 38)
    rurvs r4rzCTokenizeTest.test_functionsJ?B		.	
;>		$	
DG		r6c(|jddy)Nra    NAME       'if'          (1, 0) (1, 2)
    NUMBER     '1'           (1, 3) (1, 4)
    LESS       '<'           (1, 5) (1, 6)
    NUMBER     '1'           (1, 7) (1, 8)
    GREATER    '>'           (1, 9) (1, 10)
    NUMBER     '1'           (1, 11) (1, 12)
    EQEQUAL    '=='          (1, 13) (1, 15)
    NUMBER     '1'           (1, 16) (1, 17)
    GREATEREQUAL '>='          (1, 18) (1, 20)
    NUMBER     '5'           (1, 21) (1, 22)
    LESSEQUAL  '<='          (1, 23) (1, 25)
    NUMBER     '0x15'        (1, 26) (1, 30)
    LESSEQUAL  '<='          (1, 31) (1, 33)
    NUMBER     '0x12'        (1, 34) (1, 38)
    NOTEQUAL   '!='          (1, 39) (1, 41)
    NUMBER     '1'           (1, 42) (1, 43)
    NAME       'and'         (1, 44) (1, 47)
    NUMBER     '5'           (1, 48) (1, 49)
    NAME       'in'          (1, 50) (1, 52)
    NUMBER     '1'           (1, 53) (1, 54)
    NAME       'not'         (1, 55) (1, 58)
    NAME       'in'          (1, 59) (1, 61)
    NUMBER     '1'           (1, 62) (1, 63)
    NAME       'is'          (1, 64) (1, 66)
    NUMBER     '1'           (1, 67) (1, 68)
    NAME       'or'          (1, 69) (1, 71)
    NUMBER     '5'           (1, 72) (1, 73)
    NAME       'is'          (1, 74) (1, 76)
    NAME       'not'         (1, 77) (1, 80)
    NUMBER     '1'           (1, 81) (1, 82)
    COLON      ':'           (1, 82) (1, 83)
    NAME       'pass'        (1, 84) (1, 88)
    rurvs r4rzCTokenizeTest.test_comparison'	rr6c(|jddy)Nra$    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    NUMBER     '1'           (1, 4) (1, 5)
    MINUS      '-'           (1, 6) (1, 7)
    NAME       'y'           (1, 8) (1, 9)
    PLUS       '+'           (1, 10) (1, 11)
    NUMBER     '15'          (1, 12) (1, 14)
    MINUS      '-'           (1, 15) (1, 16)
    NUMBER     '1'           (1, 17) (1, 18)
    PLUS       '+'           (1, 19) (1, 20)
    NUMBER     '0x124'       (1, 21) (1, 26)
    PLUS       '+'           (1, 27) (1, 28)
    NAME       'z'           (1, 29) (1, 30)
    PLUS       '+'           (1, 31) (1, 32)
    NAME       'a'           (1, 33) (1, 34)
    LSQB       '['           (1, 34) (1, 35)
    NUMBER     '5'           (1, 35) (1, 36)
    RSQB       ']'           (1, 36) (1, 37)
    rurvs r4rzCTokenizeTest.test_additiveM	rr6c(|jddy)Nra    NAME       'x'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    NUMBER     '1'           (1, 4) (1, 5)
    DOUBLESLASH '//'          (1, 5) (1, 7)
    NUMBER     '1'           (1, 7) (1, 8)
    STAR       '*'           (1, 8) (1, 9)
    NUMBER     '1'           (1, 9) (1, 10)
    SLASH      '/'           (1, 10) (1, 11)
    NUMBER     '5'           (1, 11) (1, 12)
    STAR       '*'           (1, 12) (1, 13)
    NUMBER     '12'          (1, 13) (1, 15)
    PERCENT    '%'           (1, 15) (1, 16)
    NUMBER     '0x12'        (1, 16) (1, 20)
    AT         '@'           (1, 20) (1, 21)
    NUMBER     '42'          (1, 21) (1, 23)
    rurvs r4rz!CTokenizeTest.test_multiplicatived	rr6cL|jdd|jddy)Nra    TILDE      '~'           (1, 0) (1, 1)
    NUMBER     '1'           (1, 1) (1, 2)
    CIRCUMFLEX '^'           (1, 3) (1, 4)
    NUMBER     '1'           (1, 5) (1, 6)
    AMPER      '&'           (1, 7) (1, 8)
    NUMBER     '1'           (1, 9) (1, 10)
    VBAR       '|'           (1, 11) (1, 12)
    NUMBER     '1'           (1, 12) (1, 13)
    CIRCUMFLEX '^'           (1, 14) (1, 15)
    MINUS      '-'           (1, 16) (1, 17)
    NUMBER     '1'           (1, 17) (1, 18)
    raI    MINUS      '-'           (1, 0) (1, 1)
    NUMBER     '1'           (1, 1) (1, 2)
    STAR       '*'           (1, 2) (1, 3)
    NUMBER     '1'           (1, 3) (1, 4)
    SLASH      '/'           (1, 4) (1, 5)
    NUMBER     '1'           (1, 5) (1, 6)
    PLUS       '+'           (1, 6) (1, 7)
    NUMBER     '1'           (1, 7) (1, 8)
    STAR       '*'           (1, 8) (1, 9)
    NUMBER     '1'           (1, 9) (1, 10)
    DOUBLESLASH '//'          (1, 10) (1, 12)
    NUMBER     '1'           (1, 12) (1, 13)
    MINUS      '-'           (1, 14) (1, 15)
    MINUS      '-'           (1, 16) (1, 17)
    MINUS      '-'           (1, 17) (1, 18)
    MINUS      '-'           (1, 18) (1, 19)
    NUMBER     '1'           (1, 19) (1, 20)
    DOUBLESTAR '**'          (1, 20) (1, 22)
    NUMBER     '1'           (1, 22) (1, 23)
    rurvs r4rzCTokenizeTest.test_unaryx	s003			
58		r6c(|jddy)Nra    NAME       'import'      (1, 0) (1, 6)
    NAME       'sys'         (1, 7) (1, 10)
    COMMA      ','           (1, 10) (1, 11)
    NAME       'time'        (1, 12) (1, 16)
    NEWLINE    ''            (1, 16) (1, 16)
    NAME       'x'           (2, 0) (2, 1)
    EQUAL      '='           (2, 2) (2, 3)
    NAME       'sys'         (2, 4) (2, 7)
    DOT        '.'           (2, 7) (2, 8)
    NAME       'modules'     (2, 8) (2, 15)
    LSQB       '['           (2, 15) (2, 16)
    STRING     "'time'"      (2, 16) (2, 22)
    RSQB       ']'           (2, 22) (2, 23)
    DOT        '.'           (2, 23) (2, 24)
    NAME       'time'        (2, 24) (2, 28)
    LPAR       '('           (2, 28) (2, 29)
    RPAR       ')'           (2, 29) (2, 30)
    rurvs r4rzCTokenizeTest.test_selector	rr6c(|jddyNra    AT         '@'           (1, 0) (1, 1)
    NAME       'staticmethod' (1, 1) (1, 13)
    NEWLINE    ''            (1, 13) (1, 13)
    NAME       'def'         (2, 0) (2, 3)
    NAME       'foo'         (2, 4) (2, 7)
    LPAR       '('           (2, 7) (2, 8)
    NAME       'x'           (2, 8) (2, 9)
    COMMA      ','           (2, 9) (2, 10)
    NAME       'y'           (2, 10) (2, 11)
    RPAR       ')'           (2, 11) (2, 12)
    COLON      ':'           (2, 12) (2, 13)
    NAME       'pass'        (2, 14) (2, 18)
    rurvs r4rzCTokenizeTest.test_method	rr6c(|jddyrrurvs r4rzCTokenizeTest.test_tabs	rr6c|jdd|jdd|jdd|jdd|jd	d
|jdd|jd
d|jdd|jdd|jdd|jdd|jdd|jdd|jdd|jdd|jdd |jd!d"|jd#d$|jd%d&|jd'd(|jd)d*y)+Nrz    ASYNC      'async'       (1, 0) (1, 5)
    EQUAL      '='           (1, 6) (1, 7)
    NUMBER     '1'           (1, 8) (1, 9)
    ra8    NAME       'a'           (1, 0) (1, 1)
    EQUAL      '='           (1, 2) (1, 3)
    LPAR       '('           (1, 4) (1, 5)
    ASYNC      'async'       (1, 5) (1, 10)
    EQUAL      '='           (1, 11) (1, 12)
    NUMBER     '1'           (1, 13) (1, 14)
    RPAR       ')'           (1, 14) (1, 15)
    rz    ASYNC      'async'       (1, 0) (1, 5)
    LPAR       '('           (1, 5) (1, 6)
    RPAR       ')'           (1, 6) (1, 7)
    ra<    NAME       'class'       (1, 0) (1, 5)
    ASYNC      'async'       (1, 6) (1, 11)
    LPAR       '('           (1, 11) (1, 12)
    NAME       'Bar'         (1, 12) (1, 15)
    RPAR       ')'           (1, 15) (1, 16)
    COLON      ':'           (1, 16) (1, 17)
    NAME       'pass'        (1, 17) (1, 21)
    rz    NAME       'class'       (1, 0) (1, 5)
    ASYNC      'async'       (1, 6) (1, 11)
    COLON      ':'           (1, 11) (1, 12)
    NAME       'pass'        (1, 12) (1, 16)
    rz    AWAIT      'await'       (1, 0) (1, 5)
    EQUAL      '='           (1, 6) (1, 7)
    NUMBER     '1'           (1, 8) (1, 9)
    rz    NAME       'foo'         (1, 0) (1, 3)
    DOT        '.'           (1, 3) (1, 4)
    ASYNC      'async'       (1, 4) (1, 9)
    ra;    ASYNC      'async'       (1, 0) (1, 5)
    NAME       'for'         (1, 6) (1, 9)
    NAME       'a'           (1, 10) (1, 11)
    NAME       'in'          (1, 12) (1, 14)
    NAME       'b'           (1, 15) (1, 16)
    COLON      ':'           (1, 16) (1, 17)
    NAME       'pass'        (1, 18) (1, 22)
    ra<    ASYNC      'async'       (1, 0) (1, 5)
    NAME       'with'        (1, 6) (1, 10)
    NAME       'a'           (1, 11) (1, 12)
    NAME       'as'          (1, 13) (1, 15)
    NAME       'b'           (1, 16) (1, 17)
    COLON      ':'           (1, 17) (1, 18)
    NAME       'pass'        (1, 19) (1, 23)
    rz    ASYNC      'async'       (1, 0) (1, 5)
    DOT        '.'           (1, 5) (1, 6)
    NAME       'foo'         (1, 6) (1, 9)
    rz/    ASYNC      'async'       (1, 0) (1, 5)
    rz    ASYNC      'async'       (1, 0) (1, 5)
    NEWLINE    ''            (1, 5) (1, 5)
    AWAIT      'await'       (3, 0) (3, 5)
    rz    ASYNC      'async'       (1, 0) (1, 5)
    NEWLINE    ''            (1, 5) (1, 5)
    ELLIPSIS   '...'         (2, 0) (2, 3)
    NEWLINE    ''            (2, 3) (2, 3)
    AWAIT      'await'       (3, 0) (3, 5)
    rz    ASYNC      'async'       (1, 0) (1, 5)
    NEWLINE    ''            (1, 5) (1, 5)
    AWAIT      'await'       (2, 0) (2, 5)
    rz    NAME       'foo'         (1, 0) (1, 3)
    DOT        '.'           (1, 3) (1, 4)
    ASYNC      'async'       (1, 4) (1, 9)
    PLUS       '+'           (1, 10) (1, 11)
    NUMBER     '1'           (1, 12) (1, 13)
    ra;    ASYNC      'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'foo'         (1, 10) (1, 13)
    LPAR       '('           (1, 13) (1, 14)
    RPAR       ')'           (1, 14) (1, 15)
    COLON      ':'           (1, 15) (1, 16)
    NAME       'pass'        (1, 17) (1, 21)
    ra    ASYNC      'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'foo'         (1, 10) (1, 13)
    LPAR       '('           (1, 13) (1, 14)
    RPAR       ')'           (1, 14) (1, 15)
    COLON      ':'           (1, 15) (1, 16)
    NEWLINE    ''            (1, 16) (1, 16)
    INDENT     ''            (2, -1) (2, -1)
    NAME       'def'         (2, 2) (2, 5)
    NAME       'foo'         (2, 6) (2, 9)
    LPAR       '('           (2, 9) (2, 10)
    AWAIT      'await'       (2, 10) (2, 15)
    RPAR       ')'           (2, 15) (2, 16)
    COLON      ':'           (2, 16) (2, 17)
    NEWLINE    ''            (2, 17) (2, 17)
    INDENT     ''            (3, -1) (3, -1)
    AWAIT      'await'       (3, 4) (3, 9)
    EQUAL      '='           (3, 10) (3, 11)
    NUMBER     '1'           (3, 12) (3, 13)
    NEWLINE    ''            (3, 13) (3, 13)
    DEDENT     ''            (4, -1) (4, -1)
    NAME       'if'          (4, 2) (4, 4)
    NUMBER     '1'           (4, 5) (4, 6)
    COLON      ':'           (4, 6) (4, 7)
    NEWLINE    ''            (4, 7) (4, 7)
    INDENT     ''            (5, -1) (5, -1)
    AWAIT      'await'       (5, 4) (5, 9)
    NEWLINE    ''            (5, 9) (5, 9)
    DEDENT     ''            (6, -1) (6, -1)
    DEDENT     ''            (6, -1) (6, -1)
    ASYNC      'async'       (6, 0) (6, 5)
    PLUSEQUAL  '+='          (6, 6) (6, 8)
    NUMBER     '1'           (6, 9) (6, 10)
    NEWLINE    ''            (6, 10) (6, 10)
    ra    ASYNC      'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'foo'         (1, 10) (1, 13)
    LPAR       '('           (1, 13) (1, 14)
    RPAR       ')'           (1, 14) (1, 15)
    COLON      ':'           (1, 15) (1, 16)
    NEWLINE    ''            (1, 16) (1, 16)
    INDENT     ''            (2, -1) (2, -1)
    ASYNC      'async'       (2, 2) (2, 7)
    NAME       'for'         (2, 8) (2, 11)
    NAME       'i'           (2, 12) (2, 13)
    NAME       'in'          (2, 14) (2, 16)
    NUMBER     '1'           (2, 17) (2, 18)
    COLON      ':'           (2, 18) (2, 19)
    NAME       'pass'        (2, 20) (2, 24)
    DEDENT     ''            (2, -1) (2, -1)
    rah    ASYNC      'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'foo'         (1, 10) (1, 13)
    LPAR       '('           (1, 13) (1, 14)
    ASYNC      'async'       (1, 14) (1, 19)
    RPAR       ')'           (1, 19) (1, 20)
    COLON      ':'           (1, 20) (1, 21)
    AWAIT      'await'       (1, 22) (1, 27)
    ra~    NAME       'def'         (1, 0) (1, 3)
    NAME       'f'           (1, 4) (1, 5)
    LPAR       '('           (1, 5) (1, 6)
    RPAR       ')'           (1, 6) (1, 7)
    COLON      ':'           (1, 7) (1, 8)
    NEWLINE    ''            (1, 8) (1, 8)
    INDENT     ''            (3, -1) (3, -1)
    NAME       'def'         (3, 2) (3, 5)
    NAME       'baz'         (3, 6) (3, 9)
    LPAR       '('           (3, 9) (3, 10)
    RPAR       ')'           (3, 10) (3, 11)
    COLON      ':'           (3, 11) (3, 12)
    NAME       'pass'        (3, 13) (3, 17)
    NEWLINE    ''            (3, 17) (3, 17)
    ASYNC      'async'       (4, 2) (4, 7)
    NAME       'def'         (4, 8) (4, 11)
    NAME       'bar'         (4, 12) (4, 15)
    LPAR       '('           (4, 15) (4, 16)
    RPAR       ')'           (4, 16) (4, 17)
    COLON      ':'           (4, 17) (4, 18)
    NAME       'pass'        (4, 19) (4, 23)
    NEWLINE    ''            (4, 23) (4, 23)
    AWAIT      'await'       (6, 2) (6, 7)
    EQUAL      '='           (6, 8) (6, 9)
    NUMBER     '2'           (6, 10) (6, 11)
    DEDENT     ''            (6, -1) (6, -1)
    ra    ASYNC      'async'       (1, 0) (1, 5)
    NAME       'def'         (1, 6) (1, 9)
    NAME       'f'           (1, 10) (1, 11)
    LPAR       '('           (1, 11) (1, 12)
    RPAR       ')'           (1, 12) (1, 13)
    COLON      ':'           (1, 13) (1, 14)
    NEWLINE    ''            (1, 14) (1, 14)
    INDENT     ''            (3, -1) (3, -1)
    NAME       'def'         (3, 2) (3, 5)
    NAME       'baz'         (3, 6) (3, 9)
    LPAR       '('           (3, 9) (3, 10)
    RPAR       ')'           (3, 10) (3, 11)
    COLON      ':'           (3, 11) (3, 12)
    NAME       'pass'        (3, 13) (3, 17)
    NEWLINE    ''            (3, 17) (3, 17)
    ASYNC      'async'       (4, 2) (4, 7)
    NAME       'def'         (4, 8) (4, 11)
    NAME       'bar'         (4, 12) (4, 15)
    LPAR       '('           (4, 15) (4, 16)
    RPAR       ')'           (4, 16) (4, 17)
    COLON      ':'           (4, 17) (4, 18)
    NAME       'pass'        (4, 19) (4, 23)
    NEWLINE    ''            (4, 23) (4, 23)
    AWAIT      'await'       (6, 2) (6, 7)
    EQUAL      '='           (6, 8) (6, 9)
    NUMBER     '2'           (6, 10) (6, 11)
    DEDENT     ''            (6, -1) (6, -1)
    rurvs r4rzCTokenizeTest.test_async	sK*			
-0			
I(			
36			
.1			
K*			
K*			
47			
58			
K*			
G&			
47			
/2			
N-			
O.			
36			
#*		X	
HK		&	
9	<				

!		F	

"		r6c(|jddy)Nru7    NAME       'Örter'       (1, 0) (1, 5)
    EQUAL      '='           (1, 6) (1, 7)
    STRING     "u'places'"   (1, 8) (1, 17)
    NEWLINE    ''            (1, 17) (1, 17)
    NAME       'grün'        (2, 0) (2, 4)
    EQUAL      '='           (2, 5) (2, 6)
    STRING     "U'green'"    (2, 7) (2, 15)
    rurvs r4rzCTokenizeTest.test_unicode
rr6cd}dD]4}|j|5|jt||ddd6y#1swYAxYw)NcTt|}tt|jSr)rrPrr<)r
the_strings  r4
get_tokensz5CTokenizeTest.test_invalid_syntax.<locals>.get_tokens
s#!&)J9*:M:MNOOr6)z(1+2]z(1+2}z{1+2]1_1.2_1e2_1e+ u€0b120b1_20b20b1_0b0o180o1_80o80o1_0o0x1_0xr012rrrz'sdfsdfz'''sdfsdf''a((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((a))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))])case)r~rNr)r@rrs   r4test_invalid_syntaxz!CTokenizeTest.test_invalid_syntax
s_	P 
"	@DB4(
@!!*j$?
@
@C"	@B
@
@s	>A	cd}d}||dz
}t|ttj}|j	|dj
t|j	|dj
tt|dd||}t||jtfd|jtt|ddy)	Ndc^djdt|D}|d|zdzz
}|S)Nrc3,K|]}d|zdzyw)  z	if True:
NrH).0rUs  r4	<genexpr>zICTokenizeTest.test_max_indent.<locals>.generate_source.<locals>.<genexpr>sO1dQh,6Osrzpass
)rr)indentsr0s  r4generate_sourcez6CTokenizeTest.test_max_indent.<locals>.generate_sources2WWOgOOFdWnx//FMr6rMrVr"r[execc@ttjSr)rPrr<)	the_inputsr4<lambda>z/CTokenizeTest.test_max_indent.<locals>.<lambda>&sD9Z[d[m[m9n4or6)rrPrr<r=r/rrcompilerNr^)r@	MAXINDENTrvalidrWinvalidrs      @r4test_max_indentzCTokenizeTest.test_max_indents		
 	A
.UO	7	8J8JKL&1)4z6*!),W%	*,opgw
F	
r6cd}td}|j|dtd}|j||||td}|j|dtd}|j||||td}|j|d	td
}|j||||y)Nc~t|}t|jDcgc]	^}}}||fc}}}Scc}}}wr)rrr<)rrkindrs    r4rzECTokenizeTest.test_continuation_lines_indentation.<locals>.get_tokens,sH!&)J89L9LMOO'9fqT6NO
OOs8z
            def fib(n):
                \
            '''Print a Fibonacci series up to n.'''
                \
            a, b = 0, 1
        ae    NAME       'def'         (2, 0) (2, 3)
    NAME       'fib'         (2, 4) (2, 7)
    LPAR       '('           (2, 7) (2, 8)
    NAME       'n'           (2, 8) (2, 9)
    RPAR       ')'           (2, 9) (2, 10)
    COLON      ':'           (2, 10) (2, 11)
    NEWLINE    ''            (2, 11) (2, 11)
    INDENT     ''            (4, -1) (4, -1)
    STRING     "'''Print a Fibonacci series up to n.'''" (4, 0) (4, 39)
    NEWLINE    ''            (4, 39) (4, 39)
    NAME       'a'           (6, 0) (6, 1)
    COMMA      ','           (6, 1) (6, 2)
    NAME       'b'           (6, 3) (6, 4)
    EQUAL      '='           (6, 5) (6, 6)
    NUMBER     '0'           (6, 7) (6, 8)
    COMMA      ','           (6, 8) (6, 9)
    NUMBER     '1'           (6, 10) (6, 11)
    NEWLINE    ''            (6, 11) (6, 11)
    DEDENT     ''            (6, -1) (6, -1)
        zu
            def fib(n):
                '''Print a Fibonacci series up to n.'''
                a, b = 0, 1
        z>
            pass
                \

            pass
        z    NAME       'pass'        (2, 0) (2, 4)
    NEWLINE    ''            (2, 4) (2, 4)
    NAME       'pass'        (5, 0) (5, 4)
    NEWLINE    ''            (5, 4) (5, 4)
        z+
            pass
            pass
        z
            if x:
                y = 1
                \
                        \
                    \
                \
                foo = 1
        aj    NAME       'if'          (2, 0) (2, 2)
    NAME       'x'           (2, 3) (2, 4)
    COLON      ':'           (2, 4) (2, 5)
    NEWLINE    ''            (2, 5) (2, 5)
    INDENT     ''            (3, -1) (3, -1)
    NAME       'y'           (3, 4) (3, 5)
    EQUAL      '='           (3, 6) (3, 7)
    NUMBER     '1'           (3, 8) (3, 9)
    NEWLINE    ''            (3, 9) (3, 9)
    NAME       'foo'         (8, 4) (8, 7)
    EQUAL      '='           (8, 8) (8, 9)
    NUMBER     '1'           (8, 10) (8, 11)
    NEWLINE    ''            (8, 11) (8, 11)
    DEDENT     ''            (8, -1) (8, -1)
        zI
            if x:
                y = 1
                foo = 1
        )rrDr=)r@rrWcode_no_conts    r4#test_continuation_lines_indentationz1CTokenizeTest.test_continuation_lines_indentation+s	O

	
D#	
,
	
D):l+CD
	
D#	


	
D):l+CD
	
D#	
"
	
D):l+CDr6N)rrrrDrrwrrrrrrrrrrrrrrrrHr6r4rrsjE3(?	B,	\V	p=	~$	L	.	($	L	,	"	"H	T
	'@R
,bEr6rceZdZdZy)CTokenizerBufferTestscdddzdddz}tj5}t|d|}t|dddy#1swYyxYw)Nz"        #coding: latin-1
        #r3i'z

        #i'foo)rr7rr)r@test_scriptr7	file_names    r4!test_newline_at_the_end_of_bufferz7CTokenizerBufferTests.test_newline_at_the_end_of_buffers`


e)


e)


!	'X#He[AII&	'	'	'sAAN)rrrrrHr6r4rrs
'r6r__main__)8testrtest.supportrrrrrr	r
rrr
rrrrrrrrrriorrunittesttextwraprrrtest.test_grammarrrtest.support.script_helperrrr rr0r5r8rr	rrr.r;rr?rrrrrmainrHr6r4<module>rs"!!!!!
!#<"YY	 S	8S	j"AA
6GxG.#IH#IL<H<,{"{"|v28v2r&>X&>R\#H\#~228KEHKE\ 'H--'zHMMOr6