
    jker	                     $    d Z dgZ G d de      Zy)zMisc dict tools.hashdictc                   R    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)r   a<  
    hashable dict implementation, suitable for use as a key into
    other dicts.

        >>> h1 = hashdict({"apples": 1, "bananas":2})
        >>> h2 = hashdict({"bananas": 3, "mangoes": 5})
        >>> h1+h2
        hashdict(apples=1, bananas=3, mangoes=5)
        >>> d1 = {}
        >>> d1[h1] = "salad"
        >>> d1[h1]
        'salad'
        >>> d1[h2]
        Traceback (most recent call last):
        ...
        KeyError: hashdict(bananas=3, mangoes=5)

    based on answers from
       http://stackoverflow.com/questions/1151658/python-hashable-dicts

    c                 F    t        t        | j                                     S N)tuplesorteditemsselfs    :/usr/lib/python3/dist-packages/fontTools/misc/dictTools.py__keyzhashdict.__key   s    VDJJL)**    c                     dj                  | j                  j                  dj                  d | j	                         D                    S )Nz{0}({1})z, c              3   p   K   | ].  }d j                  t        |d         t        |d                0 yw)z{0}={1}       N)formatstrrepr).0is     r   	<genexpr>z$hashdict.__repr__.<locals>.<genexpr>%   s-     T!i&&s1Q4y$qt*=Ts   46)r   	__class____name__join_hashdict__keyr	   s    r   __repr__zhashdict.__repr__"   s:      NN##IITtzz|TT
 	
r   c                 4    t        | j                               S r   )hashr   r	   s    r   __hash__zhashdict.__hash__(   s    DJJL!!r   c                 ^    t        dj                  | j                  j                              Nz${0} does not support item assignment	TypeErrorr   r   r   )r
   keyvalues      r   __setitem__zhashdict.__setitem__+   '    299$..:Q:QR
 	
r   c                 ^    t        dj                  | j                  j                              r!   r"   )r
   r$   s     r   __delitem__zhashdict.__delitem__0   r'   r   c                 ^    t        dj                  | j                  j                              r!   r"   r	   s    r   clearzhashdict.clear5   r'   r   c                 ^    t        dj                  | j                  j                              r!   r"   r
   argskwargss      r   popzhashdict.pop:   r'   r   c                 ^    t        dj                  | j                  j                              r!   r"   r-   s      r   popitemzhashdict.popitem?   r'   r   c                 ^    t        dj                  | j                  j                              r!   r"   r-   s      r   
setdefaultzhashdict.setdefaultD   r'   r   c                 ^    t        dj                  | j                  j                              r!   r"   r-   s      r   updatezhashdict.updateI   r'   r   c                 H    t        |       }t        j                  ||       |S r   )r   dictr6   )r
   rightresults      r   __add__zhashdict.__add__Q   s    $FE"r   N)r   
__module____qualname____doc__r   r   r   r&   r)   r+   r0   r2   r4   r6   r;    r   r   r   r      s>    ,+
"












r   N)r>   __all__r8   r   r?   r   r   <module>rA      s     ,Lt Lr   