
    |hU              	       f   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                  j!                  d        G d d      Zej$                  j'                  d	g e j(                   ed
       ed
            D  cg c]  } | g c}       d        Zd Zd Z G d d      Zyc c} w )    N)assert_array_almost_equalassert_array_equalassert_equal)ndimage)expected_warnings)peak   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestPeakLocalMaxc                     t        j                  d      }t        j                  |d      }t	        |      t         j
                  u sJ |j                  dk(  sJ y )N)   r      min_distancer   )npzerosr   peak_local_maxtypendarraysize)selftrivialpeak_indicess      ^/var/www/html/test/engine/venv/lib/python3.12/site-packages/skimage/feature/tests/test_peak.pytest_trivial_casez"TestPeakLocalMax.test_trivial_case   sM    ((8$**7CL!RZZ///  A%%%    c                     g d}dt         j                  j                  dd      z  }|D ]  \  }}d|||f<    t        j                  |d      }t        |      t        |      k(  sJ |D ]  }t        |      |v rJ  y )N)   r   )r      )r    r   )r    r    g?   r      r   )r   randomrandr   r   lentuple)r   peak_locationsimagercpeaks_detectedlocs          r   test_noisy_peaksz!TestPeakLocalMax.test_noisy_peaks   s    = biinnR,," 	DAqE!Q$K	 ,,UC>"c.&9999! 	0C:///	0r   c                     t        j                  dt         j                        }d|d<   d|d<   t        j                  |dd	      }t        |      dk(  sJ t        |dg       y )
Nr"   r"   dtype
   r   r   r!      r5   r         ?r   threshold_relr   r   uint8r   r   r%   r   r   r(   peakss      r   test_relative_thresholdz(TestPeakLocalMax.test_relative_threshold$   sX    rxx0dd##EM5zQ!%&2r   c                     t        j                  dt         j                        }d|d<   d|d<   t        j                  |dd      }t        |      dk(  sJ t        |dg       y )	Nr/   r0   r2   r3   r!   r4   r   r   threshold_absr9   r;   s      r   test_absolute_thresholdz(TestPeakLocalMax.test_absolute_threshold,   sX    rxx0dd##EL5zQ!%&2r   c                     t        j                  ddt         j                        }t        j                  |d      }t        |      dk(  sJ y )N)r!   r!      r0   r   r   r   )r   fullr:   r   r   r%   r;   s      r   test_constant_imagez$TestPeakLocalMax.test_constant_image4   s:    #RXX6##E:5zQr   c                     t        j                  dt         j                        }d|ddddf<   t        j                  |d      }t        |      dk(  sJ y )Nr/   r0   r2   r   r5   r      r   r   r:   r   r   r%   r;   s      r   test_flat_peakzTestPeakLocalMax.test_flat_peak9   sM    rxx0ac1Q3h##E:5zQr   c                 j   t        j                  dt         j                        }d|d<   d|d<   t        j                  |d      }|j                         ddgd	d	ggk(  sJ t        j                  d
      }d|d<   t        j                  |d      }|j                         ddgddgdd	gddggk(  sJ y )Nr/   r0   r!   r3   r2   r4   r   r   r5   )r5   r2   )r      r5   rG   )r   )r   r5   r"   r   r   r"   )r   r   r:   r   r   tolistr;   s      r   test_sorted_peaksz"TestPeakLocalMax.test_sorted_peaks?   s    rxx0dd##E:||~1a&1a&!1111!!-o##E:||~1a&1a&1a&1a&!AAAAr   c                    t        j                  dt         j                        }d|d<   d|d<   d|d<   d	|d
<   d|d<   t        t	        j
                  |dd            dk(  sJ t	        j
                  |ddd      }t        |      dk(  sJ d|v sJ d|v sJ t	        j
                  |ddd      }t        |      dk(  sJ d|v sJ d|v sJ d|v sJ d
|v sJ y )Nr   r0   r2   r3      r   r5      r   r"      r5   r"   r   r"   r5   r   r   r?   r"   rK   )r   r@   	num_peaksrG   )r   r   r:   r%   r   r   r   r(   peaks_limiteds      r   test_num_peakszTestPeakLocalMax.test_num_peaksK   s   rxx0ddddd4&&u1ANOSTTTT++a
 =!Q&&&&&&&&&++a
 =!Q&&&&&&&&&&&&&&&r   c                 v   t        j                  dt         j                        }t        j                  dt         j                        dz   }d|d<   d|d<   d|d	<   d
|d<   d|d<   t        j                  |dd|      }t        |      dk(  sJ t        j                  |dd|d      }t        |      dk(  sJ y )Nr   r0   r!   r2   r3   rO   rP   rQ   rR   rS   rT   r   rU   r   r   )r   r@   labelsr"   rK   )r   r@   r[   rV   rH   )r   r(   r[   rX   s       r   test_num_peaks_and_labelsz*TestPeakLocalMax.test_num_peaks_and_labelsb   s    rxx0&1B6ddddd++6
 =!Q&&&++6Q
 =!Q&&&r   c                    t         j                  j                  d       t         j                  j                  d      }t         j                  ddddf   \  }}d|dk\  z   |d	k\  d
z  z   }t        j                  ||ddt         j                  d
      }t        |      dk(  sJ t        j                  ||ddt         j                  d      }t        |      dk(  sJ t        j                  ||ddd
d
      }t        |      d
k(  sJ y )Nr	   r!      r   r   r!   r_   r   r2      rK   )r[   r   r8   rV   num_peaks_per_labelrS   rG   )	r   r#   seeduniformmgridr   r   infr%   )r   r(   ijr[   results         r   'test_num_peaks_tot_vs_labels_4quadrantsz8TestPeakLocalMax.test_num_peaks_tot_vs_labels_4quadrantss   s   
		r		!!x!0xx"ad
#1a2g!r'Q.$$ff !
 6{a$$ff !
 6{a$$ !
 6{ar   c                     t        j                  d      }t        j                  d      |ddd d df<   t        j                  |dd      }t        |      dk(  sJ y )N)r2   r2   d   r!   r"   r   rK   )r   rV   )r   r   aranger   r   r%   rW   s      r   test_num_peaks3Dz!TestPeakLocalMax.test_num_peaks3D   sU     '99R=aCaCi++EQO=!Q&&&r   c                    t         j                  j                  d      }t         j                  ddddf   \  }}d|dk\  z   |dk\  d	z  z   }d
||dk(  <   t         j                  ddddf   \  }}||z  ||z  z   dk  }t        j                  |j
                  t              }dD ]8  \  }}dD ].  \  }	}
t        j                  ||||	|
f   |      ||||	|
f<   0 : ||k(  }t        j                  ||dd|d      }t        j                  |t              }d|t        |j                        <   ||k(  j                         sJ y )N(   <   r`   r   rq   rr   r   r!   r_   rK   r"   rG   	   )r   r!   )r!   rq   )r   r_   )r_   rr   	footprintFr[   r   r8   rx   exclude_borderr0   Tr   r#   rd   re   r   shapefloatndimaximum_filterr   r   
zeros_likeboolr&   Tallr   r(   rg   rh   r[   rx   expectediminimaxjminjmaxpeak_idxri   s                r   test_reorder_labelsz$TestPeakLocalMax.test_reorder_labels   sp   		!!x!0xx"ad
#1a2g!r'Q.v{xx1bd
#1EAEMQ&	88EKK/- 	JD$1 
d141C1C$t)T$Y./92dDI-.	
 u$&& 
 xt4$(uXZZ !("'')))r   c                 >   t         j                  j                  d      }t         j                  ddddf   \  }}d|dk\  z   |dk\  d	z  z   }t         j                  d
dd
df   \  }}||z  ||z  z   dk  }t        j                  |j
                  t              }dD ]8  \  }}dD ].  \  }	}
t        j                  ||||	|
f   |      ||||	|
f<   0 : t        j                  t        j                  ||k(        d      }|t        j                  |t        |j                                 d d d      }t        j                  ||dd|d      }|t        j                  |t        |j                                 d d d      }||k(  j!                         sJ y )Nrp   r`   r   rq   rr   r   r!   r_   rK   rs   rG   rt   ru   rv   rw   axisFry   )r   r#   rd   re   r   r|   r}   r~   r   stacknonzeroargsortr&   r   r   r   r   )r   r(   rg   rh   r[   rx   r   r   r   r   r   ri   s               r   test_indices_with_labelsz)TestPeakLocalMax.test_indices_with_labels   s   		!!x!0xx"ad
#1a2g!r'Q.xx1bd
#1EAEMQ&	88EKK/- 	JD$1 
d141C1C$t)T$Y./92dDI-.	
 88BJJx5'89CBJJuU8::->'?@2FG$$ 
 

5vxx#9:4R4@A("'')))r   c                 $   t        j                  d      }d|g dg dg df<   d|d<   d|d<   t        j                  g dgt              }t        j                  g dg dg dgt              }t	        j
                  |d	d	
      }t        ||       t        t	        j
                  |d	d	
      t	        j
                  |d	d
             t        t	        j
                  |d	d
      t	        j
                  |d	d
             t	        j
                  |d	d
      }t        ||       t	        j
                  |d      }t        j                  |t              }d|t        |j                        <   t        ||j                  t                     y )Nr"   r"   r"   r   )r   r   r   )r   r   r   )r   r   r   )r5   r   r   )rK   rK   rK   r0   rK   r   rz   Tr   Frz   )r   r   arrayintr   r   r   r   r   r&   r   astype)r   nd_imager   expectedNoBorderri   r   s         r   test_ndarray_exclude_borderz,TestPeakLocalMax.test_ndarray_exclude_border   s@   88I&45Iy0188YKs388Y	9$ESQ$$XAaP68,qKqN	
 	qKqO	
 $$XAaP6#34&&xFxt4$(uXZZ !68??4#89r   c                    t        j                  d      }t        j                  dt              }t        j                  ||t        j
                  dt              ddd      }|j                  d|j                  fk(  sJ y )Nr2   r!   r4   r   r   Fr[   rx   r   r8   rz   )	r   r   r   r   r   onesr   r|   ndim)r   r(   r[   ri   s       r   
test_emptyzTestPeakLocalMax.test_empty   si    "(C($$ggfd+ 
 ||5::...r   c                     t        j                  d      }t        j                  |t        j                  dt
              ddd      }|j                  d|j                  fk(  sJ y )N)r2   r2   r2   )r5   r5   r5   r   r   F)rx   r   r8   rz   )r   r   r   r   r   r   r|   r   )r   r(   ri   s      r   test_empty_non2d_indicesz)TestPeakLocalMax.test_empty_non2d_indices   sV    &$$ggi. 
 ||5::...r   c                 |   t        j                  d      }t        j                  dt              }d|d<   d|d<   t        j                  ||t        j
                  dt              ddd      }t        j                  |t              }d	|t        |j                        <   t        j                  ||dk(  k(        sJ y )
Nr   r   r/   r4   r   Fr   r0   T)r   r   r   r   r   r   r   r   r&   r   r   )r   r(   r[   r   ri   s        r   test_one_pointzTestPeakLocalMax.test_one_point  s    "(C(dt&&ggfd+ 
 uD1$(uXZZ !vvf1-...r   c                 ^   t        j                  d      }t        j                  dt              }d|dddf<   d|dddf<   t        j                  t        j                  |dk(        d      }t        j                  ||t        j                  dt              ddd	
      }t        ||       y )Nr   r   r"      r   r   r4   r   Fr   
r   r   r   r   wherer   r   r   r   r   r   r(   r[   r   ri   s        r   test_adjacent_and_samez'TestPeakLocalMax.test_adjacent_and_same  s    "(C(a1fq!A#v88BHHVq[1;$$ggfd+ 
 	68,r   c                    t        j                  d      }t        j                  dt              }d|d<   d|d<   d|dddf<   t        j                  t        j                  |dk(        d	      }t        j                  ||t        j                  d
t              ddd      }t        ||       t        j                  ||ddd      }t        ||       y )Nr   r   r/   r6   r"   r   r"   r   r   r   r4   r   Fr   )r[   r   r8   rz   r   r   s        r   test_adjacent_and_differentz,TestPeakLocalMax.test_adjacent_and_different#  s    "(C(ddq!A#v88BHHUaZ0r:$$ggfd+ 
 	68,$$&qRW
 	68,r   c                 ^   t        j                  d      }t        j                  dt              }d|d<   d|d<   d||dkD  <   t        j                  t        j                  |dk(        d      }t        j                  ||t        j                  d	t              ddd
      }t        ||       y )Nr   r   r/   r6   )r"   rS   r   r   r   r4   Fr   r   r   s        r   test_not_adjacent_and_differentz0TestPeakLocalMax.test_not_adjacent_and_different8  s    "(C(dduqy88BHHVq[1;$$ggfd+ 
 	68,r   c                 b   t        j                  d      }t        j                  dt              }d|d<   d|d<   d|d<   d|d<   t        j                  t        j                  |dkD        d	      }t        j                  ||t        j                  d
t              ddd      }t        ||       y )Nr   r   r/   r6   )r"   ra   rK   r   r   r   r4   Fr   r   r   s        r   test_two_objectsz!TestPeakLocalMax.test_two_objectsI  s    "(C(detu88BHHVaZ0r:$$ggfd+ 
 	68,r   c                 b   t        j                  d      }t        j                  dt              }d|d<   d|d<   d|d<   d|d<   t        j                  t        j                  |dkD        d	      }t        j                  ||t        j                  d
t              ddd      }t        ||       y )Nr   r   r/   r6   r   rK   r   r   r   r4   Fr   r   r   s        r   test_adjacent_different_objectsz0TestPeakLocalMax.test_adjacent_different_objects[  s    "(C(ddtt88BHHVaZ0r:$$ggfd+ 
 	68,r   c                    t         j                  j                  d      }t         j                  ddddf   \  }}d|dk\  z   |dk\  d	z  z   }t         j                  d
dd
df   \  }}||z  ||z  z   dk  }t        j                  |j
                  t              }dD ]8  \  }}dD ].  \  }	}
t        j                  ||||	|
f   |      ||||	|
f<   0 : ||k(  }t        j                  |||ddd      }t        j                  |t              }d|t        |j                        <   t        j                  ||k(        sJ y )Nr^   r`   r   r!   r_   r   r2   ra   rK   rs   rG   rt   ))r   r2   r   ))r   ra   )ra   r_   rw   Fr   r0   Tr{   r   s                r   test_four_quadrantsz$TestPeakLocalMax.test_four_quadrantsm  sb   		!!x!0xx"ad
#1a2g!r'Q.xx1bd
#1EAEMQ&	88EKK/- 	JD$1 
d141C1C$t)T$Y./92dDI-.	
 u$&& 
 uD1$(uXZZ !vvf()))r   c           	      4   t         j                  j                  d      }t        j                  dgg      }t	        j
                  |t        j                  dt              |dddd      }t        j                  |t              }d	|t        |j                        <   t        j                  |      sJ t	        j
                  ||dd
      }t        j                  |t              }d	|t        |j                        <   t        j                  |      sJ y)zzregression test of img-1194, footprint = [1]
        Test peak.peak_local_max when every point is a local maximum
        r   r`   r   r   r   F)r[   rx   r   r8   r@   rz   r0   T)rx   r@   rz   N)r   r#   rd   r   r   r   r   r   r   r   r&   r   r   )r   r(   rx   r   ri   s        r   	test_diskzTestPeakLocalMax.test_disk  s     		!!x!0HHqcUO	&&778S) 
 uD1$(uXZZ !vvf~~&&Yb
 uD1$(uXZZ !vvf~~r   c                    t        j                  d      }d|d<   d|d<   t        t        j                  |dd      g dg       t        t        j                  |dd      g dg       t        t        j                  |ddd	
      j                               g dg dgk(  sJ t        t        j                  |dd      j                               g dg dgk(  sJ y )N)r_   r_   r_   r   )ra   ra   ra   r   r2   r   r7   r   Fr   r8   rz   r"   r   r   r   r   r   sortedrL   r   r(   s     r   test_3DzTestPeakLocalMax.test_3D  s    &jgBaH<.	
 	AQG,	
 Bafh
 &	' 	' '
 AQGNNP
&' 	' 'r   c                    t        j                  d      }d|d<   d|d<   t        t        j                  |dd      g dg       t        t        j                  |dd      g dg       t        t        j                  |ddd	
      j                               g dg dgk(  sJ t        t        j                  |dd      j                               g dg dgk(  sJ y )N)r_   r_   r_   r_   r   )ra   ra   ra   ra   )r"   r"   r"   r"   r2   r   r7   r   Fr   r"   r   r   s     r   test_4DzTestPeakLocalMax.test_4D  s    )* !njBaH	
 	AQG	
 Bafh
 ,-	. 	. .
 AQGNNP
,-. 	. .r   c                 ~   t        j                  d      }d|d<   t        t        j                  |            dk(  sJ d|d<   t        t        j                  |      ddgg       d|d<   t        dg      5  t        t        j                  |d            |j                  dz
  k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr/   r   )rK   rK   r   rK   zWhen min_distance < 1r   )r   r   r%   r   r   r   r   r   r   s     r   test_threshold_rel_defaultz+TestPeakLocalMax.test_threshold_rel_default  s    d4&&u-.!333d4..u5Ax@d 789 	Ut**5qABejjSTnTTT	U 	U 	Us   63B33B<c                    t        j                  dd      }d|d<   d|d<   t        j                  |d      }|j                  dk(  sJ t        j                  |dd	      }t        |      d
k(  sJ d
dg|v sJ ddg|v sJ y )N)r2   r2   r   )rK   rG   )r5   r   r5   r   r   r   rK   rG   )r   rD   r   r   r   r%   r;   s      r   test_peak_at_borderz$TestPeakLocalMax.test_peak_at_border  s    "%dd##E:zzQ##E!L5zQ1v1vr   N)__name__
__module____qualname__r   r-   r=   rA   rE   rI   rM   rY   r\   rj   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r      s    &033

B'.'" B'*4*2:6/	//"- -*-"-$-$*22'&.*Ur   r   indicesr"   c                    t        j                  d      }d|| <   t        t        j                  |d            dk(  sJ t        t        j                  |d            dk(  sJ | d   dv s| d   dv rd}nd}t        t        j                  |dd            |k(  sJ | d   dv rd}nd}t        t        j                  |d	            |k(  sJ | d   dv rd}nd}t        t        j                  |d
            |k(  sJ y )Nr/   r   Fr   r   )r   rG   Tr   )r   r   )r   r   )r   r   r%   r   r   )r   r(   expected_peakss      r   test_exclude_borderr     s   
 HHVEE'N t""5?@AEEE t""5;<AAA qzVwqzV3DAdKL		 qzVt""5@A^SSS qzVt""5@A^SSSr   c                     t        j                  d      } t        j                  t              5  t        j                  | d      sJ 	 d d d        t        j                  t              5  t        j                  | d      sJ 	 d d d        t        j                  t              5  t        j                  | d      sJ 	 d d d        t        j                  t              5  t        j                  | d      sJ 	 d d d        t        j                  t              5  t        j                  | d      sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   jxY w# 1 sw Y   y xY w)Nr/   )r   r   g      ?)r   a)r   r   r   )r   r   pytestraises
ValueErrorr   r   	TypeError)r(   s    r   test_exclude_border_errorsr     s:   HHVE 
z	" ?""5>>>? 
y	! >""5===>
 
z	" C""5BBBC
 
z	" B""5AAAB 
z	" =""5<<<= =%? ?> >
C C
B B= =s;   E+E'E#E'E3EEE$'E03E<c                  
   t         j                  j                  dd      } t        j                  dt              }d|ddddf<   d|ddddf<   | j                         }t        j                  | |	      }t        | |       y )
NrC   )rC   rC   r   r2   r!   r   rQ      )r[   )	r   r#   r$   r   r   copyr   r   r   )imgr[   
img_before_s       r   test_input_values_with_labelsr   &  s{     ))..c
"CXXj#&FF2b5"R%<F2b5"R%<JC/AsJ'r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestProminentPeaksc                 @   t        j                  d      }d\  }}}d\  }}}d\  }}	}
||||f<   ||||f<   |
||	|f<   t        j                  |      }t	        |d         dk(  sJ t        |d   |d   |d         D ]!  \  }}}||||
fv sJ ||||fv sJ ||||	fv r!J  y )	Nra   ra   )rQ   rS   r   )rK   rK   r   )r"   r    r   r   r5   r   rK   r   r   r   _prominent_peaksr%   zipr   r(   x0y0i0x1y1i1x2y2i2outrg   xys                  r   test_isolated_peaksz&TestProminentPeaks.test_isolated_peaks7  s    "
B
B
Bb"fb"fb"f##E*3q6{a3q63q63q62 	%GAq!R$$$R$$$R$$$	%r   c                    t        j                  d      }d\  }}}d\  }}}d\  }}	}
||||f<   ||||f<   |
||	|f<   t        j                  |d       }t	        |d         dk(  sJ t        |d   |d   |d	         D ]  \  }}}||||
fv sJ ||||fv rJ  t        j                  |d
      }t	        |d         d	k(  sJ t        |d   |d   |d	         D ]  \  }}}|||
fv sJ |||fv sJ |||	fv rJ  y )Nr   )rQ   rS   r2   )rK   rK   rS   )r"   r    r2   )	thresholdr   r5   r   rK   rt   r   r   s                  r   test_thresholdz!TestProminentPeaks.test_thresholdF  sV   " 
B
B 
Bb"fb"fb"f##ET:3q6{a3q63q63q62 	%GAq!R$$$R$$$	% ##EQ73q6{a3q63q63q62 	!GAq!R= =R= =R= =	!r   c                 ~   t        j                  d      }d\  }}}d\  }}}d\  }}	}
||||f<   ||||f<   |
||	|f<   t        j                  |dd      }t	        |d   t        j
                  |f             t	        |d   t        j
                  |f             t	        |d	   t        j
                  |f             y )
Nr   )rS   rS   r   )r   r   r   )r   r   r   r5   )min_xdistancemin_ydistancer   r   rK   )r   r   r   r   r   r   )r   r(   r   r   r   r   r   r   r   r   r   r   s               r   test_peaks_in_contactz(TestProminentPeaks.test_peaks_in_contactZ  s    "
B
B
Bb"fb"fb"f##

 	SVRXXre_-SVRXXre_-SVRXXre_-r   c                 0   t        j                  d      }t        j                  dt              }d|d<   d|d<   |j                         }t	        j
                  ||t        j                  dt              ddd       t        j                  ||k(        sJ y )	Nr   r   r/   r5   r4   r   Fr   )	r   r   r   r   r   r   r   r   r   )r   r(   r[   labelsins       r   test_input_labels_unmodifiedz/TestProminentPeaks.test_input_labels_unmodifiedk  s    "(C(dt;;=ggfd+ 	
 vvf()))r   c                 t   t        j                  ddgt              }t        j                  d      \  }}|dz  dz  dz   }|dz  dz  dz   }d|||z
  dz  ||z
  dz  z   dk  <   t	        j
                  |      \  }}t	        j                  |      }t        j                  |dd	|
      }	t        |	      dk(  sJ y )N  r0   )r   r   r!   r2   TrK   @   F)r   rz   r[   iq  )
r   r   r   r   r~   labeldistance_transform_edtr   r   r%   )
r   maskr   r   x_cy_cr[   num_objsdist	local_maxs
             r   test_many_objectsz$TestProminentPeaks.test_many_objects{  s    xxc
$/zz*%12glR2glR7;a#g!^q3w1n,t3499T?))$/''r%
	 9~$$$r   N)r   r   r   r   r   r   r   r  r   r   r   r   r   6  s    %!(."* %r   r   )	itertoolsnumpyr   r   numpy.testingr   r   r   scipyr   r~   skimage._shared._warningsr   skimage.featurer   r#   rc   r   markparametrizeproductranger   r   r   r   )r   s   0r   <module>r     s       U U   7   		r P Pf K/i//a%(CD7gYD#T	#TL=4( P% P%e Es   
B.
