o
    !wi                     @   s~   d dl Z d dlZd dlmZmZ d dlmZmZmZmZm	Z	 d dl
m
Z
 edd Ze
dd Zd	gZd
diZe
dd ZdS )    N)BuiltinFunctionTypeFunctionType)curryidentity	keyfilter	valfilter
merge_with)dev_skip_testc                 C   s*   t |ddpd}|| pdtt|v S )N
__module__ ztoolz.functoolz.curry)getattr
startswithstrtype)modnamefuncmod r   ]/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/cytoolz/tests/test_embedded_sigs.py	isfrommod	   s   r   c            
         s:  ddl } ttd| jttdtj tdd   t fddtfdd  G d	d
 d
tt }| D ]\\}\}}t	|t
rOt|}nt	|| jr\t|j}nt|j}|jfdd|j D d}|j}|dddd}|jt| }||v s||v sd|||jf }	J |	q>dS )z Test that all ``cdef class`` extension types in ``cytoolz`` have
        correctly embedded the function signature as done in ``toolz``.
    r   Ntoolzcytoolzc                 S   s   t | t S N)
isinstancer   xr   r   r   <lambda>   s    z!test_class_sigs.<locals>.<lambda>c                       |  v S r   r   r   )cytoolz_dictr   r   r          c                    r   r   r   r   )
toolz_dictr   r   r      r   c                   @   s    e Zd ZdZdd Zdd ZdS )ztest_class_sigs.<locals>.wrapzNe.g., allow `factory=<class 'dict'>` to instead be `factory=dict` in signaturec                 S   s
   || _ d S r   )obj)selfr!   r   r   r   __init__#   s   
z&test_class_sigs.<locals>.wrap.__init__c                 S   s   t | jdt| jS )N__name__)r   r!   repr)r"   r   r   r   __repr__&   s   z&test_class_sigs.<locals>.wrap.__repr__N)r$   r
   __qualname____doc__r#   r&   r   r   r   r   wrap!   s    r)   c                    s.   g | ]}|j tjur|j |j d n|qS ))default)r*   inspect_emptyreplace).0v)r)   r   r   
<listcomp>5   s    z#test_class_sigs.<locals>.<listcomp>)
parameterszPy_ssize_t r   z=u'z='z_cytoolz.%s does not have correct function signature.

Expected: %s

Docstring in cytoolz is:
%s)r   r   r   __dict__r   r   r   r   itemsr   r   r+   	signaturer   r   r#   r-   r1   valuesr(   r$   r   )
r   dkey
toolz_funccytoolz_func
toolz_specdocdoc_alt	toolz_sigmessager   )r   r    r)   r   test_class_sigs   s>   

	
r?   r   compcomposec                  C   s   t tdtj} tdd | } |  D ]I\}}|j }t|dks+J d||jf dt	
|| }||d v sBJ d||jf |d	 rOJ d
||jf |d s\J d||jf qdS )z~ Test that the function signature is at the beginning of the docstring
        and is followed by exactly one blank line.
    r   c                 S   s   | t vS r   )	skip_sigsr   r   r   r   r   R   r   z'test_sig_at_beginning.<locals>.<lambda>   z#cytoolz.%s docstring too short:

%sz%s(r   z8cytoolz.%s docstring missing signature at beginning:

%s   z<cytoolz.%s docstring missing blank line after signature:

%sz>cytoolz.%s docstring too many blank lines after signature:

%sN)r   r   r   r2   r   r3   r(   
splitlineslenaliasesget)r   r7   valdoclinessigr   r   r   test_sig_at_beginningL   s0   


rL   )r+   r   typesr   r   r   r   r   r   r   r	   r   r?   rB   rG   rL   r   r   r   r   <module>   s    

8