o
    Si8                     @   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   T/home/ubuntu/.local/lib/python3.10/site-packages/cytoolz/tests/test_embedded_sigs.py	isfrommod
   s   r   c            
         sD  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 ]a\}\}}|dv rIq>t	|t
rTt|}nt	|| jrat|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*   >   __getattr__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>8   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/   r3   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   sB   

	
rA   r   compcomposec                  C   s   t tdtj} tdd | } |  D ]P\}}|dv rq|j }t|dks2J d| d|j dt	
|| }||d	 v sIJ d
||jf |d rVJ d||jf |d scJ 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   U   r    z'test_sig_at_beginning.<locals>.<lambda>>   r+      zcytoolz.z docstring too short:

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

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

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

%sN)r   r   r   r4   r   r5   r)   
splitlineslenaliasesget)r   r9   valdoclinessigr   r   r   test_sig_at_beginningO   s4   


rM   )r-   r   typesr   r   r   r   r   r   r   r
   r   rA   rD   rH   rM   r   r   r   r   <module>   s    

: