code: def test_getqualifiedname_cycles(self):
      foo = object()
  
      # We create a graph of modules that contains circular references. The
      # search process should avoid them. The searched object is hidden at the
      # bottom of a path of length roughly 10.
      ns = {}
      mods = []
      for i in range(10):
          mod = types.ModuleType("mod_{}".format(i))
          if i == 9:
              mod.foo = foo
          # Module i refers to module i+1
          if mods:
              mods[-1].__dict__[mod.__name__] = mod
          else:
              ns[mod.__name__] = mod
          # Module i refers to all modules j < i.
          for prev in mods:
              mod.__dict__[prev.__name__] = prev
          mods.append(mod)
  
      self.assertIsNone(
          inspect_utils.getqualifiedname(ns, inspect_utils)
      )
      self.assertIsNotNone(
          inspect_utils.getqualifiedname(ns, foo, max_depth=10000000000)
      )
  
imports: import abc
  import collections
  import functools
  import textwrap
  import types
  from tensorflow.python import lib
  from tensorflow.python.autograph.pyct import inspect_utils
  from tensorflow.python.autograph.pyct.testing import basic_definitions
  from tensorflow.python.autograph.pyct.testing import decorators
  from tensorflow.python.framework import constant_op
  from tensorflow.python.platform import test
label_desc: Use image node_id 19 for calling the InspectUtilsTest obj's underlying member method code with example usage: obj.test_getqualifiedname_cycles() without return types