
    _h-                     n   d Z ddlZddlZddlmZ ddlmZmZ ddl	m
Z
 ddl	mZmZ  G d d      Zej                  j                  d	e
j                   d
dfe
j"                  d
dfe
j$                  d
dfe
j&                  d
dfeddfe
j(                  ddfe
j*                  ddfe
j,                  d
dfg      ej                  j                  dej.                  ej0                  g      d               Zej                  j                  dddg      ej                  j                  dg d      d               Zej                  j                  dg d      ej                  j                  dddg      d               Zej                  j                  dg d      ej                  j                  dg d      d               Zd Zd Zej                  j                  d edg      d!        Z ej                  j                  d edg      ej                  j                  d"ddg      d#               Z! G d$ d%      Z"y)&zX
Tests for Morphological footprints
(skimage.morphology.footprint)

Author: Damian Eads
    N)assert_equal)fetchassert_stacklevel)
footprints)footprint_rectanglefootprint_from_sequencec                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestFootprintsc                     t        j                  t        |            }d}t        |      D ]F  }||   } ||      }|j                  dk(  r|d d t         j
                  f   }t        ||       |dz   }H y )Nr      r   )nploadr   sortedshapenewaxisr   )selffnfuncmatlab_maskskarrnameexpected_maskactual_masks           b/var/www/html/engine/venv/lib/python3.12/site-packages/skimage/morphology/tests/test_footprints.pystrel_workerzTestFootprints.strel_worker   ss    wwuRy)l+ 	G(1Mq'K""d* -am <4AA	    c           	         t        j                  t        |            }d}t        |      D ]  }||   } ||      }|j                  dk(  r|d d t         j
                  f   }t        |j                  d   dz        }t        |||d d d d f          t        ||d d |d d f          t        ||d d d d |f          |dz   } y )Nr   r      r   )r   r   r   r   r   r   intr   )	r   r   r   r   r   r   r   r   cs	            r   strel_worker_3dzTestFootprints.strel_worker_3d   s    wwuRy)l+ 	G(1Mq'K""d* -am < M''*Q./AAq!G(<=Aq!G(<=Aq!G(<=AA	r   c                 D    | j                  dt        j                         y)zTest disk footprintsdata/disk-matlab-output.npzN)r   r   diskr   s    r   test_footprint_diskz"TestFootprints.test_footprint_disk.   s    7Ir   c                 D    | j                  dt        j                         y)zTest diamond footprintsdata/diamond-matlab-output.npzN)r   r   diamondr&   s    r   test_footprint_diamondz%TestFootprints.test_footprint_diamond2   s    :J<N<NOr   c                 D    | j                  dt        j                         y)zTest ball footprintsr$   N)r"   r   ballr&   s    r   test_footprint_ballz"TestFootprints.test_footprint_ball6   s    :JOOLr   c                 D    | j                  dt        j                         y)zTest octahedron footprintsr)   N)r"   r   
octahedronr&   s    r   test_footprint_octahedronz(TestFootprints.test_footprint_octahedron:   s    =z?T?TUr   c                 t   t        j                  g dg dg dg dg dg dg dg dg dg dg dgt         j                        }t        j                  dd      }t        j                  g dg d	g dgt         j                        }t        j                  d
d
      }t        ||       t        ||       y)zTest octagon footprints)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   dtype      )r   r   r   r   r   r   r   N)r   arrayuint8r   octagonr   r   expected_mask1actual_mask1expected_mask2actual_mask2s        r   test_footprint_octagonz%TestFootprints.test_footprint_octagon>   s    11111111111 ((
  "))!Q/9i"C288T!))!Q/^\2^\2r   c           
         t        j                  g dg dg dg dg dg dg dgt         j                        }t        j                  dd      }t        j                  g dg dg dgt         j                        }t        j                  dd      }t        ||       t        ||       t        |t        j                  dd      j                         t        |t        j                  dd      j                         y)	zTest ellipse footprintsr3   r4   r5   r7   r8   r9   r   N)r   r:   r;   r   ellipser   Tr=   s        r   test_footprint_ellipsez%TestFootprints.test_footprint_ellipseV   s    1111111 ((
 "))!Q/9i"C288T!))!Q/^\2^\2^Z%7%71%=%?%?@^Z%7%71%=%?%?@r   c                 |   t        j                  g dg dg dg dg dg dg dg dg dg dg dg dg dgt         j                        }t        j                  d      }t        j                  g dg dg dgt         j                        }t        j                  d	      }t        ||       t        ||       y
)zTest star footprints)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   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r5      r9   r   N)r   r:   r;   r   starr   r=   s        r   test_footprint_starz"TestFootprints.test_footprint_starl   s    7777777777777 ((!
$ "q)9i"C288T!q)^\2^\2r   N)__name__
__module____qualname__r   r"   r'   r+   r.   r1   rB   rF   rJ    r   r   r
   r
      s4    	"JPMV30A,3r   r
   z/function, args, supports_sequence_decompositionr8   T))r8   r7   r8   rH   Fr6   c                      | |d|i}|j                   |k(  sJ |r5 | ||dd}t        |D cg c]  }|d   j                   |k(   c}      sJ y y c c}w )Nr6   sequence)r6   decompositionr   )r6   all)functionargssupports_sequence_decompositionr6   	footprintrR   fp_tuples          r   test_footprint_dtyperZ      sf      $,e,I??e###&TjIxH8HQK%%.HIII 'Hs   ArU   r%   r-   radius)r   r   r8   rH   r7            	   
      2   K   d   c                    t        t        |       } ||dd       } ||dd      }t        j                  |      }|j                  |j                  k(  sJ t	        j
                  t	        j                  |j                  t              |j                  t              z
              }|dk(  r|dk(  sJ y | dk(  rdnd}||j                  z  |k  sJ y )	NFstrict_radiusrS   rR   r   r   r%   g?g333333?)
getattrr   r   r   r   sumabsastyper    size)rU   r[   fp_funcexpectedfootprint_sequenceapproximateerror	max_errors           r   !test_nsphere_series_approximationrs      s     j(+GvU$GH uJW445GHK... FF266(//#.1C1CC1HHIJE{zz#v-C4	x}}$	111r   )	r   r   r8   rH   r7   r`   ra   rb   rc   rg   c                 ~   t         j                  } || |d       } || |d      }t        j                  |      }|j                  |j                  k(  sJ t	        j
                  t	        j                  |j                  t              |j                  t              z
              }d}||j                  z  |k  sJ y )Nrf   crosses皙?)
r   r%   r   r   r   ri   rj   rk   r    rl   )r[   rg   rm   rn   ro   rp   rq   rr   s           r   test_disk_crosses_approximationrw      s     ooGv]$OH m9 445GHK... FF266(//#.1C1CC1HHIJEI8== I---r   width)r8   r^   ra   rb   heightc                 ~   t         j                  } || |d       } || |d      }t        j                  |      }|j                  |j                  k(  sJ t	        j
                  t	        j                  |j                  t              |j                  t              z
              }d}||j                  z  |k  sJ y )NrS   ru   rv   )
r   rD   r   r   r   ri   rj   rk   r    rl   )rx   ry   rm   rn   ro   rp   rq   rr   s           r   "test_ellipse_crosses_approximationr|      s       GufD9H iH445GHK... FF266(//#.1C1CC1HHIJEI8== I---r   c                      t        j                  t              5  t        j                  dd       d d d        y # 1 sw Y   y xY wNi'  rR   )r[   rS   )pytestraises
ValueErrorr   r%   rN   r   r   *test_disk_series_approximation_unavailabler      5    	z	" @uJ?@ @ @	   ;Ac                      t        j                  t              5  t        j                  dd       d d d        y # 1 sw Y   y xY wr~   )r   r   r   r   r-   rN   r   r   *test_ball_series_approximation_unavailabler      r   r   as_sequencec                    t        j                  g dg dg dgt         j                        }t        j                  g dg dg dgt         j                        }| 0 | |df|j                  dfg      } | |df|j                  dfg      }t	        j
                  |      }t        |      t        |      u sJ t        ||       y )N)r   r   r   )r   r   r   )r   r   r   r5   r   r8   )r   r:   r;   rE   r   mirror_footprinttyper   )r   rX   expected_res
actual_ress       r   test_mirror_footprintr      s    )Y	:BHHEI88Y	9=RXXNL)Q)++q1A BC	"\1$57J#KL,,Y7Jj!1111z*r   pad_endc                 |   t        j                  ddgddgddggt         j                        }|du rddgnddg}t        j                  ||      }| 0 | |df|j                  dfg      } | |df|j                  dfg      }t        j                  ||	      }t        |      t        |      u sJ t        ||       y )
Nr   r   T)r   r   )r   r   )r   r   r   r8   )r   )	r   r:   r;   padrE   r   pad_footprintr   r   )r   r   rX   	pad_widthr   r   s         r   test_pad_footprintr      s     1a&1a&1a&1288<I$+tO &&9II66)Y/L)Q)++q1A BC	"\1$57J#KL)))WEJj!1111z*r   c                   4   e Zd Zej                  j                  dg d      ej                  j                  dg d      d               Zej                  j                  dg d      ej                  j                  dg d      ej                  j                  dg d      d                      Zej                  j                  dg d      ej                  j                  d	d
dg      d               Zej                  j                  dddg      d        Z	y)Test_footprint_rectangulei)r   r   r   r8   rH   jc                 h    t        j                  ||fd      }t        ||f      }t        ||       y Nr;   r5   r   onesr   r   )r   r   r   desiredactuals        r   test_rectanglez(Test_footprint_rectangule.test_rectangle   s0     ''1a&0$aV,VW%r   r   c                 l    t        j                  |||fd      }t        |||f      }t        ||       y r   r   )r   r   r   r   r   r   s         r   test_cuboidz%Test_footprint_rectangule.test_cuboid  s4     ''1a)73$aAY/VW%r   r   )rO   )r7   r7   )r7   r7   r]   rS   	separablerR   c                 b    t        |      }t        ||      }t        |      }t        ||       y )Nr{   )r   r   r   )r   r   rS   regular
decomposed
recomposeds         r   test_decompositionz,Test_footprint_rectangule.test_decomposition	  s.     &e,(mL
,Z8
Z)r   )r   rP   c                     t        |d      }d}t        j                  t        |      5 }t        |d      }ddd       t	               t        |       y# 1 sw Y   !xY w)zHShould fall back to decomposition="separable" for uneven footprint size.r   r{   z@decomposition='sequence' is only supported for uneven footprints)matchrR   N)r   r   warnsUserWarningr   r   )r   r   r   regexrecordr   s         r   *test_uneven_sequence_decomposition_warningzDTest_footprint_rectangule.test_uneven_sequence_decomposition_warning  s\     &e;GR\\+U3 	Jv(jIF	J&!VW%	J 	Js   AA"N)
rK   rL   rM   r   markparametrizer   r   r   r   rN   r   r   r   r      s   [[S/2[[S/2& 3 3&
 [[S/2[[S/2[[S/2& 3 3 3&
 [[W&?@[[_{J.GH* I A* [[WtVn5& 6&r   r   )#__doc__numpyr   r   numpy.testingr   skimage._shared.testingr   r   skimage.morphologyr   r   r   r
   r   r   r%   r-   r*   r0   rD   r<   rI   r;   float64rZ   rs   rw   r|   r   r   tupler   r   r   rN   r   r   <module>r      s@     & < ) Ks3 s3l 5	$%	$%			T4(			d+	i.			VU+			VT*	$&	 288RZZ"89J :J ff%56#ST2 U 72  #BC5$-8. 9 D. .1>2
. 3 2
.@@ 6	+ 7	+ 6T5M2
+ 3 7
+ &  &r   