code: def find_submodule(self, module_name):
      entry = self.entries.get(module_name, None)
      if not entry:
          self.load_cythonscope()
          entry = self.entries.get(module_name, None)
  
      if entry and entry.as_module:
          return entry.as_module
      else:
          # TODO: fix find_submodule control flow so that we're not
          # expected to create a submodule here (to protect CythonScope's
          # possible immutability). Hack ourselves out of the situation
          # for now.
          raise error(
              (StringSourceDescriptor("cython", ""), 0, 0),
              "cython.%s is not available" % module_name,
          )
  
file_path: catboost/contrib/tools/cython/Cython/Compiler/CythonScope.py
imports: from __future__ import absolute_import
  from .Symtab import ModuleScope
  from .PyrexTypes import *
  from .UtilityCode import CythonUtilityCode
  from .Errors import error
  from .Scanning import StringSourceDescriptor
  from .None import MemoryView
label_desc: Use image node_id 6 for calling the CythonScope obj's underlying member method code with example usage: obj.find_submodule(module_name) and returns: entry