code: def find_spanning_type(type1, type2):
      if type1 is type2:
          result_type = type1
      elif (
          type1 is PyrexTypes.c_bint_type
          or type2 is PyrexTypes.c_bint_type
      ):
          # type inference can break the coercion back to a Python bool
          # if it returns an arbitrary int type here
          return py_object_type
      else:
          result_type = PyrexTypes.spanning_type(type1, type2)
      if result_type in (
          PyrexTypes.c_double_type,
          PyrexTypes.c_float_type,
          Builtin.float_type,
      ):
          # Python's float type is just a C double, so it's safe to
          # use the C type instead
          return PyrexTypes.c_double_type
      return result_type
  
imports: from __future__ import absolute_import
  from .Errors import error, message
  from .None import ExprNodes
  from .None import Nodes
  from .None import Builtin
  from .None import PyrexTypes
  from ..None import Utils
  from .PyrexTypes import py_object_type, unspecified_type
  from .Visitor import CythonTransform, EnvTransform
label_desc: Use image node_id 1 for calling a global function with example usage: find_spanning_type(type1, type2) and returns: result_type, PyrexTypes, py_object_type