o
    :ήc                     @   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	 d dl
mZmZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ zd dlZW n eyW   dZY nw dZejd	 ee dd
dd
f Ze eZ!ee" Z#e$e#Z"e!ddddf Z%eddddf Z&ej'ej(ej)gZ*ze*ej+g7 Z*W n	 e,y   Y nw ej-.de*dd Z/ej-.dg ddd Z0dd Z1dd Z2dd Z3dd Z4dd Z5dd Z6dd  Z7d!d" Z8d#d$ Z9d%d& Z:ej-.dg dd'd( Z;d)d* Z<d+d, Z=d-d. Z>d/d0 Z?d1d2 Z@d3d4 ZAd5d6 ZBd7d8 ZCej-.dej(ejDgd9d: ZEej-.dej(ejDgd;d< ZFd=d> ZGd?d@ ZHej-.dg dAdBdC ZIdDdE ZJdFdG ZKdHdI ZLdJdK ZMdLdM ZNej-.dNdOdPgdQdR ZOej-.dNdOdPgej-.dSg dTej-.ddUdVgdWdX ZPdYdZ ZQej-.dNdOdPgej-.ddUdVgd[d\ ZRej-.dNdOdPgej-.dg d]ej-.dd dgd^d_ ZSd`da ZTdbdc ZUddde ZVej-.dNdOdPgej-.ddUdVgdfdg ZWej-.dNdOdPgdhdi ZXej-.dNdOdPgdjdk ZYej-.dle!dOdOfe%dOdOfe&dPdOfe&dPdPfgdmdn ZZej-.dg dej-.dodOdPgdpdq Z[drds Z\ej-.dte]dudvgej'ej(ej)ej^ej_gdPdOgdPdOgdwdx Z`dydz Zaej-.d{e]dPdOgd|d}gebd~ddd Zcdd Zdej-.ddPdOgdd Zedd Zfdd Zgej-.dg ddd Zhdd Ziej-.ddPdOgdd Zjej-.ddPdOgdd Zkej-.dddgej-.ddPdOgdd Zldd Zmdd ZndS )    N)assert_array_almost_equalassert_array_equalassert_warns)colordataimg_as_floatrestoration)expected_warnings)_supported_float_typeslice_at_axis)peak_signal_noise_ratiostructural_similarity)_wavelet_thresholdz-The optional dask dependency is not installed     dtypec                 C   s   t j| dd}|d|  tjj|j  7 }t|dd}tj	|dd}|j
t|ks-J ddlm} t|}|j|d	d}|j|d
d}|j|d
d}|j
|ksSJ t|d  t|d  k sgJ d S )NTcopy      ?r      皙?weight)ndimageF)   r   )size   )
astro_grayastypestdnprandomrandshapeclipr   denoise_tv_chamboller   r
   scipyr   morphological_gradientsqrtsum)r   imgdenoised_astrondifloat_dtypegradgrad_denoised r1   M/tmp/pip-target-vg8gfxp4/lib/python/skimage/restoration/tests/test_denoise.pytest_denoise_tv_chambolle_2d-   s   ,r3   channel_axis)r   r   r   r   c                 C   s  t jtd dd}ttd| }t j|d| d}tjt| |j d}t	||d | t
td dd dtjd d f g d	}d
|d d d d dd d f  |d d d d dd d f< t j|d dd}t|d| }t j|d| d}tjt| |j d}t	||d | d S )N.r   r   r   r   r   r4   axisr   @   )r   r   r   r   r   )r   r&   astror!   moveaxis	functoolspartialr   ndimr   tilenewaxis)r4   	denoised0r+   denoised_atastro3r1   r1   r2   &test_denoise_tv_chambolle_multichannelF   s$   *8rE   c                  C   s   t jtd dd} tdg t jtddd W d    n1 s!w   Y  tdg t tddd	d}W d    n1 s?w   Y  t|d |  d S )
Nr5   r   r   '`multichannel` is a deprecated argumentTr   multichannel%Providing the `multichannel` argumentg-C6*?   r   r&   r:   r	   r   )rA   rB   r1   r1   r2   2test_denoise_tv_chambolle_multichannel_deprecation^   s   rL   c                  C   s`   t jtd ddd} tdg t jtd ddd}W d    n1 s$w   Y  t| | d S )Nr5   r   
   )r   max_num_iterz%`n_iter_max` is a deprecated argument)r   
n_iter_maxrK   )expectedrB   r1   r1   r2   0test_denoise_tv_chambolle_n_iter_max_deprecationm   s   rQ   c                  C   sn   t } t| dtj}t|dksJ tj|dd}|jt	ks#J t|dks,J t
|dks5J d S )N   r   r   r         ?        )r   r!   multiplyr   uint8maxr   r&   r   floatminr+   	int_astrodenoised_int_astror1   r1   r2   ,test_denoise_tv_chambolle_float_result_rangex   s   r]   c                  C   s   t jddddddf \} }}| d d |d d  |d d  dk }d|t }|d	7 }|dt jj|j  7 }d||dk < d
||d
k< tj|t j	dd}|j
tksYJ | d
 | k seJ dS )zEApply the TV denoising algorithm on a 3D image representing a sphere.r   (      r         r9   d   <   rR   r   r   N)r!   ogridr   rX   r"   r#   r$   r   r&   rV   r   r    )xyzmaskresr1   r1   r2   test_denoise_tv_chambolle_3d   s   "(rj   c               	   C   s   ddt t ddt j d  } | dt j| j 7 } t | dd} tj	| 
t jdd	}|jtks5J | d |  k sAJ d
S )z2Apply the TV denoising algorithm on a 1D sinusoid.}   rb   r      i  r`   rR   r   r   N)r!   sinlinspacepir"   r#   r   r%   r   r&   r   rV   r   rX   r    )re   ri   r1   r1   r2   test_denoise_tv_chambolle_1d   s   "rp   c                  C   sV   dt jdddd } tj| t jdd}|jtksJ |	 d | 	 k s)J dS )z TV denoising for a 4D input.rR   rl   r   r   N)
r!   r"   r#   r   r&   r   rV   r   rX   r    )imri   r1   r1   r2   test_denoise_tv_chambolle_4d   s   rr   c                  C   s   t jd} t }|d| |j 7 }t |dd}t |d d}d}t	j
||d}t	j
||d}t||d d d d ddf d	ksFJ d S )
Nr   g333333?r   r   ).NN)r   r   r   r   皙?r   gGz?)r!   r"   default_rngr   r   standard_normalr$   r%   r?   r   r&   r   )rstateimg2dimg4dwdenoised_2ddenoised_4dr1   r1   r2   #test_denoise_tv_chambolle_weighting   s   r|   c                  C      t  } | d|   tjj| j  7 } t| dd} tj	| dd}tj	| dd}| dddd	f  |dddd	f  ksBJ |dddd	f  |dddd	f  ks\J d S 
Nr   r   r   rM   r         -      )
checkerboard_grayr   r    r!   r"   r#   r$   r%   r   denoise_tv_bregmanr+   out1out2r1   r1   r2   test_denoise_tv_bregman_2d      48r   c                  C   sr   t  } t| dtj}t|dksJ tj|dd}|j	t
ks%J t|dks.J t|dks7J d S )NrR   r         N@r   rS   rT   )r   r   r!   rU   r   rV   rW   r   r   r   rX   rY   rZ   r1   r1   r2   *test_denoise_tv_bregman_float_result_range   s   r   c                  C   r}   r~   )
checkerboardr   r    r!   r"   r#   r$   r%   r   r   r   r1   r1   r2   test_denoise_tv_bregman_3d   r   r   c                 C   sb   t  }tj|d dd}t|d| }tj|d| d}tjt| |j	 d}t
|||d  d S )Nr5   r   r   r   r6   r7   r   )r:   r   r   r   r!   r;   r<   r=   r   r>   r   )r4   	img_astrorA   rB   rC   r1   r1   r2   'test_denoise_tv_bregman_3d_multichannel   s   r   c                  C   sf   t  } tj| d dd}tdg tj| ddd}W d    n1 s%w   Y  t||d  d S )Nr5   r   r   rF   TrG   )r:   r   r   r   r	   r   )r   rA   rB   r1   r1   r2   3test_denoise_tv_bregman_3d_multichannel_deprecation   s   r   c                   C   s@   t dg tjtddd W d    d S 1 sw   Y  d S )Nz#`max_iter` is a deprecated argumentr   r   )r   max_iter)r	   r   r   r   r1   r1   r1   r2   ,test_denoise_tv_bregman_max_iter_deprecation   s   "r   c                  C   sp   t  d dd df } | d|   tjj| j  7 } t| dd} tj	| dd}tj	| ddd}t
|| d S )	N2   r   r   r   r   r   r   r6   )r   r   r    r!   r"   r#   r$   r%   r   r   r   r   r1   r1   r2   $test_denoise_tv_bregman_multichannel   s   r   c                  C   s"   t d} t| }t||  d S Nr   r   )r!   zerosr   denoise_bilateralr   r+   outr1   r1   r2   test_denoise_bilateral_null  s   

r   c                  C   s$   t d } t| }t||  d S r   )r!   onesr   r   r   r   r1   r1   r2   test_denoise_bilateral_negative  s   
r   c                  C   s<   t d} d| d< t| }t| d }t||d  d S )Nr   r   )r   r   rM   )r!   r   r   r   r   r   r1   r1   r2    test_denoise_bilateral_negative2  s
   

r   c                  C   s   t  d dd df } | d|   tjj| j  7 } t| dd} tj	| ddd d}tj	| dd	d d}| d
dddf  |d
dddf  ksNJ |d
dddf  |d
dddf  kshJ d S )Nr   r   r   r   r   rM   sigma_colorsigma_spatialr4   rs   r`   r   r   r   r   )
r   r   r    r!   r"   r#   r$   r%   r   r   r   r1   r1   r2   test_denoise_bilateral_2d"  s   48r   c                  C   sR   t t ddddf } tj| dddd}ttj|ddd	}t|d d
S )zTThis test checks if the bilateral filter is returning an image
    correctly padded.rb   rJ   r   rM   r   r   r   gMbP?atolN)	r   r   chelsear   r   r!   count_nonzeroiscloser   )r+   img_bilcondition_paddingr1   r1   r2   test_denoise_bilateral_pad2  s   
r   c                 C   s`   t  d dd df }|d|  tjj|j  7 }t|dd| }t	j
|ddd d d S )Nr   r   r   r   r   rM   r   )r   r   r    r!   r"   r#   r$   r%   r   r   r   r   r+   r1   r1   r2   test_denoise_bilateral_types?  s   
r   c                 C   s\   t  d dd df }|d|  tjj|j  7 }t|dd| }t	j
|dd d S )Nr   r   r   r   r   r   )r   r   r    r!   r"   r#   r$   r%   r   r   r   r   r1   r1   r2   test_denoise_bregman_typesK  s   r   c                  C   s"   t d} t| tj| d d d S )NrM   rM   r4   )r!   r   r   r   r   r+   r1   r1   r2   test_denoise_bilateral_zerosV  s   
r   c                  C   s&   t dd } t| tj| d d d S )Nr   r   r   )r!   r   r   r   r   r   r1   r1   r2   test_denoise_bilateral_constant\  s   r   )r   r   r   c                 C   s  t  d dd df }|d|  tjj|j  7 }t|dd}t|d| }t	j
|dd| d}t	j
|d	d
| d}t|| d}t|| d}t|| d}|ddddf  |ddddf  ksjJ |ddddf  |ddddf  ksJ d S )Nr   r   r   r   r   r   rM   r   rs   r`   r   r   r   r   )r   r   r    r!   r"   r#   r$   r%   r;   r   r   )r4   r+   r   r   r1   r1   r2   test_denoise_bilateral_colorb  s"   48r   c                  C   s(  t  d dd df } | d|   tjj| j  7 } t| dd} tdg t	j
| dddd	}W d    n1 s;w   Y  tdg t	j
| d
ddd	}W d    n1 sYw   Y  | ddddf  |ddddf  ksxJ |ddddf  |ddddf  ksJ d S )Nr   r   r   r   rF   r   rM   T)r   r   rH   rs   r`   r   r   r   r   )r   r   r    r!   r"   r#   r$   r%   r	   r   r   r   r1   r1   r2   /test_denoise_bilateral_multichannel_deprecationy  s"   48r   c                  C   sH   t d} tt tj| d d W d    d S 1 sw   Y  d S )N)r   r   r   r   r!   r   pytestraises
ValueErrorr   r   r   r1   r1   r2   #test_denoise_bilateral_3d_grayscale  s   
"r   c                  C   sP   t d} tdg tj| dd}W d    n1 sw   Y  t||  d S )N)r   r   r   	grayscaler   r   )r!   r   r	   r   r   r   )r+   resultr1   r1   r2   &test_denoise_bilateral_3d_multichannel  s
   
r   c                  C   s   t d} tt tj| d d W d    n1 sw   Y  tt tj| dd W d    d S 1 s9w   Y  d S )N)rM   rM   rM   rM   r   r   r   r   r1   r1   r2   'test_denoise_bilateral_multidimensional  s   
"r   c                  C   sT   t dt j} tdg tj| d d}W d    n1 sw   Y  t| | d S )Nr   zinvalid|\A\Zr   )r!   fullNaNr	   r   r   r   r   r1   r1   r2   test_denoise_bilateral_nan  s
   r   	fast_modeFTc              
   C   s   t d}d|ddddf< d}||t j|j 7 }|d}|dfD ]8}tj|dd	d
| d |d}| | ks=J tj|dd	d
| d |d}| | ksSJ t j	||dds]J q%d S )Nr^   r^   rS   rM   333333?float32r      r   rs   )r   r4   sigma{Gz?r   )
r!   r   r"   ru   r$   r   r   denoise_nl_meansr    allclose)r   r+   r   img_f32srB   denoised_f32r1   r1   r2   test_denoise_nl_means_2d  s(   

r   
n_channels)r   r      float64r   c           
   
   C   s   t td dd df }t |fd }||}d}||t j|j  }t |dd}||}|dfD ]>}t	|dd |f |dd |f }t
j|dd |f ddd	| | d
|d}t	|dd |f |dd |f }	|	|ksuJ q7d S )Nr   r   r   r   r   .r   r         ?r   hr   r4   r   )r!   r   r:   concatenater   r"   ru   r$   r%   r   r   r   )
r   r   r   r+   r   imgnr   
psnr_noisyrB   psnr_denoisedr1   r1   r2   %test_denoise_nl_means_2d_multichannel  s,   


r   c               	   C   s   t td dd df } d}| |t j| j  }t |dd}t| |}tdg t	j
|ddd| d	|d
}W d    n1 sCw   Y  t|| }||ksSJ tdg t	j
|ddd| d	|d W d    d S 1 sqw   Y  d S )Nr   r   r   r   rF   r   r   r   T)r   rH   r   rI   )r   )r!   r   r:   r"   ru   r$   r%   r   r	   r   r   )r+   r   r   r   rB   r   r1   r1   r2   0test_denoise_nl_means_2d_multichannel_deprecated  s&   


"r   c              
   C   s   t jd|d}d|ddddddf< d}||t j|j  }||}t||}|d	fD ]}tj|d
dd| | d |d}t|||ksHJ q/d S )N   r   rl   r   rS   r   r   r   r   r      r   r   )	r!   r   r"   ru   r$   r   r   r   r   )r   r   r+   r   r   r   r   rB   r1   r1   r2   test_denoise_nl_means_3d  s   

r   )r   r   float16c              	   C   s   t jdddd}|d d d dd df j|dd}d	}tjd}||||j  }||}tj	|
 dd
d| || d d}t|d|}tj	|
 dd
d| || |d}t||d}||j}t||}	t||}
|
|	ksuJ d S )N    r   r   )lengthn_dimseed      Fr   rs   r   g333333?)r   r   r   r4   r   )r   binary_blobsr   r!   r"   rt   ru   r$   r   r   r   r;   r   r   )r   r   r4   r+   r   rngr   denoised_ok_multichanneldenoised_wrong_multichannel
psnr_wrongpsnr_okr1   r1   r2   "test_denoise_nl_means_multichannel  s,   $


r   c                  C   sT  t jd} t d}d|ddddddd df< d|dddddddd f< d}||| |j  }tddd| |d	d
}t||dd}t |}t	|jd D ]}t
j|d|f fdd i||d|f< qUt||dd}||ksxJ t
j|fdd i|}	t||	dd}
|
|ksJ t
j|fddi|}t||dd}||ksJ d S )Nr   )rM   rM   rl   r   r   r   r   rS   r   r   T)
patch_sizepatch_distancer   r   r   
data_ranger   .r4   )r!   r"   rt   r   ru   r$   dictr   
zeros_likeranger   r   )r   r+   r   r   nlmeans_kwargsr   denoised_3dchpsnr_3dr{   psnr_4ddenoised_3dmc	psnr_3dmcr1   r1   r2   test_denoise_nl_means_4d3  sF   
  



r   c               	   C   s   t d} d| ddddddddd d f< d}| |t jj| j   }t| |dd}tj|d	d	d
| dd|d}t| |dd}||ksGJ d S )N)rl   rl   rl   r   r   rS   r   r   r   r   r   r   r   gffffff?Tr   )r!   r   r"   randnr$   r   r   r   )r+   r   r   r   denoised_4dmc	psnr_4dmcr1   r1   r2   %test_denoise_nl_means_4d_multichannelY  s   
&r  c                  C   s  t d} tt tj| d d W d    n1 sw   Y  t d} tt tj| dd W d    n1 s=w   Y  t d} tt tj| ddd W d    n1 s_w   Y  t d} tt tj| d dd W d    n1 sw   Y  t d} tt tj| ddd W d    n1 sw   Y  t d} tt tj| d d W d    d S 1 sw   Y  d S )	N)r   r   )r   r   r   )r   r   r   r   F)r4   r   )r   r   r   r   r   )r!   r   r   r   NotImplementedErrorr   r   r   r1   r1   r2   %test_denoise_nl_means_wrong_dimensioni  s0   





"r  c                 C   s   t d}d|ddddf< |dt j|j 7 }||}tj|ddd| d d	}t ||s2J tj|ddd| d d	}t ||sEJ d S )
Nr   rS   rM   r   r   r   r   r   )r   r4   )	r!   r   r"   ru   r$   r   r   r   r   )r   r   r+   rB   r1   r1   r2   test_no_denoising_for_small_h  s   

r  c                 C   sr   t jdtd}|d}|d}tj|| djdksJ tj|| dj|jks*J tj|| dj|jks7J d S )Nr   r   r   r   )r   r!   r   intr   r   r   r   r   r+   r   img_f64r1   r1   r2   test_denoise_nl_means_2d_dtype  s$   

r
  c                 C   sx   t jdtd}|d}|d}tj|d| djdksJ tj|d| dj|jks,J tj|d| dj|jks:J d S )Nr   r   r   r   r   )r   r   r  r  r1   r1   r2   test_denoise_nl_means_3d_dtype  s$   

r  z img, multichannel, convert2ycbcrc                 C   s&  t jd}d}| ||| j  }t |dd}|rdnd }tj||||dd}t| |}t| |}	|	|ks9J tj|||dd}t| |}t| |}	|	|ksRJ tj||d|dd	}
t| |
}|	|ksgJ ||ksmJ tj|d
| |dd}tj|||dd}t 	|d
 t 	|d
 ksJ d S )Nr   r   r   r   r   Tr   r4   convert2ycbcrrescale_sigma)r4   r  r  )r4   wavelet_levelsr  r  r   r   r4   r  )
r!   r"   rt   ru   r$   r%   r   denoise_waveletr   r*   )r+   rH   r  rv   r   noisyr4   rB   r   r   
denoised_1psnr_denoised_1res1res2r1   r1   r2   test_wavelet_denoising  sN   




$r  r  c           	      C   s   t jd}d}t}||||j  }t |dd}t |d| }t |d| }tj	||| |dd}t
||}t
||}||ksCJ d S )Nr   r   r   r   r   Tr  )r!   r"   rt   	astro_oddru   r$   r%   r;   r   r  r   )	r4   r  rv   r   r+   r  rB   r   r   r1   r1   r2   #test_wavelet_denoising_channel_axis  s   

r  c               
   C   s   t jd} d}t}||| |j  }t |dd}tdg tj	||ddd}W d    n1 s4w   Y  t
||}t
||}||ksIJ tdg tj	||d	d
d ddd W d    d S 1 sfw   Y  d S )Nr   r   r   r   rF   T)r   rH   r  rI   db1soft)r  )r!   r"   rt   r  ru   r$   r%   r	   r   r  r   )rv   r   r+   r  rB   r   r   r1   r1   r2   !test_wavelet_denoising_deprecated  s&   

"r  z*case, dtype, convert2ycbcr, estimate_sigma1d2d multichannelc              	   C   s  t jd}| dkrt ddd}n| dkr"t ddddf }||}d	}||||j  }t 	||
 | }||j}|jd
 dkrMd
nd}|rYtj||d}	nd}	|r|du rtt tj||	d||dd}
W d   dS 1 s}w   Y  dS tj||	d||dd}
|
jt|ksJ | |
  }t|||d}t |jdk}|st||
|d}|
 d|  ksJ n4t|}| |
  }t||
|d}|
 dksJ t |jdkr|

 dksJ n|

 d
ksJ ||ksJ dS )z:Test cases for images without prescaling via img_as_float.r   r  r   rR   i   r  Nr9   g      9@r   r   r   sym4T)r   waveletr4   r  r  r   fg?rS   u)r!   r"   rt   rn   r   	astronautr   ru   r$   r%   rY   rW   r   r   estimate_sigmar   r   r   r  r
   r   kindr   )caser   r  r$  rv   re   r   r  r4   	sigma_estrB   r   r   clippedr   
x_as_floatf_data_ranger1   r1   r2   test_wavelet_denoising_scaling  sl   

r+  c                  C   s   t jd} t}d}||| |j  }t |dd}t|dd |d}t||}t||}||ks3J t	
t t|dd d d W d    n1 sKw   Y  tdg t|dd|d W d    d S 1 siw   Y  d S )	Nr   r   r   r   r  )r   method	thresholdzThresholding method BayesShrink)r!   r"   rt   r   ru   r$   r%   r   r   r   r   r   r	   )rv   r+   r   r  rB   r   r   r1   r1   r2   test_wavelet_thresholdj  s&   

"r/  zrescale_sigma, method, ndim
VisuShrinkr.  r   r   c           
      C   s   t jd}|dk rdt d|  }n	dt d|  }d|tddf| < d	}||||j  }t |d
d}tj	||| d}t
||}t
||}	|	|ksRJ d S )Nr   r   rs   )r   )r   皙?r      r   r   r   r,  r  )r!   r"   rt   r   sliceru   r$   r%   r   r  r   )
r  r,  r>   rv   r+   r   r  rB   r   r   r1   r1   r2   test_wavelet_denoising_nd  s   		

r5  c                   C   sF   t t tjtdddd W d    d S 1 sw   Y  d S )Nr   UnimplementedTr3  )r   r   r   r   r  r!   r   r1   r1   r1   r2   test_wavelet_invalid_method  s
   "r7  r  c                 C   s`  t jd}d}d}d}dt |f|  }d|tddf| < d	}||||j  }t |d
d}tj	||| d}tj	||d| d}	t
||}
t
||}t
||	}||  kr^|
ksaJ  J tt |jt|j}tdg tj	|||d | d W d    n1 sw   Y  tt tj	||d| d W d    d S 1 sw   Y  d S )Nr   r      r  rs   r1  r   r2  r   r   r   )r   r  )r   r  r  z1all coefficients will experience boundary effectsr   )r!   r"   rt   r   r4  ru   r$   r%   r   r  r   pywtdwt_max_levelrY   Waveletdec_lenr	   r   r   r   )r  rv   r>   Nr   r+   r   r  rB   r  r   r   r  	max_levelr1   r1   r2   test_wavelet_denoising_levels  sL   




"r?  c                  C   sL   t jd} t }d}||| |j 7 }tj|d d}t	||dd d S )Nr   r   r   r   decimal)
r!   r"   rt   r   r   ru   r$   r   r$  r   rv   r+   r   r'  r1   r1   r2   test_estimate_sigma_gray  s   rC  c                  C   sn   t jd} t d}tddtddf}d||< d}|| || j ||< tj|d d}t	||dd	 d S )
Nr   )r   r   r   `   r1  r   r   r   r@  )
r!   r"   rt   r   r4  ru   r$   r   r$  r   )rv   r+   
center_roir   r'  r1   r1   r2    test_estimate_sigma_masked_image  s   
rF  c                 C   s   t jd}t }d}||||j 7 }t |d| }tj	|| dd}t
||dd tj	|| dd}tt||j|   t
|d	 |dd | |j dkrWtttj	| d S d S )
Nr   r   r   T)r4   average_sigmasr   r@  Fr   )r!   r"   rt   r:   r   ru   r$   r;   r   r$  r   r   lenr>   r   UserWarning)r4   rv   r+   r   r'  
sigma_listr1   r1   r2   test_estimate_sigma_color  s"   rK  c                  C   s   t jd} t }d}||| |j 7 }tdg tj	|ddd}W d    n1 s.w   Y  t
||dd tdg t	|dd}W d    n1 sQw   Y  t
||dd d S )	Nr   r   rF   T)rH   rG  r   r@  rI   )r!   r"   rt   r:   r   ru   r$   r	   r   r$  r   rB  r1   r1   r2   1test_estimate_sigma_color_deprecated_multichannel  s   rL  c              
   C   s   t }| dtj|j  }dD ]P}dD ]K}|rdnd}|r@|s@tt t	j
|||| d W d   n1 s:w   Y  qdg ddfD ]}|sM|rTt|trU|sUqGt	j
||||| d qGqqdS )z
    Some of the functions inside wavelet denoising throw an error the wrong
    arguments are passed. This protects against that and verifies that all
    arguments can be passed.
    r   )TFr   N)r  r4   r  )r   r   r   )r   r  r4   r  )r:   r   r!   r"   ru   r$   r   r   r   r   r  
isinstancelist)r  r+   r  r  rH   r4   r   r1   r1   r2   test_wavelet_denoising_args   s:   rO  c                 C   s   t }tttj|dd| d dS )zABiorthogonal wavelets should raise a warning during thresholding.zbior2.2N)r   r4   r  )r   r   rI  r   r  )r  r+   r1   r1   r2   !test_denoise_wavelet_biorthogonal>  s
   

rP  c              
   C   sR  d}t jd}|d urt}g d}g d}g d}g d}nt}g d}g d}d	d
g}g d}| d||j  }	tj	}
t
||| d}ttg tj|	|
d||d}|
|	fi |}W d    n1 siw   Y  t|| |D ]1}ttg tj|	|
|||d}W d    n1 sw   Y  t||}t||}||ksJ qu|D ]2}ttg tj|	|
d|||d}W d    n1 sw   Y  t||}t||}||ksJ q|D ]!}tt tj|	|
|||d}W d    n1 sw   Y  q|D ]$}tt tj|	|
d|||d}W d    n	1 s w   Y  qd S )Nr   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   )rV  )r   r   r   r   rQ  r   r   )r   rQ  rR  rS  )r   r   rT  rU  rV  )rV  )r   r   r   rQ  rW  r  r   )
max_shiftsfunc_kwr4   r   )rX  shift_stepsrY  r4   )r!   r"   rt   r:   r   r   ru   r$   r   r  r   r	   DASK_NOT_INSTALLED_WARNING
cycle_spinr   r   r   r   r   )r  r4   r   rv   r+   valid_shiftsvalid_stepsinvalid_shiftsinvalid_stepsr  denoise_funcrY  dn_ccdnrX  psnrpsnr_ccrZ  r1   r1   r2    test_cycle_spinning_multichannelG  s   






rf  c            
   	   C   s   t } d}tjd}|  d|| j  }tj}t	|ddd}tj
||d|d dd}tj
||d|dd}t|| ttg tj
||d|d d	d}tj
||d|d d d}	W d    n1 s`w   Y  t|| t||	 d S )
Nr   r   r   Tr  r   )rX  rY  r4   num_workers)rX  rY  rg  r   )r   r!   r"   rt   r   ru   r$   r   r  r   r\  r   r	   r[  r   )
r+   r   rv   r  ra  rY  dn_cc1dn_cc1_dn_cc2dn_cc3r1   r1   r2   test_cycle_spinning_num_workers  s4   





rl  c            
   	   C   sR  t d dd df } d}tjd}|  d|| j  }tj}t	|ddd}d}t
|g tj||d|d	dd
}W d    n1 sEw   Y  td u rR|g}n|tg}t
| tj||d|d	dd
}	W d    n1 spw   Y  t||	 d}td u r|g}n|tg}t
| t||ddd d	 W d    d S 1 sw   Y  d S )Nr   r   r   r   Tr  rF   r   F)rX  rY  rH   rg  r   rI   )r   r!   r"   rt   r   ru   r$   r   r  r   r	   r\  r[  r   )
r+   r   rv   r  ra  rY  mc_warn_strrh  exp_warnrj  r1   r1   r2   7test_cycle_spinning_num_workers_deprecated_multichannel  s<   




"ro  )or<   	itertoolsnumpyr!   r   r9  numpy.testingr   r   r   skimager   r   r   r   skimage._shared._warningsr	   skimage._shared.utilsr
   r   skimage.metricsr   r   skimage.restoration._denoiser   daskImportErrorr[  r"   r   r#  r:   rgb2grayr   r   r   gray2rgbastro_gray_oddr  r   r   r   float_dtypesfloat128AttributeErrormarkparametrizer3   rE   rL   rQ   r]   rj   rp   rr   r|   r   r   r   r   r   r   r   r   r   r   r   r   doubler   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  productint16rV   r+  r/  r   r5  r7  r?  rC  rF  rK  rL  rO  rP  rf  rl  ro  r1   r1   r1   r2   <module>   s   










	
!&


.
G

*


H