'Find tests for the given object and any contained objects, and
add them to `tests`.'

def _find(self, tests, obj, name, module, source_lines, globs, seen):

    print ('_find    for:', obj, name, module)
    if hasattr(obj, 'skip_doctest'):
        obj = DocTestSkip(obj)
    doctest.DocTestFinder._find(self, tests, obj, name, module, source_lines, globs, seen)
    from inspect import isroutine, isclass
    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)
    if (inspect.isclass(obj) and self._recurse):
        for (valname, val) in obj.__dict__.items():
            if isinstance(val, staticmethod):
                val = getattr(obj, valname)
            if isinstance(val, classmethod):
                val = getattr(obj, valname).__func__
            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)
