parameters: (self, max_nodes, default_attributes=None)
docstring: max_nodes: maximum no of nodes
          default_attributes: dict of node attributes and default values
docstring_summary: max_nodes: maximum no of nodes
          default_attributes: dict of node attributes and default values
docstring_tokens: max_nodes : maximum no of nodes default_attributes : dict of node attributes and default values
function: def __init__(self, max_nodes, default_attributes=None):
          """ max_nodes: maximum no of nodes
          default_attributes: dict of node attributes and default values """
          if default_attributes is None:
              default_attributes = { 'merges': None, 'stop': -1, 'start': -1, 'is_source': True }
          self.default_attributes = default_attributes
          self.attribute_pos = dict(zip(default_attributes.keys(), range(len(default_attributes))))
          self.n = max_nodes
          # each node contains list of default attributes, followed by outoing edges
          self.nodes = [self.default_attributes.values() for i in range(self.n)]
          self.pred = [[] for i in range(self.n)]
          self.weights = {}
function_tokens: def __init__ ( self , max_nodes , default_attributes = None ) : if default_attributes is None : default_attributes = { 'merges' : None , 'stop' : - 1 , 'start' : - 1 , 'is_source' : True } self . default_attributes = default_attributes self . attribute_pos = dict ( zip ( default_attributes . keys ( ) , range ( len ( default_attributes ) ) ) ) self . n = max_nodes # each node contains list of default attributes, followed by outoing edges self . nodes = [ self . default_attributes . values ( ) for i in range ( self . n ) ] self . pred = [ [ ] for i in range ( self . n ) ] self . weights = { }