o
    j =                     @   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   a/var/www/html/Deteccion_Ine/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   Z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   Zexpected_msgrecordedr   r   r   test_change_default_value    s4   r/   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@  )   r0   
      r   )nprandomZreshaper   raises
ValueErrorr   )zxr   r   r   test_check_nDN   s
   "r9   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   r>   )boolr   r   r5   r6   r!   )r:   r;   r   r   r   !test_validate_interpolation_orderU   s   """rA   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   r3   float16float32float64)r:   float_dtyper   r   r   test_supported_float_dtype_realj   s   rG   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)rH   )r   r3   	complex64
complex128r   r5   r6   )r:   rH   rF   r   r   r   "test_supported_float_dtype_complex   s   
"rK   frD   c                 C   s   t | tjks	J d S rB   )r   r3   rD   )r:   r   r   r   &test_supported_float_dtype_input_kinds   s   rM   zdtypes, expectedc                 C   s   t | }||ks
J d S rB   )r   )ZdtypesexpectedrF   r   r   r   #test_supported_float_dtype_sequence   s   	rO   )Zmultichannel_outputchannel_axisc                C   s"   |d u rd S |dksJ | j d S )Nr   )shape)r8   rQ   r   r   r   _decorated_channel_axis_size   s   
rS   rQ   )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=   rP   )r3   ZzerosrS   rR   )rQ   r8   sizer   r   r   !test_decorated_channel_axis_shape   s
   
rW   r8   yzYou are on your own.)Zdeprecated_versionZ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    rZ   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#   rZ   r   assert_stacklevelr-   r%   argsr   r   r   r   test_deprecate_func   s   r]   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   rc   r^   r   r   r   r   _func_deprecated_params   s   rd   new0new_namera   rb   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   rc   r^   re   rh   r   r   r   r   _func_replace_params   s   ri   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 )Nrd   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
)rd   r(   r)   r*   r+   r,   selfr   r   r   test_docstring_removed_param   s   z5Test_deprecate_parameter.test_docstring_removed_paramc                 C   rl   )Nri   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
)ri   r(   r)   r*   r+   r,   rm   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rc   r^   Tr   r    r   )r!   r"   r#   rd   r
   r&   r'   r-   )rn   rr   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`.rq   r   r   r<   z`old1` is deprecatedr   z`old0` is deprecatedrs   rt   Tr   )re   rh   )
r!   r"   r#   ri   r
   r-   r%   r\   r&   r'   )rn   rr   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oldr_   r   r   ra   rb   
stacklevelc                 S   s   | |fS rB   r   r   rx   r   r   r   r     s   z=Test_deprecate_parameter.test_missing_DEPRECATED.<locals>.foozExpected .* <DEPRECATED>rq   c                 S   s   | S rB   r   r{   r   r   r   r     s   z=Test_deprecate_parameter.test_missing_DEPRECATED.<locals>.barr   rB   )r	   r!   r5   RuntimeErrorr
   )rn   Z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 )Nrx   new0.190.21rf   r   )r~   arg3c                S   s
   | ||fS r   r   )r   rx   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-   )rn   r   r.   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 deprecatedrq   z.* avoid conflicting valuesr   r   )rc   rh   )r^   re   )rc   r^   re   rh   )r!   r"   r#   r5   r6   ri   )rn   rr   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'rq   Nr   z&.* multiple values for argument 'old0'r   r   rs   )r!   r5   	TypeErrorri   r"   r#   rd   rm   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 listrq   rx   r_   r   r`   c                 S      d S rB   r   )r   r   r   r   r     s   z;Test_deprecate_parameter.test_wrong_param_name.<locals>.fooz'new' is not in listr~   rf   c                 S   r   rB   r   )r   rx   r   r   r   r   r     s   z;Test_deprecate_parameter.test_wrong_param_name.<locals>.bar)r!   r5   r6   r	   )rn   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   )rc   r^   )r!   r"   r#   rd   r   r[   r-   )rn   rv   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 )Nrx   r   r   r`   c                 S   r   rB   r   r{   r   r   r   r     s   z5Test_deprecate_parameter.test_stacklevel.<locals>.foozSet stacklevel manuallyrq   r   r   r   ry   c                 S   r   rB   r   r{   r   r   r   r     s   z5Test_deprecate_parameter.test_stacklevel.<locals>.barz`old` is deprecated)	r	   r
   r!   r5   r|   r"   r#   r   r[   )rn   r   r   rv   r   r   r   test_stacklevel  s(   
"z(Test_deprecate_parameter.test_stacklevelN)r(   
__module____qualname__r!   markZskipifhave_numpydocro   rp   ru   rw   r}   r   r   r   r   r   r   r   r   r   r   rj      s    

%=rj   )7r)   r&   numpyr3   r!   Zskimage._sharedr   Zskimage._shared.utilsr   r   r   r   r   r   r	   r
   rI   rJ   Zcomplex_dtypeshasattrr   r   ZnumpydocImportErrorr/   r9   r   Zparametrizer@   intZuint8Zuint16floatrD   rE   rA   rC   Zuint32Zuint64Zint8Zint16Zint32Zint64rG   rK   r:   rM   rO   rS   rW   rZ   r]   rd   ri   rj   r   r   r   r   <module>   s    (
.





