
    .Ph                    n    d Z ddlmZ ddlmZmZ ddlmZ erddlm	Z	 ddlm
Z
 ddZddZddZddZdS )zM
Routines for obtaining the class names
of an object and its parent classes.
    )annotations)TYPE_CHECKINGcast)unique_everseen)Iterator)Anyctype[object]returnlist[type[Any]]c                :    |                                  dd         S )zt
    return a tuple of all base classes the class c has as a parent.
    >>> object in all_bases(list)
    True
       Nmror	   s    W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jaraco/classes/ancestry.py	all_basesr      s     5577122;    c                *    |                                  S )ze
    return a tuple of all classes to which c belongs
    >>> list in all_classes(list)
    True
    r   r   s    r   all_classesr      s     5577Nr   clsIterator[type[Any]]c                :    t          t          |                     S )a:  
    Generator over all subclasses of a given class, in depth-first order.

    >>> bool in list(iter_subclasses(int))
    True
    >>> class A(object): pass
    >>> class B(A): pass
    >>> class C(A): pass
    >>> class D(B,C): pass
    >>> class E(D): pass
    >>>
    >>> for cls in iter_subclasses(A):
    ...     print(cls.__name__)
    B
    D
    E
    C
    >>> # get ALL classes currently defined
    >>> res = [cls.__name__ for cls in iter_subclasses(object)]
    >>> 'type' in res
    True
    >>> 'tuple' in res
    True
    >>> len(res) > 100
    True
    )r   _iter_all_subclasses)r   s    r   iter_subclassesr   '   s    6 /44555r   c              #     K   	 |                                  }n3# t          $ r& t          d|                                |           }Y nw xY w|D ]}|V  t          |          E d {V  d S )Nz
type[type])__subclasses__	TypeErrorr   r   )r   subssubs      r   r   r   E   s      ;!!## ; ; ;L#&&55c::; ( (			"3''''''''''( (s    -A	A	N)r	   r
   r   r   )r   r
   r   r   )__doc__
__future__r   typingr   r   more_itertoolsr   collections.abcr   r   r   r   r   r    r   r   <module>r'      s    
 # " " " " " & & & & & & & & * * * * * * ((((((      6 6 6 6<( ( ( ( ( (r   