o
    JAf2                     @   s*   d dl Z d dlZG dd dee jjZdS )    Nc                   @   s6   e Zd ZdZdd Zdd ZejZdd Z	dd	 Z
d
S )	DictStacka  
    A stack of dictionaries that behaves as a view on those dictionaries,
    giving preference to the last.

    >>> stack = DictStack([dict(a=1, c=2), dict(b=2, a=2)])
    >>> stack['a']
    2
    >>> stack['b']
    2
    >>> stack['c']
    2
    >>> len(stack)
    3
    >>> stack.push(dict(a=3))
    >>> stack['a']
    3
    >>> set(stack.keys()) == set(['a', 'b', 'c'])
    True
    >>> set(stack.items()) == set([('a', 3), ('b', 2), ('c', 2)])
    True
    >>> dict(**stack) == dict(stack) == dict(a=3, c=2, b=2)
    True
    >>> d = stack.pop()
    >>> stack['a']
    2
    >>> d = stack.pop()
    >>> stack['a']
    1
    >>> stack.get('b', None)
    >>> 'c' in stack
    True
    c                 C   s(   t | }tttjdd |D S )Nc                 s   s    | ]}|  V  qd S N)keys).0c r   G/usr/lib/python3.10/site-packages/setuptools/_distutils/_collections.py	<genexpr>*   s    z%DictStack.__iter__.<locals>.<genexpr>)list__iter__iterset	itertoolschainfrom_iterable)selfZdictsr   r   r   r   (   s   
zDictStack.__iter__c                 C   s4   t tt| D ]}||v r||   S q	t|r   )reversedtupler
   r   KeyError)r   keyscoper   r   r   __getitem__,   s
   zDictStack.__getitem__c                 C   s   t jj| |S r   )collectionsabcMapping__contains__)r   otherr   r   r   r   4      zDictStack.__contains__c                 C   s   t tt| S r   )lenr
   r   )r   r   r   r   __len__7   r   zDictStack.__len__N)__name__
__module____qualname____doc__r   r   r
   appendpushr   r   r   r   r   r   r      s    !r   )r   r   r
   r   r   r   r   r   r   r   <module>   s    