2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  ast  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  dis  
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  os  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  sys  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  unittest  
						 
					
						
							
								
									
										
										
										
											2019-08-26 10:13:19 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  warnings  
						 
					
						
							
								
									
										
										
										
											2012-07-08 11:13:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  weakref  
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  textwrap  import  dedent  
						 
					
						
							
								
									
										
										
										
											2012-07-08 11:13:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  test  import  support  
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  to_tuple ( t ) :  
						 
					
						
							
								
									
										
										
										
											2007-10-16 18:12:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  t  is  None  or  isinstance ( t ,  ( str ,  int ,  complex ) ) : 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  t 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    elif  isinstance ( t ,  list ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  [ to_tuple ( e )  for  e  in  t ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    result  =  [ t . __class__ . __name__ ] 
							 
						 
					
						
							
								
									
										
										
										
											2006-03-01 22:49:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  hasattr ( t ,  ' lineno ' )  and  hasattr ( t ,  ' col_offset ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        result . append ( ( t . lineno ,  t . col_offset ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-10 10:12:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  hasattr ( t ,  ' end_lineno ' )  and  hasattr ( t ,  ' end_col_offset ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            result [ - 1 ]  + =  ( t . end_lineno ,  t . end_col_offset ) 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  t . _fields  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  tuple ( result ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  f  in  t . _fields : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        result . append ( to_tuple ( getattr ( t ,  f ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  tuple ( result ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# These tests are compiled through "exec"  
						 
					
						
							
								
									
										
										
										
											2013-08-17 16:57:41 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# There should be at least one test per statement  
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								exec_tests  =  [  
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " None " , 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 00:31:59 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Module docstring 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " ' module docstring ' " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # FunctionDef 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(): pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 00:31:59 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # FunctionDef with docstring 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f():  ' function docstring ' " , 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # FunctionDef with arg 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # FunctionDef with arg and default value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a=0): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # FunctionDef with varargs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(*args): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # FunctionDef with kwargs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(**kwargs): pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 00:31:59 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # FunctionDef with all kind of args and docstring 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a, b=1, c=None, d=[], e= {} , *args, f=42, **kwargs):  ' doc for f() ' " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # ClassDef 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " class C:pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 00:31:59 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # ClassDef with docstring 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " class C:  ' docstring for class C ' " , 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # ClassDef, new style class 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " class C(object): pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f():return 1 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Delete 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " del v " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Assign 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " v = 1 " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-27 09:40:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " a,b = c " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " (a,b) = c " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " [a,b] = c " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # AugAssign 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " v += 1 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # For 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " for v in v:pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # While 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " while v:pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # If 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " if v:pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-12 22:40:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # If-Elif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " if a: \n   pass \n elif b: \n   pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-14 11:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # If-Elif-Else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " if a: \n   pass \n elif b: \n   pass \n else: \n   pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2011-05-27 15:02:03 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # With 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " with x as y: pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " with x as y, z as q: pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Raise 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-31 00:04:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " raise Exception( ' string ' ) " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # TryExcept 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " try: \n   pass \n except Exception: \n   pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # TryFinally 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " try: \n   pass \n finally: \n   pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Assert 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " assert v " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Import 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " import sys " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # ImportFrom 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " from sys import v " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Global 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " global v " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Expr 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " 1 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Pass, 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Break 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-01 16:10:49 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " for v in v:break " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Continue 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-01 16:10:49 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " for v in v:continue " , 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-11 22:36:20 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # for statements with naked tuples (see http://bugs.python.org/issue6704) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " for a,b in c: pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-27 09:40:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " for (a,b) in c: pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " for [a,b] in c: pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Multiline generator expression (test for .lineno & .col_offset) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ ( 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Aa 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       Bb 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Aa 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Bb  in  Cc 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) """ , 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # dictcomp 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " { a : b for w in x for m in p if g} " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # dictcomp with naked tuple 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " { a : b for v,w in x} " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # setcomp 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " { r for l in x if g} " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # setcomp with naked tuple 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " { r for l,m in x} " , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-11 22:57:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # AsyncFunctionDef 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 00:31:59 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " async def f(): \n   ' async function ' \n  await something() " , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-11 22:57:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # AsyncFor 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " async def f(): \n  async for e in i: 1 \n  else: 2 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # AsyncWith 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " async def f(): \n  async with a as b: 1 " , 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-01 16:10:49 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # PEP 448: Additional Unpacking Generalizations 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " { ** {1:2} , 2:3} " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " { * { 1, 2}, 3} " , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 10:36:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Asynchronous comprehensions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " async def f(): \n  [i async for b in c] " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-30 13:16:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Decorated FunctionDef 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 16:46:05 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " @deco1 \n @deco2() \n @deco3(1) \n def f(): pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-30 13:16:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Decorated AsyncFunctionDef 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 16:46:05 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " @deco1 \n @deco2() \n @deco3(1) \n async def f(): pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-30 13:16:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Decorated ClassDef 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 16:46:05 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " @deco1 \n @deco2() \n @deco3(1) \n class C: pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-27 09:40:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Decorator with generator argument 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " @deco(a for a in b) \n def f(): pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-08 00:36:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Decorator with attribute 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " @a.b.c \n def f(): pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-18 13:51:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Simple assignment expression 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " (a := 1) " , 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-31 14:09:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Positional-only arguments 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a, /,): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a, /, c, d, e): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a, /, c, *, d, e): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a, /, c, *, d, e, **kwargs): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Positional-only arguments with defaults 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a=1, /,): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a=1, /, b=2, c=4): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a=1, /, b=2, *, c=4): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a=1, /, b=2, *, c): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a=1, /, b=2, *, c=4, **kwargs): pass " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " def f(a=1, /, b=2, *, c, **kwargs): pass " , 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-18 13:51:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								]  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# These are compiled through "single"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# because of overlap with "eval", it just tests what  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# can't be tested with "eval"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								single_tests  =  [  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " 1+2 " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								]  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# These are compiled through "eval"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# It should test all expressions  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								eval_tests  =  [  
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " None " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # BoolOp 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " a and b " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # BinOp 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " a + b " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # UnaryOp 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " not v " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Lambda 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " lambda:None " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Dict 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " {  1:2 } " , 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Empty dict 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " {} " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Set 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " { None,} " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Multiline dict (test for .lineno & .col_offset) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  """ { 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          2 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     } """ , 
 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # ListComp 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " [a for b in c if d] " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # GeneratorExp 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " (a for b in c if d) " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-27 09:40:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Comprehensions with multiple for targets 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " [(a,b) for a,b in c] " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " [(a,b) for (a,b) in c] " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " [(a,b) for [a,b] in c] " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " { (a,b) for a,b in c} " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " { (a,b) for (a,b) in c} " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " { (a,b) for [a,b] in c} " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " ((a,b) for a,b in c) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " ((a,b) for (a,b) in c) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " ((a,b) for [a,b] in c) " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Yield - yield expressions can't work outside a function 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Compare 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " 1 < 2 < 3 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Call 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " f(1,2,c=3,*d,**e) " , 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-18 01:20:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Call with multi-character starred 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " f(*[0, 1]) " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-27 09:40:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Call with a generator argument 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " f(a for a in b) " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Num 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-15 16:59:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  " 10 " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Str 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " ' string ' " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Attribute 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " a.b " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Subscript 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " a[b:c] " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Name 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " v " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # List 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " [1,2,3] " , 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Empty list 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " [] " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Tuple 
							 
						 
					
						
							
								
									
										
										
										
											2006-03-01 22:49:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  " 1,2,3 " , 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Tuple 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " (1,2,3) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Empty tuple 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " () " , 
							 
						 
					
						
							
								
									
										
										
										
											2006-03-01 22:49:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Combination 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  " a.b.c.d(a.b[1:2]) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								]  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# TODO: expr_context, slice, boolop, operator, unaryop, cmpop, comprehension  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# excepthandler, arguments, keywords, alias  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  AST_Tests ( unittest . TestCase ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-01 23:12:17 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  _is_ast_node ( self ,  name ,  node ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  not  isinstance ( node ,  type ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  " ast "  not  in  node . __module__ : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  name  !=  ' AST '  and  name [ 0 ] . isupper ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-02 10:51:20 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  _assertTrueorder ( self ,  ast_node ,  parent_pos ) : 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  not  isinstance ( ast_node ,  ast . AST )  or  ast_node . _fields  is  None : 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  isinstance ( ast_node ,  ( ast . expr ,  ast . stmt ,  ast . excepthandler ) ) : 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            node_pos  =  ( ast_node . lineno ,  ast_node . col_offset ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-30 13:16:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self . assertGreaterEqual ( node_pos ,  parent_pos ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            parent_pos  =  ( ast_node . lineno ,  ast_node . col_offset ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  name  in  ast_node . _fields : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            value  =  getattr ( ast_node ,  name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  isinstance ( value ,  list ) : 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-30 13:16:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                first_pos  =  parent_pos 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  value  and  name  ==  ' decorator_list ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    first_pos  =  ( value [ 0 ] . lineno ,  value [ 0 ] . col_offset ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                for  child  in  value : 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-30 13:16:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    self . _assertTrueorder ( child ,  first_pos ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            elif  value  is  not  None : 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-02 10:51:20 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                self . _assertTrueorder ( value ,  parent_pos ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_AST_objects ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . AST ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . _fields ,  ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-12 09:46:44 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x . foobar  =  42 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . foobar ,  42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . __dict__ [ " foobar " ] ,  42 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( AttributeError ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x . vararg 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( TypeError ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-22 20:33:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            # "ast.AST constructor takes 0 positional arguments" 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ast . AST ( 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-07-08 11:13:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_AST_garbage_collection ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  X : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        a  =  ast . AST ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        a . x  =  X ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        a . x . a  =  a 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ref  =  weakref . ref ( a . x ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        del  a 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        support . gc_collect ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ref ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_snippets ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  input ,  output ,  kind  in  ( ( exec_tests ,  exec_results ,  " exec " ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                    ( single_tests ,  single_results ,  " single " ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                    ( eval_tests ,  eval_results ,  " eval " ) ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  i ,  o  in  zip ( input ,  output ) : 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-01 16:10:49 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                with  self . subTest ( action = " parsing " ,  input = i ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ast_tree  =  compile ( i ,  " ? " ,  kind ,  ast . PyCF_ONLY_AST ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    self . assertEqual ( to_tuple ( ast_tree ) ,  o ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    self . _assertTrueorder ( ast_tree ,  ( 0 ,  0 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-08 22:45:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                with  self . subTest ( action = " compiling " ,  input = i ,  kind = kind ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    compile ( ast_tree ,  " ? " ,  kind ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-18 13:51:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_ast_validation ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # compile() is the only function that calls PyAST_Validate 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        snippets_to_validate  =  exec_tests  +  single_tests  +  eval_tests 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  snippet  in  snippets_to_validate : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            tree  =  ast . parse ( snippet ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            compile ( tree ,  ' <string> ' ,  ' exec ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 73376,73393,73398,73400,73404-73405,73409,73419-73421,73432,73457,73460,73485-73486,73488-73489,73501-73502,73513-73514 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r73376 | benjamin.peterson | 2009-06-11 17:29:23 -0500 (Thu, 11 Jun 2009) | 1 line
  remove check for case handled in sub-function
........
  r73393 | alexandre.vassalotti | 2009-06-12 13:56:57 -0500 (Fri, 12 Jun 2009) | 2 lines
  Clear reference to the static PyExc_RecursionErrorInst in _PyExc_Fini.
........
  r73398 | alexandre.vassalotti | 2009-06-12 15:57:12 -0500 (Fri, 12 Jun 2009) | 3 lines
  Add const qualifier to PyErr_SetFromErrnoWithFilename and to
  PyErr_SetFromErrnoWithUnicodeFilename.
........
  r73400 | alexandre.vassalotti | 2009-06-12 16:43:47 -0500 (Fri, 12 Jun 2009) | 2 lines
  Delete outdated make file for building the parser with MSVC 6.
........
  r73404 | benjamin.peterson | 2009-06-12 20:40:00 -0500 (Fri, 12 Jun 2009) | 1 line
  keep the slice.step field as NULL if no step expression is given
........
  r73405 | benjamin.peterson | 2009-06-12 22:46:30 -0500 (Fri, 12 Jun 2009) | 1 line
  prevent import statements from assigning to None
........
  r73409 | benjamin.peterson | 2009-06-13 08:06:21 -0500 (Sat, 13 Jun 2009) | 1 line
  allow importing from a module named None if it has an 'as' clause
........
  r73419 | benjamin.peterson | 2009-06-13 11:19:19 -0500 (Sat, 13 Jun 2009) | 1 line
  set Print.values to NULL if there are no values
........
  r73420 | benjamin.peterson | 2009-06-13 12:08:53 -0500 (Sat, 13 Jun 2009) | 1 line
  give a better error message when deleting ()
........
  r73421 | benjamin.peterson | 2009-06-13 15:23:33 -0500 (Sat, 13 Jun 2009) | 1 line
  when no module is given in a 'from' relative import, make ImportFrom.module NULL
........
  r73432 | amaury.forgeotdarc | 2009-06-14 16:20:40 -0500 (Sun, 14 Jun 2009) | 3 lines
  #6227: Because of a wrong indentation, the test was not testing what it should.
  Ensure that the snippet in doctest_aliases actually contains aliases.
........
  r73457 | benjamin.peterson | 2009-06-16 18:13:09 -0500 (Tue, 16 Jun 2009) | 1 line
  add underscores
........
  r73460 | benjamin.peterson | 2009-06-16 22:23:04 -0500 (Tue, 16 Jun 2009) | 1 line
  remove unused 'encoding' member from the compiler struct
........
  r73485 | benjamin.peterson | 2009-06-19 17:07:47 -0500 (Fri, 19 Jun 2009) | 1 line
  remove duplicate test
........
  r73486 | benjamin.peterson | 2009-06-19 17:09:17 -0500 (Fri, 19 Jun 2009) | 1 line
  add missing assertion #6313
........
  r73488 | benjamin.peterson | 2009-06-19 17:16:28 -0500 (Fri, 19 Jun 2009) | 1 line
  show that this one isn't used
........
  r73489 | benjamin.peterson | 2009-06-19 17:21:12 -0500 (Fri, 19 Jun 2009) | 1 line
  use closures
........
  r73501 | benjamin.peterson | 2009-06-21 18:01:07 -0500 (Sun, 21 Jun 2009) | 1 line
  don't need to add the name 'lambda' as assigned
........
  r73502 | benjamin.peterson | 2009-06-21 18:03:36 -0500 (Sun, 21 Jun 2009) | 1 line
  remove tmpname support since it's no longer used
........
  r73513 | benjamin.peterson | 2009-06-22 20:18:57 -0500 (Mon, 22 Jun 2009) | 1 line
  fix grammar
........
  r73514 | benjamin.peterson | 2009-06-22 22:01:56 -0500 (Mon, 22 Jun 2009) | 1 line
  remove some unused symtable constants
........
											 
										 
										
											2009-06-28 19:19:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_slice ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        slc  =  ast . parse ( " x[::] " ) . body [ 0 ] . value . slice 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( slc . upper ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( slc . lower ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( slc . step ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_from_import ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        im  =  ast . parse ( " from . import y " ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( im . module ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-03-22 08:19:04 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_non_interned_future_from_ast ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mod  =  ast . parse ( " from __future__ import division " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsInstance ( mod . body [ 0 ] ,  ast . ImportFrom ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mod . body [ 0 ] . module  =  "  __future__  " . strip ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        compile ( mod ,  " <test> " ,  " exec " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 75149,75260-75263,75265-75267,75292,75300,75376,75405,75429-75433,75437,75445,75501,75551,75572,75589-75591,75657,75742,75868,75952-75957,76057,76105,76139,76143,76162,76223 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r75149 | gregory.p.smith | 2009-09-29 16:56:31 -0500 (Tue, 29 Sep 2009) | 3 lines
  Mention issue6972 in extractall docs about overwriting things outside of
  the supplied path.
........
  r75260 | andrew.kuchling | 2009-10-05 16:24:20 -0500 (Mon, 05 Oct 2009) | 1 line
  Wording fix
........
  r75261 | andrew.kuchling | 2009-10-05 16:24:35 -0500 (Mon, 05 Oct 2009) | 1 line
  Fix narkup
........
  r75262 | andrew.kuchling | 2009-10-05 16:25:03 -0500 (Mon, 05 Oct 2009) | 1 line
  Document 'skip' parameter to constructor
........
  r75263 | andrew.kuchling | 2009-10-05 16:25:35 -0500 (Mon, 05 Oct 2009) | 1 line
  Note side benefit of socket.create_connection()
........
  r75265 | andrew.kuchling | 2009-10-05 17:31:11 -0500 (Mon, 05 Oct 2009) | 1 line
  Reword sentence
........
  r75266 | andrew.kuchling | 2009-10-05 17:32:48 -0500 (Mon, 05 Oct 2009) | 1 line
  Use standard comma punctuation; reword some sentences in the docs
........
  r75267 | andrew.kuchling | 2009-10-05 17:42:56 -0500 (Mon, 05 Oct 2009) | 1 line
  Backport r73983: Document the thousands separator.
........
  r75292 | benjamin.peterson | 2009-10-08 22:11:36 -0500 (Thu, 08 Oct 2009) | 1 line
  death to old CVS keyword
........
  r75300 | benjamin.peterson | 2009-10-09 16:48:14 -0500 (Fri, 09 Oct 2009) | 1 line
  fix some coding style
........
  r75376 | benjamin.peterson | 2009-10-11 20:26:07 -0500 (Sun, 11 Oct 2009) | 1 line
  platform we don't care about
........
  r75405 | neil.schemenauer | 2009-10-14 12:17:14 -0500 (Wed, 14 Oct 2009) | 4 lines
  Issue #1754094: Improve the stack depth calculation in the compiler.
  There should be no other effect than a small decrease in memory use.
  Patch by Christopher Tur Lesniewski-Laas.
........
  r75429 | benjamin.peterson | 2009-10-14 20:47:28 -0500 (Wed, 14 Oct 2009) | 1 line
  pep8ify if blocks
........
  r75430 | benjamin.peterson | 2009-10-14 20:49:37 -0500 (Wed, 14 Oct 2009) | 1 line
  use floor division and add a test that exercises the tabsize codepath
........
  r75431 | benjamin.peterson | 2009-10-14 20:56:25 -0500 (Wed, 14 Oct 2009) | 1 line
  change test to what I intended
........
  r75432 | benjamin.peterson | 2009-10-14 22:05:39 -0500 (Wed, 14 Oct 2009) | 1 line
  some cleanups
........
  r75433 | benjamin.peterson | 2009-10-14 22:06:55 -0500 (Wed, 14 Oct 2009) | 1 line
  make inspect.isabstract() always return a boolean; add a test for it, too #7069
........
  r75437 | benjamin.peterson | 2009-10-15 10:44:46 -0500 (Thu, 15 Oct 2009) | 1 line
  only clear a module's __dict__ if the module is the only one with a reference to it #7140
........
  r75445 | vinay.sajip | 2009-10-16 09:06:44 -0500 (Fri, 16 Oct 2009) | 1 line
  Issue #7120: logging: Removed import of multiprocessing which is causing crash in GAE.
........
  r75501 | antoine.pitrou | 2009-10-18 13:37:11 -0500 (Sun, 18 Oct 2009) | 3 lines
  Add a comment about unreachable code, and fix a typo
........
  r75551 | benjamin.peterson | 2009-10-19 22:14:10 -0500 (Mon, 19 Oct 2009) | 1 line
  use property api
........
  r75572 | benjamin.peterson | 2009-10-20 16:55:17 -0500 (Tue, 20 Oct 2009) | 1 line
  clarify buffer arg #7178
........
  r75589 | benjamin.peterson | 2009-10-21 21:26:47 -0500 (Wed, 21 Oct 2009) | 1 line
  whitespace
........
  r75590 | benjamin.peterson | 2009-10-21 21:36:47 -0500 (Wed, 21 Oct 2009) | 1 line
  rewrite to be nice to other implementations
........
  r75591 | benjamin.peterson | 2009-10-21 21:50:38 -0500 (Wed, 21 Oct 2009) | 4 lines
  rewrite for style, clarify, and comments
  Also, use the hasattr() like scheme of allowing BaseException exceptions through.
........
  r75657 | antoine.pitrou | 2009-10-24 07:41:27 -0500 (Sat, 24 Oct 2009) | 3 lines
  Fix compilation error in debug mode.
........
  r75742 | benjamin.peterson | 2009-10-26 17:51:16 -0500 (Mon, 26 Oct 2009) | 1 line
  use 'is' instead of id()
........
  r75868 | benjamin.peterson | 2009-10-27 15:59:18 -0500 (Tue, 27 Oct 2009) | 1 line
  test expect base classes
........
  r75952 | georg.brandl | 2009-10-29 15:38:32 -0500 (Thu, 29 Oct 2009) | 1 line
  Use the correct function name in docstring.
........
  r75953 | georg.brandl | 2009-10-29 15:39:50 -0500 (Thu, 29 Oct 2009) | 1 line
  Remove mention of the old -X command line switch.
........
  r75954 | georg.brandl | 2009-10-29 15:53:00 -0500 (Thu, 29 Oct 2009) | 1 line
  Use constants instead of magic integers for test result.  Do not re-run with --verbose3 for environment changing tests.
........
  r75955 | georg.brandl | 2009-10-29 15:54:03 -0500 (Thu, 29 Oct 2009) | 1 line
  Use a single style for all the docstrings in the math module.
........
  r75956 | georg.brandl | 2009-10-29 16:16:34 -0500 (Thu, 29 Oct 2009) | 1 line
  I do not think the "railroad" program mentioned is still available.
........
  r75957 | georg.brandl | 2009-10-29 16:44:56 -0500 (Thu, 29 Oct 2009) | 1 line
  Fix constant name.
........
  r76057 | benjamin.peterson | 2009-11-02 09:06:45 -0600 (Mon, 02 Nov 2009) | 1 line
  prevent a rather unlikely segfault
........
  r76105 | georg.brandl | 2009-11-04 01:38:12 -0600 (Wed, 04 Nov 2009) | 1 line
  #7259: show correct equivalent for operator.i* operations in docstring; fix minor issues in operator docs.
........
  r76139 | benjamin.peterson | 2009-11-06 19:04:38 -0600 (Fri, 06 Nov 2009) | 1 line
  spelling
........
  r76143 | georg.brandl | 2009-11-07 02:26:07 -0600 (Sat, 07 Nov 2009) | 1 line
  #7271: fix typo.
........
  r76162 | benjamin.peterson | 2009-11-08 22:10:53 -0600 (Sun, 08 Nov 2009) | 1 line
  discuss how to use -p
........
  r76223 | georg.brandl | 2009-11-12 02:29:46 -0600 (Thu, 12 Nov 2009) | 1 line
  Give the profile module a module directive.
........
											 
										 
										
											2009-11-13 02:25:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_base_classes ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( issubclass ( ast . For ,  ast . stmt ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( issubclass ( ast . Name ,  ast . expr ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( issubclass ( ast . stmt ,  ast . AST ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( issubclass ( ast . expr ,  ast . AST ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( issubclass ( ast . comprehension ,  ast . AST ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( issubclass ( ast . Gt ,  ast . AST ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_field_attr_existence ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  name ,  item  in  ast . __dict__ . items ( ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-01 23:12:17 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  self . _is_ast_node ( name ,  item ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  name  ==  ' Index ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    # Index(value) just returns value now. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    # The argument is required. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    continue 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                x  =  item ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  isinstance ( x ,  ast . AST ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    self . assertEqual ( type ( x . _fields ) ,  tuple ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_arguments ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . arguments ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-15 01:32:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . _fields ,  ( ' posonlyargs ' ,  ' args ' ,  ' vararg ' ,  ' kwonlyargs ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                     ' kw_defaults ' ,  ' kwarg ' ,  ' defaults ' ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( AttributeError ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            x . args 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( x . vararg ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-04-29 13:36:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ast . arguments ( * range ( 1 ,  8 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . args ,  2 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-29 13:36:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . vararg ,  3 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_field_attr_writable ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . Num ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # We can assign to _fields 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x . _fields  =  666 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . _fields ,  666 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_classattrs ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . Num ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-13 13:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . _fields ,  ( ' value ' ,  ' kind ' ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( AttributeError ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x . value 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( AttributeError ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x . n 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . Num ( 42 ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . value ,  42 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . n ,  42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( AttributeError ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x . lineno 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( AttributeError ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x . foobar 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . Num ( lineno = 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . lineno ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . Num ( 42 ,  lineno = 0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . lineno ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-13 13:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . _fields ,  ( ' value ' ,  ' kind ' ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . value ,  42 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . n ,  42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-13 13:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertRaises ( TypeError ,  ast . Num ,  1 ,  None ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( TypeError ,  ast . Num ,  1 ,  None ,  2 ,  lineno = 0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-24 14:32:32 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Arbitrary keyword arguments are supported 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Constant ( 1 ,  foo = ' bar ' ) . foo ,  ' bar ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Num ( 1 ,  foo = ' bar ' ) . foo ,  ' bar ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaisesRegex ( TypeError ,  " Num got multiple values for argument  ' n ' " ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ast . Num ( 1 ,  n = 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaisesRegex ( TypeError ,  " Constant got multiple values for argument  ' value ' " ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ast . Constant ( 1 ,  value = 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Num ( 42 ) . n ,  42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Num ( 4.25 ) . n ,  4.25 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Num ( 4.25 j ) . n ,  4.25 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Str ( ' 42 ' ) . s ,  ' 42 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Bytes ( b ' 42 ' ) . s ,  b ' 42 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIs ( ast . NameConstant ( True ) . value ,  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIs ( ast . NameConstant ( False ) . value ,  False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIs ( ast . NameConstant ( None ) . value ,  None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Constant ( 42 ) . value ,  42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Constant ( 4.25 ) . value ,  4.25 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Constant ( 4.25 j ) . value ,  4.25 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Constant ( ' 42 ' ) . value ,  ' 42 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Constant ( b ' 42 ' ) . value ,  b ' 42 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIs ( ast . Constant ( True ) . value ,  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIs ( ast . Constant ( False ) . value ,  False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIs ( ast . Constant ( None ) . value ,  None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIs ( ast . Constant ( . . . ) . value ,  . . . ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_realtype ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( ast . Num ( 42 ) ) ,  ast . Constant ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( ast . Num ( 4.25 ) ) ,  ast . Constant ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( ast . Num ( 4.25 j ) ) ,  ast . Constant ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( ast . Str ( ' 42 ' ) ) ,  ast . Constant ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( ast . Bytes ( b ' 42 ' ) ) ,  ast . Constant ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( ast . NameConstant ( True ) ) ,  ast . Constant ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( ast . NameConstant ( False ) ) ,  ast . Constant ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( ast . NameConstant ( None ) ) ,  ast . Constant ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( ast . Ellipsis ( ) ) ,  ast . Constant ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_isinstance ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Num ( 42 ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Num ( 4.2 ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Num ( 4.2 j ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Str ( ' 42 ' ) ,  ast . Str ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Bytes ( b ' 42 ' ) ,  ast . Bytes ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . NameConstant ( True ) ,  ast . NameConstant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . NameConstant ( False ) ,  ast . NameConstant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . NameConstant ( None ) ,  ast . NameConstant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Ellipsis ( ) ,  ast . Ellipsis ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( 42 ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( 4.2 ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( 4.2 j ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( ' 42 ' ) ,  ast . Str ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( b ' 42 ' ) ,  ast . Bytes ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( True ) ,  ast . NameConstant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( False ) ,  ast . NameConstant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( None ) ,  ast . NameConstant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( . . . ) ,  ast . Ellipsis ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Str ( ' 42 ' ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Num ( 42 ) ,  ast . Str ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Str ( ' 42 ' ) ,  ast . Bytes ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Num ( 42 ) ,  ast . NameConstant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Num ( 42 ) ,  ast . Ellipsis ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-18 11:30:28 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . NameConstant ( True ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . NameConstant ( False ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( ' 42 ' ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( 42 ) ,  ast . Str ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( ' 42 ' ) ,  ast . Bytes ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( 42 ) ,  ast . NameConstant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( 42 ) ,  ast . Ellipsis ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-18 11:30:28 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( True ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( False ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( ) ,  ast . Str ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( ) ,  ast . Bytes ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( ) ,  ast . NameConstant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( ) ,  ast . Ellipsis ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-28 13:43:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        class  S ( str ) :  pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( ast . Constant ( S ( ' 42 ' ) ) ,  ast . Str ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Constant ( S ( ' 42 ' ) ) ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_subclasses ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  N ( ast . Num ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            def  __init__ ( self ,  * args ,  * * kwargs ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                super ( ) . __init__ ( * args ,  * * kwargs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self . z  =  ' spam ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  N2 ( ast . Num ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        n  =  N ( 42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( n . n ,  42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( n . z ,  ' spam ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( n ) ,  N ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( n ,  N ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertTrue ( isinstance ( n ,  ast . Num ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( n ,  N2 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertFalse ( isinstance ( ast . Num ( 42 ) ,  N ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        n  =  N ( n = 42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( n . n ,  42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( n ) ,  N ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_module ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        body  =  [ ast . Num ( 42 ) ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ast . Module ( body ,  [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . body ,  body ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_nodeclasses ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2011-11-11 19:35:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Zero arguments constructor explicitly allowed 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ast . BinOp ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . _fields ,  ( ' left ' ,  ' op ' ,  ' right ' ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Random attribute allowed too 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x . foobarbaz  =  5 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . foobarbaz ,  5 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        n1  =  ast . Num ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        n3  =  ast . Num ( 3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        addop  =  ast . Add ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . BinOp ( n1 ,  addop ,  n3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . left ,  n1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . op ,  addop ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . right ,  n3 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:51:18 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ast . BinOp ( 1 ,  2 ,  3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . left ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . op ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . right ,  3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ast . BinOp ( 1 ,  2 ,  3 ,  lineno = 0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-20 19:04:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . left ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . op ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . right ,  3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . lineno ,  0 ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # node raises exception when given too many arguments 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( TypeError ,  ast . BinOp ,  1 ,  2 ,  3 ,  4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # node raises exception when given too many arguments 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( TypeError ,  ast . BinOp ,  1 ,  2 ,  3 ,  4 ,  lineno = 0 ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # can set attributes through kwargs too 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ast . BinOp ( left = 1 ,  op = 2 ,  right = 3 ,  lineno = 0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-20 19:04:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . left ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . op ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . right ,  3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . lineno ,  0 ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Random kwargs also allowed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . BinOp ( 1 ,  2 ,  3 ,  foobarbaz = 42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( x . foobarbaz ,  42 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_no_fields ( self ) : 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # this used to fail because Sub._fields was None 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ast . Sub ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-27 17:46:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( x . _fields ,  ( ) ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_pickling ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        import  pickle 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mods  =  [ pickle ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            import  cPickle 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            mods . append ( cPickle ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        except  ImportError : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        protocols  =  [ 0 ,  1 ,  2 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  mod  in  mods : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  protocol  in  protocols : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                for  ast  in  ( compile ( i ,  " ? " ,  " exec " ,  0x400 )  for  i  in  exec_tests ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ast2  =  mod . loads ( mod . dumps ( ast ,  protocol ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-20 19:04:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    self . assertEqual ( to_tuple ( ast2 ) ,  to_tuple ( ast ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-11-20 01:38:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_invalid_sum ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pos  =  dict ( lineno = 2 ,  col_offset = 3 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        m  =  ast . Module ( [ ast . Expr ( ast . expr ( * * pos ) ,  * * pos ) ] ,  [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-20 01:38:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        with  self . assertRaises ( TypeError )  as  cm : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            compile ( m ,  " <test> " ,  " exec " ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-22 20:33:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertIn ( " but got <ast.expr " ,  str ( cm . exception ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-20 01:38:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 08:16:13 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_invalid_identifier ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        m  =  ast . Module ( [ ast . Expr ( ast . Name ( 42 ,  ast . Load ( ) ) ) ] ,  [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-07-22 10:50:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ast . fix_missing_locations ( m ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( TypeError )  as  cm : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            compile ( m ,  " <test> " ,  " exec " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIn ( " identifier must be of type str " ,  str ( cm . exception ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 14:32:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_invalid_constant ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  invalid_constant  in  int ,  ( 1 ,  2 ,  int ) ,  frozenset ( ( 1 ,  2 ,  int ) ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            e  =  ast . Expression ( body = ast . Constant ( invalid_constant ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ast . fix_missing_locations ( e ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            with  self . assertRaisesRegex ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                TypeError ,  " invalid type in Constant: type " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                compile ( e ,  " <test> " ,  " eval " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-11-25 14:36:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_empty_yield_from ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Issue 16546: yield from value is not optional. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        empty_yield_from  =  ast . parse ( " def f(): \n  yield from g() " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        empty_yield_from . body [ 0 ] . body [ 0 ] . value . value  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( ValueError )  as  cm : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            compile ( empty_yield_from ,  " <test> " ,  " exec " ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-06 17:29:32 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertIn ( " field  ' value '  is required " ,  str ( cm . exception ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-11-25 14:36:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-30 20:16:24 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @support.cpython_only 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_issue31592 ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # There shouldn't be an assertion failure in case of a bad 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # unicodedata.normalize(). 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        import  unicodedata 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        def  bad_normalize ( * args ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  support . swap_attr ( unicodedata ,  ' normalize ' ,  bad_normalize ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self . assertRaises ( TypeError ,  ast . parse ,  ' \u03D5 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-08 23:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_issue18374_binop_col_offset ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree  =  ast . parse ( ' 4+5+6+7 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        parent_binop  =  tree . body [ 0 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        child_binop  =  parent_binop . left 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        grandchild_binop  =  child_binop . left 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( parent_binop . col_offset ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( parent_binop . end_col_offset ,  7 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( child_binop . col_offset ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( child_binop . end_col_offset ,  5 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( grandchild_binop . col_offset ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( grandchild_binop . end_col_offset ,  3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree  =  ast . parse ( ' 4+5- \\ \n  6-7 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        parent_binop  =  tree . body [ 0 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        child_binop  =  parent_binop . left 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        grandchild_binop  =  child_binop . left 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( parent_binop . col_offset ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( parent_binop . lineno ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( parent_binop . end_col_offset ,  4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( parent_binop . end_lineno ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( child_binop . col_offset ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-09 14:20:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( child_binop . lineno ,  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-08 23:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( child_binop . end_col_offset ,  2 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-09 14:20:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( child_binop . end_lineno ,  2 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-08 23:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( grandchild_binop . col_offset ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-09 14:20:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( grandchild_binop . lineno ,  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-08 23:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( grandchild_binop . end_col_offset ,  3 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-09 14:20:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( grandchild_binop . end_lineno ,  1 ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-08 00:36:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_issue39579_dotted_name_end_col_offset ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree  =  ast . parse ( ' @a.b.c \n def f(): pass ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        attr_b  =  tree . body [ 0 ] . decorator_list [ 0 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( attr_b . end_col_offset ,  4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-16 11:12:53 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_ast_asdl_signature ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . withitem . __doc__ ,  " withitem(expr context_expr, expr? optional_vars) " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . GtE . __doc__ ,  " GtE " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . Name . __doc__ ,  " Name(identifier id, expr_context ctx) " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . cmpop . __doc__ ,  " cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expressions  =  [ f "      |  { node . __doc__ } "  for  node  in  ast . expr . __subclasses__ ( ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expressions [ 0 ]  =  f " expr =  { ast . expr . __subclasses__ ( ) [ 0 ] . __doc__ } " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertCountEqual ( ast . expr . __doc__ . split ( " \n " ) ,  expressions ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-27 22:01:11 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_issue40614_feature_version ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ast . parse ( ' f " { x=} " ' ,  feature_version = ( 3 ,  8 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( SyntaxError ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ast . parse ( ' f " { x=} " ' ,  feature_version = ( 3 ,  7 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-16 11:12:53 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  ASTHelpers_Test ( unittest . TestCase ) :  
						 
					
						
							
								
									
										
										
										
											2019-03-13 13:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    maxDiff  =  None 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_parse ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        a  =  ast . parse ( ' foo(1 + 1) ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b  =  compile ( ' foo(1 + 1) ' ,  ' <unknown> ' ,  ' exec ' ,  ast . PyCF_ONLY_AST ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( a ) ,  ast . dump ( b ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-09-02 14:23:15 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_parse_in_error ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            1 / 0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        except  Exception : 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-02 15:04:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            with  self . assertRaises ( SyntaxError )  as  e : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ast . literal_eval ( r " ' \ U ' " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self . assertIsNotNone ( e . exception . __context__ ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-02 14:23:15 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_dump ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' spam(eggs,  " and cheese " ) ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Module(body=[Expr(value=Call(func=Name(id= ' spam ' , ctx=Load()),  " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " args=[Name(id= ' eggs ' , ctx=Load()), Constant(value= ' and cheese ' )],  " 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " keywords=[]))], type_ignores=[]) " 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  annotate_fields = False ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Module([Expr(Call(Name( ' spam ' , Load()), [Name( ' eggs ' , Load()),  " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " Constant( ' and cheese ' )], []))], []) " 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  include_attributes = True ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Module(body=[Expr(value=Call(func=Name(id= ' spam ' , ctx=Load(),  " 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " lineno=1, col_offset=0, end_lineno=1, end_col_offset=4),  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " args=[Name(id= ' eggs ' , ctx=Load(), lineno=1, col_offset=5,  " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " end_lineno=1, end_col_offset=9), Constant(value= ' and cheese ' ,  " 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " lineno=1, col_offset=11, end_lineno=1, end_col_offset=23)], keywords=[],  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " lineno=1, col_offset=0, end_lineno=1, end_col_offset=24),  " 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " lineno=1, col_offset=0, end_lineno=1, end_col_offset=24)], type_ignores=[]) " 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-09-09 19:33:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_dump_indent ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' spam(eggs,  " and cheese " ) ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  indent = 3 ) ,  """ \
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Module (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   body = [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Expr ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         value = Call ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            func = Name ( id = ' spam ' ,  ctx = Load ( ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            args = [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               Name ( id = ' eggs ' ,  ctx = Load ( ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               Constant ( value = ' and cheese ' ) ] , 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-09 19:33:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            keywords = [ ] ) ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   type_ignores = [ ] ) """ ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  annotate_fields = False ,  indent = ' \t ' ) ,  """ \
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Module (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								\t [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								\t \tExpr ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								\t \t \tCall ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								\t \t \t \tName ( ' spam ' ,  Load ( ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								\t \t \t \t [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								\t \t \t \t \tName ( ' eggs ' ,  Load ( ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								\t \t \t \t \tConstant ( ' and cheese ' ) ] , 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-09 19:33:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								\t \t \t \t [ ] ) ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								\t [ ] ) """ ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  include_attributes = True ,  indent = 3 ) ,  """ \
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Module (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   body = [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Expr ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         value = Call ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            func = Name ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               id = ' spam ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               ctx = Load ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               col_offset = 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               end_lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               end_col_offset = 4 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            args = [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               Name ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  id = ' eggs ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  ctx = Load ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  col_offset = 5 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  end_lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  end_col_offset = 9 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               Constant ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  value = ' and cheese ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  col_offset = 11 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  end_lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  end_col_offset = 23 ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            keywords = [ ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            col_offset = 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            end_lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            end_col_offset = 24 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         col_offset = 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         end_lineno = 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         end_col_offset = 24 ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   type_ignores = [ ] ) """ ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-29 09:30:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_dump_incomplete ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . Raise ( lineno = 3 ,  col_offset = 4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Raise() " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  include_attributes = True ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Raise(lineno=3, col_offset=4) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . Raise ( exc = ast . Name ( id = ' e ' ,  ctx = ast . Load ( ) ) ,  lineno = 3 ,  col_offset = 4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Raise(exc=Name(id= ' e ' , ctx=Load())) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  annotate_fields = False ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Raise(Name( ' e ' , Load())) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  include_attributes = True ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Raise(exc=Name(id= ' e ' , ctx=Load()), lineno=3, col_offset=4) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  annotate_fields = False ,  include_attributes = True ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Raise(Name( ' e ' , Load()), lineno=3, col_offset=4) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . Raise ( cause = ast . Name ( id = ' e ' ,  ctx = ast . Load ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Raise(cause=Name(id= ' e ' , ctx=Load())) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( node ,  annotate_fields = False ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Raise(cause=Name( ' e ' , Load())) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_copy_location ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        src  =  ast . parse ( ' 1 + 1 ' ,  mode = ' eval ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        src . body . right  =  ast . copy_location ( ast . Num ( 2 ) ,  src . body . right ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( src ,  include_attributes = True ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' Expression(body=BinOp(left=Constant(value=1, lineno=1, col_offset=0,  ' 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' end_lineno=1, end_col_offset=1), op=Add(), right=Constant(value=2,  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' lineno=1, col_offset=4, end_lineno=1, end_col_offset=5), lineno=1,  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' col_offset=0, end_lineno=1, end_col_offset=5)) ' 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_fix_missing_locations ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        src  =  ast . parse ( ' write( " spam " ) ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        src . body . append ( ast . Expr ( ast . Call ( ast . Name ( ' spam ' ,  ast . Load ( ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 20:16:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                          [ ast . Str ( ' eggs ' ) ] ,  [ ] ) ) ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( src ,  ast . fix_missing_locations ( src ) ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . maxDiff  =  None 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( src ,  include_attributes = True ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Module(body=[Expr(value=Call(func=Name(id= ' write ' , ctx=Load(),  " 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " lineno=1, col_offset=0, end_lineno=1, end_col_offset=5),  " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " args=[Constant(value= ' spam ' , lineno=1, col_offset=6, end_lineno=1,  " 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " end_col_offset=12)], keywords=[], lineno=1, col_offset=0, end_lineno=1,  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " end_col_offset=13), lineno=1, col_offset=0, end_lineno=1,  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " end_col_offset=13), Expr(value=Call(func=Name(id= ' spam ' , ctx=Load(),  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " lineno=1, col_offset=0, end_lineno=1, end_col_offset=0),  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " args=[Constant(value= ' eggs ' , lineno=1, col_offset=0, end_lineno=1,  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " end_col_offset=0)], keywords=[], lineno=1, col_offset=0, end_lineno=1,  " 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " end_col_offset=0), lineno=1, col_offset=0, end_lineno=1, end_col_offset=0)],  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " type_ignores=[]) " 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_increment_lineno ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        src  =  ast . parse ( ' 1 + 1 ' ,  mode = ' eval ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . increment_lineno ( src ,  n = 3 ) ,  src ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( src ,  include_attributes = True ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' Expression(body=BinOp(left=Constant(value=1, lineno=4, col_offset=0,  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1,  ' 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' lineno=4, col_offset=4, end_lineno=4, end_col_offset=5), lineno=4,  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' col_offset=0, end_lineno=4, end_col_offset=5)) ' 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-09 07:38:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # issue10869: do not increment lineno of root twice 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-09 07:50:48 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        src  =  ast . parse ( ' 1 + 1 ' ,  mode = ' eval ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-09 07:38:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . increment_lineno ( src . body ,  n = 3 ) ,  src . body ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( src ,  include_attributes = True ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' Expression(body=BinOp(left=Constant(value=1, lineno=4, col_offset=0,  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1,  ' 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' lineno=4, col_offset=4, end_lineno=4, end_col_offset=5), lineno=4,  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' col_offset=0, end_lineno=4, end_col_offset=5)) ' 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-09 07:38:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_iter_fields ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' foo() ' ,  mode = ' eval ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        d  =  dict ( ast . iter_fields ( node . body ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( d . pop ( ' func ' ) . id ,  ' foo ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 20:16:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( d ,  { ' keywords ' :  [ ] ,  ' args ' :  [ ] } ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_iter_child_nodes ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( " spam(23, 42, eggs= ' leek ' ) " ,  mode = ' eval ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( len ( list ( ast . iter_child_nodes ( node . body ) ) ) ,  4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        iterator  =  ast . iter_child_nodes ( node . body ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( next ( iterator ) . id ,  ' spam ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( next ( iterator ) . value ,  23 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( next ( iterator ) . value ,  42 ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . dump ( next ( iterator ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 00:07:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " keyword(arg= ' eggs ' , value=Constant(value= ' leek ' )) " 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_get_docstring ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2018-06-15 11:05:15 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' " " " line one \n   line two " " " ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . get_docstring ( node ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         ' line one \n line two ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' class foo: \n    " " " line one \n   line two " " " ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . get_docstring ( node . body [ 0 ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         ' line one \n line two ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' def foo(): \n    " " " line one \n   line two " " " ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . get_docstring ( node . body [ 0 ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         ' line one \n line two ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-23 08:54:35 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' async def foo(): \n    " " " spam \n   ham " " " ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . get_docstring ( node . body [ 0 ] ) ,  ' spam \n ham ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-06-15 11:05:15 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_get_docstring_none ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 22:44:19 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( ast . parse ( ' ' ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-06-15 11:05:15 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' x =  " not docstring " ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( node ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' def foo(): \n   pass ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( node ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' class foo: \n   pass ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( node . body [ 0 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' class foo: \n   x =  " not docstring " ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( node . body [ 0 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' class foo: \n   def bar(self): pass ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( node . body [ 0 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' def foo(): \n   pass ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( node . body [ 0 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' def foo(): \n   x =  " not docstring " ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( node . body [ 0 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' async def foo(): \n   pass ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( node . body [ 0 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' async def foo(): \n   x =  " not docstring " ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_docstring ( node . body [ 0 ] ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-23 08:54:35 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-12 20:05:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_multi_line_docstring_col_offset_and_lineno_issue16806 ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' " " " line one \n line two " " " \n \n ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' def foo(): \n    " " " line one \n   line two " " " \n \n ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            '   def bar(): \n      " " " line one \n     line two " " " \n ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            '    " " " line one \n   line two " " " \n ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' " " " line one \n line two " " " \n \n ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 0 ] . col_offset ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 0 ] . lineno ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 1 ] . body [ 0 ] . col_offset ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 1 ] . body [ 0 ] . lineno ,  5 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 1 ] . body [ 1 ] . body [ 0 ] . col_offset ,  4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 1 ] . body [ 1 ] . body [ 0 ] . lineno ,  9 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 1 ] . body [ 2 ] . col_offset ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 1 ] . body [ 2 ] . lineno ,  11 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 2 ] . col_offset ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( node . body [ 2 ] . lineno ,  13 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-12 22:40:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_elif_stmt_start_position ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' if a: \n     pass \n elif b: \n     pass \n ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        elif_stmt  =  node . body [ 0 ] . orelse [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( elif_stmt . lineno ,  3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( elif_stmt . col_offset ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-14 11:24:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_elif_stmt_start_position_with_else ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' if a: \n     pass \n elif b: \n     pass \n else: \n     pass \n ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        elif_stmt  =  node . body [ 0 ] . orelse [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( elif_stmt . lineno ,  3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( elif_stmt . col_offset ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-18 01:20:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_starred_expr_end_position_within_call ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  ast . parse ( ' f(*[0, 1]) ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        starred_expr  =  node . body [ 0 ] . value . args [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( starred_expr . end_lineno ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( starred_expr . end_col_offset ,  9 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_literal_eval ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' [1, 2, 3] ' ) ,  [ 1 ,  2 ,  3 ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' { " foo " : 42} ' ) ,  { " foo " :  42 } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' (True, False, None) ' ) ,  ( True ,  False ,  None ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-11 12:59:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' { 1, 2, 3} ' ) ,  { 1 ,  2 ,  3 } ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-11 23:06:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' b " hi " ' ) ,  b " hi " ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-02 22:21:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' set() ' ) ,  set ( ) ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  ' foo() ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-04 11:15:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' 6 ' ) ,  6 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' +6 ' ) ,  6 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-08 00:47:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' -6 ' ) ,  - 6 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' 3.25 ' ) ,  3.25 ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-04 11:15:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' +3.25 ' ) ,  3.25 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' -3.25 ' ) ,  - 3.25 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( repr ( ast . literal_eval ( ' -0.0 ' ) ) ,  ' -0.0 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  ' ++6 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  ' +True ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  ' 2+3 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_literal_eval_complex ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Issue #4907 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' 6j ' ) ,  6 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' -6j ' ) ,  - 6 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' 6.75j ' ) ,  6.75 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' -6.75j ' ) ,  - 6.75 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' 3+6j ' ) ,  3 + 6 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' -3+6j ' ) ,  - 3 + 6 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' 3-6j ' ) ,  3 - 6 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' -3-6j ' ) ,  - 3 - 6 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' 3.25+6.75j ' ) ,  3.25 + 6.75 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' -3.25+6.75j ' ) ,  - 3.25 + 6.75 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' 3.25-6.75j ' ) ,  3.25 - 6.75 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' -3.25-6.75j ' ) ,  - 3.25 - 6.75 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( ' (3+6j) ' ) ,  3 + 6 j ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  ' -6j+3 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  ' -6j+3j ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  ' 3+-6j ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  ' 3+(0+6j) ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  ' -(3+6j) ' ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 68450,68480-68481,68493,68495,68501,68512,68514-68515,68534-68536,68552,68563,68570-68572,68575,68582,68596,68623-68624,68628 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r68450 | jeffrey.yasskin | 2009-01-09 10:47:07 -0600 (Fri, 09 Jan 2009) | 3 lines
  Fix issue 4884, preventing a crash in the socket code when python is compiled
  with llvm-gcc and run with a glibc <2.10.
........
  r68480 | vinay.sajip | 2009-01-10 07:38:04 -0600 (Sat, 10 Jan 2009) | 1 line
  Minor documentation changes cross-referencing NullHandler to the documentation on configuring logging in a library.
........
  r68481 | vinay.sajip | 2009-01-10 07:42:04 -0600 (Sat, 10 Jan 2009) | 1 line
  Corrected an incorrect self-reference.
........
  r68493 | benjamin.peterson | 2009-01-10 11:18:55 -0600 (Sat, 10 Jan 2009) | 1 line
  rewrite verbose conditionals
........
  r68495 | benjamin.peterson | 2009-01-10 11:36:44 -0600 (Sat, 10 Jan 2009) | 1 line
  tp_iter only exists with Py_TPFLAGS_HAVE_ITER #4901
........
  r68501 | vinay.sajip | 2009-01-10 13:22:57 -0600 (Sat, 10 Jan 2009) | 1 line
  Corrected minor typo and added .currentmodule directives to fix missing cross-references.
........
  r68512 | benjamin.peterson | 2009-01-10 16:42:10 -0600 (Sat, 10 Jan 2009) | 1 line
  make tests fail if they can't be imported
........
  r68514 | benjamin.peterson | 2009-01-10 17:41:59 -0600 (Sat, 10 Jan 2009) | 1 line
  move seealso to a more appropiate place
........
  r68515 | benjamin.peterson | 2009-01-10 17:49:08 -0600 (Sat, 10 Jan 2009) | 1 line
  macos 9 isn't supported
........
  r68534 | gregory.p.smith | 2009-01-11 11:53:33 -0600 (Sun, 11 Jan 2009) | 2 lines
  correct email address
........
  r68535 | gregory.p.smith | 2009-01-11 11:57:54 -0600 (Sun, 11 Jan 2009) | 9 lines
  Update the documentation for binascii and zlib crc32/adler32 functions
  to better describe the signed vs unsigned return value behavior on
  different platforms and versions of python.  Mention the workaround to
  make them all return the same thing by using & 0xffffffff.
  Fixes issue4903.
  Also needs to be merged into release26-maint, release30-maint, & py3k.
........
  r68536 | benjamin.peterson | 2009-01-11 13:48:15 -0600 (Sun, 11 Jan 2009) | 1 line
  add email addresses
........
  r68552 | vinay.sajip | 2009-01-12 14:36:18 -0600 (Mon, 12 Jan 2009) | 1 line
  Minor changes/corrections in markup.
........
  r68563 | benjamin.peterson | 2009-01-12 19:49:10 -0600 (Mon, 12 Jan 2009) | 1 line
  small logic correction
........
  r68570 | raymond.hettinger | 2009-01-13 03:08:32 -0600 (Tue, 13 Jan 2009) | 5 lines
  Issue 4922: Incorrect comments for MutableSet.add() and MutableSet.discard().
  Needs to be backported to 2.6 and forward ported to 3.0 and 3.1.
........
  r68571 | armin.ronacher | 2009-01-13 05:52:23 -0600 (Tue, 13 Jan 2009) | 3 lines
  ast.literal_eval can properly evaluate complex numbers now.  This fixes issue4907.
........
  r68572 | andrew.kuchling | 2009-01-13 07:40:54 -0600 (Tue, 13 Jan 2009) | 1 line
  Note that first coord. is left alone
........
  r68575 | thomas.heller | 2009-01-13 11:32:28 -0600 (Tue, 13 Jan 2009) | 1 line
  Fix refcount leak in error cases.  Bug found by coverity.
........
  r68582 | georg.brandl | 2009-01-13 16:14:01 -0600 (Tue, 13 Jan 2009) | 2 lines
  Use assertRaises.
........
  r68596 | amaury.forgeotdarc | 2009-01-13 17:39:22 -0600 (Tue, 13 Jan 2009) | 3 lines
  #1162154: inspect.getmembers() now skips attributes that raise AttributeError,
  e.g. a __slots__ attribute which has not been set.
........
  r68623 | vinay.sajip | 2009-01-15 16:48:13 -0600 (Thu, 15 Jan 2009) | 1 line
  Made minor changes/corrections in markup. Added a couple of section headings.
........
  r68624 | vinay.sajip | 2009-01-15 17:04:47 -0600 (Thu, 15 Jan 2009) | 1 line
  Minor changes/corrections in markup.
........
  r68628 | benjamin.peterson | 2009-01-15 20:55:24 -0600 (Thu, 15 Jan 2009) | 1 line
  compare with == not is #4946
........
											 
										 
										
											2009-01-16 03:54:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-05 12:40:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_literal_eval_malformed_dict_nodes ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        malformed  =  ast . Dict ( keys = [ ast . Constant ( 1 ) ,  ast . Constant ( 2 ) ] ,  values = [ ast . Constant ( 3 ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  malformed ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        malformed  =  ast . Dict ( keys = [ ast . Constant ( 1 ) ] ,  values = [ ast . Constant ( 2 ) ,  ast . Constant ( 3 ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertRaises ( ValueError ,  ast . literal_eval ,  malformed ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-11-22 21:51:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_bad_integer ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # issue13436: Bad error message with invalid numeric values 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        body  =  [ ast . ImportFrom ( module = ' time ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               names = [ ast . alias ( name = ' sleep ' ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               level = None , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               lineno = None ,  col_offset = None ) ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mod  =  ast . Module ( body ,  [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-11-22 21:51:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        with  self . assertRaises ( ValueError )  as  cm : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            compile ( mod ,  ' test ' ,  ' exec ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIn ( " invalid integer value: None " ,  str ( cm . exception ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-29 19:50:02 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_level_as_none ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        body  =  [ ast . ImportFrom ( module = ' time ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               names = [ ast . alias ( name = ' sleep ' ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               level = None , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               lineno = 0 ,  col_offset = 0 ) ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mod  =  ast . Module ( body ,  [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-29 19:50:02 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        code  =  compile ( mod ,  ' test ' ,  ' exec ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ns  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        exec ( code ,  ns ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIn ( ' sleep ' ,  ns ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											 
										 
										
											2008-06-10 16:37:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  ASTValidatorTests ( unittest . TestCase ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  mod ( self ,  mod ,  msg = None ,  mode = " exec " ,  * ,  exc = ValueError ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mod . lineno  =  mod . col_offset  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ast . fix_missing_locations ( mod ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  msg  is  None : 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            compile ( mod ,  " <test> " ,  mode ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            with  self . assertRaises ( exc )  as  cm : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                compile ( mod ,  " <test> " ,  mode ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self . assertIn ( msg ,  str ( cm . exception ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  expr ( self ,  node ,  msg = None ,  * ,  exc = ValueError ) : 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mod  =  ast . Module ( [ ast . Expr ( node ) ] ,  [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . mod ( mod ,  msg ,  exc = exc ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  stmt ( self ,  stmt ,  msg = None ) : 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mod  =  ast . Module ( [ stmt ] ,  [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . mod ( mod ,  msg ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_module ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        m  =  ast . Interactive ( [ ast . Expr ( ast . Name ( " x " ,  ast . Store ( ) ) ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . mod ( m ,  " must have Load context " ,  " single " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        m  =  ast . Expression ( ast . Name ( " x " ,  ast . Store ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . mod ( m ,  " must have Load context " ,  " eval " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _check_arguments ( self ,  fac ,  check ) : 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-29 13:36:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        def  arguments ( args = None ,  posonlyargs = None ,  vararg = None , 
							 
						 
					
						
							
								
									
										
										
										
											2013-03-18 10:48:58 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                      kwonlyargs = None ,  kwarg = None , 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                      defaults = None ,  kw_defaults = None ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  args  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                args  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-29 13:36:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  posonlyargs  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                posonlyargs  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  kwonlyargs  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                kwonlyargs  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  defaults  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                defaults  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  kw_defaults  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                kw_defaults  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-29 13:36:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            args  =  ast . arguments ( args ,  posonlyargs ,  vararg ,  kwonlyargs , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                 kw_defaults ,  kwarg ,  defaults ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  fac ( args ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        args  =  [ ast . arg ( " x " ,  ast . Name ( " x " ,  ast . Store ( ) ) ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        check ( arguments ( args = args ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-29 13:36:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        check ( arguments ( posonlyargs = args ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        check ( arguments ( kwonlyargs = args ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        check ( arguments ( defaults = [ ast . Num ( 3 ) ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                       " more positional defaults than args " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        check ( arguments ( kw_defaults = [ ast . Num ( 4 ) ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                       " length of kwonlyargs is not the same as kw_defaults " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        args  =  [ ast . arg ( " x " ,  ast . Name ( " x " ,  ast . Load ( ) ) ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        check ( arguments ( args = args ,  defaults = [ ast . Name ( " x " ,  ast . Store ( ) ) ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                       " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        args  =  [ ast . arg ( " a " ,  ast . Name ( " x " ,  ast . Load ( ) ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ast . arg ( " b " ,  ast . Name ( " y " ,  ast . Load ( ) ) ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        check ( arguments ( kwonlyargs = args , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          kw_defaults = [ None ,  ast . Name ( " x " ,  ast . Store ( ) ) ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_funcdef ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-29 13:36:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        a  =  ast . arguments ( [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-29 12:04:55 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        f  =  ast . FunctionDef ( " x " ,  a ,  [ ] ,  [ ] ,  None ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . stmt ( f ,  " empty body on FunctionDef " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        f  =  ast . FunctionDef ( " x " ,  a ,  [ ast . Pass ( ) ] ,  [ ast . Name ( " x " ,  ast . Store ( ) ) ] , 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-29 12:04:55 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            None ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . stmt ( f ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        f  =  ast . FunctionDef ( " x " ,  a ,  [ ast . Pass ( ) ] ,  [ ] , 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-29 12:04:55 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            ast . Name ( " x " ,  ast . Store ( ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . stmt ( f ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        def  fac ( args ) : 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-29 12:04:55 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  ast . FunctionDef ( " x " ,  args ,  [ ast . Pass ( ) ] ,  [ ] ,  None ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . _check_arguments ( fac ,  self . stmt ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_classdef ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 20:16:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        def  cls ( bases = None ,  keywords = None ,  body = None ,  decorator_list = None ) : 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  bases  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                bases  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  keywords  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                keywords  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  body  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                body  =  [ ast . Pass ( ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  decorator_list  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                decorator_list  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 20:16:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  ast . ClassDef ( " myclass " ,  bases ,  keywords , 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-29 12:04:55 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                body ,  decorator_list ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . stmt ( cls ( bases = [ ast . Name ( " x " ,  ast . Store ( ) ) ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( cls ( keywords = [ ast . keyword ( " x " ,  ast . Name ( " x " ,  ast . Store ( ) ) ) ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( cls ( body = [ ] ) ,  " empty body on ClassDef " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( cls ( body = [ None ] ) ,  " None disallowed " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( cls ( decorator_list = [ ast . Name ( " x " ,  ast . Store ( ) ) ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_delete ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Delete ( [ ] ) ,  " empty targets on Delete " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Delete ( [ None ] ) ,  " None disallowed " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Delete ( [ ast . Name ( " x " ,  ast . Load ( ) ) ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Del context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_assign ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Assign ( [ ] ,  ast . Num ( 3 ) ) ,  " empty targets on Assign " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Assign ( [ None ] ,  ast . Num ( 3 ) ) ,  " None disallowed " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Assign ( [ ast . Name ( " x " ,  ast . Load ( ) ) ] ,  ast . Num ( 3 ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Store context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Assign ( [ ast . Name ( " x " ,  ast . Store ( ) ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                ast . Name ( " y " ,  ast . Store ( ) ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_augassign ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        aug  =  ast . AugAssign ( ast . Name ( " x " ,  ast . Load ( ) ) ,  ast . Add ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            ast . Name ( " y " ,  ast . Load ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( aug ,  " must have Store context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        aug  =  ast . AugAssign ( ast . Name ( " x " ,  ast . Store ( ) ) ,  ast . Add ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            ast . Name ( " y " ,  ast . Store ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( aug ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_for ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . Name ( " x " ,  ast . Store ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        y  =  ast . Name ( " y " ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        p  =  ast . Pass ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . For ( x ,  y ,  [ ] ,  [ ] ) ,  " empty body on For " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . For ( ast . Name ( " x " ,  ast . Load ( ) ) ,  y ,  [ p ] ,  [ ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Store context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . For ( x ,  ast . Name ( " y " ,  ast . Store ( ) ) ,  [ p ] ,  [ ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        e  =  ast . Expr ( ast . Name ( " x " ,  ast . Store ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . For ( x ,  y ,  [ e ] ,  [ ] ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . For ( x ,  y ,  [ p ] ,  [ e ] ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_while ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . While ( ast . Num ( 3 ) ,  [ ] ,  [ ] ) ,  " empty body on While " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . While ( ast . Name ( " x " ,  ast . Store ( ) ) ,  [ ast . Pass ( ) ] ,  [ ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . While ( ast . Num ( 3 ) ,  [ ast . Pass ( ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             [ ast . Expr ( ast . Name ( " x " ,  ast . Store ( ) ) ) ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_if ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . If ( ast . Num ( 3 ) ,  [ ] ,  [ ] ) ,  " empty body on If " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  ast . If ( ast . Name ( " x " ,  ast . Store ( ) ) ,  [ ast . Pass ( ) ] ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( i ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  ast . If ( ast . Num ( 3 ) ,  [ ast . Expr ( ast . Name ( " x " ,  ast . Store ( ) ) ) ] ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( i ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  ast . If ( ast . Num ( 3 ) ,  [ ast . Pass ( ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   [ ast . Expr ( ast . Name ( " x " ,  ast . Store ( ) ) ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( i ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_with ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        p  =  ast . Pass ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . With ( [ ] ,  [ p ] ) ,  " empty items on With " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  ast . withitem ( ast . Num ( 3 ) ,  None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . With ( [ i ] ,  [ ] ) ,  " empty body on With " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  ast . withitem ( ast . Name ( " x " ,  ast . Store ( ) ) ,  None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . With ( [ i ] ,  [ p ] ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  ast . withitem ( ast . Num ( 3 ) ,  ast . Name ( " x " ,  ast . Load ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . With ( [ i ] ,  [ p ] ) ,  " must have Store context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_raise ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        r  =  ast . Raise ( None ,  ast . Num ( 3 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( r ,  " Raise with cause but no exception " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        r  =  ast . Raise ( ast . Name ( " x " ,  ast . Store ( ) ) ,  None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( r ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        r  =  ast . Raise ( ast . Num ( 4 ) ,  ast . Name ( " x " ,  ast . Store ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( r ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_try ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        p  =  ast . Pass ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  =  ast . Try ( [ ] ,  [ ] ,  [ ] ,  [ p ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( t ,  " empty body on Try " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  =  ast . Try ( [ ast . Expr ( ast . Name ( " x " ,  ast . Store ( ) ) ) ] ,  [ ] ,  [ ] ,  [ p ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( t ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  =  ast . Try ( [ p ] ,  [ ] ,  [ ] ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( t ,  " Try has neither except handlers nor finalbody " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  =  ast . Try ( [ p ] ,  [ ] ,  [ p ] ,  [ p ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( t ,  " Try has orelse but no except handlers " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  =  ast . Try ( [ p ] ,  [ ast . ExceptHandler ( None ,  " x " ,  [ ] ) ] ,  [ ] ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( t ,  " empty body on ExceptHandler " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        e  =  [ ast . ExceptHandler ( ast . Name ( " x " ,  ast . Store ( ) ) ,  " y " ,  [ p ] ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Try ( [ p ] ,  e ,  [ ] ,  [ ] ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        e  =  [ ast . ExceptHandler ( None ,  " x " ,  [ p ] ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  =  ast . Try ( [ p ] ,  e ,  [ ast . Expr ( ast . Name ( " x " ,  ast . Store ( ) ) ) ] ,  [ p ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( t ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  =  ast . Try ( [ p ] ,  e ,  [ p ] ,  [ ast . Expr ( ast . Name ( " x " ,  ast . Store ( ) ) ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( t ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_assert ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Assert ( ast . Name ( " x " ,  ast . Store ( ) ) ,  None ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assrt  =  ast . Assert ( ast . Name ( " x " ,  ast . Load ( ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           ast . Name ( " y " ,  ast . Store ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( assrt ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_import ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Import ( [ ] ) ,  " empty names on Import " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_importfrom ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        imp  =  ast . ImportFrom ( None ,  [ ast . alias ( " x " ,  None ) ] ,  - 42 ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 23:40:43 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . stmt ( imp ,  " Negative ImportFrom level " ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . stmt ( ast . ImportFrom ( None ,  [ ] ,  0 ) ,  " empty names on ImportFrom " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_global ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Global ( [ ] ) ,  " empty names on Global " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_nonlocal ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( ast . Nonlocal ( [ ] ) ,  " empty names on Nonlocal " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_expr ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        e  =  ast . Expr ( ast . Name ( " x " ,  ast . Store ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( e ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_boolop ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b  =  ast . BoolOp ( ast . And ( ) ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( b ,  " less than 2 values " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b  =  ast . BoolOp ( ast . And ( ) ,  [ ast . Num ( 3 ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( b ,  " less than 2 values " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b  =  ast . BoolOp ( ast . And ( ) ,  [ ast . Num ( 4 ) ,  None ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( b ,  " None disallowed " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b  =  ast . BoolOp ( ast . And ( ) ,  [ ast . Num ( 4 ) ,  ast . Name ( " x " ,  ast . Store ( ) ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( b ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_unaryop ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        u  =  ast . UnaryOp ( ast . Not ( ) ,  ast . Name ( " x " ,  ast . Store ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( u ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_lambda ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-29 13:36:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        a  =  ast . arguments ( [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( ast . Lambda ( a ,  ast . Name ( " x " ,  ast . Store ( ) ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        def  fac ( args ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  ast . Lambda ( args ,  ast . Name ( " x " ,  ast . Load ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_arguments ( fac ,  self . expr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_ifexp ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        l  =  ast . Name ( " x " ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ast . Name ( " y " ,  ast . Store ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  args  in  ( s ,  l ,  l ) ,  ( l ,  s ,  l ) ,  ( l ,  l ,  s ) : 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:17:12 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self . expr ( ast . IfExp ( * args ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_dict ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        d  =  ast . Dict ( [ ] ,  [ ast . Name ( " x " ,  ast . Load ( ) ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( d ,  " same number of keys as values " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        d  =  ast . Dict ( [ ast . Name ( " x " ,  ast . Load ( ) ) ] ,  [ None ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( d ,  " None disallowed " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_set ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( ast . Set ( [ None ] ) ,  " None disallowed " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ast . Set ( [ ast . Name ( " x " ,  ast . Store ( ) ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( s ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _check_comprehension ( self ,  fac ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( fac ( [ ] ) ,  " comprehension with no generators " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        g  =  ast . comprehension ( ast . Name ( " x " ,  ast . Load ( ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 10:36:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                              ast . Name ( " x " ,  ast . Load ( ) ) ,  [ ] ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( fac ( [ g ] ) ,  " must have Store context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        g  =  ast . comprehension ( ast . Name ( " x " ,  ast . Store ( ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 10:36:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                              ast . Name ( " x " ,  ast . Store ( ) ) ,  [ ] ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( fac ( [ g ] ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . Name ( " x " ,  ast . Store ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        y  =  ast . Name ( " y " ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 10:36:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        g  =  ast . comprehension ( x ,  y ,  [ None ] ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( fac ( [ g ] ) ,  " None disallowed " ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 10:36:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        g  =  ast . comprehension ( x ,  y ,  [ ast . Name ( " x " ,  ast . Store ( ) ) ] ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( fac ( [ g ] ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _simple_comp ( self ,  fac ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        g  =  ast . comprehension ( ast . Name ( " x " ,  ast . Store ( ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 10:36:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                              ast . Name ( " x " ,  ast . Load ( ) ) ,  [ ] ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( fac ( ast . Name ( " x " ,  ast . Store ( ) ) ,  [ g ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        def  wrap ( gens ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  fac ( ast . Name ( " x " ,  ast . Store ( ) ) ,  gens ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_comprehension ( wrap ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_listcomp ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _simple_comp ( ast . ListComp ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_setcomp ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _simple_comp ( ast . SetComp ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_generatorexp ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _simple_comp ( ast . GeneratorExp ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_dictcomp ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        g  =  ast . comprehension ( ast . Name ( " y " ,  ast . Store ( ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 10:36:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                              ast . Name ( " p " ,  ast . Load ( ) ) ,  [ ] ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        c  =  ast . DictComp ( ast . Name ( " x " ,  ast . Store ( ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         ast . Name ( " y " ,  ast . Load ( ) ) ,  [ g ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( c ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c  =  ast . DictComp ( ast . Name ( " x " ,  ast . Load ( ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         ast . Name ( " y " ,  ast . Store ( ) ) ,  [ g ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( c ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        def  factory ( comps ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            k  =  ast . Name ( " x " ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            v  =  ast . Name ( " y " ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  ast . DictComp ( k ,  v ,  comps ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_comprehension ( factory ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_yield ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-14 08:58:23 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( ast . Yield ( ast . Name ( " x " ,  ast . Store ( ) ) ) ,  " must have Load " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( ast . YieldFrom ( ast . Name ( " x " ,  ast . Store ( ) ) ) ,  " must have Load " ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_compare ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        left  =  ast . Name ( " x " ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        comp  =  ast . Compare ( left ,  [ ast . In ( ) ] ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( comp ,  " no comparators " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        comp  =  ast . Compare ( left ,  [ ast . In ( ) ] ,  [ ast . Num ( 4 ) ,  ast . Num ( 5 ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( comp ,  " different number of comparators and operands " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        comp  =  ast . Compare ( ast . Num ( " blah " ) ,  [ ast . In ( ) ] ,  [ left ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( comp ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        comp  =  ast . Compare ( left ,  [ ast . In ( ) ] ,  [ ast . Num ( " blah " ) ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( comp ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_call ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        func  =  ast . Name ( " x " ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        args  =  [ ast . Name ( " y " ,  ast . Load ( ) ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        keywords  =  [ ast . keyword ( " w " ,  ast . Name ( " z " ,  ast . Load ( ) ) ) ] 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 20:16:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        call  =  ast . Call ( ast . Name ( " x " ,  ast . Store ( ) ) ,  args ,  keywords ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( call ,  " must have Load context " ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 20:16:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        call  =  ast . Call ( func ,  [ None ] ,  keywords ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( call ,  " None disallowed " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bad_keywords  =  [ ast . keyword ( " w " ,  ast . Name ( " z " ,  ast . Store ( ) ) ) ] 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 20:16:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        call  =  ast . Call ( func ,  args ,  bad_keywords ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( call ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_num ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  subint ( int ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  subfloat ( float ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  subcomplex ( complex ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pass 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  obj  in  " 0 " ,  " hello " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self . expr ( ast . Num ( obj ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  obj  in  subint ( ) ,  subfloat ( ) ,  subcomplex ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self . expr ( ast . Num ( obj ) ,  " invalid type " ,  exc = TypeError ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_attribute ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        attr  =  ast . Attribute ( ast . Name ( " x " ,  ast . Store ( ) ) ,  " y " ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( attr ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_subscript ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sub  =  ast . Subscript ( ast . Name ( " x " ,  ast . Store ( ) ) ,  ast . Num ( 3 ) , 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( sub ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ast . Name ( " x " ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sub  =  ast . Subscript ( x ,  ast . Name ( " y " ,  ast . Store ( ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( sub ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ast . Name ( " x " ,  ast . Store ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  args  in  ( s ,  None ,  None ) ,  ( None ,  s ,  None ) ,  ( None ,  None ,  s ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            sl  =  ast . Slice ( * args ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self . expr ( ast . Subscript ( x ,  sl ,  ast . Load ( ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      " must have Load context " ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sl  =  ast . Tuple ( [ ] ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( ast . Subscript ( x ,  sl ,  ast . Load ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sl  =  ast . Tuple ( [ s ] ,  ast . Load ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( ast . Subscript ( x ,  sl ,  ast . Load ( ) ) ,  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_starred ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        left  =  ast . List ( [ ast . Starred ( ast . Name ( " x " ,  ast . Load ( ) ) ,  ast . Store ( ) ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        ast . Store ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assign  =  ast . Assign ( [ left ] ,  ast . Num ( 4 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . stmt ( assign ,  " must have Store context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _sequence ( self ,  fac ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( fac ( [ None ] ,  ast . Load ( ) ) ,  " None disallowed " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expr ( fac ( [ ast . Name ( " x " ,  ast . Store ( ) ) ] ,  ast . Load ( ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " must have Load context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_list ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _sequence ( ast . List ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_tuple ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _sequence ( ast . Tuple ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-12-06 17:41:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_nameconstant ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-27 17:42:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . expr ( ast . NameConstant ( 4 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-12-06 17:41:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_stdlib_validates ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        stdlib  =  os . path . dirname ( ast . __file__ ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tests  =  [ fn  for  fn  in  os . listdir ( stdlib )  if  fn . endswith ( " .py " ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tests . extend ( [ " test/test_grammar.py " ,  " test/test_unpack_ex.py " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  module  in  tests : 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-18 07:47:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            with  self . subTest ( module ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                fn  =  os . path . join ( stdlib ,  module ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                with  open ( fn ,  " r " ,  encoding = " utf-8 " )  as  fp : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    source  =  fp . read ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                mod  =  ast . parse ( source ,  fn ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                compile ( mod ,  fn ,  " exec " ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-09 16:15:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  ConstantTests ( unittest . TestCase ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ Tests on the ast.Constant node type. """ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  compile_constant ( self ,  value ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree  =  ast . parse ( " x = 123 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        node  =  tree . body [ 0 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        new_node  =  ast . Constant ( value = value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ast . copy_location ( new_node ,  node ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree . body [ 0 ] . value  =  new_node 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        code  =  compile ( tree ,  " <string> " ,  " exec " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ns  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        exec ( code ,  ns ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ns [ ' x ' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-27 00:39:12 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_validation ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( TypeError )  as  cm : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self . compile_constant ( [ 1 ,  2 ,  3 ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( str ( cm . exception ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         " got an invalid type in Constant: list " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_singletons ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  const  in  ( None ,  False ,  True ,  Ellipsis ,  b ' ' ,  frozenset ( ) ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            with  self . subTest ( const = const ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                value  =  self . compile_constant ( const ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self . assertIs ( value ,  const ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_values ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        nested_tuple  =  ( 1 , ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        nested_frozenset  =  frozenset ( { 1 } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  level  in  range ( 3 ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            nested_tuple  =  ( nested_tuple ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            nested_frozenset  =  frozenset ( { nested_frozenset ,  2 } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        values  =  ( 123 ,  123.0 ,  123 j , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " unicode " ,  b ' bytes ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  tuple ( " tuple " ) ,  frozenset ( " frozenset " ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  nested_tuple ,  nested_frozenset ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  value  in  values : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            with  self . subTest ( value = value ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                result  =  self . compile_constant ( value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self . assertEqual ( result ,  value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_assign_to_constant ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree  =  ast . parse ( " x = 1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        target  =  tree . body [ 0 ] . targets [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        new_target  =  ast . Constant ( value = 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ast . copy_location ( new_target ,  target ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree . body [ 0 ] . targets [ 0 ]  =  new_target 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  self . assertRaises ( ValueError )  as  cm : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            compile ( tree ,  " string " ,  " exec " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( str ( cm . exception ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         " expression which can ' t be assigned  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         " to in Store context " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_get_docstring ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree  =  ast . parse ( " ' docstring ' \n x = 1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . get_docstring ( tree ) ,  ' docstring ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  get_load_const ( self ,  tree ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Compile to bytecode, disassemble and get parameter of LOAD_CONST 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # instructions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        co  =  compile ( tree ,  ' <string> ' ,  ' exec ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        consts  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  instr  in  dis . get_instructions ( co ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  instr . opname  ==  ' LOAD_CONST ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                consts . append ( instr . argval ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  consts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @support.cpython_only 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_load_const ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        consts  =  [ None , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  True ,  False , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  124 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  2.0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  3 j , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " unicode " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  b ' bytes ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  ( 1 ,  2 ,  3 ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-08 18:17:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        code  =  ' \n ' . join ( [ ' x= {!r} ' . format ( const )  for  const  in  consts ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        code  + =  ' \n x = ... ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        consts . extend ( ( Ellipsis ,  None ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree  =  ast . parse ( code ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-08 18:17:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( self . get_load_const ( tree ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         consts ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Replace expression nodes with constants 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-08 18:17:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  assign ,  const  in  zip ( tree . body ,  consts ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert  isinstance ( assign ,  ast . Assign ) ,  ast . dump ( assign ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            new_node  =  ast . Constant ( value = const ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-08 18:17:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ast . copy_location ( new_node ,  assign . value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assign . value  =  new_node 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-08 18:17:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( self . get_load_const ( tree ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         consts ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_literal_eval ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tree  =  ast . parse ( " 1 + 2 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        binop  =  tree . body [ 0 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        new_left  =  ast . Constant ( value = 10 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ast . copy_location ( new_left ,  binop . left ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        binop . left  =  new_left 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-04 11:15:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        new_right  =  ast . Constant ( value = 20 j ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ast . copy_location ( new_right ,  binop . right ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        binop . right  =  new_right 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-04 11:15:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . assertEqual ( ast . literal_eval ( binop ) ,  10 + 20 j ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-13 13:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_string_kind ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c  =  ast . parse ( ' " x " ' ,  mode = ' eval ' ) . body 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( c . value ,  " x " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( c . kind ,  None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c  =  ast . parse ( ' u " x " ' ,  mode = ' eval ' ) . body 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( c . value ,  " x " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( c . kind ,  " u " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c  =  ast . parse ( ' r " x " ' ,  mode = ' eval ' ) . body 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( c . value ,  " x " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( c . kind ,  None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c  =  ast . parse ( ' b " x " ' ,  mode = ' eval ' ) . body 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( c . value ,  b " x " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( c . kind ,  None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-26 00:40:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  EndPositionTests ( unittest . TestCase ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ Tests for end position of AST nodes. 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Testing  end  positions  of  nodes  requires  a  bit  of  extra  care 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    because  of  how  LL  parsers  work . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _check_end_pos ( self ,  ast_node ,  end_lineno ,  end_col_offset ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast_node . end_lineno ,  end_lineno ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast_node . end_col_offset ,  end_col_offset ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _check_content ( self ,  source ,  ast_node ,  content ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . get_source_segment ( source ,  ast_node ) ,  content ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _parse_value ( self ,  s ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Use duck-typing to support both single expression 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # and a right hand side of an assignment statement. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ast . parse ( s ) . body [ 0 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_lambda ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ' lambda x, *y: None ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        lam  =  self . _parse_value ( s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  lam . body ,  ' None ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  lam . args . args [ 0 ] ,  ' x ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  lam . args . vararg ,  ' y ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_func_def ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            def  func ( x :  int , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     * args :  str , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     z :  float  =  0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     * * kwargs :  Any )  - >  bool : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        fdef  =  ast . parse ( s ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( fdef ,  5 ,  15 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  fdef . body [ 0 ] ,  ' return True ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  fdef . args . args [ 0 ] ,  ' x: int ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  fdef . args . args [ 0 ] . annotation ,  ' int ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  fdef . args . kwarg ,  ' kwargs: Any ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  fdef . args . kwarg . annotation ,  ' Any ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_call ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ' func(x, y=2, **kw) ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        call  =  self . _parse_value ( s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  call . func ,  ' func ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  call . keywords [ 0 ] . value ,  ' 2 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  call . keywords [ 1 ] . value ,  ' kw ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_call_noargs ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ' x[0]() ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        call  =  self . _parse_value ( s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  call . func ,  ' x[0] ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( call ,  1 ,  6 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_class_def ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  C ( A ,  B ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                x :  int  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cdef  =  ast . parse ( s ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( cdef ,  2 ,  14 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  cdef . bases [ 1 ] ,  ' B ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  cdef . body [ 0 ] ,  ' x: int = 0 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_class_kw ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ' class S(metaclass=abc.ABCMeta): pass ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cdef  =  ast . parse ( s ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  cdef . keywords [ 0 ] . value ,  ' abc.ABCMeta ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_multi_line_str ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x  =  """ Some multi-line text. 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            It  goes  on  starting  from  same  indent . """ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assign  =  ast . parse ( s ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( assign ,  3 ,  40 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( assign . value ,  3 ,  40 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_continued_str ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x  =  " first part "  \\
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " second part " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assign  =  ast . parse ( s ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( assign ,  2 ,  13 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( assign . value ,  2 ,  13 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_suites ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # We intentionally put these into the same string to check 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # that empty lines are not part of the suite. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  True : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  one ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                x  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            elif  other ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                y  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                z  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  x ,  y  in  stuff : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            try : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                raise  RuntimeError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            except  TypeError  as  e : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mod  =  ast . parse ( s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while_loop  =  mod . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if_stmt  =  mod . body [ 1 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for_loop  =  mod . body [ 2 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try_stmt  =  mod . body [ 3 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pass_stmt  =  mod . body [ 4 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( while_loop ,  2 ,  8 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( if_stmt ,  9 ,  12 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( for_loop ,  12 ,  15 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( try_stmt ,  17 ,  8 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( pass_stmt ,  19 ,  4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  while_loop . test ,  ' True ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  if_stmt . body [ 0 ] ,  ' x = None ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  if_stmt . orelse [ 0 ] . test ,  ' other() ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  for_loop . target ,  ' x, y ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  try_stmt . body [ 0 ] ,  ' raise RuntimeError ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  try_stmt . handlers [ 0 ] . type ,  ' TypeError ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_fstring ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ' x = f " abc  { x + y} abc " ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        fstr  =  self . _parse_value ( s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        binop  =  fstr . values [ 1 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  binop ,  ' x + y ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_fstring_multi_line ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            f """ Some multi-line text. 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            arg_one 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            + 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            arg_two 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            It  goes  on . . . """ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        fstr  =  self . _parse_value ( s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        binop  =  fstr . values [ 1 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( binop ,  5 ,  7 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  binop . left ,  ' arg_one ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  binop . right ,  ' arg_two ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_import_from_multi_line ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            from  x . y . z  import  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                a ,  b ,  c  as  c 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        imp  =  ast . parse ( s ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( imp ,  3 ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_slices ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s1  =  ' f()[1, 2] [0] ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s2  =  ' x[ a.b: c.d] ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sm  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x [  a . b :  f  ( )  , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               g  ( )  :  c . d 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i1 ,  i2 ,  im  =  map ( self . _parse_value ,  ( s1 ,  s2 ,  sm ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s1 ,  i1 . value ,  ' f()[1, 2] ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . _check_content ( s1 ,  i1 . value . slice ,  ' 1, 2 ' ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . _check_content ( s2 ,  i2 . slice . lower ,  ' a.b ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s2 ,  i2 . slice . upper ,  ' c.d ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . _check_content ( sm ,  im . slice . elts [ 0 ] . upper ,  ' f () ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( sm ,  im . slice . elts [ 1 ] . lower ,  ' g () ' ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . _check_end_pos ( im ,  3 ,  3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_binop ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 1  *  2  +  ( 3  )  + 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 4 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        binop  =  self . _parse_value ( s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( binop ,  2 ,  6 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  binop . right ,  ' 4 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  binop . left ,  ' 1 * 2 + (3 ) ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  binop . left . right ,  ' 3 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_boolop ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( one_condition  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ( other_condition  or  yet_another_one ) ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bop  =  ast . parse ( s ) . body [ 0 ] . test 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( bop ,  2 ,  44 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  bop . values [ 1 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            ' other_condition or yet_another_one ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_tuples ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s1  =  ' x = () ; ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s2  =  ' x = 1 , ; ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s3  =  ' x = (1 , 2 ) ; ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sm  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x  =  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                a ,  b , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t1 ,  t2 ,  t3 ,  tm  =  map ( self . _parse_value ,  ( s1 ,  s2 ,  s3 ,  sm ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s1 ,  t1 ,  ' () ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s2 ,  t2 ,  ' 1 , ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s3 ,  t3 ,  ' (1 , 2 ) ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( tm ,  3 ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_attribute_spaces ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ' func(x. y .z) ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        call  =  self . _parse_value ( s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  call ,  s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  call . args [ 0 ] ,  ' x. y .z ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-12 22:37:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_redundant_parenthesis ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ' ( ( ( a + b ) ) ) ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v  =  ast . parse ( s ) . body [ 0 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( v ) . __name__ ,  ' BinOp ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  v ,  ' a + b ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s2  =  ' await  '  +  s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v  =  ast . parse ( s2 ) . body [ 0 ] . value . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( type ( v ) . __name__ ,  ' BinOp ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s2 ,  v ,  ' a + b ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_trailers_with_redundant_parenthesis ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tests  =  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ' ( ( ( a ) ) ) ( ) ' ,  ' Call ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ' ( ( ( a ) ) ) ( b ) ' ,  ' Call ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ' ( ( ( a ) ) ) [ b ] ' ,  ' Subscript ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ' ( ( ( a ) ) ) . b ' ,  ' Attribute ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  s ,  t  in  tests : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            with  self . subTest ( s ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                v  =  ast . parse ( s ) . body [ 0 ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self . assertEqual ( type ( v ) . __name__ ,  t ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self . _check_content ( s ,  v ,  s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                s2  =  ' await  '  +  s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                v  =  ast . parse ( s2 ) . body [ 0 ] . value . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self . assertEqual ( type ( v ) . __name__ ,  t ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                self . _check_content ( s2 ,  v ,  s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_displays ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s1  =  ' [ {} ,  { 1, },  { 1, 2,} ] ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s2  =  ' { a: b, f (): g () ,} ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c1  =  self . _parse_value ( s1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c2  =  self . _parse_value ( s2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s1 ,  c1 . elts [ 0 ] ,  ' {} ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s1 ,  c1 . elts [ 1 ] ,  ' { 1, } ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s1 ,  c1 . elts [ 2 ] ,  ' { 1, 2,} ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s2 ,  c2 . keys [ 1 ] ,  ' f () ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s2 ,  c2 . values [ 1 ] ,  ' g () ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_comprehensions ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x  =  [ { x  for  x ,  y  in  stuff 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  if  cond . x }  for  stuff  in  things ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cmp  =  self . _parse_value ( s ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_end_pos ( cmp ,  2 ,  37 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  cmp . generators [ 0 ] . iter ,  ' things ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  cmp . elt . generators [ 0 ] . iter ,  ' stuff ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  cmp . elt . generators [ 0 ] . ifs [ 0 ] ,  ' cond.x ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  cmp . elt . generators [ 0 ] . target ,  ' x, y ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_yield_await ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            async  def  f ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                yield  x 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                await  y 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        fdef  =  ast . parse ( s ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  fdef . body [ 0 ] . value ,  ' yield x ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  fdef . body [ 1 ] . value ,  ' await y ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_source_segment_multi ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s_orig  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x  =  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                a ,  b , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            )  +  ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s_tuple  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                a ,  b , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        binop  =  self . _parse_value ( s_orig ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . get_source_segment ( s_orig ,  binop . left ) ,  s_tuple ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_source_segment_padded ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s_orig  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  C : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                def  fun ( self )  - >  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " Đ–Đ–Đ–Đ–Đ– " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s_method  =  '     def fun(self) -> None: \n '  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   '          " Đ–Đ–Đ–Đ–Đ– " ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cdef  =  ast . parse ( s_orig ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . get_source_segment ( s_orig ,  cdef . body [ 0 ] ,  padded = True ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         s_method ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_source_segment_endings ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ' v = 1 \r \n w = 1 \n x = 1 \n \r y = 1 \r z = 1 \r \n ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v ,  w ,  x ,  y ,  z  =  ast . parse ( s ) . body 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  v ,  ' v = 1 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  w ,  ' w = 1 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  x ,  ' x = 1 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  y ,  ' y = 1 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _check_content ( s ,  z ,  ' z = 1 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_source_segment_tabs ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  dedent ( ''' 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  C : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              \t \f   def  fun ( self )  - >  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              \t \f       pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ''' ).strip() 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s_method  =  '    \t \f   def fun(self) -> None: \n '  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   '    \t \f       pass ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cdef  =  ast . parse ( s ) . body [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( ast . get_source_segment ( s ,  cdef . body [ 0 ] ,  padded = True ) ,  s_method ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-18 19:14:12 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  test_source_segment_missing_info ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ' v = 1 \r \n w = 1 \n x = 1 \n \r y = 1 \r \n ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v ,  w ,  x ,  y  =  ast . parse ( s ) . body 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        del  v . lineno 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        del  w . end_lineno 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        del  x . col_offset 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        del  y . end_col_offset 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_source_segment ( s ,  v ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_source_segment ( s ,  w ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_source_segment ( s ,  x ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertIsNone ( ast . get_source_segment ( s ,  y ) ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												bpo-33416: Add end positions to Python AST (GH-11605)
The majority of this PR is tediously passing `end_lineno` and `end_col_offset` everywhere. Here are non-trivial points:
* It is not possible to reconstruct end positions in AST "on the fly", some information is lost after an AST node is constructed, so we need two more attributes for every AST node `end_lineno` and `end_col_offset`.
* I add end position information to both CST and AST.  Although it may be technically possible to avoid adding end positions to CST, the code becomes more cumbersome and less efficient.
* Since the end position is not known for non-leaf CST nodes while the next token is added, this requires a bit of extra care (see `_PyNode_FinalizeEndPos`). Unless I made some mistake, the algorithm should be linear.
* For statements, I "trim" the end position of suites to not include the terminal newlines and dedent (this seems to be what people would expect), for example in
  ```python
  class C:
      pass
  pass
  ```
  the end line and end column for the class definition is (2, 8).
* For `end_col_offset` I use the common Python convention for indexing, for example for `pass` the `end_col_offset` is 4 (not 3), so that `[0:4]` gives one the source code that corresponds to the node.
* I added a helper function `ast.get_source_segment()`, to get source text segment corresponding to a given AST node. It is also useful for testing.
An (inevitable) downside of this PR is that AST now takes almost 25% more memory. I think however it is probably justified by the benefits.
											 
										 
										
											2019-01-22 11:18:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-26 10:13:19 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  NodeVisitorTests ( unittest . TestCase ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  test_old_constant_nodes ( self ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  Visitor ( ast . NodeVisitor ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            def  visit_Num ( self ,  node ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                log . append ( ( node . lineno ,  ' Num ' ,  node . n ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            def  visit_Str ( self ,  node ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                log . append ( ( node . lineno ,  ' Str ' ,  node . s ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            def  visit_Bytes ( self ,  node ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                log . append ( ( node . lineno ,  ' Bytes ' ,  node . s ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            def  visit_NameConstant ( self ,  node ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                log . append ( ( node . lineno ,  ' NameConstant ' ,  node . value ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            def  visit_Ellipsis ( self ,  node ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                log . append ( ( node . lineno ,  ' Ellipsis ' ,  . . . ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mod  =  ast . parse ( dedent ( ''' \
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            i  =  42 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            f  =  4.25 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            c  =  4.25 j 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            s  =  ' string ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            b  =  b ' bytes ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            t  =  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            n  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            e  =  . . . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ''' )) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        visitor  =  Visitor ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        log  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  warnings . catch_warnings ( record = True )  as  wlog : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            warnings . filterwarnings ( ' always ' ,  ' ' ,  DeprecationWarning ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            visitor . visit ( mod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( log ,  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 1 ,  ' Num ' ,  42 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 2 ,  ' Num ' ,  4.25 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 3 ,  ' Num ' ,  4.25 j ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 4 ,  ' Str ' ,  ' string ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 5 ,  ' Bytes ' ,  b ' bytes ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 6 ,  ' NameConstant ' ,  True ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 7 ,  ' NameConstant ' ,  None ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( 8 ,  ' Ellipsis ' ,  . . . ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . assertEqual ( [ str ( w . message )  for  w  in  wlog ] ,  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' visit_Num is deprecated; add visit_Constant ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' visit_Num is deprecated; add visit_Constant ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' visit_Num is deprecated; add visit_Constant ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' visit_Str is deprecated; add visit_Constant ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' visit_Bytes is deprecated; add visit_Constant ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' visit_NameConstant is deprecated; add visit_Constant ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' visit_NameConstant is deprecated; add visit_Constant ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' visit_Ellipsis is deprecated; add visit_Constant ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  main ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  __name__  !=  ' __main__ ' : 
							 
						 
					
						
							
								
									
										
										
										
											2006-03-01 22:49:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  sys . argv [ 1 : ]  ==  [ ' -g ' ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  statements ,  kind  in  ( ( exec_tests ,  " exec " ) ,  ( single_tests ,  " single " ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                 ( eval_tests ,  " eval " ) ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            print ( kind + " _results = [ " ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-08 17:15:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            for  statement  in  statements : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                tree  =  ast . parse ( statement ,  " ? " ,  kind ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                print ( " %r , "  %  ( to_tuple ( tree ) , ) ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            print ( " ] " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        print ( " main() " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        raise  SystemExit 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-12 21:25:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unittest . main ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-31 03:40:27 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								#### EVERYTHING BELOW IS GENERATED BY python Lib/test/test_ast.py -g  #####  
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								exec_results  =  [  
						 
					
						
							
								
									
										
										
										
											2020-01-10 10:12:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  4 ) ,  ( ' Constant ' ,  ( 1 ,  0 ,  1 ,  4 ) ,  None ,  None ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  18 ) ,  ( ' Constant ' ,  ( 1 ,  0 ,  1 ,  18 ) ,  ' module docstring ' ,  None ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  13 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 1 ,  9 ,  1 ,  13 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  29 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Expr ' ,  ( 1 ,  9 ,  1 ,  29 ) ,  ( ' Constant ' ,  ( 1 ,  9 ,  1 ,  29 ) ,  ' function docstring ' ,  None ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  14 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 1 ,  10 ,  1 ,  14 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  16 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ( ' Constant ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  0 ,  None ) ] ) ,  [ ( ' Pass ' ,  ( 1 ,  12 ,  1 ,  16 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  18 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  ( ' arg ' ,  ( 1 ,  7 ,  1 ,  11 ) ,  ' args ' ,  None ,  None ) ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 1 ,  14 ,  1 ,  18 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  21 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  ( ' arg ' ,  ( 1 ,  8 ,  1 ,  14 ) ,  ' kwargs ' ,  None ,  None ) ,  [ ] ) ,  [ ( ' Pass ' ,  ( 1 ,  17 ,  1 ,  21 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  71 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ,  ( ' arg ' ,  ( 1 ,  9 ,  1 ,  10 ) ,  ' b ' ,  None ,  None ) ,  ( ' arg ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' c ' ,  None ,  None ) ,  ( ' arg ' ,  ( 1 ,  22 ,  1 ,  23 ) ,  ' d ' ,  None ,  None ) ,  ( ' arg ' ,  ( 1 ,  28 ,  1 ,  29 ) ,  ' e ' ,  None ,  None ) ] ,  ( ' arg ' ,  ( 1 ,  35 ,  1 ,  39 ) ,  ' args ' ,  None ,  None ) ,  [ ( ' arg ' ,  ( 1 ,  41 ,  1 ,  42 ) ,  ' f ' ,  None ,  None ) ] ,  [ ( ' Constant ' ,  ( 1 ,  43 ,  1 ,  45 ) ,  42 ,  None ) ] ,  ( ' arg ' ,  ( 1 ,  49 ,  1 ,  55 ) ,  ' kwargs ' ,  None ,  None ) ,  [ ( ' Constant ' ,  ( 1 ,  11 ,  1 ,  12 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  16 ,  1 ,  20 ) ,  None ,  None ) ,  ( ' List ' ,  ( 1 ,  24 ,  1 ,  26 ) ,  [ ] ,  ( ' Load ' , ) ) ,  ( ' Dict ' ,  ( 1 ,  30 ,  1 ,  32 ) ,  [ ] ,  [ ] ) ] ) ,  [ ( ' Expr ' ,  ( 1 ,  58 ,  1 ,  71 ) ,  ( ' Constant ' ,  ( 1 ,  58 ,  1 ,  71 ) ,  ' doc for f() ' ,  None ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' ClassDef ' ,  ( 1 ,  0 ,  1 ,  12 ) ,  ' C ' ,  [ ] ,  [ ] ,  [ ( ' Pass ' ,  ( 1 ,  8 ,  1 ,  12 ) ) ] ,  [ ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' ClassDef ' ,  ( 1 ,  0 ,  1 ,  32 ) ,  ' C ' ,  [ ] ,  [ ] ,  [ ( ' Expr ' ,  ( 1 ,  9 ,  1 ,  32 ) ,  ( ' Constant ' ,  ( 1 ,  9 ,  1 ,  32 ) ,  ' docstring for class C ' ,  None ) ) ] ,  [ ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' ClassDef ' ,  ( 1 ,  0 ,  1 ,  21 ) ,  ' C ' ,  [ ( ' Name ' ,  ( 1 ,  8 ,  1 ,  14 ) ,  ' object ' ,  ( ' Load ' , ) ) ] ,  [ ] ,  [ ( ' Pass ' ,  ( 1 ,  17 ,  1 ,  21 ) ) ] ,  [ ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  16 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Return ' ,  ( 1 ,  8 ,  1 ,  16 ) ,  ( ' Constant ' ,  ( 1 ,  15 ,  1 ,  16 ) ,  1 ,  None ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Delete ' ,  ( 1 ,  0 ,  1 ,  5 ) ,  [ ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' v ' ,  ( ' Del ' , ) ) ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Assign ' ,  ( 1 ,  0 ,  1 ,  5 ) ,  [ ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' v ' ,  ( ' Store ' , ) ) ] ,  ( ' Constant ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  1 ,  None ) ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Assign ' ,  ( 1 ,  0 ,  1 ,  7 ) ,  [ ( ' Tuple ' ,  ( 1 ,  0 ,  1 ,  3 ) ,  [ ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ] ,  ( ' Name ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Assign ' ,  ( 1 ,  0 ,  1 ,  9 ) ,  [ ( ' Tuple ' ,  ( 1 ,  0 ,  1 ,  5 ) ,  [ ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  3 ,  1 ,  4 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ] ,  ( ' Name ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Assign ' ,  ( 1 ,  0 ,  1 ,  9 ) ,  [ ( ' List ' ,  ( 1 ,  0 ,  1 ,  5 ) ,  [ ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  3 ,  1 ,  4 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ] ,  ( ' Name ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' AugAssign ' ,  ( 1 ,  0 ,  1 ,  6 ) ,  ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' v ' ,  ( ' Store ' , ) ) ,  ( ' Add ' , ) ,  ( ' Constant ' ,  ( 1 ,  5 ,  1 ,  6 ) ,  1 ,  None ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' For ' ,  ( 1 ,  0 ,  1 ,  15 ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' v ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  9 ,  1 ,  10 ) ,  ' v ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 1 ,  11 ,  1 ,  15 ) ) ] ,  [ ] ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' While ' ,  ( 1 ,  0 ,  1 ,  12 ) ,  ( ' Name ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' v ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 1 ,  8 ,  1 ,  12 ) ) ] ,  [ ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' If ' ,  ( 1 ,  0 ,  1 ,  9 ) ,  ( ' Name ' ,  ( 1 ,  3 ,  1 ,  4 ) ,  ' v ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 1 ,  5 ,  1 ,  9 ) ) ] ,  [ ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' If ' ,  ( 1 ,  0 ,  4 ,  6 ) ,  ( ' Name ' ,  ( 1 ,  3 ,  1 ,  4 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 2 ,  2 ,  2 ,  6 ) ) ] ,  [ ( ' If ' ,  ( 3 ,  0 ,  4 ,  6 ) ,  ( ' Name ' ,  ( 3 ,  5 ,  3 ,  6 ) ,  ' b ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 4 ,  2 ,  4 ,  6 ) ) ] ,  [ ] ) ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' If ' ,  ( 1 ,  0 ,  6 ,  6 ) ,  ( ' Name ' ,  ( 1 ,  3 ,  1 ,  4 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 2 ,  2 ,  2 ,  6 ) ) ] ,  [ ( ' If ' ,  ( 3 ,  0 ,  6 ,  6 ) ,  ( ' Name ' ,  ( 3 ,  5 ,  3 ,  6 ) ,  ' b ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 4 ,  2 ,  4 ,  6 ) ) ] ,  [ ( ' Pass ' ,  ( 6 ,  2 ,  6 ,  6 ) ) ] ) ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' With ' ,  ( 1 ,  0 ,  1 ,  17 ) ,  [ ( ' withitem ' ,  ( ' Name ' ,  ( 1 ,  5 ,  1 ,  6 ) ,  ' x ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  10 ,  1 ,  11 ) ,  ' y ' ,  ( ' Store ' , ) ) ) ] ,  [ ( ' Pass ' ,  ( 1 ,  13 ,  1 ,  17 ) ) ] ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' With ' ,  ( 1 ,  0 ,  1 ,  25 ) ,  [ ( ' withitem ' ,  ( ' Name ' ,  ( 1 ,  5 ,  1 ,  6 ) ,  ' x ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  10 ,  1 ,  11 ) ,  ' y ' ,  ( ' Store ' , ) ) ) ,  ( ' withitem ' ,  ( ' Name ' ,  ( 1 ,  13 ,  1 ,  14 ) ,  ' z ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  18 ,  1 ,  19 ) ,  ' q ' ,  ( ' Store ' , ) ) ) ] ,  [ ( ' Pass ' ,  ( 1 ,  21 ,  1 ,  25 ) ) ] ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Raise ' ,  ( 1 ,  0 ,  1 ,  25 ) ,  ( ' Call ' ,  ( 1 ,  6 ,  1 ,  25 ) ,  ( ' Name ' ,  ( 1 ,  6 ,  1 ,  15 ) ,  ' Exception ' ,  ( ' Load ' , ) ) ,  [ ( ' Constant ' ,  ( 1 ,  16 ,  1 ,  24 ) ,  ' string ' ,  None ) ] ,  [ ] ) ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Try ' ,  ( 1 ,  0 ,  4 ,  6 ) ,  [ ( ' Pass ' ,  ( 2 ,  2 ,  2 ,  6 ) ) ] ,  [ ( ' ExceptHandler ' ,  ( 3 ,  0 ,  4 ,  6 ) ,  ( ' Name ' ,  ( 3 ,  7 ,  3 ,  16 ) ,  ' Exception ' ,  ( ' Load ' , ) ) ,  None ,  [ ( ' Pass ' ,  ( 4 ,  2 ,  4 ,  6 ) ) ] ) ] ,  [ ] ,  [ ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Try ' ,  ( 1 ,  0 ,  4 ,  6 ) ,  [ ( ' Pass ' ,  ( 2 ,  2 ,  2 ,  6 ) ) ] ,  [ ] ,  [ ] ,  [ ( ' Pass ' ,  ( 4 ,  2 ,  4 ,  6 ) ) ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Assert ' ,  ( 1 ,  0 ,  1 ,  8 ) ,  ( ' Name ' ,  ( 1 ,  7 ,  1 ,  8 ) ,  ' v ' ,  ( ' Load ' , ) ) ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Import ' ,  ( 1 ,  0 ,  1 ,  10 ) ,  [ ( ' alias ' ,  ' sys ' ,  None ) ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' ImportFrom ' ,  ( 1 ,  0 ,  1 ,  17 ) ,  ' sys ' ,  [ ( ' alias ' ,  ' v ' ,  None ) ] ,  0 ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Global ' ,  ( 1 ,  0 ,  1 ,  8 ) ,  [ ' v ' ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ( ' Constant ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  1 ,  None ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Pass ' ,  ( 1 ,  0 ,  1 ,  4 ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' For ' ,  ( 1 ,  0 ,  1 ,  16 ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' v ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  9 ,  1 ,  10 ) ,  ' v ' ,  ( ' Load ' , ) ) ,  [ ( ' Break ' ,  ( 1 ,  11 ,  1 ,  16 ) ) ] ,  [ ] ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' For ' ,  ( 1 ,  0 ,  1 ,  19 ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' v ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  9 ,  1 ,  10 ) ,  ' v ' ,  ( ' Load ' , ) ) ,  [ ( ' Continue ' ,  ( 1 ,  11 ,  1 ,  19 ) ) ] ,  [ ] ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' For ' ,  ( 1 ,  0 ,  1 ,  18 ) ,  ( ' Tuple ' ,  ( 1 ,  4 ,  1 ,  7 ) ,  [ ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  11 ,  1 ,  12 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 1 ,  14 ,  1 ,  18 ) ) ] ,  [ ] ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' For ' ,  ( 1 ,  0 ,  1 ,  20 ) ,  ( ' Tuple ' ,  ( 1 ,  4 ,  1 ,  9 ) ,  [ ( ' Name ' ,  ( 1 ,  5 ,  1 ,  6 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  7 ,  1 ,  8 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  13 ,  1 ,  14 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 1 ,  16 ,  1 ,  20 ) ) ] ,  [ ] ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' For ' ,  ( 1 ,  0 ,  1 ,  20 ) ,  ( ' List ' ,  ( 1 ,  4 ,  1 ,  9 ) ,  [ ( ' Name ' ,  ( 1 ,  5 ,  1 ,  6 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  7 ,  1 ,  8 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  13 ,  1 ,  14 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ( ' Pass ' ,  ( 1 ,  16 ,  1 ,  20 ) ) ] ,  [ ] ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  11 ,  5 ) ,  ( ' GeneratorExp ' ,  ( 1 ,  0 ,  11 ,  5 ) ,  ( ' Tuple ' ,  ( 2 ,  4 ,  6 ,  5 ) ,  [ ( ' Name ' ,  ( 3 ,  4 ,  3 ,  6 ) ,  ' Aa ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 5 ,  7 ,  5 ,  9 ) ,  ' Bb ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Tuple ' ,  ( 8 ,  4 ,  10 ,  6 ) ,  [ ( ' Name ' ,  ( 8 ,  4 ,  8 ,  6 ) ,  ' Aa ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 10 ,  4 ,  10 ,  6 ) ,  ' Bb ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 10 ,  10 ,  10 ,  12 ) ,  ' Cc ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  34 ) ,  ( ' DictComp ' ,  ( 1 ,  0 ,  1 ,  34 ) ,  ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  5 ,  1 ,  6 ) ,  ' b ' ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Name ' ,  ( 1 ,  11 ,  1 ,  12 ) ,  ' w ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  16 ,  1 ,  17 ) ,  ' x ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ,  ( ' comprehension ' ,  ( ' Name ' ,  ( 1 ,  22 ,  1 ,  23 ) ,  ' m ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  27 ,  1 ,  28 ) ,  ' p ' ,  ( ' Load ' , ) ) ,  [ ( ' Name ' ,  ( 1 ,  32 ,  1 ,  33 ) ,  ' g ' ,  ( ' Load ' , ) ) ] ,  0 ) ] ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  20 ) ,  ( ' DictComp ' ,  ( 1 ,  0 ,  1 ,  20 ) ,  ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  5 ,  1 ,  6 ) ,  ' b ' ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Tuple ' ,  ( 1 ,  11 ,  1 ,  14 ) ,  [ ( ' Name ' ,  ( 1 ,  11 ,  1 ,  12 ) ,  ' v ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  13 ,  1 ,  14 ) ,  ' w ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  18 ,  1 ,  19 ) ,  ' x ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  19 ) ,  ( ' SetComp ' ,  ( 1 ,  0 ,  1 ,  19 ) ,  ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' r ' ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Name ' ,  ( 1 ,  7 ,  1 ,  8 ) ,  ' l ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' x ' ,  ( ' Load ' , ) ) ,  [ ( ' Name ' ,  ( 1 ,  17 ,  1 ,  18 ) ,  ' g ' ,  ( ' Load ' , ) ) ] ,  0 ) ] ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  16 ) ,  ( ' SetComp ' ,  ( 1 ,  0 ,  1 ,  16 ) ,  ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' r ' ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Tuple ' ,  ( 1 ,  7 ,  1 ,  10 ) ,  [ ( ' Name ' ,  ( 1 ,  7 ,  1 ,  8 ) ,  ' l ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  9 ,  1 ,  10 ) ,  ' m ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' x ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' AsyncFunctionDef ' ,  ( 1 ,  0 ,  3 ,  18 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Expr ' ,  ( 2 ,  1 ,  2 ,  17 ) ,  ( ' Constant ' ,  ( 2 ,  1 ,  2 ,  17 ) ,  ' async function ' ,  None ) ) ,  ( ' Expr ' ,  ( 3 ,  1 ,  3 ,  18 ) ,  ( ' Await ' ,  ( 3 ,  1 ,  3 ,  18 ) ,  ( ' Call ' ,  ( 3 ,  7 ,  3 ,  18 ) ,  ( ' Name ' ,  ( 3 ,  7 ,  3 ,  16 ) ,  ' something ' ,  ( ' Load ' , ) ) ,  [ ] ,  [ ] ) ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' AsyncFunctionDef ' ,  ( 1 ,  0 ,  3 ,  8 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' AsyncFor ' ,  ( 2 ,  1 ,  3 ,  8 ) ,  ( ' Name ' ,  ( 2 ,  11 ,  2 ,  12 ) ,  ' e ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 2 ,  16 ,  2 ,  17 ) ,  ' i ' ,  ( ' Load ' , ) ) ,  [ ( ' Expr ' ,  ( 2 ,  19 ,  2 ,  20 ) ,  ( ' Constant ' ,  ( 2 ,  19 ,  2 ,  20 ) ,  1 ,  None ) ) ] ,  [ ( ' Expr ' ,  ( 3 ,  7 ,  3 ,  8 ) ,  ( ' Constant ' ,  ( 3 ,  7 ,  3 ,  8 ) ,  2 ,  None ) ) ] ,  None ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' AsyncFunctionDef ' ,  ( 1 ,  0 ,  2 ,  21 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' AsyncWith ' ,  ( 2 ,  1 ,  2 ,  21 ) ,  [ ( ' withitem ' ,  ( ' Name ' ,  ( 2 ,  12 ,  2 ,  13 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 2 ,  17 ,  2 ,  18 ) ,  ' b ' ,  ( ' Store ' , ) ) ) ] ,  [ ( ' Expr ' ,  ( 2 ,  20 ,  2 ,  21 ) ,  ( ' Constant ' ,  ( 2 ,  20 ,  2 ,  21 ) ,  1 ,  None ) ) ] ,  None ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  14 ) ,  ( ' Dict ' ,  ( 1 ,  0 ,  1 ,  14 ) ,  [ None ,  ( ' Constant ' ,  ( 1 ,  10 ,  1 ,  11 ) ,  2 ,  None ) ] ,  [ ( ' Dict ' ,  ( 1 ,  3 ,  1 ,  8 ) ,  [ ( ' Constant ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  1 ,  None ) ] ,  [ ( ' Constant ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  2 ,  None ) ] ) ,  ( ' Constant ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  3 ,  None ) ] ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  12 ) ,  ( ' Set ' ,  ( 1 ,  0 ,  1 ,  12 ) ,  [ ( ' Starred ' ,  ( 1 ,  1 ,  1 ,  8 ) ,  ( ' Set ' ,  ( 1 ,  2 ,  1 ,  8 ) ,  [ ( ' Constant ' ,  ( 1 ,  3 ,  1 ,  4 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  2 ,  None ) ] ) ,  ( ' Load ' , ) ) ,  ( ' Constant ' ,  ( 1 ,  10 ,  1 ,  11 ) ,  3 ,  None ) ] ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' AsyncFunctionDef ' ,  ( 1 ,  0 ,  2 ,  21 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Expr ' ,  ( 2 ,  1 ,  2 ,  21 ) ,  ( ' ListComp ' ,  ( 2 ,  1 ,  2 ,  21 ) ,  ( ' Name ' ,  ( 2 ,  2 ,  2 ,  3 ) ,  ' i ' ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Name ' ,  ( 2 ,  14 ,  2 ,  15 ) ,  ' b ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 2 ,  19 ,  2 ,  20 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  1 ) ] ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 4 ,  0 ,  4 ,  13 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 4 ,  9 ,  4 ,  13 ) ) ] ,  [ ( ' Name ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  ' deco1 ' ,  ( ' Load ' , ) ) ,  ( ' Call ' ,  ( 2 ,  1 ,  2 ,  8 ) ,  ( ' Name ' ,  ( 2 ,  1 ,  2 ,  6 ) ,  ' deco2 ' ,  ( ' Load ' , ) ) ,  [ ] ,  [ ] ) ,  ( ' Call ' ,  ( 3 ,  1 ,  3 ,  9 ) ,  ( ' Name ' ,  ( 3 ,  1 ,  3 ,  6 ) ,  ' deco3 ' ,  ( ' Load ' , ) ) ,  [ ( ' Constant ' ,  ( 3 ,  7 ,  3 ,  8 ) ,  1 ,  None ) ] ,  [ ] ) ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' AsyncFunctionDef ' ,  ( 4 ,  0 ,  4 ,  19 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 4 ,  15 ,  4 ,  19 ) ) ] ,  [ ( ' Name ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  ' deco1 ' ,  ( ' Load ' , ) ) ,  ( ' Call ' ,  ( 2 ,  1 ,  2 ,  8 ) ,  ( ' Name ' ,  ( 2 ,  1 ,  2 ,  6 ) ,  ' deco2 ' ,  ( ' Load ' , ) ) ,  [ ] ,  [ ] ) ,  ( ' Call ' ,  ( 3 ,  1 ,  3 ,  9 ) ,  ( ' Name ' ,  ( 3 ,  1 ,  3 ,  6 ) ,  ' deco3 ' ,  ( ' Load ' , ) ) ,  [ ( ' Constant ' ,  ( 3 ,  7 ,  3 ,  8 ) ,  1 ,  None ) ] ,  [ ] ) ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' ClassDef ' ,  ( 4 ,  0 ,  4 ,  13 ) ,  ' C ' ,  [ ] ,  [ ] ,  [ ( ' Pass ' ,  ( 4 ,  9 ,  4 ,  13 ) ) ] ,  [ ( ' Name ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  ' deco1 ' ,  ( ' Load ' , ) ) ,  ( ' Call ' ,  ( 2 ,  1 ,  2 ,  8 ) ,  ( ' Name ' ,  ( 2 ,  1 ,  2 ,  6 ) ,  ' deco2 ' ,  ( ' Load ' , ) ) ,  [ ] ,  [ ] ) ,  ( ' Call ' ,  ( 3 ,  1 ,  3 ,  9 ) ,  ( ' Name ' ,  ( 3 ,  1 ,  3 ,  6 ) ,  ' deco3 ' ,  ( ' Load ' , ) ) ,  [ ( ' Constant ' ,  ( 3 ,  7 ,  3 ,  8 ) ,  1 ,  None ) ] ,  [ ] ) ] ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 2 ,  0 ,  2 ,  13 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 2 ,  9 ,  2 ,  13 ) ) ] ,  [ ( ' Call ' ,  ( 1 ,  1 ,  1 ,  19 ) ,  ( ' Name ' ,  ( 1 ,  1 ,  1 ,  5 ) ,  ' deco ' ,  ( ' Load ' , ) ) ,  [ ( ' GeneratorExp ' ,  ( 1 ,  5 ,  1 ,  19 ) ,  ( ' Name ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  17 ,  1 ,  18 ) ,  ' b ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ] ,  [ ] ) ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
									
										
										
										
											2020-02-08 00:36:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 2 ,  0 ,  2 ,  13 ) ,  ' f ' ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 2 ,  9 ,  2 ,  13 ) ) ] ,  [ ( ' Attribute ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  ( ' Attribute ' ,  ( 1 ,  1 ,  1 ,  4 ) ,  ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ' b ' ,  ( ' Load ' , ) ) ,  ' c ' ,  ( ' Load ' , ) ) ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
									
										
										
										
											2020-01-10 10:12:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  8 ) ,  ( ' NamedExpr ' ,  ( 1 ,  1 ,  1 ,  7 ) ,  ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Constant ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  1 ,  None ) ) ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  18 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 1 ,  14 ,  1 ,  18 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  26 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ( ' arg ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' c ' ,  None ,  None ) ,  ( ' arg ' ,  ( 1 ,  15 ,  1 ,  16 ) ,  ' d ' ,  None ,  None ) ,  ( ' arg ' ,  ( 1 ,  18 ,  1 ,  19 ) ,  ' e ' ,  None ,  None ) ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 1 ,  22 ,  1 ,  26 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  29 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ( ' arg ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' c ' ,  None ,  None ) ] ,  None ,  [ ( ' arg ' ,  ( 1 ,  18 ,  1 ,  19 ) ,  ' d ' ,  None ,  None ) ,  ( ' arg ' ,  ( 1 ,  21 ,  1 ,  22 ) ,  ' e ' ,  None ,  None ) ] ,  [ None ,  None ] ,  None ,  [ ] ) ,  [ ( ' Pass ' ,  ( 1 ,  25 ,  1 ,  29 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  39 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ( ' arg ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' c ' ,  None ,  None ) ] ,  None ,  [ ( ' arg ' ,  ( 1 ,  18 ,  1 ,  19 ) ,  ' d ' ,  None ,  None ) ,  ( ' arg ' ,  ( 1 ,  21 ,  1 ,  22 ) ,  ' e ' ,  None ,  None ) ] ,  [ None ,  None ] ,  ( ' arg ' ,  ( 1 ,  26 ,  1 ,  32 ) ,  ' kwargs ' ,  None ,  None ) ,  [ ] ) ,  [ ( ' Pass ' ,  ( 1 ,  35 ,  1 ,  39 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  20 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ( ' Constant ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  1 ,  None ) ] ) ,  [ ( ' Pass ' ,  ( 1 ,  16 ,  1 ,  20 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  29 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ( ' arg ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  None ,  None ) ,  ( ' arg ' ,  ( 1 ,  19 ,  1 ,  20 ) ,  ' c ' ,  None ,  None ) ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ( ' Constant ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  16 ,  1 ,  17 ) ,  2 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  21 ,  1 ,  22 ) ,  4 ,  None ) ] ) ,  [ ( ' Pass ' ,  ( 1 ,  25 ,  1 ,  29 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  32 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ( ' arg ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  None ,  None ) ] ,  None ,  [ ( ' arg ' ,  ( 1 ,  22 ,  1 ,  23 ) ,  ' c ' ,  None ,  None ) ] ,  [ ( ' Constant ' ,  ( 1 ,  24 ,  1 ,  25 ) ,  4 ,  None ) ] ,  None ,  [ ( ' Constant ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  16 ,  1 ,  17 ) ,  2 ,  None ) ] ) ,  [ ( ' Pass ' ,  ( 1 ,  28 ,  1 ,  32 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  30 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ( ' arg ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  None ,  None ) ] ,  None ,  [ ( ' arg ' ,  ( 1 ,  22 ,  1 ,  23 ) ,  ' c ' ,  None ,  None ) ] ,  [ None ] ,  None ,  [ ( ' Constant ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  16 ,  1 ,  17 ) ,  2 ,  None ) ] ) ,  [ ( ' Pass ' ,  ( 1 ,  26 ,  1 ,  30 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  42 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ( ' arg ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  None ,  None ) ] ,  None ,  [ ( ' arg ' ,  ( 1 ,  22 ,  1 ,  23 ) ,  ' c ' ,  None ,  None ) ] ,  [ ( ' Constant ' ,  ( 1 ,  24 ,  1 ,  25 ) ,  4 ,  None ) ] ,  ( ' arg ' ,  ( 1 ,  29 ,  1 ,  35 ) ,  ' kwargs ' ,  None ,  None ) ,  [ ( ' Constant ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  16 ,  1 ,  17 ) ,  2 ,  None ) ] ) ,  [ ( ' Pass ' ,  ( 1 ,  38 ,  1 ,  42 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Module ' ,  [ ( ' FunctionDef ' ,  ( 1 ,  0 ,  1 ,  40 ) ,  ' f ' ,  ( ' arguments ' ,  [ ( ' arg ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' a ' ,  None ,  None ) ] ,  [ ( ' arg ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  None ,  None ) ] ,  None ,  [ ( ' arg ' ,  ( 1 ,  22 ,  1 ,  23 ) ,  ' c ' ,  None ,  None ) ] ,  [ None ] ,  ( ' arg ' ,  ( 1 ,  27 ,  1 ,  33 ) ,  ' kwargs ' ,  None ,  None ) ,  [ ( ' Constant ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  16 ,  1 ,  17 ) ,  2 ,  None ) ] ) ,  [ ( ' Pass ' ,  ( 1 ,  36 ,  1 ,  40 ) ) ] ,  [ ] ,  None ,  None ) ] ,  [ ] ) ,  
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								]  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								single_results  =  [  
						 
					
						
							
								
									
										
										
										
											2020-01-10 10:12:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Interactive ' ,  [ ( ' Expr ' ,  ( 1 ,  0 ,  1 ,  3 ) ,  ( ' BinOp ' ,  ( 1 ,  0 ,  1 ,  3 ) ,  ( ' Constant ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  1 ,  None ) ,  ( ' Add ' , ) ,  ( ' Constant ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  2 ,  None ) ) ) ] ) ,  
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								]  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								eval_results  =  [  
						 
					
						
							
								
									
										
										
										
											2020-01-10 10:12:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Constant ' ,  ( 1 ,  0 ,  1 ,  4 ) ,  None ,  None ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' BoolOp ' ,  ( 1 ,  0 ,  1 ,  7 ) ,  ( ' And ' , ) ,  [ ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  6 ,  1 ,  7 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' BinOp ' ,  ( 1 ,  0 ,  1 ,  5 ) ,  ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Add ' , ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' UnaryOp ' ,  ( 1 ,  0 ,  1 ,  5 ) ,  ( ' Not ' , ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' v ' ,  ( ' Load ' , ) ) ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Lambda ' ,  ( 1 ,  0 ,  1 ,  11 ) ,  ( ' arguments ' ,  [ ] ,  [ ] ,  None ,  [ ] ,  [ ] ,  None ,  [ ] ) ,  ( ' Constant ' ,  ( 1 ,  7 ,  1 ,  11 ) ,  None ,  None ) ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Dict ' ,  ( 1 ,  0 ,  1 ,  7 ) ,  [ ( ' Constant ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  1 ,  None ) ] ,  [ ( ' Constant ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  2 ,  None ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Dict ' ,  ( 1 ,  0 ,  1 ,  2 ) ,  [ ] ,  [ ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Set ' ,  ( 1 ,  0 ,  1 ,  7 ) ,  [ ( ' Constant ' ,  ( 1 ,  1 ,  1 ,  5 ) ,  None ,  None ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Dict ' ,  ( 1 ,  0 ,  5 ,  6 ) ,  [ ( ' Constant ' ,  ( 2 ,  6 ,  2 ,  7 ) ,  1 ,  None ) ] ,  [ ( ' Constant ' ,  ( 4 ,  10 ,  4 ,  11 ) ,  2 ,  None ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' ListComp ' ,  ( 1 ,  0 ,  1 ,  19 ) ,  ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Name ' ,  ( 1 ,  7 ,  1 ,  8 ) ,  ' b ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ( ' Name ' ,  ( 1 ,  17 ,  1 ,  18 ) ,  ' d ' ,  ( ' Load ' , ) ) ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' GeneratorExp ' ,  ( 1 ,  0 ,  1 ,  19 ) ,  ( ' Name ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Name ' ,  ( 1 ,  7 ,  1 ,  8 ) ,  ' b ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ( ' Name ' ,  ( 1 ,  17 ,  1 ,  18 ) ,  ' d ' ,  ( ' Load ' , ) ) ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' ListComp ' ,  ( 1 ,  0 ,  1 ,  20 ) ,  ( ' Tuple ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  [ ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Tuple ' ,  ( 1 ,  11 ,  1 ,  14 ) ,  [ ( ' Name ' ,  ( 1 ,  11 ,  1 ,  12 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  13 ,  1 ,  14 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  18 ,  1 ,  19 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' ListComp ' ,  ( 1 ,  0 ,  1 ,  22 ) ,  ( ' Tuple ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  [ ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Tuple ' ,  ( 1 ,  11 ,  1 ,  16 ) ,  [ ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  20 ,  1 ,  21 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' ListComp ' ,  ( 1 ,  0 ,  1 ,  22 ) ,  ( ' Tuple ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  [ ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' List ' ,  ( 1 ,  11 ,  1 ,  16 ) ,  [ ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  20 ,  1 ,  21 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' SetComp ' ,  ( 1 ,  0 ,  1 ,  20 ) ,  ( ' Tuple ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  [ ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Tuple ' ,  ( 1 ,  11 ,  1 ,  14 ) ,  [ ( ' Name ' ,  ( 1 ,  11 ,  1 ,  12 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  13 ,  1 ,  14 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  18 ,  1 ,  19 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' SetComp ' ,  ( 1 ,  0 ,  1 ,  22 ) ,  ( ' Tuple ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  [ ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Tuple ' ,  ( 1 ,  11 ,  1 ,  16 ) ,  [ ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  20 ,  1 ,  21 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' SetComp ' ,  ( 1 ,  0 ,  1 ,  22 ) ,  ( ' Tuple ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  [ ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' List ' ,  ( 1 ,  11 ,  1 ,  16 ) ,  [ ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  20 ,  1 ,  21 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' GeneratorExp ' ,  ( 1 ,  0 ,  1 ,  20 ) ,  ( ' Tuple ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  [ ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Tuple ' ,  ( 1 ,  11 ,  1 ,  14 ) ,  [ ( ' Name ' ,  ( 1 ,  11 ,  1 ,  12 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  13 ,  1 ,  14 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  18 ,  1 ,  19 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' GeneratorExp ' ,  ( 1 ,  0 ,  1 ,  22 ) ,  ( ' Tuple ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  [ ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Tuple ' ,  ( 1 ,  11 ,  1 ,  16 ) ,  [ ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  20 ,  1 ,  21 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' GeneratorExp ' ,  ( 1 ,  0 ,  1 ,  22 ) ,  ( ' Tuple ' ,  ( 1 ,  1 ,  1 ,  6 ) ,  [ ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' b ' ,  ( ' Load ' , ) ) ] ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' List ' ,  ( 1 ,  11 ,  1 ,  16 ) ,  [ ( ' Name ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  ' b ' ,  ( ' Store ' , ) ) ] ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  20 ,  1 ,  21 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Compare ' ,  ( 1 ,  0 ,  1 ,  9 ) ,  ( ' Constant ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  1 ,  None ) ,  [ ( ' Lt ' , ) ,  ( ' Lt ' , ) ] ,  [ ( ' Constant ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  2 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  3 ,  None ) ] ) ) ,  
						 
					
						
							
								
									
										
										
										
											2020-04-03 21:02:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Call ' ,  ( 1 ,  0 ,  1 ,  17 ) ,  ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' f ' ,  ( ' Load ' , ) ) ,  [ ( ' Constant ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  2 ,  None ) ,  ( ' Starred ' ,  ( 1 ,  10 ,  1 ,  12 ) ,  ( ' Name ' ,  ( 1 ,  11 ,  1 ,  12 ) ,  ' d ' ,  ( ' Load ' , ) ) ,  ( ' Load ' , ) ) ] ,  [ ( ' keyword ' ,  ( 1 ,  6 ,  1 ,  9 ) ,  ' c ' ,  ( ' Constant ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  3 ,  None ) ) ,  ( ' keyword ' ,  ( 1 ,  13 ,  1 ,  16 ) ,  None ,  ( ' Name ' ,  ( 1 ,  15 ,  1 ,  16 ) ,  ' e ' ,  ( ' Load ' , ) ) ) ] ) ) ,  
						 
					
						
							
								
									
										
										
										
											2020-01-10 10:12:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Call ' ,  ( 1 ,  0 ,  1 ,  10 ) ,  ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' f ' ,  ( ' Load ' , ) ) ,  [ ( ' Starred ' ,  ( 1 ,  2 ,  1 ,  9 ) ,  ( ' List ' ,  ( 1 ,  3 ,  1 ,  9 ) ,  [ ( ' Constant ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  0 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  7 ,  1 ,  8 ) ,  1 ,  None ) ] ,  ( ' Load ' , ) ) ,  ( ' Load ' , ) ) ] ,  [ ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Call ' ,  ( 1 ,  0 ,  1 ,  15 ) ,  ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' f ' ,  ( ' Load ' , ) ) ,  [ ( ' GeneratorExp ' ,  ( 1 ,  1 ,  1 ,  15 ) ,  ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  [ ( ' comprehension ' ,  ( ' Name ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  ' a ' ,  ( ' Store ' , ) ) ,  ( ' Name ' ,  ( 1 ,  13 ,  1 ,  14 ) ,  ' b ' ,  ( ' Load ' , ) ) ,  [ ] ,  0 ) ] ) ] ,  [ ] ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Constant ' ,  ( 1 ,  0 ,  1 ,  2 ) ,  10 ,  None ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Constant ' ,  ( 1 ,  0 ,  1 ,  8 ) ,  ' string ' ,  None ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Attribute ' ,  ( 1 ,  0 ,  1 ,  3 ) ,  ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ' b ' ,  ( ' Load ' , ) ) ) ,  
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Subscript ' ,  ( 1 ,  0 ,  1 ,  6 ) ,  ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ( ' Slice ' ,  ( 1 ,  2 ,  1 ,  5 ) ,  ( ' Name ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  ' b ' ,  ( ' Load ' , ) ) ,  ( ' Name ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  ' c ' ,  ( ' Load ' , ) ) ,  None ) ,  ( ' Load ' , ) ) ) ,  
						 
					
						
							
								
									
										
										
										
											2020-01-10 10:12:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' v ' ,  ( ' Load ' , ) ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' List ' ,  ( 1 ,  0 ,  1 ,  7 ) ,  [ ( ' Constant ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  3 ,  1 ,  4 ) ,  2 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  5 ,  1 ,  6 ) ,  3 ,  None ) ] ,  ( ' Load ' , ) ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' List ' ,  ( 1 ,  0 ,  1 ,  2 ) ,  [ ] ,  ( ' Load ' , ) ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Tuple ' ,  ( 1 ,  0 ,  1 ,  5 ) ,  [ ( ' Constant ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  2 ,  1 ,  3 ) ,  2 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  4 ,  1 ,  5 ) ,  3 ,  None ) ] ,  ( ' Load ' , ) ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Tuple ' ,  ( 1 ,  0 ,  1 ,  7 ) ,  [ ( ' Constant ' ,  ( 1 ,  1 ,  1 ,  2 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  3 ,  1 ,  4 ) ,  2 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  5 ,  1 ,  6 ) ,  3 ,  None ) ] ,  ( ' Load ' , ) ) ) ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Tuple ' ,  ( 1 ,  0 ,  1 ,  2 ) ,  [ ] ,  ( ' Load ' , ) ) ) ,  
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								( ' Expression ' ,  ( ' Call ' ,  ( 1 ,  0 ,  1 ,  17 ) ,  ( ' Attribute ' ,  ( 1 ,  0 ,  1 ,  7 ) ,  ( ' Attribute ' ,  ( 1 ,  0 ,  1 ,  5 ) ,  ( ' Attribute ' ,  ( 1 ,  0 ,  1 ,  3 ) ,  ( ' Name ' ,  ( 1 ,  0 ,  1 ,  1 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ' b ' ,  ( ' Load ' , ) ) ,  ' c ' ,  ( ' Load ' , ) ) ,  ' d ' ,  ( ' Load ' , ) ) ,  [ ( ' Subscript ' ,  ( 1 ,  8 ,  1 ,  16 ) ,  ( ' Attribute ' ,  ( 1 ,  8 ,  1 ,  11 ) ,  ( ' Name ' ,  ( 1 ,  8 ,  1 ,  9 ) ,  ' a ' ,  ( ' Load ' , ) ) ,  ' b ' ,  ( ' Load ' , ) ) ,  ( ' Slice ' ,  ( 1 ,  12 ,  1 ,  15 ) ,  ( ' Constant ' ,  ( 1 ,  12 ,  1 ,  13 ) ,  1 ,  None ) ,  ( ' Constant ' ,  ( 1 ,  14 ,  1 ,  15 ) ,  2 ,  None ) ,  None ) ,  ( ' Load ' , ) ) ] ,  [ ] ) ) ,  
						 
					
						
							
								
									
										
										
										
											2006-02-28 18:44:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								]  
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 61440-61441,61443,61445-61448,61451-61452,61455-61457,61459-61464,61466-61467,61469-61470,61476-61477,61479,61481-61482,61485,61487,61490,61493-61494,61497,61499-61502,61505-61506,61508,61511-61514,61519,61521-61522,61530-61531,61533-61537,61541-61555,61557-61558,61561-61562,61566-61569,61572-61574,61578-61579,61583-61584,61588-61589,61592,61594,61598-61601,61603-61604,61607-61612,61617,61619-61620,61624,61626,61628-61630,61635-61638,61640-61643,61645,61648,61653-61655,61659-61662,61664,61666,61668-61671,61673,61675,61679-61680,61682,61685-61686,61689-61695,61697-61699,61701-61703,61706,61710,61713,61717,61723,61726-61730,61736,61738,61740,61742,61745-61752,61754-61760,61762-61764,61768,61770-61772,61774-61775,61784-61787,61789-61792,61794-61795,61797-61806,61808-61809,61811-61812,61814-61819,61824,61826-61833,61835-61840,61843-61845,61848,61850,61854-61862,61865-61866,61868,61872-61873,61876-61877,61883-61888,61890-61891,61893-61899,61901-61903,61905-61912,61914,61917,61920-61921,61927,61930,61932-61934,61939,61941-61942,61944-61951,61955,61960-61963,61980,61982-61983,61991,61994-61996,62001-62003,62008-62010,62016-62017,62022,62024,62027,62031-62034,62041,62045-62046,62048,62050-62051,62055-62066,62068-62074,62076-62078 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r62048 | georg.brandl | 2008-03-29 23:53:55 -0700 (Sat, 29 Mar 2008) | 2 lines
  Adapt test_ast to the new ExceptHandler type.
........
  r62050 | georg.brandl | 2008-03-30 00:09:22 -0700 (Sun, 30 Mar 2008) | 2 lines
  Convert test_ast to unittest and add a test for r62049.
........
  r62051 | georg.brandl | 2008-03-30 12:00:49 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make _fields attr for no fields consistent with _attributes attr.
........
  r62059 | georg.brandl | 2008-03-30 13:20:39 -0700 (Sun, 30 Mar 2008) | 2 lines
  Make AST nodes pickleable.
........
											 
										 
										
											2008-03-31 05:29:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								main ( )