docstr: Find tests for the given object and any contained objects, and
  add them to `tests`.
docstr_tok: ["Find","tests","for","the","given","object","and","any","contained","objects",",","and","add","them","to","`","tests","`","."]
code: def _find(self, tests, obj, name, module, source_lines, globs, seen):
      """
      Find tests for the given object and any contained objects, and
      add them to `tests`.
      """
      print("_find for:", obj, name, module)  # dbg
      if hasattr(obj, "skip_doctest"):
          # print 'SKIPPING DOCTEST FOR:',obj  # dbg
          obj = DocTestSkip(obj)
  
      doctest.DocTestFinder._find(
          self, tests, obj, name, module, source_lines, globs, seen
      )
  
      # Below we re-run pieces of the above method with manual modifications,
      # because the original code is buggy and fails to correctly identify
      # doctests in extension modules.
  
      # Local shorthands
      from inspect import isroutine, isclass
  
      # Look for tests in a module's contained objects.
      if inspect.ismodule(obj) and self._recurse:
          for valname, val in obj.__dict__.items():
              valname1 = "%s.%s" % (name, valname)
              if (isroutine(val) or isclass(val)) and self._from_module(
                  module, val
              ):
                  self._find(
                      tests,
                      val,
                      valname1,
                      module,
                      source_lines,
                      globs,
                      seen,
                  )
  
      # Look for tests in a class's contained objects.
      if inspect.isclass(obj) and self._recurse:
          # print 'RECURSE into class:',obj  # dbg
          for valname, val in obj.__dict__.items():
              # Special handling for staticmethod/classmethod.
              if isinstance(val, staticmethod):
                  val = getattr(obj, valname)
              if isinstance(val, classmethod):
                  val = getattr(obj, valname).__func__
  
              # Recurse to methods, properties, and nested classes.
              if (
                  inspect.isfunction(val)
                  or inspect.isclass(val)
                  or inspect.ismethod(val)
                  or isinstance(val, property)
              ) and self._from_module(module, val):
                  valname = "%s.%s" % (name, valname)
                  self._find(
                      tests,
                      val,
                      valname,
                      module,
                      source_lines,
                      globs,
                      seen,
                  )
  
imports: import doctest
  import inspect
  import logging
  import os
  import re
  import sys
  from testpath import modified_env
  from inspect import getmodule
  from doctest import REPORTING_FLAGS, REPORT_ONLY_FIRST_FAILURE, _unittest_reportflags, DocTestRunner, _extract_future_flags, pdb, _OutputRedirectingPdb, _exception_traceback, linecache
  from nose.plugins import doctests, Plugin
  from nose.util import anyp, tolist
  from IPython.utils.py3compat import builtin_mod, PY3, getcwd
label_desc: Use image node_id 2 for calling the DocTestFinder obj's underlying member method code with example usage: obj._find(tests, obj, name, module, source_lines, globs, seen) without return types