
    |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 dlmZ ej4                  j7                  dej8                  ej:                  g      d        Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&ej4                  j7                  dejN                  ej:                  ejP                  g      d        Z)ej4                  j7                  dejN                  ej:                  ejP                  g      d        Z*d Z+ej4                  j7                  dddg      ej4                  j7                  dejX                  ejZ                  ejP                  g      ej4                  j7                  dg d      d                      Z.ej^                  ja                  d         ejb                         Z2 ejf                  e2      Z4 ejj                  e4dz  dz         Z4d  Z6d! Z7ej4                  j7                  dejN                  ej:                  ejP                  g      d"        Z8d# Z9d$ Z:ej4                  j7                  d%dd d&gfdd d'gfd(d)d*gfg      d+        Z;ej4                  j7                  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j4                  j7                  dejN                  ej:                  ejP                  g      d:        ZDd; ZEej4                  j7                  dej8                  ej                  ejN                  ej:                  ejP                  g      d<        ZGd= ZHd> ZId? ZJd@ ZKdA ZLdB ZMdC ZNej4                  j                   eej                         edD      k  dEF      ej4                  j7                  dGdHdIg      dJ               ZQej4                  j7                  dKdLejX                  fdMej                  fdNej                  fdOej                  fdPeSfg      dQ        ZTdR ZUdS ZVdT ZWej4                  j7                  dejN                  ej:                  ejP                  g      dU        ZXdV ZYdW ZZdX Z[dY Z\dZ Z]d[ Z^d\ Z_d] Z`d^ Zad_ Zbd` Zcej4                  j7                  dejN                  ej:                  ejP                  g      da        Zddb Zedc Zfdd Zgde Zhej4                  j7                  dejN                  ej:                  ejP                  g      df        Zidg Zjdh Zkej4                  j7                  dejN                  ej:                  ejP                  g      di        Zldj Zmdk Zndl Zodm Zpdn Zqdo Zrej4                  j7                  dpej                  ej                  ej                  g      dq        Zvdr Zwds Zxy)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        y # 1 sw Y   y xY w)Nd   r   z+Incorrect value for `source_range` argumentmatchfoobarsource_range)nparraypytestraises
ValueErrorr
   	histogramr   imfrequenciesbin_centerss       c/var/www/html/test/engine/venv/lib/python3.12/site-packages/skimage/exposure/tests/test_exposure.pytest_wrong_source_ranger&      sU    	2s)5	)B	z)V	W Q#+#5#5bx#P [Q Q Qs   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       y )Nr   r   r   e   r      r   r   int8r
   r    r   aranger"   r#   r$   s      r%   test_negative_overflowr.   #   sy    	2s)277	+B'11"5K{BIIb#$67q>Qr?a{1R(!,    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       y )Nir   r   r   r)   r*   r-   s      r%   test_all_negative_imager1   ,   sy    	4*BGG	,B'11"5K{BIIdA$67q>Qr?a{1R(!,r/   c                      t        j                  ddgt         j                        } t        j                  |       \  }}t        t        |      t        |             t        |d   d       t        |d   d       y )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                  F   t        j                  ddgddggt         j                        } t        j                  | d      \  }}t        | j                  d         D ]#  }t        t        ||         t        |             % t        |d   d       t        |d   d       y )	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R)3{+;<=Q#R#&r/   c                  L   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
       y )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                  L   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       y )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                      t        j                  dddt         j                        } t        j                  | d      \  }}t        |t        j                  dd             t        |j                  d       y )Nr      r?   r   r   r   r@   )	r   linspacerA   r
   r    r   r,   r   r;   r-   s      r%   test_flat_uint_range_dtyperM   Z   sV    	QS	1B'11"7KK{BIIa$56""F+r/   c                      t        j                  dddt         j                        } t        j                  | d      \  }}t        |t        j                  dd             t        |j                  d       y )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   sV    	T3277	3B'11"7KK{BIIdC$89""F+r/   c                     t        j                  ddg|       }t        j                  |d      \  }}|j                  | k(  sJ t        |t        j                  dd      dz          y )Nr3   r   r   Z   nbins      ?)r   r   r
   r    r   r   r,   r!   s       r%   "test_peak_float_out_of_range_imagerU   h   s[    	2s)5	)B'11"B?K%%%{BIIb#$6$<=r/   c                 <   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       y )	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"EPWXK%%%{+T15{+S!4[!2&r/   c                  6   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        ||       y )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h''1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 y)	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$	GGE4u-GGE4u-	
 
B  (11
L K 
}}UBJJ';		$q(ABq>!,,,q>""""q>!!!!q>"---r/   g      @r   c                      t        j                  t              } t        j                  t        d      }t        | |       y)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GW%r/   c                      t        j                  t              } t        j                  |       }t        j
                  |      \  }}t        |       y )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                 0   t        j                  t              j                  | d      }t	        j
                  |      }|j                  t        |       k(  sJ t	        j                  |      \  }}t        |       |j                  t        |       k(  sJ y )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                  Z   t        j                  t              } t        j                  t        j
                        }d|ddddf<   t        j                  | |      }t        j                  |       }t        j                  |      \  }}t        |       ||k(  j                         rJ y )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'	((48K##C(F55kBNCC+%**,,,,r/   c                     t        j                  ddt        |             }t        j                  || d      \  }}d|cxk  rdk  sJ  J y)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      sH    [[As3x0Nzz.#q9E9r/   ztest_input,expectedr)   rK   )r3      r3   r   c                     t        j                  ddgt         j                        }t        ||       }t	        ||       y )Nr   r)   r   range_values)r   r   rA   r   r   
test_inputr`   rb   outs       r%   test_intensity_range_uint8r      s2    
 HHaV288,E
%j
9CsH%r/   皙?皙?r   )333333?皙?r   r   c                     t        j                  ddgt         j                        }t        ||       }t	        ||       y )Nr   r   r   r   r   r   float64r   r   r   s       r%   test_intensity_range_floatr      s2    
 HHc3Zrzz2E
%j
9CsH%r/   c                      t        j                  ddgt         j                        } t        | dd      }t	        |d       y )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                      t        j                  g dt         j                        } t        j                  |       }|j
                  t         j                  k(  sJ t        |g d       y )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                  x    t        j                  g d      } t        j                  |       }t	        |g d       y )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                     t        j                  g d|       }t        j                  |d      }t	        |g dd       |j
                  |j
                  k(  sJ y )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                  |    t        j                  g d      } t        j                  | d      }t	        |g d       y )Nr   )r   r8   r   )rT   r)   r)   r   r   s     r%   test_rescale_in_range_clipr   "  s-    HH)*E

$
$UX
>Cc;/r/   c                     t        j                  g d|       }t        j                  |d      }|j                  t        |j                        k(  sJ t        |g d       y)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                      t        j                  dt        t        dz   gt         j                        } t	        j
                  | d      }t        |dt        t        g       y )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                      t        j                  dt        gt         j                        } t	        j
                  | d      }t        |dt        g       y )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                      t        j                  dt        gt         j                        } t	        j
                  | d      }t        |dt        g       y )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       y )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
                  |      j                          sJ t        ||        y )Nr^   r^   r   )r   r_   rA   r
   r   isnanr   r   r   s     r%   test_rescale_all_zerosr   T  sM    HHV288,E

$
$U
+CHHSMc5)r/   c                      t        j                  ddgt         j                        } t        j                  | d      }t        |ddg       y )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                      t        j                  d      } t        j                  |       }t        j                  |      j                          sJ t        ||        y )Nr   )r   onesr
   r   r   r   r   r   s     r%   test_rescale_same_valuesr   a  sF    GGFOE

$
$U
+CHHSM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              j                  dd      }t         j                  |d<   t        dg      5  t        j                  || |       d d d        y # 1 sw Y   y xY w)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  sj     IIb&..q!4E&&E$K	A	

 ? 	""5(I>? ? ?s   A,,A5zout_range, out_dtyperA   r   r   r   r   c                     t        j                  g dt         j                        }t        j                  ||       }|j
                  |k(  sJ y )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--eyIL***r/   c                      t        j                  g dt         j                        } t        j                  | t         j
                        }t        |g d       |j                  t         j
                  k(  sJ y )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                      t        j                  g dt         j                        } t        j                  | d      }t        |g d       |j                  t        k(  sJ y )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                      t        j                  g dt         j                        } t        j                  t
              5  t        j                  | d      }d d d        y # 1 sw Y   y xY w)Nr   r   flatr   )r   r   r+   r   r   r   r
   r   )rb   _s     r%   *test_rescale_raises_on_incorrect_out_ranger     sM    HH^2773E	z	" @&&u?@ @ @s   A""A+c                    t        j                  t        j                               j	                  | d      }t        |      }t        j                  |||f      }t        j                  |ddd      }|j                  |j                  k(  sJ |j                  t        |       k(  sJ | t        j                  k7  rdnd}t        t        ||      d	|       t        t!        ||      d
d       y)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
))S#sO
$C))d#G 99%%%==1%8888

*!Kg.E+C961Er/   c                  b   t        j                  t        j                               } t	        j
                  d      5 }t	        j                  d       t        j                  |       \  }}t        |      dkD  sJ 	 ddd       t        j                  | d      }|j                         dk(  sJ |j                         dk(  sJ | j                  |j                  k(  sJ t        j                  |       }t        t!        ||      d	d
       t        t#        ||      dd       y# 1 sw Y   xY w)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k1vzz ))#$?G;;=A;;=C99%%%++C0JW5wB+J@$J s   >D%%D.c                  &   t        j                  t        j                               } t	        j
                  | j                  d   | j                  d   ft              }t	        j                  | |f      } t        j                  |       }|j                  | j                  k7  sJ | ddddddf   } t        j                  |       }| j                  |j                  k(  sJ t        t        ||      dd       t        t        ||      dd       y)	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
))S%L
!C))#.G==CII%%%
aBQBh-C++C0J99%%%W5wB+J@&!Lr/   c                  P   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 y	)
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)i	0Ba0G&HHIJTQQQr/   c                     t        j                  d      } | dz  } | j                  t         j                        } t	        j
                  | d      }t        j                  |      t        j                  |      k(  sJ t        j                  d      } | dz  } | j                  t         j                        } t	        j
                  | d      }t        j                  |      t        j                  |      k(  sJ y)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                     t        t        j                  t        j                                     } | dz  } d| | j
                  d   dz  | j
                  d   dz  f<   d}t        ddd      D ]X  }t        j                  | |d	
      }t        |dd|f   | dd|f         dkD  sJ t        ||ddf   | |ddf         dkD  rXJ  y)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' Y--c;3O"71l?#;SL=QRUXXXX"7<?#;Sq=QRUXXXXYr/   c                  >   t        j                         } t        j                  |       }t	        j
                  | d      }t	        j
                  | d      }t        ||       t	        j
                  |d      }t	        j
                  |d      }t        ||       y )Nr   r  r)   )r	   moonr   r   r
   r   r   )img_uimg_f
img_clahe0
img_clahe1s       r%   test_adapthist_clip_limitr(    s}    IIKEe$E ,,UqAJ,,UqAJz:. ,,UqAJ,,UqAJz:.r/   c                    | j                   dk(  r2t        | j                               t        |j                               }} t        j                  |       } t        j                  |      }d| j
                  z  t        j                  | |z
        j                         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     yyA~diik*HTYY[,AdT"DT"D
		/BIIdTk2668
8C$**//*GAttcz"""r/   c                     | j                   dk(  rt        |       t        |      }} t        j                  | j	                         |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  s`     yyA~d^Xd^d66$))+		+,D
TZZ__-a0
0CJr/   c                      t        j                  dt              } t        j                  t
        d      5  t        j                  | d       d d d        y # 1 sw Y   y xY w)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  sF    
''&
&C	z)K	L 4##C34 4 4s   AA c                      t        j                  ddg      } t        j                  | d      }| j                  |j                  k(  sJ y)"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                      t        j                  ddt         j                        j                  d      } t	        j
                  | d      }t        ||        y)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vu%r/   c                 "   t         j                  j                  ddd      j                  | d      }t	        j
                  |d      }|j                  j                  } t        |t        |    d          |j                  |j                  k(  sJ y)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                     t        j                  ddt         j                        j                  d      } t        j                  g dt         j                        j                  d      }t        j                  | d      }t        ||       y)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  su     IIaBHH-55h?ExxA	
D hhGDH ghI L ""5#.Fvx(r/   c                     t        j                  ddt         j                        j                  d      } t        j                  g dt         j                        j                  d      }t        j                  | d      }t        ||       y)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  su     IIaBHH-55h?ExxA	
D hhGDH ghI L ""5!,Fvx(r/   c                      t        j                  dddt         j                        j                  d      } t	        j
                  t              5  t        j                  | d       d d d        y # 1 sw Y   y xY w)Nr   rK   r   r  r   )	r   r,   rA   r   r   r   r   r
   r<  rb   s    r%   test_adjust_gamma_negativer2    sV    IIaa*226:E	z	" )eR() ) )s   A//A8c                      dt        j                  dt         j                        z  } t        j                  t	        j
                  | dd      dk(        sJ y )NrK   r   r   r)   r   )gammagain)r   r   rA   r   r
   r<  r8  s    r%   test_adjust_gamma_u8_overflowr6    sA    
bhh/
/C66(''13?3FGGGr/   c                     t        j                  ddg|       }t        j                  |d      }|j                  |j                  k(  sJ |j
                  | k(  sJ y)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                  ,   t        j                  dddt         j                        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        ||       y)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=    sy     IIaa*226:Exx*,044444		
 hhH   *Fvx(r/   c                  .   t        j                  dddt         j                        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        ||       y)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{     IIaa*226:Exx(,,-4444		
 hhH   40Fvx(r/   c                     t        j                  ddg|       }t        j                  |dd      }|j                  |j                  k(  sJ |j
                  | k(  sJ y)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                  .   t        j                  dddt         j                        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        ||       y)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{     IIaa*226:Exx$$%,,,,1		
 hhH $$UAq1Fvx(r/   c                  .   t        j                  dddt         j                        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        ||       y)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{     IIaa*226:Exx44444444		
 hhH $$UAr2Fvx(r/   c                  .   t        j                  dddt         j                        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        ||       y)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{     IIaa*226:Exx$(,.4444		
 hhH $$UC4Fvx(r/   c                  0   t        j                  dddt         j                        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        ||       y)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}     IIaa*226:Exx4444/,)$		
 hh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  j	                  t         j
                        } t        j                  |       sJ t        j                  | d      rJ | j	                  t         j                        dz  } t        j                  |       sJ t        j                  | d      rJ y )	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                      t        j                  dt              } t        j                  |       sJ d| d d t        j                  |       rJ y )Nr  r   r)   r7   )r   r_   boolr
   rQ  r1  s    r%   test_is_low_contrast_booleanrU  ?  sH    HHV4(E##E***E"1I''....r/   exposure_funcc                     t        j                  ddd      j                  d      j                  t         j                        }t        j                  t              5   | |       d d d        y # 1 sw Y   y xY w)Nr   r  r   r  )r   r,   r   r   r   r   r   r   )rV  rb   s     r%   test_negative_inputrX  K  sY    
 IIc3"**6299"**EE	z	" e  s   	A//A8c                  f   t        j                  dd       dd lm}  | j	                  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 y )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;;}k222;;}k222k288,,,r/   c                  8   t        j                  dd       dd lm}  | j                  g dt        j
                        }t        j                  |      }|j                  t        j
                  k(  sJ t        |g d       t        || j                        sJ y )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  sp    
'MNHH^288H4E

$
$U
+C99   c=1c288$$$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 t{{}4\*%8%%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/   