o
    ci =                     @   s  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yN   Y nw dd Zd	d
 Zejdeeejeje ej!ej"gejdg d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-ej!gdd Z.e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 Z/eddddddZ0ed g d!d"d# Z1ed$d%d&d'd(d) Z2d*d+ Z3ed,d-d.d/ed0d-d.d/eedfd1d2Z4ed,d3d-d.d4ed0d5d-d.d4eedddfd6d7Z5G d8d9 d9Z6dS ):    N)testing)_supported_float_type_validate_interpolation_orderchange_default_valuechannel_as_last_axischeck_nDdeprecate_funcdeprecate_parameter
DEPRECATED
complex256FTc                  C   s:  t ddddddd} t dddd	d
ddd}tt}| ddks'J |ddks/J W d    n1 s9w   Y  d}t|d j|ksKJ t|d jd	ksVJ tjdd/}| dddksfJ | ddddkspJ | jdkswJ t	j
jdk r| jdksJ W d    n1 sw   Y  t|dksJ d S )Narg10.12)	new_valuechanged_versionr      c                 S   
   | ||fS Expected docstring arg0r   arg2r   r   j/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/skimage/_shared/tests/test_utils.pyfoo!   s   
z&test_change_default_value.<locals>.foozCustom warning message)r   r   warning_msgc                 S   r   r   r   r   r   r   r   bar&      
z&test_change_default_value.<locals>.bar)r   r   r   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.Trecord   )r   r    r   r   r   r   )r   r   )r   pytestwarnsFutureWarningstrmessagewarningscatch_warnings__name__sysflagsoptimize__doc__len)r   r   r   expected_msgrecordedr   r   r   test_change_default_value    s4   r1   c                  C   s`   t jdd} | ddddf }tt t|d W d    d S 1 s)w   Y  d S )Ni@  )   r2   
      r    )nprandomreshaper   raises
ValueErrorr   )zxr   r   r   test_check_nDN   s
   "r<   dtypeorder)	Nr   r   r   r                c                 C   s   |d u r| t krt| d dksJ d S d S |dk s|dkr:tt t| | W d    d S 1 s3w   Y  d S | t kr_|dkr_tt tt | W d    d S 1 sXw   Y  d S t| ||kshJ d S )Nr   r   rA   )boolr   r   r8   r9   r"   )r=   r>   r   r   r   !test_validate_interpolation_orderU   s   """rD   c                 C   s<   t | }| tjtjfv r|tjksJ d S |tjksJ d S N)r   r5   float16float32float64)r=   float_dtyper   r   r   test_supported_float_dtype_realj   s   rJ   allow_complexc                 C   sz   |rt | |d}| tjkr|tjksJ d S |tjksJ d S tt t | |d W d    d S 1 s6w   Y  d S )N)rK   )r   r5   	complex64
complex128r   r8   r9   )r=   rK   rI   r   r   r   "test_supported_float_dtype_complex   s   
"rN   frG   c                 C   s   t | tjks	J d S rE   )r   r5   rG   )r=   r   r   r   &test_supported_float_dtype_input_kinds   s   rP   zdtypes, expectedc                 C   s   t | }||ks
J d S rE   )r   )dtypesexpectedrI   r   r   r   #test_supported_float_dtype_sequence   s   	rS   )multichannel_outputchannel_axisc                C   s"   |d u rd S |dksJ | j d S )Nr   )shape)r;   rV   r   r   r   _decorated_channel_axis_size   s   
rX   rV   )Nr   r   r    r   c                 C   sD   t d}t|| d}| d u r|d u sJ d S ||j|  ks J d S )N)r    r?   r@   rU   )r5   zerosrX   rW   )rV   r;   sizer   r   r   !test_decorated_channel_axis_shape   s
   
r]   r;   yzYou are on your own.)deprecated_version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    rb   c                  C   sf   t t} t  t|  W d    n1 sw   Y  t| dks%J | d jjd dks1J 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$   rb   r   assert_stacklevelr.   r&   argsr   r   r   r   test_deprecate_func   s   re   old10.10r   start_versionstop_versionold0c                 C   s   | |||fS )zExpected docstring.

    Parameters
    ----------
    arg0 : int
        First unchanged parameter.
    arg1 : int, optional
        Second unchanged parameter.
    r   )r   rk   rf   r   r   r   r   _func_deprecated_params   s   rl   new0new_nameri   rj   new1c                 C   s   | |||||fS )aS  Expected docstring.

    Parameters
    ----------
    arg0 : int
        First unchanged parameter.
    new0 : int, optional
        First new parameter.

        .. versionadded:: 0.10
    new1 : int, optional
        Second new parameter.

        .. versionadded:: 0.10
    arg1 : int, optional
        Second unchanged parameter.
    r   )r   rk   rf   rm   rp   r   r   r   r   _func_replace_params   s   rq   c                   @   s   e Zd Zejje dddd Zejje dd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 )Test_deprecate_parameterzrequires numpydoc)reasonc                 C   0   t jdksJ tjjdk rt jdksJ d S d S )Nrl   r    ar  Expected docstring.


    Parameters
    ----------
    arg0 : int
        First unchanged parameter.
    arg1 : int, optional
        Second unchanged parameter.

    Other Parameters
    ----------------
    old0 : DEPRECATED
        `old0` is deprecated.

        .. deprecated:: 0.10
    old1 : DEPRECATED
        `old1` is deprecated.

        .. deprecated:: 0.10
)rl   r)   r*   r+   r,   r-   selfr   r   r   test_docstring_removed_param   s   z5Test_deprecate_parameter.test_docstring_removed_paramc                 C   rt   )Nrq   r    a1  Expected docstring.


    Parameters
    ----------
    arg0 : int
        First unchanged parameter.
    new0 : int, optional
        First new parameter.

        .. versionadded:: 0.10
    new1 : int, optional
        Second new parameter.

        .. versionadded:: 0.10
    arg1 : int, optional
        Second unchanged parameter.

    Other Parameters
    ----------------
    old0 : DEPRECATED
        Deprecated in favor of `new1`.

        .. deprecated:: 0.10
    old1 : DEPRECATED
        Deprecated in favor of `new0`.

        .. deprecated:: 0.10
)rq   r)   r*   r+   r,   r-   ru   r   r   r   test_docstring_replaced_param  s   z6Test_deprecate_parameter.test_docstring_replaced_paramc                 C   s~  d}t jt|d tddddtd fksJ W d    n1 s!w   Y  t jt|d tddddks8J W d    n1 sBw   Y  t jt|d tdddddtd fks]J W d    n1 sgw   Y  t jt|d tddddtdd fksJ W d    n1 sw   Y  tjd	d
}tddddttdfksJ W d    n1 sw   Y  t|dksJ d S )Nz.*`old[01]` is deprecated since version 0\.10 and will be removed in 0\.12.* see the documentation of .*_func_deprecated_params`.matchr   r    r?   )r   r    r?   Nrk   rf   Tr   r!   r   )r"   r#   r$   rl   r
   r'   r(   r.   )rv   rz   r   r   r   r   test_warning_removed_param>  s8   

z3Test_deprecate_parameter.test_warning_removed_paramc                 C   s  d}t jt|d tdddttd dd fksJ W d    n1 s#w   Y  t jt|d}tddddttddd fks@J W d    n1 sJw   Y  t|dksWJ d|d jjd v scJ d|d jjd v soJ t jt|d tddd	dttd dd fksJ W d    n1 sw   Y  t jt|d tddd
dttdd d fksJ W d    n1 sw   Y  tj	dd}tdddddttddd fksJ W d    n1 sw   Y  t|dksJ d S )Nz.*`old[0,1]` is deprecated since version 0\.10 and will be removed in 0\.12.* see the documentation of .*_func_replace_params`.ry   r   r    r?   z`old1` is deprecatedr   z`old0` is deprecatedr{   r|   Tr   )rm   rp   )
r"   r#   r$   rq   r
   r.   r&   rd   r'   r(   )rv   rz   recordsr   r   r   r   test_warning_replaced_paramZ  sp   

	


	z4Test_deprecate_parameter.test_warning_replaced_paramc                 C   st   t ddddd}ddd}tjtdd	 || W d    n1 s#w   Y  tfd
d}||ddks8J d S )Noldrg   r   r    ri   rj   
stacklevelc                 S   s   | |fS rE   r   r   r   r   r   r   r     s   z=Test_deprecate_parameter.test_missing_DEPRECATED.<locals>.foozExpected .* <DEPRECATED>ry   c                 S   s   | S rE   r   r   r   r   r   r     s   z=Test_deprecate_parameter.test_missing_DEPRECATED.<locals>.barr   rE   )r	   r"   r8   RuntimeErrorr
   )rv   decorater   r   r   r   r   test_missing_DEPRECATED  s   

z0Test_deprecate_parameter.test_missing_DEPRECATEDc                 C   s   t dddddtfdd ddd	}tjd
d/}|ddks!J |dddddks,J |ddddks6J |ddddks@J W d    n1 sJw   Y  t|dksWJ d S )Nr   new0.190.21rn   r   )r   arg3c                S   s
   | ||fS r   r   )r   r   r   r   r   r   r   r     r   z;Test_deprecate_parameter.test_new_keyword_only.<locals>.fooTr   r   )r   r   Nr    )r   r   r    )r   )r   r    N)r   )r	   r
   r'   r(   r.   )rv   r   r0   r   r   r   test_new_keyword_only  s   z.Test_deprecate_parameter.test_new_keyword_onlyc              	   C   s\  d}t jt|d& t jtdd tdddd W d    n1 s#w   Y  W d    n1 s2w   Y  t jt|d& t jtdd tdddd W d    n1 sXw   Y  W d    n1 sgw   Y  t jt|d1 t jtdd tdddddd W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )	N.*`old[0,1]` is deprecatedry   z.* avoid conflicting valuesr   r    )rk   rp   )rf   rm   )rk   rf   rm   rp   )r"   r#   r$   r8   r9   rq   )rv   rz   r   r   r   test_conflicting_old_and_new  s(   "z5Test_deprecate_parameter.test_conflicting_old_and_newc              	   C   s   t jtdd t  W d   n1 sw   Y  t jtdd/ t jtdd tdddd W d   n1 s;w   Y  W d   dS W d   dS 1 sSw   Y  dS )	z8Check that normal errors for faulty calls are unchanged.z(.* required positional argument\: 'arg0'ry   Nr   z&.* multiple values for argument 'old0'r   r    r{   )r"   r8   	TypeErrorrq   r#   r$   rl   ru   r   r   r   test_wrong_call_signature  s   "z2Test_deprecate_parameter.test_wrong_call_signaturec                 C   s   t jtdd tdddddd }W d    n1 sw   Y  t jtd	d tdd
ddddd }W d    d S 1 sAw   Y  d S )Nz'old' is not in listry   r   rg   r   rh   c                 S      d S rE   r   )r   r   r   r   r     s   z;Test_deprecate_parameter.test_wrong_param_name.<locals>.fooz'new' is not in listr   rn   c                 S   r   rE   r   )r   r   r   r   r   r   r     s   z;Test_deprecate_parameter.test_wrong_param_name.<locals>.bar)r"   r8   r9   r	   )rv   r   r   r   r   r   test_wrong_param_name  s   "z.Test_deprecate_parameter.test_wrong_param_namec                 C   sV   t t}tdddd t| W d    n1 sw   Y  t|dks)J d S )Nr   r    )rk   rf   )r"   r#   r$   rl   r   rc   r.   )rv   r~   r   r   r   test_warning_location  s
   z.Test_deprecate_parameter.test_warning_locationc                 C   s   t ddddtfdd}tjtdd |d	d
 W d    n1 s$w   Y  t dddddtfdd}tjtdd}|d	d
 t| W d    d S 1 sTw   Y  d S )Nr   r   r   rh   c                 S   r   rE   r   r   r   r   r   r     s   z5Test_deprecate_parameter.test_stacklevel.<locals>.foozSet stacklevel manuallyry   r   r   r    r   c                 S   r   rE   r   r   r   r   r   r     s   z5Test_deprecate_parameter.test_stacklevel.<locals>.barz`old` is deprecated)	r	   r
   r"   r8   r   r#   r$   r   rc   )rv   r   r   r~   r   r   r   test_stacklevel  s(   
"z(Test_deprecate_parameter.test_stacklevelN)r)   
__module____qualname__r"   markskipifhave_numpydocrw   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   rr      s    

%=rr   )7r*   r'   numpyr5   r"   skimage._sharedr   skimage._shared.utilsr   r   r   r   r   r   r	   r
   rL   rM   complex_dtypeshasattrr   r   numpydocImportErrorr1   r<   r   parametrizerC   intuint8uint16floatrG   rH   rD   rF   uint32uint64int8int16int32int64rJ   rN   r=   rP   rS   rX   r]   rb   re   rl   rq   rr   r   r   r   r   <module>   s    (
.





