docs: def iter_subclasses(class_):
      """Iterate over all the subclasses (and subclasses thereof, etc.)
      of given class.
  
      :param class_: Class to yield the subclasses of
      :return: Iterable of subclasses, sub-subclasses, etc. of ``class_``
      """
      ensure_class(class_)
  
      classes = set()
  
      def descend(class_):
          subclasses = set(class_.__subclasses__()) - classes
          classes.update(subclasses)
          return subclasses
  
      result = breadth_first(class_, descend)
      next(result)  # omit ``class_`` itself
      return result