U
    /e                     @   s   d dl Z d dlZ d dl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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S )    N)takefirstsecondsorted
merge_withreducemergeoperator)defaultdict)import_module)addc                   C   s&   t tddddgddgks"td S )N         )listr   AssertionError r   r   </tmp/pip-unpacked-wheel-zr66a21f/toolz/tests/test_curried.py	test_take
   s    r   c                   C   s   t tjj kstd S N)r   toolzZ	itertoolzr   r   r   r   r   
test_first   s    r   c                   C   s^   t dd dddiddiks"tt ddiddiks:tt ddidd dddiksZtd S )Nc                   S   s   t tS r   r
   intr   r   r   r   <lambda>       ztest_merge.<locals>.<lambda>)factoryr   c                   S   s   t tS r   r   r   r   r   r   r      r   )r   r   r   r   r   r   
test_merge   s    "r   c                   C   s&   t tddiddiddiks"td S )Nr   r   r   r   sumr   r   r   r   r   test_merge_with   s    r    c                   C   s&   t tddiddigddiks"td S )Nar   r   r   r   r   r   r   r   test_merge_with_list   s    r"   c                   C   s"   t tdddgddgkstd S )N)key)r   r   )r   r   )r   r   r   r   r   r   r   test_sorted    s    r$   c                   C   s   t tddkstd S )N)r   r   r      )r   r   r   r   r   r   r   test_reduce$   s    r&   c                   C   s   t jjdkstd S )Nztoolz.curried)r   curried__name__r   r   r   r   r   test_module_name(   s    r)   c                 C   sL   t | rt| tjrdS tj| }|d ks4|dkr8dS |dkoJtj| S )NFr   T)callable
isinstancer   curryZ	functoolzZnum_required_argsZhas_keywords)funcnargsr   r   r   should_curry,   s    r/   c                  C   s   dd l } tt D ]\}}t|s&qt|tjsz|d W nF tk
r   z|d W n tk
rn   Y nX Y qt	d| Y nX t
t| |t|tjkst	|qttttdddh@ dkst	d S )	Nr   r   xz)toolz.curried.operator.%s is not curried!r   submulr   )r	   varscopitemsr*   r+   r   r,   	TypeErrorr   r/   getattrlenset)r	   kvr   r   r   test_curried_operator5   s$    
$r<   c                  C   sN  t d} i }dd }|tt}|t| }|t|| tt|}tttjj}||krJt	|t	| }|rt
ddt| t	|t	| }|rt
ddt| tt||}tdd |}g }	t| D ]T\}
\}}|
|kr|	d	|
  qttt|
r,|	d
|
  q|	d|
  qt
d|	d S )Nztoolz.curried.exceptionsc                 S   s   dd |   D S )Nc                 S   s0   i | ](\}}d |kr|t |r(t|n|qS )__)r/   r   r,   ).0namefr   r   r   
<dictcomp>V   s     zCtest_curried_namespace.<locals>.curry_namespace.<locals>.<dictcomp>)r5   )nsr   r   r   curry_namespaceU   s    z/test_curried_namespace.<locals>.curry_namespacez4There are missing functions in toolz.curried:
    %sz    
z2There are extra functions in toolz.curried:
    %sc                 S   s   | d | d kS )Nr   r   r   )r0   r   r   r   r   l   r   z(test_curried_namespace.<locals>.<lambda>z,%s should come from toolz.curried.exceptionsz%s should be curried from toolzz,%s should come from toolz and NOT be curried
)r   r3   r   updater   Z	valfilterr*   r'   __dict__r9   r   joinr   r   r   r5   appendr/   r7   )
exceptions	namespacerC   Z
from_toolzZfrom_exceptionsZcurried_namespacemissingextraZunequalmessagesr?   Z	orig_funcZ	auto_funcr   r   r   test_curried_namespaceP   s:    

rN   )r   Ztoolz.curriedr   r   r   r   r   r   r   r	   r4   collectionsr
   	importlibr   r   r   r   r   r    r"   r$   r&   r)   r/   r<   rN   r   r   r   r   <module>   s    (	