
    1-Ph              	       T
   d dl Z d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ ej                            dej        ej        g          d             Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&ej                            dej'        ej        ej(        g          d             Z)ej                            dej'        ej        ej(        g          d             Z*d Z+ej                            dddg          ej                            dej,        ej-        ej(        g          ej                            dg d          d                                     Z.ej/        0                    d             ej1                    Z2 ej3        e2          Z4 ej5        e4dz  dz             Z4d  Z6d! Z7ej                            dej'        ej        ej(        g          d"             Z8d# Z9d$ Z:ej                            d%dd d&gfdd d'gfd(d)d*gfg          d+             Z;ej                            d%dd,d-gfdd.d&gfd/d0d1gfg          d2             Z<d3 Z=d4Z>d5Z?d6Z@d7ZAd8 ZBd9 ZCej                            dej'        ej        ej(        g          d:             ZDd; ZEej                            dej        ejF        ej'        ej        ej(        g          d<             ZGd= ZHd> ZId? ZJd@ ZKdA ZLdB ZMdC ZNej        O                     eejP                   edD          k     dEF          ej                            dGdHdIg          dJ                         ZQej                            dKdLej,        fdMejR        fdNejR        fdOejR        fdPeSfg          dQ             ZTdR ZUdS ZVdT ZWej                            dej'        ej        ej(        g          dU             ZXdV ZYdW ZZdX Z[dY Z\dZ Z]d[ Z^d\ Z_d] Z`d^ Zad_ Zbd` Zcej                            dej'        ej        ej(        g          da             Zddb Zedc Zfdd Zgde Zhej                            dej'        ej        ej(        g          df             Zidg Zjdh Zkej                            dej'        ej        ej(        g          di             Zldj Zmdk Zndl Zodm Zpdn Zqdo Zrej                            dpejs        ejt        eju        g          dq             Zvdr Zwds ZxdS )t    N)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalassert_equal)Version)data)exposure)util)rgb2gray)intensity_range)dtype_range)expected_warnings)_supported_float_typedtypec                     t          j        ddg|           }t          j        t          d          5  t          j        |d          \  }}d d d            d S # 1 swxY w Y   d S )Nd   r   z+Incorrect value for `source_range` argumentmatchfoobarsource_range)nparraypytestraises
ValueErrorr
   	histogramr   imfrequenciesbin_centerss       d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/skimage/exposure/tests/test_exposure.pytest_wrong_source_ranger&      s    	2s)5	)	)	)B	z)V	W	W	W Q Q#+#5bx#P#P#P [Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Qs   AA"Ac                  &   t          j        ddgt           j                  } t          j        |           \  }}t          |t          j        dd                     |d         dk    sJ |d         dk    sJ t          |dd         d           d S )Nr   r   r   e   r      r   r   int8r
   r    r   aranger"   r#   r$   s      r%   test_negative_overflowr.   #   s    	2s)27	+	+	+B'1"55K{BIb#$6$6777q>Qr?a{1R4(!,,,,,    c                  &   t          j        ddgt           j                  } t          j        |           \  }}t          |t          j        dd                     |d         dk    sJ |d         dk    sJ t          |dd         d           d S )Nir   r   r   r)   r*   r-   s      r%   test_all_negative_imager1   ,   s    	4*BG	,	,	,B'1"55K{BIdA$6$6777q>Qr?a{1R4(!,,,,,r/   c                  $   t          j        ddgt           j                  } t          j        |           \  }}t          t          |          t          |                     t          |d         d           t          |d         d           d S )N
   r   r   r   r   )r   r   r+   r
   r    r   lenr-   s      r%   test_int_range_imager5   5   s    	2s)27	+	+	+B'1"55K[!!3{#3#3444Q$$$R#&&&&&r/   c                  v   t          j        ddgddggt           j                  } t          j        | d          \  }}t          | j        d                   D ]2}t          t          ||                   t          |                     3t          |d         d           t          |d         d           d S )	Nr3      r   f   r   r   )channel_axisr   )	r   r   r+   r
   r    rangeshaper   r4   )r"   r#   r$   chs       r%   !test_multichannel_int_range_imager=   =   s    	B7S#J'rw	7	7	7B'1"2FFFKBHRL!! = =SR))3{+;+;<<<<Q###R#&&&&&r/   c                  p   t          j        ddgt           j                  } t          j        | d          \  }}t          |t          j        dd                     t          |d         d           t          |d         d           t          |d	         d           t          |j        d
           d S )Nr3   r   r   r   r   r      r)   r(   r?   )	r   r   uint8r
   r    r   r,   r   r;   r-   s      r%   test_peak_uint_range_dtyperB   F   s    	2s)28	,	,	,B'1"7KKKK{BIa$5$5666R!$$$S!1%%%S!1%%%"F+++++r/   c                  p   t          j        ddgt           j                  } t          j        | d          \  }}t          |t          j        dd                     t          |d         d	           t          |d
         d	           t          |d         d           t          |j        d           d S )Nr3   r   r   r   r         r)         r   r@   )	r   r   r+   r
   r    r   r,   r   r;   r-   s      r%   test_peak_int_range_dtyperI   P   s    	2s)27	+	+	+B'1"7KKKK{BIdC$8$8999X&***Y'+++Y'+++"F+++++r/   c                      t          j        dddt           j                  } t          j        | d          \  }}t          |t          j        dd                     t          |j        d           d S )Nr      r?   r   r   r   r@   )	r   linspacerA   r
   r    r   r,   r   r;   r-   s      r%   test_flat_uint_range_dtyperM   Z   sk    	QS	1	1	1B'1"7KKKK{BIa$5$5666"F+++++r/   c                      t          j        dddt           j                  } t          j        | d          \  }}t          |t          j        dd                     t          |j        d           d S )NrD   rE   r?   r   r   r   r@   )	r   rL   r+   r
   r    r   r,   r   r;   r-   s      r%   test_flat_int_range_dtyperO   a   sk    	T327	3	3	3B'1"7KKKK{BIdC$8$8999"F+++++r/   c                     t          j        ddg|           }t          j        |d          \  }}|j        | k    sJ t          |t          j        dd          dz              d S )Nr3   r   r   Z   nbins      ?)r   r   r
   r    r   r   r,   r!   s       r%   "test_peak_float_out_of_range_imagerU   h   so    	2s)5	)	)	)B'1"B???K%%%%{BIb#$6$6$<=====r/   c                 N   t          j        ddg|           }d}t          j        ||d          \  }}|j        | k    sJ t          t          j        |          dd           t          t          j        |          dd           t          t          |          d           d S )	Nr3   r   r   r   )rS   r   g   ?)
r   r   r
   r    r   r   minmaxr   r4   )r   r"   rS   r#   r$   s        r%   "test_peak_float_out_of_range_dtyper[   q   s    	2s)5	)	)	)BE'1"EPWXXXK%%%%{++T1555{++S!444[!!2&&&&&r/   c                  8   t          j        g dt           j                  } t          j        | dd          \  }}t          j        d          }d|d<   d	|d
<   t          ||           t          j        | dd          \  }}|dz  }t          ||           d S )N)r   rK   rK   r   r   F)r   	normalizer?   r)   r      r   Tg      @)r   r   rA   r
   r    zerosr   )r"   r#   r$   expecteds       r%   test_normalizera   |   s    	---rx	0	0	0B'1
E     K x}}HHQKHRLh''''1
D     K OHh'''''r/   r   imager9   )r   r)   r   c                 .   d}|d         |d         z  }t           |          \  }}t          j        t          j        |||           t          j        |||           f|          }t	          j        |||          \  }}	t          j        | t          j                  r&t          |	t          j	        ||dz                        |d         d         |k    sJ |d         d         dk    sJ |d         d         dk    sJ |d         d         |k    sJ dS )	z-Check that all channels use the same binning.)r7   r7   r   r)   r   )axis)r   r9   r   N)
r   r   stackfullr
   r    
issubdtypeintegerr   r,   )
r   r   r9   r;   channel_sizeiminimaxr"   r#   r$   s
             r%   (test_multichannel_hist_common_bins_uint8rl      s=    E8eAh&LU#JD$	GE4u---GE4u---	
 
 
 
B  (1
L     K 
}UBJ'' C;	$q(A(ABBBq>!,,,,q>"""""q>!!!!!q>"------r/   g      @r   c                      t          j        t                    } t          j        t          d          }t          | |           dS )z)Check integer bins used for uint8 images.rW   rR   N)r
   equalize_histtest_img_intr   )img_eq0img_eq1s     r%   test_equalize_uint8_approxrr      s=    $\22G$\;;;GGW%%%%%r/   c                      t          j        t                    } t          j        |           }t          j        |          \  }}t          |           d S )N)r   img_as_ubytetest_imgr
   rn   cumulative_distributioncheck_cdf_slope)imgimg_eqcdf	bin_edgess       r%   test_equalize_ubyter|      sJ    

H
%
%C#C((F5f==NCCr/   c                 >   t          j        t                                        | d          }t	          j        |          }|j        t          |           k    sJ t	          j        |          \  }}t          |           |j        t          |           k    sJ d S )NFcopy)
r   img_as_floatru   astyper
   rn   r   r   rv   rw   )r   rx   ry   rz   r{   s        r%   test_equalize_floatr      s    

H
%
%
,
,U
,
?
?C#C((F<07777775f==NCC?3E::::::::r/   c                  ^   t          j        t                    } t          j        t          j                  }d|ddddf<   t          j        | |          }t          j        |           }t          j        |          \  }}t          |           ||k    
                                rJ d S )Nr)   r   i  )mask)r   r   ru   r   r_   r;   r
   rn   rv   rw   all)rx   r   img_mask_eqry   rz   r{   s         r%   test_equalize_maskedr      s    

H
%
%C8HN##DDS#c'	(4888K#C((F5kBBNCC+%**,,,,,,,r/   c                     t          j        ddt          |                     }t          j        || d          \  }}d|cxk     rdk     sn J dS )z=Slope of cdf which should equal 1 for an equalized histogram.r   r)   rX   皙?N)r   rL   r4   polyfit)rz   norm_intensityslope	intercepts       r%   rw   rw      s^    [As3xx00Nz.#q99E9r/   ztest_input,expectedr)   rK   )r3      r3   r   c                     t          j        ddgt           j                  }t          ||           }t	          ||           d S )Nr   r)   r   range_values)r   r   rA   r   r   
test_inputr`   rb   outs       r%   test_intensity_range_uint8r      sF    
 HaV28,,,E
%j
9
9
9CsH%%%%%r/   皙?皙?r   )333333?皙?r   r   c                     t          j        ddgt           j                  }t          ||           }t	          ||           d S )Nr   r   r   r   r   r   float64r   r   r   s       r%   test_intensity_range_floatr      sF    
 Hc3Zrz222E
%j
9
9
9CsH%%%%%r/   c                      t          j        ddgt           j                  } t          | dd          }t	          |d           d S )Nr   r   r   r   T)r   clip_negative)r   r)   r   rb   r   s     r%   "test_intensity_range_clipped_floatr      sF    Hc3Zrz222E
%gT
J
J
JCsF#####r/   i  i  i?  i  c                      t          j        g dt           j                  } t          j        |           }|j        t           j        k    sJ t          |g d           d S )N3   r8      r   r      rK   )r   r   rA   r
   rescale_intensityr   r   r   s     r%   test_rescale_stretchr     s[    H^^^28444E

$U
+
+C9    c===11111r/   c                  ~    t          j        g d          } t          j        |           }t	          |g d           d S )Ng     I@g     Y@g      c@)r   rT   r)   r   r   r
   r   r   r   s     r%   test_rescale_shrinkr     sB    H)))**E

$U
+
+Cc;;;/////r/   c                     t          j        g d|           }t          j        |d          }t	          |g dd           |j        |j        k    sJ d S )Nr   r   r   rK   in_range)r   r   g333333?   )decimal)r   r   r
   r   r   r   r   rb   r   s      r%   test_rescale_in_ranger     sf    H)))777E

$UX
>
>
>Cc???A>>>>9######r/   c                      t          j        g d          } t          j        | d          }t	          |g d           d S )Nr   )r   r8   r   )rT   r)   r)   r   r   s     r%   test_rescale_in_range_clipr   "  sG    H)))**E

$UX
>
>
>Cc;;;/////r/   c                     t          j        g d|           }t          j        |d          }|j        t          |j                  k    sJ t          |g d           dS )a?  Check that output range is correct.

    .. versionchanged:: 0.17
        This function used to return dtype matching the input dtype. It now
        matches the output.

    .. versionchanged:: 0.19
        float16 and float32 inputs now result in float32 output. Formerly they
        would give float64 outputs.
    )r   r3   r   r   r   	out_range)r   g     O@r   N)r   r   r
   r   r   r   r   r   s      r%   test_rescale_out_ranger   (  si     H\\\///E

$Uh
?
?
?C9-ek::::::c>>>22222r/   c                      t          j        dt          t          dz   gt           j                  } t	          j        | d          }t          |dt          t          g           d S )Nr   r   r   uint10r   )r   r   
uint10_maxuint16r
   r   r   
uint16_maxr   s     r%   test_rescale_named_in_ranger   <  sV    HaZ#%56biHHHE

$UX
>
>
>CcAz:#>?????r/   c                      t          j        dt          gt           j                  } t	          j        | d          }t          |dt          g           d S )Nr   r   r   r   )r   r   r   r   r
   r   r   r   r   s     r%   test_rescale_named_out_ranger   B  K    Ha_BI666E

$Uh
?
?
?CcAz?33333r/   c                      t          j        dt          gt           j                  } t	          j        | d          }t          |dt          g           d S )Nr   r   uint12r   )r   r   r   r   r
   r   r   
uint12_maxr   s     r%   test_rescale_uint12_limitsr   H  r   r/   c                      t          j        dt          gt           j                  } t	          j        | d          }t          |dt          g           d S )Nr   r   uint14r   )r   r   r   r   r
   r   r   
uint14_maxr   s     r%   test_rescale_uint14_limitsr   N  r   r/   c                      t          j        dt           j                  } t          j        |           }t          j        |                                           sJ t          ||            d S )Nr^   r^   r   )r   r_   rA   r
   r   isnanr   r   r   s     r%   test_rescale_all_zerosr   T  sa    HV28,,,E

$U
+
+CHSMMc5)))))r/   c                      t          j        ddgt           j                  } t          j        | d          }t          |ddg           d S )N   r   r   r   r   )r   r   r   r
   r   r   r   s     r%   test_rescale_constantr   [  sK    Hc3Zry111E

$Uh
?
?
?CcC:.....r/   c                      t          j        d          } t          j        |           }t          j        |                                           sJ t          ||            d S )Nr   )r   onesr
   r   r   r   r   r   s     r%   test_rescale_same_valuesr   a  sX    GFOOE

$U
+
+CHSMMc5)))))r/   z1.25z,Older NumPy throws a few extra warnings herereasonzin_range,out_range)rb   r   )r   rb   c                     t          j        dt                                        dd          }t           j        |d<   t          dg          5  t          j        || |           d d d            d S # 1 swxY w Y   d S )N   r   rW   r   )r)   r)   zWOne or more intensity levels are NaN\. Rescaling will broadcast NaN to the full image\.)r   r,   floatreshapenanr   r
   r   )r   r   rb   s      r%   test_rescale_nan_warningr   h  s     Ib&&&..q!44E&E$K	A	

 
 ? ? 	"5(I>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   A33A7:A7zout_range, out_dtyperA   r   r   r   r   c                     t          j        g dt           j                  }t          j        ||           }|j        |k    sJ d S )NrD   r   r   r   r   )r   r   r+   r
   r   r   )r   	out_dtyperb   output_images       r%   test_rescale_output_dtyper   z  sM     H^^^27333E-eyIIIL******r/   c                      t          j        g dt           j                  } t          j        | t           j                  }t          |g d           |j        t           j        k    sJ d S )Nr   r   r   r   rE   rK   )r   r   r+   r
   r   rA   r   r   rb   r   s     r%   test_rescale_no_overflowr     sc    H^^^27333E-erxHHHL|]]]333))))))r/   c                      t          j        g dt           j                  } t          j        | d          }t          |g d           |j        t          k    sJ d S )Nr   r   r   r   r   )r   r   r+   r
   r   r   r   r   r   s     r%   test_rescale_float_outputr     s_    H^^^27333E-exHHHL|]]]333&&&&&&r/   c                      t          j        g dt           j                  } t          j        t
                    5  t          j        | d          }d d d            d S # 1 swxY w Y   d S )Nr   r   flatr   )r   r   r+   r   r   r   r
   r   )rb   _s     r%   *test_rescale_raises_on_incorrect_out_ranger     s    H^^^27333E	z	"	" @ @&u???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   A  A$'A$c                    t          j        t          j                                                  | d          }t          |          }t          j        |||f          }t          j	        |ddd          }|j
        |j
        k    sJ |j        t          |           k    sJ | t          j        k    rdnd}t          t          ||          d	|           t          t!          ||          d
d           dS )zTest a grayscale float imageFr~   )9   r   {Gz?rE   )kernel_size
clip_limitrS   rW   r^   g)\Y@ghs?N)r   r   r	   	astronautr   r   r   dstackr
   equalize_adapthistr;   r   r   float16r   peak_snrnorm_brightness_err)r   rx   adaptedsnr_decimals       r%   test_adapthist_grayscaler     s     
DN,,
-
-
4
4U
4
G
GC
3--C
)S#sO
$
$C)d#  G 9%%%%=1%888888
**!!Kg..EEE+C9961EEEEEr/   c                     t          j        t          j                              } t	          j        d          5 }t	          j        d           t          j        |           \  }}t          |          dk    sJ 	 ddd           n# 1 swxY w Y   t          j
        | d          }|                                dk    sJ |                                dk    sJ | j        |j        k    sJ t          j        |           }t          t!          ||          d	d
           t          t#          ||          dd           dS )zTest an RGB color uint16 imageT)recordalwaysr   Nr   r         ?x&Y[@r)   {Gz?r^   )r   img_as_uintr	   r   warningscatch_warningssimplefilterr
   r    r4   r   rY   rZ   r;   r   r   r   r   )rx   whistr$   r   
full_scales         r%   test_adapthist_colorr    sh   

4>++
,
,C		 	-	-	- h'''$.s33k1vvzzzzz               )#$???G;;==A;;==C9%%%%+C00JW55wBBB+J@@$JJJJJs   AB		BBc                     t          j        t          j                              } t	          j        | j        d         | j        d         ft                    }t	          j        | |f          } t          j
        |           }|j        | j        k    sJ | ddddddf         } t          j        |           }| j        |j        k    sJ t          t          ||          dd           t          t          ||          dd           dS )	zTest an RGBA color imager   r)   r   NrW   r  r^   ga+e?)r   r   r	   r   r   r   r;   r   r   r
   r   r   r   r   r   )rx   alphar   r  s       r%   test_adapthist_alphar    s    

DN,,
-
-CGSYq\39Q<0>>>E
)S%L
!
!C)#..G=CI%%%%
aaaBQBh-C+C00J9%%%%W55wBBB+J@@&!LLLLLr/   c                  ,   t          j        t          j                              } t	          |           } d}t          j        | dd|dd|f                   }t          j        |g| j        d         |z  z            }t          j	        |dd          }t          j	        |dd          }|j        |j        k    sJ |j        |j        k    sJ t          j
        t          j        |||j        d         dz           z
                      dk     sJ d	S )
z
    Test for n-dimensional consistency with float images
    Note: Currently if img.ndim == 3, img.shape[2] > 4 must hold for the image
    not to be interpreted as a color image by @adapt_rgb
       r   r   r7   g?)r   r   r^   r  N)r   r   r	   r   r   r   r   r;   r
   r   meanabs)rx   aimg2dimg3d	adapted2d	adapted3ds         r%   test_adapthist_grayscale_Ndr    s    
DN,,
-
-C
3--C
Ac!Bq&!Bq&.122EHeW	! 1233E +EqTRRRI+EqTRRRI ;)/))));)/)))) 726)i	0Ba0G&HHIIJJTQQQQQQr/   c                     t          j        d          } | dz  } |                     t           j                  } t	          j        | d          }t          j        |          t          j        |          k    sJ t          j        d          } | dz  } |                     t           j                  } t	          j        | d          }t          j        |          t          j        |          k    sJ dS )z#Test constant image, float and uint   r  r^   rW   r   N)	r   r_   r   r   r
   r   rY   rZ   r   )rx   r   s     r%   test_adapthist_constantr    s    
(6

C1HC
**RY

C)#q11G6'??bfWoo----
(6

C3JC
**RZ
 
 C)#q11G6'??bfWoo------r/   c                     t          t          j        t          j                                        } | dz  } d| | j        d         dz  | j        d         dz  f<   d}t          ddd          D ]m}t          j        | |d	
          }t          |dd|f         | dd|f                   dk    sJ t          ||ddf         | |ddf                   dk    sJ ndS )zTest border processingg      Y@r  r   r^   r)   r   r   G   rT   r  Nr   )
r   r   r   r	   r   r;   r:   r
   r   r   )rx   border_indexr   r   s       r%   test_adapthist_bordersr!    s   
4$T^%5%566
7
7C 5LC03C	!39Q<1,,- LRQ'' Y Y-c;3OOO"7111l?#;SL=QRRUXXXXX"7<?#;Sqqq=QRRUXXXXXXY Yr/   c                  D   t          j                    } t          j        |           }t	          j        | d          }t	          j        | d          }t          ||           t	          j        |d          }t	          j        |d          }t          ||           d S )Nr   r  r)   )r	   moonr   r   r
   r   r   )img_uimg_f
img_clahe0
img_clahe1s       r%   test_adapthist_clip_limitr(    s    IKKEe$$E ,UqAAAJ,UqAAAJz:... ,UqAAAJ,UqAAAJz:.....r/   c                    | j         dk    rBt          |                                           t          |                                          }} t          j        |           } t          j        |          }d| j        z  t          j        | |z
                                            z  }t          | j
        j                 \  }}dt          j        ||z            z  S )zPeak signal to noise ratio of two images

    Parameters
    ----------
    img1 : array-like
    img2 : array-like

    Returns
    -------
    peak_snr : float
        Peak signal to noise ratio
    rW   r  r   )ndimr   r   r   r   sizer   squaresumr   r   typelog)img1img2mser   max_s        r%   r   r     s     yA~~diikk**HTYY[[,A,AdT""DT""D
	/BIdTk226688
8C$*/*GAttcz""""r/   c                    | j         dk    rt          |           t          |          }} t          j        |                                 |                                z
            }|t
          | j        j                 d         z  }|S )zNormalized Absolute Mean Brightness Error between two images

    Parameters
    ----------
    img1 : array-like
    img2 : array-like

    Returns
    -------
    norm_brightness_error : float
        Normalized absolute mean brightness error
    rW   r)   )r*  r   r   r  r  r   r   r.  )r0  r1  ambenbes       r%   r   r   1  se     yA~~d^^Xd^^d6$))++		+,,D
TZ_-a0
0CJr/   c                      t          j        dt                    } t          j        t
          d          5  t          j        | d           d d d            d S # 1 swxY w Y   d S )Nr  r   z Incorrect value of `kernel_size`r   )rW   rW   rW   )r   r   r   r   r   r   r
   r   rx   s    r%   $test_adapthist_incorrect_kernel_sizer9  E  s    
'&
&
&
&C	z)K	L	L	L 4 4#C3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   AA!Ac                      t          j        ddg          } t          j        | d          }| j        |j        k    sJ dS )"Check that the shape is maintainedr)   g      ?N)r   r   r
   adjust_gammar;   )rx   results     r%   test_adjust_gamma_1x1_shaper>  O  s@    
'1a&//C"3,,F9$$$$$$r/   c                      t          j        ddt           j                                      d          } t	          j        | d          }t          ||            dS )z4Same image should be returned for gamma equal to oner   r?   r      rA  r)   N)r   r,   rA   r   r
   r<  r   )rb   r=  s     r%   test_adjust_gamma_onerB  V  sP    IaBH---55h??E"5!,,Fvu%%%%%r/   c                    t           j                            ddd                              | d          }t	          j        |d          }|j        j        } t          |t          |          d                    |j        |j        k    sJ dS )z6White image should be returned for gamma equal to zeror   rK   r  Fr~   r)   N)
r   randomuniformr   r
   r<  r   r.  r   r   )r   rb   r=  s      r%   test_adjust_gamma_zerorF  ]  s     Iaf--44U4GGE"5!,,FKEv{51!4555<5;&&&&&&r/   c                  "   t          j        ddt           j                                      d          } t          j        g dt           j                                      d          }t          j        | d          }t          ||           dS )z\Verifying the output with expected results for gamma
    correction with gamma equal to halfr   r?   r   r@  (   r   rA            $   '   *   -   0   2   5   7   :   <   >   @   B   D   F   r  I   K   M   N   P   Q   S   T   V   W   Y   rQ   \   ]   ^   `   a   b   r   r(   r8   g   i   j   k   l   m   o   p   q   r   s   t   u   v   w   y   z   {   |   }   ~   r   rE      r                  r        rF                        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     rG   rG   rH   rH      r     r        r     r     r     r     r     r        r     r     r     r     r     r     r     r     r     r     r     r     r     r     r  rK   rT   Nr   r,   rA   r   r   r
   r<  r   rb   r`   r=  s      r%   test_adjust_gamma_less_oner  g  s     IaBH---55h??ExA	
 A	
 A	
D hGD D DH ghI L "5#..Fvx(((((r/   c                  "   t          j        ddt           j                                      d          } t          j        g dt           j                                      d          }t          j        | d          }t          ||           dS )z[Verifying the output with expected results for gamma
    correction with gamma equal to twor   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^   rW   rW   rW   rW   r   r   r   r   r7   r7   r7   r7      r  r     r  r  r  r  r  	   r  r  r3   r3      r   r   r   r      r     r  r  r  rA  rA     r     r     r  r   r      r     rH  rH     r        r
     rI  rI        r     rJ  rJ  !   "   #   r  rK  %   &   r  rL  (   )   rM  rM  +   ,   rN  .   /   r  rO  1   rP  r   4   rQ  6   rR  8   r  r   rS  ;   rT  =   rU  ?   rV  A   rW  C   rX  E   rY  r  rZ  J   r[  L   r\  r]  O   r^  r_  R   ra  U   rb  rc  X   rd  [   re  rf  rg  _   ri  rj  c   r   r8   rk  h   rl  rn  ro  rp  rq  rr  rs  ru  rv  rw  ry  x   rz  r|  r}  r  r   rE   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  r  r  r  r  r  r  r  r  rG   r  r  r  r  r  r  r  r  r  r  r  r  r  rK   r^   Nr  r  s      r%   test_adjust_gamma_greater_oner/  v  s     IaBH---55h??ExA	
 A	
 A	
D hGD D DH ghI L "5!,,Fvx(((((r/   c                      t          j        dddt           j                                      d          } t	          j        t                    5  t          j        | d           d d d            d S # 1 swxY w Y   d S )Nr   rK   r   r  r   )	r   r,   rA   r   r   r   r   r
   r<  rb   s    r%   test_adjust_gamma_negativer2    s    Iaa**226::E	z	"	" ) )eR((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   A11A58A5c                      dt          j        dt           j                  z  } t          j        t	          j        | dd          dk              sJ d S )NrK   r   r   r)   r   )gammagain)r   r   rA   r   r
   r<  r8  s    r%   test_adjust_gamma_u8_overflowr6    sP    
bh///
/C6('13???3FGGGGGGGr/   c                     t          j        ddg|           }t          j        |d          }|j        |j        k    sJ |j        | k    sJ dS )r;  r)   r   N)r   r   r
   
adjust_logr;   r   r   rx   r=  s      r%   test_adjust_log_1x1_shaper:    s\     '1a&
&
&
&C a((F9$$$$<5      r/   c                  (   t          j        dddt           j                                      d          } t          j        g dg dg dg dg d	g d
g dg dgt           j                  }t          j        | d          }t          ||           dS )z|Verifying the output with expected results for logarithmic
    correction with multiplier constant multiplier equal to unityr   rK   r   r  )r   r7   r   rA  r  r  r  r  )r  rO  rQ  rS  r   rX  rZ  r\  )r'  rb  r*  r+  r   r-  rp  rs  )rw  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  r  r  r  rG   )r  r  r  r  r  r  r  r  r   r)   Nr   r,   rA   r   r   r
   r8  r   r  s      r%   test_adjust_logr=    s     Iaa**226::Ex***,,,000444444444444444		
 h  H  **Fvx(((((r/   c                  *   t          j        dddt           j                                      d          } t          j        g dg dg dg dg d	g d
g dg dgt           j                  }t          j        | dd          }t          ||           dS )zVerifying the output with expected results for inverse logarithmic
    correction with multiplier constant multiplier equal to unityr   rK   r   r  )r   r^   r7   r  r   r  r  r   )rH  r
  r  rJ  r  r  r  rN  )rO  r   rR  rS  r  r!  rX  H   )r%  r&  r`  rc  rQ   rg  rj  r8   )rm  n   rt  rx  r{  r  r   r  )rF   r  r  r  r  r  r  r  )r  r  r  r  r  r  r  r  )r  r  r  rH   r  r  r  r  r   r)   TNr<  r  s      r%   test_adjust_inv_logrA    s     Iaa**226::Ex(((,,,,,,---444444444444		
 h  H  400Fvx(((((r/   c                     t          j        ddg|           }t          j        |dd          }|j        |j        k    sJ |j        | k    sJ dS )r;  r)   r   r7   N)r   r   r
   adjust_sigmoidr;   r   r9  s      r%   test_adjust_sigmoid_1x1_shaperD    s^     '1a&
&
&
&C$S!Q//F9$$$$<5      r/   c                  *   t          j        dddt           j                                      d          } t          j        g dg dg dg dg d	g d
g dg dgt           j                  }t          j        | dd          }t          ||           dS )zlVerifying the output with expected results for sigmoid correction
    with cutoff equal to one and gain of 5r   rK   r   r  )r)   r)   r)   r^   r^   r^   r^   r^   )rW   rW   rW   r   r   r   r7   r7   )r7   r  r  r  r  r  r  r3   )r3   r   r   r  r  r  rA  r  )r  r   r  r  r	  r  r  rJ  )r  rK  rL  r  r  r  rP  r  )r   r  rV  rX  r?  r%  r^  r(  )rd  rg  r,  r-  ro  rs  rx  r|  r   r)   r7   Nr   r,   rA   r   r   r
   rC  r   r  s      r%   test_adjust_sigmoid_cutoff_onerG    s     Iaa**226::Ex$$$$$$%%%,,,,,,,,,,,,111		
 h  H $UAq11Fvx(((((r/   c                  *   t          j        dddt           j                                      d          } t          j        g dg dg dg dg d	g d
g d
g d
gt           j                  }t          j        | dd          }t          ||           dS )znVerifying the output with expected results for sigmoid correction
    with cutoff equal to zero and gain of 10r   rK   r   r  )r   r  r  r  r  r  r  r  )r  r  r  r  r  r  rH   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   r3   NrF  r  s      r%   test_adjust_sigmoid_cutoff_zerorJ    s     Iaa**226::Ex444444444444444444444444		
 h  H $UAr22Fvx(((((r/   c                  *   t          j        dddt           j                                      d          } t          j        g dg dg dg dg d	g d
g dg dgt           j                  }t          j        | dd          }t          ||           dS )znVerifying the output with expected results for sigmoid correction
    with cutoff equal to half and gain of 10r   rK   r   r  )r)   r)   r^   r^   rW   rW   r   r7   )r7   r  r  r  r3   r   r  rA  )r  r  r	  r  r  rL  r  rP  )r   rV  r?  r^  rd  r,  ro  rx  )rE   rF   r  r  r  r  r  r  )r  r  r  r  r  r  rH   r  )r  r  r  r  r  r  r  r  rI  r   rT   r3   NrF  r  s      r%   test_adjust_sigmoid_cutoff_halfrL    s     Iaa**226::Ex$$$(((,,,...444444444444		
 h  H $UC44Fvx(((((r/   c                  ,   t          j        dddt           j                                      d          } t          j        g dg dg dg dg d	g d
g dg dgt           j                  }t          j        | ddd          }t          ||           dS )zvVerifying the output with expected results for inverse sigmoid
    correction with cutoff equal to half and gain of 10r   rK   r   r  )r  r  r  r  r  r  r  r  )r  r  r  r  r  r  r  r  )r  r  rH   r  r  r  r  r  )r  r  r  r  r  r  r  r  )r  rv  rm  rh  rc  r]  rY  rU  )rR  r  r  r  r  rI  r	  r  )r  rA  r  r   r3   r  r  r  )r7   r   r   rW   rW   r^   r^   r)   r   rT   r3   TNrF  r  s      r%   #test_adjust_inv_sigmoid_cutoff_halfrN    s     Iaa**226::Ex444444444444///,,,)))$$$		
 h  H $UCT::Fvx(((((r/   c                     t          j        ddd          } t          j        |           sJ d| d<   t          j        |           sJ t          j        | d          rJ | dz                      t           j                  } t          j        |           sJ t          j        | d          rJ |                     t           j                  dz  } t          j        |           sJ t          j        | d          rJ d S )	Nr   g{Gz?r   r)   r   )upper_percentilerK   r?   )r   rL   r
   is_low_contrastr   rA   r   r1  s    r%   test_is_low_contrastrR  /  s   K4%%E#E*****E"I#E*****'DDDDDDS[  **E#E*****'DDDDDD\\")$$,E#E*****'DDDDDDDDr/   c                      t          j        dt                    } t          j        |           sJ d| d d<   t          j        |           rJ d S )Nr  r   r)   r7   )r   r_   boolr
   rQ  r1  s    r%   test_is_low_contrast_booleanrU  ?  sW    HV4(((E#E*****E"1"I'.......r/   exposure_funcc                    t          j        ddd                              d                              t           j                  }t          j        t                    5   | |           d d d            d S # 1 swxY w Y   d S )Nr   r  r   r  )r   r,   r   r   r   r   r   r   )rV  rb   s     r%   test_negative_inputrX  K  s    
 Ic3""**62299"*EEE	z	"	"  e                 s    A99A= A=c                  d   t          j        dd           dd lm}  |                     t          j        ddgddgg          d          }t          j        |          \  }}g d	}g d
}t          j        ||          sJ t          j        ||          sJ t          || j
                  sJ d S )Ndask$dask python library is not installedr   r   r)   r^   )r)   r^   )chunks)r   r)   r^   )r)   r^   r)   )r   importorskip
dask.arrayr   
from_arrayr   r
   r    allclose
isinstanceArray)da
dask_arrayoutput_histoutput_binsexpected_binsexpected_hists         r%   test_dask_histogramri  Y  s    
'MNNNNrx!Q!Q(899&IIJ'1*==KIIMIIM;}k22222;}k22222k28,,,,,,,r/   c                  ,   t          j        dd           dd lm}  |                     g dt          j                  }t          j        |          }|j        t          j        k    sJ t          |g d           t          || j                  sJ d S )NrZ  r[  r   r   r   r   r   )r   r]  r^  r   r   rA   r
   r   r   r   ra  rb  )rc  rb   r   s      r%   test_dask_rescalerk  f  s    
'MNNNNHH^^^28H44E

$U
+
+C9    c===111c28$$$$$$$r/   )yr  numpyr   r   numpy.testingr   r   r   r   r   packaging.versionr   skimager	   r
   r   skimage.colorr   skimage.exposure.exposurer   skimage.util.dtyper   skimage._shared._warningsr   skimage._shared.utilsr   markparametrizer+   float32r&   r.   r1   r5   r=   rB   rI   rM   rO   r   r   rU   r[   ra   rA   int16rl   rD  seedcameraro   r   ru   r   rr   r|   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   int32r   r   r   r   r   r   r   r   skipif__version__r   r   r   r   r   r   r   r   r  r  r  r  r!  r(  r   r   r9  r>  rB  rF  r  r/  r2  r6  r:  r=  rA  rD  rG  rJ  rL  rN  rR  rU  r<  r8  rC  rX  ri  rk   r/   r%   <module>r     si	                      & % % % % %                   " " " " " " 5 5 5 5 5 5 * * * * * * 7 7 7 7 7 7 7 7 7 7 7 7 27BJ"788Q Q 98Q- - -- - -' ' '' ' ', , ,, , ,, , ,, , , 2:rz2:"FGG> > HG> 2:rz2:"FGG' ' HG'( ( (( '7);<<28RXrz"BCC44. . 54 DC =<.8 	q   t{}}4\**%8%hns&:;;& & &   2:rz2:"FGG; ; HG;
- 
- 
-   1v1c(+hR-AB & &	 & SzWr1g.c3Z0HI & &	 &$ $ $ 



2 2 20 0 0 2:rz2:"FGG$ $ HG$0 0 0 bgrxRZD 3 3 3"@ @ @4 4 44 4 44 4 4* * */ / /* * * GBNggfoo-9    -0BDV/WXX
? 
? YX	 

? 	"(	29	29	29	%	 	+ +	 	+* * *' ' '@ @ @ 2:rz2:"FGGF F HGFK K K"M M MR R R4. . .Y Y Y$/ / /# # #,  (4 4 4% % %& & & 2:rz2:"FGG' ' HG'L) L) L)^L) L) L)^) ) )H H H 2:rz2:"FGG! ! HG!) ) ),) ) )4 2:rz2:"FGG! ! HG!) ) ),) ) ),) ) ),) ) ),E E E / / / H/1HI  	 
- 
- 
-% % % % %r/   