B
    V!                 @   s   d dl mZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ dd Zdd ZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZdS )    )defaultdict)merge
merge_withvalmapkeymap	update_inassocdissoc	keyfilter	valfilteritemmap
itemfilterassoc_in)raises)PY3c             C   s   | d S )N    )xr   r   9lib/python3.7/site-packages/toolz/tests/test_dicttoolz.pyinc	   s    r   c             C   s   | d dkS )N   r   r   )ir   r   r   iseven   s    r   c               @   s   e Zd ZdZeZi Zdd Zdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd S )!TestDictzTest typical usage: dict inputs, no factory keyword.

    Class attributes:
        D: callable that inputs a dict and creates or returns a MutableMapping
        kw: kwargs dict to specify "factory" keyword (if applicable)
    c             C   sF   | j | j }}t|ddd|ddif||ddddksBtd S )Nr   r   )r   r         )r   r   r   )Dkwr   AssertionError)selfr   r   r   r   r   
test_merge   s    zTestDict.test_mergec             C   sH   | j | j }}t|ddd|ddigf||ddddksDtd S )Nr   r   )r   r   r   r   )r   r   r   )r   r   r   r   )r   r   r   r   r   r   test_merge_iterable_arg   s    z TestDict.test_merge_iterable_argc             C   s   | j | j }}|ddd|dddf}ttf|||dddksLtttf|||dd	dksnt|ddd
d|dddf}ttf|||ddd
dkstttf|||dd	ddkstttrtd S )Nr   r   )r   r   
            )r   r"   )r   r#   r   )r   r   r   )r   )r   r   r   sumr   tuple)r   r   r   dictsr   r   r   test_merge_with#   s    ""$$zTestDict.test_merge_withc             C   s   | j | j }}|ddd|dddf}ttf|||dddksLttt|f||dddksltttt|f||dddkstd S )Nr   r   )r   r   r"   r#   r$   r%   )r   r   r   r&   r   iter)r   r   r   r(   r   r   r   test_merge_with_iterable_arg/   s
    " z%TestDict.test_merge_with_iterable_argc             C   s<   | j | j }}tt|dddf||dddks8td S )Nr   r   )r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   test_valmap6   s    zTestDict.test_valmapc             C   s<   | j | j }}tt|dddf||dddks8td S )Nr   r   )r   r   )r   r   )r   r   r   r   r   )r   r   r   r   r   r   test_keymap:   s    zTestDict.test_keymapc             C   s<   | j | j }}tt|dddf||dddks8td S )Nr   r   )r   r   r   )r   r   )r   r   r   reversedr   )r   r   r   r   r   r   test_itemmap>   s    zTestDict.test_itemmapc             C   s:   | j | j }}tt|dddf||ddiks6td S )Nr   r   )r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   test_valfilterB   s    zTestDict.test_valfilterc             C   s:   | j | j }}tt|dddf||ddiks6td S )Nr   r   )r   r   )r   r   r
   r   r   )r   r   r   r   r   r   test_keyfilterF   s    zTestDict.test_keyfilterc             C   sj   | j | j }}tdd |dddf||ddiks:ttdd |dddf||ddiksftd S )Nc             S   s   t | d S )Nr   )r   )itemr   r   r   <lambda>L   s    z*TestDict.test_itemfilter.<locals>.<lambda>r   r   )r   r   c             S   s   t | d S )Nr   )r   )r2   r   r   r   r3   M   s    r   )r   r   r   r   )r   r   r   r   r   r   test_itemfilterJ   s    ,zTestDict.test_itemfilterc             C   s   | j | j }}t|i ddf||ddiks2tt|ddiddf||ddiksZtt|ddiddf||dddkst|ddi}|}t|ddf| ||kstd S )Nar   r   b)r5   r6   r   r   )r   r   r   r   )r   r   r   dolddr   r   r   
test_assocO   s    $(*zTestDict.test_assocc             C   s   | j | j }}t|ddid|i ks,tt|dddd|ddiksPtt|dddd|ddiksttt|ddddd|i kstt|ddidtt|ddiddkst|ddi}|}t|d}||kst||k	std S )Nr5   r   r   )r5   r6   r6   r   )r   r   r	   r   )r   r   r   r7   r8   d2r   r   r   test_dissoc[   s    $$".
zTestDict.test_dissocc             C   s   | j | j }}t|ddidgdf||ddiks8tt|d|ddiiddgdf||d|ddiiksttt|i ddgdf||d|ddiikst|ddi}|}t|dgdf|}||kst||k	std S )Nr5   r   r   r6   r   )r   r   r   r   )r   r   r   r7   r8   r:   r   r   r   test_assoc_inj   s    *"0zTestDict.test_assoc_inc          	   C   s  | j | j }}t|ddidgtf||ddiks8tt|ddddgtf||dddksftt|d|ddidddgtf||d|ddidkstt|i d	gtd f||d	d
ikstt|i d	gtdf||d	dikstt|i d	gdd fddi||d	diks*tt|i ddgtfddi||d|ddiiksdtt|i ddgtfddi||d|ddiikstt|ddddddgtdf||dd|d|ddiidkst|ddi}|}t|dgtf| ||kstd S )Nr5   r   r   )r5   r6   r6   1)tvr?   zNonec             S   s   | d S )NZarr   )r   r   r   r   r3      s    z)TestDict.test_update_in.<locals>.<lambda>defaultZbard   Z1002   )foor   r7   r#   Z20)rF   r   r7   r   )r   r   r   r   r   str)r   r   r   r7   r8   r   r   r   test_update_inx   s     *.$((4:: (zTestDict.test_update_inc                s   | j | j  }ttt ddi ddidddks<tttt ddi ddidd dtt dddks|tttt ddi ddidd ddddkrttt fd	dstd S )
Nr   r   r   )r   r   c               S   s   t tS )N)r   intr   r   r   r   r3      s    z'TestDict.test_factory.<locals>.<lambda>)factoryc               S   s   t tS )N)r   rI   r   r   r   r   r3      s    c                  s   t  ddi dditdS )Nr   r   r   )Zfactoryy)r   dictr   )r   r   r   r3      s    )r   r   r   r   rI   r   r   	TypeError)r   r   r   )r   r   test_factory   s    .
zTestDict.test_factoryN)__name__
__module____qualname____doc__rK   r   r   r    r!   r)   r+   r,   r-   r/   r0   r1   r4   r9   r;   r<   rH   rM   r   r   r   r   r      s$   r   c                   s   e Zd Z fddZ  ZS )r   c                s&   t t| |o$t|to$| j|jkS )N)superr   __eq__
isinstance_defaultdictdefault_factory)r   other)	__class__r   r   rS      s    
zdefaultdict.__eq__)rN   rO   rP   rS   __classcell__r   r   )rX   r   r      s   r   c               @   s(   e Zd ZdZedd Zddd iZdS )TestDefaultDictzTest defaultdict as input and factory

    Class attributes:
        D: callable that inputs a dict and creates or returns a MutableMapping
        kw: kwargs dict to specify "factory" keyword (if applicable)
    c             C   s
   t t| S )N)r   rI   )Zdict_r   r   r   r      s    zTestDefaultDict.DrJ   c               C   s   t tS )N)r   rI   r   r   r   r   r3      s    zTestDefaultDict.<lambda>N)rN   rO   rP   rQ   staticmethodr   r   r   r   r   r   rZ      s   rZ   c               @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zesdd Zdd Zd d! Zd"S )#CustomMappingzCDefine methods of the MutableMapping protocol required by dicttoolzc             O   s   t ||| _d S )N)rK   _d)r   argskwargsr   r   r   __init__   s    zCustomMapping.__init__c             C   s
   | j | S )N)r]   )r   keyr   r   r   __getitem__   s    zCustomMapping.__getitem__c             C   s   || j |< d S )N)r]   )r   ra   valr   r   r   __setitem__   s    zCustomMapping.__setitem__c             C   s   | j |= d S )N)r]   )r   ra   r   r   r   __delitem__   s    zCustomMapping.__delitem__c             C   s
   t | jS )N)r*   r]   )r   r   r   r   __iter__   s    zCustomMapping.__iter__c             C   s
   t | jS )N)lenr]   )r   r   r   r   __len__   s    zCustomMapping.__len__c             C   s
   || j kS )N)r]   )r   ra   r   r   r   __contains__   s    zCustomMapping.__contains__c             C   s   t |to| j|jkS )N)rT   r\   r]   )r   rW   r   r   r   rS      s    zCustomMapping.__eq__c             C   s   t |t p| j|jkS )N)rT   r\   r]   )r   rW   r   r   r   __ne__   s    zCustomMapping.__ne__c             C   s
   | j  S )N)r]   keys)r   r   r   r   rk      s    zCustomMapping.keysc             C   s
   | j  S )N)r]   values)r   r   r   r   rl      s    zCustomMapping.valuesc             C   s
   | j  S )N)r]   items)r   r   r   r   rm      s    zCustomMapping.itemsc             O   s   | j j|| d S )N)r]   update)r   r^   r_   r   r   r   rn      s    zCustomMapping.updatec             C   s
   | j  S )N)r]   iterkeys)r   r   r   r   ro      s    zCustomMapping.iterkeysc             C   s
   | j  S )N)r]   
itervalues)r   r   r   r   rp      s    zCustomMapping.itervaluesc             C   s
   | j  S )N)r]   	iteritems)r   r   r   r   rq      s    zCustomMapping.iteritemsN)rN   rO   rP   rQ   r`   rb   rd   re   rf   rh   ri   rS   rj   rk   rl   rm   rn   r   ro   rp   rq   r   r   r   r   r\      s$   r\   c               @   s    e Zd ZdZeZddd iZdS )TestCustomMappingzTest CustomMapping as input and factory

    Class attributes:
        D: callable that inputs a dict and creates or returns a MutableMapping
        kw: kwargs dict to specify "factory" keyword (if applicable)
    rJ   c               C   s   t  S )N)r\   r   r   r   r   r3      s    zTestCustomMapping.<lambda>N)rN   rO   rP   rQ   r\   r   r   r   r   r   r   rr      s   rr   N)collectionsr   rU   Ztoolz.dicttoolzr   r   r   r   r   r   r	   r
   r   r   r   r   Ztoolz.utilsr   Ztoolz.compatibilityr   r   r   objectr   rZ   r\   rr   r   r   r   r   <module>   s   8 
E