def _check_consistency(self):
        """Compares the contents of the six dictionaries and ensures
        that they are consistent with each other, raising a ValueError
        if there is any inconsistency among the dictionaries. This
        function is used in testing when modifying hypergraphs. The
        consistency checks are divided into the following groups:

        1. hyperedge_id consistency (using hyperedge_attribute keys)
        2. node consistency (using node_attribute keys)
        3. successor/predecessor symmetry
        4. check for misplaced hyperedge ids
        5. check for misplaced nodes

        """
        # TODO: is ValueError the proper exception to raise? Should
        # we make a new exception ("ConsistencyException")?

        # TODO: many of these for loops can be replaced by list
        # comprehension; however the errors currently report the exact
        # condition that fails. Using list comprehension would allow
        # us to report which check fails, but not which node/hyperedge
        # id/etc.x

        self._check_hyperedge_attributes_consistency()
        self._check_node_attributes_consistency()
        self._check_predecessor_successor_consistency()
        self._check_hyperedge_id_consistency()
        self._check_node_consistency()