class_docstr: Automatic detection and parsing of API docs to Sphinx-parsable reST
  format.
docstr: Look for functions and classes in an importable module.
  
  Parameters
  ----------
  uri : str
      The name of the module to be parsed. This module needs to be
      importable.
  
  Returns
  -------
  functions : list of str
      A list of (public) function names in the module.
  classes : list of str
      A list of (public) class names in the module.
docstr_tok: ["Look","for","functions","and","classes","in","an","importable","module",".","Parameters","--","--","--","--","--","uri",":","str","The","name","of","the","module","to","be","parsed",".","This","module","needs","to","be","importable",".","Returns","--","--","--","-","functions",":","list","of","str","A","list","of","(","public",")","function","names","in","the","module",".","classes",":","list","of","str","A","list","of","(","public",")","class","names","in","the","module","."]
code: def _parse_module_with_import(self, uri):
      """Look for functions and classes in an importable module.
  
      Parameters
      ----------
      uri : str
          The name of the module to be parsed. This module needs to be
          importable.
  
      Returns
      -------
      functions : list of str
          A list of (public) function names in the module.
      classes : list of str
          A list of (public) class names in the module.
      """
      mod = import_module(uri)
      patterns = "(?:{0})".format("|".join(self.object_skip_patterns))
      pat = re.compile(patterns)
  
      if mod.__file__.endswith(".py"):
          with open(mod.__file__, encoding="utf8") as fi:
              node = ast.parse(fi.read())
  
          functions = []
          classes = []
          for n in node.body:
              if not hasattr(n, "name"):
                  if not isinstance(n, ast.Assign):
                      continue
  
              if isinstance(n, ast.ClassDef):
                  if n.name.startswith("_") or pat.search(n.name):
                      continue
                  classes.append(n.name)
              elif isinstance(n, ast.FunctionDef):
                  if n.name.startswith("_") or pat.search(n.name):
                      continue
                  functions.append(n.name)
              # Specific condition for vtk and fury
              elif isinstance(n, ast.Assign):
                  try:
                      if isinstance(n.value, ast.Call):
                          if isinstance(n.targets[0], ast.Tuple):
                              continue
                          functions.append(n.targets[0].id)
                      elif hasattr(
                          n.value, "attr"
                      ) and n.value.attr.startswith("vtk"):
                          classes.append(n.targets[0].id)
                  except Exception:
                      print(mod.__file__)
                      print(n.lineno)
                      print(n.targets[0])
  
          return functions, classes
      else:
          # find all public objects in the module.
          obj_strs = [
              obj for obj in dir(mod) if not obj.startswith("_")
          ]
          functions = []
          classes = []
          for obj_str in obj_strs:
              # find the actual object from its string representation
              if obj_str not in mod.__dict__:
                  continue
              obj = mod.__dict__[obj_str]
              # Check if function / class defined in module
              if not self.other_defines and not getmodule(obj) == mod:
                  continue
              # figure out if obj is a function or class
              if (
                  hasattr(obj, "func_name")
                  or isinstance(obj, BuiltinFunctionType)
                  or ismethod(obj)
                  or isinstance(obj, FunctionType)
              ):
                  functions.append(obj_str)
              else:
                  try:
                      issubclass(obj, object)
                      classes.append(obj_str)
                  except TypeError:
                      # not a function or class
                      pass
          return functions, classes
  
imports: import ast
  import os
  import re
  from importlib import import_module
  from types import BuiltinFunctionType, FunctionType
  from inspect import ismethod, getmodule
label_desc: Use image node_id 9 for calling the ApiDocWriter obj's underlying member method code with example usage: obj._parse_module_with_import(uri) and returns: functions,  classes, functions,  classes