
    9i                        S SK r S SKrS SKrS SKrS SKJrJrJr  S SK	J
r
JrJrJr  S SKJr  S SKJrJr  S SKJrJr  S SKJr   S SKrSr\R6                  R9                  \S
\S9r S SKrSr\R@                  RC                  S5        \" \RD                  " 5       SS2SS24   5      r#\
RH                  " \#5      r%\RL                  " \%5      S::  d   e\" \RN                  " 5       5      r(\
RR                  " \(5      r'\RL                  " \(5      S::  d   e\%SS2SS24   r*\#SS2SS24   r+\RX                  \RZ                  \R\                  /r/ \/\R`                  /-  r/\R6                  Re                  S\/5      S 5       r3\R6                  Re                  S/ SQ5      S 5       r4S r5S r6S r7S r8S r9S r:S r;S r<\R6                  Re                  S/ SQ5      S 5       r=S r>S  r?S! r@S" rAS# rBS$ rC\R6                  Re                  S\RZ                  \R\                  /5      S% 5       rD\R6                  Re                  S\RZ                  \R\                  /5      S& 5       rES' rFS( rG\R6                  Re                  S/ S)Q5      S* 5       rHS+ rIS, rJS- rKS. rL\R6                  Re                  S/SS	/5      S0 5       rM\R6                  Re                  S/SS	/5      \R6                  Re                  S1/ S2Q5      \R6                  Re                  SS3S4/5      S5 5       5       5       rN\R6                  Re                  S/SS	/5      \R6                  Re                  SS3S4/5      S6 5       5       rO\R6                  Re                  S/SS	/5      \R6                  Re                  S/ S7Q5      \R6                  Re                  SS S/5      S8 5       5       5       rPS9 rQS: rRS; rS\R6                  Re                  S/SS	/5      \R6                  Re                  SS3S4/5      S< 5       5       rT\R6                  Re                  S/SS	/5      S= 5       rU\R6                  Re                  S/SS	/5      S> 5       rV\\R6                  Re                  S?\%SS4\*SS4\+SS4\+SS	4/5      S@ 5       5       rW\\R6                  Re                  S/ SQ5      \R6                  Re                  SASS	/5      SB 5       5       5       rX\R6                  Re                  SCSD\R                  " SE\SF9/5      \R6                  Re                  S\RX                  \RZ                  \R\                  \R                  \R                  /5      \R6                  Re                  SAS	\R                  " S\SF9/5      \R6                  Re                  SG\R                  " S	\SF9S/5      SH 5       5       5       5       r\\SI 5       r]\\R6                  Re                  SJ\R                  " S	S/SKSL/\_" SMSN5      5      5      SO 5       5       r`SP ra\\R6                  Re                  SQS	S/5      SR 5       5       rb\SS 5       rc\ST 5       rd\\R6                  Re                  S/ SQ5      SU 5       5       re\\R6                  Re                  SQS	S/5      SV 5       5       rf\\R6                  Re                  SQS	S/5      SW 5       5       rg\\R6                  Re                  SSS/5      \R6                  Re                  SQS	S/5      SX 5       5       5       rh\SY 5       rig! \ a    S	r GNf = f! \ a    Sr GNf = f! \1 a     GNf = f)Z    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_thresholdFTz/optional dependency PyWavelets is not installed)	conditionreasonraisesz-The optional dask dependency is not installed           ?dtypec                    [         R                  U SS9nUSUR                  5       -  [        R                  R
                  " UR                  6 -  -  n[        R                  " USS5      n[        R                  " USS9nUR                  [        UR                  5      :X  d   eSSKJn  [        UR                  5      nUR                  US	S9nUR                  US
S9nUR                  US
S9nUR                  U:X  d   e[        R                  " US-  R!                  5       5      [        R                  " US-  R!                  5       5      :  d   eg )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_denoiseds          f/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/skimage/restoration/tests/test_denoise.pytest_denoise_tv_chambolle_2dr8   <   s     

E

-C3?RYY^^SYY777C
''#q!
C 55c#FN#8#CCCC$ (		2K
**[u*
-C%%c%9D..~V.MM+---77M1$))+,rwwa}}/GGGG    channel_axis)r   r   r#   r   c                    [         R                  " [        S   SS9n[        R                  " [        SU 5      n[         R                  " USU S9n[
        R                  " [        XR                  -  S9n[        X4" S5         U5        [        R                  " [        S S2S S2[        R                  S S 24   / S	Q5      nS
US S 2S S 2SS S 24   -  US S 2S S 2SS S 24'   [         R                  " US   SS9n[        R                  " USU 5      n[         R                  " USU S9n[
        R                  " [        XR                  -  S9n[        X4" S5         U5        g )N.r   r   r   r   r   r:   axisr   @   )r   r   r#   r   r#   )r	   r,   astror'   moveaxis	functoolspartialr   ndimr   tilenewaxis)r:   	denoised0r1   denoised_atastro3s         r7   &test_denoise_tv_chambolle_multichannelrL   U   s,   00vsKI
++eR
.C//ClH 

Mxx0G
HCxA'3 WWU3B3RZZ23\BFVAq!QJ//F1aA:00LI[[\2F//sH 

M{{0J
KCxA'3r9   c                  v   [         n [        R                  " U S5      R                  [        R                  5      n[        R
                  " U5      S:  d   e[        R                  " USS9nUR                  [        :X  d   e[        R
                  " U5      S::  d   e[        R                  " U5      S:  d   eg )N   r   r   r   r           )r$   r'   multiplyr%   uint8maxr	   r,   r   floatminr1   	int_astrodenoised_int_astros      r7   ,test_denoise_tv_chambolle_float_result_rangerX   n   s    
CC%,,RXX6I66)q   $99)CP##u,,,66$%,,,66$%,,,r9   c                  
   [         R                  SS2SS2SS24   u  pnU S-
  S-  US-
  S-  -   US-
  S-  -   S:  nSUR                  [        5      -  nUS	-  nUS[         R                  R
                  " UR                  6 -  -  nSX3S:  '   S
X3S
:  '   [        R                  " UR                  [         R                  5      SS9nUR                  [        :X  d   eUR                  5       S
-  UR                  5       :  d   eg)zEApply the TV denoising algorithm on a 3D image representing a sphere.r   (      r#         r@   d   <   rN   r   r   N)r'   ogridr%   rS   r(   r)   r*   r	   r,   rQ   r   r&   )xyzmaskress        r7   test_denoise_tv_chambolle_3drf   z   s    hhqtQrT1R4'(GA!Fq=AFq=(AFq=84?DU##DBJDB,,,DDND

*
*4;;rxx+@
MC99779s?TXXZ'''r9   c            	         SS[         R                  " [         R                  " SS[         R                  -  S5      5      -  -   n U S[         R                  R                  U R                  5      -  -  n [         R                  " U SS5      n [        R                  " U R                  [         R                  5      SS	9nUR                  [        :X  d   eUR                  5       S-  U R                  5       :  d   eg
)z2Apply the TV denoising algorithm on a 1D sinusoid.}   r^   r      i  r\   rN   r   r   N)r'   sinlinspacepir(   r)   r"   r+   r	   r,   r%   rQ   r   rS   r&   )ra   re   s     r7   test_denoise_tv_chambolle_1drm      s    cBFF2;;q!bee)T:;;;AbiinnQVV$	$$A
1cA

*
*188BHH+=c
JC99779s?QUUW$$$r9   c                  ,   S[         R                  R                  SSSS5      -  n [        R                  " U R                  [         R                  5      SS9nUR                  [        :X  d   eUR                  5       S-  U R                  5       :  d   eg)zTV denoising for a 4D input.rN   ri   r   r   N)
r'   r(   r)   r	   r,   r%   rQ   r   rS   r&   )imre   s     r7   test_denoise_tv_chambolle_4drp      sn    	ryy~~aAq)	)B

*
*299RXX+>s
KC99779s?RVVX%%%r9   c                  h   [         R                  R                  S5      n [        R	                  5       nUSU R                  UR                  5      -  -  n[         R                  " USS5      n[        [        USS9n[         R                  " US   S5      nS	n[        R                  " XS
9n[        R                  " X4S
9nUR                  [         R                  :X  d   eUR                  [         R                  :X  d   e[        U[        SS9n[        XVS S 2S S 2SS4   SS9nUS:  d   eXr:  d   eg )Nr   g333333?r   r   r   
data_range).NN)r   r   r#   r#   皙?r   g\(\?)r'   r(   default_rngr$   r   standard_normalr*   r+   r   rF   r	   r,   r   float64)	rstateimg2d
ssim_noisyimg4dwdenoised_2ddenoised_4dssim_2dssims	            r7   #test_denoise_tv_chambolle_weightingr      s    YY""4(FOOE	TF**5;;777EGGE1a E&z5SIJ GGE/*L9EA225CK225CK

***

***#KLG !Q1*.ERUVD$;;r9   c                     [         R                  5       n U SU R                  5       -  [        R                  R
                  " U R                  6 -  -  n [        R                  " U SS5      n [        R                  " U SS9n[        R                  " U SS9nU SS2SS	24   R                  5       USS2SS	24   R                  5       :  d   eUSS2SS	24   R                  5       USS2SS	24   R                  5       :  d   eg 
Nr   r   r   
   r         -      )
checkerboard_grayr   r&   r'   r(   r)   r*   r+   r	   denoise_tv_bregmanr1   out1out2s      r7   test_denoise_tv_bregman_2dr      s    

 
 
"C3?RYY^^SYY777C
''#q!
C))#b9D))#a8D r"uad{!DB"$5$9$9$;;;;2qt  "T"R%2+%6%:%:%<<<<r9   c                     [         R                  5       n [        R                  " U S5      R	                  [        R
                  5      n[        R                  " U5      S:  d   e[        R                  " USS9nUR                  [        :X  d   e[        R                  " U5      S::  d   e[        R                  " U5      S:  d   eg )NrN   r         N@r   r   rO   )r$   r   r'   rP   r%   rQ   rR   r	   r   r   rS   rT   rU   s      r7   *test_denoise_tv_bregman_float_result_ranger      s    
//
CC%,,RXX6I66)q   $77	$O##u,,,66$%,,,66$%,,,r9   c                     [         R                  5       n U SU R                  5       -  [        R                  R
                  " U R                  6 -  -  n [        R                  " U SS5      n [        R                  " U SS9n[        R                  " U SS9nU SS2SS	24   R                  5       USS2SS	24   R                  5       :  d   eUSS2SS	24   R                  5       USS2SS	24   R                  5       :  d   eg r   )
checkerboardr   r&   r'   r(   r)   r*   r+   r	   r   r   s      r7   test_denoise_tv_bregman_3dr      s    



C3?RYY^^SYY777C
''#q!
C))#b9D))#a8D r"uad{!DB"$5$9$9$;;;;2qt  "T"R%2+%6%:%:%<<<<r9   c                 *   [         R                  5       n[        R                  " US   SS9n[        R
                  " USU 5      n[        R                  " USU S9n[        R                  " [        XR                  -  S9n[        X#U" S5         5        g )Nr<   r   r   r   r=   r>   r   )rA   r   r	   r   r'   rB   rC   rD   r   rE   r   )r:   	img_astrorH   rI   rJ   s        r7   'test_denoise_tv_bregman_3d_multichannelr      sy    

I..y/@NIIr<8I--$\H 

M~~0M
NCy3q6"23r9   c                  V   [         R                  5       S S2S S24   n U SU R                  5       -  [        R                  R
                  " U R                  6 -  -  n [        R                  " U SS5      n [        R                  " U SS9n[        R                  " U SSS9n[        X5        g )	N2   r   r   r   r   r   r   r=   )r   r   r&   r'   r(   r)   r*   r+   r	   r   r   r   s      r7   $test_denoise_tv_bregman_multichannelr      s    

 
 
"3B38
,C3?RYY^^SYY777C
''#q!
C))#d;D))#dLDt"r9   c                  r    [         R                  " S5      n [        R                  " U 5      n[	        X5        g Nr   r   )r'   zerosr	   denoise_bilateralr   r1   outs     r7   test_denoise_bilateral_nullr      s*    
((8
C

'
'
,C s r9   c                  t    [         R                  " S5      * n [        R                  " U 5      n[	        X5        g r   )r'   onesr	   r   r   r   s     r7   test_denoise_bilateral_negativer      s-    778
C

'
'
,C s r9   c                      [         R                  " S5      n SU S'   [        R                  " U 5      n[        R                  " U S-
  5      n[	        XS-   5        g )Nr   r#   )r#   r#   r   )r'   r   r	   r   r   r   s      r7    test_denoise_bilateral_negative2r     sK    
''(
CCI((-D((r2D d2I.r9   c                     [         R                  5       S S2S S24   n U SU R                  5       -  [        R                  R
                  " U R                  6 -  -  n [        R                  " U SS5      n [        R                  " U SSS S9n[        R                  " U SS	S S9nU S
S2SS24   R                  5       US
S2SS24   R                  5       :  d   eUS
S2SS24   R                  5       US
S2SS24   R                  5       :  d   eg )Nr   r   r   r   r   r   sigma_colorsigma_spatialr:   rt   r\   r   r   r   r   )
r   r   r&   r'   r(   r)   r*   r+   r	   r   r   s      r7   test_denoise_bilateral_2dr     s   

 
 
"3B38
,C3?RYY^^SYY777C
''#q!
C((BTD ((BTD
 r"uad{!DB"$5$9$9$;;;;2qt  "T"R%2+%6%:%:%<<<<r9   c                      [        [        R                  " 5       5      SS2SS24   n [        R                  " U SSSS9n[
        R                  " [
        R                  " USSS	95      n[        US5        g
)zPThis test checks if the bilateral filter is returning an image
correctly padded.r^      r   r   r   r   r   gMbP?atolN)	r   r   chelsear	   r   r'   count_nonzeroiscloser   )r1   img_bilcondition_paddings      r7   test_denoise_bilateral_padr      sj     t||~
&s3wC'7
8C++BRG ((GQU)KL(!,r9   c                 6   [         R                  5       S S2S S24   nUSUR                  5       -  [        R                  R
                  " UR                  6 -  -  n[        R                  " USS5      R                  U 5      n[        R                  " USSS S9  g )Nr   r   r   r   r   r   r   )r   r   r&   r'   r(   r)   r*   r+   r%   r	   r   r   r1   s     r7   test_denoise_bilateral_typesr   +  s    

 
 
"3B38
,C3?RYY^^SYY777C
''#q!

#
#E
*C !!BTr9   c                 2   [         R                  5       S S2S S24   nUSUR                  5       -  [        R                  R
                  " UR                  6 -  -  n[        R                  " USS5      R                  U 5      n[        R                  " USS9  g )Nr   r   r   r   r   r   )r   r   r&   r'   r(   r)   r*   r+   r%   r	   r   r   s     r7   test_denoise_bregman_typesr   8  sz    

 
 
"3B38
,C3?RYY^^SYY777C
''#q!

#
#E
*C ""3q1r9   c                  n    [         R                  " S5      n [        U [        R                  " U S S95        g )Nr   r   r:   )r'   r   r   r	   r   r1   s    r7   test_denoise_bilateral_zerosr   C  s'    
((8
CsK99#DQRr9   c                  t    [         R                  " S5      S-  n [        U [        R                  " U S S95        g )Nr   r   r   )r'   r   r   r	   r   r   s    r7   test_denoise_bilateral_constantr   H  s,    
''(
a
CsK99#DQRr9   )r   r   r   c                    [         R                  5       S S2S S24   nUSUR                  5       -  [        R                  R
                  " UR                  6 -  -  n[        R                  " USS5      n[        R                  " USU 5      n[        R                  " USSU S9n[        R                  " US	S
U S9n[        R                  " XS5      n[        R                  " X S5      n[        R                  " X0S5      nUSS2SS24   R                  5       USS2SS24   R                  5       :  d   eUSS2SS24   R                  5       USS2SS24   R                  5       :  d   eg )Nr   r   r   r   r   r   r   r   rt   r\   r   r   r   r   )r   r   r&   r'   r(   r)   r*   r+   rB   r	   r   )r:   r1   r   r   s       r7   test_denoise_bilateral_colorr   M  s[   



crc3B3h
'C3?RYY^^SYY777C
''#q!
C
++c2|
,C((B\D ((B\D ++c
,C;;t2.D;;t2.D r"uad{!DB"$5$9$9$;;;;2qt  "T"R%2+%6%:%:%<<<<r9   c                      [         R                  " S5      n [        R                  " [        5         [
        R                  " U S S9  S S S 5        g ! , (       d  f       g = f)N)r   r   r!   r   r'   r   pytestr   
ValueErrorr	   r   r   s    r7   #test_denoise_bilateral_3d_grayscaler   d  s8    
''+
C	z	"%%c= 
#	"	"s   A
Ac                      [         R                  " S5      n [        S/5         [        R                  " U SS9nS S S 5        [        WU 5        g ! , (       d  f       N= f)N)r   r   r   	grayscaler   r   )r'   r   r
   r	   r   r   )r1   results     r7   &test_denoise_bilateral_3d_multichannelr   j  sF    
'',
C	K=	)..sD 
* vs# 
*	)s   A
Ac                  T   [         R                  " S5      n [        R                  " [        5         [
        R                  " U S S9  S S S 5        [        R                  " [        5         [
        R                  " U SS9  S S S 5        g ! , (       d  f       NG= f! , (       d  f       g = f)N)r   r   r   r   r   r   r   r   s    r7   'test_denoise_bilateral_multidimensionalr   r  sf    
''"
#C	z	"%%c= 
#	z	"%%c; 
#	" 
#	"	"	"s   B)B
B
B'c                      [         R                  " S[         R                  5      n [        S/5         [        R
                  " U S S9nS S S 5        [        U W5        g ! , (       d  f       N= f)Nr   zinvalid|\A\Zr   )r'   fullnanr
   r	   r   r   r   s     r7   test_denoise_bilateral_nanr   z  sM    
''(BFF
#C 
O,	-++CdC 
.sC  
.	-s   A
A+	fast_modec                    [         R                  " S5      nSUSS2SS24'   SnX[         R                  R                  UR                  5      -  -  nUR                  S5      nUS4 H  n[        R                  " USS	S
U S US9nUR                  5       UR                  5       :  d   e[        R                  " USS	S
U S US9nUR                  5       UR                  5       :  d   e[         R                  " XeSS9(       a  M   e   g )NrZ   rZ   r   r   333333?float32r      r   rt   )r   r:   sigma{Gz?r   )
r'   r   r(   rv   r*   r%   r	   denoise_nl_meansr&   allclose)r   r1   r   img_f32srI   denoised_f32s          r7   test_denoise_nl_means_2dr     s    
((8
CC33E299,,SYY777Cjj#GQZ//Asid!
 wwy8<<>)))"33Q3)$a
 wwy<++---- {{<==== r9   
n_channels)r#   r!      rw   r   c                 &   [         R                  " [        S S2S S24   5      n[         R                  " U4S-  5      nUR	                  U5      nSnX4[         R
                  R                  UR                  5      -  -   n[         R                  " USS5      nUR	                  U5      nUS4 Hb  n[        USS U24   USS U24   5      n[        R                  " USS U24   SSS	U-  U S
US9n[        USS U24   USS U24   5      n	X:  a  Mb   e   g )Nr   r#   r   r   r   .r!   r         ?r   hr   r:   r   )r'   r   rA   concatenater%   r(   rv   r*   r+   r   r	   r   )
r   r   r   r1   r   imgnr   
psnr_noisyrI   psnr_denoiseds
             r7   %test_denoise_nl_means_2d_multichannelr     s=   
 ''%SbS/
"C
..	
C **U
C E22399===D774AD;;uDQZ,[j[ !4[j[(8#9

 //kzk!"Ul
 0S+:+%&C*,<(=

 )))% r9   c                 T   [         R                  " SUS9nSUSS2SS2SS24'   SnX#[         R                  R                  UR                  5      -  -   nUR                  U5      n[        X$5      nUS	4 H1  n[        R                  " US
SSU-  U S US9n[        X'5      U:  a  M1   e   g )N   r   ri   r   r   r   r#   r   r   r!      r   r   )	r'   r   r(   rv   r*   r%   r   r	   r   )r   r   r1   r   r   r   r   rI   s           r7   test_denoise_nl_means_3dr     s     ((;e
,CC"adAbDE22399===D;;uD(3JQZ//!Q$,)$VW
 's5
BBB r9   )rw   r   float16c           
         [         R                  " SSSS9nUS S 2S S2S S24   R                  USS9nS	n[        R                  R                  S5      nX4UR                  UR                  5      -  -   nUR                  U5      n[        R                  " UR                  5       SS
SU-  UU S S9n[        R                  " USU5      n[        R                  " UR                  5       SS
SU-  UU US9n[        R                  " XS5      nUR                  UR                  5      n[        X85      n	[        X75      n
X:  d   eg )N    r!   r   )lengthn_dimrng      Fr   rt   r#   g333333?)r   r   r   r:   r   )r   binary_blobsr%   r'   r(   ru   rv   r*   r	   r   r   rB   r   r   )r   r   r:   r1   r   r   r   denoised_ok_multichanneldenoised_wrong_multichannel
psnr_wrongpsnr_oks              r7   "test_denoise_nl_means_multichannelr    sF    

2QA
6C
a"crck

!
!%e
!
4CE
))


"C,,SYY777D;;uD  +;;				
+  ;;tR.D"-">">				
+!# #%++#2# **066
7C(JJ%cDGr9   c                     [         R                  R                  S5      n [         R                  " S5      nSUSS2SS2SS2S S24'   SUSS2SS2SS2SS 24'   SnXU R	                  UR
                  5      -  -   n[        SSSU-  US	S
9n[        XSS9n[         R                  " U5      n[        UR
                  S   5       H&  n[        R                  " USU4   4SS 0UD6USU4'   M(     [        XSS9nX:  d   e[        R                  " U4SS 0UD6n	[        XSS9n
X:  d   e[        R                  " U4SS0UD6n[        XSS9nX:  d   eg )Nr   )r   r   ri   r   r   r#   r   r   r   r!   T)
patch_sizepatch_distancer   r   r   rr   r   .r:   )r'   r(   ru   r   rv   r*   dictr   
zeros_likeranger	   r   )r   r1   r   r   nlmeans_kwargsr   denoised_3dchpsnr_3dr~   psnr_4ddenoised_3dmc	psnr_3dmcs                r7   test_denoise_nl_means_4dr    s   
))


"C
((>
"C #C"adAbD"1" #C"adAbD!"E,,SYY777DQ#+UdN )sCJ --%KCIIbM"*;;bM 
(, 
0> 
CG # &c3GG ..#1K &c3GG  00!/M (sKIr9   c            
      $   [         R                  " S5      n SU SS2SS2SS2SS2S S 24'   SnX[         R                  R                  " U R                  6 -  -   n[        XSS9n[        R                  " US	S	S
U-  SSUS9n[        XSS9nXS:  d   eg )N)ri   ri   ri   r   r   r   r#   r   r   r   r   rr   r!   gffffff?Tr   )r'   r   r(   randnr*   r   r	   r   )r1   r   r   r   denoised_4dmc	psnr_4dmcs         r7   %test_denoise_nl_means_4d_multichannelr  '  s    
((?
#C%(C"adAbD!B$!"E#))444D(sCJ00adUld5M (sKI!!!r9   c                     [         R                  " S5      n [        R                  " [        5         [
        R                  " U S S9  S S S 5        [         R                  " S5      n [        R                  " [        5         [
        R                  " U SS9  S S S 5        [         R                  " S5      n [        R                  " [        5         [
        R                  " U SSS9  S S S 5        [         R                  " S5      n [        R                  " [        5         [
        R                  " U S SS9  S S S 5        [         R                  " S5      n [        R                  " [        5         [
        R                  " U SSS9  S S S 5        [         R                  " S5      n [        R                  " [        5         [
        R                  " U S S9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN]= f! , (       d  f       GN = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)	N)r   r   )r   r!   r   )r   r   r   r   F)r:   r   )r   r   r   r   r   )r'   r   r   r   NotImplementedErrorr	   r   r   s    r7   %test_denoise_nl_means_wrong_dimensionr  6  sj   
((4.C	*	+$$St< 
, ((6
C	*	+$$Sr: 
, ((<
 C	*	+$$SrUK 
, ((<
 C	*	+$$StuM 
, ((?
#C	*	+$$SrUK 
, ((?
#C	*	+$$St< 
,	+1 
,	+ 
,	+
 
,	+
 
,	+
 
,	+
 
,	+sG   G?G+G=H+H :H1
G(+
G:=
H
H 
H.1
H?c           	         [         R                  " S5      nSUSS2SS24'   US[         R                  R                  UR                  5      -  -  nUR                  U5      n[        R                  " USSSU S S	9n[         R                  " X25      (       d   e[        R                  " USSSU S S	9n[         R                  " X25      (       d   eg )
Nr   r   r   r   r   r   r   r   )r   r:   )	r'   r   r(   rv   r*   r%   r	   r   r   )r   r   r1   rI   s       r7   test_no_denoising_for_small_hr  U  s     ((8
CC333**399555C
**U
C++Q494H ;;x%%%%++Q494H ;;x%%%%r9   c                 z   [         R                  " S[        S9nUR                  S5      nUR                  S5      n[        R
                  " XS9R                  S:X  d   e[        R
                  " X S9R                  UR                  :X  d   e[        R
                  " X0S9R                  UR                  :X  d   eg )Nr   r   r   rw   )r   r'   r   intr%   r	   r   r   r   r1   r   img_f64s       r7   test_denoise_nl_means_2d_dtyper!  g  s    
((83
'Cjj#Gjj#G''AGG9TTT 	$$WBHH==		
 	$$WBHH==		r9   c                    [         R                  " S[        S9nUR                  S5      nUR                  S5      n[        R
                  " USU S9R                  S:X  d   e[        R
                  " USU S9R                  UR                  :X  d   e[        R
                  " USU S9R                  UR                  :X  d   eg )Nr   r   r   rw   r#   )r  r   r  r  s       r7   test_denoise_nl_means_3d_dtyper#  z  s    
((;c
*Cjj#Gjj#G 	$$SiPVV		
 	$$A	

%==		 	$$A	

%==		r9   z img, channel_axis, convert2ycbcrc                    [         R                  R                  S5      nSnXUR                  U R                  5      -  -   n[         R
                  " USS5      n[        R                  " UUUUSS9n[        X5      n[        X5      nX:  d   e[        R                  " UUUSS9n[        X5      n[        X5      nX:  d   e[        R                  " UUSUSS9n	[        X	5      n
X:  d   eX:  d   e[        R                  " US	U-  USS
9n[        R                  " XTUSS
9n[         R                  " US	-  5      [         R                  " US	-  5      ::  d   eg )Nr   r   r   r   Tr   r:   convert2ycbcrrescale_sigma)r:   r&  r'  )r:   wavelet_levelsr&  r'  r#   r   r:   r'  )
r'   r(   ru   rv   r*   r+   r	   denoise_waveletr   r0   )r1   r:   r&  rx   r   noisyrI   r   r   
denoised_1psnr_denoised_1res1res2s                r7   test_wavelet_denoisingr0    ss    YY""4(FE&00;;;EGGE1a E **!#H )4J+C:M%%% **!#	H )4J+C:M%%% ,,!#J .c>O***''' &&QY\D &&TD 66$'?bffT1Wo---r9   r&  c                    [         R                  R                  S5      nSn[        nXCUR	                  UR
                  5      -  -   n[         R                  " USS5      n[         R                  " USU 5      n[         R                  " USU 5      n[        R                  " UUU USS9n[        XE5      n[        XF5      nX:  d   eg )Nr   r   r   r   r   Tr%  )r'   r(   ru   	astro_oddrv   r*   r+   rB   r	   r*  r   )	r:   r&  rx   r   r1   r+  rI   r   r   s	            r7   #test_wavelet_denoising_channel_axisr3    s     YY""4(FE
C&00;;;EGGE1a E
++c2|
,CKKr<0E **!#H )4J+C:M%%%r9   case1d2d multichannel)marksestimate_sigmac           
         [         R                  R                  S5      nU S:X  a  [         R                  " SSS5      nO$U S:X  a  [        R
                  " 5       SS2SS24   nWR                  U5      nS	nXVUR                  UR                  5      -  -   n[         R                  " XuR                  5       UR                  5       5      nUR                  UR                  5      nUR                  S
   S:X  a  S
OSnU(       a  [        R                  " XxS9n	OSn	U(       a@  Uc=  [        R                   " ["        5         [        R$                  " UU	SUUSS9n
SSS5        g[        R$                  " UU	SUUSS9n
U
R                  ['        UR                  5      :X  d   eUR                  5       UR                  5       -
  n[)        XWUS9n[         R                  " U5      R*                  S:g  nU(       d2  [)        XZUS9nU
R                  5       SUR                  5       -  :  d   eO[-        U5      nUR                  5       UR                  5       -
  n[)        XUS9nU
R                  5       S::  d   e[         R                  " U5      R*                  S:X  a  U
R                  5       S:  d   eOU
R                  5       S
:  d   eX:  d   eg! , (       d  f       g= f)z:Test cases for images without prescaling via img_as_float.r   r5  r   rN   i   r6  Nr@   g      9@r   r!   r   sym4T)r   waveletr:   r&  r'  rr   fg?r   u)r'   r(   ru   rk   r   	astronautr%   rv   r*   r+   rT   rR   r   r	   r8  r   r   r   r*  r   r   kindr   )r4  r   r&  r8  rx   ra   r   r+  r:   	sigma_estrI   rs   r   clippedr   
x_as_floatf_data_ranges                    r7   test_wavelet_denoising_scalingrD    sm    YY""4(Ft|KK3%	"	"NNSbS#2#X&	A E..qww777EGGE557AEEG,ELL!E)2tL..uP		-]]:&"22)+"H ' 	**!#H >>25;;????1557"J(jIJhhuo""c)G/
S ||~aeeg--- "!_
!~~'*..*::/\

 ||~$$$88E?3&<<>Q&&&<<>R'''%%%Y '& 	s   =K


Kc                     [         R                  R                  S5      n [        nSnXU R	                  UR
                  5      -  -   n[         R                  " USS5      n[        USS US9n[        X5      n[        X5      nXe:  d   e[        R                  " [        5         [        USS S S9  S S S 5        [        S/5         [        USSUS9  S S S 5        g ! , (       d  f       N0= f! , (       d  f       g = f)	Nr   r   r   r   db1)r;  method	thresholdzThresholding method BayesShrink)r'   r(   ru   r$   rv   r*   r+   r   r   r   r   r   r
   )rx   r1   r   r+  rI   r   r   s          r7   test_wavelet_thresholdrJ  B  s    YY""4(F
CE&00;;;EGGE1a E "%tuUH(4J+C:M%%% 
z	"5%M 
# 
23	45%QVW 
5	4	 
#	" 
5	4s   #CC+
C(+
C9zrescale_sigma, method, ndim
VisuShrinkrI  r   r   c                    [         R                  R                  S5      nUS:  a  S[         R                  " SU-  5      -  nOS[         R                  " SU-  5      -  nSU[	        SS5      4U-  '   S	nXEUR                  UR                  5      -  -   n[         R                  " US
S5      n[        R                  " XaU S9n[        XF5      n[        XG5      n	X:  d   eg )Nr   r!   rt   )r   )r   皙?r      r   r   r   rG  r'  )r'   r(   ru   r   slicerv   r*   r+   r	   r*  r   )
r'  rG  rE   rx   r1   r   r+  rI   r   r   s
             r7   test_wavelet_denoising_ndrQ  Z  s     YY""4(FaxBGGFTM**BGGEDL))"%Cq"$E&00;;;EGGE1a E **MH )4J+C:M%%%r9   c                      [         R                  " [        5         [        R                  " [
        R                  " S5      SSS9  S S S 5        g ! , (       d  f       g = f)Nr   UnimplementedTrO  )r   r   r   r	   r*  r'   r    r9   r7   test_wavelet_invalid_methodrU  {  s7    	z	"##GGBKt	
 
#	"	"s   +A
Ar'  c                    [         R                  R                  S5      nSnSnSnS[         R                  " U4U-  5      -  nSU[	        SS5      4U-  '   S	nXVUR                  UR                  5      -  -   n[         R                  " US
S5      n[        R                  " XtU S9n[        R                  " XtSU S9n	[        XW5      n
[        XX5      n[        XY5      nXs=:  a  U
:  d   e   e[        R                  " [         R                  " UR                  5      [        R                  " U5      R                  5      n[!        S/5         [        R                  " UUUS-   U S9  S S S 5        ["        R$                  " [&        5         [        R                  " XtSU S9  S S S 5        g ! , (       d  f       NH= f! , (       d  f       g = f)Nr   r#      rF  rt   rM  r   rN  r   r   r   )r;  r'  )r;  r(  r'  z1all coefficients will experience boundary effectsr   )r'   r(   ru   r   rP  rv   r*   r+   r	   r*  r   pywtdwt_max_levelrT   Waveletdec_lenr
   r   r   r   )r'  rx   rE   Nr;  r1   r   r+  rI   r,  r   r   r-  	max_levels                 r7   test_wavelet_denoising_levelsr^    s    YY""4(FDAG
t$
$C"%Cq"$E&00;;;EGGE1a E**mH ,,qJ )4J+C:M-c>O 7Z77777 ""266#))#4dll76K6S6STI	OP	Q##$q='		
 
R 
z	"##2]	
 
#	" 
R	Q 
#	"s   F)	F:)
F7:
Gc                      [         R                  R                  S5      n [        R	                  5       nSnXU R                  UR                  5      -  -  n[        R                  " US S9n[        X#SS9  g )Nr   r   r   r#   decimal)
r'   r(   ru   r$   r   rv   r*   r	   r8  r   )rx   r1   r   r@  s       r7   test_estimate_sigma_grayrb    s_    YY""4(F
//
CE6))#))444C**3TBIe:r9   c                  *   [         R                  R                  S5      n [         R                  " S5      n[	        SS5      [	        SS5      4nSX'   SnX0R                  X   R                  5      -  X'   [        R                  " US S9n[        X4SS	9  g )
Nr   )r   r   r   `   rM  r   r   r   r`  )
r'   r(   ru   r   rP  rv   r*   r	   r8  r   )rx   r1   
center_roir   r@  s        r7    test_estimate_sigma_masked_imagerf    s    
 YY""4(F
((:
CB-r2/JCOE44S_5J5JKKCO**3TBIe:r9   c                 
   [         R                  R                  S5      n[        R	                  5       nSnX#UR                  UR                  5      -  -  n[         R                  " USU 5      n[        R                  " X SS9n[        X4SS9  [        R                  " X SS9n[        [        U5      UR                  U    5        [        US	   USS9  XR                  -  S:X  a   [        [        [        R                  U5        g g )
Nr   r   r   T)r:   average_sigmasr#   r`  Fr   )r'   r(   ru   rA   r   rv   r*   rB   r	   r8  r   r   lenrE   r   UserWarning)r:   rx   r1   r   r@  
sigma_lists         r7   test_estimate_sigma_colorrl    s     YY""4(F
**,CE6))#))444C
++c2|
,C**tI e:++uJ s:		,(?@jmYBhh!#[+"<"<cB $r9   c                    [         nUR                  5       S[        R                  R	                  UR
                  5      -  -   nS H  nS H  nU(       a  SOSnU(       aC  U(       d<  [        R                  " [        5         [        R                  " UUUU S9  SSS5        MX  S/ SQS4 HG  nU(       d  U(       a  [        U[        5      (       a	  U(       d  M/  [        R                  " UUUUU S9  MI     M     M     g! , (       d  f       Nk= f)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&  r:   r'  )r   r   r   )r   r&  r:   r'  )rA   r   r'   r(   rv   r*   r   r   r   r	   r*  
isinstancelist)r'  r1   r+  r&  multichannelr:   r   s          r7   test_wavelet_denoising_argsrq    s     CHHJryy88CCCE&)L!-24L\]]:.//&3%1&3	 / 5$]ud++L++"/!-"/ 6 * ' /.s   C>>
Dc           	      P    [         n[        [        [        R                  USSU S9  g)zABiorthogonal wavelets should raise a warning during thresholding.zbior2.2N)r;  r:   r'  )r$   r   rj  r	   r*  )r'  r1   s     r7   !test_denoise_wavelet_biorthogonalrs    s)     C###r9   c                    Sn[         R                  R                  S5      nUb  [        n/ SQn/ SQn/ SQn/ SQnO[        n/ SQn/ SQnS	S
/n/ SQnUR                  5       SUR                  UR                  5      -  -   n	[        R                  n
[        X!U S9n[        [        /5         [        R                  " U	U
SUUS9nU
" U	40 UD6nS S S 5        [        WW5        U HR  n[        [        /5         [        R                  " U	U
UUUS9nS S S 5        [        XM5      n[        XL5      nUU:  a  MR   e   U HS  n[        [        /5         [        R                  " U	U
SUUUS9nS S S 5        [        XM5      n[        XL5      nUU:  a  MS   e   U H>  n[         R"                  " [$        5         [        R                  " U	U
UUUS9nS S S 5        M@     U H?  n[         R"                  " [$        5         [        R                  " U	U
SUUUS9nS S S 5        MA     g ! , (       d  f       GNV= f! , (       d  f       GN&= f! , (       d  f       N= f! , (       d  f       M  = f! , (       d  f       M  = f)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   )rz  )r   r   r   r   ru  r   r   )r   ru  rv  rw  )r   r#   rx  ry  rz  )rz  )r   r   r   ru  r{  r)  r   )
max_shiftsfunc_kwr:   r#   )r|  shift_stepsr}  r:   )r'   r(   ru   rA   r$   r   rv   r*   r	   r*  r  r
   DASK_NOT_INSTALLED_WARNING
cycle_spinr   r   r   r   r   )r'  r:   r   rx   r1   valid_shiftsvalid_stepsinvalid_shiftsinvalid_stepsr+  denoise_funcr}  dn_ccdnr|  psnrpsnr_ccr~  s                     r7    test_cycle_spinning_multichannelr    sR    EYY""4(F=/8>2$#T*;HHJv55cii@@@E..LWG 
67	8&&%
 %+7+ 
9 r5! #
 :;<**%)E = 's/)#5~~ # # :;<**')E = 's/)#5~~ # %
]]:&**%)E '& % %]]:&**')E '& %a 
9	8 =< =< '& '&s<   +"H6H.I 1I5I#
H+.
H=	 
I	
I 	#
I2	c            
      D   [         n Sn[        R                  R                  S5      nU R	                  5       SUR                  U R                  5      -  -   n[        R                  n[        USSS9n[        R                  " UUSUS SS9n[        R                  " X4SUSS9n[        Xg5        [        [        /5         [        R                  " UUSUS S	S9n[        R                  " UUSUS S S9n	S S S 5        [        UW5        [        UW	5        g ! , (       d  f       N'= f)
Nr   r   r   Tr)  r   )r|  r}  r:   num_workers)r|  r}  r  r   )r$   r'   r(   ru   r   rv   r*   r	   r*  r  r  r   r
   r  r   )
r1   r   rx   r+  r  r}  dn_cc1dn_cc1_dn_cc2dn_cc3s
             r7   test_cycle_spinning_num_workersr  w  s   
CEYY""4(FHHJv55cii@@@E..LRtDG ##F $$7G v'	67	8''
 ''
 
9" ff-ff-% 
9	8s   =3D
D)jrC   	itertoolsnumpyr'   r   numpy.testingr   r   r   skimager   r   r   r	   skimage._shared._warningsr
   skimage._shared.utilsr   r   skimage.metricsr   r   skimage.restoration._denoiser   rX  PYWT_NOT_INSTALLEDImportErrormarkxfailxfail_without_pywtdaskr  r(   seedr>  rA   rgb2grayr$   rR   r   r   gray2rgbastro_gray_oddr2  r   r   rw   float_dtypesfloat128AttributeErrorparametrizer8   rL   rX   rf   rm   rp   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#  r0  r3  paramint16rQ   rD  rJ  productr	  rQ  rU  r^  rb  rf  rl  rq  rs  r  r  rT  r9   r7   <module>r     s       U U : : 7 F J ; [[&& < '  & "& 		t  	T^^%dsdDSDj12^^E"
	vvjS     !2!2!45 ~~/0	vv C' '' AssF#!SbS&M	 

BJJ

3	R[[M!L
 ,/H 0H0 74 840	-(%& 0=	-= 74 84	#!!	/=$- 2::rzz":;	 <	 2::rzz":;2 <2S
S
 4= 5=,>$<! udm4> 5>. udm4y19i"89 * : 2 5 *F udm49i"89C : 5C udm4"CD!R1)  2 E 5) X#L"=> udm49i"89& : 5&  udm4 5$ udm4 52 &	T5!	u%	B	B	0. 0.f 75$-8& 9 8 &. 
T6<< 19KLM ZZRZZ288< dFLL6HIJ v||D0BCUKG&	G&T X X. !tUmlM%BE!QKP&	 
&8
 4-8(
 9 (
V 	; 	; ; ;" 7C 8 C2 4-8  9  F 4-8
 9 
 "d44-8T 9 5 Tn ,. ,.Q#    Q!PQ4  		s6   \! &\0 \? !\-,\-0\<;\<?]	]	