o
    h                  	   @   s  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 ejdejejgdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$ejdej%ejej&gdd Z'ejdej%ejej&gd d! Z(d"d# Z)ejd$dd%gejdej*ej+ej&gejd&g d'd(d) Z,ej-.d  e/ Z0e1e0Z2e3e2d* d+ Z2d,d- Z4d.d/ Z5ejdej%ejej&gd0d1 Z6d2d3 Z7d4d5 Z8ejd6d%d d7gfdd d8gfd9d:d;gfgd<d= Z9ejd6d%d>d?gfdd@d7gfdAdBdCgfgdDdE Z:dFdG Z;dHZ<dIZ=dJZ>dKZ?dLdM Z@dNdO ZAejdej%ejej&gdPdQ ZBdRdS ZCejdejejDej%ejej&gdTdU ZEdVdW ZFdXdY ZGdZd[ ZHd\d] ZId^d_ ZJd`da ZKdbdc ZLejdddedfgdgdh ZMejdidjej*fdkejNfdlejNfdmejNfdneOfgdodp ZPdqdr ZQdsdt ZRdudv ZSejdej%ejej&gdwdx ZTdydz ZUd{d| ZVd}d~ ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_ejdej%ejej&gdd Z`dd Zadd Zbdd Zcdd Zdejdej%ejej&gdd Zedd Zfdd Zgejdej%ejej&gdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Znejdejoejpejqgdd Zrdd Zsdd ZtdS )    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_typedtypec                 C   sX   t jddg| d}tjtdd tj|dd\}}W d    d S 1 s%w   Y  d S )Nd   r   z+Incorrect value for `source_range` argumentmatchfoobarsource_range)nparraypytestraises
ValueErrorr   	histogramr   imfrequenciesbin_centers r"   _/var/www/html/scripts/venv/lib/python3.10/site-packages/skimage/exposure/tests/test_exposure.pytest_wrong_source_range   s   "r$   c                  C   sj   t jddgt jd} t| \}}t|t dd |d dks"J |d dks*J t|dd d d S )Nr   r   r   e   r      r   r   int8r   r   r   aranger   r    r!   r"   r"   r#   test_negative_overflow       r+   c                  C   sj   t jddgt jd} t| \}}t|t dd |d dks"J |d dks*J t|dd d d S )Nir   r   r   r&   r'   r*   r"   r"   r#   test_all_negative_image)   r,   r-   c                  C   sT   t jddgt jd} t| \}}tt|t| t|d d t|d d d S )N
   r   r   r   r   )r   r   r(   r   r   r   lenr*   r"   r"   r#   test_int_range_image2   s
   r0   c                  C   sx   t jddgddggt jd} tj| dd\}}t| jd D ]}tt|| t| qt|d d t|d d d S )	Nr.      r   f   r   r   )channel_axisr   )	r   r   r(   r   r   rangeshaper   r/   )r   r    r!   chr"   r"   r#   !test_multichannel_int_range_image:   s   r7   c                  C   sr   t jddgt jd} tj| dd\}}t|t dd t|d d t|d d t|d	 d t|jd
 d S )Nr.   r   r   r   r   r      r&   r%   r8   )	r   r   uint8r   r   r   r)   r   r5   r*   r"   r"   r#   test_peak_uint_range_dtypeC      r;   c                  C   sr   t jddgt jd} tj| dd\}}t|t dd t|d d	 t|d
 d	 t|d d t|jd d S )Nr.   r   r   r   r         r&         r   r9   )	r   r   r(   r   r   r   r)   r   r5   r*   r"   r"   r#   test_peak_int_range_dtypeM   r<   rB   c                  C   sH   t jdddt jd} tj| dd\}}t|t dd t|jd d S )Nr      r8   r   r   r   r9   )	r   linspacer:   r   r   r   r)   r   r5   r*   r"   r"   r#   test_flat_uint_range_dtypeW      rE   c                  C   sH   t jdddt jd} tj| dd\}}t|t dd t|jd d S )Nr=   r>   r8   r   r   r   r9   )	r   rD   r(   r   r   r   r)   r   r5   r*   r"   r"   r#   test_flat_int_range_dtype^   rF   rG   c                 C   sL   t jddg| d}tj|dd\}}|j| ksJ t|t ddd  d S )Nr.   r   r   Z   nbins      ?)r   r   r   r   r   r   r)   r   r"   r"   r#   "test_peak_float_out_of_range_imagee   s   rL   c                 C   sn   t jddg| d}d}tj||dd\}}|j| ksJ tt |dd tt |dd tt	|d d S )	Nr.   r   r   r   )rJ   r   g   ?)
r   r   r   r   r   r   minmaxr   r/   )r   r   rJ   r    r!   r"   r"   r#   "test_peak_float_out_of_range_dtypen   s   
rQ   c                  C   sv   t jg dt jd} tj| ddd\}}t d}d|d< d	|d
< t|| tj| ddd\}}|d }t|| d S )N)r   rC   rC   r   r   F)r   	normalizer8   r&   r      r   Tg      @)r   r   r:   r   r   zerosr   )r   r    r!   expectedr"   r"   r#   test_normalizez   s   



rV   r   imager3   )r   r&   r   c           
      C   s   d}|d |d  }t |  \}}tjtj||| dtj||| df|d}tj|||d\}}	t| tjrAt|	t	||d  |d d |ksKJ |d d dksUJ |d d dks_J |d d |ksiJ dS )	z-Check that all channels use the same binning.)r1   r1   r   r&   r   )axis)r   r3   r   N)
r   r   stackfullr   r   
issubdtypeintegerr   r)   )
r   r   r3   r5   channel_sizeiminimaxr   r    r!   r"   r"   r#   (test_multichannel_hist_common_bins_uint8   s$   
r`   g      @r   c                  C   s&   t t} t jtdd}t| | dS )z)Check integer bins used for uint8 images.rM   rI   N)r   equalize_histtest_img_intr   )img_eq0img_eq1r"   r"   r#   test_equalize_uint8_approx   s   
re   c                  C   s.   t t} t| }t|\}}t| d S )N)r	   img_as_ubytetest_imgr   ra   cumulative_distributioncheck_cdf_slope)imgimg_eqcdf	bin_edgesr"   r"   r#   test_equalize_ubyte   s   

rn   c                 C   s\   t tj| dd}t|}|jt| ksJ t|\}}t	| |jt| ks,J d S )NFcopy)
r	   img_as_floatrg   astyper   ra   r   r   rh   ri   )r   rj   rk   rl   rm   r"   r"   r#   test_equalize_float   s   
rs   c                  C   sl   t t} ttj}d|ddddf< tj| |d}t| }t|\}}t	| ||k
 r4J d S )Nr&   r   i  )mask)r	   rq   rg   r   rT   r5   r   ra   rh   ri   all)rj   rt   img_mask_eqrk   rl   rm   r"   r"   r#   test_equalize_masked   s   

rw   c                 C   sD   t ddt| }t || d\}}d|  k rdk s J  J dS )z=Slope of cdf which should equal 1 for an equalized histogram.r   r&   rN   皙?N)r   rD   r/   polyfit)rl   norm_intensityslope	interceptr"   r"   r#   ri      s    ri   ztest_input,expectedr&   rC   )r.      r.   r}   c                 C   .   t jddgt jd}t|| d}t|| d S )Nr   r&   r   range_values)r   r   r:   r   r   
test_inputrU   rW   outr"   r"   r#   test_intensity_range_uint8      r   皙?皙?r   )333333?皙?r   r   c                 C   r~   )Nr   r   r   r   r   r   float64r   r   r   r"   r"   r#   test_intensity_range_float   r   r   c                  C   s0   t jddgt jd} t| ddd}t|d d S )Nr   r   r   r   T)r   clip_negative)r   r&   r   rW   r   r"   r"   r#   "test_intensity_range_clipped_float   s   r   i  i  i?  i  c                  C   s@   t jg dt jd} t| }|jt jksJ t|g d d S )N3   r2      r   r      rC   )r   r   r:   r   rescale_intensityr   r   r   r"   r"   r#   test_rescale_stretch
  s   
r   c                  C   s*   t g d} t| }t|g d d S )Ng     I@g     Y@g      c@)r   rK   r&   r   r   r   r   r   r   r"   r"   r#   test_rescale_shrink  s   
r   c                 C   sF   t jg d| d}tj|dd}t|g ddd |j|jks!J d S )Nr   r   r   rC   in_range)r   r   g333333?   )decimal)r   r   r   r   r   r   r   rW   r   r"   r"   r#   test_rescale_in_range  s   r   c                  C   s.   t g d} tj| dd}t|g d d S )Nr   )r   r2   r   )rK   r&   r&   r   r   r"   r"   r#   test_rescale_in_range_clip   s   r   c                 C   sF   t jg d| d}tj|d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   r"   r"   r#   test_rescale_out_range&  s   r   c                  C   s<   t jdttd gt jd} tj| dd}t|dttg d S )Nr   r   r   uint10r   )r   r   
uint10_maxuint16r   r   r   
uint16_maxr   r"   r"   r#   test_rescale_named_in_range9  s   r   c                  C   4   t jdtgt jd} tj| dd}t|dtg d S )Nr   r   r   r   )r   r   r   r   r   r   r   r   r   r"   r"   r#   test_rescale_named_out_range?     r   c                  C   r   )Nr   r   uint12r   )r   r   r   r   r   r   r   
uint12_maxr   r"   r"   r#   test_rescale_uint12_limitsE  r   r   c                  C   r   )Nr   r   uint14r   )r   r   r   r   r   r   r   
uint14_maxr   r"   r"   r#   test_rescale_uint14_limitsK  r   r   c                  C   s<   t jdt jd} t| }t |  sJ t||  d S )NrS   rS   r   )r   rT   r:   r   r   isnanru   r   r   r"   r"   r#   test_rescale_all_zerosQ  s   
r   c                  C   s4   t jddgt jd} tj| dd}t|ddg d S )N   r   r   r   r   )r   r   r   r   r   r   r   r"   r"   r#   test_rescale_constantX  r   r   c                  C   s6   t d} t| }t |  sJ t||  d S )Nr   )r   onesr   r   r   ru   r   r   r"   r"   r#   test_rescale_same_values^  s   

r   zin_range,out_range)rW   r   )r   rW   c                 C   s|   t jdtddd}t j|d< d}d}| dkr||g}n|g}t| t|| | W d    d S 1 s7w   Y  d S )	N   r   rM   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.cliprW   )r   r)   floatreshapenanr   r   r   )r   r   rW   msgnumpy_warning_1_17_plusexp_warnr"   r"   r#   test_rescale_nan_warninge  s   
	

"r   zout_range, out_dtyper:   r   r   r   r   c                 C   s4   t jg dt jd}tj|| d}|j|ksJ d S )Nr=   r   r   r   r   )r   r   r(   r   r   r   )r   	out_dtyperW   output_imager"   r"   r#   test_rescale_output_dtype  s   
r   c                  C   sF   t jg dt jd} tj| t jd}t|g d |jt jks!J d S )Nr   r   r   r   r>   rC   )r   r   r(   r   r   r:   r   r   rW   r   r"   r"   r#   test_rescale_no_overflow  s   r   c                  C   sB   t jg dt jd} tj| d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   r"   r"   r#   test_rescale_float_output  s   r   c                  C   sR   t jg dt jd} tt tj| dd}W d    d S 1 s"w   Y  d S )Nr   r   flatr   )r   r   r(   r   r   r   r   r   )rW   _r"   r"   r#   *test_rescale_raises_on_incorrect_out_range  s   "r   c                 C   s   t t j| dd}t|}t|||f}tj	|dddd}|j
|j
ks)J |jt| ks2J | tjkr9dnd}tt||d	| tt||d
d dS )z!Test a grayscale float image
    Fro   )9   r   {Gz?r>   )kernel_size
clip_limitrJ   rM   rS   g)\Y@ghs?N)r	   rq   r   	astronautrr   r
   r   dstackr   equalize_adapthistr5   r   r   float16r   peak_snrnorm_brightness_err)r   rj   adaptedsnr_decimalr"   r"   r#   test_adapthist_grayscale  s   r   c                  C   s   t t } tjdd}td t| \}}t	|dks"J W d   n1 s,w   Y  tj
| dd}| dks@J | dksHJ | j|jksPJ t| }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?rS   )r	   img_as_uintr   r   warningscatch_warningssimplefilterr   r   r/   r   rO   rP   r5   r   r   r   r   )rj   whistr!   r   
full_scaler"   r"   r#   test_adapthist_color  s   

r   c                  C   s   t t } tj| jd | jd ftd}t| |f} t	
| }|j| jks*J | ddddddf } t	| }| j|jksDJ tt||dd tt||dd dS )	zTest an RGBA color image
    r   r&   r   NrM   r   rS   ga+e?)r	   rq   r   r   r   r   r5   r   r   r   r   r   r   r   r   )rj   alphar   r   r"   r"   r#   test_adapthist_alpha  s   

r   c                  C   s   t t } t| } d}t | dd|dd|f }t|g| jd |  }tj	|ddd}tj	|ddd}|j|jksAJ |j|jksIJ t
t|||jd d   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   r1   g?)r   r   rS   r   N)r	   rq   r   r   r
   r   r   r5   r   r   meanabs)rj   aimg2dimg3d	adapted2d	adapted3dr"   r"   r#   test_adapthist_grayscale_Nd  s(   
r   c                  C   s   t d} | d7 } | t j} t| d}t |t |ks!J t d} | d7 } | t j} t| d}t |t |ksBJ dS )z(Test constant image, float and uint
       r   rS   rM   r   N)	r   rT   rr   r   r   r   rO   rP   r   )rj   r   r"   r"   r#   test_adapthist_constant  s   

r   c                  C   s   t tt } | d } d| | jd d | jd d f< d}tdddD ]4}tj| |d	d
}t	|dd|f | dd|f dksDJ t	||ddf | |ddf dksYJ q%dS )zTest border processing
    g      Y@r   r   rS   r&   r   r   G   rK   r   Nr   )
r
   r	   rq   r   r   r5   r4   r   r   r   )rj   border_indexr   r   r"   r"   r#   test_adapthist_borders  s"    
r   c                  C   sb   t  } t| }tj| dd}tj| dd}t|| tj|dd}tj|dd}t|| d S )Nr   r   r&   )r   moonr	   rq   r   r   r   )img_uimg_f
img_clahe0
img_clahe1r"   r"   r#   test_adapthist_clip_limit  s   

r   c                 C   sv   | j dkrt|  t| } }t| } t|}d| j t| |   }t	| j
j \}}dt||  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
    rM   r   r}   )ndimr
   rp   r	   rq   sizer   squaresumr   r   typelog)img1img2mser   max_r"   r"   r#   r   ,  s   


r   c                 C   sJ   | j dkrt| t|} }t|  |  }|t| jj d  }|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
    rM   r&   )r  r
   r   r   r   r   r   r  )r  r  ambenber"   r"   r#   r   B  s
   
r   c                  C   sN   t jdtd} tjtdd t| d W d    d S 1 s w   Y  d S )Nr   r   z Incorrect value of `kernel_size`r   )rM   rM   rM   )r   r   r   r   r   r   r   r   rj   r"   r"   r#   $test_adapthist_incorrect_kernel_sizeV  s   "r  c                  C   s.   t ddg} t| d}| j|jksJ dS )"Check that the shape is maintainedr&   g      ?N)r   r   r   adjust_gammar5   )rj   resultr"   r"   r#   test_adjust_gamma_1x1_shape_  s   r  c                  C   s2   t jddt jdd} t| d}t||  dS )z4Same image should be returned for gamma equal to oner   r8   r      r  r&   N)r   r)   r:   r   r   r  r   )rW   r  r"   r"   r#   test_adjust_gamma_onef  s   r  c                 C   sT   t jdddj| dd}t|d}|jj} t|t	|  d  |j|jks(J dS )z6White image should be returned for gamma equal to zeror   rC   r   Fro   r&   N)
r   randomuniformrr   r   r  r   r  r   r   )r   rW   r  r"   r"   r#   test_adjust_gamma_zerom  s
   r  c                  C   L   t jddt jdd} t jg dt jdd}t| d}t|| dS )z\Verifying the output with expected results for gamma
    correction with gamma equal to halfr   r8   r   r  (   r   r            $   '   *   -   0   2   5   7   :   <   >   @   B   D   F   r   I   K   M   N   P   Q   S   T   V   W   Y   rH   \   ]   ^   `   a   b   r   r%   r2   g   i   j   k   l   m   o   p   q   r   s   t   u   v   w   y   z   {   |   }   ~   r   r>      r                  rW        r?                        r`                    rf     r            rj              rn              rr           ru           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     r        r     r     r     r@   r@   rA   rA      r     r        r     r     r     r     r     r        r     r     r     r     r     r     r     r     r     r     r     r     r     r     r  rC   rK   Nr   r)   r:   r   r   r   r  r   rW   rU   r  r"   r"   r#   test_adjust_gamma_less_onew  s   
r  c                  C   r  )z[Verifying the output with expected results for gamma
    correction with gamma equal to twor   r8   r   r  (   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r&   r&   r&   r&   r&   r&   rS   rS   rS   rS   rS   rS   rM   rM   rM   rM   r   r   r   r   r1   r1   r1   r1      r  r     r  r  r   r   r   	   r  r  r.   r.      r  r  r   r      r     r  r   r   r  r     r     r     r  r}   r}      r     r  r     r        r     r  r        r     r  r  !   "   #   r  r  %   &   r  r  (   )   r  r  +   ,   r   .   /   r  r!  1   r"  r   4   r#  6   r$  8   r  r   r%  ;   r&  =   r'  ?   r(  A   r)  C   r*  E   r+  r   r,  J   r-  L   r.  r/  O   r0  r1  R   r3  U   r4  r5  X   r6  [   r7  r8  r9  _   r;  r<  c   r   r2   r=  h   r>  r@  rA  rB  rC  rD  rE  rG  rH  rI  rK  x   rL  rN  rO  rQ  r   r>   r   rS  rU  rV  rX  rY  rZ  r[  r]  r^  r`  ra  rc  rd  rf  rg  rh  ri  rk  rl  rn  rp  rq  rs  rt  rv  rx  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  rC   rS   Nr  r  r"   r"   r#   test_adjust_gamma_greater_one  s   
r   c                  C   sT   t dddt jd} tt t| d W d    d S 1 s#w   Y  d S )Nr   rC   r   r   r   )	r   r)   r:   r   r   r   r   r   r  rW   r"   r"   r#   test_adjust_gamma_negative  s   "r  c                  C   s6   dt jdt jd } t tj| ddddksJ d S )NrC   r   r   r&   rx   )gammagain)r   r   r:   ru   r   r  r  r"   r"   r#   test_adjust_gamma_u8_overflow  s   "r  c                 C   s@   t jddg| d}t|d}|j|jksJ |j| ksJ dS )r  r&   r   N)r   r   r   
adjust_logr5   r   r   rj   r  r"   r"   r#   test_adjust_log_1x1_shape  s   r  c               
   C   sr   t 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d}t| d}t|| dS )z|Verifying the output with expected results for logarithmic
    correction with multiplier constant multiplier equal to unityr   rC   r   r   )r   r1   r  r  r  r  r  r  )r  r!  r#  r%  r  r*  r,  r.  )r  r4  r  r  r   r  rB  rE  )rI  rL  rP  rR  rU  rY  r\  r`  )rd  r   rk  rn  rr  rv  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&   Nr   r)   r:   r   r   r   r  r   r  r"   r"   r#   test_adjust_log  s   
r
  c               
   C   t   t 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d}t| dd}t|| dS )zVerifying the output with expected results for inverse logarithmic
    correction with multiplier constant multiplier equal to unityr   rC   r   r   )r   rS   r1   r   r  r  r  r}   )r  r  r  r  r  r  r  r   )r!  r   r$  r%  r  r  r*  H   )r  r  r2  r5  rH   r9  r<  r2   )r?  n   rF  rJ  rM  rQ  r   rV  )r?   r^  rb  rf  rj  rn  rs  rx  )r|  r  r  r  r  r  r  r  )r  r  r  rA   r  r  r  r  r   r&   TNr	  r  r"   r"   r#   test_adjust_inv_log     
r  c                 C   sB   t jddg| d}t|dd}|j|jksJ |j| ksJ dS )r  r&   r   r1   N)r   r   r   adjust_sigmoidr5   r   r  r"   r"   r#   test_adjust_sigmoid_1x1_shape   s   r  c               
   C   r  )zlVerifying the output with expected results for sigmoid correction
    with cutoff equal to one and gain of 5r   rC   r   r   )r&   r&   r&   rS   rS   rS   rS   rS   )rM   rM   rM   r   r   r   r1   r1   )r1   r  r  r  r  r   r  r.   )r.   r  r   r  r  r   r  r  )r  r}   r  r  r  r  r  r  )r  r  r  r  r  r  r"  r  )r   r  r(  r*  r  r  r0  r  )r6  r9  r  r  rA  rE  rJ  rN  r   r&   r1   Nr   r)   r:   r   r   r   r  r   r  r"   r"   r#   test_adjust_sigmoid_cutoff_one	  r  r  c               
   C   st   t 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d}t| dd}t|| dS )znVerifying the output with expected results for sigmoid correction
    with cutoff equal to zero and gain of 10r   rC   r   r   )r   rY  rb  rj  rt  r}  r  r  )r  r  r  r  r  r  rA   r  )r  r  r  r  r  r  r  r  r  r  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  r"   r"   r#   test_adjust_sigmoid_cutoff_zero  r  r  c               
   C   r  )znVerifying the output with expected results for sigmoid correction
    with cutoff equal to half and gain of 10r   rC   r   r   )r&   r&   rS   rS   rM   rM   r   r1   )r1   r  r  r  r.   r   r  r  )r  r  r  r  r  r  r  r"  )r   r(  r  r0  r6  r  rA  rJ  )r>   r?   rc  rl  ru  r~  r  r  )r  r  r  r  r  r  rA   r  )r  r  r  r  r  r  r  r  r  r   rK   r.   Nr  r  r"   r"   r#   test_adjust_sigmoid_cutoff_half-  r  r  c               
   C   sv   t 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d}t| 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   rC   r   r   )r  r  r  r  r  r  r  r  )r  r  r  r  r  r  r  r  )r  r  rA   r  r  r  r  r  )r  r  r  r|  rs  ri  ra  rX  )rQ  rH  r?  r:  r5  r/  r+  r'  )r$  r  r  r  r  r  r  r  )r  r  r  r   r.   r   r  r  )r1   r   r   rM   rM   rS   rS   r&   r   rK   r.   TNr  r  r"   r"   r#   #test_adjust_inv_sigmoid_cutoff_half?  s   
r  c                  C   s   t ddd} t| sJ d| d< t| sJ tj| ddr"J | d t j} t| s1J tj| ddr:J | t jd } t| sIJ tj| ddrRJ d S )	Nr   g{Gz?r   r&   r   )upper_percentilerC   r8   )r   rD   r   is_low_contrastrr   r:   r   r  r"   r"   r#   test_is_low_contrastQ  s   r  c                  C   s:   t jdtd} t| sJ d| d d< t| rJ d S )Nr   r   r&   r1   )r   rT   boolr   r  r  r"   r"   r#   test_is_low_contrast_booleana  s   r  exposure_funcc                 C   sT   t ddddt j}tt | | W d    d S 1 s#w   Y  d S )Nr   r  r   r   )r   r)   r   rr   r   r   r   r   )r  rW   r"   r"   r#   test_negative_inputl  s   
"r  c                  C   s   t jddd dd lm}  | jtddgddggdd}t|\}}g d	}g d
}t||s4J t||s<J t	|| j
sDJ d S )Ndask$dask python library is not installedreasonr   r&   rS   )r&   rS   )chunks)r   r&   rS   )r&   rS   r&   )r   importorskip
dask.arrayr   
from_arrayr   r   r   allclose
isinstanceArray)da
dask_arrayoutput_histoutput_binsexpected_binsexpected_histr"   r"   r#   test_dask_histogramx  s    r0  c                  C   sj   t jddd dd lm}  | jg dtjd}t|}|jtjks$J t	|g d t
|| js3J d S )Nr  r   r!  r   r   r   r   )r   r$  r%  r   r   r:   r   r   r   r   r(  r)  )r*  rW   r   r"   r"   r#   test_dask_rescale  s   
r1  )ur   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   markparametrizer(   float32r$   r+   r-   r0   r7   r;   rB   rE   rG   r   r   rL   rQ   rV   r:   int16r`   r  seedcamerarb   rq   rg   r   re   rn   rs   rw   ri   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   r  r  r  r  r  r   r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r  r0  r1  r"   r"   r"   r#   <module>   s   
			














	



		
	
	'#	


	