
    9i-                     n   S r SSKrSSKrSSKJr  SSKJrJr  SSK	J
r
  SSK	JrJr   " S S5      r\R                  R                  S	\
R                   S
S4\
R"                  S
S4\
R$                  S
S4\
R&                  S
S4\SS4\
R(                  SS4\
R*                  SS4\
R,                  S
S4/5      \R                  R                  S\R.                  \R0                  /5      S 5       5       r\R                  R                  SSS/5      \R                  R                  S/ SQ5      S 5       5       r\R                  R                  S/ SQ5      \R                  R                  SSS/5      S 5       5       r\R                  R                  S/ SQ5      \R                  R                  S/ SQ5      S 5       5       rS rS r\R                  R                  S \S/5      S! 5       r \R                  R                  S \S/5      \R                  R                  S"SS/5      S# 5       5       r! " S$ S%5      r"g)&zX
Tests for Morphological footprints
(skimage.morphology.footprint)

Author: Damian Eads
    N)assert_equal)fetchassert_stacklevel)
footprints)footprint_rectanglefootprint_from_sequencec                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)TestFootprints   c                     [         R                  " [        U5      5      nSn[        U5       HF  nX5   nU" U5      nUR                  S:X  a  US S 2[         R
                  4   n[        Xg5        US-   nMH     g )Nr      r   )nploadr   sortedshapenewaxisr   )selffnfuncmatlab_maskskarrnameexpected_maskactual_masks           h/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/skimage/morphology/tests/test_footprints.pystrel_workerTestFootprints.strel_worker   sj    wwuRy)l+G(1Mq'K""d* -am <4AA ,    c           	         [         R                  " [        U5      5      nSn[        U5       H  nX5   nU" U5      nUR                  S:X  a  US S 2[         R
                  4   n[        UR                  S   S-  5      n[        XgUS S 2S S 24   5        [        XgS S 2US S 24   5        [        XgS S 2S S 2U4   5        US-   nM     g )Nr   r      r   )r   r   r   r   r   r   intr   )	r   r   r   r   r   r   r   r   cs	            r   strel_worker_3d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    U R                  S[        R                  5        g)zTest disk footprintsdata/disk-matlab-output.npzN)r   r   diskr   s    r   test_footprint_disk"TestFootprints.test_footprint_disk.   s    7Ir   c                 D    U R                  S[        R                  5        g)zTest diamond footprintsdata/diamond-matlab-output.npzN)r   r   diamondr)   s    r   test_footprint_diamond%TestFootprints.test_footprint_diamond2   s    :J<N<NOr   c                 D    U R                  S[        R                  5        g)zTest ball footprintsr'   N)r$   r   ballr)   s    r   test_footprint_ball"TestFootprints.test_footprint_ball6   s    :JOOLr   c                 D    U R                  S[        R                  5        g)zTest octahedron footprintsr-   N)r$   r   
octahedronr)   s    r   test_footprint_octahedron(TestFootprints.test_footprint_octahedron:   s    =z?T?TUr   c                 l   [         R                  " / 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S5      n[         R                  " / SQ/ S	Q/ SQ/[         R                  S9n[        R                  " S
S
5      n[        X5        [        X45        g)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_octagon%TestFootprints.test_footprint_octagon>   s    11111111111 ((
  "))!Q/9i"C288T!))!Q/^2^2r   c           
          [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/[         R                  S9n[        R                  " SS5      n[         R                  " / SQ/ SQ/ SQ/[         R                  S9n[        R                  " SS5      n[        X5        [        X45        [        U[        R                  " SS5      R                  5        [        U[        R                  " SS5      R                  5        g)	zTest ellipse footprintsr:   r;   r<   r>   r?   r@   r   N)r   rA   rB   r   ellipser   TrD   s        r   test_footprint_ellipse%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   [         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/ SQ/[         R                  S9n[        R                  " S5      n[         R                  " / SQ/ SQ/ SQ/[         R                  S9n[        R                  " S	5      n[        X5        [        X45        g
)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   r<      r@   r   N)r   rA   rB   r   starr   rD   s        r   test_footprint_star"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____firstlineno__r   r$   r*   r/   r3   r7   rI   rN   rS   __static_attributes__rU   r   r   r
   r
      s4    	"JPMV30A,3r   r
   z/function, args, supports_sequence_decompositionr?   T))r?   r>   r?   rQ   Fr=   c                     U " USU06nUR                   U:X  d   eU(       a;  U " XSS.6n[        U Vs/ s H  ofS   R                   U:H  PM     sn5      (       d   eg g s  snf )Nr=   sequence)r=   decompositionr   )r=   all)functionargssupports_sequence_decompositionr=   	footprintr^   fp_tuples          r   test_footprint_dtyperf      si      $,e,I??e###&TjIxHx8QK%%.xHIIII 'Hs   Ara   r(   r2   radius)r   r!   r?   rQ   r>            	   
      2   K   d   c                    [        [        U 5      nU" USS S9nU" USSS9n[        R                  " U5      nUR                  UR                  :X  d   e[        R
                  " [        R                  " UR                  [        5      UR                  [        5      -
  5      5      nUS:X  a	  US:X  d   eg U S:X  a  SOSnXcR                  -  U::  d   eg )	NFstrict_radiusr_   r^   r   r   r(   g?g333333?)
getattrr   r   r   r   sumabsastyper"   size)ra   rg   fp_funcexpectedfootprint_sequenceapproximateerror	max_errors           r   !test_nsphere_series_approximationr      s     j(+GvU$GH uJW445GHK... FF266(//#.1C1CC1HHIJE{zz#v-C4	}}$	111r   )	r   r!   r?   rQ   r>   rl   rm   rn   ro   rs   c                 v   [         R                  nU" XS S9nU" XSS9n[         R                  " U5      nUR                  UR                  :X  d   e[        R
                  " [        R                  " UR                  [        5      UR                  [        5      -
  5      5      nSnXcR                  -  U::  d   eg )Nrr   crosses皙?)
r   r(   r   r   r   ru   rv   rw   r"   rx   )rg   rs   ry   rz   r{   r|   r}   r~   s           r   test_disk_crosses_approximationr      s     ooGv$OH 9 445GHK... FF266(//#.1C1CC1HHIJEI== I---r   width)r?   rj   rm   rn   heightc                 v   [         R                  nU" XS S9nU" XSS9n[         R                  " U5      nUR                  UR                  :X  d   e[        R
                  " [        R                  " UR                  [        5      UR                  [        5      -
  5      5      nSnXcR                  -  U::  d   eg )Nr_   r   r   )
r   rL   r   r   r   ru   rv   rw   r"   rx   )r   r   ry   rz   r{   r|   r}   r~   s           r   "test_ellipse_crosses_approximationr      s       GuD9H iH445GHK... FF266(//#.1C1CC1HHIJEI== I---r   c                      [         R                  " [        5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = fNi'  r^   )rg   r_   )pytestraises
ValueErrorr   r(   rU   r   r   *test_disk_series_approximation_unavailabler      (    	z	"uJ? 
#	"	"	   :
Ac                      [         R                  " [        5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = fr   )r   r   r   r   r2   rU   r   r   *test_ball_series_approximation_unavailabler      r   r   as_sequencec                    [         R                  " / SQ/ SQ/ SQ/[         R                  5      n[         R                  " / SQ/ SQ/ SQ/[         R                  S9nU b0  U " US4UR                  S4/5      nU " US4UR                  S4/5      n[        R
                  " U5      n[        U5      [        U5      L d   e[        X#5        g )N)r   r   r   )r   r   r   )r   r   r   r<   r!   r?   )r   rA   rB   rM   r   mirror_footprinttyper   )r   rd   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*r   pad_endc                 |   [         R                  " SS/SS/SS//[         R                  5      nUSL a  SS/OSS/n[         R                  " X#5      nU b0  U " US4UR                  S4/5      nU " US4UR                  S4/5      n[
        R                  " X!S	9n[        U5      [        U5      L d   e[        XE5        g )
Nr   r   T)r   r   )r   r   )r   r   r!   r?   )r   )	r   rA   rB   padrM   r   pad_footprintr   r   )r   r   rd   	pad_widthr   r   s         r   test_pad_footprintr      s     1a&1a&1a&1288<I$+tO &&9II66)/L)Q)++q1A BC	"\1$57J#KL)))EJj!1111*r   c                   <   \ rS rSr\R
                  R                  S/ SQ5      \R
                  R                  S/ SQ5      S 5       5       r\R
                  R                  S/ SQ5      \R
                  R                  S/ SQ5      \R
                  R                  S/ SQ5      S 5       5       5       r\R
                  R                  S/ S	Q5      \R
                  R                  S
SS/5      S 5       5       r	\R
                  R                  SSS/5      S 5       r
Srg)Test_footprint_rectangule   i)r   r   r!   r?   rQ   jc                 ^    [         R                  " X4SS9n[        X45      n[        XC5        g NrB   r<   r   onesr   r   )r   r   r   desiredactuals        r   test_rectangle(Test_footprint_rectangule.test_rectangle   s*     ''1&0$aV,V%r   r   c                 b    [         R                  " XU4SS9n[        XU45      n[        XT5        g r   r   )r   r   r   r   r   r   s         r   test_cuboid%Test_footprint_rectangule.test_cuboid  s.     ''1)73$aAY/V%r   r   )r[   )r>   r>   )r>   r>   ri   r_   	separabler^   c                 X    [        U5      n[        XS9n[        U5      n[        XS5        g )Nr   )r   r   r   )r   r   r_   regular
decomposed
recomposeds         r   test_decomposition,Test_footprint_rectangule.test_decomposition	  s*     &e,(L
,Z8
Z)r   )r!   r\   c                     [        USS9nSn[        R                  " [        US9 n[        USS9nSSS5        [	        W5        [        WU5        g! , (       d  f       N&= f)zHShould fall back to decomposition="separable" for uneven footprint size.r   r   z@decomposition='sequence' is only supported for uneven footprints)matchr^   N)r   r   warnsUserWarningr   r   )r   r   r   regexrecordr   s         r   *test_uneven_sequence_decomposition_warningDTest_footprint_rectangule.test_uneven_sequence_decomposition_warning  sQ     &e;GR\\+U3v(jIF 4&!VW% 43s   A
ArU   N)rV   rW   rX   rY   r   markparametrizer   r   r   r   rZ   rU   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(   r2   r.   r6   rL   rC   rR   rB   float64rf   r   r   r   r   r   tupler   r   r   rU   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   