code: def _walk_depth(
          self,
          fs,  # type: FS
          path,  # type: Text
          namespaces=None,  # type: Optional[Collection[Text]]
      ):
          # type: (...) -> Iterator[Tuple[Text, Optional[Info]]]
          
          # No recursion!
  
          _combine = combine
          _scan = self._scan
          _calculate_depth = self._calculate_depth
          _check_open_dir = self._check_open_dir
          _check_scan_dir = self._check_scan_dir
          _check_file = self.check_file
          depth = _calculate_depth(path)
  
          stack = [
              (path, _scan(fs, path, namespaces=namespaces), None)
          ]  # type: List[Tuple[Text, Iterator[Info], Optional[Tuple[Text, Info]]]]
  
          push = stack.append
  
          while stack:
              dir_path, iter_files, parent = stack[-1]
              info = next(iter_files, None)
              if info is None:
                  if parent is not None:
                      yield parent
                  yield dir_path, None
                  del stack[-1]
              elif info.is_dir:
                  _depth = _calculate_depth(dir_path) - depth + 1
                  if _check_open_dir(fs, dir_path, info):
                      if _check_scan_dir(fs, dir_path, info, _depth):
                          _path = _combine(dir_path, info.name)
                          push(
                              (
                                  _path,
                                  _scan(fs, _path, namespaces=namespaces),
                                  (dir_path, info),
                              )
                          )
                      else:
                          yield dir_path, info
              else:
                  if _check_file(fs, info):
                      yield dir_path, info
docs: Walk files using a *depth first* search.