docs: 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__(uri, fromlist=[uri])
          # 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]
              # figure out if obj is a function or class
              if hasattr(obj, 'func_name') or \
                 isinstance(obj, BuiltinFunctionType):
                  functions.append(obj_str)
              else:
                  try:
                      issubclass(obj, object)
                      classes.append(obj_str)
                  except TypeError:
                      # not a function or class
                      pass
          return functions, classes