code: def execute_operation(exe_context, operation, root_value):
      type = get_operation_root_type(exe_context.schema, operation)
      fields = collect_fields(
          exe_context,
          type,
          operation.selection_set,
          DefaultOrderedDict(list),
          set(),
      )
  
      if operation.operation == "mutation":
          return execute_fields_serially(
              exe_context, type, root_value, fields
          )
  
      return execute_fields(exe_context, type, root_value, fields)
  
imports: import collections
  from collections.abc import Iterable
  import functools
  import logging
  import sys
  from wandb_promise import Promise, promise_for_dict, is_thenable
  from ..error import GraphQLError, GraphQLLocatedError
  from ..pyutils.default_ordered_dict import DefaultOrderedDict
  from ..pyutils.ordereddict import OrderedDict
  from ..type import GraphQLEnumType, GraphQLInterfaceType, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLScalarType, GraphQLSchema, GraphQLUnionType
  from .base import ExecutionContext, ExecutionResult, ResolveInfo, Undefined, collect_fields, default_resolve_fn, get_field_def, get_operation_root_type
  from .executors.sync import SyncExecutor
  from .experimental.executor import execute
  from .middleware import MiddlewareManager
label_desc: Use image node_id 2 for calling a global function with example usage: execute_operation(exe_context, operation, root_value) and returns: execute_fields, execute_fields_serially