U
    /eX>                     @   s  d dl Z d dlZd dlZ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 d dlmZ d dlmZ d dlmZ d+ddZdd	 Zed
fddZed
f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ed
fdd Zd!d" Z d#d$ Z!d%d& Z"d'd( Z#d)d* Z$dS ),    N)curryis_valid_argsis_partial_argsis_aritynum_required_argshas_varargshas_keywords)builtins)raisesTc                 C   sB   |  dsd|  } |rd}nd}i }td| |f t | |d S )N(z(%s)z1raise ValueError("function should not be called")zreturn Truezdef func%s:
    %sfunc)
startswithexecglobals)Zparam_stringraise_if_calledbodyd r   A/tmp/pip-unpacked-wheel-zr66a21f/toolz/tests/test_inspect_args.py	make_func   s    
r   c                      s  t d tt fddsttt fdds4tt ddd   sJttt fdds`tt ddd  d	sxt d	d
st d	dst d	ddsttt fddstt ddd  d	st d	d
st d	dst d	ddsttt fddstd S )N c                      s     S Nr   r   fr   r   <lambda>       z test_make_func.<locals>.<lambda>c                      s    dS N   r   r   r   r   r   r      r   F)r   c                      s    dS r   r   r   r   r   r   r       r   zx, y=1r   x   r   yc                      s    dddS Nr   r       r   r   r   r   r   r   '   r   z(x, y=1)c                      s    dddS r#   r   r   r   r   r   r   .   r   )r   r
   
ValueErrorAssertionError	TypeErrorr   r   r   r   test_make_func   s$    
r(   Fc                    s  |   fdd} t d}| |s$t| |ddks6t| |dddksJtt d}| ||ksbt| |dspt| |ddst| |ddddkst| |ddd	dkst| |dddkst| |ddd
dkstt d}| |st| |dst| |dds
t| |ddddks"t| |ddd	dks:t| |dddksPt| |ddd
dkshtt d}| |s~t| |dst| |ddst| |dddkstt d}| |st| |ddst| |ddd
st| |ddkstt d}| ||ks t| |ds0t| |ddsBt| |ddsTt| |ddddkslt| |ddd	dkstt d}| ||kst| |dst| |ddst| |ddst| |ddddst| |dddd	dkstt d}| ||kst| |d|ks0t| |ddsBt| |ddd|ksZt| |ddddksrt| |dddddkst| |dddddkst| ddkstd S )Nc                    s    | ||S r   r   r   argskwargsZorig_check_validr   r   r   3   r   ztest_is_valid.<locals>.<lambda>r   r   Fr   r   r    r"   r!   zx=1*args**kwargszx, *argszx, y=1, **kwargsr$   r   r"   zza, b, c=3, d=4)c)eb)r   r&   check_valid
incompleter   r   r,   r   test_is_valid1   sn    r9   c                    s  |   fdd} t d}| ||ks(t| |ds6t| |ddsFt| |dddsXt| |dddkslt| |ddd	dkstt d
}| ||kst| |dst| |ddst| |dddst| |ddddst| |ddst| |ddd	dkstt d}| |st| |ddks0t| |ddsBt| |dd	dksXtt d}| ||ksrt| |d|kst| |dd|kst| |dddst| |dddst| |dddkst| |ddd	dkst| |dddddkstt d}| ||ks&t| |ddd	|ks>t| |ddsPt| |dddsdt| |dddsxt| |ddddst| |dddddkst| |dddddkstt d}| ||kst| |d|kst| |dddstt d}| ||kst| |d|ks2t| |dd|ksHt| |dddd|ksbt| |dddddszt| |ddddddddd
|kstt d}| ||kst| |d|kst| |dd|kst| |ddstt d}| ||kst| |d|ks"t| |dd|ks8t| |ddsJtd|_| |dksbtG d d! d!t}| }| |d kstd S )"Nc                    s    | ||S r   r   r)   r,   r   r   r   v   r   z#test_is_valid_py3.<locals>.<lambda>z	x, *, y=1r   r   r    r-   Fr1   zx, *args, y=1z*, y=1zx, *, yr!   )r"   r1   zx=1, *, y, z=3r$   r0   zw, x=2, *args, y, z=4z%a, b, c=3, d=4, *args, e=5, f=6, g, h   )g   )r<   h         	   za: int, b: floatr4   z(a: int, b: float) -> float"   c                   @   s    e Zd Zdd Zedd ZdS )z+test_is_valid_py3.<locals>.RaisesValueErrorc                 S   s   d S r   r   selfr   r   r   __call__   s    z4test_is_valid_py3.<locals>.RaisesValueError.__call__c                 S   s   t dd S NzTesting Python 3.4r%   rD   r   r   r   __signature__   s    z9test_is_valid_py3.<locals>.RaisesValueError.__signature__N__name__
__module____qualname__rF   propertyrI   r   r   r   r   RaisesValueError   s   rO   )r   r&   rI   object)r7   r8   r   rO   r   r,   r   test_is_valid_py3t   s    $rQ   c                   C   s   t tdd ttdd d S NTr7   r8   )r9   r   rQ   r   r   r   r   test_is_partial   s    rT   c                  C   sZ   ddd} t j| dd}t|dd t|dd t j| dd}t|dd t|dd d S )NTc                 S   s   zbt | || t | f| f | t | f||  t | f||  t| tdd s^W d S |W S  tk
rx   Y dS  tk
r   Y dS X d S )Nc                   S   s   d S r   r   r   r   r   r   r      r   z:test_is_valid_curry.<locals>.check_curry.<locals>.<lambda>TF)r   
isinstancetyper%   r'   )r   r*   r+   r8   r   r   r   check_curry   s    z(test_is_valid_curry.<locals>.check_curry)r8   rS   F)T)	functoolspartialr9   rQ   )rW   r7   r   r   r   test_is_valid_curry   s    
rZ   c                  C   s   ddd} t | di stt | di s*tt | ddd is>tt | ddd idksVtt| di sftt| di svtt| ddd istt| ddd idkstd S )Nc                 S   s   d S r   r   r   r   r   r   r      s    ztest_func_keyword.<locals>.fr   r   r   F)N)r   r&   r   r   r   r   r   test_func_keyword   s    
r\   c                  C   s   t ddkstt tstt tddks0tt tddksDtt tdsTtt tddkshtt tdsxtt tddkstt td	dksttd} d
| _t | dkstG dd dt}| } t | d kstd S )Nr   Fr   zx, y, zr.   r/   zx, y, *args, **kwargsz	x, y, z=1zx, y, z=1, **kwargsrC   c                   @   s    e Zd Zdd Zedd ZdS )z/test_has_unknown_args.<locals>.RaisesValueErrorc                 S   s   d S r   r   rD   r   r   r   rF     s    z8test_has_unknown_args.<locals>.RaisesValueError.__call__c                 S   s   t dd S rG   rH   rD   r   r   r   rI     s    z=test_has_unknown_args.<locals>.RaisesValueError.__signature__NrJ   r   r   r   r   rO     s   rO   )r   r&   mapr   rI   rP   )r   rO   r   r   r   test_has_unknown_args   s    r^   c                   C   s   t dd dkstt dd dks(tt dd dks<tt dd dksPtt dd d	ksdtt td	ksttt td kstd S )
Nc                   S   s   d S r   r   r   r   r   r   r     r   z(test_num_required_args.<locals>.<lambda>r   c                 S   s   d S r   r   r   r   r   r   r     r   r   c                 W   s   d S r   r   r   r*   r   r   r   r     r   c                 [   s   d S r   r   r   r+   r   r   r   r     r   c                 _   s   d S r   r   )r   r"   r*   r+   r   r   r   r     r   r    )r   r&   r]   dictr   r   r   r   test_num_required_args  s    rb   c                   C   s   t dd dkstt dd dks(tt ddds:tt dd sJtt tsVtt tsbtt tsntt tdks~tt td kstd S )	Nc                   S   s   d S r   r   r   r   r   r   r     r   z#test_has_keywords.<locals>.<lambda>Fc                 S   s   d S r   r   r   r   r   r   r     r   r   c                 S   s   d S r   r   r   r   r   r   r     r   c                  [   s   d S r   r   r+   r   r   r   r     r   )r   )r   r&   intsortedmaxr]   	bytearrayr   r   r   r   test_has_keywords  s    rh   c                   C   sX   t dd dkstt dd s$tt dd dks8tt tsDtt td ksTtd S )Nc                   S   s   d S r   r   r   r   r   r   r   %  r   z"test_has_varargs.<locals>.<lambda>Fc                  W   s   d S r   r   )r*   r   r   r   r   &  r   c                  [   s   d S r   r   rc   r   r   r   r   '  r   )r   r&   r]   rf   r   r   r   r   test_has_varargs$  s
    ri   c                   C   s   t ddd stt ddd dks(tt ddd s:tt dd	d sLtt dd
d dksbtt ddd dksxtt dtstt dtdkstt dtd kstd S )Nr   c                   S   s   d S r   r   r   r   r   r   r   -  r   ztest_is_arity.<locals>.<lambda>r   c                   S   s   d S r   r   r   r   r   r   r   .  r   Fc                 S   s   d S r   r   r   r   r   r   r   /  r   r$   c                 S   s   d S r   r   r0   r   r   r   r   0  r   c                 W   s   d S r   r   r_   r   r   r   r   1  r   c                 [   s   d S r   r   r`   r   r   r   r   2  r   r    )r   r&   allr]   ranger   r   r   r   test_is_arity,  s    rl   c                    s  |   fdd} t td}| |s*t| |ds8t| |ddsHt| |dddsZt| |dddddksrt| |d	d
dkst| |dst| |ddst| |dddst| |dddddkst| |ddddkst| |dddst| |ddddkst| |dddds6t| |dddsLt| |dddddsft| |dddddkstt jtdddd}| |dkst| |dddkstt td}| |st| |dst| |ddst| |dddst| |dddds,t| |dddddsFt| |ddddddsbt| |ddsvt| |ddddkst| |ddddstd S )Nc                    s    | ||S r   r   )Z_funcr*   r+   r,   r   r   r   :  r   z1test_introspect_curry_valid_py3.<locals>.<lambda>	x, y, z=0r   r    r$   r?   FT)Zinvalid_keywordr   r-   r:   zx, y, *args, zr   )toolzr   r   r&   r6   r   r,   r   test_introspect_curry_valid_py38  sD    ro   c                   C   s   t tdd d S rR   )ro   r   r   r   r   r   !test_introspect_curry_partial_py3`  s    rp   c                  C   sr  t td} t| dksttd| s,tt| dks<tt| dksLtt td} t| dksjttd| dks|ttd| dkstt| dkstt| stt td} t| dksttd| dksttd| dksttd| dksttd| dkstt| dks$tt| s2tt td	} t| dksRtt| s`tt| sntd S )
Nr   r   Fr   r   rm   r    r$   z*args, **kwargs)rn   r   r   r   r&   r   r   r   r   r   r   r   test_introspect_curry_py3d  s.    rq   c               	      s  t tttttjtjtjtjg	} t	   fdd}|t d |t d |t d |t d  fdd}i }| D ]J}|j
}t| D ]2\}}||||r||krg ||< || | qql|rg }t| D ](\}}	d	|d
t|	}
||
 qd}t|d| d S )Nc                    s   t | |r t| | d S r   )hasattraddgetattr)modattrZdenylistr   r   add_denylist  s    
z5test_introspect_builtin_modules.<locals>.add_denylist
basestringZNoneType__metaclass__Zsequenceiteratorc                    s   | dr| dsdS | ds,|dr0dS zt|trBW dS W n tk
rX   Y nX z6t|o|jd k	o| |jkot|di dk	o| kW S  tk
r   Y dS X d S )N___FZ__pyx_unpickle_Z	_cython__r   T)	r   endswith
issubclassBaseExceptionr'   callablerL   r   AttributeError)modnamenamer   rw   r   r   
is_missing  s*    

z3test_introspect_builtin_modules.<locals>.is_missingz
{}:
    {}z
    z4Missing introspection for the following callables:

z

)r	   rX   	itertoolsoperatorrn   Z	functoolzZ	itertoolzZ	dicttoolzZrecipessetrK   varsitemsappendre   formatjoinr&   )Zmodsrx   r   missingru   r   r   r   messagesnamesmsgmessager   rw   r   test_introspect_builtin_modules  s8    
   



r   c                  C   s   G dd dt } | dd }t|}|tjtdtjjtdtjjgdksVtt| dksftt	d	d
d fftj
| < t| dksttj
| = d S )Nc                   @   s(   e Zd Zdd Zdd Zedd ZdS )z-test_inspect_signature_property.<locals>.AddXc                 S   s
   || _ d S r   r[   rE   r   r   r   r   __init__  s    z6test_inspect_signature_property.<locals>.AddX.__init__c                 _   s   || j || S r   r[   )rE   addxr*   r+   r   r   r   rF     s    z6test_inspect_signature_property.<locals>.AddX.__call__c                 S   sD   t | j}t|j }t jj}t d|}|g| }|j|dS )Nr   
parameters)	inspect	signaturer   listr   values	ParameterPOSITIONAL_OR_KEYWORDreplace)rE   sigparamskindZnewparamr   r   r   rI     s    
z;test_inspect_signature_property.<locals>.AddX.__signature__N)rK   rL   rM   r   rF   rN   rI   r   r   r   r   AddX  s   r   c                 S   s   | S r   r   r   r   r   r   r     r   z1test_inspect_signature_property.<locals>.<lambda>r   r   r   Fr   c                 S   s   d S r   r   r[   r   r   r   r     r   r   )rP   r   r   	Signaturer   r   r&   r   _sigs
expand_sig
signatures)r   r   r   r   r   r   test_inspect_signature_property  s    
r   c                  C   sv   G dd dt } dd }| |}t|t|ks8tt| d ksHttddd fftj| < t| dksrtd S )Nc                   @   s(   e Zd Zdd Zdd Zedd ZdS )z.test_inspect_wrapped_property.<locals>.Wrappedc                 S   s
   || _ d S r   r[   r   r   r   r   r     s    z7test_inspect_wrapped_property.<locals>.Wrapped.__init__c                 _   s   | j ||S r   r[   )rE   r*   r+   r   r   r   rF     s    z7test_inspect_wrapped_property.<locals>.Wrapped.__call__c                 S   s   | j S r   r[   rD   r   r   r   __wrapped__  s    z:test_inspect_wrapped_property.<locals>.Wrapped.__wrapped__N)rK   rL   rM   r   rF   rN   r   r   r   r   r   Wrapped  s   r   c                 S   s   | S r   r   r   r   r   r   r     r   z/test_inspect_wrapped_property.<locals>.<lambda>r   c                 S   s   d S r   r   r[   r   r   r   r     r   r   )rP   r   r   r&   r   r   r   r   )r   r   wrappedr   r   r   test_inspect_wrapped_property  s    r   )T)%rX   r   r   r   rn   Ztoolz.functoolzr   r   r   r   r   r   r   Ztoolz._signaturesr	   Z_signaturesr   Ztoolz.utilsr
   r   r(   r9   rQ   rT   rZ   r\   r^   rb   rh   ri   rl   ro   rp   rq   r   r   r   r   r   r   r   <module>   s4   $
CV
(3!