docs: 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()