docs: def get_node_attributes(self, node):
          """Given a node, get a dictionary with copies of that node's
          attributes.
  
          :param node: reference to the node to retrieve the attributes of.
          :returns: dict -- copy of each attribute of the specified node.
          :raises: ValueError -- No such node exists.
  
          """
          if not self.has_node(node):
              raise ValueError("No such node exists.")
          attributes = {}
          for attr_name, attr_value in self._node_attributes[node].items():
              attributes[attr_name] = copy.copy(attr_value)
          return attributes