code: def complete_abstract_value(
      exe_context, return_type, field_asts, info, result
  ):
      """
      Complete an value of an abstract type by determining the runtime type of that value, then completing based
      on that type.
      """
      runtime_type = None
  
      # Field type must be Object, Interface or Union and expect sub-selections.
      if isinstance(
          return_type, (GraphQLInterfaceType, GraphQLUnionType)
      ):
          if return_type.resolve_type:
              runtime_type = return_type.resolve_type(
                  result, exe_context.context_value, info
              )
          else:
              runtime_type = get_default_resolve_type_fn(
                  result, exe_context.context_value, info, return_type
              )
  
      if isinstance(runtime_type, str):
          runtime_type = info.schema.get_type(runtime_type)
  
      if not isinstance(runtime_type, GraphQLObjectType):
          raise GraphQLError(
              (
                  "Abstract type {} must resolve to an Object type at runtime "
                  + 'for field {}.{} with value "{}", received "{}".'
              ).format(
                  return_type,
                  info.parent_type,
                  info.field_name,
                  result,
                  runtime_type,
              ),
              field_asts,
          )
  
      if not exe_context.schema.is_possible_type(
          return_type, runtime_type
      ):
          raise GraphQLError(
              'Runtime Object type "{}" is not a possible type for "{}".'.format(
                  runtime_type, return_type
              ),
              field_asts,
          )
  
      return complete_object_value(
          exe_context, runtime_type, field_asts, info, result
      )
  
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 11 for calling a global function with example usage: complete_abstract_value(exe_context, return_type, field_asts, info, result) and returns: complete_object_value