a
    ,º]  ã                   @   sf   d Z ddlZddlmZ ddlmZ eZejdd… Z	G dd„ de
ƒZG dd	„ d	eeeƒƒZd	gZdS )
aã  
A dict subclass for Python 2 that behaves like Python 3's dict

Example use:

>>> from builtins import dict
>>> d1 = dict()    # instead of {} for an empty dict
>>> d2 = dict(key1='value1', key2='value2')

The keys, values and items methods now return iterators on Python 2.x
(with set-like behaviour on Python 2.7).

>>> for d in (d1, d2):
...     assert not isinstance(d.keys(), list)
...     assert not isinstance(d.values(), list)
...     assert not isinstance(d.items(), list)
é    N)Úwith_metaclass)Ú	newobjecté   c                   @   s   e Zd Zdd„ ZdS )ÚBaseNewDictc                 C   s"   | t krt|tƒS t|j| ƒS d S )N)ÚnewdictÚ
isinstanceÚ_builtin_dictÚ
issubclassÚ	__class__)ÚclsÚinstance© r   úe/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/site-packages/future/types/newdict.pyÚ__instancecheck__   s    
zBaseNewDict.__instancecheck__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   r   c                       s@   e Zd ZdZdd„ Zdd„ Zdd„ Z‡ fdd	„Zd
d„ Z‡  Z	S )r   z7
    A backport of the Python 3 dict object to Py2
    c                 C   s4   t dkr|  ¡ S t dkr |  ¡ S t dkr0|  ¡ S dS )zµ
        On Python 2.7+:
            D.items() -> a set-like object providing a view on D's items
        On Python 2.6:
            D.items() -> an iterator over D's items
        ©r   é   ©r   é   ©é   r   N)ÚverZ	viewitemsÚ	iteritemsÚitems©Úselfr   r   r   r   )   s    znewdict.itemsc                 C   s4   t dkr|  ¡ S t dkr |  ¡ S t dkr0|  ¡ S dS )z±
        On Python 2.7+:
            D.keys() -> a set-like object providing a view on D's keys
        On Python 2.6:
            D.keys() -> an iterator over D's keys
        r   r   r   N)r   ZviewkeysÚiterkeysÚkeysr   r   r   r   r   7   s    znewdict.keysc                 C   s4   t dkr|  ¡ S t dkr |  ¡ S t dkr0|  ¡ S dS )z¹
        On Python 2.7+:
            D.values() -> a set-like object providing a view on D's values
        On Python 2.6:
            D.values() -> an iterator over D's values
        r   r   r   N)r   Z
viewvaluesZ
itervaluesÚvaluesr   r   r   r   r    E   s    znewdict.valuesc                    sP   t |ƒdkrtt| ƒ | ¡S t|d ƒtkr6|d }n|d }tt| ƒ | |¡S )aÄ  
        dict() -> new empty dictionary
        dict(mapping) -> new dictionary initialized from a mapping object's
            (key, value) pairs
        dict(iterable) -> new dictionary initialized as if via:
            d = {}
            for k, v in iterable:
                d[k] = v
        dict(**kwargs) -> new dictionary initialized with the name=value pairs
            in the keyword argument list.  For example:  dict(one=1, two=2)
        r   )ÚlenÚsuperr   Ú__new__Útype)r   ÚargsÚkwargsÚvalue©r
   r   r   r#   S   s    
znewdict.__new__c                 C   s   t | ƒS )z=
        Hook for the future.utils.native() function
        )Údictr   r   r   r   Ú
__native__h   s    znewdict.__native__)
r   r   r   Ú__doc__r   r   r    r#   r*   Ú__classcell__r   r   r(   r   r   %   s   r   )r+   ÚsysZfuture.utilsr   Zfuture.types.newobjectr   r)   r   Úversion_infor   r$   r   r   Ú__all__r   r   r   r   Ú<module>   s   J