
    a6d}              	       h	   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 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,        -                    d             ej.                    Z/ ej0        e/          Z1 ej2        e1dz  dz             Z1d Z3d  Z4ej!        "                    dej#        ej$        ej%        g          d!             Z5d" Z6d# Z7ej!        "                    d$dd d%gfdd d&gfd'd(d)gfg          d*             Z8ej!        "                    d$dd+d,gfdd-d%gfd.d/d0gfg          d1             Z9d2 Z:d3Z;d4Z<d5Z=d6Z>d7 Z?d8 Z@ej!        "                    dej#        ej$        ej%        g          d9             ZAd: ZBej!        "                    dejC        ejD        ej#        ej$        ej%        g          d;             ZEd< ZFd= ZGd> ZHd? ZId@ ZJdA ZKdB ZLej!        "                    dCdDdEg          dF             ZMej!        "                    dGdHej)        fdIejN        fdJejN        fdKejN        fdLeOfg          dM             ZPdN ZQdO ZRdP ZSej!        "                    dej#        ej$        ej%        g          dQ             ZTdR ZUdS ZVdT ZWdU ZXdV ZYdW ZZdX Z[dY Z\dZ Z]d[ Z^ej!        "                    dej#        ej$        ej%        g          d\             Z_d] Z`d^ Zad_ Zbd` Zcej!        "                    dej#        ej$        ej%        g          da             Zddb Zedc Zfej!        "                    dej#        ej$        ej%        g          dd             Zgde Zhdf Zidg Zjdh Zkdi Zldj Zmej!        "                    dkejn        ejo        ejp        g          dl             Zqdm ZrdS )n    N)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalassert_equal)data)exposure)util)rgb2gray)intensity_range)dtype_range)expected_warnings)_supported_float_typec                      t          j        ddgt           j                  } t          j        t
                    5  t          j        | d          \  }}d d d            d S # 1 swxY w Y   d S )Nd   dtypefoobarsource_range)nparrayint8pytestraises
ValueErrorr	   	histogramimfrequenciesbin_centerss      Dlib/python3.11/site-packages/skimage/exposure/tests/test_exposure.pytest_wrong_source_ranger$      s    	2s)27	+	+	+B	z	"	" M M#+#5bCK$M $M $M [M M M M M M M M M M M M M M M M M M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   r   r	   r   r   aranger   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_imager-   (   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_imager1   1   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 )	Nr/      r   f   r   r   )channel_axisr   )	r   r   r   r	   r   rangeshaper   r0   )r    r!   r"   chs       r#   !test_multichannel_int_range_imager9   9   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 )Nr/   r   r   r   r   r      r'   r&   r;   )	r   r   uint8r	   r   r   r)   r   r7   r   s      r#   test_peak_uint_range_dtyper>   B   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 )Nr/   r   r   r   r         r'         r   r<   )	r   r   r   r	   r   r   r)   r   r7   r   s      r#   test_peak_int_range_dtyperE   L   s    	2s)27	+	+	+B'1"7KKKK{BIdC$8$8999V$a(((W%q)))W%q)))"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   linspacer=   r	   r   r   r)   r   r7   r   s      r#   test_flat_uint_range_dtyperI   V   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 )Nr@   rA   r;   r   r   r   r<   )	r   rH   r   r	   r   r   r)   r   r7   r   s      r#   test_flat_int_range_dtyperK   ]   sk    	T327	3	3	3B'1"7KKKK{BIdC$8$8999"F+++++r+   r   c                     t          j        ddg|           }t          j        |d          \  }}|j        | k    sJ t          |t          j        dd          dz              d S )Nr/   r   r   Z   nbins      ?)r   r   r	   r   r   r   r)   )r   r    r!   r"   s       r#   "test_peak_float_out_of_range_imagerQ   d   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 )	Nr/   r   r   r   )rO   r   g   ?)
r   r   r	   r   r   r   minmaxr   r0   )r   r    rO   r!   r"   s        r#   "test_peak_float_out_of_range_dtyperW   m   s    	2s)5	)	)	)BE'1"E?F H  H  H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   rG   rG   r   r   F)r   	normalizer;   r'   r      r   Tg      @)r   r   r=   r	   r   zerosr   )r    r!   r"   expecteds       r#   test_normalizer]   y   s    	---rx	0	0	0B'1"7<A C  C  CKx}}HHQKHRLh''''1"7<@ B  B  BKNHh'''''r+   r   imager5   )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.)r3   r3   r   r'   r   )axis)r   r5   r   N)
r   r   stackfullr	   r   
issubdtypeintegerr   r)   )
r   r   r5   r7   channel_sizeiminimaxr    r!   r"   s
             r#   (test_multichannel_hist_common_bins_uint8rh      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.rS   rN   N)r	   equalize_histtest_img_intr   )img_eq0img_eq1s     r#   test_equalize_uint8_approxrn      s=    $\22G$\;;;GGW%%%%%r+   c                      t          j        t                    } t          j        |           }t          j        |          \  }}t          |           d S )N)r
   img_as_ubytetest_imgr	   rj   cumulative_distributioncheck_cdf_slope)imgimg_eqcdf	bin_edgess       r#   test_equalize_ubyterx      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_floatrq   astyper	   rj   r   r   rr   rs   )r   rt   ru   rv   rw   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|   rq   r   r[   r7   r	   rj   rr   rs   all)rt   r   img_mask_eqru   rv   rw   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'   rT   皙?N)r   rH   r0   polyfit)rv   norm_intensityslope	intercepts       r#   rs   rs      s^    [As3xx00Nz.#q99E9r+   ztest_input,expectedr'   rG   )r/      r/   r   c                     t          j        ddgt           j                  }t          ||           }t	          ||           d S )Nr   r'   r   range_values)r   r   r=   r   r   
test_inputr\   r^   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   r^   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   r4      r   )r      rG   )r   r   r=   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   rP   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   rG   in_range)r   r   g333333?   )decimal)r   r   r	   r   r   r   r   r^   r   s      r#   test_rescale_in_ranger     sf    H&&&e444E

$UX
>
>
>Cc???A>>>>9######r+   c                      t          j        g d          } t          j        | d          }t	          |g d           d S )Nr   )r   r4   r   )rP   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   r/   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   8  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   >  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   D  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   J  r   r+   c                      t          j        dt           j                  } t          j        |           }t          j        |                                           sJ t          ||            d S )NrZ   rZ   r   )r   r[   r=   r	   r   isnanr   r   r   s     r#   test_rescale_all_zerosr   P  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   W  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   ]  sX    GFOOE

$U
+
+CHSMMc5)))))r+   zin_range,out_range)r^   r   )r   r^   c                 "   t          j        dt                                        dd          }t           j        |d<   d}d}| dk    r||g}n|g}t          |          5  t          j        || |           d d d            d S # 1 swxY w Y   d S )	N   r   rS   r   )r'   r'   zWOne or more intensity levels are NaN\. Rescaling will broadcast NaN to the full image\.z/Passing `np.nan` to mean no clipping in np.clipr^   )r   r)   floatreshapenanr   r	   r   )r   r   r^   msgnumpy_warning_1_17_plusexp_warns         r#   test_rescale_nan_warningr   d  s    
 Ib&&&..q!44E&E$K	=  	:  7015	8	$	$ ? ?"5(I>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s    BBBzout_range, out_dtyper=   r   r   r   r   c                     t          j        g dt           j                  }t          j        ||           }|j        |k    sJ d S )Nr@   r   r   r   r   )r   r   r   r	   r   r   )r   	out_dtyper^   output_images       r#   test_rescale_output_dtyper     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   rA   rG   )r   r   r   r	   r   r=   r   r   r^   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   )r^   _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 image
    Frz   )9   r   {Gz?rA   )kernel_size
clip_limitrO   rS   rZ   g)\Y@ghs?N)r
   r|   r   	astronautr}   r   r   dstackr	   equalize_adapthistr7   r   r   float16r   peak_snrnorm_brightness_err)r   rt   adaptedsnr_decimals       r#   test_adapthist_grayscaler     s     
DN,,
-
-
4
4U
4
G
GC
3--C
)S#sO
$
$C)#859F F F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 image
    T)recordalwaysr   Nr   r         ?x&Y[@r'   {Gz?rZ   )r
   img_as_uintr   r   warningscatch_warningssimplefilterr	   r   r0   r   rU   rV   r7   r   r   r   r   )rt   whistr"   r   
full_scales         r#   test_adapthist_colorr    sj    
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 image
    r   r'   r   NrS   r   rZ   ga+e?)r
   r|   r   r   r   r   r7   r   r   r	   r   r   r   r   r   )rt   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   r3   g?)r   r   rZ   r   N)r
   r|   r   r   r   r   r   r7   r	   r   meanabs)rt   aimg2dimg3d	adapted2d	adapted3ds         r#   test_adapthist_grayscale_Ndr    sE    
DN,,
-
-C
3--C
Ac!Bq&!Bq&.122EHeW	! 1233E +E897;= = =I +E897;= = =I
 ;)/))));)/)))) 726)%ioa&8A&=>? @ @ A ACGH H H H H Hr+   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  rZ   rS   r   N)	r   r[   r}   r   r	   r   rU   rV   r   )rt   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 processing
    g      Y@r   r   rZ   r'   r   r   G   rP   r   Nr   )
r   r
   r|   r   r   r7   r6   r	   r   r   )rt   border_indexr   r   s       r#   test_adapthist_bordersr    s$    4$T^%5%566
7
7C 4KC02C	!39Q<1,,- LRQ'' ? ?-c;3OOO"7111l?#;#&qqq,#79 9;>? ? ? ? #7<?#;#&|QQQ#79 9;>? ? ? ? ?? ?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
    rS   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
ty.29TD[115577
7C$*/*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
    rS   r'   )r%  r   r   r  r  r   r   r)  )r+  r,  ambenbes       r#   r   r   A  se     yA~~d^^Xd^^d6$))++		+,,D
TZ_-a0
0CJr+   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_gammar7   )rt   results     r#   test_adjust_gamma_1x1_shaper6  X  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      r9  r'   N)r   r)   r=   r   r	   r4  r   )r^   r5  s     r#   test_adjust_gamma_oner:  _  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   rG   r  Frz   r'   N)
r   randomuniformr}   r	   r4  r   r)  r   r   )r   r^   r5  s      r#   test_adjust_gamma_zeror>  f  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   r8  (   r   r9            $   '   *   -   0   2   5   7   :   <   >   @   B   D   F   r  I   K   M   N   P   Q   S   T   V   W   Y   rM   \   ]   ^   `   a   b   r   r&   r4   g   i   j   k   l   m   o   p   q   r   s   t   u   v   w   y   z   {   |   }   ~   r   rA      r                  r}        rB                        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     rC   rC   rD   rD      r     r        r     r     r     r     r     r        r     r     r     r     r     r     r     r     r     r     r     r     r     r     r  rG   rP   Nr   r)   r=   r   r   r	   r4  r   r^   r\   r5  s      r#   test_adjust_gamma_less_oner  p  s     IaBH---55h??Ex 7 7 78 !h9( ( (8 )0(9(99 < "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   r8  (   r   r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r'   r'   r'   r'   r'   rZ   rZ   rZ   rZ   rZ   rZ   rS   rS   rS   rS   r   r   r   r   r3   r3   r3   r3      r  r     r  r  r  r  r  	   r  r  r/   r/      r  r  r   r      r     r  r  r  r9  r9     r     r     r  r   r      r     r@  r@     r         r     rA  rA        r     rB  rB  !   "   #   r	  rC  %   &   r  rD  (   )   rE  rE  +   ,   rF  .   /   r  rG  1   rH  r   4   rI  6   rJ  8   r  r   rK  ;   rL  =   rM  ?   rN  A   rO  C   rP  E   rQ  r  rR  J   rS  L   rT  rU  O   rV  rW  R   rY  U   rZ  r[  X   r\  [   r]  r^  r_  _   ra  rb  c   r   r4   rc  h   rd  rf  rg  rh  ri  rj  rk  rm  rn  ro  rq  x   rr  rt  ru  rw  r   rA   r   ry  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  rC   r  r  r  r  r  r  r  r  r  r  r  r  r  rG   rZ   Nr  r  s      r#   test_adjust_gamma_greater_oner'    s     IaBH---55h??Ex   0 ')h10 0 00 180A0A1 4 "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   rG   r   r  r   )	r   r)   r=   r   r   r   r   r	   r4  r^   s    r#   test_adjust_gamma_negativer*    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 )NrG   r   r   r'   r   )gammagain)r   r   r=   r   r	   r4  )rt   s    r#   test_adjust_gamma_u8_overflowr.    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 )r3  r'   r   N)r   r   r	   
adjust_logr7   r   r   rt   r5  s      r#   test_adjust_log_1x1_shaper2    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   rG   r   r  )r   r3   r  r9  r  r  r  r  )r  rG  rI  rK  r  rP  rR  rT  )r  rZ  r"  r#  r   r%  rh  rk  )ro  rr  rv  rx  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  rC   )r  r  r  r  r  r  r  r  r   r'   Nr   r)   r=   r   r   r	   r0  r   r  s      r#   test_adjust_logr5    s     Iaa**226::Ex0000000000000000000000002 :<C C C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   rG   r   r  )r   rZ   r3   r  r  r  r  r   )r@  r  r  rB  r	  r  r  rF  )rG  r   rJ  rK  r  r  rP  H   )r  r  rX  r[  rM   r_  rb  r4   )re  n   rl  rp  rs  rw  r   r|  )rB   r  r  r  r  r  r  r  )r  r  r  r  r  r  r  r  )r  r  r  rD   r  r  r  r  r   r'   TNr4  r  s      r#   test_adjust_inv_logr9    s     Iaa**226::Ex0000000000000000000000002 :<C C C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 )r3  r'   r   r3   N)r   r   r	   adjust_sigmoidr7   r   r1  s      r#   test_adjust_sigmoid_1x1_shaper<    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   rG   r   r  )r'   r'   r'   rZ   rZ   rZ   rZ   rZ   )rS   rS   rS   r   r   r   r3   r3   )r3   r  r  r  r  r  r  r/   )r/   r  r   r  r  r  r9  r  )r  r   r  r   r  r  r  rB  )r  rC  rD  r  r  r  rH  r  )r   r  rN  rP  r7  r  rV  r   )r\  r_  r$  r%  rg  rk  rp  rt  r   r'   r3   Nr   r)   r=   r   r   r	   r;  r   r  s      r#   test_adjust_sigmoid_cutoff_oner?    s     Iaa**226::Ex0000000000000000000000002 :<C C C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   rG   r   r  )r   r  r  r  r  r  r  r  )r  r  r  r  r  r  rD   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/   Nr>  r  s      r#   test_adjust_sigmoid_cutoff_zerorB    s     Iaa**226::Ex0000000000000000000000002 :<C C C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   rG   r   r  )r'   r'   rZ   rZ   rS   rS   r   r3   )r3   r  r  r  r/   r   r  r9  )r  r  r  r  r  rD  r  rH  )r   rN  r7  rV  r\  r$  rg  rp  )rA   rB   r  r  r  r  r  r  )r  r  r  r  r  r  rD   r  )r  r  r  r  r  r  r  r  rA  r   rP   r/   Nr>  r  s      r#   test_adjust_sigmoid_cutoff_halfrD  &  s     Iaa**226::Ex0000000000000000000000002 :<C C C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   rG   r   r  )r  r  r  r  r  r  r  r  )r  r  r  r  r  r  r  r  )r  r  rD   r  r  r  r  r  )r  r  r  r  r  r  r  r~  )rw  rn  re  r`  r[  rU  rQ  rM  )rJ  r  r  r
  r  rA  r  r  )r  r9  r  r   r/   r  r  r  )r3   r   r   rS   rS   rZ   rZ   r'   r   rP   r/   TNr>  r  s      r#   #test_adjust_inv_sigmoid_cutoff_halfrF  8  s     Iaa**226::Ex0000000000000000000000002 :<C C C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_percentilerG   r;   )r   rH   r	   is_low_contrastr}   r=   r   r)  s    r#   test_is_low_contrastrJ  J  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'   r3   )r   r[   boolr	   rI  r)  s    r#   test_is_low_contrast_booleanrM  Z  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   )rN  r^   s     r#   test_negative_inputrP  e  s     Ic3""**62299"*EEE	z	"	"  e                 s    A99A= A=c                  6   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 d S )Ndaskz$dask python library is not installed)reasonr   r'   rZ   )r'   rZ   )chunks)r   r'   rZ   )r'   rZ   r'   )	r   importorskip
dask.arrayr   
from_arrayr   r	   r   allclose)da
dask_arrayoutput_histoutput_binsexpected_binsexpected_hists         r#   test_dask_histogramr_  q  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22r+   )sr  numpyr   r   numpy.testingr   r   r   r   r   skimager   r	   r
   skimage.colorr   skimage.exposure.exposurer   skimage.util.dtyper   skimage._shared._warningsr   skimage._shared.utilsr   r$   r*   r-   r1   r9   r>   rE   rI   rK   markparametrizer   float32r   rQ   rW   r]   r=   int16rh   r<  seedcamerark   r|   rq   r   rn   rx   r~   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   int32r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r#  r   r   r6  r:  r>  r  r'  r*  r.  r2  r5  r9  r<  r?  rB  rD  rF  rJ  rM  r4  r0  r;  rP  r_   r+   r#   <module>rp     s        ) ) ) ) ) ) ) ) ) ) ) ) ) )                   " " " " " " 5 5 5 5 5 5 * * * * * * 7 7 7 7 7 7 7 7 7 7 7 7M M M- - -- - -' ' '' ' ', , ,, , ,, , ,, , , 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 =<.: 	q   t{}}4\**%8%hmc&9::& & &   2:rz2:"FGG; ; HG;
- 
- 
-   .q!fq#hBx1  
& & 
& .sCjr1g#s1  
& & 
&$ $ $ 



2 2 20 0 0 2:rz2:"FGG$ $ HG$0 0 0 27BHbj"*#%:#/ 0 03 30 03"@ @ @4 4 44 4 44 4 4* * */ / /* * * --/ ? ?	 ?2 	"(	29	29	29	% + + +* * *' ' '@ @ @ 2:rz2:"FGGF F HGFK K K$M M MH H H>. . . ? ? ?*/ / /# # #,  .% % %& & & 2:rz2:"FGG' ' HG'$) $) $)N )  )  )F) ) )H H H 2:rz2:"FGG! ! HG!) ) )$) ) )* 2:rz2:"FGG! ! HG!) ) )$) ) )$) ) )$) ) )$E E E / / / 8+@+3+>+3+B+D E E E E3 3 3 3 3r+   