o
    jU                  	   @   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sJ d S )N)   r
      min_distancer   )npzerosr   peak_local_maxtypeZndarraysize)selfZtrivialZpeak_indices r   `/var/www/html/Deteccion_Ine/venv/lib/python3.10/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s+J |D ]
}t||v s7J q-d 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$      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,   r2   z(TestPeakLocalMax.test_absolute_thresholdc                 C   s4   t jddt jd}tj|dd}t|dksJ d S )N)r   r      r&   r   r   r   )r   fullr/   r   r   r   r0   r   r   r   test_constant_image4   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s!J d S )Nr%   r&   r'   r   r*   r      r   r   r/   r   r   r   r0   r   r   r   test_flat_peak9   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s%J t d
}d|d< tj|dd}| ddgddgdd	gddggksIJ d S )Nr%   r&   r   r(   r'   r)   r   r   r*   )r*   r'   )r      r*   r9   )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s*J tj|dddd}t|dks;J d|v sAJ d|v sGJ tj|dddd}t|dksXJ d|v s^J d|v sdJ d|v sjJ d
|v spJ d S )Nr   r&   r'   r(      r   r*      r   r      r*   r   r   r   r*   r   r   r3   r   r<   )r   r4   	num_peaksr9   )r   r   r/   r   r   r   r   r    peaks_limitedr   r   r   test_num_peaksK   s*   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s7J tj|dd|dd}t|dksIJ d S )Nr   r&   r   r'   r(   r?   r@   rA   rB   rC   rD   r   rE   r   r   )r   r4   labelsr   r<   )r   r4   rJ   rF   r:   )r   r    rJ   rH   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s:J tj||ddt jdd}t|dksNJ tj||ddd
d
d}t|d
ksaJ d S )Nr   r      r   r   r   rM   r   r'      r<   )rJ   r   r-   rF   Znum_peaks_per_labelrC   r9   )	r   r   seeduniformmgridr   r   infr   )r   r    ijrJ   resultr   r   r   'test_num_peaks_tot_vs_labels_4quadrantss   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s"J d S )N)r'   r'   d   r   r   r   r<   )r   rF   )r   r   Zaranger   r   r   rG   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 ]\}	}
tj||||	|
f |d||||	|
f< qLqF||k}t	j
||dd|dd}t j|td}d|t|j< ||k sJ d S )N(   <   rN   r   r[   r\   r   r   rM   r<   r   r9   	   )r   r   )r   r[   )r   rM   )rM   r\   	footprintFrJ   r   r-   rb   exclude_borderr&   Tr   r   rQ   rR   r   shapefloatndimaximum_filterr   r   
zeros_likeboolr   Tallr   r    rT   rU   rJ   rb   expectediminimaxjminjmaxpeak_idxrV   r   r   r   test_reorder_labels   s2   z$TestPeakLocalMax.test_reorder_labelsc                 C   sL  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 ]\}	}
tj||||	|
f |d||||	|
f< qFq@t j	t 
||kdd}|t |t|j d d d  }tj||dd|dd}|t |t|j d d d  }||k sJ d S )NrZ   rN   r   r[   r\   r   r   rM   r<   r]   r9   r^   r_   r`   ra   ZaxisFrc   )r   r   rQ   rR   r   rf   rg   rh   ri   stackZnonzeroZargsortr   rl   r   r   rm   )r   r    rT   rU   rJ   rb   ro   rp   rq   rr   rs   rV   r   r   r   test_indices_with_labels   s0   ""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   rd   Tr   Frd   )r   r   arrayintr   r   r   rj   rk   r   rl   Zastype)r   Znd_imagero   ZexpectedNoBorderrV   rt   r   r   r   test_ndarray_exclude_border   s,   
 

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s$J d S )Nr'   r   r)   r   r   FrJ   rb   r   r-   rd   )	r   r   r~   r   r   onesrk   rf   ndim)r   r    rJ   rV   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)rb   r   r-   rd   )r   r   r   r   r   rk   rf   r   )r   r    rV   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s;J d S )
Nr   r   r%   r)   r   Fr   r&   T)r   r   r~   r   r   r   rk   rj   r   rl   rm   )r   r    rJ   rt   rV   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      rv   rw   r)   r   Fr   
r   r   r~   rx   wherer   r   r   rk   r   r   r    rJ   ro   rV   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   rv   rw   r)   r   Fr   )rJ   r   r-   rd   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   rC   r   rv   rw   r)   Fr   r   r   r   r   r   test_not_adjacent_and_different8  s   

z0TestPeakLocalMax.test_not_adjacent_and_differentc                 C   z   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   rO   r<   r   rv   rw   r)   Fr   r   r   r   r   r   test_two_objectsI      

z!TestPeakLocalMax.test_two_objectsc                 C   r   )Nr   r   r%   r+   r   r<   r   rv   rw   r)   Fr   r   r   r   r   r   test_adjacent_different_objects[  r   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 ]\}	}
tj||||	|
f |d||||	|
f< qFq@||k}t	j
|||dddd}t j|td}d|t|j< t ||ksJ d S )NrL   rN   r   r   rM   r   r'   rO   r<   r]   r9   r^   ))r   r'   r   ))r   rO   )rO   rM   ra   Fr   r&   Tre   rn   r   r   r   test_four_quadrantsm  s0   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 |s3J tj||ddd
}t j|t	d}d	|t
|j< t |sQJ dS )zzregression test of img-1194, footprint = [1]
        Test peak.peak_local_max when every point is a local maximum
        r   rN   r   r   rv   F)rJ   rb   r   r-   r4   rd   r&   T)rb   r4   rd   N)r   r   rQ   r}   r   r   r   r~   rj   rk   r   rl   rm   )r   r    rb   rt   rV   r   r   r   	test_disk  s(   
	zTestPeakLocalMax.test_diskc                 C      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s@J ttj|ddd g dg dgksVJ d S )N)rM   rM   rM   r   )rO   rO   rO   rz   r'   r   r,   r   Fr   r-   rd   r   r   r   r   r   r   sortedr=   r   r    r   r   r   test_3D  s,   
zTestPeakLocalMax.test_3Dc                 C   r   )N)rM   rM   rM   rM   r   )rO   rO   rO   rO   )r   r   r   r   r'   r   r,   r   Fr   r   r   r   r   r   r   test_4D  s0   
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 ttj|dd|jd ks=J W d    d S 1 sHw   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sJ tj|ddd	}t|d
ks,J d
dg|v s4J ddg|v s<J d S )N)r'   r'   rv   )r<   r9   )r*   r   r*   r   r   r{   r<   r9   )r   r7   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   r5   r8   r;   r>   rI   rK   rW   rY   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	      s:    !r	   indicesc                 C   s   g | ]}|gqS r   r   ).0r   r   r   r   
<listcomp>  s    r   r   c                 C   s   t d}d|| < ttj|dddksJ ttj|dddks#J | d dv s/| d dv r2d}nd}ttj|ddd|ksBJ | d dv rKd}nd}ttj|d	d|ksZJ | d dv rcd}nd}ttj|d
d|ksrJ d S )Nr%   r   Fr|   r   )r   r9   Tr{   )r   r   )r   r   )r   r   r   r   r   )r   r    Zexpected_peaksr   r   r   test_exclude_border  s$   
r   c                  C   s<  t d} tt tj| ddsJ W d    n1 sw   Y  tt tj| dds2J W d    n1 s<w   Y  tt tj| ddsPJ W d    n1 sZw   Y  tt tj| ddsnJ W d    n1 sxw   Y  tt tj| ddsJ W d    d S 1 sw   Y  d S )Nr%   )r   r|   g      ?)r   a)r   rv   rv   )r   r   pytestZraises
ValueErrorr   r   	TypeError)r    r   r   r   test_exclude_border_errors  s    
"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 )
Nr6   )r6   r6   r   r'   r   r   rA      )rJ   )	r   r   r   r   r~   copyr   r   r   )ZimgrJ   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s5J t|d |d |d D ] \}}}||||
fv sOJ ||||fv sXJ ||||	fv saJ qAd S )	NrO   rO   )rA   rC   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outrT   xyr   r   r   test_isolated_peaks7  s   




"z&TestProminentPeaks.test_isolated_peaksc                 C   s0  t d}d\}}}d\}}}d\}}	}
||||f< ||||f< |
||	|f< tj|d d}t|d dks7J t|d |d |d	 D ]\}}}||||
fv sQJ ||||fv sZJ qCtj|d
d}t|d d	kslJ t|d |d |d	 D ]\}}}|||
fv sJ |||fv sJ |||	fv sJ qxd S )Nr   )rA   rC   r'   )r<   r<   rC   )r   r   r'   )	thresholdr   r*   r   r<   r^   r   r   r   r   r   test_thresholdF  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   )rC   rC   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_contactZ  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   rk   rm   )r   r    rJ   Zlabelsinr   r   r   test_input_labels_unmodifiedk  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sMJ d S )N  r&   )r   r   r   r'   Tr<   @   F)r   rd   rJ   iq  )
r   r   rk   r   rh   labelZdistance_transform_edtr   r   r   )
r   maskr   r   Zx_cZy_crJ   Znum_objsdistZ	local_maxr   r   r   test_many_objects{  s    
z$TestProminentPeaks.test_many_objectsN)r   r   r   r   r   r   r   r   r   r   r   r   r   6  s    r   )	itertoolsnumpyr   r   Znumpy.testingr   r   r   Zscipyr   rh   Zskimage._shared._warningsr   Zskimage.featurer   r   rP   r	   markZparametrizeproductranger   r   r   r   r   r   r   r   <module>   s(       V
&