
    a6d)                     p   d Z ddlZddlZddlmZ ddlmZ ddlm	Z	  G d d          Z
ej                            de	j        d	d
fe	j        d	d
fe	j        d	d
fe	j        d	d
fe	j        d	d
fe	j        d	d
fe	j        dd
fe	j        ddfe	j        dd
fe	j        d	dfg
          ej                            dej        ej        g          d                         Zej                            dddg          ej                            dg d          d                         Zej                            dg d          ej                            ddd
g          d                         Zej                            dg d          ej                            dg d          d                         Zd Zd ZdS )zX
Tests for Morphological footprints
(skimage.morphology.footprint)

Author: Damian Eads
    N)assert_equal)fetch)
footprintsc                   V    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S )TestFootprintsc                     t          dd          D ]>}t          j        |          }t          j        ||fd          }t          ||           ?dS )zTest square footprintsr      uint8dtypeN)ranger   squarenponesr   selfkactual_maskexpected_masks       Hlib/python3.11/site-packages/skimage/morphology/tests/test_footprints.pytest_square_footprintz$TestFootprints.test_square_footprint   s^    q! 	5 	5A$+A..KGQF':::M4444	5 	5    c                     t          dd          D ]R}t          dd          D ]?}t          j        ||          }t          j        ||fd          }t          ||           @SdS )zTest rectangle footprintsr   r	   r
   r   N)r   r   	rectangler   r   r   )r   ijr   r   s        r   test_rectangle_footprintz'TestFootprints.test_rectangle_footprint   s|    q! 	9 	9A1a[[ 9 9(21a88 "Ag > > >]K88889	9 	9r   c                     t          dd          D ]?}t          j        |          }t          j        |||fd          }t          ||           @dS )zTest cube footprintsr   r	   r
   r   N)r   r   cuber   r   r   r   s       r   test_cube_footprintz"TestFootprints.test_cube_footprint    s_    q! 	5 	5A$/!,,KGQ1IW===M4444	5 	5r   c                    t          j        t          |                    }d}t          |          D ]K}||         } ||          }|j        dk    r|d d t           j        f         }t          ||           |dz   }Ld S )Nr      r#   )r   loadr   sortedshapenewaxisr   )r   fnfuncmatlab_masksr   arrnamer   r   s           r   strel_workerzTestFootprints.strel_worker'   s    wuRyy))l++ 	 	G(1M$q''K"d** -aaam <444AAA	 	r   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   }d S )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_3d2   s   wuRyy))l++ 	 	G(1M$q''K"d** -aaam < M'*1,--AAqqq!!!G(<===AAAq!!!G(<===AAAqqq!G(<===AAA	 	r   c                 F    |                      dt          j                   dS )zTest disk footprintsdata/disk-matlab-output.npzN)r,   r   diskr   s    r   test_footprint_diskz"TestFootprints.test_footprint_diskC   s!    7IIIIIr   c                 F    |                      dt          j                   dS )zTest diamond footprintsdata/diamond-matlab-output.npzN)r,   r   diamondr5   s    r   test_footprint_diamondz%TestFootprints.test_footprint_diamondG   s"    :J<NOOOOOr   c                 F    |                      dt          j                   dS )zTest ball footprintsr3   N)r1   r   ballr5   s    r   test_footprint_ballz"TestFootprints.test_footprint_ballK   s!    :JOLLLLLr   c                 F    |                      dt          j                   dS )zTest octahedron footprintsr8   N)r1   r   
octahedronr5   s    r   test_footprint_octahedronz(TestFootprints.test_footprint_octahedronO   s-    ='2	4 	4 	4 	4 	4r   c                 n   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          ||           dS )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#   r   r	      )r   r#   r   r#   r#   r#   r#   N)r   arrayr
   r   octagonr   r   expected_mask1actual_mask1expected_mask2actual_mask2s        r   test_footprint_octagonz%TestFootprints.test_footprint_octagonT   s
   #D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D
#F )+2 2 2 ")!Q//999#,99#,99#.57X? ? ? ")!Q//^\222^\222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                   dS )	zTest ellipse footprintsrB   rC   r   r	   rD   rE   r#   N)r   rF   r
   r   ellipser   TrH   s        r   test_footprint_ellipsez%TestFootprints.test_footprint_ellipsej   s&   #D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#F )+2 2 2 ")!Q//999#,99#,99#.57X? ? ? ")!Q//^\222^\222^Z%71%=%=%?@@@^Z%71%=%=%?@@@@@r   c                 v   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          ||           d
S )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      rE   r#   N)r   rF   r
   r   starr   rH   s        r   test_footprint_starz"TestFootprints.test_footprint_star~   s   #J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#L )+2 2 2 "q))999#,99#,99#.57X? ? ? "q))^\222^\22222r   N)__name__
__module____qualname__r   r   r    r,   r1   r6   r:   r=   r@   rM   rQ   rU    r   r   r   r      s        5 5 59 9 95 5 5	 	 	  "J J JP P PM M M4 4 4
3 3 3,A A A(3 3 3 3 3r   r   z/function, args, supports_sequence_decomposition)rD   T)rD   rS   Fr   c                      | |di}|j         k    sJ |r& | |dd}t          fd|D                       sJ d S d S )Nr   sequence)r   decompositionc                 2    g | ]}|d          j         k    S )r   r   ).0fp_tupler   s     r   
<listcomp>z(test_footprint_dtype.<locals>.<listcomp>   s%    HHH8HQK%.HHHr   )r   all)functionargssupports_sequence_decompositionr   	footprintr[   s      `  r   test_footprint_dtyperf      s    & $,e,,I?e####& J8TjIIIHHHHxHHHIIIIIJ JIIr   rb   r4   r<   radius)r#   r.   rD   rS   r	            	   
      2   K   d   c                    t          t          |           } ||dd           } ||dd          }t          j        |          }|j        |j        k    sJ t	          j        t	          j        |                    t                    |                    t                    z
                      }|dk    r
|dk    sJ d S | dk    rdnd}||j	        z  |k    sJ d S )	NFstrict_radiusr\   r[   r#   r   r4   g?g333333?)
getattrr   footprint_from_sequencer&   r   sumabsastyper/   size)rb   rg   fp_funcexpectedfootprint_sequenceapproximateerror	max_errors           r   !test_nsphere_series_approximationr      s     j(++GwvU$GGGH u/9; ; ;45GHHK.... F26(//#..1C1CC1H1HHIIJJE{{zzzzzz#v--CC4	x}$	111111r   )	r#   r.   rD   rS   r	   rl   rm   rn   ro   rs   c                 x   t           j        } || |d           } || |d          }t          j        |          }|j        |j        k    sJ t	          j        t	          j        |                    t                    |                    t                    z
                      }d}||j	        z  |k    sJ d S )Nrr   crosses皙?)
r   r4   ru   r&   r   rv   rw   rx   r/   ry   )rg   rs   rz   r{   r|   r}   r~   r   s           r   test_disk_crosses_approximationr      s     oGwv]$OOOH }/8: : :45GHHK.... F26(//#..1C1CC1H1HHIIJJEI8= I------r   width)rD   rj   rm   rn   heightc                 x   t           j        } || |d           } || |d          }t          j        |          }|j        |j        k    sJ t	          j        t	          j        |                    t                    |                    t                    z
                      }d}||j	        z  |k    sJ d S )N)r\   r   r   )
r   rO   ru   r&   r   rv   rw   rx   r/   ry   )r   r   rz   r{   r|   r}   r~   r   s           r   "test_ellipse_crosses_approximationr      s      GwufD999H iHHH45GHHK.... F26(//#..1C1CC1H1HHIIJJEI8= I------r   c                      t          j        t                    5  t          j        dd           d d d            d S # 1 swxY w Y   d S Ni'  r[   )rg   r\   )pytestraises
ValueErrorr   r4   rY   r   r   *test_disk_series_approximation_unavailabler          	z	"	" @ @uJ????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @   >AAc                      t          j        t                    5  t          j        dd           d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   r<   rY   r   r   *test_ball_series_approximation_unavailabler      r   r   )__doc__numpyr   r   numpy.testingr   skimage._shared.testingr   skimage.morphologyr   r   markparametrizer4   r<   r   r   r9   r?   r   rO   rG   rT   r
   float64rf   r   r   r   r   r   rY   r   r   <module>r      s         & & & & & & ) ) ) ) ) ) ) ) ) ) ) )E3 E3 E3 E3 E3 E3 E3 E3P 5	$%	$%		D$'	$%		T4(		d+		vt,		VU+		VT*	$&  28RZ"899J J :9  J ff%566 $) $) $) * *2 2* * 762" #B#B#BCC5$-88. . 98 DC. ...11>>>22
. 
. 32 21
.@ @ @@ @ @ @ @r   