o
    j                     @   s&  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yS   dZY nw d	Zejjed
edZzd dlZW n eyp   dZY nw dZej !d ee" ddddf Z#e
$e#Z%e&e%dksJ ee' Z(e
)e(Z'e&e(dksJ 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j0g7 Z/W n	 e1y   Y nw ej2de/dd Z3ej2dg ddd Z4dd Z5dd Z6dd Z7dd Z8d d! Z9d"d# Z:d$d% Z;d&d' Z<ej2dg dd(d) Z=d*d+ Z>d,d- Z?d.d/ Z@d0d1 ZAd2d3 ZBd4d5 ZCej2dej-ej.gd6d7 ZDej2dej-ej.gd8d9 ZEd:d; ZFd<d= ZGej2dg d>d?d@ ZHdAdB ZIdCdD ZJdEdF ZKdGdH ZLej2dId	dgdJdK ZMej2dId	dgej2dLg dMej2ddNdOgdPdQ ZNej2dId	dgej2ddNdOgdRdS ZOej2dId	dgej2dg dTej2dd dgdUdV ZPdWdX ZQdYdZ ZRd[d\ ZSej2dId	dgej2ddNdOgd]d^ ZTej2dId	dgd_d` ZUej2dId	dgdadb ZVeej2dce%dd	fe*dd	fe+dd	fe+ddfgddde ZWeej2dg dej2dfd	dgdgdh ZXej2didjejYdkedlgej2dej,ej-ej.ejZej[gej2dfdejYd	edlgej2dmejYdedld	gdndo Z\edpdq Z]eej2dre^dd	gdsdtge_dudvdwdx Z`dydz Zaeej2d{dd	gd|d} Zbed~d Zcedd Zdeej2dg ddd Zeeej2d{dd	gdd Zfeej2d{dd	gdd Zgeej2dddgej2d{dd	gdd Zhedd Zid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_thresholdTFz/optional dependency PyWavelets is not installed)	conditionreasonraisesz-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|j
ks.J ddlm} t|j
}|j|d	d}|j|d
d}|j|d
d}|j
|ksUJ t|d  t|d  k siJ d S )NTcopy      ?r      皙?weight)ndimageF)   r   )size   )
astro_grayastypestdnprandomrandshapeclipr   denoise_tv_chamboller   r
   Zscipyr   Zmorphological_gradientsqrtsum)r   imgZdenoised_astroZndiZfloat_dtypeZgradZgrad_denoised r.   g/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/skimage/restoration/tests/test_denoise.pytest_denoise_tv_chambolle_2d<   s   
,r0   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   r1   Zaxisr   @   )r   r   r!   r   r!   )r   r*   astror%   moveaxis	functoolspartialr   ndimr   tileZnewaxis)r1   	denoised0r-   denoised_atZastro3r.   r.   r/   &test_denoise_tv_chambolle_multichannelU   s    *8r?   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"   r%   multiplyr#   uint8maxr   r*   r   floatminr-   Z	int_astroZdenoised_int_astror.   r.   r/   ,test_denoise_tv_chambolle_float_result_rangen   s   rH   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!         r5   d   <   r@   r   r   N)r%   Zogridr#   rE   r&   r'   r(   r   r*   rC   r   r$   )xyzmaskresr.   r.   r/   test_denoise_tv_chambolle_3dz   s   "(rT   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.}   rM   r      i  rK   r@   r   r   N)r%   sinlinspacepir&   r'   r    r)   r   r*   r#   rC   r   rE   r$   )rO   rS   r.   r.   r/   test_denoise_tv_chambolle_1d   s   "rZ   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.r@   rV   r   r   N)
r%   r&   r'   r   r*   r#   rC   r   rE   r$   )ZimrS   r.   r.   r/   test_denoise_tv_chambolle_4d   s   r[   c            	      C   s   t jd} t }|d| |j 7 }t |dd}tt|dd}t 	|d d}d	}t
j||d
}t
j||d
}|jt jksBJ |jt jksJJ t|tdd}t||d d d d ddf dd}|dkshJ ||ksnJ d S )Nr   g333333?r   r   r   
data_range).NN)r   r   r!   r!   皙?r   g\(\?)r%   r&   default_rngr"   r   standard_normalr(   r)   r   r;   r   r*   r   float64)	rstateZimg2dZ
ssim_noisyZimg4dwZdenoised_2ddenoised_4dZssim_2dZssimr.   r.   r/   #test_denoise_tv_chambolle_weighting   s   "re   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   
   r         -      )
checkerboard_grayr   r$   r%   r&   r'   r(   r)   r   denoise_tv_bregmanr-   out1out2r.   r.   r/   test_denoise_tv_bregman_2d      48rr   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 )Nr@   r         N@r   r   rA   )r"   r   r%   rB   r#   rC   rD   r   rn   r   rE   rF   rG   r.   r.   r/   *test_denoise_tv_bregman_float_result_range   s   ru   c                  C   rf   rg   )
checkerboardr   r$   r%   r&   r'   r(   r)   r   rn   ro   r.   r.   r/   test_denoise_tv_bregman_3d   rs   rw   c                 C   sb   t  }tj|d dd}t|d| }tj|d| d}tjt| |j	 d}t
|||d  d S )Nr2   rt   r   r   r3   r4   r   )r6   r   r   rn   r%   r7   r8   r9   r   r:   r   )r1   Z	img_astror<   r=   r>   r.   r.   r/   'test_denoise_tv_bregman_3d_multichannel   s   rx   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   rt   r   r   r3   )rm   r   r$   r%   r&   r'   r(   r)   r   rn   r   ro   r.   r.   r/   $test_denoise_tv_bregman_multichannel   s   rz   c                  C   s"   t d} t| }t||  d S Nry   ry   )r%   zerosr   denoise_bilateralr   r-   outr.   r.   r/   test_denoise_bilateral_null   s   

r   c                  C   s$   t d } t| }t||  d S r{   )r%   onesr   r~   r   r   r.   r.   r/   test_denoise_bilateral_negative   s   
r   c                  C   s<   t d} d| d< t| }t| d }t||d  d S )Nr|   r!   )r!   r!   rh   )r%   r   r   r~   r   ro   r.   r.   r/    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 )Nry   r   r   r   r   rh   Zsigma_colorZsigma_spatialr1   r^   rK   rj   rk   ri   rl   )
rm   r   r$   r%   r&   r'   r(   r)   r   r~   ro   r.   r.   r/   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.rM      r   rh   r   r   r   gMbP?ZatolN)	r   r   Zchelsear   r~   r%   Zcount_nonzeroiscloser   )r-   Zimg_bilZcondition_paddingr.   r.   r/   test_denoise_bilateral_pad   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 )Nry   r   r   r   r   rh   r   )rm   r   r$   r%   r&   r'   r(   r)   r#   r   r~   r   r-   r.   r.   r/   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 )Nry   r   r   r   ri   r   )rm   r   r$   r%   r&   r'   r(   r)   r#   r   rn   r   r.   r.   r/   test_denoise_bregman_types8  s   r   c                  C   s"   t d} t| tj| d d d S )Nrh   rh   r1   )r%   r}   r   r   r~   r-   r.   r.   r/   test_denoise_bilateral_zerosC  s   
r   c                  C   s&   t dd } t| tj| d d d S )Nr   ri   r   )r%   r   r   r   r~   r   r.   r.   r/   test_denoise_bilateral_constantH  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 )Nry   r   r   r   r   r   rh   r   r^   rK   rj   rk   ri   rl   )rv   r   r$   r%   r&   r'   r(   r)   r7   r   r~   )r1   r-   rp   rq   r.   r.   r/   test_denoise_bilateral_colorM  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)ry   ry   r   r   r%   r   pytestr   
ValueErrorr   r~   r   r.   r.   r/   #test_denoise_bilateral_3d_grayscaled  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)ry   ry   ry   Z	grayscaler   r   )r%   r   r	   r   r~   r   )r-   resultr.   r.   r/   &test_denoise_bilateral_3d_multichannelj  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)rh   rh   rh   rh   r   r   r   r   r.   r.   r/   'test_denoise_bilateral_multidimensionalr  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   r.   r.   r/   test_denoise_bilateral_nanz  s
   r   	fast_modec              
   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rI   rI   r   rh   333333?float32r      ri   r^   )r   r1   sigma{Gz?r   )
r%   r}   r&   r`   r(   r#   r   denoise_nl_meansr$   allclose)r   r-   r   img_f32sr=   Zdenoised_f32r.   r.   r/   test_denoise_nl_means_2d  s    

r   
n_channels)r!   r      ra   r   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 )Nry   r!   r   r   r   .r   ri         ?r   hr   r1   r   )r%   r   r6   Zconcatenater#   r&   r`   r(   r)   r   r   r   )
r   r   r   r-   r   imgnr   
psnr_noisyr=   psnr_denoisedr.   r.   r/   %test_denoise_nl_means_2d_multichannel  s6   

	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   rV   r   r   ri   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_denoise_nl_means_3d  s   

r   )ra   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   ri   )lengthZn_dimrng      Fr   r^   r!   g333333?)r   r   r   r1   r   )r   Zbinary_blobsr#   r%   r&   r_   r`   r(   r   r   r   r7   r   r   )r   r   r1   r-   r   r   r   Zdenoised_ok_multichannelZdenoised_wrong_multichannelZ
psnr_wrongZpsnr_okr.   r.   r/   "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 )Nri   )rh   rh   rV   ri   r   r!   r   r   r   r   T)Z
patch_sizepatch_distancer   r   r   r\   r   .r1   )r%   r&   r_   r}   r`   r(   dictr   Z
zeros_likeranger   r   )r   r-   r   r   Znlmeans_kwargsr   Zdenoised_3dchZpsnr_3drd   Zpsnr_4dZdenoised_3dmcZ	psnr_3dmcr.   r.   r/   test_denoise_nl_means_4d  sN   
  

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)rV   rV   rV   r   r   r   r!   r   r   r   r   r\   r   gffffff?Tr   )r%   r}   r&   Zrandnr(   r   r   r   )r-   r   r   r   Zdenoised_4dmcZ	psnr_4dmcr.   r.   r/   %test_denoise_nl_means_4d_multichannel'  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)ri   r   )ri   r   r   )ri   ri   ri   ri   F)r1   r   )ri   ri   ri   ri   ri   )r%   r}   r   r   NotImplementedErrorr   r   r   r.   r.   r/   %test_denoise_nl_means_wrong_dimension6  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   r   rh   r   r   r   ri   r   )r   r1   )	r%   r}   r&   r`   r(   r#   r   r   r   )r   r   r-   r=   r.   r.   r/   test_no_denoising_for_small_hU  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   ra   )r   r%   r}   intr#   r   r   r   r   r-   r   Zimg_f64r.   r.   r/   test_denoise_nl_means_2d_dtypeg  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   ra   r!   )r   r   r   r   r.   r.   r/   test_denoise_nl_means_3d_dtypez  s$   

r   z img, channel_axis, convert2ycbcrc                 C   s  t jd}d}| ||| j  }t |dd}tj||||dd}t| |}t| |}||ks3J tj|||dd}t| |}t| |}||ksLJ tj||d|dd}	t| |	}
||
ksaJ |
|ksgJ tj|d	| |dd
}tj|||dd
}t 	|d	 t 	|d	 ksJ d S )Nr   r   r   r   Tr   r1   convert2ycbcrrescale_sigma)r1   r   r   )r1   wavelet_levelsr   r   r!   r   r1   r   )
r%   r&   r_   r`   r(   r)   r   denoise_waveletr   r,   )r-   r1   r   rb   r   noisyr=   r   r   
denoised_1psnr_denoised_1Zres1Zres2r.   r.   r/   test_wavelet_denoising  sP   




$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&   r_   	astro_oddr`   r(   r)   r7   r   r   r   )	r1   r   rb   r   r-   r   r=   r   r   r.   r.   r/   #test_wavelet_denoising_channel_axis  s"   

r   case1d2d multichannel)Zmarksestimate_sigmac              	   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|j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sJ dS )z:Test cases for images without prescaling via img_as_float.r   r   r   r@   i   r   Nr5   g      9@r   r   r   Zsym4T)r   waveletr1   r   r   r\   fg?r   u)r%   r&   r_   rX   r   	astronautr#   r`   r(   r)   rF   rD   r   r   r   r   r   r   r   r
   r   kindr   )r   r   r   r   rb   rO   r   r   r1   	sigma_estr=   r]   r   Zclippedr   Z
x_as_floatZf_data_ranger.   r.   r/   test_wavelet_denoising_scaling  sj   

		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   db1)r   method	thresholdzThresholding method BayesShrink)r%   r&   r_   r"   r`   r(   r)   r   r   r   r   r   r	   )rb   r-   r   r   r=   r   r   r.   r.   r/   test_wavelet_thresholdB  s   

"r   zrescale_sigma, method, ndimZ
VisuShrinkr   r   ri   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   r^   )r   )r   皙?ri      r   r   r   r   r   )r%   r&   r_   r   slicer`   r(   r)   r   r   r   )
r   r   r:   rb   r-   r   r   r=   r   r   r.   r.   r/   test_wavelet_denoising_ndZ  s   	

r   c                   C   sF   t t tjtdddd W d    d S 1 sw   Y  d S )Nr   ZUnimplementedTr   )r   r   r   r   r   r%   r   r.   r.   r.   r/   test_wavelet_invalid_method{  s
   "r   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   r^   r   ri   r   r   r   r   )r   r   )r   r   r   z1all coefficients will experience boundary effectsr   )r%   r&   r_   r   r   r`   r(   r)   r   r   r   pywtZdwt_max_levelrF   ZWaveletZdec_lenr	   r   r   r   )r   rb   r:   Nr   r-   r   r   r=   r   r   r   r   Z	max_levelr.   r.   r/   test_wavelet_denoising_levels  sB   


"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&   r_   r"   r   r`   r(   r   r   r   )rb   r-   r   r   r.   r.   r/   test_estimate_sigma_gray  s   r   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   `   r   r   r   r   r   )
r%   r&   r_   r}   r   r`   r(   r   r   r   )rb   r-   Z
center_roir   r   r.   r.   r/    test_estimate_sigma_masked_image  s   
r   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)r1   Zaverage_sigmasr!   r   Fr   )r%   r&   r_   r6   r   r`   r(   r7   r   r   r   r   lenr:   r   UserWarning)r1   rb   r-   r   r   Z
sigma_listr.   r.   r/   test_estimate_sigma_color  s"   r   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   r1   r   )r   r   r   )r   r   r1   r   )r6   r   r%   r&   r`   r(   r   r   r   r   r   
isinstancelist)r   r-   r   r   Zmultichannelr1   r   r.   r.   r/   test_wavelet_denoising_args  s@   r   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   r1   r   )r"   r   r   r   r   )r   r-   r.   r.   r/   !test_denoise_wavelet_biorthogonal  s   
r  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   )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   )
max_shiftsfunc_kwr1   r!   )r	  shift_stepsr
  r1   )r%   r&   r_   r6   r"   r   r`   r(   r   r   r   r	   DASK_NOT_INSTALLED_WARNING
cycle_spinr   r   r   r   r   )r   r1   r   rb   r-   Zvalid_shiftsZvalid_stepsZinvalid_shiftsZinvalid_stepsr   denoise_funcr
  Zdn_ccdnr	  ZpsnrZpsnr_ccr  r.   r.   r/    test_cycle_spinning_multichannel  s   

	


	
r  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   )r	  r
  r1   num_workers)r	  r
  r  r   )r"   r%   r&   r_   r   r`   r(   r   r   r   r  r   r	   r  r   )
r-   r   rb   r   r  r
  Zdn_cc1Zdn_cc1_Zdn_cc2Zdn_cc3r.   r.   r/   test_cycle_spinning_num_workersw  sL   


r  )jr8   	itertoolsnumpyr%   r   Znumpy.testingr   r   r   Zskimager   r   r   r   Zskimage._shared._warningsr	   Zskimage._shared.utilsr
   r   Zskimage.metricsr   r   Zskimage.restoration._denoiser   r   ImportErrorZPYWT_NOT_INSTALLEDmarkZxfailZxfail_without_pywtZdaskr  r&   seedr   r6   Zrgb2grayr"   rD   rv   rm   Zgray2rgbZastro_gray_oddr   r   r   ra   Zfloat_dtypesZfloat128AttributeErrorZparametrizer0   r?   rH   rT   rZ   r[   re   rr   ru   rw   rx   rz   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   paramZint16rC   r   r   productr   r   r   r   r   r   r   r   r  r  r  r.   r.   r.   r/   <module>   s8   









	
#,&

	3J
+

#W