docs: def _identifier_filtered_iterator(graph):
      """Iterate over names in the given namespace."""
      for data in graph:
          for pair in _get_node_names(data):
              yield pair
  
          for member in data.get(MEMBERS, []):
              for pair in _get_node_names(member):
                  yield pair
  
      for ((_, _, data), side) in itt.product(graph.edges(data=True), (SUBJECT, OBJECT)):
          side_data = data.get(side)
          if side_data is None:
              continue
  
          modifier = side_data.get(MODIFIER)
          effect = side_data.get(EFFECT)
  
          if modifier == ACTIVITY and effect is not None and NAMESPACE in effect and NAME in effect:
              yield effect[NAMESPACE], effect[NAME]
  
          elif modifier == TRANSLOCATION and effect is not None:
              from_loc = effect.get(FROM_LOC)
              if NAMESPACE in from_loc and NAME in from_loc:
                  yield from_loc[NAMESPACE], from_loc[NAME]
  
              to_loc = effect.get(TO_LOC)
              if NAMESPACE in to_loc and NAME in to_loc:
                  yield to_loc[NAMESPACE], to_loc[NAME]
  
          location = side_data.get(LOCATION)
          if location is not None and NAMESPACE in location and NAME in location:
              yield location[NAMESPACE], location[NAME]