U
    ?h)                     @   sn  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 d dlm	Z	m
Z
mZmZmZmZmZmZ ejejgZeedr~eejg7 ZdZzd dlZdZW n ek
r   Y nX dd Zd	d
 Zdd Zdd Zejdee ej!ej"e#ej$ej%gejdddd ddddddg	dd Z&ejdeej'ej$ej%ej!ej"ej(ej)ej*ej+ej,ej-gdd Z.ejdeejdddgdd Z/ejddd ej$e0ej$gd!d" Z1ejd#ej'ej%fej%fej$ej"ej*fej%fej$ej'fej$fgd$d% Z2edd&dd'd(d)Z3ed*dd dddd+d,gd-d. Z4ed/d0id1d2d3d4 Z5d5d6 Z6ed7d8d9d:d;d< Z7d=d> Z8dS )?    N)testing)_supported_float_type_validate_interpolation_orderchange_default_valuechannel_as_last_axischeck_nDdeprecate_funcdeprecate_kwarg
remove_arg
complex256FTc               	   C   s  t dddddd} t dddd	dd
d}d}tt}| dddksPtW 5 Q R X t|d j|kspttt}| ddddkstW 5 Q R X t|d j|kstd}tt}|dddkstW 5 Q R X t|d j|ksttt}|ddddkstW 5 Q R X t|d j|ks6ttjdd\}| ddksVt| ddddkslt| j	dks|tt
jjdk r| jdkstW 5 Q R X t|dkstd S )Narg10.12)changed_versionr      c                 S   s
   | ||fS Expected docstring arg0r   arg2r   r   R/var/www/html/venv/lib/python3.8/site-packages/skimage/_shared/tests/test_utils.pyfoo   s    z!test_remove_argument.<locals>.fooz"Some indication on future behavior)r   Zhelp_msgc                 S   s
   | ||fS r   r   r   r   r   r   bar"   s    z!test_remove_argument.<locals>.barzarg1 argument is deprecated and will be removed in version 0.12. To avoid this warning, please do not use the arg1 argument. Please see foo documentation for more details.)r   r   r   r   zarg1 argument is deprecated and will be removed in version 0.12. To avoid this warning, please do not use the arg1 argument. Please see bar documentation for more details. Some indication on future behaviorTrecordr   r   r   r   )r   r   r   r      r   )r   r   )r   r   )r
   pytestwarnsFutureWarningAssertionErrorstrmessagewarningscatch_warnings__name__sysflagsoptimize__doc__len)r   r   expected_msgr   recordedr   r   r   test_remove_argument   s6    
 r/   c               	   C   s  t ddddddd} t dddd	d
ddd}tt&}| ddksNt|ddks^tW 5 Q R X d}t|d j|kstt|d jd	ksttjddT}| dddkst| ddddkst| j	dkstt
jjdk r| jdkstW 5 Q R X t|dkstd S )Nr   r   )	new_valuer   r   r   c                 S   s
   | ||fS r   r   r   r   r   r   r   W   s    z&test_change_default_value.<locals>.fooCustom warning message)r1   r   warning_msgc                 S   s
   | ||fS r   r   r   r   r   r   r   \   s    z&test_change_default_value.<locals>.barr   zThe new recommended value for arg1 is -1. Until version 0.12, the default arg1 value is 0. From version 0.12, the arg1 default value will be -1. To avoid this warning, please explicitly set arg1 value.Tr   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   test_change_default_valueU   s&    r4   c               	   C   s  t ddidddd} t ddiddddd	d
}tt.}| ddddksTt|ddddkshtW 5 Q R X d}t|d j|kstt|d jdksttjdd}| ddkst| dddkst| ddddkst| dddddk st| ddddkst| ddddks*t| dddddksBt| j	dksRtt
jjdk rtsx| jdkstn| jdkstW 5 Q R X t|dkstd S )Nold_arg1new_arg1z0.19r   c                 S   s
   | ||fS r   r   r   r6   r   r   r   r   r      s    z!test_deprecate_kwarg.<locals>.foor2   )deprecated_versionr3   c                 S   s
   | ||fS r   r   r7   r   r   r   r      s    z!test_deprecate_kwarg.<locals>.barr   )r5   )r   r   NzR`old_arg1` is a deprecated argument name for `foo`. Please use `new_arg1` instead.Tr   r   )r   r   N)r   r   r   )r6   r   )r6   r   r   r   zExpected docstring


    Other Parameters
    ----------------
    old_arg1 : DEPRECATED
        Deprecated in favor of `new_arg1`.

        .. deprecated:: 0.19
)r   N)r   N)r	   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   have_numpydocr+   r,   )r   r   r   msgr.   r   r   r   test_deprecate_kwarg~   s6    r;   c               	   C   sJ   t jdd} | ddddf }tt t|d W 5 Q R X d S )Ni@  )   r<   
      r   )nprandomZreshaper   raises
ValueErrorr   )zxr   r   r   test_check_nD   s    rE   dtypeorderr0   r   r               c              	   C   s   |d kr*| t kr t| d dksndstnv|dk s:|dkr\tt t| | W 5 Q R X nD| t kr|dkrtt tt | W 5 Q R X nt| ||kstd S )Nr   r   rJ   )boolr   r"   r   rA   rB   r   )rF   rG   r   r   r   !test_validate_interpolation_order   s    rM   c                 C   s:   t | }| tjtjfkr(|tjks6tn|tjks6td S N)r   r?   float16float32r"   float64)rF   float_dtyper   r   r   test_supported_float_dtype_real   s    rS   allow_complexc              	   C   s`   |r:t | |d}| tjkr*|tjks8tq\|tjks\tn"tt t | |d W 5 Q R X d S )N)rT   )r   r?   	complex64r"   
complex128r   rA   rB   )rF   rT   rR   r   r   r   "test_supported_float_dtype_complex   s    
rW   frP   c                 C   s   t | tjkstd S rN   )r   r?   rP   r"   )rF   r   r   r   &test_supported_float_dtype_input_kinds   s    rY   zdtypes, expectedc                 C   s   t | }||kstd S rN   )r   r"   )ZdtypesexpectedrR   r   r   r   #test_supported_float_dtype_sequence   s    	r[   )Zmultichannel_outputchannel_axisc                C   s"   |d krd S |dkst | jd S )Nr0   )r"   shape)rD   r]   r   r   r   _decorated_channel_axis_size  s    r_   r]   c                 C   sB   t d}t|| d}| d kr,|d ks>tn||j|  ks>td S )N)r   rH   rI   r\   )r?   Zzerosr_   r"   r^   )r]   rD   sizer   r   r   !test_decorated_channel_axis_shape  s
    
rc   	old_kwarg	new_kwargzx.y.z)r8   c                 C   s   d S rN   r   )re   r   r   r   _function_with_deprecated_kwarg  s    rf   c               	   C   sV   t t} tdd t jd }W 5 Q R X | d j|ks@t| d j	t
ksRtdS )zAssert that warning message issued by deprecate_kwarg points to
    file and line number where decorated function is called.
    T)rd   r   r   N)r   r    r!   rf   inspectcurrentframef_linenolinenor"   filename__file__r   Zexpected_linenor   r   r   test_deprecate_kwarg_location  s
    
rn   rD   yzYou are on your own.)r8   Zremoved_versionhintc                   C   s   dS )zDummy function used in `test_deprecate_func`.

    The decorated function must be outside the test function, otherwise it
    seems that the warning does not point at the calling location.
    Nr   r   r   r   r   _deprecated_func)  s    rq   c               	   C   sj   t t} t  t jd }W 5 Q R X | d jjd dksBt	| d j
|ksTt	| d jtksft	d S )Nr   r   zg`_deprecated_func` is deprecated since version x and will be removed in version y. You are on your own.)r   r    r!   rq   rg   rh   ri   r$   argsr"   rj   rk   rl   rm   r   r   r   test_deprecate_func4  s    rs   )9rg   r(   r%   numpyr?   r   Zskimage._sharedr   Zskimage._shared.utilsr   r   r   r   r   r   r	   r
   rU   rV   Zcomplex_dtypeshasattrr   r9   ZnumpydocImportErrorr/   r4   r;   rE   markZparametrizerL   intZuint8Zuint16floatrP   rQ   rM   rO   Zuint32Zuint64Zint8Zint16Zint32Zint64rS   rW   rF   rY   r[   r_   rc   rf   rn   rq   rs   r   r   r   r   <module>   s   (
:):      
 



  
