a
    
dX                  	   @   s   d dl Z d dlZd dlZd dlmZmZmZ d dlm	Z
 d dlmZ d dlmZ ejd G dd dZejd	gd
d e ededD dd Zdd Zdd ZG dd dZdS )    N)assert_array_almost_equalassert_array_equalassert_equal)ndimage)expected_warnings)peak   c                   @   s   e Z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
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d#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9S ):TestPeakLocalMaxc                 C   s<   t d}tj|dd}t|t ju s*J |jdks8J d S )N)   r
      min_distancer   )npzerosr   peak_local_maxtypeZndarraysize)selfZtrivialZpeak_indices r   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/skimage/feature/tests/test_peak.pytest_trivial_case   s    
z"TestPeakLocalMax.test_trivial_casec                 C   st   g d}dt jdd }|D ]\}}d|||f< qtj|dd}t|t|ksVJ |D ]}t||v sZJ qZd S )N)   r   )r      )r   r   )r   r   g?   r      r   )r   randomrandr   r   lentuple)r   Zpeak_locationsimagercZpeaks_detectedlocr   r   r   test_noisy_peaks   s    z!TestPeakLocalMax.test_noisy_peaksc                 C   sP   t jdt jd}d|d< d|d< tj|ddd	}t|dks@J t|dg d S )
Nr   r   Zdtype
   r   r   r      r*   r         ?r   threshold_relr   r   uint8r   r   r   r   r   r    Zpeaksr   r   r   test_relative_threshold%   s    z(TestPeakLocalMax.test_relative_thresholdc                 C   sP   t jdt jd}d|d< d|d< tj|ddd}t|dks@J t|dg d S )	Nr%   r&   r'   r(   r   r)   r   r   threshold_absr.   r0   r   r   r   test_absolute_threshold-   s    z(TestPeakLocalMax.test_absolute_thresholdc                 C   s4   t jddt jd}tj|dd}t|dks0J d S )N)r   r      r&   r   r   r   )r   fullr/   r   r   r   r0   r   r   r   test_constant_image5   s    z$TestPeakLocalMax.test_constant_imagec                 C   sF   t jdt jd}d|ddddf< tj|dd}t|dksBJ d S )Nr%   r&   r'   r   r*   r      r   r   r/   r   r   r   r0   r   r   r   test_flat_peak:   s    zTestPeakLocalMax.test_flat_peakc                 C   s   t jdt jd}d|d< d|d< tj|dd}| ddgd	d	ggksJJ t d
}d|d< tj|dd}| ddgddgdd	gddggksJ d S )Nr%   r&   r   r(   r'   r)   r   r   r*   )r*   r'   )r      r*   r8   )r   )r   r*   r   r   r   r   )r   r   r/   r   r   tolistr0   r   r   r   test_sorted_peaks@   s    
z"TestPeakLocalMax.test_sorted_peaksc                 C   s   t jdt jd}d|d< d|d< d|d< d	|d
< d|d< ttj|ddddksTJ tj|dddd}t|dksvJ d|v sJ d|v sJ tj|dddd}t|dksJ d|v sJ d|v sJ d|v sJ d
|v sJ d S )Nr   r&   r'   r(      r   r*      r   r      r*   r   r   r   r*   r   r   r2   r   r;   )r   r3   	num_peaksr8   )r   r   r/   r   r   r   r   r    peaks_limitedr   r   r   test_num_peaksL   s2    
zTestPeakLocalMax.test_num_peaksc                 C   s   t jdt jd}t jdt jdd }d|d< d|d< d|d	< d
|d< d|d< tj|dd|d}t|dksnJ tj|dd|dd}t|dksJ d S )Nr   r&   r   r'   r(   r>   r?   r@   rA   rB   rC   r   rD   r   r   )r   r3   labelsr   r;   )r   r3   rI   rE   r9   )r   r    rI   rG   r   r   r   test_num_peaks_and_labelsb   s    
z*TestPeakLocalMax.test_num_peaks_and_labelsc                 C   s   t jd t jjdd}t jddddf \}}d|dk |d	kd
  }tj||ddt jd
d}t|dkstJ tj||ddt jdd}t|dksJ tj||ddd
d
d}t|d
ksJ d S )Nr   r      r   r   r   rL   r   r'      r;   )rI   r   r-   rE   Znum_peaks_per_labelrB   r8   )	r   r   seeduniformmgridr   r   infr   )r   r    ijrI   resultr   r   r   'test_num_peaks_tot_vs_labels_4quadrantsq   s,    z8TestPeakLocalMax.test_num_peaks_tot_vs_labels_4quadrantsc                 C   sH   t d}t d|ddd d df< tj|ddd}t|dksDJ d S )N)r'   r'   d   r   r   r   r;   )r   rE   )r   r   Zaranger   r   r   rF   r   r   r   test_num_peaks3D   s    
z!TestPeakLocalMax.test_num_peaks3Dc                 C   s"  t jjdd}t jddddf \}}d|dk |dkd	  }d
||dk< t jddddf \}}|| ||  dk}t |jt}dD ]D\}}dD ]6\}	}
tj||||	|
f |d||||	|
f< qq||k}t	j
||dd|dd}t j|td}d|t|j< ||k sJ d S )N(   <   rM   r   rZ   r[   r   r   rL   r;   r   r8   	   )r   r   )r   rZ   )r   rL   )rL   r[   	footprintFrI   r   r-   ra   exclude_borderr&   Tr   r   rP   rQ   r   shapefloatndimaximum_filterr   r   
zeros_likeboolr   Tallr   r    rS   rT   rI   ra   expectediminimaxjminjmaxpeak_idxrU   r   r   r   test_reorder_labels   s(    
z$TestPeakLocalMax.test_reorder_labelsc                 C   sN  t jjdd}t jddddf \}}d|dk |dkd	  }t jd
dd
df \}}|| ||  dk}t |jt}dD ]D\}}dD ]6\}	}
tj||||	|
f |d||||	|
f< qqt j	t 
||kdd}|t |t|j d d d  }tj||dd|dd}|t |t|j d d d  }||k sJJ d S )NrY   rM   r   rZ   r[   r   r   rL   r;   r\   r8   r]   r^   r_   r`   ZaxisFrb   )r   r   rP   rQ   r   re   rf   rg   rh   stackZnonzeroZargsortr   rk   r   r   rl   )r   r    rS   rT   rI   ra   rn   ro   rp   rq   rr   rU   r   r   r   test_indices_with_labels   s&    "
"z)TestPeakLocalMax.test_indices_with_labelsc                 C   s  t d}d|g dg dg df< d|d< d|d< t jg dgtd}t jg dg dg dgtd}tj|d	d	d
}t|| ttj|d	d	d
tj|d	dd
 ttj|d	dd
tj|d	dd
 tj|d	dd
}t|| tj|dd}t j|td}d|t	|j
< t||t d S )Nr   r   r   r   )r   r   r   )r   r   r   )r   r   r   )r*   r   r   )r;   r;   r;   r&   r;   r   rc   Tr   Frc   )r   r   arrayintr   r   r   ri   rj   r   rk   Zastype)r   Znd_imagern   ZexpectedNoBorderrU   rs   r   r   r   test_ndarray_exclude_border   s8    


z,TestPeakLocalMax.test_ndarray_exclude_borderc                 C   sL   t d}t dt}tj||t dtdddd}|jd|jfksHJ d S )Nr'   r   r)   r   r   FrI   ra   r   r-   rc   )	r   r   r}   r   r   onesrj   re   ndim)r   r    rI   rU   r   r   r   
test_empty   s    

zTestPeakLocalMax.test_emptyc                 C   s>   t d}tj|t dtdddd}|jd|jfks:J d S )N)r'   r'   r'   )r*   r*   r*   r   r   F)ra   r   r-   rc   )r   r   r   r   r   rj   re   r   )r   r    rU   r   r   r   test_empty_non2d_indices   s    

z)TestPeakLocalMax.test_empty_non2d_indicesc                 C   sz   t d}t dt}d|d< d|d< tj||t dtdddd}t j|td}d	|t|j	< t 
||dkksvJ d S )
Nr   r   r%   r)   r   Fr   r&   T)r   r   r}   r   r   r   rj   ri   r   rk   rl   )r   r    rI   rs   rU   r   r   r   test_one_point   s    

zTestPeakLocalMax.test_one_pointc                 C   sz   t d}t dt}d|dddf< d|dddf< t jt |dkdd}tj||t dtddd	d
}t	|| d S )Nr   r   r      ru   rv   r)   r   Fr   
r   r   r}   rw   wherer   r   r   rj   r   r   r    rI   rn   rU   r   r   r   test_adjacent_and_same   s    

z'TestPeakLocalMax.test_adjacent_and_samec                 C   s   t d}t dt}d|d< d|d< d|dddf< t jt |dkdd	}tj||t d
tdddd}t	|| tj||dddd}t	|| d S )Nr   r   r%   r+   r   r   r   r   ru   rv   r)   r   Fr   )rI   r   r-   rc   r   r   r   r   r   test_adjacent_and_different   s"    


z,TestPeakLocalMax.test_adjacent_and_differentc                 C   sv   t d}t dt}d|d< d|d< d||dk< t jt |dkdd}tj||t d	tddd
d}t	|| d S )Nr   r   r%   r+   )r   rB   r   ru   rv   r)   Fr   r   r   r   r   r   test_not_adjacent_and_different  s    

z0TestPeakLocalMax.test_not_adjacent_and_differentc                 C   sz   t d}t dt}d|d< d|d< d|d< d|d< t jt |dkdd	}tj||t d
tdddd}t	|| d S )Nr   r   r%   r+   )r   rN   r;   r   ru   rv   r)   Fr   r   r   r   r   r   test_two_objects  s    

z!TestPeakLocalMax.test_two_objectsc                 C   sz   t d}t dt}d|d< d|d< d|d< d|d< t jt |dkdd	}tj||t d
tdddd}t	|| d S )Nr   r   r%   r+   r   r;   r   ru   rv   r)   Fr   r   r   r   r   r   test_adjacent_different_objects)  s    

z0TestPeakLocalMax.test_adjacent_different_objectsc                 C   s  t jjdd}t jddddf \}}d|dk |dkd	  }t jd
dd
df \}}|| ||  dk}t |jt}dD ]D\}}dD ]6\}	}
tj||||	|
f |d||||	|
f< qq||k}t	j
|||dddd}t j|td}d|t|j< t ||ksJ d S )NrK   rM   r   r   rL   r   r'   rN   r;   r\   r8   r]   ))r   r'   r   ))r   rN   )rN   rL   r`   Fr   r&   Trd   rm   r   r   r   test_four_quadrants7  s*    z$TestPeakLocalMax.test_four_quadrantsc              	   C   s   t jjdd}t dgg}tj|t dt|ddddd}t j|t	d}d	|t
|j< t |sfJ tj||ddd
}t j|t	d}d	|t
|j< t |sJ dS )zzregression test of img-1194, footprint = [1]
        Test peak.peak_local_max when every point is a local maximum
        r   rM   r   r   ru   F)rI   ra   r   r-   r3   rc   r&   T)ra   r3   rc   N)r   r   rP   r|   r   r   r   r}   ri   rj   r   rk   rl   )r   r    ra   rs   rU   r   r   r   	test_diskL  s$    zTestPeakLocalMax.test_diskc                 C   s   t d}d|d< d|d< ttj|dddg dg ttj|dddg dg ttj|ddd	d
 g dg dgksJ ttj|ddd g dg dgksJ d S )N)rL   rL   rL   r   )rN   rN   rN   ry   r'   r   r,   r   Fr   r-   rc   r   r   r   r   r   r   sortedr<   r   r    r   r   r   test_3Da  s.    



zTestPeakLocalMax.test_3Dc                 C   s   t d}d|d< d|d< ttj|dddg dg ttj|dddg dg ttj|ddd	d
 g dg dgksJ ttj|ddd g dg dgksJ d S )N)rL   rL   rL   rL   r   )rN   rN   rN   rN   )r   r   r   r   r'   r   r,   r   Fr   r   r   r   r   r   r   test_4Ds  s.    



zTestPeakLocalMax.test_4Dc                 C   s   t d}d|d< tt|dks(J d|d< tt|ddgg d|d< tdg0 ttj|dd|jd kszJ W d    n1 s0    Y  d S )Nr%   r   )r;   r;   r   r;   zWhen min_distance < 1r   )r   r   r   r   r   r   r   r   r   r   r   r   test_threshold_rel_default  s    
z+TestPeakLocalMax.test_threshold_rel_defaultc                 C   s|   t dd}d|d< d|d< tj|dd}|jdks8J tj|ddd	}t|d
ksXJ d
dg|v shJ ddg|v sxJ d S )N)r'   r'   ru   )r;   r8   )r*   r   r*   r   r   rz   r;   r8   )r   r6   r   r   r   r   r0   r   r   r   test_peak_at_border  s    z$TestPeakLocalMax.test_peak_at_borderN)__name__
__module____qualname__r   r$   r1   r4   r7   r:   r=   rH   rJ   rV   rX   rt   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	      s8   	r	   indicesc                 C   s   g | ]
}|gqS r   r   ).0r   r   r   r   
<listcomp>      r   r   c                 C   s   t d}d|| < ttj|dddks,J ttj|dddksFJ | d dv s^| d dv rdd}nd}ttj|ddd|ksJ | d dv rd}nd}ttj|d	d|ksJ | d dv rd}nd}ttj|d
d|ksJ d S )Nr%   r   Fr{   r   )r   r8   Trz   )r   r   )r   r   )r   r   r   r   r   )r   r    Zexpected_peaksr   r   r   test_exclude_border  s8    
r   c                  C   s>  t d} tt" tj| dds(J W d    n1 s<0    Y  tt" tj| ddsdJ W d    n1 sx0    Y  tt" tj| ddsJ W d    n1 s0    Y  tt" tj| ddsJ W d    n1 s0    Y  tt$ tj| ddsJ W d    n1 s00    Y  d S )Nr%   )r   r{   g      ?)r   a)r   ru   ru   )r   r   pytestZraises
ValueErrorr   r   	TypeError)r    r   r   r   test_exclude_border_errors  s    
0000r   c                  C   sf   t jdd} t dt}d|ddddf< d|ddddf< |  }tj| |d	}t| | d S )
Nr5   )r5   r5   r   r'   r   r   r@      )rI   )	r   r   r   r   r}   copyr   r   r   )imgrI   Z
img_before_r   r   r   test_input_values_with_labels  s    r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestProminentPeaksc                 C   s   t d}d\}}}d\}}}d\}}	}
||||f< ||||f< |
||	|f< t|}t|d dksjJ t|d |d |d D ]@\}}}||||
fv sJ ||||fv sJ ||||	fv sJ qd S )	NrN   rN   )r@   rB   r   )r;   r;   r   )r   r   r   r   r*   r   r;   r   r   r   _prominent_peaksr   zipr   r    x0y0i0x1y1i1x2y2i2outrS   xyr   r   r   test_isolated_peaks  s    




"z&TestProminentPeaks.test_isolated_peaksc                 C   s4  t d}d\}}}d\}}}d\}}	}
||||f< ||||f< |
||	|f< tj|d d}t|d dksnJ t|d |d |d	 D ].\}}}||||
fv sJ ||||fv sJ qtj|d
d}t|d d	ksJ t|d |d |d	 D ]>\}}}|||
fv sJ |||fv sJ |||	fv sJ qd S )Nr   )r@   rB   r'   )r;   r;   rB   )r   r   r'   )	thresholdr   r*   r   r;   r]   r   r   r   r   r   test_threshold  s$    



""z!TestProminentPeaks.test_thresholdc                 C   s   t d}d\}}}d\}}}d\}}	}
||||f< ||||f< |
||	|f< tj|ddd}t|d t |f t|d t |f t|d	 t |f d S )
Nr   )rB   rB   r   )r   r   r   )r   r   r   r*   )Zmin_xdistanceZmin_ydistancer   r   r;   )r   r   r   r   r   r|   )r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   test_peaks_in_contact  s    



z(TestProminentPeaks.test_peaks_in_contactc                 C   sb   t d}t dt}d|d< d|d< | }tj||t dtdddd t ||ks^J d S )	Nr   r   r%   r*   r)   r   Fr   )	r   r   r}   r   r   r   r   rj   rl   )r   r    rI   Zlabelsinr   r   r   test_input_labels_unmodified'  s    

z/TestProminentPeaks.test_input_labels_unmodifiedc           
      C   s   t jddgtd}t d\}}|d d d }|d d d }d||| d || d  dk < t|\}}t|}tj|dd	|d
}	t	|	dksJ d S )N  r&   )r   r   r   r'   Tr;   @   F)r   rc   rI   iq  )
r   r   rj   r   rg   labelZdistance_transform_edtr   r   r   )
r   maskr   r   Zx_cZy_crI   Znum_objsdistZ	local_maxr   r   r   test_many_objects3  s     
z$TestProminentPeaks.test_many_objectsN)r   r   r   r   r   r   r   r   r   r   r   r   r     s
   r   )	itertoolsnumpyr   r   Znumpy.testingr   r   r   Zscipyr   rg   Zskimage._shared._warningsr   Zskimage.featurer   r   rO   r	   markZparametrizeproductranger   r   r   r   r   r   r   r   <module>   s&      
&