B
    M¿MX@  ã               @   s¤  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 d dlmZmZmZ d dlmZ d dlm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$d%„ Z$d&d'„ Z%d(d)„ Z&d*d+„ Z'd,d-„ Z(d.d/„ Z)d0d1„ Z*d2d3„ Z+d4d5„ Z,d6d7„ Z-d8d9„ Z.d:d;„ Z/d<d=„ Z0d>d?„ Z1d@dA„ Z2dBdC„ Z3dDdE„ Z4dFdG„ Z5dHdI„ Z6dJdK„ Z7dLdM„ Z8dNdO„ Z9dPdQ„ Z:dRdS„ Z;dS )Té    N)Úthread_firstÚthread_lastÚmemoizeÚcurryÚcomposeÚpipeÚ
complementÚdoÚjuxtÚflipÚexcepts)ÚaddÚmulÚ
itemgetter)Úraises)Úpartialc             C   s   | d dkS )Né   r   © )Úxr   r   ú9lib/python3.7/site-packages/toolz/tests/test_functoolz.pyÚiseven
   s    r   c             C   s   | d dkS )Nr   é   r   )r   r   r   r   Úisodd   s    r   c             C   s   | d S )Nr   r   )r   r   r   r   Úinc   s    r   c             C   s   d|  S )Nr   r   )r   r   r   r   Údouble   s    r   c               C   sf   t dƒdkst‚t dtƒdks"t‚t dttƒdks6t‚t dttƒdksJt‚t dtdftƒdksbt‚d S )Nr   é   é   é   é   )r   ÚAssertionErrorr   r   r   r   r   r   r   Útest_thread_first   s
    r    c               C   sn   t tdddgttfttfƒƒddgks*t‚t tdddgttfttfƒƒdgksRt‚tdtdft	ƒdksjt‚d S )Nr   r   r   r   r   r   )
Úlistr   Úmapr   Úfilterr   r   r   r   r   r   r   r   r   Útest_thread_last"   s    *(r$   c                 sj   dg‰ ‡ fdd„} t | ƒ‰ˆddƒˆddƒks2t‚ˆ dgks@t‚ˆj| jksPt‚tt‡fdd„ƒsft‚d S )	Nr   c                s   ˆ d  d7  < | | S )z A docstring r   r   r   )r   Úy)Úfn_callsr   r   Úf+   s    ztest_memoize.<locals>.fr   r   r   c                  s
   ˆ di ƒS )Nr   r   r   )Úmfr   r   Ú<lambda>4   s    ztest_memoize.<locals>.<lambda>)r   r   Ú__doc__r   Ú	TypeError)r'   r   )r&   r(   r   Útest_memoize(   s    r,   c              C   s€   dg} ddd„}t |ƒ}|dƒ|dƒks,t‚|ddƒ|ddƒksDt‚|ddd|dddks`t‚|ddd|dddks|t‚d S )	Nr   c             S   s   | | S )Nr   )r   r%   r   r   r   r'   :   s    ztest_memoize_kwargs.<locals>.fr   r   )r%   r   )r   )r   r   )r&   r'   r(   r   r   r   Útest_memoize_kwargs7   s    
r-   c              C   sL   t ddd„ƒ} | dd}t|ƒ}|dƒ|dƒks4t‚|dƒ|dƒksHt‚d S )Nr   c             S   s   | | S )Nr   )r   r%   r   r   r   r'   F   s    ztest_memoize_curried.<locals>.fr   )r%   r   )r   )r   r   r   )r'   Úf2Úfm2r   r   r   Útest_memoize_curriedE   s    
r0   c              C   sJ   ddd„} t | dd}t|ƒ}|dƒ|dƒks2t‚|dƒ|dƒksFt‚d S )Nr   c             S   s   | | S )Nr   )r   r%   r   r   r   r'   R   s    ztest_memoize_partial.<locals>.fr   )r%   r   )r   )r   r   r   )r'   r.   r/   r   r   r   Útest_memoize_partialQ   s
    
r1   c                  s  t dd„ ddid‰ ˆ dƒdks$t‚ˆ dƒdks4t‚t dd„ ddd	œd‰ ˆ dƒdksZt‚ˆ dƒdksjt‚ˆ ddƒdks|t‚ˆ ddƒdksŽt‚ˆ d
ƒdksžt‚t dd„ d
did‰ ˆ ddƒdksÄt‚ˆ ddƒdksÖt‚tt‡ fdd„ƒsìt‚t dd„ ddid‰ ˆ ƒ dkst‚t ddd„dtdƒfdddid‰ ˆ ddddksHt‚ˆ ddƒdks\t‚ˆ ddddksrt‚ˆ ddƒdks†t‚ˆ dƒdks˜t‚ˆ d
ƒdksªt‚t ddd„d tdƒfdddid‰ ˆ ƒ dksÜt‚ˆ dddksðt‚ˆ dƒdkst‚d S )Nc             S   s   dS )NFr   )r   r   r   r   r)   ^   s    z,test_memoize_key_signature.<locals>.<lambda>r   T)Úcacher   Fc             W   s   dS )NFr   )r   Úargsr   r   r   r)   c   s    ))r   )r   r   )r   r   c             S   s   dS )NFr   )r   r%   r   r   r   r)   k   s    r   c                  s   ˆ dƒS )N)r   r   r   r   )r(   r   r   r)   n   s    c               S   s   dS )NFr   r   r   r   r   r)   q   s    r   r   c             S   s   dS )NFr   )r   r%   r   r   r   r)   v   s    )r   ))r%   r   ))r   r   N)r%   c             S   s   dS )NFr   )r   r   r   r   r)      s    ))r   r   ))r   N)r   )r   )r   )r   r   r   r+   Ú	frozensetr   r   )r(   r   Útest_memoize_key_signature\   s:    
r5   c              C   s:   t ddiddd„ ƒ} | dƒdks&t‚| dƒdks6t‚d S )Nr   T)r2   c             S   s   dS )NFr   )r   r   r   r   r'   ‰   s    z#test_memoize_curry_cache.<locals>.fr   F)r   r   )r'   r   r   r   Útest_memoize_curry_cacheˆ   s    r6   c              C   s>   t dd„ ddd„ ƒ} | ddƒdks(t‚| ddƒdks:t‚d S )	Nc             S   s   | d S )Nr   r   )r3   Úkwargsr   r   r   r)   ’   s    z"test_memoize_key.<locals>.<lambda>)Úkeyc             _   s   | | S )Nr   )r   r%   r3   r7   r   r   r   r'   ’   s    ztest_memoize_key.<locals>.fr   r   r   )r   r   )r'   r   r   r   Útest_memoize_key‘   s    r9   c              C   s"   dd„ } t | ƒ}|j| kst‚d S )Nc               S   s   dS )z
        Docstring
        Nr   r   r   r   r   Úfooœ   s    z!test_memoize_wrapped.<locals>.foo)r   Ú__wrapped__r   )r:   Zmemoized_foor   r   r   Útest_memoize_wrappedš   s    r<   c              C   s”   t tƒ} | dƒ}t|ƒst‚|dƒdks,t‚t| ƒttƒks@t‚t tƒ}t|tƒdddgƒƒdddgkslt‚tt	dd„ ƒs~t‚tt	d	d„ ƒst‚d S )
Nr   é
   é   r   r   r   c               S   s   t ƒ S )N)r   r   r   r   r   r)   ¯   s    z#test_curry_simple.<locals>.<lambda>c               S   s   t ddiƒS )Nr   r   )r   r   r   r   r   r)   °   s    )
r   r   Úcallabler   Úreprr"   r!   r   r   r+   )Zcmulr   Zcmapr   r   r   Útest_curry_simple¥   s    $rA   c                 s~  ddd„} t | ƒ} | dddƒdks&t‚| dƒddƒdks<t‚| ddƒdksNt‚| ddd	dƒdksft‚| dd	ddƒdks~t‚ddd„}t |dd‰ ˆ ƒ dks¢t‚ˆ dddks´t‚ˆ d
ddksÆt‚ˆ d
dddksÚt‚ˆ d
ƒdksêt‚tt‡ fdd„ƒst‚tfdd„}t ¡ dks.t ¡ d
 dkrzt |ƒdƒd
ksDt‚t |ƒtddƒdks`t‚t |tddƒdkszt‚d S )Nr=   c             S   s   | | | S )Nr   )ÚaÚbÚcr   r   r   r'   ´   s    ztest_curry_kwargs.<locals>.fr   r   r   é	   é   )rD   r   c             S   s   | | | S )Nr   )rB   rC   rD   r   r   r   Úg¾   s    ztest_curry_kwargs.<locals>.g)rC   r   )rB   )rB   rC   c                  s
   ˆ ddƒS )Nr   r   r   r   )Úcgr   r   r)   Ç   s    z#test_curry_kwargs.<locals>.<lambda>c             S   s   || ƒS )Nr   )r   Úfuncr   r   r   ÚhÉ   s    ztest_curry_kwargs.<locals>.hZPyPyÚ3g        )rI   z0.0)r=   )r   r=   r   )	r   r   r   r+   ÚintÚplatformZpython_implementationZpython_version_tupleÚstr)r'   rG   rJ   r   )rH   r   Útest_curry_kwargs³   s*    

rO   c                  sd   t dd„ ƒ‰ ˆ ddƒdkst‚tt‡ fdd„ƒs4t‚tt‡ fdd„ƒsJt‚tt‡ fd	d„ƒs`t‚d S )
Nc             S   s   t | tƒstƒ ‚| | S )N)Ú
isinstancerL   r+   )rB   rC   r   r   r   r'   Õ   s    
z#test_curry_passes_errors.<locals>.fr   r   r   c                  s
   ˆ ddƒS )NÚ1r   r   r   )r'   r   r   r)   Ü   s    z*test_curry_passes_errors.<locals>.<lambda>c                  s   ˆ dƒdƒS )NrQ   r   r   r   )r'   r   r   r)   Ý   s    c                  s   ˆ dddƒS )Nr   r   r   r   r   )r'   r   r   r)   Þ   s    )r   r   r   r+   r   r   )r'   r   Útest_curry_passes_errorsÔ   s
    rR   c              C   sP   dd„ } t | ƒ}|j| jks t‚t|ƒt| ƒks4t‚| ddƒ|ddƒksLt‚d S )Nc             S   s   | S )z A docstring r   )r   r%   r   r   r   r'   â   s    ztest_curry_docstring.<locals>.fr   r   )r   r*   r   rN   )r'   rG   r   r   r   Útest_curry_docstringá   s
    rS   c              C   s"  ddd„} t | dddt| ƒddd }}|j|jks:t‚|j|jksJt‚|dƒ|dƒks^t‚t | dƒt| ƒdƒ }}|j|jks†t‚|j|jks–t‚|dƒ|dƒksªt‚|ddd|dddksÆt‚t | ddt| ƒdd }}|j|jksòt‚|j|jkst‚|ddƒ|ddƒkst‚d S )Nr   c             S   s   | | | S )Nr   )rB   rC   rD   r   r   r   r:   í   s    z'test_curry_is_like_partial.<locals>.foor   )rD   r   )r   )r   r   Úkeywordsr   r3   )r:   ÚprD   r   r   r   Útest_curry_is_like_partialì   s    
 rV   c              C   s   ddd„} t | ddd}t |ƒ}t|t ƒs.t‚t|t ƒs<t‚t|jt ƒrLt‚t|jdƒr\t‚|j|jkslt‚|j|jks|t‚|j|jksŒt‚d S )Nr   c             S   s   | | | S )Nr   )rB   rC   rD   r   r   r   r:     s    z%test_curry_is_idempotent.<locals>.foor   )rD   rI   )r   )r   rP   r   rI   Úhasattrr3   rT   )r:   r'   rG   r   r   r   Útest_curry_is_idempotent  s    
rX   c                 s    ddd„} t | ddd‰ tt‡ fdd„ƒs.t‚tt‡ fdd„ƒsDt‚tt‡ fd	d„ƒsZt‚tt‡ fd
d„ƒspt‚tt‡ fdd„ƒs†t‚tt‡ fdd„ƒsœt‚d S )Nr   c             S   s   | | | S )Nr   )rB   rC   rD   r   r   r   r:     s    z+test_curry_attributes_readonly.<locals>.foor   )rD   c                  s   t ˆ ddƒS )Nr3   )r   )Úsetattrr   )r'   r   r   r)     s    z0test_curry_attributes_readonly.<locals>.<lambda>c                  s   t ˆ dddiƒS )NrT   rD   r   )rY   r   )r'   r   r   r)     s    c                  s   t ˆ dˆ ƒS )NrI   )rY   r   )r'   r   r   r)     s    c                  s
   t ˆ dƒS )Nr3   )Údelattrr   )r'   r   r   r)     s    c                  s
   t ˆ dƒS )NrT   )rZ   r   )r'   r   r   r)     s    c                  s
   t ˆ dƒS )NrI   )rZ   r   )r'   r   r   r)     s    )r   )r   r   ÚAttributeErrorr   )r:   r   )r'   r   Útest_curry_attributes_readonly  s    
r\   c              C   sš   ddd„} d| _ t| ddd}|j dks,t‚d|_d|_d	|_d
|_ |jdksRt‚|jdks`t‚|jd	ksnt‚|j d
ks|t‚t|dƒr–|j|jks–t‚d S )Nr   c             S   s   | | | S )Nr   )rB   rC   rD   r   r   r   r:     s    z+test_curry_attributes_writable.<locals>.foozthis.is.foor   )rD   ZnewnameZnewdocZ	newmoduleZnewqualnameÚ	func_name)r   )Ú__qualname__r   r   Ú__name__r*   Ú
__module__rW   r]   )r:   r'   r   r   r   Útest_curry_attributes_writable  s    

ra   c              C   s   ddl m}  | jdkst‚d S )Nr   )Úmergeztoolz.curried.exceptions)Ztoolz.curried.exceptionsrb   r`   r   )rb   r   r   r   Útest_curry_module/  s    rc   c        	   	      s@  ddd„} t | ddd}t | ddd}t | ddd}t | dd}|dd}|ƒ }||ks\t‚||krht‚||kstt‚||kr€t‚||ksŒt‚||ks˜t‚||ks¤t‚ddd„}t |ddd}||ksÈt‚t||||||||ƒ gƒt||||gƒksöt‚t | g ƒ‰ tt‡ fd	d
„ƒst‚t | g d‰tt‡fdd
„ƒs<t‚d S )Nr   c             S   s   | | | S )Nr   )rB   rC   rD   r   r   r   r:   5  s    z"test_curry_comparable.<locals>.foor   )rD   r   c             S   s   | | | S )Nr   )rB   rC   rD   r   r   r   ÚbarF  s    z"test_curry_comparable.<locals>.barc                  s   t ˆ ƒS )N)Úhashr   )Úunhash1r   r   r)   O  s    z'test_curry_comparable.<locals>.<lambda>c                  s   t ˆ ƒS )N)re   r   )Úunhash2r   r   r)   Q  s    )r   )r   )r   r   Úsetr   r+   )	r:   Úf1r.   Zg1Zh1Zh2Zh3rd   Zb1r   )rf   rg   r   Útest_curry_comparable4  s,    


.
rj   c              C   s>   ddd„} t | ƒ}|dddddddƒ| ddƒks:t‚d S )	Nr   c             S   s   | | S )Nr   )r   r%   r   r   r   r'   X  s    z*test_curry_doesnot_transmogrify.<locals>.fr   )r%   r   r   )r   )r   r   )r'   Zcfr   r   r   Útest_curry_doesnot_transmogrifyT  s    
rk   c              C   sF  G dd„ dt ƒ} | dƒ}| dd¡dks,t‚| d¡dƒdksBt‚|  |dd¡dksXt‚|  |¡dƒdƒdksrt‚| dd¡dks†t‚| d¡dƒdksœt‚|  dd¡dks°t‚|  d¡dƒdksÆt‚| dd¡dksÚt‚| d¡dƒdksðt‚|  dd¡dkst‚|  d¡dƒdkst‚t|jtƒs0t‚t| jtƒsBt‚d S )	Nc               @   sD   e Zd ZdZdd„ Zedd„ ƒZeedd„ ƒƒZe	edd	„ ƒƒZ
d
S )z%test_curry_on_classmethods.<locals>.Ar=   c             S   s
   || _ d S )N)ÚBASE)ÚselfÚbaser   r   r   Ú__init__c  s    z.test_curry_on_classmethods.<locals>.A.__init__c             S   s   | j | | S )N)rl   )rm   r   r%   r   r   r   Ú	addmethodf  s    z/test_curry_on_classmethods.<locals>.A.addmethodc             S   s   | j | | S )N)rl   )Úclsr   r%   r   r   r   Úaddclassj  s    z.test_curry_on_classmethods.<locals>.A.addclassc             S   s   | | S )Nr   )r   r%   r   r   r   Ú	addstatico  s    z/test_curry_on_classmethods.<locals>.A.addstaticN)r_   r`   r^   rl   ro   r   rp   Úclassmethodrr   Ústaticmethodrs   r   r   r   r   ÚA`  s   rv   éd   r   r   ék   é   é   )Úobjectrp   r   rr   rs   rP   r   )rv   rB   r   r   r   Útest_curry_on_classmethods_  s     r|   c              C   sþ   G dd„ dt ƒ} | dƒ}| dd¡dks,t‚|  |dd¡dksBt‚d|_| dd¡dks\t‚d|_| dd¡dksvt‚| dd¡d	ksŠt‚|  dd¡d	ksžt‚d
| _|  dd¡d	ks¸t‚d
| _|  dd¡d	ksÒt‚| dd¡dksæt‚|  dd¡dksút‚d S )Nc               @   sP   e Zd ZdZdZdd„ Zedd„ ƒZeedd„ ƒƒZ	e
edd	„ ƒƒZd
d„ ZdS )z'test_memoize_on_classmethods.<locals>.Ar=   c             S   s
   || _ d S )N)rl   )rm   rn   r   r   r   ro   Ž  s    z0test_memoize_on_classmethods.<locals>.A.__init__c             S   s   | j | | S )N)rl   )rm   r   r%   r   r   r   rp   ‘  s    z1test_memoize_on_classmethods.<locals>.A.addmethodc             S   s   | j | | S )N)rl   )rq   r   r%   r   r   r   rr   •  s    z0test_memoize_on_classmethods.<locals>.A.addclassc             S   s   | | S )Nr   )r   r%   r   r   r   rs   š  s    z1test_memoize_on_classmethods.<locals>.A.addstaticc             S   s   | j S )N)ÚHASH)rm   r   r   r   Ú__hash__Ÿ  s    z0test_memoize_on_classmethods.<locals>.A.__hash__N)r_   r`   r^   rl   r}   ro   r   rp   rt   rr   ru   rs   r~   r   r   r   r   rv   Š  s   rv   rw   r   r   rx   éÈ   éÏ   ry   r>   rz   )r{   rp   r   rl   r}   rr   rs   )rv   rB   r   r   r   Útest_memoize_on_classmethods‰  s     r   c                  s`   t dd„ ƒ‰ tt‡ fdd„ƒs"t‚ˆ dƒdƒˆ  dd¡ks>t‚ˆ dƒdƒˆ dƒ d¡ks\t‚d S )Nc             S   s   | | S )Nr   )r   r%   r   r   r   r   ·  s    ztest_curry_call.<locals>.addc                  s
   ˆ   d¡S )Nr   )Úcallr   )r   r   r   r)   º  s    z!test_curry_call.<locals>.<lambda>r   r   )r   r   r+   r   r‚   r   r   )r   r   Útest_curry_call¶  s    rƒ   c              C   s¦   t d	dd„ƒ} | ƒ | ddƒks"t‚|  d¡dƒ| ddƒks>t‚|  d¡ d¡ƒ | ddƒks^t‚| jdddd| ddƒks~t‚| jddjddƒ | ddƒks¢t‚d S )
Nr   r   c             S   s   | | S )Nr   )r   r%   r   r   r   r   À  s    ztest_curry_bind.<locals>.addr=   r>   )r   )r%   )r   r   )r   r   Zbind)r   r   r   r   Útest_curry_bind¿  s      r„   c                 sš   dd„ ‰ t ‡ fdd„ƒ} | ƒ dƒdƒdƒdks2t‚| dƒdƒdƒdksJt‚| ddƒdƒdks`t‚| dddƒdkstt‚| ddƒdd	ƒ| dddd	ƒks–t‚d S )
Nc             S   s   | | | S )Nr   )r   r%   Úzr   r   r   Úadd3Ë  s    z%test_curry_unknown_args.<locals>.add3c                 s   ˆ | Ž S )Nr   )r3   )r†   r   r   r'   Î  s    z"test_curry_unknown_args.<locals>.fr   r   r   é   r   )r   r   )r'   r   )r†   r   Útest_curry_unknown_argsÊ  s    rˆ   c               C   s   t tdd„ ƒst‚d S )Nc               S   s   t dƒS )Nr   )r   r   r   r   r   r)   Ú  s    z&test_curry_bad_types.<locals>.<lambda>)r   r+   r   r   r   r   r   Útest_curry_bad_typesÙ  s    r‰   c              C   sv   G dd„ dt ƒ} | dd„ ƒ}t|t ƒs*t‚t|| ƒs8t‚t|dƒ| ƒsJt‚t|ƒ dƒ| ƒs^t‚|dƒdƒdksrt‚d S )Nc               @   s   e Zd ZdS )z(test_curry_subclassable.<locals>.mycurryN)r_   r`   r^   r   r   r   r   ÚmycurryÞ  s   rŠ   c             S   s   | | S )Nr   )r   r%   r   r   r   r)   á  s    z)test_curry_subclassable.<locals>.<lambda>r   r   r   )r   rP   r   )rŠ   r   r   r   r   Útest_curry_subclassableÝ  s    r‹   c              C   sü   t ƒ dƒdkst‚t tƒdƒdks&t‚t ttƒdƒdks<t‚t ttttƒdƒdksVt‚t ttƒddƒdksnt‚ddd	„} t tt| ƒdddd
dks–t‚dd	„ } dd„ }t | |ƒ}|jdks¾t‚|jdksÌt‚t	ƒ }t | |ƒ}|jdksêt‚|jdksøt‚d S )Nr   r   r   r   ÚFalserK   r=   c             S   s   | | | S )Nr   )rB   rC   rD   r   r   r   r'   ý  s    ztest_compose.<locals>.f)rD   Z10c             S   s   | S )Nr   )rB   r   r   r   r'     s    c             S   s   | S )Nr   )rB   r   r   r   rG     s    ztest_compose.<locals>.gZf_of_gz-lambda *args, **kwargs: f(g(*args, **kwargs))ZComposezA composition of functions)r=   )
r   r   r   r   rN   r   r   r_   r*   r{   )r'   rG   ZcomposedrJ   r   r   r   Útest_composeö  s     


r   c               C   s@   t dtƒdkst‚t dttƒdks&t‚t dtttƒdks<t‚d S )Nr   r   r   F)r   r   r   r   r   r   r   r   r   Ú	test_pipe  s    rŽ   c              C   s  t dd„ ƒƒ st‚t dd„ ƒƒ r$t‚t tƒdƒs4t‚t tƒdƒrDt‚t t tƒƒdƒsXt‚t t tƒƒdƒrlt‚dd„ } t | ƒddƒs†t‚t | ƒddƒr˜t‚t dd„ ƒƒ sªt‚t dd„ ƒƒ s¼t‚t d	d„ ƒƒ sÎt‚t d
d„ ƒƒ sàt‚t dd„ ƒƒ ròt‚t dd„ ƒƒ rt‚t dd„ ƒƒ rt‚d S )Nc               S   s   dS )NFr   r   r   r   r   r)     s    z!test_complement.<locals>.<lambda>c               S   s   dS )NTr   r   r   r   r   r)     s    r   r   c             S   s   t | ƒot |ƒS )N)r   )rB   rC   r   r   r   r)   '  s    c               S   s   dS )NÚ r   r   r   r   r   r)   ,  s    c               S   s   dS )Nr   r   r   r   r   r   r)   -  s    c               S   s   d S )Nr   r   r   r   r   r)   .  s    c               S   s   g S )Nr   r   r   r   r   r)   /  s    c               S   s   dS )Nr   r   r   r   r   r   r)   1  s    c               S   s   dS )Nr   r   r   r   r   r   r)   2  s    c               S   s   dgS )Nr   r   r   r   r   r   r)   3  s    )r   r   r   r   )Z	both_evenr   r   r   Útest_complement  s     r   c              C   sD   dd„ } t | dƒdkst‚g }t |jdƒdks2t‚|dgks@t‚d S )Nc             S   s   | d S )Nr   r   )r   r   r   r   r)   7  s    ztest_do.<locals>.<lambda>r   )r	   r   Úappend)r   Úlogr   r   r   Útest_do6  s
    r“   c              C   sF   t tdƒƒ} tdd„ tdƒD ƒƒ}|| ƒdks2t‚|| ƒdksBt‚d S )Nr=   c             s   s   | ]}t d | ƒV  qdS )r   N)r   )Ú.0Úir   r   r   ú	<genexpr>A  s    z,test_juxt_generator_input.<locals>.<genexpr>r   )r   r   r   r‡   é   )r!   Úranger
   r   )ÚdataZjuxtfuncr   r   r   Útest_juxt_generator_input?  s    rš   c              C   s    dd„ } t | ddƒdkst‚d S )Nc             S   s   | |fS )Nr   )rB   rC   r   r   r   r'   G  s    ztest_flip.<locals>.frB   rC   )rC   rB   )r   r   )r'   r   r   r   Ú	test_flipF  s    r›   c                 sÞ  t jdkst‚dt jkst‚dd„ } dd„ }t t| |ƒ‰ ˆ dƒdksHt‚ˆ d	ƒdksXt‚ˆ d
ƒdksht‚ˆ jdksvt‚dˆ jks„t‚dˆ jks’t‚dˆ jks t‚dd„ }t ttf|ƒ‰ ˆ g ƒd ksÆt‚ˆ dgƒdksØt‚ˆ i ƒd ksèt‚ˆ ddiƒdksüt‚ˆ jdkst‚dˆ jkst‚dˆ jks,t‚dˆ jks<t‚dd„ }t ttf|ƒ‰ ˆ tƒd ksdt‚ˆ tƒd ksvt‚tt‡ fdd„ƒsŽt‚tt	‡ fdd„ƒs¦t‚t t
ƒ t
ƒ t
ƒ ƒ‰ ˆ jdksÈt‚ˆ jt jksÚt‚d S )Nr   zOA wrapper around a function to catch exceptions and
    dispatch to a handler.
c             S   s   ddg  | ¡S )zidx docstring
        r   r   )Úindex)rB   r   r   r   ÚidxU  s    ztest_excepts.<locals>.idxc             S   s   t | tƒst‚dS )zhandler docstring
        éÿÿÿÿ)rP   Ú
ValueErrorr   )Úer   r   r   ÚhandlerZ  s    ztest_excepts.<locals>.handlerr   r   r   r   rž   Zidx_excepting_ValueErrorzidx docstringrŸ   zhandler docstringc             S   s   | d S )zgetzero docstring
        r   r   )rB   r   r   r   Úgetzeroj  s    ztest_excepts.<locals>.getzeroZ(getzero_excepting_IndexError_or_KeyErrorzgetzero docstringZreturn_nonezReturns Nonec             S   s
   | ƒ ‚dS )zHA function that raises an instance of the exception type given.
        Nr   )rB   r   r   r   Úraise_z  s    ztest_excepts.<locals>.raise_c                  s   ˆ t ƒS )N)r+   r   )Ú	exceptingr   r   r)   ‚  s    ztest_excepts.<locals>.<lambda>c                  s   ˆ t ƒS )N)ÚNotImplementedErrorr   )r¤   r   r   r)   ƒ  s    r¤   )r   r_   r   r*   rŸ   Ú
IndexErrorÚKeyErrorr   r+   r¥   r{   )r   r¡   r¢   r£   r   )r¤   r   Útest_exceptsM  s@    r¨   )<rM   Ztoolz.functoolzr   r   r   r   r   r   r   r	   r
   r   r   Úoperatorr   r   r   Ztoolz.utilsr   Ú	functoolsr   r   r   r   r   r    r$   r,   r-   r0   r1   r5   r6   r9   r<   rA   rO   rR   rS   rV   rX   r\   ra   rc   rj   rk   r|   r   rƒ   r„   rˆ   r‰   r‹   r   rŽ   r   r“   rš   r›   r¨   r   r   r   r   Ú<module>   sV   4,		! *-		