
    '<i                    \    d Z ddlmZ ddlmZ erddlmZ  G d de      Z G d de      Zy	)
z#
meta.py

Some useful metaclasses.
    )annotations)TYPE_CHECKING)Anyc                  4    e Zd ZU dZded<   	 	 	 	 	 	 	 	 ddZy)LeafClassesMetaa  
    A metaclass for classes that keeps track of all of them that
    aren't base classes.

    >>> Parent = LeafClassesMeta('MyParentClass', (), {})
    >>> Parent in Parent._leaf_classes
    True
    >>> Child = LeafClassesMeta('MyChildClass', (Parent,), {})
    >>> Child in Parent._leaf_classes
    True
    >>> Parent in Parent._leaf_classes
    False

    >>> Other = LeafClassesMeta('OtherClass', (), {})
    >>> Parent in Other._leaf_classes
    False
    >>> len(Other._leaf_classes)
    1
    zset[type[Any]]_leaf_classesc                    t        | d      st               | _        t        | d      }|j	                  |        |t        |      z  }y )Nr   )hasattrsetr   getattradd)clsnamebasesattrsleaf_classess        y/home/jay/workspace/.worktrees/task-2057-dev2/scripts/.codegraph-venv/lib/python3.12/site-packages/jaraco/classes/meta.py__init__zLeafClassesMeta.__init__&   s@     sO, #CsO4E
"    N)r   strr   tuple[type[object], ...]r   dict[str, object]returnNone)__name__
__module____qualname____doc____annotations__r    r   r   r   r      s:    ( "!## (# !	#
 
#r   r   c                  8     e Zd ZdZdZ	 	 	 	 	 	 	 	 d fdZ xZS )TagRegisteredaY  
    As classes of this metaclass are created, they keep a registry in the
    base class of all classes by a class attribute, indicated by attr_name.

    >>> FooObject = TagRegistered('FooObject', (), dict(tag='foo'))
    >>> FooObject._registry['foo'] is FooObject
    True
    >>> BarObject = TagRegistered('Barobject', (FooObject,), dict(tag='bar'))
    >>> FooObject._registry is BarObject._registry
    True
    >>> len(FooObject._registry)
    2

    '...' below should be 'jaraco.classes' but for pytest-dev/pytest#3396
    >>> FooObject._registry['bar']
    <class '....meta.Barobject'>
    tagc                    t         t        |   |||       t        | d      si | _        | j
                  }t        | |j                  d       }|r| | j                  |<   y y )N	_registry)superr"   r   r
   r%   	__class__r   	attr_name)r   r   r   	namespacemetaattrr'   s         r   r   zTagRegistered.__init__I   sZ     	mS*4	BsK(CM}}sDNND1"%CMM$ r   )r   r   r   r   r)   r   r   r   )r   r   r   r   r(   r   __classcell__)r'   s   @r   r"   r"   4   s?    $ I&& (& %	&
 
& &r   r"   N)	r   
__future__r   typingr   r   typer   r"   r    r   r   <module>r0      s1    #  "#d "#J!&D !&r   