docs: def add_node(self, node, node_data=None):
          """
          Adds a new node to the graph.  Arbitrary data can be attached to the
          node via the node_data parameter.  Adding the same node twice will be
          silently ignored.
  
          The node must be a hashable value.
          """
          #
          # the nodes will contain tuples that will store incoming edges,
          # outgoing edges and data
          #
          # index 0 -> incoming edges
          # index 1 -> outgoing edges
  
          if node in self.hidden_nodes:
              # Node is present, but hidden
              return
  
          if node not in self.nodes:
              self.nodes[node] = ([], [], node_data)