U
    ?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&d d'd(gd)d* Z,ej-.d  e/ Z0e1e0Z2e3e2d+ d, Z2d-d. Z4d/d0 Z5ejdej%ejej&gd1d2 Z6d3d4 Z7d5d6 Z8ejd7d%d d'gfdd d8gfd9d:d;gfgd<d= Z9ejd7d%d>d?gfdd(d'gfd@dAdBgfgdCdD Z:dEdF Z;dGZ<dHZ=dIZ>dJZ?dKdL Z@dMdN ZAejdej%ejej&gdOdP ZBdQdR ZCejdejejDej%ejej&gdSdT ZEdUdV ZFdWdX ZGdYdZ ZHd[d\ ZId]d^ ZJd_d` ZKdadb ZLejdcdddegdfdg ZMejdhdiej*fdjejNfdkejNfdlejNfdmeOfgdndo ZPdpdq ZQdrds ZRdtdu ZSejdej%ejej&gdvdw ZTdxdy ZUdzd{ 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   sB   t jddg| d}tjtdd tj|dd\}}W 5 Q R X d S )Nd   r   z+Incorrect value for `source_range` argumentmatchZfoobarsource_range)nparraypytestraises
ValueErrorr   	histogramr   imfrequenciesbin_centers r!   V/var/www/html/venv/lib/python3.8/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sDt|d dksTtt|dd d d S )Nr   r   r   e   r      r   r   int8r   r   r   arangeAssertionErrorr   r   r    r!   r!   r"   test_negative_overflow    s    r+   c                  C   sj   t jddgt jd} t| \}}t|t dd |d dksDt|d dksTtt|dd d d S )Nir   r   r   r%   r&   r*   r!   r!   r"   test_all_negative_image)   s    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
    r/   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    r6   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$   r7   )	r   r   uint8r   r   r   r(   r   r4   r*   r!   r!   r"   test_peak_uint_range_dtypeC   s    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   r8   )	r   r   r'   r   r   r   r(   r   r4   r*   r!   r!   r"   test_peak_int_range_dtypeM   s    r@   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      r7   r   r   r   r8   )	r   linspacer9   r   r   r   r(   r   r4   r*   r!   r!   r"   test_flat_uint_range_dtypeW   s    rC   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<   r7   r   r   r   r8   )	r   rB   r'   r   r   r   r(   r   r4   r*   r!   r!   r"   test_flat_int_range_dtype^   s    rD   c                 C   sL   t jddg| d}tj|dd\}}|j| ks2tt|t ddd  d S )Nr-   r   r   Z   nbins      ?)r   r   r   r   r   r)   r   r(   r   r!   r!   r"   "test_peak_float_out_of_range_imagee   s    rI   c                 C   sn   t jddg| d}d}tj||dd\}}|j| ks8ttt |dd tt |dd t	t
|d d S )	Nr-   r   r   r   )rG   r   g   ?)r   r   r   r   r   r)   r   minmaxr   r.   )r   r   rG   r   r    r!   r!   r"   "test_peak_float_out_of_range_dtypen   s    
rN   c                  C   sx   t jdddgt jd} tj| ddd\}}t d}d|d< d	|d
< t|| tj| ddd\}}|d }t|| d S )Nr   rA   r   r   F)r   	normalizer7   r%      r   Tg      @)r   r   r9   r   r   zerosr   )r   r   r    expectedr!   r!   r"   test_normalizez   s    



rS   r   imager2   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rt|	t	||d  |d d |kst
|d d dkst
|d d dkst
|d d |kst
dS )	z-Check that all channels use the same binning.)r0   r0   r   r%   r   )Zaxis)r   r2   r   N)r   r   stackfullr   r   Z
issubdtypeintegerr   r(   r)   )
r   r   r2   r4   Zchannel_sizeZiminZimaxr   r   r    r!   r!   r"   (test_multichannel_hist_common_bins_uint8   s(      
rX   g      @r   c                  C   s&   t t} t jtdd}t| | dS )z)Check integer bins used for uint8 images.rJ   rF   N)r   equalize_histtest_img_intr   )Zimg_eq0Zimg_eq1r!   r!   r"   test_equalize_uint8_approx   s    
r[   c                  C   s.   t t} t| }t|\}}t| d S )N)r	   Zimg_as_ubytetest_imgr   rY   cumulative_distributioncheck_cdf_slope)imgimg_eqcdf	bin_edgesr!   r!   r"   test_equalize_ubyte   s    

rc   c                 C   s\   t tj| dd}t|}|jt| ks0tt	|\}}t
| |jt| ksXtd S )NFcopy)r	   img_as_floatr\   astyper   rY   r   r   r)   r]   r^   )r   r_   r`   ra   rb   r!   r!   r"   test_equalize_float   s    
rh   c                  C   sl   t t} ttj}d|ddddf< tj| |d}t| }t|\}}t	| ||k
 rhtd S )Nr%   r   i  )mask)r	   rf   r\   r   rQ   r4   r   rY   r]   r^   allr)   )r_   ri   Zimg_mask_eqr`   ra   rb   r!   r!   r"   test_equalize_masked   s    

rk   c                 C   sB   t ddt| }t || d\}}d|  k r8dk s>n tdS )z=Slope of cdf which should equal 1 for an equalized histogram.r   r%   rK   皙?N)r   rB   r.   Zpolyfitr)   )ra   Znorm_intensityZslopeZ	interceptr!   r!   r"   r^      s    r^   ztest_input,expectedrA   )r-      r-   rm   c                 C   s.   t jddgt jd}t|| d}t|| d S )Nr   r%   r   range_values)r   r   r9   r   r   Z
test_inputrR   rT   outr!   r!   r"   test_intensity_range_uint8   s    rr   皙?皙?)333333?皙?ru   rv   c                 C   s.   t jddgt jd}t|| d}t|| d S )Nrs   rt   r   rn   r   r   float64r   r   rp   r!   r!   r"   test_intensity_range_float   s    ry   c                  C   s0   t jddgt jd} t| ddd}t|d d S )Nrs   rt   r   r   T)ro   Zclip_negative)r   r%   rw   rT   rq   r!   r!   r"   "test_intensity_range_clipped_float   s    r{   i  i  i?  i  c                  C   sD   t jdddgt jd} t| }|jt jks0tt|dddg d S )N3   r1      r   r      rA   )r   r   r9   r   rescale_intensityr   r)   r   rz   r!   r!   r"   test_rescale_stretch
  s    
r   c                  C   s.   t dddg} t| }t|dddg d S )N     I@     Y@      c@r   rH   r%   r   r   r   r   r   rz   r!   r!   r"   test_rescale_shrink  s    
r   c                 C   sJ   t jdddg| d}tj|dd}t|ddd	gd
d |j|jksFtd S )Nr   r   r   r   r   rA   in_rangert   rv   g333333?   )decimal)r   r   r   r   r   r   r)   r   rT   rq   r!   r!   r"   test_rescale_in_range  s    r   c                  C   s2   t dddg} tj| dd}t|dddg d S )Nr   r   r   )r   r1   r   rH   r%   r   rz   r!   r!   r"   test_rescale_in_range_clip   s    r   c                 C   sJ   t jdddg| d}tj|dd}|jt|jks6tt|dddg 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_rangeg     O@r~   N)r   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_maxrz   r!   r!   r"   test_rescale_named_in_range9  s    r   c                  C   s4   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   rz   r!   r!   r"   test_rescale_named_out_range?  s    r   c                  C   s4   t jdtgt jd} tj| dd}t|dtg d S )Nr   r   uint12r   )r   r   r   r   r   r   r   
uint12_maxrz   r!   r!   r"   test_rescale_uint12_limitsE  s    r   c                  C   s4   t jdtgt jd} tj| dd}t|dtg d S )Nr   r   Zuint14r   )r   r   r   r   r   r   r   
uint14_maxrz   r!   r!   r"   test_rescale_uint14_limitsK  s    r   c                  C   s<   t jdt jd} t| }t |  s.tt||  d S )NrP   rP   r   )	r   rQ   r9   r   r   isnanrj   r)   r   rz   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   rz   r!   r!   r"   test_rescale_constantX  s    r   c                  C   s6   t d} t| }t |  s(tt||  d S )Nr   )r   onesr   r   r   rj   r)   r   rz   r!   r!   r"   test_rescale_same_values^  s    

r   zin_range,out_range)rT   r   )r   rT   c              	   C   sf   t jdtddd}t j|d< d}d}| dkr:||g}n|g}t| t|| | W 5 Q R X d S )	N   r   rJ   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.cliprT   )r   r(   floatreshapenanr   r   r   )r   r   rT   msgZnumpy_warning_1_17_plusZexp_warnr!   r!   r"   test_rescale_nan_warninge  s    
	

r   zout_range, out_dtyper9   r   r   r   r   c                 C   s6   t jdddgt jd}tj|| d}|j|ks2td S )Nr;   r   r~   r   r   )r   r   r'   r   r   r   r)   )r   Z	out_dtyperT   output_imager!   r!   r"   test_rescale_output_dtype  s    
r   c                  C   sJ   t jdddgt jd} tj| t jd}t|dddg |jt jksFtd S )Nr;   r   r~   r   r   r<   rA   )	r   r   r'   r   r   r9   r   r   r)   rT   r   r!   r!   r"   test_rescale_no_overflow  s    r   c                  C   sF   t jdddgt jd} tj| dd}t|dddg |jtksBtd S )	Nr;   r   r~   r   r   r   r<   rA   )	r   r   r'   r   r   r   r   r   r)   r   r!   r!   r"   test_rescale_float_output  s    r   c               	   C   s>   t jdddgt jd} tt tj| dd}W 5 Q R X d S )Nr;   r   r~   r   Zflatr   )r   r   r'   r   r   r   r   r   )rT   _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sRt|jt| ksdt| tjkrrdnd}tt||d	| tt||d
d dS )z!Test a grayscale float image
    Frd   )9   r|   {Gz?r<   )kernel_size
clip_limitrG   rJ   rP   g)\Y@ghs?N)r	   rf   r   	astronautrg   r
   r   dstackr   equalize_adapthistr4   r)   r   r   float16r   peak_snrnorm_brightness_err)r   r_   adaptedZsnr_decimalr!   r!   r"   test_adapthist_grayscale  s     r   c               	   C   s   t t } tjdd.}td t| \}}t	|dksDt
W 5 Q R X tj| dd}| dkslt
| dks|t
| j|jkst
t| }tt||dd	 tt||d
d dS )z#Test an RGB color uint16 image
    T)recordalwaysr   r   r         ?x&Y[@r%   {Gz?rP   N)r	   Zimg_as_uintr   r   warningscatch_warningssimplefilterr   r   r.   r)   r   rL   rM   r4   r   r   r   r   )r_   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sTt| ddddddf } t	| }| j|jksttt||dd tt||dd dS )	zTest an RGBA color image
    r   r%   r   NrJ   r   rP   ga+e?)r	   rf   r   r   r   r   r4   r   r   r   r   r)   r   r   r   r   )r_   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st
|j|jkst
tt|||jd d   dk st
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   r0   g?)r   r   rP   r   N)r	   rf   r   r   r
   r   r   r4   r   r   r)   meanabs)r_   aZimg2dZimg3dZ	adapted2dZ	adapted3dr!   r!   r"   test_adapthist_grayscale_Nd  s(    
r   c                  C   s   t d} | d7 } | t j} t| d}t |t |ksBtt d} | d7 } | t j	} t| d}t |t |kstdS )z(Test constant image, float and uint
       r   rP   rJ   rs   N)
r   rQ   rg   r   r   r   rL   rM   r)   rx   )r_   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 ]h}tj| |d	d
}t	|dd|f | dd|f dkst
t	||ddf | |ddf dksJt
qJdS )zTest border processing
    g      Y@r   r   rP   r%   r   r|   G   rH   r   Nrs   )r
   r	   rf   r   r   r4   r3   r   r   r   r)   )r_   Z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	   rf   r   r   r   )Zimg_uZimg_fZ
img_clahe0Z
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
    rJ   r   rm   )ndimr
   re   r	   rf   sizer   Zsquaresumr   r   typelog)img1img2Zmser   Z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
    rJ   r%   )r   r
   r   r   r   r   r   r   )r   r   ZambeZnber!   r!   r"   r   B  s
    
r   c               	   C   s8   t jdtd} tjtdd t| d W 5 Q R X d S )Nr   r   z Incorrect value of `kernel_size`r   )rJ   rJ   rJ   )r   r   r   r   r   r   r   r   r_   r!   r!   r"   $test_adapthist_incorrect_kernel_sizeV  s    r   c                  C   s.   t ddg} t| d}| j|jks*tdS )"Check that the shape is maintainedr%   g      ?N)r   r   r   adjust_gammar4   r)   )r_   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   r7   r      r   r%   N)r   r(   r9   r   r   r   r   )rT   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sPt
dS )z6White image should be returned for gamma equal to zeror   rA   r   Frd   r%   N)r   randomuniformrg   r   r   r   r   r   r   r)   )r   rT   r   r!   r!   r"   test_adjust_gamma_zerom  s
    r   c                 C   sJ  t jddt jdd} t jdddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdKdLdMdNdOdPdQdRdSdTdUdUdVdWdXdYdZd[d[d\d]d^d_d`d`dadbdcdddddedfdgdhdhdidjdkdkdldmdndndodpdqdqdrdsdtdtdudvdwdwdxdydydzd{d{d|d}d~d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐg t jdd}t| dġ}t|| dS )z\Verifying the output with expected results for gamma
    correction with gamma equal to halfr   r7   r   r   r             $   '   *   -   0   2   5   7   :   <   >   @   B   D   F   r   I   K   M   N   P   Q   S   T   V   W   Y   rE   \   ]   ^   `   a   b   r   r$   r1   g   i   j   k   l   m   o   p   q   r   s   t   u   v   w   y   z   {   |   }   ~   r~   r<      r                        r=                                             r}                                                                                                                                                                                                                                 r>   r?                                                                              rA   rH   Nr   r(   r9   r   r   r   r   r   rT   rR   r   r!   r!   r"   test_adjust_gamma_less_onew  s                                                                                                                                                                                                                             r  c                 C   sJ  t jddt jdd} t jddddddddddddddddddddddddddddddddddd	d	d	d	d
d
d
dddddddddddddddddddddddddddddddddddddddddddd d d!d"d"d#d$d$d%d&d'd'd(d)d*d*d+d,d-d.d.d/d0d1d2d3d3d4d5d6d7d8d9d:d;d<d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐg t jdd}t| d}t|| dS )z[Verifying the output with expected results for gamma
    correction with gamma equal to twor   r7   r   r   r%   rP   rJ   r   r0         r   	   r-      r         r   r            rm         r               r            r   !   "   #   r   %   &   r   (   )   r   +   ,   r   .   /   r   1   r   r|   4   r   6   r   8   r   r   ;   r   =   r   ?   r   A   r   C   r   E   r   r   r   J   r   L   r   r  O   r  r  R   r  U   r  r  X   r  [   r	  r
  r  _   r  r  c   r   r1   r  h   r  r  r  r  r  r  r  r  r  r  r  x   r  r   r!  r#  r~   r<   r   r%  r'  r(  r*  r+  r,  r-  r/  r0  r2  r3  r5  r6  r8  r9  r:  r;  r=  r>  r@  rB  rC  rE  rF  rH  rJ  rK  rM  rO  rP  rR  rT  rU  rW  rY  rZ  r\  r^  r`  ra  rc  re  rg  rh  rj  rl  rn  ro  rq  rs  ru  rw  ry  rz  r|  r~  r  r  r>   r  r  r  r  r  r  r  r  r  r  r  r  r  rA   Nr  r  r!   r!   r"   test_adjust_gamma_greater_one  s   "                                                                                                                                                                                                                         r  c               	   C   s>   t dddt jd} tt t| d W 5 Q R X d S )Nr   rA   r   r   r   )	r   r(   r9   r   r   r   r   r   r   rT   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s2td S )NrA   r   r   r%   rl   )gammaZgain)r   r   r9   rj   r   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.t|j| ks<tdS )r   r%   r   N)r   r   r   
adjust_logr4   r)   r   r   r_   r   r!   r!   r"   test_adjust_log_1x1_shape  s    r  c                  C   s   t dddt jd} t jdddddd	d
dgddddddddgddddddddgddddd d!d"d#gd$d%d&d'd(d)d*d+gd,d-d.d/d0d1d2d3gd4d5d6d7d8d9d:d;gd<d=d>d?d@dAdBdCggt jdD}t| dE}t|| dFS )Gz|Verifying the output with expected results for logarithmic
    correction with multiplier constant multiplier equal to unityr   rA   r   r   r0   r  r   r  r  r  r  r  r   r   r   r  r   r   r   r  r  r  r  r   r  r  r  r  r  r"  r$  r'  r+  r.  r2  r6  r}   r=  r@  rD  rH  rL  rO  rS  rV  rZ  r]  ra  rd  rg  rk  rn  rq  ru  rx  r{  r~  r  r>   r  r  r  r  r  r  r  r  r   r%   Nr   r(   r9   r   r   r   r  r   r  r!   r!   r"   test_adjust_log  s    
r  c                  C   s   t dddt jd} t jdddddd	d
dgddddddddgddddddddgddddd d!d"d#gd$d%d&d'd(d)d*d+gd,d-d.d/d0d1d2d3gd4d5d6d7d8d9d:d;gd<d=d>d?d@dAdBdCggt jdD}t| dEdF}t|| dGS )HzVerifying the output with expected results for inverse logarithmic
    correction with multiplier constant multiplier equal to unityr   rA   r   r   rP   r0   r   r  r  r  rm   r   r  r  r   r  r  r  r   r   r|   r   r   r  r  r   H   r  r  r  r  rE   r  r  r1   r  n   r  r  r  r#  r   r(  r=   r0  r4  r8  r<  r@  rE  rJ  rN  rS  rX  r\  ra  rf  rk  rp  ru  rz  r  r?   r  r  r  r  r   r%   TNr  r  r!   r!   r"   test_adjust_inv_log  s    
r  c                 C   sB   t jddg| d}t|dd}|j|jks0t|j| ks>tdS )r   r%   r   r0   N)r   r   r   adjust_sigmoidr4   r)   r   r  r!   r!   r"   test_adjust_sigmoid_1x1_shape   s    r  c                  C   s   t dddt jd} t jddddddddgddddddddgdd	d	d
d
dddgddddddddgddddddddgdddd d!d"d#d$gd%d&d'd(d)d*d+d,gd-d.d/d0d1d2d3d4ggt jd5}t| dd}t|| d6S )7zlVerifying the output with expected results for sigmoid correction
    with cutoff equal to one and gain of 5r   rA   r   r   r%   rP   rJ   r0   r  r  r   r  r-   r  r   r  r  r   r   r  r  rm   r  r  r  r  r  r   r  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(   r9   r   r   r   r  r   r  r!   r!   r"   test_adjust_sigmoid_cutoff_one	  s    
r  c                  C   s   t dddt jd} t jddddd	d
ddgddddddddgddddddddgdddddd d d!gd!d!d!d!d"d"d"d"gd"d"d"d"d"d"d"d"gd"d"d"d"d"d"d"d"gd"d"d"d"d"d"d"d"g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   rA   r   r   r~   r+  r4  r<  rF  rO  rW  r_  rf  rm  rs  rx  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  s    
r  c                  C   s   t dddt jd} t jddddddddgdd	d
dddddgddddddddgddddddddgd d!d"d#d$d%d&d'gd(d)d*d+d,d-d.d/gd0d1d2d3d4d5d6d7gd8d9d9d:d:d;d;d<ggt jd=}t| d>d}t|| d?S )@znVerifying the output with expected results for sigmoid correction
    with cutoff equal to half and gain of 10r   rA   r   r   r%   rP   rJ   r0   r  r  r  r-   r   r  r   r  r  r  r  r  r   r  r   r   r   r  r  r  r  r  r  r<   r=   r5  r>  rG  rP  rX  r`  rg  rm  rs  ry  r}  r  r?   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rH   Nr  r  r!   r!   r"   test_adjust_sigmoid_cutoff_half-  s    
r  c                  C   s   t dddt jd} t jdddddddd	gd	d
ddddddgddddddddgdddddddd gd!d"d#d$d%d&d'd(gd)d*d+d,d-d.d/d0gd1d2d3d4d5d6d7d8gd9ddd:d:d;d;d<ggt jd=}t| d>d5d?}t|| d@S )AzvVerifying the output with expected results for inverse sigmoid
    correction with cutoff equal to half and gain of 10r   rA   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r?   r  r|  rw  rr  rl  re  r^  rV  rN  rE  r;  r3  r*  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   rJ   rP   r%   r   rH   TNr  r  r!   r!   r"   #test_adjust_inv_sigmoid_cutoff_half?  s    
r  c                  C   s   t ddd} t| std| d< t| s2ttj| ddrDt| d t j} t| sbttj| ddrtt| t jd } t| sttj| ddrtd S )	Nr   g{Gz?r   r%   r   )Zupper_percentilerA   r7   )r   rB   r   is_low_contrastr)   rg   r9   r   r  r!   r!   r"   test_is_low_contrastQ  s    r  c                  C   s:   t jdtd} t| std| d d< t| r6td S )Nr   r   r%   r0   )r   rQ   boolr   r  r)   r  r!   r!   r"   test_is_low_contrast_booleana  s    r  exposure_funcc              	   C   s>   t ddddt j}tt | | W 5 Q R X d S )Nr   r  r   r   )r   r(   r   rg   rx   r   r   r   )r  rT   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|\}}dddg}dddg}t||slt	t||s|t	t
|| jst	d S )	Ndask$dask python library is not installedreasonr   r%   rP   )r%   rP   )chunks)r   importorskip
dask.arrayr   Z
from_arrayr   r   r   Zallcloser)   
isinstanceArray)daZ
dask_arrayZoutput_histZoutput_binsZexpected_binsZexpected_histr!   r!   r"   test_dask_histogramx  s     

r  c                  C   sn   t jddd dd lm}  | jdddgtjd}t|}|jtjksJt	t
|dd	d
g t|| jsjt	d S )Nr  r  r  r   r|   r1   r}   r   r~   rA   )r   r  r  r   r   r9   r   r   r   r)   r   r  r  )r  rT   rq   r!   r!   r"   test_dask_rescale  s    
r  )ur   numpyr   r   Znumpy.testingr   r   r   r   r   Zskimager   r   r	   Zskimage.colorr
   Zskimage.exposure.exposurer   Zskimage.util.dtyper   Zskimage._shared._warningsr   Zskimage._shared.utilsr   markZparametrizer'   Zfloat32r#   r+   r,   r/   r6   r:   r@   rC   rD   r   rx   rI   rN   rS   r9   Zint16rX   r   seedcamerarZ   rf   r\   r   r[   rc   rh   rk   r^   rr   ry   r{   r   r   r   r   r   r   r   r   Z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  r  r  r!   r!   r!   r"   <module>   s  
			














	

 
	
	
	
	'#	


	