
    hP                     |    S SK rS SKJrJrJr  S SKJrJr  S SKJr  S SK	J
r
  S SKJrJr  SrSS jr " S	 S
\5      rg)    N)max_treearea_closingarea_opening)max_tree_local_maximadiameter_opening)diameter_closing)invert)assert_array_equalTestCaseg-q=c                    U" X40 UD6n[        Xb5        [        R                  [        R                  4 H9  nU R	                  U5      nU" X40 UD6nUR	                  U5      n	[        Xi5        M;     U R	                  [        R
                  5      n
U
S-  n
UR	                  [        R
                  5      nUS-  nU(       a  US-  nOUn[        R                  [        R
                  4 HX  nU
R	                  U5      nU" X40 UD6nUR	                  U5      n	SU	-  SU-  -
  nUS:  R                  5       nU[        :  a  MX   e   U R	                  [        R                  5      nUS-
  nUR	                  [        R                  5      nUS-
  n[        R                  [        R                  [        R                  [        R                  4 H;  nUR	                  U5      nU" UU40 UD6nUR	                  U5      n[        UU5        M=     g )Ng     o@      ?   )r
   npuint32uint64astypefloat64float32sumepsint16int8int32int64)imgparamexpectedfuncparam_scalekeywordsoutdtimg_castexp_cast
data_floatexpected_float
param_cast	data_cast	error_imgerror
img_signed
exp_signedimg_sexp_ss                       `/var/www/fran/franai/venv/lib/python3.13/site-packages/skimage/morphology/tests/test_max_tree.py_full_type_testr0      s   
s
&X
&Cs% yy"))$::b>8/h/??2&3)	 % BJJ'Je#J__RZZ0N#e+NU]

zz2::&%%b)	95H5!((,H$us{2	c!&&(s{{ ' BHH%Jc!J*Jc!Jww"((BHH5!!"%5%,8,!!"%3&	 6    c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestMaxtree5   c                    [         R                  n[         R                  " / SQ/ SQ/ SQ/ SQ/US9n[         R                  " / SQ/ SQ/ SQ/ S	Q/[         R                  S9n[         R                  " / S
Q[         R                  S9n[         R                  [         R                  [         R
                  [         R                  4 H6  nUR                  U5      n[        USS9u  pV[        XS5        [        Xd5        M8     [         R                  [         R                  [         R                  [         R                  4 H;  nUR                  U5      nUS-
  n[        USS9u  pV[        XS5        [        Xd5        M=     UR                  [        5      nUS-
  S-  n[         R                  [         R                  4 H6  nUR                  U5      n[        USS9u  pV[        XS5        [        Xd5        M8     g)zTest for max tree)
      r7   	   )   r9   r8   r8   )r7   r9   r6   r6   )r8   r8   r6   r6   dtype)      r<   r<   )r=   r=      r>   )r<   r=   r>   r6   )r>   r>   r6   r6   )r=      r8   r<      r7   r>      r9         r   r6            r@   connectivityr8   r7   g       @N)r   uint8arrayr   uint16r   r   r   r   r
   r   r   r   floatr   r   )	selfimg_typer   P_expS_expPSimg_shifted	img_floats	            r/   test_max_treeTestMaxtree.test_max_tree6   sx   88hhL..I

 <Grxx
 B"((
 299biiCH**X&CCa0DAq(q(	 D "((BHHbhh?H**X&C'KKa8DAq(q( @ JJu%	]c)	RZZ0H!((2IIA6DAq(q(	 1 	r1   c                 >   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/[         R                  S9n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/[         R                  S9n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/[         R                  S9n[        USU[        SS9  [        USU[        SS9  [        [        U5      SS9u  pE[        USU[        XES9  g)z/Test for Area Closing (2 thresholds, all types))   rX   rX   rX   rX   rX   rX   rX   rX   rX   rX   rX   )rX      rY   rX   rY   rX   rY   rY   rX   rX   rY   rX   )rX   rY   (   rX   rX   rX   rX   rX   rX   rX   rZ   rX   )rX   rX   rX   rX   d   rX   r[   r[   rX   rX   rY   rX   )rY   rY   rY   rY   rY   rY   rY   rX   rY   rY      r\   )rY   r\   rY   rY   rY   r\   rY   rX   r\   r\   r\   rZ   )rY   rY   rY   r[   rY   rY   rY   rX   r\   r\   r\   r\   )rY   rY   rY   r[   rY   rY   rY   rX   rY   rY   r\   r\   )rY   rY   rY   rY   rY   rZ   rY   rX   rX   r[   r\   r\   )rY   rZ   r\   r\   r\   rZ   rY   r\   rY   rY   r\   r\   )rY   rY   rY   rY   rY   rY   rY   r\   r\   r\   r\   r\   r:   )rX   rY   rY   rX   rX   rX   rY   rY   rX   rX   rY   rX   )rX   rY   rY   rX   rX   rX   rX   rX   rX   rX   rY   rX   )rX   rX   rX   rX   rX   rX   r[   r[   rX   rX   rY   rX   )rY   r\   rY   rY   rY   r\   rY   rX   r\   r\   r\   r\   )rY   rY   rY   rY   rY   rZ   rY   rX   rX   rY   r\   r\   )rY   rY   r\   r\   r\   rZ   rY   r\   rY   rY   r\   r\   )rX   rY   rY   rX   rX   rX   rX   rX   rX   rX   rX   rX   )rY   rY   rY   rY   rY   rY   rY   rX   rX   rX   r\   r\   )rY   rY   rY   rY   rY   rY   rY   rX   r\   r\   r\   r\   )rY   rY   rY   rY   rY   rY   rY   rX   rX   rY   r\   r\   )rY   rY   r\   r\   r\   rY   rY   r\   rY   rY   r\   r\   r@   rG   r=   parenttree_traverserN)r   rJ   rI   r0   r   r   r	   rM   r   
expected_2
expected_4rQ   rR   s         r/   test_area_closingTestMaxtree.test_area_closing]   s    hhLLJLLLKLLKJL ((
& XXLLLLLLLLLKKL ((

& XXLLLLLLLLLLLL ((

& 	Q
LqIQ
LqIs!4Q
LUr1   c                 ,   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/[         R                  S9n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/[         R                  S9n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/[         R                  S9n[        USU[        SS9  [        USU[        SS9  [        USS9u  pE[        USU[        XES9  g)z/Test for Area Opening (2 thresholds, all types))rF   rF   rF   rF   rF   rF   rF   rF   rF   rF   rF   rF   )rF   7   rf   rF   rf   rF   rf   rf   rF   rF   rf   rF   )rF   rf      rF   rF   rF   rF   rF   rF   rF   rg   rF   )rF   rF   rF   rF      rF   rh   rh   rF   rF   rf   rF   )rf   rf   rf   rf   rf   rf   rf   rF   rf   rf   r   r   )rf   r   rf   rf   rf   r   rf   rF   r   r   r   rg   )rf   rf   rf   rh   rf   rf   rf   rF   r   r   r   r   )rf   rf   rf   rh   rf   rf   rf   rF   rf   rf   r   r   )rf   rf   rf   rf   rf   rg   rf   rF   rF   rh   r   r   )rf   rg   r   r   r   rg   rf   r   rf   rf   r   r   )rf   rf   rf   rf   rf   rf   rf   r   r   r   r   r   r:   )rF   rf   rf   rF   rF   rF   rf   rf   rF   rF   rf   rF   )rF   rf   rf   rF   rF   rF   rF   rF   rF   rF   rf   rF   )rF   rF   rF   rF   rF   rF   rh   rh   rF   rF   rf   rF   )rf   r   rf   rf   rf   r   rf   rF   r   r   r   r   )rf   rf   rf   rf   rf   rg   rf   rF   rF   rf   r   r   )rf   rf   r   r   r   rg   rf   r   rf   rf   r   r   )rF   rf   rf   rF   rF   rF   rF   rF   rF   rF   rF   rF   )rf   rf   rf   rf   rf   rf   rf   rF   rF   rF   r   r   )rf   rf   rf   rf   rf   rf   rf   rF   r   r   r   r   )rf   rf   rf   rf   rf   rf   rf   rF   rF   rf   r   r   )rf   rf   r   r   r   rf   rf   r   rf   rf   r   r   r@   rG   r=   r]   N)r   rJ   rI   r0   r   r   r`   s         r/   test_area_openingTestMaxtree.test_area_opening   s    hh@@BC@><=?@<; ((
& XX@@@B@>:=??;; ((

& XX@@@@@>:<>>:; ((

& 	Q
LqIQ
LqI!,Q
LUr1   c                 >   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ SQ/[         R                  S
9n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ SQ/[         R                  S
9n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/[         R                  S
9n[        USU[        SS9  [        USU[        SS9  [        [        U5      SS9u  pE[        USU[        XES9  g)3Test for Diameter Opening (2 thresholds, all types))a   _   ]   \   [   Z   rr   rr   rq   rp   ro   rn   )rn   ro   rq   Y   X   rt   rt   rt   rt   rs   rq   ro   )ro   ?   ru   ru   ru   V   rv   rv   W   +   rx   rq   )rp   rs   rt   rv   U   ry   T   ry   ry   rx   rx   rs   )rq   rt   rw   ry   rz   rz   S   rz   rz   ry   rw   rt   )rr   rt   rv   ry   rz   r{   r{   r{   rz   ry   rv   rt   )rr   rt   rv   rz   r{   r{   R   r{   r{   rz   rv   rt   )rp   rs      r}   ry   ry   rz   ry   ry   r>   r>   rs   )ro   rq   r}   r}   rw   rv   rv   rv   rw   rt   r>   rq   r:   )rr   rt   rv   rz   r{   r{   r{   r{   r{   rz   rv   rt   )ro   ru   ru   ru   ru   rv   rv   rv   rw   rz   rz   rq   )rp   rs   rt   rv   ry   ry   rz   ry   ry   rz   rz   rs   )rp   rs   rz   rz   ry   ry   rz   ry   ry   rz   rz   rs   )ro   rq   rz   rz   rw   rv   rv   rv   rw   rt   rz   rq   r@   rG   r=   r]   N)r   rJ   rI   r0   r   r   r	   r   rM   r   ex2ex4rQ   rR   s         r/   test_diameter_closing!TestMaxtree.test_diameter_closing   s   hh@@@@@@@@@>?@ ((
$ hh@@@@@@@@@>?@ ((
$ hh@@@@@@@@@@@@ ((
& 	Q%5AFQ%5AFs!4Q%5aRr1   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S
Q/ SQ/ SQ/ SQ/ S	Q/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        USU[        SS9  [        USU[        SS9  [	        USS9u  pE[        USU[        XES9  g)rl   )r?   r9   r8   rD   rB   rB   rB   rB   rB   rD   r8   r9   )r9   r6   rD   rC   rE   rE   rF   rE   rE   rC   rD   r6   )r8   rZ   rZ   rZ   rZ      r   r   r   <   r   rD   )rD   rC   rF   r         r   r   r   r   r   rC   )rB   rE   r   r   r      r   r   r   r   r   rE   )rB   rE   r   r   r   r   r   r   r   r   r   rE   )rB   rF   r   r   r   r      r   r   r   r   rF   )rD   rC   P   r   r   r   r   r   r   r[   r[   rC   )r8   rD   r   r   r   r   r   r   r   rF   r[   rD   )rB   rF   r   r   r   r   r   r   r   r   r   rF   )r8   rZ   rZ   rZ   rZ   r   r   r   r   r   r   rD   )rD   rC   rF   r   r   r   r   r   r   r   r   rC   )rD   rC   r   r   r   r   r   r   r   r   r   rC   )r8   rD   r   r   r   r   r   r   r   rF   r   rD   r@   rG   r=   r]   N)r   rJ   r0   r   r   r~   s         r/   test_diameter_opening!TestMaxtree.test_diameter_opening"  s    hh;??@@@@@@B@?
" hh;??@@@@@@B@?
" hh;??@@@@@@@??
$ 	Q%5AFQ%5AF!,Q%5aRr1   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/
[         R                  S	9n[         R                  " / S
Q/ S
Q/ SQ/ SQ/ S
Q/ SQ/ S
Q/ SQ/ SQ/ S
Q/
[         R                  S	9n[         R                  [         R                  [         R                  [         R
                  4 H  nUR                  U5      n[        USS9nUS:  n[        X&5        UR                  UR                  :X  d   e[         R                  " U5      S:X  d   e[        U5      u  px[        XGUS9n[        X&5        UR                  UR                  :X  d   e[         R                  " U5      S:X  a  M   e   g)z#local maxima for various data types)
r6   rD   rC   rE   rE   rF   rE   rE   rC   rD   )
rD   rC   rF   r   r   r   r   r   rF   rC   )
rC   rF   rZ   rZ   r   r   r   r   r   rF   )
rE   r   rZ   rZ   r   r   r   r   r   r   )
rE   r   r   r   r   r   r   r   r   r   )
rF   r   r   r   r   r   r   r   r   r   )
rE   r   r   r   r   r   r   r[   r[   r   )
rC   rF   r   r   r   r   r   r[   r[   rF   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<   rG   r   r?   r]   N)r   rJ   rI   r   r   r   r   r   r
   r;   maxr   )	rM   dataexpected_resultr;   	test_datar!   out_binrQ   rR   s	            r/   test_local_maximaTestMaxtree.test_local_maxima^  sD   xx8888888::8 ((
 ((.......... ))
 hh		277BHH=EE*I'	BCAgG899 5 555566#;!###I&DA'	ANC899 5 555566#;!### >r1   c                 t   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/
[         R                  S	9n[         R                  " / S
Q/ S
Q/ SQ/ SQ/ S
Q/ SQ/ S
Q/ SQ/ SQ/ S
Q/
[         R                  S	9n[	        USS9nUS:  n[        X$5        [         R                  " U5      S:X  d   eg)zspecific tests for float type)
g?)\(?p=
ף?Q?r   333333?r   r   r   r   )
r   r   r   {Gz?r   r   r   r   r   r   )
r   r   皙?r   
ףp=
?r   r   333333?r   r   )
r   r   r   r   RQ?r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )
r   gK?r   r   g&1?g?r   r   r   r   )
r   r   皙?r   r   r   r   g      @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<   rG   r   rA   N)r   rJ   r   rI   r   r
   r   )rM   r   r   r!   r   s        r/   test_extrema_floatTestMaxtree.test_extrema_float  s    xxLLLLLNLJJL **
  ((.......... ((
" $Dq9'?4vvc{ar1   c                 0   [         R                  " S[         R                  S9n[         R                  " S[         R                  S9nSUSSS2SS24'   SUS'   SUSSS2SS24'   SUS'   SUSS	2SS4'   SUSS	2SS4'   SUS
SS	2SS	24'   SUS'   SUSSS2SS24'   US
S2SS	2SS	24==   S-  ss'   SUS
SS	2SS	24'   SUSSS2SS24'   SUSS	2SS	2SS	24'   SUS'   SUS'   [	        U5      nUS
:  n[        X$5        [         R                  " U5      S:X  d   eg)z$tests the detection of maxima in 3D.)r7   r7   r7   r:   r[   r<   r>   rY   )r@   r@   r@   r?   r7   r   )r<   rA   rA   r@   r9   2   rA   r\   )r9   r9   r9   N)r   zerosrI   r   r   r
   r   )rM   r   local_maximar!   r   s        r/   test_3dTestMaxtree.test_3d  s   hhy1xx	; AqsAaCKGAqsAaCK !W AaCAI"#QqS!QY AqsAaCKGAqsAaCKAaC1acMb $%Q!QqS[!$%Q!QqS[! !AaC1acMG !W#C('<1vvc{ar1    N)__name__
__module____qualname____firstlineno__rU   rc   ri   r   r   r   r   r   __static_attributes__r   r1   r/   r3   r3   5   s7    %NAVFAVF=S~:Sx.$`& P r1   r3   )F)numpyr   skimage.morphologyr   r   r   r   r   r   skimage.utilr	   skimage._shared.testingr
   r   r   r0   r3   r   r1   r/   <module>r      s3     C C F /  @&'R` ( ` r1   