code: def leave_SelectionSet(self, node, key, parent, path, ancestors):
      # Note: we validate on the reverse traversal so deeper conflicts will be
      # caught first, for correct calculation of mutual exclusivity and for
      # clearer error messages.
      # field_map = _collect_field_asts_and_defs(
      #     self.context,
      #     self.context.get_parent_type(),
      #     node
      # )
  
      # conflicts = _find_conflicts(self.context, False, field_map, self.compared_set)
      conflicts = _find_conflicts_within_selection_set(
          self.context,
          self._cached_fields_and_fragment_names,
          self._compared_fragments,
          self.context.get_parent_type(),
          node,
      )
  
      for (reason_name, reason), fields1, fields2 in conflicts:
          self.context.report_error(
              GraphQLError(
                  self.fields_conflict_message(reason_name, reason),
                  list(fields1) + list(fields2),
              )
          )
  
imports: import itertools
  from collections import OrderedDict
  from ...error import GraphQLError
  from ...language import ast
  from ...language.printer import print_ast
  from ...pyutils.pair_set import PairSet
  from ...type.definition import GraphQLInterfaceType, GraphQLList, GraphQLNonNull, GraphQLObjectType, get_named_type, is_leaf_type
  from ...utils.type_comparators import is_equal_type
  from ...utils.type_from_ast import type_from_ast
  from .base import ValidationRule
label_desc: Use image node_id 2 for calling the OverlappingFieldsCanBeMerged obj's underlying member method code with example usage: obj.leave_SelectionSet(node, key, parent, path, ancestors) without return types