from boundeddegreenode import Node

class Graph:

    ## Graph(degree) produces an empty graph with the given degree.
    ## __init__: Int -> Graph
    def __init__(self, degree):

    ## print(Graph) prints information for each vertex.
    ## Effects: Prints information for each vertex.
    ## __str__: Graph -> Str
    def __str__(self):

    ## self.check_vertex_attribute(vertex, attr) produces the value of an
    ##     attribute of a vertex.
    ## check_vertex_attribute: Graph Node Str -> Any
    ## Requires: vertex is a vertex in self
    ##           attr is a valid attribute string
    def check_vertex_attribute(self, vertex, attr):
        
    ## self.nbrs(vertex) produces a list of all neighbours of vertex.
    ## nbrs: Graph Node -> (listof Node)
    ## Requires: vertex is a vertex in self
    def nbrs(self, vertex):

    ## self.are_adjacent(one, two) produces True if vertices one and two
    ##     are adjacent and False otherwise.
    ## are_adjacent: Graph Node Node -> Bool
    ## Requires: one and two are vertices in self
    def are_adjacent(self, one, two):

    ## self.add_vertex() produces a new vertex.
    ## Effects: Adds a Node to self.
    ## add_vertex: Graph -> Node
    def add_vertex(self):

    ## self.delete_vertex(vertex) deletes vertex from self.
    ## Effects: Deletes vertex from self and edges.
    ## delete_vertex: Graph Node -> None
    ## Requires: vertex is a vertex in self
    def delete_vertex(self, vertex):
                            
    ## self.add_edge(one, two) adds an edge between vertices one and two.
    ## Effects: Makes link between vertices one and two.
    ## add_edge: Graph Node Node -> None
    ## Requires: one and two are vertices in self, neither is
    ##           at the maximum degree, one is not equal to two, and
    ##           there is no edge between one and two
    def add_edge(self, one, two):

    ## self.delete_edge(one, two) deletes an edge between vertices one and two.
    ## Effects: Deletes link between vertices one and two.
    ## delete_edge: Graph Node Node -> None
    ## Requires: one and two are vertices in self
    ##           there is an edge with endpoints one and two        
    def delete_edge(self, one, two):

    ## self.set_vertex_attribute(vertex, attr, value) sets the value of an
    ##     attribute of a vertex.
    ## Effects: Sets value of attribute of vertex.
    ## set_vertex_attribute: Graph Node Str Any -> None
    ## Requires: vertex is a vertex in self
    ##           attr is a valid attribute string        
    def set_vertex_attribute(self, vertex, attr, value):

        
