U
    /eG                     @   s  d dl Z d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	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mZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4 e
e	d	Z5d
d Z6dd Z7dd Z8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@d d! ZAd"d# ZBd$d% ZCd&d' ZDd(d) ZEd*d+ ZFd,d- ZGd.d/ ZHd0d1 ZId2d3 ZJd4d5 ZKd6d7 ZLd8d9 ZMd:d; ZNd<d= ZOd>d? ZPd@dA ZQdBdC ZRdDdE ZSdFdG ZTdHdI ZUdJdK ZVdLdM ZWdNdO ZXdPdQ ZYdRdS ZZdTdU Z[dVdW Z\dXdY Z]dZd[ Z^d\d] Z_d^d_ Z`d`da Zadbdc Zbddde Zcdfdg Zddhdi Zedjdk Zfdldm Zgdndo Zhdpdq Zidrds Zjdtdu Zkdvdw ZldS )x    N)starmap)raises)partial)Random)dumpsloads)&removegroupbymerge_sortedconcatconcatv
interleaveunique
isiterablegettermapcat
isdistinctfirstsecondnthtaketaildrop	interposegetrestlastconsfrequenciesreducebyiterate
accumulatesliding_windowcount	partitionpartition_alltake_nthpluckjoindifftopkpeekpeeknrandom_sample)addmulZ__no__default__c                 C   s   | S N xr1   r1   >/tmp/pip-unpacked-wheel-zr66a21f/toolz/tests/test_itertoolz.pyidentity   s    r5   c                 C   s   | d dkS N   r   r1   r2   r1   r1   r4   iseven   s    r8   c                 C   s   | d dkS )Nr7      r1   r2   r1   r1   r4   isodd    s    r:   c                 C   s   | d S Nr9   r1   r2   r1   r1   r4   inc$   s    r<   c                 C   s   d|  S )Nr7   r1   r2   r1   r1   r4   double(   s    r=   c                  C   s@   t ttd} t| tk	stt| ttttdks<td S )N   )r   r8   rangetypelistAssertionErrorfilterr:   )rr1   r1   r4   test_remove,   s    rE   c                   C   s,   t tddddgddgddgdks(td S )Nr9   r7         TF)r	   r8   rB   r1   r1   r1   r4   test_groupby2   s    rI   c                   C   s   t dddddgddgddgdks(tt dgddddgddgddgdksRtt ddgddddgddgddgdks~td S )Nr   r9   r7   r9   rF   r7   r7   )r7   rG   ))r9   r7   ))r9   r9   rL   )r	   rB   r1   r1   r1   r4   test_groupby_non_callable6   s    rN   c               
   C   s  t tdddgdddgddddddgks.tt tdddgdddgddddddgks\tt tdgddgdgg ddddgkstt tdddgdddgg dd d	ddddddgkstt tdddgdddgd
d d	ddddddgkstt tddgddgdd d	ddddgks$tdtddddks@tdtdddtd	dks`tdtddddd d	dkstt tdgdddgtd	ddddgkstdddgdddgdddgg} t t| ddd idddddddddg	kstt t g kstt tdddgdddgks4tt tdddgddgdddddgks`tt tdddgddgtd	dddddgkstt tddgdgddgddgtd	dddddddgkstd S )Nr9   r7   rF   r>   rG      c                 S   s   |  S r0   r1   r2   r1   r1   r4   <lambda>I       z#test_merge_sorted.<locals>.<lambda>keyc                 S   s   | d S NrF   r1   r2   r1   r1   r4   rP   K   rQ   c                 S   s   | d S rT   r1   r2   r1   r1   r4   rP   M   rQ    abcZ	aaabbbcccZcbac                 S   s
   t |  S r0   )ordr2   r1   r1   r4   rP   Q   rQ   Z	cccbbbaaarJ   r   rG   )rF   rO   )r>   rF   )rO   r>   )   rY   )	   r9   )rZ   rY   )rZ   rZ   rS   c                 S   s   | d S r;   r1   r2   r1   r1   r4   rP   V   rQ      )rA   r
   rB   r(   rW   r5   datar1   r1   r4   test_merge_sortedD   sv    ..*

 
,        ",    "      r^   c                   C   s0   d tddkstd tddks,td S )NrU   )ABCZ123ZA1B2C3)r_   1ZA1BC)r(   r   rB   r1   r1   r1   r4   test_interleavea   s    ra   c                   C   sD   t tddkstt tddks(tt tdtddks@td S )Nr9   r7   rF   )r9   r7   r9   rF   rR   rJ   )tupler   rB   r8   r1   r1   r1   r4   test_uniquef   s    rd   c                   C   s:   t dddgdkstt ddks&tt ddks6td S )Nr9   r7   rF   TrV   r>   F)r   rB   r1   r1   r1   r4   test_isiterablel   s    re   c                   C   s   t dddgdkstt dddgdks,tt ddks<tt ddksLtt tdddgdksftt tdddgdkstd S )Nr9   r7   rF   TFZHelloZWorld)r   rB   iterr1   r1   r1   r4   test_isdistinctr   s    rg   c                   C   s   t dddkstt dtddks(tt dddks:tt dddidksPtttd	d
 sbtt dddksttttdd
 std S )Nr7   ABCDECr9   rF   r7   r9   r   foobarc                   S   s   t dddiS )N
   rk   )r   r1   r1   r1   r4   rP      rQ   ztest_nth.<locals>.<lambda>Dc                   S   s   t dtdS )Nrn   rh   )r   rf   r1   r1   r1   r4   rP      rQ   )r   rB   rf   r   StopIteration
ValueErrorr1   r1   r1   r4   test_nth}   s    rr   c                   C   s<   t ddkstt ddks ttt dddts8td S )Nrh   Arj   rF   zerooner   r9   )r   rB   
isinstanceintr1   r1   r1   r4   
test_first   s    ry   c                   C   s<   t ddkstt ddks ttt dddts8td S )Nrh   Brj   r7   rt   ru   rv   )r   rB   rw   rx   r1   r1   r1   r4   test_second   s    r{   c                   C   s<   t ddkstt ddks ttt dddts8td S )Nrh   Erj   r9   rt   ru   rv   )r   rB   rw   rx   r1   r1   r1   r4   	test_last   s    r}   c                   C   s4   t tdt dkstt tdt dks0td S )Nrh   ZBCDErj   r7   r9   )rA   r   rB   r1   r1   r1   r4   	test_rest   s    r   c                   C   s8   t tddt dkstt tddt dks4td S )NrF   rh   r_   r7   rj   )rF   r7   )rA   r   rB   r1   r1   r1   r4   	test_take   s    r   c                   C   sV   t tddt dkstt tdtdt dks8tt tddt dksRtd S )NrF   rh   ZCDEr7   rj   r~   )rA   r   rB   rf   r1   r1   r1   r4   	test_tail   s    r   c                   C   s8   t tddt dkstt tddt dks4td S )NrF   rh   ZDEr9   rj   r~   )rA   r   rB   r1   r1   r1   r4   	test_drop   s    r   c                   C   s   t tddt dkstd S )Nr7   rh   ZACE)rA   r&   rB   r1   r1   r1   r4   test_take_nth   s    r   c                   C   s<  t dddksttt ddgdtdks0tt ddddddksJtt dd	gddddd
kshtt di dddks~tt i dddgdddkstt ddgdddkstt dgddkstt g ddkstttdd stttdd stttdd stttdd s$tttdd s8td S )Nr9   rh   rz   rF   ZBDar7   )r   bcr   rJ   rk   rl   defaultr   ZABri   )rs   ri   rs   r1   c                   S   s
   t ddS )Nrm   r_   r   r1   r1   r1   r4   rP      rQ   ztest_get.<locals>.<lambda>c                   S   s   t dddiS )Nrm   r   r9   r   r1   r1   r1   r4   rP      rQ   c                   S   s   t i dddgS Nr9   r7   rF   r   r1   r1   r1   r4   rP      rQ   c                   S   s   t dddgdd S r   r   r1   r1   r1   r4   rP      rQ   c                   S   s   t di tdS )Nrk   r   )r   no_default2r1   r1   r1   r4   rP      rQ   )r   rB   rA   r   
IndexErrorKeyError	TypeErrorr1   r1   r1   r4   test_get   s    r   c                  C   s   t ttdddgdddggddddddgks2tt ttddddgdddgdd	d
ggt tdksjtdd } dddd
d	dgt ttt| dddgdd
d	ggkstd S )Nr9   r7   rF   rG   r>   rO   r   rZ   rY   r[   rm   c                 S   s   | d S r;   r1   )ir1   r1   r4   rP      rQ   ztest_mapcat.<locals>.<lambda>)rA   r   r5   rB   reversedr?   r   map)r<   r1   r1   r4   test_mapcat   s    &
"r   c                   C   s$   t tdddgdddgks td S r   )rA   r   rB   r1   r1   r1   r4   	test_cons   s    r   c                   C   sN   t tg g g gg kstt tdtddgtdgdddddgksJtd S Nr>   r   r    ʚ;r   r9   r7   )rA   r   rB   r   r?   r1   r1   r1   r4   test_concat   s    r   c                   C   sJ   t tg g g g kstt tdtddgtddddddgksFtd S r   )rA   r   rB   r   r?   r1   r1   r1   r4   test_concatv   s    r   c                   C   s   dt ttdtdkstddtddks6tttdtdd	dddddddgksbtttd
dddgdd
dd
dgkstd S )Nr   r   ZtXaXrXzXaXnrU   XZtarzanr   r9   rG   .r   r   )	r   r   r   r?   rB   r(   rA   	itertoolsrepeatr1   r1   r1   r4   test_interpose   s    ,r   c                
   C   s`   t ddddddddgdddddks*tt g i ks:tt d	ddddd
ddddks\td S )Ncatpigeeldogr7   r9   rF   )r   r   r   r   ZonomatopoeiarG   )r   er   monpt)r   rB   r1   r1   r1   r4   test_frequencies   s    
      r   c                  C   s   dddddg} dd }t |t| dd	d
dks2tt |t| ddddksNtddddddddddddddddg}t dd dd |ddddkstt ddd |ddddkstd S )Nr9   r7   rF   rG   r>   c                 S   s   | d dkS r6   r1   r2   r1   r1   r4   rP      rQ   ztest_reduceby.<locals>.<lambda>r   rZ   rO   )FT   rY   zbuild roadsCAi@B )namestatecostzfight crimeILi zhelp farmersi i@ c                 S   s   | d S )Nr   r1   r2   r1   r1   r4   rP      rQ   c                 S   s   | |d  S Nr   r1   accr3   r1   r1   r4   rP      rQ   iO i   )r   r   r   c                 S   s   | |d  S r   r1   r   r1   r1   r4   rP     rQ   )r   r.   rB   r/   )r]   r8   Zprojectsr1   r1   r4   test_reduceby   s.    



  r   c                   C   sJ   t ttddddgdddks"tt ttddddgtdddksFtd S )Nr9   r7   rF   rG   rO   rH   )r   r8   r.   rB   r   r1   r1   r1   r4   test_reduce_by_init  s    "r   c               	   C   s<   dd } t t| ddddddgtddhddhdks8td S )Nc                 S   s   |  | | S r0   )r.   )sr   r1   r1   r4   set_add  s    
z0test_reduce_by_callable_default.<locals>.set_addr9   r7   rF   rG   rH   )r   r8   setrB   )r   r1   r1   r4   test_reduce_by_callable_default  s    r   c                   C   sR   t tttddddddddgks*tt tdttdddddgksNtd S )Nr   r>   r9   r7   rF   rG   rY   )rA   r   islicer    r<   rB   r   r=   r1   r1   r1   r4   test_iterate  s    *r   c                  C   s   t ttdddddgdddddgks*tt ttdddddgdddd	d
gksTtt ttdddddgdddddddgkstdd } t }t t| g ||gkstt t| g g kstt ttdddgtdddgkstd S )Nr9   r7   rF   rG   r>   rO   rm   r      x   r   rZ      c                 S   s   t dd S )Nzbinop should not be called)rB   r   r   r1   r1   r4   binop  s    ztest_accumulate.<locals>.binop)rA   r!   r.   rB   r/   objectr   )r   startr1   r1   r4   test_accumulate  s    **.r   c                   C   s$   t tttddddgks td S )Nrb   r9   rF   rO   )rA   r!   r.   rf   rB   r1   r1   r1   r4   -test_accumulate_works_on_consumable_iterables'  s    r   c                   C   sJ   t tdddddgdddgks$tt tdddddgdd	gksFtd S )
Nr7   r9   rF   rG   rJ   r7   rF   rF   rG   rb   )r7   rF   rG   rA   r"   rB   r1   r1   r1   r4   test_sliding_window+  s    $r   c                   C   s8   t tdddgg kstt tdddgg ks4td S )NrF   r9   r7   r[   r   r1   r1   r1   r4   %test_sliding_window_of_short_iterator0  s    r   c                   C   s|   t tdddddgddgks"tt tdtddd	gks@tt tdtdd
dddgksbtt tdg g ksxtd S )Nr7   r9   rF   rG   rJ   r   r[   r   r9   r7   )rF   rG   r>   r   )pad)rF   r   r   )rA   r$   rB   r?   r1   r1   r1   r4   test_partition5  s    "
r   c                  C   s   t tdddddgddgks"tt tdtdddgks@tt tdg g ksVtG d	d
 d
t} |  }||||f|||fg}t td|gd |kstt tdt|gd |kstd S )Nr7   r9   rF   rG   rJ   r   r>   r   c                   @   s   e Zd Zdd ZdS )z%test_partition_all.<locals>.NoComparec                 S   s   | j |j krdS t d S )NT)	__class__rq   )selfotherr1   r1   r4   __eq__D  s    z,test_partition_all.<locals>.NoCompare.__eq__N)__name__
__module____qualname__r   r1   r1   r1   r4   	NoCompareC  s   r   r[   )rA   r%   rB   r?   r   rf   )r   objresultr1   r1   r4   test_partition_all=  s    "r   c                   C   s\   t ddkstt g dks tt tddks4tt ddksDtt tddksXtd S )Nrb   rF   r   )r9   r7   rF   rG   rG   Zhellor>   )r#   rB   rf   r1   r1   r1   r4   
test_countN  s
    r   c                  C   s  t tdddgddgddggdddgks.tt tddgdddgdddggddgks\tt tddgddggd d dgkstdd	d
ddddg} t td| ddgkstt td| dddgkstt tddg| ddgkstt tdg| ddgks
tt tddg| dddgks,tttdd s@tttdd sTtt tdddgddgddggtdddgkstttdd std S )Nr   r9   r7   rF   rG   r>   rv   r   cheese)idr   pies)r   r   pricer   r   r   )r9   r   )r7   r   )r   )r   r   )r   r   )r9   r   c                   S   s   t tddggS Nr9   r   rA   r'   r1   r1   r1   r4   rP   c  rQ   ztest_pluck.<locals>.<lambda>c                   S   s   t tdddigS )Nr   r   r9   r   r1   r1   r1   r4   rP   d  rQ   c                   S   s   t tddggtS r   )rA   r'   r   r1   r1   r1   r4   rP   g  rQ   )rA   r'   rB   r   r   r   r   r\   r1   r1   r4   
test_pluckW  s    ..&"2r   c                  C   s|   dddg} ddddg}dd	 }t tttt| t|}d
dddh}||ksNtt tttt| t|ttd}||ksxtd S )Nr9   ru   r7   tworF   Zthreeappler9   oranger9   bananar7   coconutr7   c                 S   s   | d | d  S Nr   r9   r1   )pairr1   r1   r4   addpairn  s    ztest_join.<locals>.addpairr9   ru   r   r9   r9   ru   r   r9   r7   r   r   r7   r7   r   r   r7   left_defaultright_default)r   r   r.   r(   r   r   rB   r   )namesfruitr   r   expectedr1   r1   r4   	test_joinj  s    

r   c                   C   sB   t dddkstt dgddks*tt g ddks>td S )Nr   Alicers   r   r1   )r   rB   r1   r1   r1   r4   test_getter  s    r   c                  C   s   dd t dD } dd t dD }ttd| d|ttdd | dd |ksTtd	d }ttdd
g| dd
g|tt|| ||kstdd }ttdg| dg|tt|| ||kstd S )Nc                 S   s   g | ]}||d  fqS rM   r1   .0r   r1   r1   r4   
<listcomp>  s     z&test_key_as_getter.<locals>.<listcomp>r>   c                 S   s   g | ]}||d  |d fqS r   r1   r   r1   r1   r4   r     s     r   c                 S   s   | d S Nr   r1   r2   r1   r1   r4   rP     rQ   z$test_key_as_getter.<locals>.<lambda>c                 S   s   | d S r   r1   r2   r1   r1   r4   rP     rQ   c                 S   s   | d | d fS r   r1   r2   r1   r1   r4   rP     rQ   r9   c                 S   s
   | d fS r   r1   r2   r1   r1   r4   rP     rQ   )r?   r   r(   rB   )ZsquaresZpowsr   r1   r1   r4   test_key_as_getter  s         r   c                  C   sV   dddddg} dddd	g}t tttt| t|}d
dddddddh}||ksRtd S )Nr   r   r   )r9   uno)r7   dosr   r   r   r   r   r   r   r   )r9   r  r   r9   )r9   r  r   r9   )r7   r  r   r7   )r7   r  r   r7   r   r   r.   r(   r   r   rB   r   r   r   r   r1   r1   r4   test_join_double_repeats  s    	r  c                  C   s@   dddg} ddg}t tttt| t|}dh}||ks<td S )Nr   r   r   )r   r>   r   r   r  r  r1   r1   r4   test_join_missing_element  s
    
r  c                  C   s6   t ttddgtddgd d} ddh}| |ks2td S )Nr9   r7   rF   )r   rL   rT   r   r(   r5   rB   r   r   r1   r1   r4   test_left_outer_join  s    r	  c                  C   s6   t ttddgtddgd d} ddh}| |ks2td S )Nr9   r7   rF   )r   rL   r9   Nr  r  r1   r1   r4   test_right_outer_join  s    r  c               	   C   s:   t ttddgtddgd d d} dddh}| |ks6td S )Nr9   r7   rF   r   rL   r
  rT   r  r  r1   r1   r4   test_outer_join  s     
r  c                     s  t tdd stt tdd s$tt tdd s6tttddgdtddgg ksZtttdddgd	tddd
gddgkstttddgd
gdgkstttddgd
gd dddgkstt tdd stt tdd stt tdd stt tdd stttddgdgks.tddddddg} ddddddg}ddd  fdd}tt| ||dddddddfgk d S ) Nc                   S   s
   t t S r0   rA   r)   r1   r1   r1   r4   rP     rQ   ztest_diff.<locals>.<lambda>c                   S   s   t tddgS Nr9   r7   r  r1   r1   r1   r4   rP     rQ   c                   S   s   t tddgdS r   r  r1   r1   r1   r4   rP     rQ   r9   r7   rJ   rF   )r9   rm   rF   rm   )r7   rm   r7   )rF   rF   rm   )r9   rm   r   )r7   Nc                   S   s   t tg S r0   r  r1   r1   r1   r4   rP     rQ   c                   S   s   t tg gS r0   r  r1   r1   r1   r4   rP     rQ   c                   S   s   t tddggS r  r  r1   r1   r1   r4   rP     rQ   c                   S   s   t tddgdgS r   r  r1   r1   r1   r4   rP     rQ   rK   r   dollar)r   currencyd   yeni,  g{Gz?)r  r  c                    s    | d  | d  S )Nr  r   r1   )itemZconversionsr1   r4   	indollars  s    ztest_diff.<locals>.indollarsrR   )r   r   rB   rA   r)   rf   )Zdata1Zdata2r  r1   r  r4   	test_diff  s4    $ 
$
r  c                   C   s  t dddddgdkstt dddddgdd dd	ks<tt dtddddgd
d dd	ksbtt dddddddddddddgddddddddfkstt dddddddddddddgddddddddfkstt ddddddgddkstd S )Nr7   rG   r9   r>   )r>   rG   c                 S   s   |  S r0   r1   r2   r1   r1   r4   rP     rQ   ztest_topk.<locals>.<lambda>rR   rJ   c                 S   s   |  S r0   r1   r2   r1   r1   r4   rP     rQ   rm   r   rZ   r   r   rX   rK   rL   rF   r9   rG   r   r   )r  r  )r*   rB   rf   r1   r1   r1   r4   	test_topk  s,    "&  r  c                   C   s*   t dddddddgdd d	d
ks&td S )NrG   r>   rZ   r7   r9   rF   c                 S   s   dS r;   r1   r2   r1   r1   r4   rP     rQ   z%test_topk_is_stable.<locals>.<lambda>rR   )r>   rZ   r7   r9   )r*   rB   r1   r1   r1   r4   test_topk_is_stable  s    r  c                  C   sL   dddg} t | \}}|| d ks&tt|| ks6tttdd sHtd S )Nr   BobCarolr   c                   S   s   t g S r0   )r+   r1   r1   r1   r4   rP     rQ   ztest_peek.<locals>.<lambda>)r+   rB   rA   r   rp   )alistelementblistr1   r1   r4   	test_peek  s
    
r   c                  C   sl   d} t d| \}}|| d d ks&tt|| ks6tt t| d | \}}|| ksXtt|| kshtd S )N)r   r  r  r7   rG   )r,   rB   rc   len)r  elementsr  r1   r1   r4   
test_peekn  s    r#  c                     s   t td t td dd ks&td fdd	 } |  ksHtd}td}||ksht| |ksttttttksttttt kstdd	kstttfd
dstd S )Nr  r9   i  ZprobseqZrandom_statec                    s   t td | dS )Ng?r$  )rA   r-   )rs)r  r1   r4   rP     s   z$test_random_sample.<locals>.<lambda>i     ar   c                      s    g S r0   r1   r1   )
mk_rsampler1   r4   rP   %  rQ   )r9   )	rA   r?   r-   rB   r   hashr   r   r   )Zrsample1Zrsample2Zrandobjr1   )r  r(  r4   test_random_sample  s    r*  )mr   r   Ztoolz.utilsr   	functoolsr   randomr   pickler   r   Ztoolz.itertoolzr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   operatorr.   r/   r   r5   r8   r:   r<   r=   rE   rI   rN   r^   ra   rd   re   rg   rr   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r   r#  r*  r1   r1   r1   r4   <module>   s~   

				