U
    /en#                     @   s   d dl mZ d dlmZ d dl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d Zdd ZdS )    )defaultdict)MappingN)merge
merge_withvalmapkeymap	update_inassocdissoc	keyfilter	valfilteritemmap
itemfilterassoc_in)identity)raisesc                 C   s   | d S N    xr   r   >/tmp/pip-unpacked-wheel-zr66a21f/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 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   sumr%   tupler'   r#   r$   Z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%   iterr0   r   r   r   test_merge_with_iterable_arg1   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   test_valmap8   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   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   reversedr%   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   test_valfilterD   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   test_keyfilterH   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>N       z*TestDict.test_itemfilter.<locals>.<lambda>r   r   r   c                 S   s   t | d S r   r:   r;   r   r   r   r=   O   r>   r   )r#   r$   r   r%   r&   r   r   r   test_itemfilterL   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r@   rA   r   r   )r#   r$   r	   r%   r'   r#   r$   dolddr   r   r   
test_assocQ   s    $(*zTestDict.test_assocc                 C   s  | j | j }}t|ddidf||i ks0tt|ddddf||ddiksXtt|ddddf||ddikstt|dddddf||i kstt|ddidf|tt|ddidf|df|kst|ddi}|}t|df|}||kst||k	std S )Nr@   r   r   rB   rA   r   )r#   r$   r
   r%   r'   r#   r$   rD   rE   Z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 )Nr@   r   r   rA   r   )r#   r$   r   r%   rG   r   r   r   test_assoc_inl   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 )Nr@   r   r   rB   rA   1)tvrL   zNonec                 S   s   | d S )Narr   r   r   r   r   r=      r>   z)TestDict.test_update_in.<locals>.<lambda>defaultbard   Z1002   )foor   rD   r+   Z20)rU   r   rD   r   )r#   r$   r   r   r%   strrC   r   r   r   test_update_inz   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   c                   S   s   t tS Nr   intr   r   r   r   r=      r>   z'TestDict.test_factory.<locals>.<lambda>)factoryc                   S   s   t tS rX   rY   r   r   r   r   r=      r>   c                      s   t  ddi dditdS )Nr   r   r   )Zfactoryy)r   dictr   r#   r   r   r=      r>   )r#   r$   r   r   rZ   r%   r   	TypeError)r'   r$   r   r]   r   test_factory   s    .zTestDict.test_factoryN)__name__
__module____qualname____doc__r\   r#   r$   r(   r)   r1   r3   r4   r5   r7   r8   r9   r?   rF   rH   rI   rW   r_   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 rX   )superr   __eq__
isinstance_defaultdictdefault_factoryr'   other	__class__r   r   re      s
    
zdefaultdict.__eq__)r`   ra   rb   re   __classcell__r   r   rk   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 rX   rY   )Zdict_r   r   r   r#      s    zTestDefaultDict.Dr[   c                   C   s   t tS rX   rY   r   r   r   r   r=      r>   zTestDefaultDict.<lambda>N)r`   ra   rb   rc   staticmethodr#   r$   r   r   r   r   rn      s   
rn   c                   @   sx   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dS )CustomMappingzCDefine methods of the MutableMapping protocol required by dicttoolzc                 O   s   t ||| _d S rX   )r\   _dr'   argskwargsr   r   r   __init__   s    zCustomMapping.__init__c                 C   s
   | j | S rX   rq   r'   keyr   r   r   __getitem__   s    zCustomMapping.__getitem__c                 C   s   || j |< d S rX   rv   )r'   rx   valr   r   r   __setitem__   s    zCustomMapping.__setitem__c                 C   s   | j |= d S rX   rv   rw   r   r   r   __delitem__   s    zCustomMapping.__delitem__c                 C   s
   t | jS rX   )r2   rq   r'   r   r   r   __iter__   s    zCustomMapping.__iter__c                 C   s
   t | jS rX   )lenrq   r}   r   r   r   __len__   s    zCustomMapping.__len__c                 C   s
   || j kS rX   rv   rw   r   r   r   __contains__   s    zCustomMapping.__contains__c                 C   s   t |to| j|jkS rX   rf   rp   rq   ri   r   r   r   re      s    zCustomMapping.__eq__c                 C   s   t |t p| j|jkS rX   r   ri   r   r   r   __ne__   s    zCustomMapping.__ne__c                 C   s
   | j  S rX   )rq   keysr}   r   r   r   r      s    zCustomMapping.keysc                 C   s
   | j  S rX   )rq   valuesr}   r   r   r   r      s    zCustomMapping.valuesc                 C   s
   | j  S rX   )rq   itemsr}   r   r   r   r      s    zCustomMapping.itemsc                 O   s   | j j|| d S rX   )rq   updaterr   r   r   r   r      s    zCustomMapping.updateN)r`   ra   rb   rc   ru   ry   r{   r|   r~   r   r   re   r   r   r   r   r   r   r   r   r   rp      s   rp   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)
    r[   c                   C   s   t  S rX   )rp   r   r   r   r   r=      r>   zTestCustomMapping.<lambda>N)r`   ra   rb   rc   rp   r#   r$   r   r   r   r   r      s   r   c                   C   sF   t ttjtjksttttjtjks,ttttjtjksBtd S rX   )r   r   osenvironr%   r   r   r   r   r   r   test_environ   s    r   c                  C   sV   G dd dt } | ddi}t||ks<t|ddiks<ttt|ddiksRtd S )Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z.test_merge_with_non_dict_mappings.<locals>.Fooc                 S   s
   || _ d S rX   rD   )r'   rD   r   r   r   ru      s    z7test_merge_with_non_dict_mappings.<locals>.Foo.__init__c                 S   s
   t | jS rX   )r2   rD   r}   r   r   r   r~     s    z7test_merge_with_non_dict_mappings.<locals>.Foo.__iter__c                 S   s
   | j | S rX   r   rw   r   r   r   ry     s    z:test_merge_with_non_dict_mappings.<locals>.Foo.__getitem__c                 S   s
   t | jS rX   )r   rD   r}   r   r   r   r     s    z6test_merge_with_non_dict_mappings.<locals>.Foo.__len__N)r`   ra   rb   ru   r~   ry   r   r   r   r   r   Foo   s   r   r   )r   r   r%   r   r.   )r   rD   r   r   r   !test_merge_with_non_dict_mappings   s     r   ) collectionsr   rg   collections.abcr   r   Ztoolz.dicttoolzr   r   r   r   r   r	   r
   r   r   r   r   r   Ztoolz.functoolzr   Ztoolz.utilsr   r   r   objectr   rn   rp   r   r   r   r   r   r   r   <module>   s   8 
: