
    9i              	          S SK r S SKrS SKrS SKJrJrJrJrJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  \R4                  R7                  S\R8                  \R:                  /5      S 5       rS rS r S r!S r"S r#S r$S r%S r&\R4                  R7                  S\RN                  \R:                  \RP                  /5      S 5       r)\R4                  R7                  S\RN                  \R:                  \RP                  /5      S 5       r*S r+\R4                  R7                  SSS/5      \R4                  R7                  S\RX                  \RZ                  \RP                  /5      \R4                  R7                  S/ SQ5      S 5       5       5       r.\R^                  Ra                  S 5        \Rb                  " 5       r2\Rf                  " \25      r4\Rj                  " \4S-  S-   5      r4S  r6S! r7\R4                  R7                  S\RN                  \R:                  \RP                  /5      S" 5       r8S# r9S$ r:\R4                  R7                  S%SS S&/4SS S'/4S(S)S*/4/5      S+ 5       r;\R4                  R7                  S%SS,S-/4SS.S&/4S/S0S1/4/5      S2 5       r<S3 r=S4r>S5r?S6r@S7rAS8 rBS9 rC\R4                  R7                  S\RN                  \R:                  \RP                  /5      S: 5       rDS; rE\R4                  R7                  S\R8                  \R                  \RN                  \R:                  \RP                  /5      S< 5       rGS= rHS> rIS? rJS@ rKSA rLSB rMSC rN\R4                  R                  \" \R                  5      \" SD5      :  SESF9\R4                  R7                  SGSHSI/5      SJ 5       5       rQ\R4                  R7                  SKSL\RX                  4SM\R                  4SN\R                  4SO\R                  4SP\S4/5      SQ 5       rTSR rUSS rVST rW\R4                  R7                  S\RN                  \R:                  \RP                  /5      SU 5       rXSV rYSW rZSX r[SY r\SZ r]S[ r^S\ r_S] r`S^ raS_ rbS` rc\R4                  R7                  S\RN                  \R:                  \RP                  /5      Sa 5       rdSb reSc rfSd rgSe rh\R4                  R7                  S\RN                  \R:                  \RP                  /5      Sf 5       riSg rjSh rk\R4                  R7                  S\RN                  \R:                  \RP                  /5      Si 5       rlSj rmSk rnSl roSm rpSn rqSo rr\R4                  R7                  Sp\R                  \R                  \R                  /5      Sq 5       rvSr rwSs rxg)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                     [         R                  " SS/U S9n[        R                  " [        SS9   [
        R                  " USS9u  p#S S S 5        g ! , (       d  f       g = f)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/land-doc-ocr/venv/lib/python3.13/site-packages/skimage/exposure/tests/test_exposure.pytest_wrong_source_ranger&      sG    	2s)5	)B	z)V	W#+#5#5bx#P  
X	W	Ws   A
A c                  
   [         R                  " SS/[         R                  S9n [        R                  " U 5      u  p[        U[         R                  " SS5      5        US   S:X  d   eUS   S:X  d   e[        USS S5        g )Nr   r   r   e   r      r   r   int8r
   r    r   aranger"   r#   r$   s      r%   test_negative_overflowr.   #   sw    	2s)277	+B'11"5K{BIIb#$67q>Qr?a{1R(!,    c                  
   [         R                  " SS/[         R                  S9n [        R                  " U 5      u  p[        U[         R                  " SS5      5        US   S:X  d   eUS   S:X  d   e[        USS S5        g )Nir   r   r   r)   r*   r-   s      r%   test_all_negative_imager1   ,   sw    	4*BGG	,B'11"5K{BIIdA$67q>Qr?a{1R(!,r/   c                      [         R                  " SS/[         R                  S9n [        R                  " U 5      u  p[        [        U5      [        U5      5        [        US   S5        [        US   S5        g )N
   r   r   r   r   )r   r   r+   r
   r    r   lenr-   s      r%   test_int_range_imager5   5   s]    	2s)277	+B'11"5K[!3{#34Q$R#&r/   c                  >   [         R                  " SS/SS//[         R                  S9n [        R                  " U SS9u  p[        U R                  S   5       H#  n[        [        X   5      [        U5      5        M%     [        US   S5        [        US   S5        g )	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'rww	7B'11"2FKBHHRL!S)3{+;< "Q#R#&r/   c                  D   [         R                  " SS/[         R                  S9n [        R                  " U SS9u  p[        U[         R                  " SS5      5        [        US   S5        [        US   S5        [        US	   S5        [        UR                  S
5        g )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)288	,B'11"7KK{BIIa$56R!$S!1%S!1%""F+r/   c                  D   [         R                  " SS/[         R                  S9n [        R                  " U SS9u  p[        U[         R                  " SS5      5        [        US   S	5        [        US
   S	5        [        US   S5        [        UR                  S5        g )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)277	+B'11"7KK{BIIdC$89X&*Y'+Y'+""F+r/   c                      [         R                  " SSS[         R                  S9n [        R                  " U SS9u  p[        U[         R                  " SS5      5        [        UR                  S5        g )Nr      r?   r   r   r   r@   )	r   linspacerA   r
   r    r   r,   r   r;   r-   s      r%   test_flat_uint_range_dtyperM   Z   sT    	QS	1B'11"7KK{BIIa$56""F+r/   c                      [         R                  " SSS[         R                  S9n [        R                  " U SS9u  p[        U[         R                  " SS5      5        [        UR                  S5        g )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   sT    	T3277	3B'11"7KK{BIIdC$89""F+r/   c                     [         R                  " SS/U S9n[        R                  " USS9u  p#UR                  U :X  d   e[        U[         R                  " SS5      S-   5        g )Nr3   r   r   Z   nbins      ?)r   r   r
   r    r   r   r,   r!   s       r%   "test_peak_float_out_of_range_imagerU   h   sY    	2s)5	)B'11"B?K%%%{BIIb#$6$<=r/   c                 6   [         R                  " SS/U S9nSn[        R                  " XSS9u  p4UR                  U :X  d   e[        [         R                  " U5      SS5        [        [         R                  " U5      SS5        [        [        U5      S5        g )	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1"PWXK%%%{+T15{+S!4[!2&r/   c                  $   [         R                  " / SQ[         R                  S9n [        R                  " U SSS9u  p[         R
                  " S5      nSUS'   S	US
'   [        X5        [        R                  " U SSS9u  pUS-  n[        X5        g )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    	-rxx	0B'11
E K xx}HHQKHRL''11
D K OH'r/   r   imager9   )r   r)   r   c           	         SnUS   US   -  n[         U    u  pV[        R                  " [        R                  " X5U S9[        R                  " X6U S94US9n[        R
                  " XqUS9u  p[        R                  " U [        R                  5      (       a#  [        U	[        R                  " XVS-   5      5        US   S   U:X  d   eUS   S   S:X  d   eUS   S   S:X  d   eUS   S   U:X  d   eg)	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	GGEu-GGEu-	
 
B  (11
L K 
}}UBJJ'';		$q(ABq>!,,,q>""""q>!!!!q>"---r/   g      @r   c                      [         R                  " [        5      n [         R                  " [        SS9n[        X5        g)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,    $$\2G$$\;GG%r/   c                      [         R                  " [        5      n [        R                  " U 5      n[        R
                  " U5      u  p#[        U5        g )N)r   img_as_ubytetest_imgr
   rn   cumulative_distributioncheck_cdf_slope)imgimg_eqcdf	bin_edgess       r%   test_equalize_ubyter|      s<    


H
%C##C(F55f=NCCr/   c                 2   [         R                  " [        5      R                  U SS9n[        R
                  " U5      nUR                  [        U 5      :X  d   e[        R                  " U5      u  p4[        U5        UR                  [        U 5      :X  d   eg )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55f=NCC??3E::::r/   c                  b   [         R                  " [        5      n [        R                  " [        R
                  5      nSUSS2SS24'   [        R                  " XS9n[        R                  " U 5      n[        R                  " U5      u  pE[        U5        X2:H  R                  5       (       a   eg )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88HNN#DDS#c'	((8K##C(F55kBNCC%**,,,,,r/   c                     [         R                  " SS[        U 5      5      n[         R                  " XS5      u  p#SUs=:  a  S:  d   e   eg)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      sD    [[As3x0Nzz.q9Er/   ztest_input,expectedr)   rK   )r3      r3   r   c                 v    [         R                  " SS/[         R                  S9n[        X S9n[	        X15        g )Nr   r)   r   range_values)r   r   rA   r   r   
test_inputr`   rb   outs       r%   test_intensity_range_uint8r      s.    
 HHaV288,E
%
9Cs%r/   皙?皙?r   )333333?皙?r   r   c                 v    [         R                  " SS/[         R                  S9n[        X S9n[	        X15        g )Nr   r   r   r   r   r   float64r   r   r   s       r%   test_intensity_range_floatr      s.    
 HHc3Zrzz2E
%
9Cs%r/   c                  |    [         R                  " SS/[         R                  S9n [        U SSS9n[	        US5        g )Nr   r   r   r   T)r   clip_negative)r   r)   r   rb   r   s     r%   "test_intensity_range_clipped_floatr      s2    HHc3Zrzz2E
%gT
JCsF#r/   i  i  i?  i  c                      [         R                  " / SQ[         R                  S9n [        R                  " U 5      nUR
                  [         R                  :X  d   e[        U/ SQ5        g )N3   r8      r   r      rK   )r   r   rA   r
   rescale_intensityr   r   r   s     r%   test_rescale_stretchr     sF    HH^2884E

$
$U
+C99   c=1r/   c                  |    [         R                  " / SQ5      n [        R                  " U 5      n[	        U/ SQ5        g )Ng     I@g     Y@g      c@)r   rT   r)   r   r   r
   r   r   r   s     r%   test_rescale_shrinkr     s+    HH)*E

$
$U
+Cc;/r/   c                     [         R                  " / SQU S9n[        R                  " USS9n[	        U/ SQSS9  UR
                  UR
                  :X  d   eg )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     sG    HH)7E

$
$UX
>Cc?A>99###r/   c                  z    [         R                  " / SQ5      n [        R                  " U SS9n[	        U/ SQ5        g )Nr   )r   r8   r   )rT   r)   r)   r   r   s     r%   test_rescale_in_range_clipr   "  s-    HH)*E

$
$UX
>Cc;/r/   c                     [         R                  " / SQU S9n[        R                  " USS9nUR                  [        UR                  5      :X  d   e[        U/ SQ5        g)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   (  sL     HH\/E

$
$Uh
?C99-ekk::::c>2r/   c                      [         R                  " S[        [        S-   /[         R                  S9n [        R
                  " U SS9n[        US[        [        /5        g )Nr   r   r   uint10r   )r   r   
uint10_maxuint16r
   r   r   
uint16_maxr   s     r%   test_rescale_named_in_ranger   <  sE    HHaZ#%56biiHE

$
$UX
>CcAz:#>?r/   c                      [         R                  " S[        /[         R                  S9n [        R
                  " U SS9n[        US[        /5        g )Nr   r   r   r   )r   r   r   r   r
   r   r   r   r   s     r%   test_rescale_named_out_ranger   B  :    HHa_BII6E

$
$Uh
?CcAz?3r/   c                      [         R                  " S[        /[         R                  S9n [        R
                  " U SS9n[        US[        /5        g )Nr   r   uint12r   )r   r   r   r   r
   r   r   
uint12_maxr   s     r%   test_rescale_uint12_limitsr   H  r   r/   c                      [         R                  " S[        /[         R                  S9n [        R
                  " U SS9n[        US[        /5        g )Nr   r   uint14r   )r   r   r   r   r
   r   r   
uint14_maxr   s     r%   test_rescale_uint14_limitsr   N  r   r/   c                      [         R                  " S[         R                  S9n [        R                  " U 5      n[         R
                  " U5      R                  5       ) (       d   e[        X5        g )Nr^   r^   r   )r   r_   rA   r
   r   isnanr   r   r   s     r%   test_rescale_all_zerosr   T  sK    HHV288,E

$
$U
+CHHSMc)r/   c                      [         R                  " SS/[         R                  S9n [        R                  " U SS9n[        USS/5        g )N   r   r   r   r   )r   r   r   r
   r   r   r   s     r%   test_rescale_constantr   [  s:    HHc3Zryy1E

$
$Uh
?CcC:.r/   c                      [         R                  " S5      n [        R                  " U 5      n[         R                  " U5      R                  5       ) (       d   e[        X5        g )Nr   )r   onesr
   r   r   r   r   r   s     r%   test_rescale_same_valuesr   a  sD    GGFOE

$
$U
+CHHSMc)r/   z1.25z,Older NumPy throws a few extra warnings herereasonzin_range,out_range)rb   r   )r   rb   c                     [         R                  " S[        S9R                  SS5      n[         R                  US'   [        S/5         [        R                  " X U5        S S S 5        g ! , (       d  f       g = f)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  sc     IIb&..q!4E&&E$K	A	

 	""5I>
 
 
s   	A**
A8zout_range, out_dtyperA   r   r   r   r   c                     [         R                  " / SQ[         R                  S9n[        R                  " X S9nUR
                  U:X  d   eg )NrD   r   r   r   r   )r   r   r+   r
   r   r   )r   	out_dtyperb   output_images       r%   test_rescale_output_dtyper   z  s<     HH^2773E--eIL***r/   c                      [         R                  " / SQ[         R                  S9n [        R                  " U [         R
                  S9n[        U/ SQ5        UR                  [         R
                  :X  d   eg )Nr   r   r   r   rE   rK   )r   r   r+   r
   r   rA   r   r   rb   r   s     r%   test_rescale_no_overflowr     sN    HH^2773E--erxxHL|]3)))r/   c                      [         R                  " / SQ[         R                  S9n [        R                  " U SS9n[        U/ SQ5        UR                  [        :X  d   eg )Nr   r   r   r   r   )r   r   r+   r
   r   r   r   r   r   s     r%   test_rescale_float_outputr     sF    HH^2773E--exHL|]3&&&r/   c                      [         R                  " / SQ[         R                  S9n [        R                  " [
        5         [        R                  " U SS9nS S S 5        g ! , (       d  f       g = f)Nr   r   flatr   )r   r   r+   r   r   r   r
   r   )rb   _s     r%   *test_rescale_raises_on_incorrect_out_ranger     s@    HH^2773E	z	"&&u? 
#	"	"s    A
A-c                    [         R                  " [        R                  " 5       5      R	                  U SS9n[        U5      n[        R                  " XU45      n[        R                  " USSSS9nUR                  UR                  :X  d   eUR                  [        U 5      :X  d   eU [        R                  :w  a  SOSn[        [        X5      S	U5        [        [!        X5      S
S5        g)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     

DNN,
-
4
4U
4
GC
3-C
))SsO
$C))d#G 99%%%==1%8888

*!K.E+C961Er/   c                  p   [         R                  " [        R                  " 5       5      n [        R
                  " SS9 n[        R                  " S5        [        R                  " U 5      u  p#[        U5      S:  d   e SSS5        [        R                  " U SS9nUR                  5       S:X  d   eUR                  5       S:X  d   eU R                  UR                  :X  d   e[        R                  " U 5      n[        [!        XT5      S	S
5        [        [#        XT5      SS5        g! , (       d  f       N= f)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    s    


4>>+
,C		 	 	-h'$..s31vzz 
. ))#$?G;;=A;;=C99%%%++C0J5wB+J@$J 
.	-s   A D''
D5c                  *   [         R                  " [        R                  " 5       5      n [        R
                  " U R                  S   U R                  S   4[        S9n[        R                  " X45      n [        R                  " U 5      nUR                  U R                  :w  d   eU SS2SS2SS24   n [        R                  " U 5      nU R                  UR                  :X  d   e[        [        X25      SS5        [        [        X25      SS5        g)	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    


DNN,
-CGGSYYq\399Q<0>E
))SL
!C))#.G==CII%%%
aBQBh-C++C0J99%%%5wB+J@&!Lr/   c                  X   [         R                  " [        R                  " 5       5      n [	        U 5      n Sn[         R                  " U SSU2SSU24   5      n[
        R                  " U/U R                  S   U-  -  5      n[        R                  " USSS9n[        R                  " USSS9nUR                  UR                  :X  d   eUR                  UR                  :X  d   e[
        R                  " [
        R                  " XEUR                  S   S-     -
  5      5      S:  d   eg	)
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     

DNN,
-C
3-C
Ac!Bq&!Bq&.12EHHeW		! 123E ++EqTRI++EqTRI ;;)//)));;)//))) 77266)	0Ba0G&HHIJTQQQr/   c                     [         R                  " S5      n U S-  n U R                  [         R                  5      n [        R
                  " U S5      n[         R                  " U5      [         R                  " U5      :X  d   e[         R                  " S5      n U S-  n U R                  [         R                  5      n [        R
                  " U S5      n[         R                  " U5      [         R                  " U5      :X  d   eg)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
**RYY
C))#q1G66'?bffWo---
((6
C3JC
**RZZ
 C))#q1G66'?bffWo---r/   c                     [        [        R                  " [        R                  " 5       5      5      n U S-  n SX R
                  S   S-  U R
                  S   S-  4'   Sn[        SSS5       HV  n[        R                  " XS	S
9n[        USS2U4   U SS2U4   5      S:  d   e[        X1SS24   XSS24   5      S:  a  MV   e   g)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6
7C 5LC03C		!399Q<1,,- LRQ'--c3O"71l?#;SL=QRUXXXX"7?#;Sq=QRUXXXX (r/   c                  .   [         R                  " 5       n [        R                  " U 5      n[        R
                  " U SS9n[        R
                  " U SS9n[        X#5        [        R
                  " USS9n[        R
                  " USS9n[        X#5        g )Nr   r  r)   )r	   moonr   r   r
   r   r   )img_uimg_f
img_clahe0
img_clahe1s       r%   test_adapthist_clip_limitr(    sy    IIKEe$E ,,UqAJ,,UqAJz. ,,UqAJ,,UqAJz.r/   c                    U R                   S:X  a1  [        U R                  5       5      [        UR                  5       5      p[        R                  " U 5      n [        R                  " U5      nSU R
                  -  [        R                  " X-
  5      R                  5       -  n[        U R                  R                     u  p4S[        R                  " XB-  5      -  $ )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     yyA~diik*HTYY[,AdT"DT"D
		/BIIdk2668
8C$**//*GAtz"""r/   c                     U R                   S:X  a  [        U 5      [        U5      p[        R                  " U R	                  5       UR	                  5       -
  5      nU[
        U R                  R                     S   -  nU$ )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  s^     yyA~d^Xd^d66$))+		+,D
TZZ__-a0
0CJr/   c                      [         R                  " S[        S9n [        R                  " [
        SS9   [        R                  " U S5        S S S 5        g ! , (       d  f       g = f)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##C3 
M	L	Ls   A
A"c                      [         R                  " SS/5      n [        R                  " U S5      nU R                  UR                  :X  d   eg)"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99$$$r/   c                      [         R                  " SS[         R                  S9R                  S5      n [        R
                  " U S5      n[        X5        g)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  s=    IIaBHH-55h?E""5!,Fv%r/   c                     [         R                  R                  SSS5      R                  U SS9n[        R
                  " US5      nUR                  R                  n [        U[        U    S   5        UR                  UR                  :X  d   eg)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  ]  sw     IIaf-44U4GE""5!,FKKEv{51!45<<5;;&&&r/   c                     [         R                  " SS[         R                  S9R                  S5      n [         R                  " / SQ[         R                  S9R                  S5      n[
        R                  " U S5      n[        X!5        g)zXVerifying 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  ss     IIaBHH-55h?ExxA	
D hhGDH ghI L ""5#.Fv(r/   c                     [         R                  " SS[         R                  S9R                  S5      n [         R                  " / SQ[         R                  S9R                  S5      n[
        R                  " U S5      n[        X!5        g)zWVerifying 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  ss     IIaBHH-55h?ExxA	
D hhGDH ghI L ""5!,Fv(r/   c                     [         R                  " SSS[         R                  5      R                  S5      n [        R
                  " [        5         [        R                  " U S5        S S S 5        g ! , (       d  f       g = f)Nr   rK   r   r  r   )	r   r,   rA   r   r   r   r   r
   r<  rb   s    r%   test_adjust_gamma_negativer2    sM    IIaa*226:E	z	"eR( 
#	"	"s   A22
B c                      S[         R                  " S[         R                  S9-  n [         R                  " [        R
                  " U SSS9S:H  5      (       d   eg )NrK   r   r   r)   r   )gammagain)r   r   rA   r   r
   r<  r8  s    r%   test_adjust_gamma_u8_overflowr6    sD    
bhh/
/C66(''13?3FGGGGr/   c                     [         R                  " SS/U S9n[        R                  " US5      nUR                  UR                  :X  d   eUR
                  U :X  d   eg)r;  r)   r   N)r   r   r
   
adjust_logr;   r   r   rx   r=  s      r%   test_adjust_log_1x1_shaper:    sR     ''1a&
&C  a(F99$$$<<5   r/   c                  *   [         R                  " SSS[         R                  5      R                  S5      n [         R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/[         R                  S9n[
        R                  " U S5      n[        X!5        g)zxVerifying 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=    sw     IIaa*226:Exx*,044444		
 hhH   *Fv(r/   c                  ,   [         R                  " SSS[         R                  5      R                  S5      n [         R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/[         R                  S9n[
        R                  " U SS5      n[        X!5        g)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    sy     IIaa*226:Exx(,,-4444		
 hhH   40Fv(r/   c                     [         R                  " SS/U S9n[        R                  " USS5      nUR                  UR                  :X  d   eUR
                  U :X  d   eg)r;  r)   r   r7   N)r   r   r
   adjust_sigmoidr;   r   r9  s      r%   test_adjust_sigmoid_1x1_shaperD    sT     ''1a&
&C$$S!Q/F99$$$<<5   r/   c                  ,   [         R                  " SSS[         R                  5      R                  S5      n [         R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/[         R                  S9n[
        R                  " U SS5      n[        X!5        g)zhVerifying 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    sy     IIaa*226:Exx$$%,,,,1		
 hhH $$UAq1Fv(r/   c                  ,   [         R                  " SSS[         R                  5      R                  S5      n [         R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ S
Q/ S
Q/[         R                  S9n[
        R                  " U SS5      n[        X!5        g)zjVerifying 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    sy     IIaa*226:Exx44444444		
 hhH $$UAr2Fv(r/   c                  ,   [         R                  " SSS[         R                  5      R                  S5      n [         R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/[         R                  S9n[
        R                  " U SS5      n[        X!5        g)zjVerifying 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    sy     IIaa*226:Exx$(,.4444		
 hhH $$UC4Fv(r/   c                  .   [         R                  " SSS[         R                  5      R                  S5      n [         R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/[         R                  S9n[
        R                  " U SSS5      n[        X!5        g)zrVerifying 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{     IIaa*226:Exx4444/,)$		
 hhH $$UCT:Fv(r/   c                  V   [         R                  " SSS5      n [        R                  " U 5      (       d   eSU S'   [        R                  " U 5      (       d   e[        R                  " U SS9(       a   eU S-  R	                  [         R
                  5      n [        R                  " U 5      (       d   e[        R                  " U SS9(       a   eU R	                  [         R                  5      S-  n [        R                  " U 5      (       d   e[        R                  " U SS9(       a   eg )	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    KK4%E##E****E"I##E****''DDDS[  *E##E****''DDD\\"))$,E##E****''DDDDr/   c                      [         R                  " S[        S9n [        R                  " U 5      (       d   eSU S S& [        R                  " U 5      (       a   eg )Nr  r   r)   r7   )r   r_   boolr
   rQ  r1  s    r%   test_is_low_contrast_booleanrU  ?  sN    HHV4(E##E****E"1I''.....r/   exposure_funcc                    [         R                  " SSS5      R                  S5      R                  [         R                  5      n[
        R                  " [        5         U " U5        S S S 5        g ! , (       d  f       g = f)Nr   r  r   r  )r   r,   r   r   r   r   r   r   )rV  rb   s     r%   test_negative_inputrX  K  sP    
 IIc3"**6299"**EE	z	"e 
#	"	"s   	A11
A?c                  z   [         R                  " SSS9  SS KJn   U R	                  [
        R                  " SS/SS//5      SS9n[        R                  " U5      u  p#/ S	Qn/ S
Qn[
        R                  " XC5      (       d   e[
        R                  " XR5      (       d   e[        X R                  5      (       d   eg )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rxx!Q!Q(89&IJ'11*=KMM;;}2222;;}2222k88,,,,r/   c                  :   [         R                  " SSS9  SS KJn   U R                  / SQ[        R
                  S9n[        R                  " U5      nUR                  [        R
                  :X  d   e[        U/ SQ5        [        X R                  5      (       d   eg )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  sq    
'MNHH^288H4E

$
$U
+C99   c=1c88$$$$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     s       &    " 5 * 7 7 277BJJ"78Q 9Q--'',,,, 2::rzz2::"FG> H> 2::rzz2::"FG' H'(( '7);<288RXXrzz"BC4. 5 D =.8 		q {{}\*%%hns&:;& 2::rzz2::"FG; H;
- 1v1c(+hR-AB&	& SzWr1g.c3Z0HI&	&$ 



20 2::rzz2::"FG$ H$0 bggrxxRZZD33"@444*/* BNNgfo-9   -0BDV/WX
? Y	

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