
    k7i                    ~    S r SSKJr  SSKJrJr  SSKJr  \(       a  SSKJ	r	  SSKJ
r
  SS jrSS jrSS	 jrSS
 jrg)zM
Routines for obtaining the class names
of an object and its parent classes.
    )annotations)TYPE_CHECKINGcast)unique_everseen)Iterator)Anyc                (    U R                  5       SS $ )zd
return a tuple of all base classes the class c has as a parent.
>>> object in all_bases(list)
True
   Nmrocs    Q/home/james-whalen/.local/lib/python3.13/site-packages/jaraco/classes/ancestry.py	all_basesr      s     55712;    c                "    U R                  5       $ )zU
return a tuple of all classes to which c belongs
>>> list in all_classes(list)
True
r   r   s    r   all_classesr      s     557Nr   c                *    [        [        U 5      5      $ )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)clss    r   iter_subclassesr   '   s    6 /455r   c              #     #     U R                  5       nU H  nUv   [        U5       S h  vN   M     g ! [         a    [        SU 5      R                  U 5      n NHf = f N47f)Nz
type[type])__subclasses__	TypeErrorr   r   )r   subssubs      r   r   r   E   sd     ;!!# 	"3'''   ;L#&55c:; 	(s/   A"5 A"A 	A"%AA"AA"N)r   type[object]returnzlist[type[Any]])r   r   r   zIterator[type[Any]])__doc__
__future__r   typingr   r   more_itertoolsr   collections.abcr   r   r   r   r   r    r   r   <module>r%      s2   
 # & *(6<(r   